From 5c3fc61b41846a1600a92a4cd2be962bcce48271 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 12 Mar 2024 11:23:33 +0100 Subject: [PATCH 001/175] move taskNew to sub package --- .../src/tasks/global/{ => new}/__tests__/taskNew.test.ts | 0 packages/engine-core/src/tasks/global/{ => new}/taskNew.ts | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/engine-core/src/tasks/global/{ => new}/__tests__/taskNew.test.ts (100%) rename packages/engine-core/src/tasks/global/{ => new}/taskNew.ts (100%) diff --git a/packages/engine-core/src/tasks/global/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts similarity index 100% rename from packages/engine-core/src/tasks/global/__tests__/taskNew.test.ts rename to packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts diff --git a/packages/engine-core/src/tasks/global/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts similarity index 100% rename from packages/engine-core/src/tasks/global/taskNew.ts rename to packages/engine-core/src/tasks/global/new/taskNew.ts From db5405037daa4f91c5ae24126c2d5b0e8c4d9e27 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 12 Mar 2024 19:55:24 +0100 Subject: [PATCH 002/175] decouple taskNew into smaller modules --- packages/core/src/configs/workspaces.ts | 6 +- packages/core/src/projects/index.ts | 13 - .../src/tasks/global/new/projectGenerator.ts | 159 ++++ .../new/questions/bootstrapQuestions.ts | 116 +++ .../tasks/global/new/questions/confirmGit.ts | 45 + .../global/new/questions/confirmOverview.ts | 72 ++ .../global/new/questions/hasNodeModules.ts | 18 + .../global/new/questions/isRenativeProject.ts | 16 + .../global/new/questions/projectDetails.ts | 92 ++ .../tasks/global/new/questions/projectName.ts | 40 + .../new/questions/supportedPlatforms.ts | 35 + .../tasks/global/new/questions/template.ts | 154 ++++ .../tasks/global/new/questions/workspace.ts | 28 + .../src/tasks/global/new/taskNew.ts | 821 +----------------- .../engine-core/src/tasks/global/new/types.ts | 60 ++ .../engine-core/src/tasks/global/new/utils.ts | 3 + .../src/tasks/project/taskProjectConfigure.ts | 3 +- packages/rnv/coreTemplateFiles/.gitignore.tpl | 35 - 18 files changed, 869 insertions(+), 847 deletions(-) create mode 100644 packages/engine-core/src/tasks/global/new/projectGenerator.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/confirmGit.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/projectDetails.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/projectName.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/template.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/workspace.ts create mode 100644 packages/engine-core/src/tasks/global/new/types.ts create mode 100644 packages/engine-core/src/tasks/global/new/utils.ts delete mode 100644 packages/rnv/coreTemplateFiles/.gitignore.tpl diff --git a/packages/core/src/configs/workspaces.ts b/packages/core/src/configs/workspaces.ts index 5a7df95712..3285f9f01a 100644 --- a/packages/core/src/configs/workspaces.ts +++ b/packages/core/src/configs/workspaces.ts @@ -82,12 +82,14 @@ export const getWorkspaceConnectionString = (obj?: ConfigFileWorkspaces['workspa return connectMsg; }; -export const getWorkspaceOptions = (c: RnvContext) => - generateOptions(c.files.rnv.configWorkspaces?.workspaces, false, null, (i, obj, mapping, defaultVal) => { +export const getWorkspaceOptions = () => { + const c = getContext(); + return generateOptions(c.files.rnv.configWorkspaces?.workspaces, false, null, (i, obj, mapping, defaultVal) => { logDebug('getWorkspaceOptions'); return ` [${chalk().grey(i + 1)}]> ${chalk().bold(defaultVal)} ${getWorkspaceConnectionString(obj)}\n`; }); +}; export const loadWorkspacesConfigSync = () => { const c = getContext(); diff --git a/packages/core/src/projects/index.ts b/packages/core/src/projects/index.ts index d7f21824b6..f66b00de95 100644 --- a/packages/core/src/projects/index.ts +++ b/packages/core/src/projects/index.ts @@ -193,19 +193,6 @@ export const checkAndBootstrapIfRequired = async () => { return true; }; -export const checkAndCreateGitignore = async () => { - const c = getContext(); - - logDefault('checkAndCreateGitignore'); - const ignrPath = path.join(c.paths.project.dir, '.gitignore'); - if (!fsExistsSync(ignrPath)) { - logInfo('Your .gitignore is missing. CREATING...DONE'); - - copyFileSync(path.join(c.paths.rnv.dir, 'coreTemplateFiles/.gitignore.tpl'), ignrPath); - } - return true; -}; - export const configureFonts = async () => { const c = getContext(); diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts new file mode 100644 index 0000000000..e9c863939d --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -0,0 +1,159 @@ +import { + ConfigFileProject, + ConfigName, + PlatformKey, + chalk, + getApi, + getContext, + getWorkspaceOptions, + logDebug, + logTask, + writeFileSync, +} from '@rnv/core'; +import path from 'path'; +import { NewProjectData } from './types'; +import { configureGit } from './questions/confirmGit'; + +export const initNewProject = async () => { + const c = getContext(); + + c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); + c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); + + const data: NewProjectData = { + defaultVersion: '0.1.0', + defaultTemplate: '@rnv/template-starter', + defaultProjectName: 'helloRenative', + defaultAppTitle: 'Hello Renative', + defaultWorkspace: 'rnv', + optionPlatforms: {}, + optionTemplates: {}, + optionWorkspaces: getWorkspaceOptions(), + }; + return data; +}; + +export const generateNewProject = async ({ data }: { data: NewProjectData }) => { + logTask( + `generateNewProject:${data.optionTemplates.selectedOption}:${data.optionTemplates.selectedVersion}`, + chalk().grey + ); + + if (!data.optionTemplates.selectedVersion) { + return Promise.reject('No template version selected'); + } + if (!data.renativeTemplateConfig) { + return Promise.reject('No renativeTemplateConfig found'); + } + if (!data.optionTemplates.selectedOption) { + return Promise.reject('Current template not selected!'); + } + + const c = getContext(); + const templates: Record = {}; + + if (data.optionTemplates.selectedOption) { + templates[data.optionTemplates.selectedOption] = { + version: data.optionTemplates.selectedVersion, + }; + } + + delete data.renativeTemplateConfig.templateConfig; + delete data.renativeTemplateConfig.bootstrapConfig; + + const config: ConfigFileProject = { + platforms: {}, + ...data.renativeTemplateConfig, + ...data.renativeTemplateConfigExt, + projectName: data.projectName || 'my-project', + projectVersion: data.inputVersion || '0.1.0', + //TODO: TEMPORARY WORKAROUND this neds to use bootstrap_metadata to work properly + common: { + id: data.inputAppID || 'com.mycompany.myapp', + title: data.inputAppTitle || 'My App', + }, + workspaceID: data.optionWorkspaces.selectedOption || 'project description', + // paths: { + // appConfigsDir: './appConfigs', + // entryDir: './', + // platformAssetsDir: './platformAssets', + // platformBuildsDir: './platformBuilds', + // }, + defaults: { + supportedPlatforms: data.optionPlatforms.selectedOptions, + }, + engines: {}, + templates, + currentTemplate: data.optionTemplates.selectedOption, + isNew: true, + isMonorepo: false, + }; + + const platforms: ConfigFileProject['platforms'] = config.platforms || {}; + const engines: ConfigFileProject['engines'] = config.engines || {}; + const defaults: ConfigFileProject['defaults'] = config.defaults || {}; + + const supPlats = defaults.supportedPlatforms || []; + + // Remove unused platforms + Object.keys(platforms).forEach((k) => { + const key = k as PlatformKey; + if (!supPlats.includes(key)) { + delete platforms[key]; + } + }); + + const tplEngines = data.renativeTemplateConfig.engines; + if (tplEngines) { + // Remove unused engines based on selected platforms + supPlats.forEach((k) => { + const selectedEngineId = + platforms[k]?.engine || c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; + if (selectedEngineId) { + const selectedEngine = findEngineKeyById(selectedEngineId); + if (selectedEngine?.key) { + engines[selectedEngine.key] = tplEngines[selectedEngine.key]; + } + } + }); + } + + config.platforms = platforms; + config.engines = engines; + config.defaults = defaults; + + writeFileSync(c.paths.project.config, config); + + if (data.gitEnabled) { + await configureGit(); + } +}; + +export const logTelemetry = async ({ data }: { data: NewProjectData }) => { + try { + await getApi().analytics.captureEvent({ + type: 'newProject', + template: data.selectedInputTemplate, + platforms: data.inputSupportedPlatforms, + }); + } catch (e) { + logDebug(e); + } +}; + +const findEngineKeyById = (id: string) => { + const c = getContext(); + const engineTemplates = c.files.rnv.projectTemplates.config?.engineTemplates; + if (engineTemplates) { + const etk = Object.keys(engineTemplates); + for (let i = 0; i < etk.length; i++) { + const engine = engineTemplates[etk[i]]; + if (engine) { + if (engine.id === id) { + engine.key = etk[i]; + return engine; + } + } + } + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts new file mode 100644 index 0000000000..7c0ccac6ea --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts @@ -0,0 +1,116 @@ +import { ConfigFileTemplate, PromptParams, getContext, inquirerPrompt, logDebug } from '@rnv/core'; +import lSet from 'lodash/set'; +import type { NewProjectData } from '../types'; + +export const inquiryBootstrapQuestions = async ({ data }: { data: NewProjectData }) => { + const c = getContext(); + data.renativeTemplateConfigExt = {}; + const bootstrapQuestions = data.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; + const results: QuestionResults = {}; + const providedAnswers: Record = {}; + + if (c.program.answer) { + c.program.answer.forEach((a: string) => { + const key = a.split('=')[0]; + let value; + + try { + value = JSON.parse(a.split('=')[1]); + } catch (e) { + value = a.split('=')[1]; + } + + providedAnswers[key] = value; + }); + } + + await interactiveQuestion(results, bootstrapQuestions, providedAnswers); + + logDebug('asnwer', JSON.stringify(results, null, 2)); + + Object.keys(results).forEach((targetKey) => { + const objValue = results[targetKey].value; + + logDebug('setting', targetKey, objValue); + + if (targetKey) { + lSet(data.renativeTemplateConfigExt, targetKey, objValue); + } + }); +}; + +type ConfigProp = Required['bootstrapConfig']>['bootstrapQuestions'][number]['configProp']; + +type BootstrapQuestions = Required['bootstrapConfig']>['bootstrapQuestions']; + +type QuestionResults = Record< + string, + { + answer: string; + configProp: ConfigProp; + value: string; + } +>; + +const interactiveQuestion = async ( + results: QuestionResults, + bootstrapQuestions: BootstrapQuestions, + providedAnswers: Record +) => { + if (bootstrapQuestions?.length) { + for (let i = 0; i < bootstrapQuestions.length; i++) { + const q = bootstrapQuestions[i]; + const qKey = q?.configProp?.key || ''; + // inquirer will nest them if they look like an object + const qKeyClean = qKey.replace('.', '__'); + + const choicesObj: Record = {}; + if (q.options) { + q.options.forEach((opt) => { + choicesObj[opt.title] = opt; + }); + } + + // answer already passed into the command line + const answer = providedAnswers[qKey.replace('__', '.')]; + if (answer) { + let value; + if (typeof answer === 'string' && q.type === 'list') { + value = choicesObj[answer]?.value; + } else { + value = answer; + } + + results[qKey] = { + answer, + configProp: q.configProp, + value, + }; + } else { + const inqQuestion: PromptParams = { + name: qKeyClean, + type: q.type, + message: q.title, + choices: Object.keys(choicesObj), + }; + // eslint-disable-next-line no-await-in-loop + const result = await inquirerPrompt(inqQuestion); + const val = q.type === 'list' ? choicesObj[result[qKeyClean]]?.value : result[qKeyClean]; + results[qKey] = { + answer: result[qKeyClean], + configProp: q.configProp, + value: val, + }; + } + + if (choicesObj[results[qKey].answer]?.bootstrapQuestions) { + // eslint-disable-next-line no-await-in-loop + await interactiveQuestion( + results, + choicesObj[results[qKey].answer].bootstrapQuestions, + providedAnswers + ); + } + } + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts b/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts new file mode 100644 index 0000000000..7ecf27fc56 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts @@ -0,0 +1,45 @@ +import { + commandExistsSync, + executeAsync, + fsExistsSync, + getContext, + inquirerPrompt, + logInfo, + logTask, + logWarning, +} from '@rnv/core'; +import type { NewProjectData } from '../types'; +import path from 'path'; + +export const inquiryGit = async ({ data }: { data: NewProjectData }) => { + const c = getContext(); + const { gitEnabled, ci } = c.program; + data.gitEnabled = gitEnabled === 'true' || gitEnabled === true; + + if (gitEnabled === undefined && !ci) { + const response = await inquirerPrompt({ + name: 'gitEnabled', + type: 'confirm', + message: 'Do you want to set-up git in your new project?', + }); + + data.gitEnabled = response.gitEnabled; + } +}; + +export const configureGit = async () => { + const c = getContext(); + const projectPath = c.paths.project.dir; + logTask(`configureGit:${projectPath}`); + + if (!fsExistsSync(path.join(projectPath, '.git'))) { + logInfo('Your project does not have a git repo. Creating one...DONE'); + if (commandExistsSync('git')) { + await executeAsync('git init', { cwd: projectPath }); + await executeAsync('git add -A', { cwd: projectPath }); + await executeAsync('git commit -m "Initial"', { cwd: projectPath }); + } else { + logWarning("We tried to create a git repo inside your project but you don't seem to have git installed"); + } + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts new file mode 100644 index 0000000000..94d7f59250 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts @@ -0,0 +1,72 @@ +import { + chalk, + getContext, + inquirerPrompt, + printArrIntoBox, + printBoxEnd, + printBoxStart, + printIntoBox, +} from '@rnv/core'; +import type { NewProjectData } from '../types'; + +export const inquiryConfirm = async ({ data }: { data: NewProjectData }) => { + const c = getContext(); + const { ci } = c.program; + _prepareProjectOverview(data); + if (!ci) { + const { confirm } = await inquirerPrompt({ + type: 'confirm', + name: 'confirm', + message: `\n${data.confirmString}\nIs all this correct?`, + }); + + if (!confirm) { + return; + } + } +}; + +const _prepareProjectOverview = (data: NewProjectData) => { + data.appTitle = data.inputAppTitle || data.defaultAppTitle; + data.teamID = ''; + data.appID = data.inputAppID ? data.inputAppID.replace(/\s+/g, '-').toLowerCase() : data.appID; + data.version = data.inputVersion || data.defaultVersion; + const tempString = `${data.optionTemplates.selectedOption}@${data.optionTemplates.selectedVersion}`; + + const highlight = chalk().green; + + let str = printBoxStart('🚀 ReNative Project Generator'); + str += printIntoBox(''); + str += printIntoBox(`Project Name (folder): ${highlight(data.projectName)}`); + str += printIntoBox(`Workspace: ${highlight(data.optionWorkspaces.selectedOption)}`); + str += printIntoBox(`Project Title: ${highlight(data.appTitle)}`); + str += printIntoBox(`Project Version: ${highlight(data.version)}`); + str += printIntoBox(`App ID: ${highlight(data.appID)}`); + str += printIntoBox(`Project Template: ${highlight(tempString)}`); + str += printIntoBox(`Git Enabled: ${highlight(data.gitEnabled)}`); + str += printIntoBox(''); + str += printIntoBox('Project Platforms:'); + str += printArrIntoBox(data.optionPlatforms.selectedOptions || []); + str += printIntoBox(''); + str += printIntoBox('Project Structure:'); + str += printIntoBox(''); + str += printIntoBox(data.projectName || 'UNKNOWN'); + str += chalk().gray(`│ ├── appConfigs # Application flavour configuration files/assets │ +│ │ └── [APP_ID] # Example application flavour │ +│ │ ├── assets # Platform assets injected to ./platformAssets │ +│ │ ├── builds # Platform files injected to ./platformBuilds │ +│ │ ├── fonts # Folder for all custom fonts │ +│ │ ├── plugins # Multi-platform plugins injections │ +│ │ └── renative.json # Application flavour config │ +│ ├── platformAssets # Generated cross-platform assets │ +│ ├── platformBuilds # Generated platform app projects │ +│ ├── src # Source code files │ +│ ├── index.*.js # Entry files │ +│ └── renative.json # ReNative project configuration │ +`); + str += printIntoBox(''); + str += printBoxEnd(); + str += '\n'; + + data.confirmString = str; +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts new file mode 100644 index 0000000000..39c07346b9 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts @@ -0,0 +1,18 @@ +import { fsExistsSync, getContext, inquirerPrompt, logWarning, removeDirs } from '@rnv/core'; + +export const inquiryHasNodeModules = async () => { + const c = getContext(); + if (fsExistsSync(c.paths.project.nodeModulesDir)) { + logWarning( + `Found node_modules directory at your location. If you continue it will be deleted: ${c.paths.project.nodeModulesDir}` + ); + const { confirmDeleteNodeModules } = await inquirerPrompt({ + name: 'confirmDeleteNodeModules', + type: 'confirm', + message: 'Are you sure you want to continue?', + }); + if (confirmDeleteNodeModules) { + await removeDirs([c.paths.project.nodeModulesDir]); + } + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts b/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts new file mode 100644 index 0000000000..058fef373c --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts @@ -0,0 +1,16 @@ +import { fsExistsSync, getContext, inquirerPrompt, logWarning } from '@rnv/core'; + +export const inquiryIsRenativeProject = async () => { + const c = getContext(); + if (fsExistsSync(c.paths.project.config)) { + logWarning(`You are in ReNative project. Found: ${c.paths.project.config}`); + const { confirmInRnvProject } = await inquirerPrompt({ + name: 'confirmInRnvProject', + type: 'confirm', + message: 'Are you sure you want to continue?', + }); + if (!confirmInRnvProject) { + return Promise.reject('Cancelled'); + } + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts b/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts new file mode 100644 index 0000000000..6ea59a1443 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts @@ -0,0 +1,92 @@ +import { getContext, inquirerPrompt } from '@rnv/core'; +import type { NewProjectData } from '../types'; +import { checkInputValue } from '../utils'; +import semver from 'semver'; + +export const inquiryProjectDetails = async ({ data }: { data: NewProjectData }) => { + const c = getContext(); + const { title, id, appVersion, ci } = c.program; + const validator = { + validateAppTitle: (val: string) => checkInputValue(val) || 'Please enter a title', + validateAppID: (appId: string) => + (typeof appId === 'string' && !!appId.match(/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/)) || + 'Please enter a valid appID (com.test.app)', + validateAppVersion: (version: string) => + !!semver.valid(semver.coerce(version)) || + 'Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.)', + }; + + const inputValues = [ + { + value: title, + validFn: validator.validateAppTitle, + name: 'inputAppTitle', + defaultVal: data.defaultAppTitle, + message: "What's your project Title?", + warning: 'Title was not provided', + }, + { + value: id, + validFn: validator.validateAppID, + name: 'inputAppID', + defaultVal: () => { + data.appID = `com.mycompany.${data.inputProjectName?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; + return data.appID; + }, + message: "What's your App ID?", + warning: `Command contains invalid appId : ${id}`, + }, + { + value: appVersion, + validFn: validator.validateAppVersion, + name: 'inputVersion', + defaultVal: data.defaultVersion, + message: "What's your Version?", + warning: `Command contains invalid appVersion. Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.`, + }, + ]; + + const validateAndAssign = async ({ + value, + validFn, + name, + defaultVal, + message, + warning, + }: { + value: string; + validFn: (value: string) => true | string; + name: string; + defaultVal: (() => string) | string | undefined; + message: string; + warning: string; + }): Promise => { + const isValid = validFn(value); + if (value && isValid === true) { + return value; + } else { + const warningMessage = typeof isValid === 'string'; + const answer = await inquirerPrompt({ + name, + type: 'input', + default: defaultVal, + validate: validFn, + message, + warningMessage: ci && warningMessage && warning, + }); + return answer[name]; + } + }; + const inputsResult = []; + for (const value of inputValues) { + const res = await validateAndAssign(value); + inputsResult.push(res); + } + + data.packageName = data?.appTitle?.replace(/\s+/g, '-').toLowerCase(); + + const [inputAppTitle, inputAppID, inputVersion] = inputsResult; + data.inputAppTitle = inputAppTitle; + data.inputAppID = inputAppID; + data.inputVersion = inputVersion; +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts new file mode 100644 index 0000000000..7da3043069 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -0,0 +1,40 @@ +import { cleanFolder, fsExistsSync, getContext, inquirerPrompt, mkdirSync } from '@rnv/core'; +import type { NewProjectData } from '../types'; +import path from 'path'; +import { checkInputValue } from '../utils'; + +export const inquiryProjectName = async ({ data }: { data: NewProjectData }) => { + let inputProjectName: string; + + const c = getContext(); + const { projectName } = c.program; + if (checkInputValue(projectName)) { + inputProjectName = projectName; + } else { + const inputProjectNameObj = await inquirerPrompt({ + name: 'inputProjectName', + type: 'input', + validate: (value) => checkInputValue(value), + message: "What's your project Name? (no spaces, folder based on ID will be created in this directory)", + }); + inputProjectName = inputProjectNameObj?.inputProjectName; + } + + data.projectName = inputProjectName.replace(/(\s+)/g, '_'); + c.paths.project.dir = path.join(c.paths.CURRENT_DIR, data.projectName); + + if (fsExistsSync(c.paths.project.dir)) { + const { confirm } = await inquirerPrompt({ + type: 'confirm', + name: 'confirm', + message: `Folder ${c.paths.project.dir} already exists. RNV will override it. Continue?`, + }); + + if (!confirm) { + return Promise.reject('Cancelled by user'); + } + await cleanFolder(c.paths.project.dir); + } + + mkdirSync(c.paths.project.dir); +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts new file mode 100644 index 0000000000..963528a9dc --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -0,0 +1,35 @@ +import { getContext, inquirerPrompt, logError } from '@rnv/core'; +import type { NewProjectData } from '../types'; +import { checkInputValue } from '../utils'; + +export const inquirySupportedPlatforms = async ({ data }: { data: NewProjectData }) => { + const c = getContext(); + const { platform } = c.program; + const supportedPlatforms = + data.renativeTemplateConfig?.defaults?.supportedPlatforms || + data.renativeConfig?.defaults?.supportedPlatforms || + []; + + if (supportedPlatforms.length === 0) { + logError( + `Template ${data.selectedInputTemplate} does not seem to export any default platforms to support. contact the author.` + ); + } + + let inputSupportedPlatforms; + if (checkInputValue(platform)) { + data.inputSupportedPlatforms = platform.split(','); + } else { + const answer = await inquirerPrompt({ + name: 'inputSupportedPlatforms', + type: 'checkbox', + pageSize: 20, + message: 'What platforms would you like to use?', + validate: (val) => !!val.length || 'Please select at least a platform', + default: supportedPlatforms, + choices: supportedPlatforms, + }); + data.inputSupportedPlatforms = answer?.inputSupportedPlatforms; + } + data.optionPlatforms.selectedOptions = inputSupportedPlatforms; +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/template.ts b/packages/engine-core/src/tasks/global/new/questions/template.ts new file mode 100644 index 0000000000..3cc5ee65f1 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/template.ts @@ -0,0 +1,154 @@ +import { + ConfigFileProject, + ConfigFileTemplate, + ConfigName, + chalk, + executeAsync, + fsExistsSync, + getContext, + getTemplateOptions, + inquirerPrompt, + isYarnInstalled, + listAndSelectNpmVersion, + logError, + logInfo, + readObjectSync, + updateRenativeConfigs, + writeFileSync, +} from '@rnv/core'; +import type { NewProjectData } from '../types'; +import path from 'path'; +import { checkInputValue } from '../utils'; + +export const inquiryTemplate = async ({ data }: { data: NewProjectData }) => { + const customTemplate = 'Custom Template ...'; + + const c = getContext(); + const { templateVersion, projectTemplate } = c.program; + + data.optionTemplates = getTemplateOptions(); + + const options = []; + const values = data.optionTemplates.valuesAsObject; + if (values) { + Object.keys(values).forEach((k) => { + const val = values[k]; + if (val.description) { + val.title = `${k} ${chalk().grey(`- ${val.description}`)}`; + } else { + val.title = k; + } + + val.key = k; + options.push(val.title); + }); + } + + const getTemplateKey = (val: string) => data.optionTemplates.valuesAsArray?.find((v) => v.title === val)?.key; + + // data.optionTemplates.keysAsArray.push(customTemplate); + options.push(customTemplate); + let selectedInputTemplate; + if (checkInputValue(projectTemplate)) { + selectedInputTemplate = projectTemplate; + } else { + const { inputTemplate } = await inquirerPrompt({ + name: 'inputTemplate', + type: 'list', + message: 'What template to use?', + default: data.defaultTemplate, + choices: options, + }); + + if (inputTemplate === customTemplate) { + const { inputTemplateCustom } = await inquirerPrompt({ + name: 'inputTemplateCustom', + type: 'input', + message: 'Type exact name of your template NPM package.', + }); + selectedInputTemplate = inputTemplateCustom; + } else { + selectedInputTemplate = getTemplateKey(inputTemplate); + } + } + + data.optionTemplates.selectedOption = selectedInputTemplate; + + let inputTemplateVersion; + if (checkInputValue(templateVersion)) { + inputTemplateVersion = templateVersion; + } else { + inputTemplateVersion = await listAndSelectNpmVersion(data.optionTemplates.selectedOption || ''); + } + + data.optionTemplates.selectedVersion = inputTemplateVersion; + + await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion}`, { + cwd: c.paths.project.dir, + }); + + // Add rnv to package.json + await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add rnv@${c.rnvVersion}`, { + cwd: c.paths.project.dir, + }); + + // Check if node_modules folder exists + if (!fsExistsSync(path.join(c.paths.project.dir, 'node_modules'))) { + logError( + `${ + isYarnInstalled() ? 'yarn' : 'npm' + } add ${selectedInputTemplate}@${inputTemplateVersion} : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` + ); + return; + } + // This ensures that the correct version of the npm packages will be used to run the project for the first time after creation + + const renativeTemplateConfig = + readObjectSync( + path.join(c.paths.project.dir, 'node_modules', selectedInputTemplate, ConfigName.renativeTemplate) + ) || {}; + + const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; + + if (rnvNewPatchDependencies) { + const patchDeps = Object.entries(rnvNewPatchDependencies); + for (const [dependency, version] of patchDeps) { + const command = `${isYarnInstalled() ? 'yarn' : 'npm'} add ${dependency}@${version}`; + await executeAsync(command, { cwd: c.paths.project.dir }); + } + } + + if (!data.optionTemplates.keysAsArray?.includes(selectedInputTemplate)) { + const { confirmAddTemplate } = await inquirerPrompt({ + name: 'confirmAddTemplate', + type: 'confirm', + message: `Would you like to add ${chalk().bold(selectedInputTemplate)} to your ${ + c.runtime.selectedWorkspace + } workspace template list?`, + }); + + const configFile = c.files.workspace.config; + + if (configFile) { + if (confirmAddTemplate) { + if (!configFile.projectTemplates) { + configFile.projectTemplates = {}; + } + configFile.projectTemplates[selectedInputTemplate] = {}; + writeFileSync(c.paths.workspace.config, configFile); + await updateRenativeConfigs(); + + logInfo(`Updating ${c.paths.workspace.config}...DONE`); + } + } + } + + data.renativeTemplateConfig = renativeTemplateConfig; + + const renativeConfig = readObjectSync( + path.join(c.paths.project.dir, 'node_modules', selectedInputTemplate, ConfigName.renative) + ); + if (renativeConfig) { + data.renativeConfig = renativeConfig; + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/workspace.ts b/packages/engine-core/src/tasks/global/new/questions/workspace.ts new file mode 100644 index 0000000000..ff8ed54d6c --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/workspace.ts @@ -0,0 +1,28 @@ +import { getContext, inquirerPrompt, updateRenativeConfigs } from '@rnv/core'; +import type { NewProjectData } from '../types'; +import { checkInputValue } from '../utils'; + +export const inquiryWorkspace = async ({ data }: { data: NewProjectData }) => { + const c = getContext(); + const { ci, workspace } = c.program; + let inputWorkspace; + if (checkInputValue(workspace)) { + inputWorkspace = workspace; + } else if (ci) { + inputWorkspace = data.defaultWorkspace; + } else { + const answer = await inquirerPrompt({ + name: 'inputWorkspace', + type: 'list', + message: 'What workspace to use?', + default: data.defaultWorkspace, + choices: data.optionWorkspaces.keysAsArray, + }); + + inputWorkspace = answer?.inputWorkspace; + } + data.optionWorkspaces.selectedOption = inputWorkspace; + c.runtime.selectedWorkspace = inputWorkspace; + + await updateRenativeConfigs(); +}; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 0a70b48250..ac74236634 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -1,786 +1,33 @@ -import lSet from 'lodash/set'; -import path from 'path'; -import semver from 'semver'; -import { - RnvTaskOptionPresets, - getTemplateOptions, - mkdirSync, - writeFileSync, - cleanFolder, - fsExistsSync, - readObjectSync, - removeDirs, - checkAndCreateGitignore, - getWorkspaceOptions, - updateRenativeConfigs, - executeAsync, - chalk, - logDebug, - logInfo, - logSuccess, - logTask, - logError, - logWarning, - printArrIntoBox, - printBoxEnd, - printBoxStart, - printIntoBox, - isYarnInstalled, - listAndSelectNpmVersion, - RnvContext, - getApi, - inquirerPrompt, - PlatformKey, - commandExistsSync, - PromptParams, - RnvTask, - ConfigFileProject, - ConfigFileTemplate, - RnvTaskName, - ConfigName, -} from '@rnv/core'; - -type NewProjectData = { - appTitle?: string; - inputAppTitle?: string; - packageName?: string; - defaultAppTitle?: string; - defaultTemplate?: string; - inputProjectName?: string; - teamID?: string; - appID?: string; - inputAppID?: string; - inputVersion?: string; - defaultVersion: string; - inputTemplate?: string; - version?: string; - optionTemplates: { - selectedOption?: string; - selectedVersion?: string; - valuesAsObject?: Record< - string, - { - title: string; - key: string; - description: string; - } - >; - valuesAsArray?: Array<{ - title: string; - key: string; - }>; - keysAsArray?: Array; - }; - projectName?: string; - optionWorkspaces: { - selectedOption?: string; - valuesAsObject?: Record< - string, - { - title: string; - key: string; - } - >; - valuesAsArray?: Array; - keysAsArray?: Array; - }; - gitEnabled?: boolean; - optionPlatforms: { - selectedOptions?: Array; - }; - confirmString?: string; - defaultProjectName?: string; - defaultWorkspace?: string; - inputSupportedPlatforms?: Array; - inputWorkspace?: string; -}; - -export const configureGit = async (c: RnvContext) => { - const projectPath = c.paths.project.dir; - logTask(`configureGit:${projectPath}`); - - if (!fsExistsSync(path.join(projectPath, '.git'))) { - logInfo('Your project does not have a git repo. Creating one...DONE'); - if (commandExistsSync('git')) { - await executeAsync('git init', { cwd: projectPath }); - await executeAsync('git add -A', { cwd: projectPath }); - await executeAsync('git commit -m "Initial"', { cwd: projectPath }); - } else { - logWarning("We tried to create a git repo inside your project but you don't seem to have git installed"); - } - } -}; -const checkInputValue = (value: string | boolean): boolean => { - return value && typeof value === 'string' && value !== '' ? true : false; -}; -const _prepareProjectOverview = (c: RnvContext, data: NewProjectData) => { - data.appTitle = data.inputAppTitle || data.defaultAppTitle; - data.teamID = ''; - data.appID = data.inputAppID ? data.inputAppID.replace(/\s+/g, '-').toLowerCase() : data.appID; - data.version = data.inputVersion || data.defaultVersion; - const tempString = `${data.optionTemplates.selectedOption}@${data.optionTemplates.selectedVersion}`; - - const highlight = chalk().green; - - let str = printBoxStart('🚀 ReNative Project Generator'); - str += printIntoBox(''); - str += printIntoBox(`Project Name (folder): ${highlight(data.projectName)}`); - str += printIntoBox(`Workspace: ${highlight(data.optionWorkspaces.selectedOption)}`); - str += printIntoBox(`Project Title: ${highlight(data.appTitle)}`); - str += printIntoBox(`Project Version: ${highlight(data.version)}`); - str += printIntoBox(`App ID: ${highlight(data.appID)}`); - str += printIntoBox(`Project Template: ${highlight(tempString)}`); - str += printIntoBox(`Git Enabled: ${highlight(data.gitEnabled)}`); - str += printIntoBox(''); - str += printIntoBox('Project Platforms:'); - str += printArrIntoBox(data.optionPlatforms.selectedOptions || []); - str += printIntoBox(''); - str += printIntoBox('Project Structure:'); - str += printIntoBox(''); - str += printIntoBox(data.projectName || 'UNKNOWN'); - str += chalk().gray(`│ ├── appConfigs # Application flavour configuration files/assets │ -│ │ └── [APP_ID] # Example application flavour │ -│ │ ├── assets # Platform assets injected to ./platformAssets │ -│ │ ├── builds # Platform files injected to ./platformBuilds │ -│ │ ├── fonts # Folder for all custom fonts │ -│ │ ├── plugins # Multi-platform plugins injections │ -│ │ └── renative.json # Application flavour config │ -│ ├── platformAssets # Generated cross-platform assets │ -│ ├── platformBuilds # Generated platform app projects │ -│ ├── src # Source code files │ -│ ├── index.*.js # Entry files │ -│ └── renative.json # ReNative project configuration │ -`); - str += printIntoBox(''); - str += printBoxEnd(); - str += '\n'; - - data.confirmString = str; -}; - -type ConfigProp = Required['bootstrapConfig']>['bootstrapQuestions'][number]['configProp']; - -type QuestionResults = Record< - string, - { - answer: string; - configProp: ConfigProp; - value: string; - } ->; - -type BootstrapQuestions = Required['bootstrapConfig']>['bootstrapQuestions']; - -const interactiveQuestion = async ( - results: QuestionResults, - bootstrapQuestions: BootstrapQuestions, - providedAnswers: Record -) => { - if (bootstrapQuestions?.length) { - for (let i = 0; i < bootstrapQuestions.length; i++) { - const q = bootstrapQuestions[i]; - const qKey = q?.configProp?.key || ''; - // inquirer will nest them if they look like an object - const qKeyClean = qKey.replace('.', '__'); - - const choicesObj: Record = {}; - if (q.options) { - q.options.forEach((opt) => { - choicesObj[opt.title] = opt; - }); - } - - // answer already passed into the command line - const answer = providedAnswers[qKey.replace('__', '.')]; - if (answer) { - let value; - if (typeof answer === 'string' && q.type === 'list') { - value = choicesObj[answer]?.value; - } else { - value = answer; - } - - results[qKey] = { - answer, - configProp: q.configProp, - value, - }; - } else { - const inqQuestion: PromptParams = { - name: qKeyClean, - type: q.type, - message: q.title, - choices: Object.keys(choicesObj), - }; - // eslint-disable-next-line no-await-in-loop - const result = await inquirerPrompt(inqQuestion); - const val = q.type === 'list' ? choicesObj[result[qKeyClean]]?.value : result[qKeyClean]; - results[qKey] = { - answer: result[qKeyClean], - configProp: q.configProp, - value: val, - }; - } - - if (choicesObj[results[qKey].answer]?.bootstrapQuestions) { - // eslint-disable-next-line no-await-in-loop - await interactiveQuestion( - results, - choicesObj[results[qKey].answer].bootstrapQuestions, - providedAnswers - ); - } - } - } -}; - -const taskNew = async (c: RnvContext) => { +import { RnvTaskOptionPresets, chalk, logSuccess, logTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { inquiryBootstrapQuestions } from './questions/bootstrapQuestions'; +import { inquiryGit } from './questions/confirmGit'; +import { inquiryIsRenativeProject } from './questions/isRenativeProject'; +import { inquiryHasNodeModules } from './questions/hasNodeModules'; +import { inquiryConfirm } from './questions/confirmOverview'; +import { inquiryProjectName } from './questions/projectName'; +import { inquiryProjectDetails } from './questions/projectDetails'; +import { inquiryWorkspace } from './questions/workspace'; +import { inquiryTemplate } from './questions/template'; +import { inquirySupportedPlatforms } from './questions/supportedPlatforms'; +import { initNewProject, logTelemetry } from './projectGenerator'; + +const taskNew = async () => { logTask('taskNew'); - const { - ci, - projectName, - title, - id, - appVersion, - workspace, - projectTemplate, - templateVersion, - platform, - gitEnabled, - } = c.program; - - if (fsExistsSync(c.paths.project.config)) { - logWarning(`You are in ReNative project. Found: ${c.paths.project.config}`); - const { confirmInRnvProject } = await inquirerPrompt({ - name: 'confirmInRnvProject', - type: 'confirm', - message: 'Are you sure you want to continue?', - }); - if (!confirmInRnvProject) { - return Promise.reject('Cancelled'); - } - } - - if (fsExistsSync(c.paths.project.nodeModulesDir)) { - logWarning( - `Found node_modules directory at your location. If you continue it will be deleted: ${c.paths.project.nodeModulesDir}` - ); - const { confirmDeleteNodeModules } = await inquirerPrompt({ - name: 'confirmDeleteNodeModules', - type: 'confirm', - message: 'Are you sure you want to continue?', - }); - if (confirmDeleteNodeModules) { - await removeDirs([c.paths.project.nodeModulesDir]); - } - } - - let data: NewProjectData = { - defaultVersion: '0.1.0', - defaultTemplate: '@rnv/template-starter', - defaultProjectName: 'helloRenative', - defaultAppTitle: 'Hello Renative', - defaultWorkspace: 'rnv', - optionPlatforms: {}, - optionTemplates: {}, - optionWorkspaces: {}, - }; - data.optionPlatforms = {}; - data.optionTemplates = {}; - data.optionWorkspaces = getWorkspaceOptions(c); - - // ================================================== - // INPUT: Project Name - // ================================================== - - let inputProjectName: string; - - if (checkInputValue(projectName)) { - inputProjectName = projectName; - } else { - const inputProjectNameObj = await inquirerPrompt({ - name: 'inputProjectName', - type: 'input', - validate: (value) => checkInputValue(value), - message: "What's your project Name? (no spaces, folder based on ID will be created in this directory)", - }); - inputProjectName = inputProjectNameObj?.inputProjectName; - } - - data.projectName = inputProjectName.replace(/(\s+)/g, '_'); - c.paths.project.dir = path.join(c.paths.CURRENT_DIR, data.projectName); - - if (fsExistsSync(c.paths.project.dir)) { - const { confirm } = await inquirerPrompt({ - type: 'confirm', - name: 'confirm', - message: `Folder ${c.paths.project.dir} already exists. RNV will override it. Continue?`, - }); - - if (!confirm) { - return Promise.reject('Cancelled by user'); - } - await cleanFolder(c.paths.project.dir); - } - - mkdirSync(c.paths.project.dir); - - // ================================================== - // INPUT: Project Title, ID, Version - // ================================================== - - const validator = { - validateAppTitle: (val: string) => checkInputValue(val) || 'Please enter a title', - validateAppID: (appId: string) => - (typeof appId === 'string' && !!appId.match(/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/)) || - 'Please enter a valid appID (com.test.app)', - validateAppVersion: (version: string) => - !!semver.valid(semver.coerce(version)) || - 'Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.)', - }; - - const inputValues = [ - { - value: title, - validFn: validator.validateAppTitle, - name: 'inputAppTitle', - defaultVal: data.defaultAppTitle, - message: "What's your project Title?", - warning: 'Title was not provided', - }, - { - value: id, - validFn: validator.validateAppID, - name: 'inputAppID', - defaultVal: () => { - data.appID = `com.mycompany.${inputProjectName.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; - return data.appID; - }, - message: "What's your App ID?", - warning: `Command contains invalid appId : ${id}`, - }, - { - value: appVersion, - validFn: validator.validateAppVersion, - name: 'inputVersion', - defaultVal: data.defaultVersion, - message: "What's your Version?", - warning: `Command contains invalid appVersion. Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.`, - }, - ]; - - const validateAndAssign = async ({ - value, - validFn, - name, - defaultVal, - message, - warning, - }: { - value: string; - validFn: (value: string) => true | string; - name: string; - defaultVal: (() => string) | string | undefined; - message: string; - warning: string; - }): Promise => { - const isValid = validFn(value); - if (value && isValid === true) { - return value; - } else { - const warningMessage = typeof isValid === 'string'; - const answer = await inquirerPrompt({ - name, - type: 'input', - default: defaultVal, - validate: validFn, - message, - warningMessage: ci && warningMessage && warning, - }); - return answer[name]; - } - }; - const inputsResult = []; - for (const value of inputValues) { - const res = await validateAndAssign(value); - inputsResult.push(res); - } - - const [inputAppTitle, inputAppID, inputVersion] = inputsResult; - - // ================================================== - // INPUT: Workspace - // ================================================== - let inputWorkspace; - if (checkInputValue(workspace)) { - inputWorkspace = workspace; - } else if (ci) { - inputWorkspace = data.defaultWorkspace; - } else { - const answer = await inquirerPrompt({ - name: 'inputWorkspace', - type: 'list', - message: 'What workspace to use?', - default: data.defaultWorkspace, - choices: data.optionWorkspaces.keysAsArray, - }); - - inputWorkspace = answer?.inputWorkspace; - } - data.optionWorkspaces.selectedOption = inputWorkspace; - c.runtime.selectedWorkspace = inputWorkspace; - - await updateRenativeConfigs(); - data.optionTemplates = getTemplateOptions(); - - const options = []; - const values = data.optionTemplates.valuesAsObject; - if (values) { - Object.keys(values).forEach((k) => { - const val = values[k]; - if (val.description) { - val.title = `${k} ${chalk().grey(`- ${val.description}`)}`; - } else { - val.title = k; - } - - val.key = k; - options.push(val.title); - }); - } - - const getTemplateKey = (val: string) => data.optionTemplates.valuesAsArray?.find((v) => v.title === val)?.key; - - // ================================================== - // INPUT: Template - // ================================================== - const customTemplate = 'Custom Template ...'; - - // data.optionTemplates.keysAsArray.push(customTemplate); - options.push(customTemplate); - let selectedInputTemplate; - if (checkInputValue(projectTemplate)) { - selectedInputTemplate = projectTemplate; - } else { - const { inputTemplate } = await inquirerPrompt({ - name: 'inputTemplate', - type: 'list', - message: 'What template to use?', - default: data.defaultTemplate, - choices: options, - }); - - if (inputTemplate === customTemplate) { - const { inputTemplateCustom } = await inquirerPrompt({ - name: 'inputTemplateCustom', - type: 'input', - message: 'Type exact name of your template NPM package.', - }); - selectedInputTemplate = inputTemplateCustom; - } else { - selectedInputTemplate = getTemplateKey(inputTemplate); - } - } - - data.optionTemplates.selectedOption = selectedInputTemplate; - - let inputTemplateVersion; - if (checkInputValue(templateVersion)) { - inputTemplateVersion = templateVersion; - } else { - inputTemplateVersion = await listAndSelectNpmVersion(data.optionTemplates.selectedOption || ''); - } - - data.optionTemplates.selectedVersion = inputTemplateVersion; - - await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion}`, { - cwd: c.paths.project.dir, - }); - // Add rnv to package.json - await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add rnv@${c.rnvVersion}`, { - cwd: c.paths.project.dir, - }); + const data = await initNewProject(); - // Check if node_modules folder exists - if (!fsExistsSync(path.join(c.paths.project.dir, 'node_modules'))) { - logError( - `${ - isYarnInstalled() ? 'yarn' : 'npm' - } add ${selectedInputTemplate}@${inputTemplateVersion} : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` - ); - return; - } - // This ensures that the correct version of the npm packages will be used to run the project for the first time after creation + await inquiryIsRenativeProject(); + await inquiryHasNodeModules(); + await inquiryProjectName({ data }); + await inquiryProjectDetails({ data }); + await inquiryWorkspace({ data }); + await inquiryTemplate({ data }); + await inquirySupportedPlatforms({ data }); + await inquiryBootstrapQuestions({ data }); + await inquiryGit({ data }); + await inquiryConfirm({ data }); - const renativeTemplateConfig = - readObjectSync( - path.join(c.paths.project.dir, 'node_modules', selectedInputTemplate, ConfigName.renativeTemplate) - ) || {}; - - const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; - - if (rnvNewPatchDependencies) { - const patchDeps = Object.entries(rnvNewPatchDependencies); - for (const [dependency, version] of patchDeps) { - const command = `${isYarnInstalled() ? 'yarn' : 'npm'} add ${dependency}@${version}`; - await executeAsync(command, { cwd: c.paths.project.dir }); - } - } - - if (!data.optionTemplates.keysAsArray?.includes(selectedInputTemplate)) { - const { confirmAddTemplate } = await inquirerPrompt({ - name: 'confirmAddTemplate', - type: 'confirm', - message: `Would you like to add ${chalk().bold(selectedInputTemplate)} to your ${ - c.runtime.selectedWorkspace - } workspace template list?`, - }); - - const configFile = c.files.workspace.config; - - if (configFile) { - if (confirmAddTemplate) { - if (!configFile.projectTemplates) { - configFile.projectTemplates = {}; - } - configFile.projectTemplates[selectedInputTemplate] = {}; - writeFileSync(c.paths.workspace.config, configFile); - await updateRenativeConfigs(); - - logInfo(`Updating ${c.paths.workspace.config}...DONE`); - } - } - } - - const renativeConfig = readObjectSync( - path.join(c.paths.project.dir, 'node_modules', selectedInputTemplate, ConfigName.renative) - ); - - // ================================================== - // INPUT: Supported Platforms - // ================================================== - - const supportedPlatforms = - renativeTemplateConfig?.defaults?.supportedPlatforms || renativeConfig?.defaults?.supportedPlatforms || []; - - if (supportedPlatforms.length === 0) { - logError( - `Template ${selectedInputTemplate} does not seem to export any default platforms to support. contact the author.` - ); - } - - let inputSupportedPlatforms; - if (checkInputValue(platform)) { - inputSupportedPlatforms = platform.split(','); - } else { - const answer = await inquirerPrompt({ - name: 'inputSupportedPlatforms', - type: 'checkbox', - pageSize: 20, - message: 'What platforms would you like to use?', - validate: (val) => !!val.length || 'Please select at least a platform', - default: supportedPlatforms, - choices: supportedPlatforms, - }); - inputSupportedPlatforms = answer?.inputSupportedPlatforms; - } - - // ================================================== - // INPUT: Custom Questions - // ================================================== - const renativeTemplateConfigExt = {}; - const bootstrapQuestions = renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; - const results: QuestionResults = {}; - const providedAnswers: Record = {}; - - if (c.program.answer) { - c.program.answer.forEach((a: string) => { - const key = a.split('=')[0]; - let value; - - try { - value = JSON.parse(a.split('=')[1]); - } catch (e) { - value = a.split('=')[1]; - } - - providedAnswers[key] = value; - }); - } - - await interactiveQuestion(results, bootstrapQuestions, providedAnswers); - - logDebug('asnwer', JSON.stringify(results, null, 2)); - - Object.keys(results).forEach((targetKey) => { - const objValue = results[targetKey].value; - - logDebug('setting', targetKey, objValue); - - if (targetKey) { - lSet(renativeTemplateConfigExt, targetKey, objValue); - } - }); - - let isGitEnabled = gitEnabled === 'true' || gitEnabled === true; - // ================================================== - // INPUT: Git Enabled - // ================================================== - if (gitEnabled === undefined && !ci) { - const response = await inquirerPrompt({ - name: 'gitEnabled', - type: 'confirm', - message: 'Do you want to set-up git in your new project?', - }); - - isGitEnabled = response.gitEnabled; - } - - // ================================================== - // INPUT: Confirm Overview - // ================================================== - data = { - ...data, - inputProjectName, - inputAppTitle, - inputAppID, - inputVersion, - inputTemplate: selectedInputTemplate, - inputSupportedPlatforms, - inputWorkspace, - gitEnabled: isGitEnabled, - }; - data.optionPlatforms.selectedOptions = inputSupportedPlatforms; - - _prepareProjectOverview(c, data); - if (!ci) { - const { confirm } = await inquirerPrompt({ - type: 'confirm', - name: 'confirm', - message: `\n${data.confirmString}\nIs all this correct?`, - }); - - if (!confirm) { - return; - } - } - - // ================================================== - // Setup Project - - try { - await getApi().analytics.captureEvent({ - type: 'newProject', - template: selectedInputTemplate, - platforms: inputSupportedPlatforms, - }); - } catch (e) { - logDebug(e); - } - - c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); - c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); - - data.packageName = data?.appTitle?.replace(/\s+/g, '-').toLowerCase(); - - const templates: Record< - string, - { - version: string; - } - > = {}; - - logTask( - `_generateProject:${data.optionTemplates.selectedOption}:${data.optionTemplates.selectedVersion}`, - chalk().grey - ); - - if (!data.optionTemplates.selectedVersion) { - return; - } - - if (data.optionTemplates.selectedOption) { - templates[data.optionTemplates.selectedOption] = { - version: data.optionTemplates.selectedVersion, - }; - } - - delete renativeTemplateConfig.templateConfig; - delete renativeTemplateConfig.bootstrapConfig; - - if (!data.optionTemplates.selectedOption) { - logError('Current template not selected!'); - return; - } - - const config: ConfigFileProject = { - platforms: {}, - ...renativeTemplateConfig, - ...renativeTemplateConfigExt, - projectName: data.projectName || 'my-project', - projectVersion: data.inputVersion || '0.1.0', - //TODO: TEMPORARY WORKAROUND this neds to use bootstrap_metadata to work properly - common: { - id: data.inputAppID || 'com.mycompany.myapp', - title: data.inputAppTitle || 'My App', - }, - workspaceID: data.optionWorkspaces.selectedOption || 'project description', - // paths: { - // appConfigsDir: './appConfigs', - // entryDir: './', - // platformAssetsDir: './platformAssets', - // platformBuildsDir: './platformBuilds', - // }, - defaults: { - supportedPlatforms: data.optionPlatforms.selectedOptions, - }, - engines: {}, - templates, - currentTemplate: data.optionTemplates.selectedOption, - isNew: true, - isMonorepo: false, - }; - - const platforms: ConfigFileProject['platforms'] = config.platforms || {}; - const engines: ConfigFileProject['engines'] = config.engines || {}; - const defaults: ConfigFileProject['defaults'] = config.defaults || {}; - - const supPlats = defaults.supportedPlatforms || []; - - // Remove unused platforms - Object.keys(platforms).forEach((k) => { - const key = k as PlatformKey; - if (!supPlats.includes(key)) { - delete platforms[key]; - } - }); - - const tplEngines = renativeTemplateConfig.engines; - if (tplEngines) { - // Remove unused engines based on selected platforms - supPlats.forEach((k) => { - const selectedEngineId = - platforms[k]?.engine || c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; - if (selectedEngineId) { - const selectedEngine = findEngineKeyById(c, selectedEngineId); - if (selectedEngine?.key) { - engines[selectedEngine.key] = tplEngines[selectedEngine.key]; - } - } - }); - } - - config.platforms = platforms; - config.engines = engines; - config.defaults = defaults; - - writeFileSync(c.paths.project.config, config); - - if (data.gitEnabled) { - await checkAndCreateGitignore(); - await configureGit(c); - } + await logTelemetry({ data }); logSuccess( `Your project is ready! navigate to project ${chalk().bold(`cd ${data.projectName}`)} and run ${chalk().bold( @@ -791,22 +38,6 @@ const taskNew = async (c: RnvContext) => { return true; }; -const findEngineKeyById = (c: RnvContext, id: string) => { - const engineTemplates = c.files.rnv.projectTemplates.config?.engineTemplates; - if (engineTemplates) { - const etk = Object.keys(engineTemplates); - for (let i = 0; i < etk.length; i++) { - const engine = engineTemplates[etk[i]]; - if (engine) { - if (engine.id === id) { - engine.key = etk[i]; - return engine; - } - } - } - } -}; - const Task: RnvTask = { description: 'Create new ReNative project', fn: taskNew, diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts new file mode 100644 index 0000000000..54ef6d956a --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -0,0 +1,60 @@ +import { ConfigFileProject, ConfigFileTemplate, PlatformKey } from '@rnv/core'; + +export type NewProjectData = { + appTitle?: string; + inputAppTitle?: string; + packageName?: string; + defaultAppTitle?: string; + defaultTemplate?: string; + inputProjectName?: string; + teamID?: string; + appID?: string; + inputAppID?: string; + inputVersion?: string; + defaultVersion: string; + inputTemplate?: string; + version?: string; + optionTemplates: { + selectedOption?: string; + selectedVersion?: string; + valuesAsObject?: Record< + string, + { + title: string; + key: string; + description: string; + } + >; + valuesAsArray?: Array<{ + title: string; + key: string; + }>; + keysAsArray?: Array; + }; + projectName?: string; + optionWorkspaces: { + selectedOption?: string; + valuesAsObject?: Record< + string, + { + title: string; + key: string; + } + >; + valuesAsArray?: Array; + keysAsArray?: Array; + }; + gitEnabled?: boolean; + optionPlatforms: { + selectedOptions?: Array; + }; + confirmString?: string; + defaultProjectName?: string; + defaultWorkspace?: string; + inputSupportedPlatforms?: Array; + inputWorkspace?: string; + renativeTemplateConfig?: ConfigFileTemplate; + renativeConfig?: ConfigFileProject; + selectedInputTemplate?: string; + renativeTemplateConfigExt?: any; +}; diff --git a/packages/engine-core/src/tasks/global/new/utils.ts b/packages/engine-core/src/tasks/global/new/utils.ts new file mode 100644 index 0000000000..aa4b11bfdf --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/utils.ts @@ -0,0 +1,3 @@ +export const checkInputValue = (value: string | boolean): boolean => { + return value && typeof value === 'string' && value !== '' ? true : false; +}; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 6d756ce11d..dff321d458 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -18,7 +18,6 @@ import { RnvTaskOptionPresets, copyRuntimeAssets, cleanPlaformAssets, - checkAndCreateGitignore, versionCheck, configureFonts, configureEngines, @@ -124,7 +123,7 @@ const taskProjectConfigure: RnvTaskFn = async (c, parentTask, originTask) => { await copyRuntimeAssets(); await configureTemplateFiles(); - await checkAndCreateGitignore(); + if (!c.buildConfig.platforms) { await updateRenativeConfigs(); } diff --git a/packages/rnv/coreTemplateFiles/.gitignore.tpl b/packages/rnv/coreTemplateFiles/.gitignore.tpl deleted file mode 100644 index bff41ac458..0000000000 --- a/packages/rnv/coreTemplateFiles/.gitignore.tpl +++ /dev/null @@ -1,35 +0,0 @@ -# -------------------------------- -# Generated by ReNative -# -------------------------------- - -.DS_Store -node_modules/ -npm-debug.log -yarn-error.log -.env -.next -.expo - -#------------------------------- -# Visual Studio -#------------------------------- -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -#------------------------------- -# RENATIVE -#------------------------------- - -platformBuilds/ -platformAssets/ -buildHooks/dist -buildHooks/lib -renative.local.json -renative.private.json -renative.build.json -renative.runtime.json -rnv-config.local.json -metro.config.local.js From b434c0a86642885bd7951c8e7cf38e612d6fafd1 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 12 Mar 2024 20:07:29 +0100 Subject: [PATCH 003/175] update questions --- .../src/tasks/global/new/projectGenerator.ts | 4 +- .../new/questions/bootstrapQuestions.ts | 26 ++++++------- .../tasks/global/new/questions/confirmGit.ts | 2 +- .../global/new/questions/confirmOverview.ts | 2 +- .../global/new/questions/hasNodeModules.ts | 4 +- .../global/new/questions/isRenativeProject.ts | 4 +- .../global/new/questions/projectDetails.ts | 2 +- .../tasks/global/new/questions/projectName.ts | 2 +- .../new/questions/supportedPlatforms.ts | 2 +- .../tasks/global/new/questions/template.ts | 2 +- .../tasks/global/new/questions/workspace.ts | 2 +- .../src/tasks/global/new/taskNew.ts | 37 ++++++++++--------- .../engine-core/src/tasks/global/new/types.ts | 2 + 13 files changed, 49 insertions(+), 42 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index e9c863939d..fca737de9c 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -33,7 +33,7 @@ export const initNewProject = async () => { return data; }; -export const generateNewProject = async ({ data }: { data: NewProjectData }) => { +export const generateNewProject = async (data: NewProjectData) => { logTask( `generateNewProject:${data.optionTemplates.selectedOption}:${data.optionTemplates.selectedVersion}`, chalk().grey @@ -129,7 +129,7 @@ export const generateNewProject = async ({ data }: { data: NewProjectData }) => } }; -export const logTelemetry = async ({ data }: { data: NewProjectData }) => { +export const telemetryNewProject = async (data: NewProjectData) => { try { await getApi().analytics.captureEvent({ type: 'newProject', diff --git a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts index 7c0ccac6ea..ad21d3ce13 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts @@ -2,7 +2,18 @@ import { ConfigFileTemplate, PromptParams, getContext, inquirerPrompt, logDebug import lSet from 'lodash/set'; import type { NewProjectData } from '../types'; -export const inquiryBootstrapQuestions = async ({ data }: { data: NewProjectData }) => { +type ConfigProp = Required['bootstrapConfig']>['bootstrapQuestions'][number]['configProp']; +type BootstrapQuestions = Required['bootstrapConfig']>['bootstrapQuestions']; +type QuestionResults = Record< + string, + { + answer: string; + configProp: ConfigProp; + value: string; + } +>; + +export const inquiryBootstrapQuestions = async (data: NewProjectData) => { const c = getContext(); data.renativeTemplateConfigExt = {}; const bootstrapQuestions = data.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; @@ -39,19 +50,6 @@ export const inquiryBootstrapQuestions = async ({ data }: { data: NewProjectData }); }; -type ConfigProp = Required['bootstrapConfig']>['bootstrapQuestions'][number]['configProp']; - -type BootstrapQuestions = Required['bootstrapConfig']>['bootstrapQuestions']; - -type QuestionResults = Record< - string, - { - answer: string; - configProp: ConfigProp; - value: string; - } ->; - const interactiveQuestion = async ( results: QuestionResults, bootstrapQuestions: BootstrapQuestions, diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts b/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts index 7ecf27fc56..44a2b657a8 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts @@ -11,7 +11,7 @@ import { import type { NewProjectData } from '../types'; import path from 'path'; -export const inquiryGit = async ({ data }: { data: NewProjectData }) => { +export const inquiryGit = async (data: NewProjectData) => { const c = getContext(); const { gitEnabled, ci } = c.program; data.gitEnabled = gitEnabled === 'true' || gitEnabled === true; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts index 94d7f59250..e2acb3f99f 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts @@ -9,7 +9,7 @@ import { } from '@rnv/core'; import type { NewProjectData } from '../types'; -export const inquiryConfirm = async ({ data }: { data: NewProjectData }) => { +export const inquiryConfirm = async (data: NewProjectData) => { const c = getContext(); const { ci } = c.program; _prepareProjectOverview(data); diff --git a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts index 39c07346b9..b1ac0d50d7 100644 --- a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts +++ b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts @@ -1,6 +1,7 @@ import { fsExistsSync, getContext, inquirerPrompt, logWarning, removeDirs } from '@rnv/core'; +import { NewProjectData } from '../types'; -export const inquiryHasNodeModules = async () => { +export const inquiryHasNodeModules = async (data: NewProjectData) => { const c = getContext(); if (fsExistsSync(c.paths.project.nodeModulesDir)) { logWarning( @@ -11,6 +12,7 @@ export const inquiryHasNodeModules = async () => { type: 'confirm', message: 'Are you sure you want to continue?', }); + data.confirmDeleteNodeModules = confirmDeleteNodeModules; if (confirmDeleteNodeModules) { await removeDirs([c.paths.project.nodeModulesDir]); } diff --git a/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts b/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts index 058fef373c..7269e71d07 100644 --- a/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts +++ b/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts @@ -1,6 +1,7 @@ import { fsExistsSync, getContext, inquirerPrompt, logWarning } from '@rnv/core'; +import { NewProjectData } from '../types'; -export const inquiryIsRenativeProject = async () => { +export const inquiryIsRenativeProject = async (data: NewProjectData) => { const c = getContext(); if (fsExistsSync(c.paths.project.config)) { logWarning(`You are in ReNative project. Found: ${c.paths.project.config}`); @@ -9,6 +10,7 @@ export const inquiryIsRenativeProject = async () => { type: 'confirm', message: 'Are you sure you want to continue?', }); + data.confirmInRnvProject = confirmInRnvProject; if (!confirmInRnvProject) { return Promise.reject('Cancelled'); } diff --git a/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts b/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts index 6ea59a1443..d3606dd978 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts @@ -3,7 +3,7 @@ import type { NewProjectData } from '../types'; import { checkInputValue } from '../utils'; import semver from 'semver'; -export const inquiryProjectDetails = async ({ data }: { data: NewProjectData }) => { +export const inquiryProjectDetails = async (data: NewProjectData) => { const c = getContext(); const { title, id, appVersion, ci } = c.program; const validator = { diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index 7da3043069..84f8185add 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -3,7 +3,7 @@ import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; -export const inquiryProjectName = async ({ data }: { data: NewProjectData }) => { +export const inquiryProjectName = async (data: NewProjectData) => { let inputProjectName: string; const c = getContext(); diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts index 963528a9dc..bce730abd2 100644 --- a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -2,7 +2,7 @@ import { getContext, inquirerPrompt, logError } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue } from '../utils'; -export const inquirySupportedPlatforms = async ({ data }: { data: NewProjectData }) => { +export const inquirySupportedPlatforms = async (data: NewProjectData) => { const c = getContext(); const { platform } = c.program; const supportedPlatforms = diff --git a/packages/engine-core/src/tasks/global/new/questions/template.ts b/packages/engine-core/src/tasks/global/new/questions/template.ts index 3cc5ee65f1..3fb52977ac 100644 --- a/packages/engine-core/src/tasks/global/new/questions/template.ts +++ b/packages/engine-core/src/tasks/global/new/questions/template.ts @@ -20,7 +20,7 @@ import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; -export const inquiryTemplate = async ({ data }: { data: NewProjectData }) => { +export const inquiryTemplate = async (data: NewProjectData) => { const customTemplate = 'Custom Template ...'; const c = getContext(); diff --git a/packages/engine-core/src/tasks/global/new/questions/workspace.ts b/packages/engine-core/src/tasks/global/new/questions/workspace.ts index ff8ed54d6c..70e0353c2f 100644 --- a/packages/engine-core/src/tasks/global/new/questions/workspace.ts +++ b/packages/engine-core/src/tasks/global/new/questions/workspace.ts @@ -2,7 +2,7 @@ import { getContext, inquirerPrompt, updateRenativeConfigs } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue } from '../utils'; -export const inquiryWorkspace = async ({ data }: { data: NewProjectData }) => { +export const inquiryWorkspace = async (data: NewProjectData) => { const c = getContext(); const { ci, workspace } = c.program; let inputWorkspace; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index ac74236634..c95b59b8bf 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -9,28 +9,31 @@ import { inquiryProjectDetails } from './questions/projectDetails'; import { inquiryWorkspace } from './questions/workspace'; import { inquiryTemplate } from './questions/template'; import { inquirySupportedPlatforms } from './questions/supportedPlatforms'; -import { initNewProject, logTelemetry } from './projectGenerator'; +import { generateNewProject, initNewProject, telemetryNewProject } from './projectGenerator'; const taskNew = async () => { logTask('taskNew'); - - const data = await initNewProject(); - - await inquiryIsRenativeProject(); - await inquiryHasNodeModules(); - await inquiryProjectName({ data }); - await inquiryProjectDetails({ data }); - await inquiryWorkspace({ data }); - await inquiryTemplate({ data }); - await inquirySupportedPlatforms({ data }); - await inquiryBootstrapQuestions({ data }); - await inquiryGit({ data }); - await inquiryConfirm({ data }); - - await logTelemetry({ data }); + // Initialize Project + const payload = await initNewProject(); + // Interactive Questions Required + await inquiryIsRenativeProject(payload); + await inquiryHasNodeModules(payload); + await inquiryTemplate(payload); + // Interactive Questions Optional + await inquiryProjectName(payload); + await inquiryProjectDetails(payload); + await inquiryWorkspace(payload); + await inquirySupportedPlatforms(payload); + await inquiryBootstrapQuestions(payload); + await inquiryGit(payload); + await inquiryConfirm(payload); + // Generate Project + await generateNewProject(payload); + // Telementry + await telemetryNewProject(payload); logSuccess( - `Your project is ready! navigate to project ${chalk().bold(`cd ${data.projectName}`)} and run ${chalk().bold( + `Your project is ready! navigate to project ${chalk().bold(`cd ${payload.projectName}`)} and run ${chalk().bold( 'npx rnv run' )} to see magic happen!` ); diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index 54ef6d956a..fc9bf61bca 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -57,4 +57,6 @@ export type NewProjectData = { renativeConfig?: ConfigFileProject; selectedInputTemplate?: string; renativeTemplateConfigExt?: any; + confirmDeleteNodeModules?: boolean; + confirmInRnvProject?: boolean; }; From be70f89ab50ba7c82857b22ecb378355c819f99e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 12 Mar 2024 20:33:48 +0100 Subject: [PATCH 004/175] update taskNew options, questions --- .../src/tasks/global/new/projectGenerator.ts | 1 + .../src/tasks/global/new/questions/appID.ts | 29 ++++++ .../tasks/global/new/questions/appTitle.ts | 26 ++++++ .../tasks/global/new/questions/appVersion.ts | 27 ++++++ .../global/new/questions/confirmOverview.ts | 25 +---- .../global/new/questions/projectDetails.ts | 92 ------------------- .../src/tasks/global/new/taskNew.ts | 8 +- .../engine-core/src/tasks/global/new/utils.ts | 37 ++++++++ 8 files changed, 128 insertions(+), 117 deletions(-) create mode 100644 packages/engine-core/src/tasks/global/new/questions/appID.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/appTitle.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/appVersion.ts delete mode 100644 packages/engine-core/src/tasks/global/new/questions/projectDetails.ts diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index fca737de9c..e9dc5d500d 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -26,6 +26,7 @@ export const initNewProject = async () => { defaultProjectName: 'helloRenative', defaultAppTitle: 'Hello Renative', defaultWorkspace: 'rnv', + teamID: '', optionPlatforms: {}, optionTemplates: {}, optionWorkspaces: getWorkspaceOptions(), diff --git a/packages/engine-core/src/tasks/global/new/questions/appID.ts b/packages/engine-core/src/tasks/global/new/questions/appID.ts new file mode 100644 index 0000000000..117caf0626 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/appID.ts @@ -0,0 +1,29 @@ +import { getContext } from '@rnv/core'; +import type { NewProjectData } from '../types'; +import { validateAndAssign } from '../utils'; + +export const inquiryAppID = async (data: NewProjectData) => { + const c = getContext(); + const { id, ci } = c.program; + const validator = (appId: string) => + (typeof appId === 'string' && !!appId.match(/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/)) || + 'Please enter a valid appID (com.test.app)'; + + const result = await validateAndAssign( + { + value: id, + validFn: validator, + name: 'inputAppID', + defaultVal: () => { + data.appID = `com.mycompany.${data.inputProjectName?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; + return data.appID; + }, + message: "What's your App ID?", + warning: `Command contains invalid appId : ${id}`, + }, + ci + ); + + data.inputAppID = result; + data.appID = data.inputAppID ? data.inputAppID.replace(/\s+/g, '-').toLowerCase() : data.appID; +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts new file mode 100644 index 0000000000..71546a4c27 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts @@ -0,0 +1,26 @@ +import { getContext } from '@rnv/core'; +import type { NewProjectData } from '../types'; +import { checkInputValue, validateAndAssign } from '../utils'; + +export const inquiryAppTitle = async (data: NewProjectData) => { + const c = getContext(); + const { title, ci } = c.program; + const validator = (val: string) => checkInputValue(val) || 'Please enter a title'; + + const result = await validateAndAssign( + { + value: title, + validFn: validator, + name: 'inputAppTitle', + defaultVal: data.defaultAppTitle, + message: "What's your project Title?", + warning: 'Title was not provided', + }, + ci + ); + + data.inputAppTitle = result; + data.appTitle = data.inputAppTitle || data.defaultAppTitle; + + data.packageName = data?.appTitle?.replace(/\s+/g, '-').toLowerCase(); +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/appVersion.ts b/packages/engine-core/src/tasks/global/new/questions/appVersion.ts new file mode 100644 index 0000000000..485213cf5e --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/appVersion.ts @@ -0,0 +1,27 @@ +import { getContext } from '@rnv/core'; +import type { NewProjectData } from '../types'; +import { validateAndAssign } from '../utils'; +import semver from 'semver'; + +export const inquiryAppVersion = async (data: NewProjectData) => { + const c = getContext(); + const { appVersion, ci } = c.program; + + const validator = (version: string) => + !!semver.valid(semver.coerce(version)) || 'Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.)'; + + const result = await validateAndAssign( + { + value: appVersion, + validFn: validator, + name: 'inputVersion', + defaultVal: data.defaultVersion, + message: "What's your Version?", + warning: `Command contains invalid appVersion. Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.`, + }, + ci + ); + + data.inputVersion = result; + data.version = data.inputVersion || data.defaultVersion; +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts index e2acb3f99f..82cf89ff12 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts @@ -21,21 +21,18 @@ export const inquiryConfirm = async (data: NewProjectData) => { }); if (!confirm) { + // TOOD: this should reset the whole process return; } } }; const _prepareProjectOverview = (data: NewProjectData) => { - data.appTitle = data.inputAppTitle || data.defaultAppTitle; - data.teamID = ''; - data.appID = data.inputAppID ? data.inputAppID.replace(/\s+/g, '-').toLowerCase() : data.appID; - data.version = data.inputVersion || data.defaultVersion; const tempString = `${data.optionTemplates.selectedOption}@${data.optionTemplates.selectedVersion}`; const highlight = chalk().green; - let str = printBoxStart('🚀 ReNative Project Generator'); + let str = printBoxStart('🚀 ReNative Project Generator'); str += printIntoBox(''); str += printIntoBox(`Project Name (folder): ${highlight(data.projectName)}`); str += printIntoBox(`Workspace: ${highlight(data.optionWorkspaces.selectedOption)}`); @@ -47,24 +44,6 @@ const _prepareProjectOverview = (data: NewProjectData) => { str += printIntoBox(''); str += printIntoBox('Project Platforms:'); str += printArrIntoBox(data.optionPlatforms.selectedOptions || []); - str += printIntoBox(''); - str += printIntoBox('Project Structure:'); - str += printIntoBox(''); - str += printIntoBox(data.projectName || 'UNKNOWN'); - str += chalk().gray(`│ ├── appConfigs # Application flavour configuration files/assets │ -│ │ └── [APP_ID] # Example application flavour │ -│ │ ├── assets # Platform assets injected to ./platformAssets │ -│ │ ├── builds # Platform files injected to ./platformBuilds │ -│ │ ├── fonts # Folder for all custom fonts │ -│ │ ├── plugins # Multi-platform plugins injections │ -│ │ └── renative.json # Application flavour config │ -│ ├── platformAssets # Generated cross-platform assets │ -│ ├── platformBuilds # Generated platform app projects │ -│ ├── src # Source code files │ -│ ├── index.*.js # Entry files │ -│ └── renative.json # ReNative project configuration │ -`); - str += printIntoBox(''); str += printBoxEnd(); str += '\n'; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts b/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts deleted file mode 100644 index d3606dd978..0000000000 --- a/packages/engine-core/src/tasks/global/new/questions/projectDetails.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { getContext, inquirerPrompt } from '@rnv/core'; -import type { NewProjectData } from '../types'; -import { checkInputValue } from '../utils'; -import semver from 'semver'; - -export const inquiryProjectDetails = async (data: NewProjectData) => { - const c = getContext(); - const { title, id, appVersion, ci } = c.program; - const validator = { - validateAppTitle: (val: string) => checkInputValue(val) || 'Please enter a title', - validateAppID: (appId: string) => - (typeof appId === 'string' && !!appId.match(/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/)) || - 'Please enter a valid appID (com.test.app)', - validateAppVersion: (version: string) => - !!semver.valid(semver.coerce(version)) || - 'Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.)', - }; - - const inputValues = [ - { - value: title, - validFn: validator.validateAppTitle, - name: 'inputAppTitle', - defaultVal: data.defaultAppTitle, - message: "What's your project Title?", - warning: 'Title was not provided', - }, - { - value: id, - validFn: validator.validateAppID, - name: 'inputAppID', - defaultVal: () => { - data.appID = `com.mycompany.${data.inputProjectName?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; - return data.appID; - }, - message: "What's your App ID?", - warning: `Command contains invalid appId : ${id}`, - }, - { - value: appVersion, - validFn: validator.validateAppVersion, - name: 'inputVersion', - defaultVal: data.defaultVersion, - message: "What's your Version?", - warning: `Command contains invalid appVersion. Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.`, - }, - ]; - - const validateAndAssign = async ({ - value, - validFn, - name, - defaultVal, - message, - warning, - }: { - value: string; - validFn: (value: string) => true | string; - name: string; - defaultVal: (() => string) | string | undefined; - message: string; - warning: string; - }): Promise => { - const isValid = validFn(value); - if (value && isValid === true) { - return value; - } else { - const warningMessage = typeof isValid === 'string'; - const answer = await inquirerPrompt({ - name, - type: 'input', - default: defaultVal, - validate: validFn, - message, - warningMessage: ci && warningMessage && warning, - }); - return answer[name]; - } - }; - const inputsResult = []; - for (const value of inputValues) { - const res = await validateAndAssign(value); - inputsResult.push(res); - } - - data.packageName = data?.appTitle?.replace(/\s+/g, '-').toLowerCase(); - - const [inputAppTitle, inputAppID, inputVersion] = inputsResult; - data.inputAppTitle = inputAppTitle; - data.inputAppID = inputAppID; - data.inputVersion = inputVersion; -}; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index c95b59b8bf..d2f5d54db4 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -5,11 +5,13 @@ import { inquiryIsRenativeProject } from './questions/isRenativeProject'; import { inquiryHasNodeModules } from './questions/hasNodeModules'; import { inquiryConfirm } from './questions/confirmOverview'; import { inquiryProjectName } from './questions/projectName'; -import { inquiryProjectDetails } from './questions/projectDetails'; import { inquiryWorkspace } from './questions/workspace'; import { inquiryTemplate } from './questions/template'; import { inquirySupportedPlatforms } from './questions/supportedPlatforms'; import { generateNewProject, initNewProject, telemetryNewProject } from './projectGenerator'; +import { inquiryAppTitle } from './questions/appTitle'; +import { inquiryAppID } from './questions/appID'; +import { inquiryAppVersion } from './questions/appVersion'; const taskNew = async () => { logTask('taskNew'); @@ -21,7 +23,9 @@ const taskNew = async () => { await inquiryTemplate(payload); // Interactive Questions Optional await inquiryProjectName(payload); - await inquiryProjectDetails(payload); + await inquiryAppTitle(payload); + await inquiryAppID(payload); + await inquiryAppVersion(payload); await inquiryWorkspace(payload); await inquirySupportedPlatforms(payload); await inquiryBootstrapQuestions(payload); diff --git a/packages/engine-core/src/tasks/global/new/utils.ts b/packages/engine-core/src/tasks/global/new/utils.ts index aa4b11bfdf..9e579a820d 100644 --- a/packages/engine-core/src/tasks/global/new/utils.ts +++ b/packages/engine-core/src/tasks/global/new/utils.ts @@ -1,3 +1,40 @@ +import { inquirerPrompt } from '@rnv/core'; + export const checkInputValue = (value: string | boolean): boolean => { return value && typeof value === 'string' && value !== '' ? true : false; }; + +export const validateAndAssign = async ( + { + value, + validFn, + name, + defaultVal, + message, + warning, + }: { + value: string; + validFn: (value: string) => true | string; + name: string; + defaultVal: (() => string) | string | undefined; + message: string; + warning: string; + }, + ci: boolean +): Promise => { + const isValid = validFn(value); + if (value && isValid === true) { + return value; + } else { + const warningMessage = typeof isValid === 'string'; + const answer = await inquirerPrompt({ + name, + type: 'input', + default: defaultVal, + validate: validFn, + message, + warningMessage: ci && warningMessage ? warning : undefined, + }); + return answer[name]; + } +}; From 22aa7abd200c831d21a4f1b61336fc4aec0ab791 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 12 Mar 2024 23:01:28 +0100 Subject: [PATCH 005/175] update tackNew logic --- .../core/src/schema/configFiles/project.ts | 10 +-- packages/engine-core/src/index.ts | 2 +- .../src/tasks/global/new/projectGenerator.ts | 22 ++++-- .../global/new/questions/applyTemplate.ts | 61 +++++++++++++++ .../global/new/questions/bookmarkTemplate.ts | 35 +++++++++ .../new/questions/bootstrapQuestions.ts | 6 +- .../{template.ts => installTemplate.ts} | 78 +++---------------- .../tasks/global/new/questions/projectName.ts | 4 +- .../new/questions/supportedPlatforms.ts | 2 +- .../src/tasks/global/new/taskNew.ts | 10 ++- .../engine-core/src/tasks/global/new/types.ts | 12 ++- 11 files changed, 154 insertions(+), 88 deletions(-) create mode 100644 packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts create mode 100644 packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts rename packages/engine-core/src/tasks/global/new/questions/{template.ts => installTemplate.ts} (52%) diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index f2c93023a2..670058a2c5 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -214,16 +214,16 @@ const UseTemplate = z.object({ //LEVEl 0 (ROOT) const RootProjectBaseFragment = { - workspaceID: WorkspaceID, - projectVersion: z.string(), - projectName: ProjectName, + workspaceID: WorkspaceID.optional(), + projectVersion: z.string().optional(), + projectName: ProjectName.optional(), isMonorepo: z.optional(IsMonoRepo), useTemplate: z.optional(UseTemplate), isTemplate: z.boolean().optional(), defaults: z.optional(DefaultsSchema), pipes: z.optional(Pipes), - templates: Templates, - currentTemplate: CurrentTemplate, + templates: Templates.optional(), + currentTemplate: CurrentTemplate.optional(), crypto: z.optional(Crypto), paths: z.optional(Paths), permissions: z.optional(Permissions), diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index 5f786a5acd..ee5e6a3a81 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -24,7 +24,7 @@ import taskClean from './tasks/global/taskClean'; import taskStatus from './tasks/global/taskStatus'; import taskConfig from './tasks/global/taskConfig'; import taskHelp from './tasks/global/taskHelp'; -import taskNew from './tasks/global/taskNew'; +import taskNew from './tasks/global/new/taskNew'; import taskInstall from './tasks/global/taskInstall'; import taskProjectConfigure from './tasks/project/taskProjectConfigure'; import taskProjectUpgrade from './tasks/project/taskProjectUpgrade'; diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index e9dc5d500d..6714a69b1b 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -8,6 +8,7 @@ import { getWorkspaceOptions, logDebug, logTask, + updateRenativeConfigs, writeFileSync, } from '@rnv/core'; import path from 'path'; @@ -30,7 +31,18 @@ export const initNewProject = async () => { optionPlatforms: {}, optionTemplates: {}, optionWorkspaces: getWorkspaceOptions(), + files: { + project: { + renativeConfig: {}, + }, + template: { + renativeTemplateConfig: {}, + renativeConfig: {}, + }, + }, }; + // TODO: This enforces to generate initial runtime configs. find more reliable way to do this + await updateRenativeConfigs(); return data; }; @@ -43,7 +55,7 @@ export const generateNewProject = async (data: NewProjectData) => { if (!data.optionTemplates.selectedVersion) { return Promise.reject('No template version selected'); } - if (!data.renativeTemplateConfig) { + if (!data.files.template.renativeTemplateConfig) { return Promise.reject('No renativeTemplateConfig found'); } if (!data.optionTemplates.selectedOption) { @@ -59,12 +71,12 @@ export const generateNewProject = async (data: NewProjectData) => { }; } - delete data.renativeTemplateConfig.templateConfig; - delete data.renativeTemplateConfig.bootstrapConfig; + delete data.files.template.renativeTemplateConfig.templateConfig; + delete data.files.template.renativeTemplateConfig.bootstrapConfig; const config: ConfigFileProject = { platforms: {}, - ...data.renativeTemplateConfig, + ...data.files.template.renativeTemplateConfig, ...data.renativeTemplateConfigExt, projectName: data.projectName || 'my-project', projectVersion: data.inputVersion || '0.1.0', @@ -104,7 +116,7 @@ export const generateNewProject = async (data: NewProjectData) => { } }); - const tplEngines = data.renativeTemplateConfig.engines; + const tplEngines = data.files.template.renativeTemplateConfig.engines; if (tplEngines) { // Remove unused engines based on selected platforms supPlats.forEach((k) => { diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts new file mode 100644 index 0000000000..2160a97416 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -0,0 +1,61 @@ +import { + ConfigFileProject, + ConfigFileTemplate, + ConfigName, + getContext, + inquirerPrompt, + readObjectSync, + writeFileSync, +} from '@rnv/core'; +import type { NewProjectData } from '../types'; +import path from 'path'; + +export const inquiryApplyTemplate = async (data: NewProjectData) => { + const c = getContext(); + + if (!data.optionTemplates.selectedOption) { + return Promise.reject('Template not selected'); + } + const templateDir = path.join(c.paths.project.dir, 'node_modules', data.optionTemplates.selectedOption); + + const renativeTemplateConfig = + readObjectSync(path.join(templateDir, ConfigName.renativeTemplate)) || {}; + if (renativeTemplateConfig) { + data.files.template.renativeTemplateConfig = renativeTemplateConfig; + } + + const renativeConfig = readObjectSync(path.join(templateDir, ConfigName.renative)); + if (renativeConfig) { + data.files.template.renativeConfig = renativeConfig; + } + + const optExtend = 'Extend template (cleaner, overridable)'; + const optCopy = 'Copy from template (full control)'; + const options = [optExtend, optCopy]; + const { configOption } = await inquirerPrompt({ + name: 'configOption', + type: 'list', + message: 'How to create config renative.json?', + default: data.defaultTemplate, + choices: options, + }); + + if (configOption === optExtend) { + const rnvConfig = data.files.template.renativeTemplateConfig.templateConfig?.renative_json || { + extendsTemplate: `${data.optionTemplates.selectedOption}/renative.json`, + }; + writeFileSync(c.paths.project.config, rnvConfig); + } else if (configOption === optCopy) { + writeFileSync(c.paths.project.config, data.files.template.renativeConfig); + } + + // const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; + + // if (rnvNewPatchDependencies) { + // const patchDeps = Object.entries(rnvNewPatchDependencies); + // for (const [dependency, version] of patchDeps) { + // const command = `${isYarnInstalled() ? 'yarn' : 'npm'} add ${dependency}@${version}`; + // await executeAsync(command, { cwd: c.paths.project.dir }); + // } + // } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts new file mode 100644 index 0000000000..1a5f4dad78 --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts @@ -0,0 +1,35 @@ +import { chalk, getContext, inquirerPrompt, logInfo, updateRenativeConfigs, writeFileSync } from '@rnv/core'; +import type { NewProjectData } from '../types'; + +export const inquiryBookmarkTemplate = async (data: NewProjectData) => { + const c = getContext(); + + if (!data.optionTemplates.selectedOption) { + return Promise.reject('Template not selected'); + } + + if (!data.optionTemplates.keysAsArray?.includes(data.optionTemplates.selectedOption)) { + const { confirmAddTemplate } = await inquirerPrompt({ + name: 'confirmAddTemplate', + type: 'confirm', + message: `Would you like to add ${chalk().bold(data.optionTemplates.selectedOption)} to your ${ + c.runtime.selectedWorkspace + } workspace template list?`, + }); + + const configFile = c.files.workspace.config; + + if (configFile) { + if (confirmAddTemplate) { + if (!configFile.projectTemplates) { + configFile.projectTemplates = {}; + } + configFile.projectTemplates[data.optionTemplates.selectedOption] = {}; + writeFileSync(c.paths.workspace.config, configFile); + await updateRenativeConfigs(); + + logInfo(`Updating ${c.paths.workspace.config}...DONE`); + } + } + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts index ad21d3ce13..14f9c8fae1 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts @@ -15,8 +15,8 @@ type QuestionResults = Record< export const inquiryBootstrapQuestions = async (data: NewProjectData) => { const c = getContext(); - data.renativeTemplateConfigExt = {}; - const bootstrapQuestions = data.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; + data.files.template.renativeTemplateConfigExt = {}; + const bootstrapQuestions = data.files.template.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; const results: QuestionResults = {}; const providedAnswers: Record = {}; @@ -45,7 +45,7 @@ export const inquiryBootstrapQuestions = async (data: NewProjectData) => { logDebug('setting', targetKey, objValue); if (targetKey) { - lSet(data.renativeTemplateConfigExt, targetKey, objValue); + lSet(data.files.template.renativeTemplateConfigExt, targetKey, objValue); } }); }; diff --git a/packages/engine-core/src/tasks/global/new/questions/template.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts similarity index 52% rename from packages/engine-core/src/tasks/global/new/questions/template.ts rename to packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 3fb52977ac..bef613814a 100644 --- a/packages/engine-core/src/tasks/global/new/questions/template.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -1,7 +1,4 @@ import { - ConfigFileProject, - ConfigFileTemplate, - ConfigName, chalk, executeAsync, fsExistsSync, @@ -10,17 +7,12 @@ import { inquirerPrompt, isYarnInstalled, listAndSelectNpmVersion, - logError, - logInfo, - readObjectSync, - updateRenativeConfigs, - writeFileSync, } from '@rnv/core'; import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; -export const inquiryTemplate = async (data: NewProjectData) => { +export const inquiryInstallTemplate = async (data: NewProjectData) => { const customTemplate = 'Custom Template ...'; const c = getContext(); @@ -83,72 +75,24 @@ export const inquiryTemplate = async (data: NewProjectData) => { data.optionTemplates.selectedVersion = inputTemplateVersion; - await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion}`, { - cwd: c.paths.project.dir, - }); + await executeAsync( + `${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion} --dev`, + { + cwd: c.paths.project.dir, + } + ); // Add rnv to package.json - await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add rnv@${c.rnvVersion}`, { - cwd: c.paths.project.dir, - }); + // await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add rnv@${c.rnvVersion}`, { + // cwd: c.paths.project.dir, + // }); // Check if node_modules folder exists if (!fsExistsSync(path.join(c.paths.project.dir, 'node_modules'))) { - logError( + return Promise.reject( `${ isYarnInstalled() ? 'yarn' : 'npm' } add ${selectedInputTemplate}@${inputTemplateVersion} : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` ); - return; - } - // This ensures that the correct version of the npm packages will be used to run the project for the first time after creation - - const renativeTemplateConfig = - readObjectSync( - path.join(c.paths.project.dir, 'node_modules', selectedInputTemplate, ConfigName.renativeTemplate) - ) || {}; - - const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; - - if (rnvNewPatchDependencies) { - const patchDeps = Object.entries(rnvNewPatchDependencies); - for (const [dependency, version] of patchDeps) { - const command = `${isYarnInstalled() ? 'yarn' : 'npm'} add ${dependency}@${version}`; - await executeAsync(command, { cwd: c.paths.project.dir }); - } - } - - if (!data.optionTemplates.keysAsArray?.includes(selectedInputTemplate)) { - const { confirmAddTemplate } = await inquirerPrompt({ - name: 'confirmAddTemplate', - type: 'confirm', - message: `Would you like to add ${chalk().bold(selectedInputTemplate)} to your ${ - c.runtime.selectedWorkspace - } workspace template list?`, - }); - - const configFile = c.files.workspace.config; - - if (configFile) { - if (confirmAddTemplate) { - if (!configFile.projectTemplates) { - configFile.projectTemplates = {}; - } - configFile.projectTemplates[selectedInputTemplate] = {}; - writeFileSync(c.paths.workspace.config, configFile); - await updateRenativeConfigs(); - - logInfo(`Updating ${c.paths.workspace.config}...DONE`); - } - } - } - - data.renativeTemplateConfig = renativeTemplateConfig; - - const renativeConfig = readObjectSync( - path.join(c.paths.project.dir, 'node_modules', selectedInputTemplate, ConfigName.renative) - ); - if (renativeConfig) { - data.renativeConfig = renativeConfig; } }; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index 84f8185add..8b1492cd5e 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -1,4 +1,4 @@ -import { cleanFolder, fsExistsSync, getContext, inquirerPrompt, mkdirSync } from '@rnv/core'; +import { ConfigName, cleanFolder, fsExistsSync, getContext, inquirerPrompt, mkdirSync } from '@rnv/core'; import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; @@ -22,6 +22,8 @@ export const inquiryProjectName = async (data: NewProjectData) => { data.projectName = inputProjectName.replace(/(\s+)/g, '_'); c.paths.project.dir = path.join(c.paths.CURRENT_DIR, data.projectName); + c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); + c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); if (fsExistsSync(c.paths.project.dir)) { const { confirm } = await inquirerPrompt({ diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts index bce730abd2..d17b815dce 100644 --- a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -6,7 +6,7 @@ export const inquirySupportedPlatforms = async (data: NewProjectData) => { const c = getContext(); const { platform } = c.program; const supportedPlatforms = - data.renativeTemplateConfig?.defaults?.supportedPlatforms || + data.files.template.renativeTemplateConfig?.defaults?.supportedPlatforms || data.renativeConfig?.defaults?.supportedPlatforms || []; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index d2f5d54db4..e1f1a80baf 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -6,23 +6,26 @@ import { inquiryHasNodeModules } from './questions/hasNodeModules'; import { inquiryConfirm } from './questions/confirmOverview'; import { inquiryProjectName } from './questions/projectName'; import { inquiryWorkspace } from './questions/workspace'; -import { inquiryTemplate } from './questions/template'; import { inquirySupportedPlatforms } from './questions/supportedPlatforms'; import { generateNewProject, initNewProject, telemetryNewProject } from './projectGenerator'; import { inquiryAppTitle } from './questions/appTitle'; import { inquiryAppID } from './questions/appID'; import { inquiryAppVersion } from './questions/appVersion'; +import { inquiryInstallTemplate } from './questions/installTemplate'; +import { inquiryApplyTemplate } from './questions/applyTemplate'; +import { inquiryBookmarkTemplate } from './questions/bookmarkTemplate'; const taskNew = async () => { logTask('taskNew'); // Initialize Project const payload = await initNewProject(); // Interactive Questions Required + await inquiryProjectName(payload); await inquiryIsRenativeProject(payload); await inquiryHasNodeModules(payload); - await inquiryTemplate(payload); + await inquiryInstallTemplate(payload); + await inquiryApplyTemplate(payload); // Interactive Questions Optional - await inquiryProjectName(payload); await inquiryAppTitle(payload); await inquiryAppID(payload); await inquiryAppVersion(payload); @@ -30,6 +33,7 @@ const taskNew = async () => { await inquirySupportedPlatforms(payload); await inquiryBootstrapQuestions(payload); await inquiryGit(payload); + await inquiryBookmarkTemplate(payload); await inquiryConfirm(payload); // Generate Project await generateNewProject(payload); diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index fc9bf61bca..8e9e699c41 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -53,10 +53,18 @@ export type NewProjectData = { defaultWorkspace?: string; inputSupportedPlatforms?: Array; inputWorkspace?: string; - renativeTemplateConfig?: ConfigFileTemplate; - renativeConfig?: ConfigFileProject; + selectedInputTemplate?: string; renativeTemplateConfigExt?: any; confirmDeleteNodeModules?: boolean; confirmInRnvProject?: boolean; + files: { + template: { + renativeTemplateConfig: ConfigFileTemplate; + renativeConfig: ConfigFileProject; + }; + project: { + renativeConfig: ConfigFileProject; + }; + }; }; From 445a3d9fe1757aa5db1a9f71d1a2bec69ec3ba48 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 00:15:25 +0100 Subject: [PATCH 006/175] fix optionals --- packages/core/src/projects/package.ts | 2 +- .../src/tasks/global/new/questions/bootstrapQuestions.ts | 4 ++-- .../src/tasks/global/new/questions/supportedPlatforms.ts | 2 +- packages/sdk-android/src/gradleParser.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/core/src/projects/package.ts b/packages/core/src/projects/package.ts index c94ab17462..e0d9b01012 100644 --- a/packages/core/src/projects/package.ts +++ b/packages/core/src/projects/package.ts @@ -55,7 +55,7 @@ export const checkAndCreateProjectPackage = async () => { if (templateName) { pkgJson.devDependencies[templateName] = - c.files.project.config?.templates[templateName]?.version || 'latest'; + c.files.project.config?.templates?.[templateName]?.version || 'latest'; } const pkgJsonStringClean = JSON.stringify(pkgJson, null, 2); fsWriteFileSync(c.paths.project.package, pkgJsonStringClean); diff --git a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts index 14f9c8fae1..65a02113b8 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts @@ -15,7 +15,7 @@ type QuestionResults = Record< export const inquiryBootstrapQuestions = async (data: NewProjectData) => { const c = getContext(); - data.files.template.renativeTemplateConfigExt = {}; + data.renativeTemplateConfigExt = {}; const bootstrapQuestions = data.files.template.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; const results: QuestionResults = {}; const providedAnswers: Record = {}; @@ -45,7 +45,7 @@ export const inquiryBootstrapQuestions = async (data: NewProjectData) => { logDebug('setting', targetKey, objValue); if (targetKey) { - lSet(data.files.template.renativeTemplateConfigExt, targetKey, objValue); + lSet(data.renativeTemplateConfigExt, targetKey, objValue); } }); }; diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts index d17b815dce..230752f629 100644 --- a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -7,7 +7,7 @@ export const inquirySupportedPlatforms = async (data: NewProjectData) => { const { platform } = c.program; const supportedPlatforms = data.files.template.renativeTemplateConfig?.defaults?.supportedPlatforms || - data.renativeConfig?.defaults?.supportedPlatforms || + data.files.template.renativeConfig?.defaults?.supportedPlatforms || []; if (supportedPlatforms.length === 0) { diff --git a/packages/sdk-android/src/gradleParser.ts b/packages/sdk-android/src/gradleParser.ts index 88b84e0d28..c48fa2ecd8 100644 --- a/packages/sdk-android/src/gradleParser.ts +++ b/packages/sdk-android/src/gradleParser.ts @@ -522,7 +522,7 @@ export const parseSettingsGradleSync = () => { }, { pattern: '{{RN_GRADLE_PROJECT_NAME}}', - override: c.files.project.config?.projectName.replace('/', '-'), + override: c.files.project.config?.projectName?.replace('/', '-'), }, ]; From d970194e053368454fcbb3ae1898365a34280fcf Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 01:33:49 +0100 Subject: [PATCH 007/175] support local templates --- .../global/new/questions/installTemplate.ts | 109 ++++++++++++++---- .../tasks/global/new/questions/projectName.ts | 18 +-- 2 files changed, 96 insertions(+), 31 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index bef613814a..bc01dd7dbc 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -1,19 +1,28 @@ import { chalk, + copyFileSync, + copyFolderRecursiveSync, executeAsync, fsExistsSync, + fsLstatSync, + fsReaddirSync, getContext, getTemplateOptions, inquirerPrompt, isYarnInstalled, listAndSelectNpmVersion, + logInfo, + mkdirSync, + readObjectSync, } from '@rnv/core'; import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; +import { NpmPackageFile } from '@rnv/core/lib/configs/types'; export const inquiryInstallTemplate = async (data: NewProjectData) => { - const customTemplate = 'Custom Template ...'; + const customTemplate = 'Custom Template...'; + const localTemplate = 'Local Template...'; const c = getContext(); const { templateVersion, projectTemplate } = c.program; @@ -40,7 +49,9 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { // data.optionTemplates.keysAsArray.push(customTemplate); options.push(customTemplate); + options.push(localTemplate); let selectedInputTemplate; + let localTemplatePath: string | undefined; if (checkInputValue(projectTemplate)) { selectedInputTemplate = projectTemplate; } else { @@ -59,40 +70,94 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { message: 'Type exact name of your template NPM package.', }); selectedInputTemplate = inputTemplateCustom; + } else if (inputTemplate === localTemplate) { + const { inputTemplateLocal } = await inquirerPrompt({ + name: 'inputTemplateLocal', + type: 'input', + message: 'Path (absolute):', + }); + localTemplatePath = inputTemplateLocal; } else { selectedInputTemplate = getTemplateKey(inputTemplate); } } - data.optionTemplates.selectedOption = selectedInputTemplate; + const nmDir = path.join(c.paths.project.dir, 'node_modules'); + + if (localTemplatePath) { + if (!fsExistsSync(localTemplatePath)) { + return Promise.reject(`Local template path ${localTemplatePath} does not exist`); + } + const localTemplatePkgPath = path.join(localTemplatePath, 'package.json'); + if (!fsExistsSync(localTemplatePath)) { + return Promise.reject(`Local template package ${localTemplatePkgPath} does not exist`); + } + const pkg = readObjectSync(localTemplatePkgPath); - let inputTemplateVersion; - if (checkInputValue(templateVersion)) { - inputTemplateVersion = templateVersion; + mkdirSync(nmDir); + if (!pkg?.name) { + return Promise.reject(`Invalid package ${localTemplatePkgPath} missing name field`); + } + data.optionTemplates.selectedOption = pkg.name; + data.optionTemplates.selectedVersion = pkg.version; + const nmTemplatePath = path.join(nmDir, pkg?.name); + + logInfo(`Found local template: ${data.optionTemplates.selectedOption}@${pkg.version}`); + + mkdirSync(nmTemplatePath); + + const ignorePaths = [ + 'node_modules', + 'package-lock.json', + 'yarn.lock', + 'platformBuilds', + 'dist', + 'builds', + 'platfomAssets', + '.rnv', + 'lib', + ]; + fsReaddirSync(localTemplatePath).forEach((file) => { + if (!ignorePaths.includes(file) && localTemplatePath) { + const sourcePath = path.join(localTemplatePath, file); + const destPath = path.join(nmTemplatePath, file); + if (fsLstatSync(sourcePath).isDirectory()) { + copyFolderRecursiveSync(sourcePath, destPath); + } else { + copyFileSync(sourcePath, destPath); + } + } + }); } else { - inputTemplateVersion = await listAndSelectNpmVersion(data.optionTemplates.selectedOption || ''); - } + data.optionTemplates.selectedOption = selectedInputTemplate; - data.optionTemplates.selectedVersion = inputTemplateVersion; + let inputTemplateVersion; + if (checkInputValue(templateVersion)) { + inputTemplateVersion = templateVersion; + } else { + inputTemplateVersion = await listAndSelectNpmVersion(data.optionTemplates.selectedOption || ''); + } - await executeAsync( - `${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion} --dev`, - { - cwd: c.paths.project.dir, + data.optionTemplates.selectedVersion = inputTemplateVersion; + + await executeAsync( + `${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion} --dev`, + { + cwd: c.paths.project.dir, + } + ); + // Check if node_modules folder exists + if (!fsExistsSync(nmDir)) { + return Promise.reject( + `${ + isYarnInstalled() ? 'yarn' : 'npm' + } add ${selectedInputTemplate}@${inputTemplateVersion} : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` + ); } - ); + } // Add rnv to package.json // await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add rnv@${c.rnvVersion}`, { // cwd: c.paths.project.dir, // }); - - // Check if node_modules folder exists - if (!fsExistsSync(path.join(c.paths.project.dir, 'node_modules'))) { - return Promise.reject( - `${ - isYarnInstalled() ? 'yarn' : 'npm' - } add ${selectedInputTemplate}@${inputTemplateVersion} : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` - ); - } }; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index 8b1492cd5e..149e20c5cc 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -1,35 +1,35 @@ -import { ConfigName, cleanFolder, fsExistsSync, getContext, inquirerPrompt, mkdirSync } from '@rnv/core'; +import { ConfigName, cleanFolder, fsExistsSync, getContext, inquirerPrompt, logWarning, mkdirSync } from '@rnv/core'; import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; export const inquiryProjectName = async (data: NewProjectData) => { - let inputProjectName: string; - const c = getContext(); const { projectName } = c.program; if (checkInputValue(projectName)) { - inputProjectName = projectName; + data.inputProjectName = projectName; } else { const inputProjectNameObj = await inquirerPrompt({ name: 'inputProjectName', type: 'input', + default: 'hello-renative', validate: (value) => checkInputValue(value), - message: "What's your project Name? (no spaces, folder based on ID will be created in this directory)", + message: "What's your project Name? (folder will be created)", }); - inputProjectName = inputProjectNameObj?.inputProjectName; + data.inputProjectName = inputProjectNameObj?.inputProjectName; } - data.projectName = inputProjectName.replace(/(\s+)/g, '_'); - c.paths.project.dir = path.join(c.paths.CURRENT_DIR, data.projectName); + data.projectName = data.inputProjectName?.replace?.(/(\s+)/g, '_'); + c.paths.project.dir = path.join(c.paths.CURRENT_DIR, data.projectName || ''); c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); if (fsExistsSync(c.paths.project.dir)) { + logWarning(`Folder ${c.paths.project.dir} already exists. RNV will override it.`); const { confirm } = await inquirerPrompt({ type: 'confirm', name: 'confirm', - message: `Folder ${c.paths.project.dir} already exists. RNV will override it. Continue?`, + message: 'Continue?', }); if (!confirm) { From 5f77b554b97c38be8feb715116982380b23b8312 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 01:59:22 +0100 Subject: [PATCH 008/175] taskNew updates --- packages/core/src/index.ts | 2 ++ .../src/tasks/global/new/projectGenerator.ts | 7 +++++++ .../src/tasks/global/new/questions/applyTemplate.ts | 8 +++++--- .../src/tasks/global/new/questions/installTemplate.ts | 2 +- .../src/tasks/global/new/questions/projectName.ts | 2 ++ packages/engine-core/src/tasks/global/new/taskNew.ts | 10 +++++++++- packages/engine-core/src/tasks/global/new/types.ts | 3 ++- .../src/tasks/project/taskProjectUpgrade.ts | 4 ++-- packages/engine-rn-electron/src/sdk.ts | 2 +- packages/engine-rn-electron/src/types.ts | 2 +- packages/sdk-react-native/src/iosRunner.ts | 2 +- 11 files changed, 33 insertions(+), 11 deletions(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 28af28c7c9..db80314ae7 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -64,6 +64,8 @@ export * from './projects/types'; export * from './schema/types'; export * from './tasks/types'; export * from './system/types'; +export * from './configs/types'; +export * from './env/types'; export * from './api/types'; export * from './types'; export * from './schema/types'; diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index 6714a69b1b..d0a94e1118 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -15,6 +15,12 @@ import path from 'path'; import { NewProjectData } from './types'; import { configureGit } from './questions/confirmGit'; +export const saveProgressIntoProjectConfig = async (data: NewProjectData) => { + const c = getContext(); + writeFileSync(c.paths.project.config, data.files.project.renativeConfig); + writeFileSync(c.paths.project.package, data.files.project.packageJson); +}; + export const initNewProject = async () => { const c = getContext(); @@ -34,6 +40,7 @@ export const initNewProject = async () => { files: { project: { renativeConfig: {}, + packageJson: {}, }, template: { renativeTemplateConfig: {}, diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index 2160a97416..65b8b1cfe1 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -5,7 +5,6 @@ import { getContext, inquirerPrompt, readObjectSync, - writeFileSync, } from '@rnv/core'; import type { NewProjectData } from '../types'; import path from 'path'; @@ -44,11 +43,14 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { const rnvConfig = data.files.template.renativeTemplateConfig.templateConfig?.renative_json || { extendsTemplate: `${data.optionTemplates.selectedOption}/renative.json`, }; - writeFileSync(c.paths.project.config, rnvConfig); + data.files.project.renativeConfig = rnvConfig; } else if (configOption === optCopy) { - writeFileSync(c.paths.project.config, data.files.template.renativeConfig); + data.files.project.renativeConfig = data.files.template.renativeConfig; } + const packageJson = data.files.template.renativeTemplateConfig.templateConfig?.package_json || {}; + data.files.project.packageJson = packageJson; + // const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; // if (rnvNewPatchDependencies) { diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index bc01dd7dbc..9f8671b839 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -1,4 +1,5 @@ import { + NpmPackageFile, chalk, copyFileSync, copyFolderRecursiveSync, @@ -18,7 +19,6 @@ import { import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; -import { NpmPackageFile } from '@rnv/core/lib/configs/types'; export const inquiryInstallTemplate = async (data: NewProjectData) => { const customTemplate = 'Custom Template...'; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index 149e20c5cc..cea2a38af5 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -24,6 +24,8 @@ export const inquiryProjectName = async (data: NewProjectData) => { c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); + data.files.project.renativeConfig.projectName = data.projectName; + if (fsExistsSync(c.paths.project.dir)) { logWarning(`Folder ${c.paths.project.dir} already exists. RNV will override it.`); const { confirm } = await inquirerPrompt({ diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index e1f1a80baf..edfbf99d20 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -7,7 +7,12 @@ import { inquiryConfirm } from './questions/confirmOverview'; import { inquiryProjectName } from './questions/projectName'; import { inquiryWorkspace } from './questions/workspace'; import { inquirySupportedPlatforms } from './questions/supportedPlatforms'; -import { generateNewProject, initNewProject, telemetryNewProject } from './projectGenerator'; +import { + generateNewProject, + initNewProject, + saveProgressIntoProjectConfig, + telemetryNewProject, +} from './projectGenerator'; import { inquiryAppTitle } from './questions/appTitle'; import { inquiryAppID } from './questions/appID'; import { inquiryAppVersion } from './questions/appVersion'; @@ -25,11 +30,14 @@ const taskNew = async () => { await inquiryHasNodeModules(payload); await inquiryInstallTemplate(payload); await inquiryApplyTemplate(payload); + await saveProgressIntoProjectConfig(payload); // Interactive Questions Optional await inquiryAppTitle(payload); await inquiryAppID(payload); await inquiryAppVersion(payload); await inquiryWorkspace(payload); + await saveProgressIntoProjectConfig(payload); + await inquirySupportedPlatforms(payload); await inquiryBootstrapQuestions(payload); await inquiryGit(payload); diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index 8e9e699c41..127045176d 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -1,4 +1,4 @@ -import { ConfigFileProject, ConfigFileTemplate, PlatformKey } from '@rnv/core'; +import { ConfigFileProject, ConfigFileTemplate, NpmPackageFile, PlatformKey } from '@rnv/core'; export type NewProjectData = { appTitle?: string; @@ -65,6 +65,7 @@ export type NewProjectData = { }; project: { renativeConfig: ConfigFileProject; + packageJson: NpmPackageFile; }; }; }; diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index a94c4bde27..c48383eccf 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -15,9 +15,9 @@ import { RnvTaskFn, RnvTask, RnvTaskName, + NpmPackageFile, + ConfigFileProject, } from '@rnv/core'; -import { NpmPackageFile } from '@rnv/core/lib/configs/types'; -import { ConfigFileProject } from '@rnv/core/lib/schema/configFiles/types'; const taskProjectUpgrade: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskProjectUpgrade'); diff --git a/packages/engine-rn-electron/src/sdk.ts b/packages/engine-rn-electron/src/sdk.ts index 75834d241c..a558c88571 100644 --- a/packages/engine-rn-electron/src/sdk.ts +++ b/packages/engine-rn-electron/src/sdk.ts @@ -28,9 +28,9 @@ import { getAppFolder, RnvTaskName, getContext, + NpmPackageFile, } from '@rnv/core'; import { FileElectronPackage } from './types'; -import { NpmPackageFile } from '@rnv/core/lib/configs/types'; import { checkPortInUse, waitForHost, diff --git a/packages/engine-rn-electron/src/types.ts b/packages/engine-rn-electron/src/types.ts index b3124d708b..fddf0a6905 100644 --- a/packages/engine-rn-electron/src/types.ts +++ b/packages/engine-rn-electron/src/types.ts @@ -1,4 +1,4 @@ -import { NpmPackageFile } from '@rnv/core/lib/configs/types'; +import { NpmPackageFile } from '@rnv/core'; export type FileElectronPackage = NpmPackageFile & { productName?: string; diff --git a/packages/sdk-react-native/src/iosRunner.ts b/packages/sdk-react-native/src/iosRunner.ts index 09314c940e..d2eb41e0ff 100644 --- a/packages/sdk-react-native/src/iosRunner.ts +++ b/packages/sdk-react-native/src/iosRunner.ts @@ -14,8 +14,8 @@ import { getContext, getCurrentCommand, inquirerPrompt, + RnvEnvContext, } from '@rnv/core'; -import { RnvEnvContext } from '@rnv/core/lib/env/types'; import { EnvVars } from './env'; import shellQuote from 'shell-quote'; import path from 'path'; From 789a0e55e12361303687301a1ac298c1f6852f3f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 03:21:12 +0100 Subject: [PATCH 009/175] fix cwd context switching --- .../global/new/questions/applyTemplate.ts | 24 ++++++++++--- .../global/new/questions/installTemplate.ts | 34 +++++++++++++------ .../tasks/global/new/questions/workspace.ts | 1 + .../src/tasks/global/new/taskNew.ts | 4 ++- .../engine-core/src/tasks/global/new/types.ts | 1 + .../engine-core/src/tasks/global/new/utils.ts | 8 ++++- packages/template-starter/renative.json | 3 -- 7 files changed, 54 insertions(+), 21 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index 65b8b1cfe1..1d08fdb6db 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -12,10 +12,11 @@ import path from 'path'; export const inquiryApplyTemplate = async (data: NewProjectData) => { const c = getContext(); - if (!data.optionTemplates.selectedOption) { + const tplName = data.optionTemplates.selectedOption; + if (!tplName) { return Promise.reject('Template not selected'); } - const templateDir = path.join(c.paths.project.dir, 'node_modules', data.optionTemplates.selectedOption); + const templateDir = path.join(c.paths.project.dir, 'node_modules', tplName); const renativeTemplateConfig = readObjectSync(path.join(templateDir, ConfigName.renativeTemplate)) || {}; @@ -39,18 +40,31 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { choices: options, }); + if (!tplName) { + return Promise.reject('Template not selected'); + } + if (configOption === optExtend) { const rnvConfig = data.files.template.renativeTemplateConfig.templateConfig?.renative_json || { - extendsTemplate: `${data.optionTemplates.selectedOption}/renative.json`, + extendsTemplate: `${tplName}/renative.json`, }; - data.files.project.renativeConfig = rnvConfig; + data.files.project.renativeConfig = { ...rnvConfig, ...data.files.project.renativeConfig }; } else if (configOption === optCopy) { - data.files.project.renativeConfig = data.files.template.renativeConfig; + data.files.project.renativeConfig = { + ...data.files.template.renativeConfig, + ...data.files.project.renativeConfig, + }; } const packageJson = data.files.template.renativeTemplateConfig.templateConfig?.package_json || {}; data.files.project.packageJson = packageJson; + if (tplName && data.optionTemplates.selectedVersion) { + const devDependencies = data.files.project.packageJson.devDependencies || {}; + devDependencies[tplName] = data.optionTemplates.selectedVersion; + data.files.project.packageJson.devDependencies = devDependencies; + } + // const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; // if (rnvNewPatchDependencies) { diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 9f8671b839..88979d7e78 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -21,8 +21,8 @@ import path from 'path'; import { checkInputValue } from '../utils'; export const inquiryInstallTemplate = async (data: NewProjectData) => { - const customTemplate = 'Custom Template...'; - const localTemplate = 'Local Template...'; + const customTemplate = { name: 'Custom Template...', value: 'custom' }; + const localTemplate = { name: 'Local Template...', value: 'local' }; const c = getContext(); const { templateVersion, projectTemplate } = c.program; @@ -34,14 +34,14 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { if (values) { Object.keys(values).forEach((k) => { const val = values[k]; - if (val.description) { - val.title = `${k} ${chalk().grey(`- ${val.description}`)}`; + if (val.description || val.path) { + val.title = `${k} ${chalk().grey(`- ${val.path || val.description}`)}`; } else { val.title = k; } val.key = k; - options.push(val.title); + options.push({ name: val.title, value: val }); }); } @@ -63,20 +63,22 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { choices: options, }); - if (inputTemplate === customTemplate) { + if (inputTemplate.key === customTemplate.value) { const { inputTemplateCustom } = await inquirerPrompt({ name: 'inputTemplateCustom', type: 'input', message: 'Type exact name of your template NPM package.', }); selectedInputTemplate = inputTemplateCustom; - } else if (inputTemplate === localTemplate) { + } else if (inputTemplate.key === localTemplate.value) { const { inputTemplateLocal } = await inquirerPrompt({ name: 'inputTemplateLocal', type: 'input', message: 'Path (absolute):', }); localTemplatePath = inputTemplateLocal; + } else if (inputTemplate.path) { + localTemplatePath = inputTemplate.path; } else { selectedInputTemplate = getTemplateKey(inputTemplate); } @@ -88,6 +90,9 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { if (!fsExistsSync(localTemplatePath)) { return Promise.reject(`Local template path ${localTemplatePath} does not exist`); } + // await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add file:${localTemplatePath} --dev`, { + // cwd: c.paths.project.dir, + // }); const localTemplatePkgPath = path.join(localTemplatePath, 'package.json'); if (!fsExistsSync(localTemplatePath)) { return Promise.reject(`Local template package ${localTemplatePkgPath} does not exist`); @@ -104,25 +109,32 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { logInfo(`Found local template: ${data.optionTemplates.selectedOption}@${pkg.version}`); + // await executeAsync( + // `${isYarnInstalled() ? 'yarn' : 'npm'} add ${data.optionTemplates.selectedOption}@${pkg.version} --dev`, + // { + // cwd: c.paths.project.dir, + // } + // ); + mkdirSync(nmTemplatePath); + // TODO: read .npmignore and .gitignore and apply those rules const ignorePaths = [ 'node_modules', 'package-lock.json', 'yarn.lock', 'platformBuilds', - 'dist', 'builds', - 'platfomAssets', + 'platformAssets', + 'secrets', '.rnv', - 'lib', ]; fsReaddirSync(localTemplatePath).forEach((file) => { if (!ignorePaths.includes(file) && localTemplatePath) { const sourcePath = path.join(localTemplatePath, file); const destPath = path.join(nmTemplatePath, file); if (fsLstatSync(sourcePath).isDirectory()) { - copyFolderRecursiveSync(sourcePath, destPath); + copyFolderRecursiveSync(sourcePath, nmTemplatePath); } else { copyFileSync(sourcePath, destPath); } diff --git a/packages/engine-core/src/tasks/global/new/questions/workspace.ts b/packages/engine-core/src/tasks/global/new/questions/workspace.ts index 70e0353c2f..e746e41aab 100644 --- a/packages/engine-core/src/tasks/global/new/questions/workspace.ts +++ b/packages/engine-core/src/tasks/global/new/questions/workspace.ts @@ -24,5 +24,6 @@ export const inquiryWorkspace = async (data: NewProjectData) => { data.optionWorkspaces.selectedOption = inputWorkspace; c.runtime.selectedWorkspace = inputWorkspace; + data.files.project.renativeConfig.workspaceID = inputWorkspace; await updateRenativeConfigs(); }; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index edfbf99d20..640e23d273 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -19,6 +19,7 @@ import { inquiryAppVersion } from './questions/appVersion'; import { inquiryInstallTemplate } from './questions/installTemplate'; import { inquiryApplyTemplate } from './questions/applyTemplate'; import { inquiryBookmarkTemplate } from './questions/bookmarkTemplate'; +import { processChdirToProject } from './utils'; const taskNew = async () => { logTask('taskNew'); @@ -26,6 +27,7 @@ const taskNew = async () => { const payload = await initNewProject(); // Interactive Questions Required await inquiryProjectName(payload); + await processChdirToProject(); await inquiryIsRenativeProject(payload); await inquiryHasNodeModules(payload); await inquiryInstallTemplate(payload); @@ -35,9 +37,9 @@ const taskNew = async () => { await inquiryAppTitle(payload); await inquiryAppID(payload); await inquiryAppVersion(payload); - await inquiryWorkspace(payload); await saveProgressIntoProjectConfig(payload); + await inquiryWorkspace(payload); await inquirySupportedPlatforms(payload); await inquiryBootstrapQuestions(payload); await inquiryGit(payload); diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index 127045176d..785e8cac4d 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -23,6 +23,7 @@ export type NewProjectData = { title: string; key: string; description: string; + path?: string; } >; valuesAsArray?: Array<{ diff --git a/packages/engine-core/src/tasks/global/new/utils.ts b/packages/engine-core/src/tasks/global/new/utils.ts index 9e579a820d..da895e2ac7 100644 --- a/packages/engine-core/src/tasks/global/new/utils.ts +++ b/packages/engine-core/src/tasks/global/new/utils.ts @@ -1,4 +1,10 @@ -import { inquirerPrompt } from '@rnv/core'; +import { getContext, inquirerPrompt } from '@rnv/core'; + +export const processChdirToProject = async () => { + const c = getContext(); + process.chdir(c.paths.project.dir); + return true; +}; export const checkInputValue = (value: string | boolean): boolean => { return value && typeof value === 'string' && value !== '' ? true : false; diff --git a/packages/template-starter/renative.json b/packages/template-starter/renative.json index 3f8b9c90ef..7ca96565b1 100644 --- a/packages/template-starter/renative.json +++ b/packages/template-starter/renative.json @@ -48,14 +48,11 @@ "firetv", "androidwear", "web", - "webtv", "tizen", "tvos", "webos", "macos", - "windows", "tizenwatch", - "tizenmobile", "kaios", "chromecast", "linux" From 05d1e657b65145174c4ac4de1d55ddecced10081 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 05:12:33 +0100 Subject: [PATCH 010/175] updates and fixes --- packages/core/src/context/index.ts | 9 +- .../src/tasks/global/new/projectGenerator.ts | 191 +++++++++--------- .../global/new/questions/applyTemplate.ts | 9 +- .../global/new/questions/confirmOverview.ts | 30 +-- .../global/new/questions/installTemplate.ts | 21 +- .../engine-core/src/tasks/global/new/utils.ts | 4 +- packages/template-starter/.gitignore | 21 +- packages/template-starter/package.json | 3 +- .../template-starter/renative.template.json | 2 +- .../renative.template.spec.json | 2 +- 10 files changed, 144 insertions(+), 148 deletions(-) diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 7383ba4c22..c6cb81dfce 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -63,9 +63,14 @@ Make sure all your rnv dependencies are of same version and you are executing wi c.command = ctx?.cmd || c.command; c.subCommand = ctx?.subCmd || c.subCommand; c.isSystemWin = isSystemWin; - c.paths.rnv.dir = ctx?.RNV_HOME_DIR || c.paths.rnv.dir; + populateContextPaths(c); + + global.RNV_CONTEXT = c; +}; + +export const populateContextPaths = (c: RnvContext) => { c.paths.CURRENT_DIR = path.resolve('.'); c.paths.RNV_NODE_MODULES_DIR = path.join(c.paths.rnv.dir, 'node_modules'); @@ -122,8 +127,6 @@ Make sure all your rnv dependencies are of same version and you are executing wi c.paths.project.builds.dir = path.join(c.paths.project.dir, 'platformBuilds'); generateContextPaths(c.paths.workspace, c.paths.GLOBAL_RNV_DIR); - - global.RNV_CONTEXT = c; }; createRnvContext(); diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index d0a94e1118..de64a36423 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -1,8 +1,11 @@ import { - ConfigFileProject, + // ConfigFileProject, ConfigName, - PlatformKey, + // PlatformKey, + applyTemplate, chalk, + configureTemplateFiles, + generateLocalJsonSchemas, getApi, getContext, getWorkspaceOptions, @@ -69,80 +72,84 @@ export const generateNewProject = async (data: NewProjectData) => { return Promise.reject('Current template not selected!'); } - const c = getContext(); - const templates: Record = {}; - - if (data.optionTemplates.selectedOption) { - templates[data.optionTemplates.selectedOption] = { - version: data.optionTemplates.selectedVersion, - }; - } - - delete data.files.template.renativeTemplateConfig.templateConfig; - delete data.files.template.renativeTemplateConfig.bootstrapConfig; - - const config: ConfigFileProject = { - platforms: {}, - ...data.files.template.renativeTemplateConfig, - ...data.renativeTemplateConfigExt, - projectName: data.projectName || 'my-project', - projectVersion: data.inputVersion || '0.1.0', - //TODO: TEMPORARY WORKAROUND this neds to use bootstrap_metadata to work properly - common: { - id: data.inputAppID || 'com.mycompany.myapp', - title: data.inputAppTitle || 'My App', - }, - workspaceID: data.optionWorkspaces.selectedOption || 'project description', - // paths: { - // appConfigsDir: './appConfigs', - // entryDir: './', - // platformAssetsDir: './platformAssets', - // platformBuildsDir: './platformBuilds', - // }, - defaults: { - supportedPlatforms: data.optionPlatforms.selectedOptions, - }, - engines: {}, - templates, - currentTemplate: data.optionTemplates.selectedOption, - isNew: true, - isMonorepo: false, - }; - - const platforms: ConfigFileProject['platforms'] = config.platforms || {}; - const engines: ConfigFileProject['engines'] = config.engines || {}; - const defaults: ConfigFileProject['defaults'] = config.defaults || {}; - - const supPlats = defaults.supportedPlatforms || []; - - // Remove unused platforms - Object.keys(platforms).forEach((k) => { - const key = k as PlatformKey; - if (!supPlats.includes(key)) { - delete platforms[key]; - } - }); - - const tplEngines = data.files.template.renativeTemplateConfig.engines; - if (tplEngines) { - // Remove unused engines based on selected platforms - supPlats.forEach((k) => { - const selectedEngineId = - platforms[k]?.engine || c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; - if (selectedEngineId) { - const selectedEngine = findEngineKeyById(selectedEngineId); - if (selectedEngine?.key) { - engines[selectedEngine.key] = tplEngines[selectedEngine.key]; - } - } - }); - } - - config.platforms = platforms; - config.engines = engines; - config.defaults = defaults; - - writeFileSync(c.paths.project.config, config); + // const c = getContext(); + // const templates: Record = {}; + + // if (data.optionTemplates.selectedOption) { + // templates[data.optionTemplates.selectedOption] = { + // version: data.optionTemplates.selectedVersion, + // }; + // } + + // delete data.files.template.renativeTemplateConfig.templateConfig; + // delete data.files.template.renativeTemplateConfig.bootstrapConfig; + + // const config: ConfigFileProject = { + // platforms: {}, + // ...data.files.template.renativeTemplateConfig, + // ...data.renativeTemplateConfigExt, + // projectName: data.projectName || 'my-project', + // projectVersion: data.inputVersion || '0.1.0', + // //TODO: TEMPORARY WORKAROUND this neds to use bootstrap_metadata to work properly + // common: { + // id: data.inputAppID || 'com.mycompany.myapp', + // title: data.inputAppTitle || 'My App', + // }, + // workspaceID: data.optionWorkspaces.selectedOption || 'project description', + // // paths: { + // // appConfigsDir: './appConfigs', + // // entryDir: './', + // // platformAssetsDir: './platformAssets', + // // platformBuildsDir: './platformBuilds', + // // }, + // defaults: { + // supportedPlatforms: data.optionPlatforms.selectedOptions, + // }, + // engines: {}, + // templates, + // currentTemplate: data.optionTemplates.selectedOption, + // isNew: true, + // isMonorepo: false, + // }; + + // const platforms: ConfigFileProject['platforms'] = config.platforms || {}; + // // const engines: ConfigFileProject['engines'] = config.engines || {}; + // // const defaults: ConfigFileProject['defaults'] = config.defaults || {}; + + // const supPlats = defaults.supportedPlatforms || []; + + // // Remove unused platforms + // Object.keys(platforms).forEach((k) => { + // const key = k as PlatformKey; + // if (!supPlats.includes(key)) { + // delete platforms[key]; + // } + // }); + + // const tplEngines = data.files.template.renativeTemplateConfig.engines; + // if (tplEngines) { + // // Remove unused engines based on selected platforms + // supPlats.forEach((k) => { + // const selectedEngineId = + // platforms[k]?.engine || c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; + // if (selectedEngineId) { + // const selectedEngine = findEngineKeyById(selectedEngineId); + // if (selectedEngine?.key) { + // engines[selectedEngine.key] = tplEngines[selectedEngine.key]; + // } + // } + // }); + // } + + // config.platforms = platforms; + // config.engines = engines; + // config.defaults = defaults; + + // writeFileSync(c.paths.project.config, config); + + await applyTemplate(); + await configureTemplateFiles(); + await generateLocalJsonSchemas(); if (data.gitEnabled) { await configureGit(); @@ -161,19 +168,19 @@ export const telemetryNewProject = async (data: NewProjectData) => { } }; -const findEngineKeyById = (id: string) => { - const c = getContext(); - const engineTemplates = c.files.rnv.projectTemplates.config?.engineTemplates; - if (engineTemplates) { - const etk = Object.keys(engineTemplates); - for (let i = 0; i < etk.length; i++) { - const engine = engineTemplates[etk[i]]; - if (engine) { - if (engine.id === id) { - engine.key = etk[i]; - return engine; - } - } - } - } -}; +// const findEngineKeyById = (id: string) => { +// const c = getContext(); +// const engineTemplates = c.files.rnv.projectTemplates.config?.engineTemplates; +// if (engineTemplates) { +// const etk = Object.keys(engineTemplates); +// for (let i = 0; i < etk.length; i++) { +// const engine = engineTemplates[etk[i]]; +// if (engine) { +// if (engine.id === id) { +// engine.key = etk[i]; +// return engine; +// } +// } +// } +// } +// }; diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index 1d08fdb6db..5fe8896dd1 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -4,6 +4,7 @@ import { ConfigName, getContext, inquirerPrompt, + mergeObjects, readObjectSync, } from '@rnv/core'; import type { NewProjectData } from '../types'; @@ -57,13 +58,7 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { } const packageJson = data.files.template.renativeTemplateConfig.templateConfig?.package_json || {}; - data.files.project.packageJson = packageJson; - - if (tplName && data.optionTemplates.selectedVersion) { - const devDependencies = data.files.project.packageJson.devDependencies || {}; - devDependencies[tplName] = data.optionTemplates.selectedVersion; - data.files.project.packageJson.devDependencies = devDependencies; - } + data.files.project.packageJson = mergeObjects(c, data.files.project.packageJson, packageJson); // const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts index 82cf89ff12..00843233b0 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts @@ -1,7 +1,7 @@ import { chalk, - getContext, - inquirerPrompt, + // getContext, + // inquirerPrompt, printArrIntoBox, printBoxEnd, printBoxStart, @@ -10,21 +10,21 @@ import { import type { NewProjectData } from '../types'; export const inquiryConfirm = async (data: NewProjectData) => { - const c = getContext(); - const { ci } = c.program; + // const c = getContext(); + // const { ci } = c.program; _prepareProjectOverview(data); - if (!ci) { - const { confirm } = await inquirerPrompt({ - type: 'confirm', - name: 'confirm', - message: `\n${data.confirmString}\nIs all this correct?`, - }); + // if (!ci) { + // const { confirm } = await inquirerPrompt({ + // type: 'confirm', + // name: 'confirm', + // message: `\n${data.confirmString}\nIs all this correct?`, + // }); - if (!confirm) { - // TOOD: this should reset the whole process - return; - } - } + // if (!confirm) { + // // TOOD: this should reset the whole process + // return; + // } + // } }; const _prepareProjectOverview = (data: NewProjectData) => { diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 88979d7e78..7ae6a2712d 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -19,6 +19,7 @@ import { import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; +import { saveProgressIntoProjectConfig } from '../projectGenerator'; export const inquiryInstallTemplate = async (data: NewProjectData) => { const customTemplate = { name: 'Custom Template...', value: 'custom' }; @@ -84,7 +85,7 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { } } - const nmDir = path.join(c.paths.project.dir, 'node_modules'); + const nmDir = path.join(c.paths.project.dir, '.rnv/npm_cache'); if (localTemplatePath) { if (!fsExistsSync(localTemplatePath)) { @@ -109,13 +110,6 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { logInfo(`Found local template: ${data.optionTemplates.selectedOption}@${pkg.version}`); - // await executeAsync( - // `${isYarnInstalled() ? 'yarn' : 'npm'} add ${data.optionTemplates.selectedOption}@${pkg.version} --dev`, - // { - // cwd: c.paths.project.dir, - // } - // ); - mkdirSync(nmTemplatePath); // TODO: read .npmignore and .gitignore and apply those rules @@ -140,6 +134,17 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { } } }); + + // NOTE: this is a workaround for npm/yarn bug where manually added packages are overriden on next install + data.files.project.packageJson = { + devDependencies: { + [data.optionTemplates.selectedOption]: `file:.rnv/npm_cache/${data.optionTemplates.selectedOption}`, + }, + }; + await saveProgressIntoProjectConfig(data); + await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm install'}`, { + cwd: c.paths.project.dir, + }); } else { data.optionTemplates.selectedOption = selectedInputTemplate; diff --git a/packages/engine-core/src/tasks/global/new/utils.ts b/packages/engine-core/src/tasks/global/new/utils.ts index da895e2ac7..366a53433d 100644 --- a/packages/engine-core/src/tasks/global/new/utils.ts +++ b/packages/engine-core/src/tasks/global/new/utils.ts @@ -1,8 +1,10 @@ -import { getContext, inquirerPrompt } from '@rnv/core'; +import { getContext, inquirerPrompt, populateContextPaths } from '@rnv/core'; export const processChdirToProject = async () => { const c = getContext(); + // In order to execute rnv from new origin (sub folder we need to reset paths to new cwd()) process.chdir(c.paths.project.dir); + populateContextPaths(c); return true; }; diff --git a/packages/template-starter/.gitignore b/packages/template-starter/.gitignore index cf867256d8..86a5dca07d 100644 --- a/packages/template-starter/.gitignore +++ b/packages/template-starter/.gitignore @@ -33,29 +33,12 @@ renative.runtime.json rnv-config.local.json metro.config.local.js - vendor/ -appConfigs/base/assets/ios -appConfigs/base/assets/android -appConfigs/base/assets/web -appConfigs/base/assets/androidtv -appConfigs/base/assets/tvos -appConfigs/base/assets/webos -appConfigs/base/assets/tizen -appConfigs/base/assets/tizenwatch -appConfigs/base/assets/tizenwear -appConfigs/base/assets/kaios -appConfigs/base/assets/firetv -appConfigs/base/assets/androidwear -appConfigs/base/assets/xbox -appConfigs/base/assets/linux -appConfigs/base/assets/macos public/ -# Does not work -# !appConfigs/base/assets/runtime - reporting .bundle/ + +.rnv/ diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index af1919b3a7..cb382ca923 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -62,7 +62,8 @@ "static", "tsconfig.json", "typings", - "webpack.config.js" + "webpack.config.js", + ".gitignore" ], "repository": { "type": "git", diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index 7da29a1354..51ef50ec4a 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -4,7 +4,7 @@ "disabled": false, "includedPaths": [ { - "paths": ["buildHooks", "src", "index.js", "tsconfig.json", "babel.config.js", "typings"] + "paths": ["buildHooks", "src", "index.js", "tsconfig.json", "babel.config.js", "typings", ".gitignore"] }, { "paths": ["Gemfile", "metro.config.js", ".bundle", "react-native.config.js"], diff --git a/packages/template-starter/renative.template.spec.json b/packages/template-starter/renative.template.spec.json index 32a552faa6..18dca7ef6d 100644 --- a/packages/template-starter/renative.template.spec.json +++ b/packages/template-starter/renative.template.spec.json @@ -4,7 +4,7 @@ "disabled": false, "includedPaths": [ { - "paths": ["buildHooks", "src", "index.js", "tsconfig.json", "babel.config.js", "typings"] + "paths": ["buildHooks", "src", "index.js", "tsconfig.json", "babel.config.js", "typings", ".gitignore"] }, { "paths": ["Gemfile", "metro.config.js", ".bundle", "react-native.config.js"], From 7811dff90c580b5b70fa425cb5d6e461933a2181 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 12:05:50 +0100 Subject: [PATCH 011/175] move isTemplate into appConfig to avoid it being present in bootstrapped projects --- packages/core/src/configs/templates.ts | 2 +- packages/core/src/engines/index.ts | 6 +++--- packages/core/src/plugins/index.ts | 2 +- packages/core/src/templates/index.ts | 6 +++--- .../engine-core/src/tasks/project/taskProjectConfigure.ts | 2 +- .../engine-core/src/tasks/template/taskTemplateApply.ts | 2 +- .../template-starter/appConfigs/template/renative.json | 2 ++ packages/template-starter/renative.json | 7 ------- 8 files changed, 12 insertions(+), 17 deletions(-) diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts index b7f2100bc0..de2cc4bdb4 100644 --- a/packages/core/src/configs/templates.ts +++ b/packages/core/src/configs/templates.ts @@ -7,7 +7,7 @@ import { writeRenativeConfigFile } from './utils'; export const checkIfTemplateConfigured = async () => { logDefault('checkIfTemplateConfigured'); const c = getContext(); - if (c.program.skipDependencyCheck || c.files.project.config?.isTemplate) return true; + if (c.program.skipDependencyCheck || c.buildConfig?.isTemplate) return true; if (!c.buildConfig.templates) { logWarning( `Your ${chalk().bold(c.paths.project.config)} does not contain ${chalk().bold( diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index ee40e7649b..60536f5572 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -164,7 +164,7 @@ export const loadEnginePluginDeps = async (engineConfigs: Array { @@ -255,7 +255,7 @@ export const loadEnginePackageDeps = async (engineConfigs: Array { if (!deps[k]) { - if (c.files.project.config?.isTemplate) { + if (c.buildConfig?.isTemplate) { if (!c.files.project.package.devDependencies?.[k]) { logWarning( `Engine ${ecf.key} requires npm dependency ${k} for platform ${platform}. which in template project should be placed in devDependencies` diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 4f6d4d159e..a55dc51dbf 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -181,7 +181,7 @@ export const configurePlugins = async () => { return; } - const isTemplate = c.files.project.config?.isTemplate; + const isTemplate = c.buildConfig?.isTemplate; const newDeps: Record = {}; const newDevDeps: Record = {}; const { dependencies, devDependencies } = c.files.project.package; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index 7714b786bb..813e6f8fd9 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -269,7 +269,7 @@ export const configureEntryPoint = async (platform: RnvPlatform) => { logDefault('configureEntryPoint'); const c = getContext(); - if (c.files.project.config?.isTemplate) return true; + if (c.buildConfig?.isTemplate) return true; const entryFile = getConfigProp('entryFile'); @@ -303,7 +303,7 @@ export const configureEntryPoint = async (platform: RnvPlatform) => { export const getInstalledTemplateOptions = (): PromptOptions | null => { const c = getContext(); - if (c.files.project.config?.isTemplate) return null; + if (c.buildConfig?.isTemplate) return null; if (c.buildConfig.templates) { return generateOptions(c.buildConfig.templates); } @@ -319,7 +319,7 @@ export const isTemplateInstalled = () => { export const applyTemplate = async (selectedTemplate?: string) => { const c = getContext(); logDefault('applyTemplate', `${c.buildConfig.currentTemplate}=>${selectedTemplate}`); - if (c.files.project.config?.isTemplate) return true; + if (c.buildConfig?.isTemplate) return true; if (!c.files.project.config) { logError('Project config not loaded. cannot apply template'); diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index dff321d458..69bc80e8a2 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -81,7 +81,7 @@ const taskProjectConfigure: RnvTaskFn = async (c, parentTask, originTask) => { await configureRuntimeDefaults(); if (originTask !== RnvTaskName.templateApply) { - if ((c.runtime.requiresBootstrap || !isTemplateInstalled()) && !c.files.project.config?.isTemplate) { + if ((c.runtime.requiresBootstrap || !isTemplateInstalled()) && !c.buildConfig?.isTemplate) { await applyTemplate(); // We'll have to install the template first and reset current engine logInfo('Your template has been bootstraped. Command reset is required. RESTRATING...DONE'); diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 28d1e158e7..1dfd34019d 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -15,7 +15,7 @@ const taskTemplateApply: RnvTaskFn = async (c, _parentTask, originTask) => { await executeTask(RnvTaskName.projectConfigure, RnvTaskName.templateApply, originTask); - if (c.files.project.config?.isTemplate) { + if (c.buildConfig?.isTemplate) { return Promise.reject('Template projects cannot use template apply command'); } diff --git a/packages/template-starter/appConfigs/template/renative.json b/packages/template-starter/appConfigs/template/renative.json index 27234223ac..34e8ab0565 100644 --- a/packages/template-starter/appConfigs/template/renative.json +++ b/packages/template-starter/appConfigs/template/renative.json @@ -2,6 +2,8 @@ "$schema": "../../.rnv/schema/rnv.app.json", "extend": "base", "id": "template", + "isTemplate": true, + "isMonorepo": true, "skipBootstrapCopy": true, "common": { "id": "renative.helloworld", diff --git a/packages/template-starter/renative.json b/packages/template-starter/renative.json index 7ca96565b1..fcf535b043 100644 --- a/packages/template-starter/renative.json +++ b/packages/template-starter/renative.json @@ -8,21 +8,14 @@ "@rnv/engine-rn-tvos": "source:rnv", "@rnv/engine-rn-web": "source:rnv" }, - "isTemplate": true, "projectName": "@rnv/template-starter", "enableHookRebuild": false, "workspaceID": "rnv", - "isMonorepo": true, "paths": { "appConfigsDir": "./appConfigs", "platformAssetsDir": "./platformAssets", "platformBuildsDir": "./platformBuilds" }, - "tasks": { - "install": { - "script": "yarn bootstrap" - } - }, "defaults": { "ports": { "ios": 8082, From df72e6db2ad63a930064221628bdb86d5f4deae8 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 12:53:32 +0100 Subject: [PATCH 012/175] fix bootstrapping --- .../src/tasks/global/new/projectGenerator.ts | 89 +++++++++++-------- .../new/questions/supportedPlatforms.ts | 5 +- 2 files changed, 56 insertions(+), 38 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index de64a36423..ac73581081 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -72,7 +72,7 @@ export const generateNewProject = async (data: NewProjectData) => { return Promise.reject('Current template not selected!'); } - // const c = getContext(); + const c = getContext(); // const templates: Record = {}; // if (data.optionTemplates.selectedOption) { @@ -126,20 +126,43 @@ export const generateNewProject = async (data: NewProjectData) => { // } // }); - // const tplEngines = data.files.template.renativeTemplateConfig.engines; - // if (tplEngines) { - // // Remove unused engines based on selected platforms - // supPlats.forEach((k) => { - // const selectedEngineId = - // platforms[k]?.engine || c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; - // if (selectedEngineId) { - // const selectedEngine = findEngineKeyById(selectedEngineId); - // if (selectedEngine?.key) { - // engines[selectedEngine.key] = tplEngines[selectedEngine.key]; - // } - // } - // }); - // } + const supPlats = data.optionPlatforms.selectedOptions || []; + + console.log('SSSSS', supPlats); + + // This is project config override only + const cnf = data.files.project.renativeConfig; + cnf.defaults = cnf.defaults || {}; + cnf.defaults.supportedPlatforms = supPlats; + cnf.engines = cnf.engines || {}; + + // This is merged config result + const loadedConf = c.files.project.config; + + const engines = loadedConf?.engines; + if (engines) { + // Remove unused engines based on selected platforms + supPlats.forEach((k) => { + const selectedEngineId = + loadedConf?.platforms?.[k]?.engine || + c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; + console.log('SSSSS2', k, selectedEngineId); + + if (selectedEngineId) { + const selectedEngine = findEngineKeyById(selectedEngineId); + console.log('SSSSS3', k, selectedEngine); + if (selectedEngine?.key && cnf.engines) { + cnf.engines[selectedEngine.key] = engines[selectedEngine.key]; + } + } + }); + } + + await saveProgressIntoProjectConfig(data); + + await applyTemplate(); + await configureTemplateFiles(); + await generateLocalJsonSchemas(); // config.platforms = platforms; // config.engines = engines; @@ -147,10 +170,6 @@ export const generateNewProject = async (data: NewProjectData) => { // writeFileSync(c.paths.project.config, config); - await applyTemplate(); - await configureTemplateFiles(); - await generateLocalJsonSchemas(); - if (data.gitEnabled) { await configureGit(); } @@ -168,19 +187,19 @@ export const telemetryNewProject = async (data: NewProjectData) => { } }; -// const findEngineKeyById = (id: string) => { -// const c = getContext(); -// const engineTemplates = c.files.rnv.projectTemplates.config?.engineTemplates; -// if (engineTemplates) { -// const etk = Object.keys(engineTemplates); -// for (let i = 0; i < etk.length; i++) { -// const engine = engineTemplates[etk[i]]; -// if (engine) { -// if (engine.id === id) { -// engine.key = etk[i]; -// return engine; -// } -// } -// } -// } -// }; +const findEngineKeyById = (id: string) => { + const c = getContext(); + const engineTemplates = c.files.rnv.projectTemplates.config?.engineTemplates; + if (engineTemplates) { + const etk = Object.keys(engineTemplates); + for (let i = 0; i < etk.length; i++) { + const engine = engineTemplates[etk[i]]; + if (engine) { + if (engine.id === id) { + engine.key = etk[i]; + return engine; + } + } + } + } +}; diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts index 230752f629..effa7156d7 100644 --- a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -1,4 +1,4 @@ -import { getContext, inquirerPrompt, logError } from '@rnv/core'; +import { PlatformKey, getContext, inquirerPrompt, logError } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue } from '../utils'; @@ -16,7 +16,6 @@ export const inquirySupportedPlatforms = async (data: NewProjectData) => { ); } - let inputSupportedPlatforms; if (checkInputValue(platform)) { data.inputSupportedPlatforms = platform.split(','); } else { @@ -31,5 +30,5 @@ export const inquirySupportedPlatforms = async (data: NewProjectData) => { }); data.inputSupportedPlatforms = answer?.inputSupportedPlatforms; } - data.optionPlatforms.selectedOptions = inputSupportedPlatforms; + data.optionPlatforms.selectedOptions = (data.inputSupportedPlatforms || []) as Array; }; From c27c70d4ad4f441e3be1024e1ed88e3e02a17db4 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 14:54:37 +0100 Subject: [PATCH 013/175] bootstrap logic --- packages/core/src/constants.ts | 18 ++--- .../core/src/schema/configFiles/project.ts | 4 +- .../core/src/schema/configFiles/template.ts | 3 +- packages/core/src/schema/shared/index.ts | 4 + .../src/tasks/global/new/projectGenerator.ts | 74 ++++--------------- .../new/questions/supportedPlatforms.ts | 42 ++++++++++- .../template-starter/renative.template.json | 7 +- 7 files changed, 77 insertions(+), 75 deletions(-) diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 3b9d43cfb0..75f55530a8 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -2,22 +2,22 @@ import { PlatformName } from './enums/platformName'; // DEPRECATED export const SUPPORTED_PLATFORMS = [ + PlatformName.web, PlatformName.ios, PlatformName.android, PlatformName.androidtv, - PlatformName.androidwear, PlatformName.firetv, - PlatformName.web, - PlatformName.webtv, - PlatformName.tizen, - PlatformName.tizenmobile, PlatformName.tvos, - PlatformName.webos, PlatformName.macos, - PlatformName.windows, PlatformName.linux, - PlatformName.tizenwatch, - PlatformName.kaios, + PlatformName.windows, + PlatformName.tizen, + PlatformName.webos, PlatformName.chromecast, + PlatformName.kaios, + PlatformName.webtv, + PlatformName.androidwear, + PlatformName.tizenwatch, + PlatformName.tizenmobile, PlatformName.xbox, ] as const; diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 670058a2c5..5e0c10fc24 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -1,6 +1,6 @@ import { AnyZodObject, z } from 'zod'; import { CommonSchema } from '../common'; -import { Ext, ExtendTemplate, PlatformsKeys, Runtime, TemplateConfig } from '../shared'; +import { Ext, ExtendTemplate, PlatformsKeys, Runtime, SupportedPlatforms, TemplateConfig } from '../shared'; import { PlatformsSchema } from '../platforms'; import { PluginsSchema } from '../plugins'; @@ -18,8 +18,6 @@ const Ports = z 'Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts' ); -const SupportedPlatforms = z.array(PlatformsKeys).describe('Array list of all supported platforms in current project'); - const PortOffset = z.number().describe('Offset each port default value by increment'); const MonoRoot = z.string().describe('Define custom path to monorepo root where starting point is project directory'); diff --git a/packages/core/src/schema/configFiles/template.ts b/packages/core/src/schema/configFiles/template.ts index 7efd9fb6c2..97690bdfd2 100644 --- a/packages/core/src/schema/configFiles/template.ts +++ b/packages/core/src/schema/configFiles/template.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; import { DefaultsSchema, EnginesSchema } from './project'; -import { NpmDep, TemplateConfig } from '../shared'; +import { NpmDep, SupportedPlatforms, TemplateConfig } from '../shared'; const BootstrapQuestionsSchema = z .array( @@ -51,6 +51,7 @@ const BootstrapConfig = z }) ), }), + defaultSelectedPlatforms: SupportedPlatforms.optional(), }) .partial(); diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index a6b97ef388..6c4aad18e5 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -81,3 +81,7 @@ export const TemplateConfig = z ), }) .describe('Used in `renative.template.json` allows you to define template behaviour.'); + +export const SupportedPlatforms = z + .array(PlatformsKeys) + .describe('Array list of all supported platforms in current project'); diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index ac73581081..45f40086a0 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -1,6 +1,7 @@ import { // ConfigFileProject, ConfigName, + PlatformKey, // PlatformKey, applyTemplate, chalk, @@ -73,63 +74,15 @@ export const generateNewProject = async (data: NewProjectData) => { } const c = getContext(); - // const templates: Record = {}; - - // if (data.optionTemplates.selectedOption) { - // templates[data.optionTemplates.selectedOption] = { - // version: data.optionTemplates.selectedVersion, - // }; - // } - - // delete data.files.template.renativeTemplateConfig.templateConfig; - // delete data.files.template.renativeTemplateConfig.bootstrapConfig; - - // const config: ConfigFileProject = { - // platforms: {}, - // ...data.files.template.renativeTemplateConfig, - // ...data.renativeTemplateConfigExt, - // projectName: data.projectName || 'my-project', - // projectVersion: data.inputVersion || '0.1.0', - // //TODO: TEMPORARY WORKAROUND this neds to use bootstrap_metadata to work properly + + //TODO: TEMPORARY WORKAROUND this neds to use bootstrap_metadata to work properly // common: { // id: data.inputAppID || 'com.mycompany.myapp', // title: data.inputAppTitle || 'My App', // }, - // workspaceID: data.optionWorkspaces.selectedOption || 'project description', - // // paths: { - // // appConfigsDir: './appConfigs', - // // entryDir: './', - // // platformAssetsDir: './platformAssets', - // // platformBuildsDir: './platformBuilds', - // // }, - // defaults: { - // supportedPlatforms: data.optionPlatforms.selectedOptions, - // }, - // engines: {}, - // templates, - // currentTemplate: data.optionTemplates.selectedOption, - // isNew: true, - // isMonorepo: false, - // }; - - // const platforms: ConfigFileProject['platforms'] = config.platforms || {}; - // // const engines: ConfigFileProject['engines'] = config.engines || {}; - // // const defaults: ConfigFileProject['defaults'] = config.defaults || {}; - - // const supPlats = defaults.supportedPlatforms || []; - - // // Remove unused platforms - // Object.keys(platforms).forEach((k) => { - // const key = k as PlatformKey; - // if (!supPlats.includes(key)) { - // delete platforms[key]; - // } - // }); const supPlats = data.optionPlatforms.selectedOptions || []; - console.log('SSSSS', supPlats); - // This is project config override only const cnf = data.files.project.renativeConfig; cnf.defaults = cnf.defaults || {}; @@ -139,6 +92,7 @@ export const generateNewProject = async (data: NewProjectData) => { // This is merged config result const loadedConf = c.files.project.config; + // Configure only required engines based on supportedPlatforms const engines = loadedConf?.engines; if (engines) { // Remove unused engines based on selected platforms @@ -146,11 +100,9 @@ export const generateNewProject = async (data: NewProjectData) => { const selectedEngineId = loadedConf?.platforms?.[k]?.engine || c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; - console.log('SSSSS2', k, selectedEngineId); if (selectedEngineId) { const selectedEngine = findEngineKeyById(selectedEngineId); - console.log('SSSSS3', k, selectedEngine); if (selectedEngine?.key && cnf.engines) { cnf.engines[selectedEngine.key] = engines[selectedEngine.key]; } @@ -158,18 +110,24 @@ export const generateNewProject = async (data: NewProjectData) => { }); } + // In case of copied config instead of extended we want to cleanup unused platforms + if (cnf.platforms) { + Object.keys(cnf.platforms).forEach((k) => { + const key = k as PlatformKey; + if (!supPlats.includes(key) && cnf.platforms) { + delete cnf.platforms[key]; + } + }); + } + + // Save all progress into ./renative.json await saveProgressIntoProjectConfig(data); + // Now we can apply template await applyTemplate(); await configureTemplateFiles(); await generateLocalJsonSchemas(); - // config.platforms = platforms; - // config.engines = engines; - // config.defaults = defaults; - - // writeFileSync(c.paths.project.config, config); - if (data.gitEnabled) { await configureGit(); } diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts index effa7156d7..8e49b7783d 100644 --- a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -1,15 +1,53 @@ -import { PlatformKey, getContext, inquirerPrompt, logError } from '@rnv/core'; +import { PlatformKey, SUPPORTED_PLATFORMS, getContext, inquirerPrompt, logError } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue } from '../utils'; export const inquirySupportedPlatforms = async (data: NewProjectData) => { const c = getContext(); const { platform } = c.program; + + // TODO: grouped platforms + // const orderedPlatforms = [ + // PlatformName.web, + // inquirerSeparator('Mobile:') + // // Mobile + // PlatformName.ios, + // PlatformName.android, + // PlatformName.tizenmobile, + // PlatformName.kaios, + // inquirerSeparator('TV:') + // // TV + // PlatformName.androidtv, + // PlatformName.firetv, + // PlatformName.webtv, + // PlatformName.tizen, + // PlatformName.tvos, + // PlatformName.webos, + // inquirerSeparator('Desktop:') + // //Desktop + // PlatformName.macos, + // PlatformName.windows, + // PlatformName.linux, + // inquirerSeparator('Wareables:') + // //Wareables + // PlatformName.tizenwatch, + // PlatformName.androidwear, + // inquirerSeparator('Other:') + // // Other + // PlatformName.chromecast, + // PlatformName.xbox, + // ] + const supportedPlatforms = data.files.template.renativeTemplateConfig?.defaults?.supportedPlatforms || data.files.template.renativeConfig?.defaults?.supportedPlatforms || []; + supportedPlatforms.sort((a, b) => SUPPORTED_PLATFORMS.indexOf(a) - SUPPORTED_PLATFORMS.indexOf(b)); + + const selectedPlatforms = + data.files.template.renativeTemplateConfig?.bootstrapConfig?.defaultSelectedPlatforms || supportedPlatforms; + if (supportedPlatforms.length === 0) { logError( `Template ${data.selectedInputTemplate} does not seem to export any default platforms to support. contact the author.` @@ -25,7 +63,7 @@ export const inquirySupportedPlatforms = async (data: NewProjectData) => { pageSize: 20, message: 'What platforms would you like to use?', validate: (val) => !!val.length || 'Please select at least a platform', - default: supportedPlatforms, + default: selectedPlatforms, choices: supportedPlatforms, }); data.inputSupportedPlatforms = answer?.inputSupportedPlatforms; diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index 51ef50ec4a..f2e5282264 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -31,7 +31,9 @@ "@types/react-native": "0.72.3", "@flexn/typescript-config": "1.0.0", "@flexn/assets-renative-outline": "0.3.3", - "babel-loader": "9.1.3" + "babel-loader": "9.1.3", + "@rnv/core": "1.0.0-rc.12", + "rnv": "1.0.0-rc.12" }, "browserslist": { "production": [">0.2%", "not dead", "not op_mini all"], @@ -47,6 +49,7 @@ "rnvNewPatchDependencies": { "pkg-dir": "7.0.0", "xmlbuilder": "^15.1.1" - } + }, + "defaultSelectedPlatforms": ["web", "ios", "android"] } } From 29443f66fc8dfb4a5da61c0b4165d4e675788153 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 15:18:01 +0100 Subject: [PATCH 014/175] template selection update --- .../global/new/questions/installTemplate.ts | 19 ++++++++++++++----- .../appConfigs/app/renative.json | 3 ++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 7ae6a2712d..1d8940085a 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -10,6 +10,7 @@ import { getContext, getTemplateOptions, inquirerPrompt, + inquirerSeparator, isYarnInstalled, listAndSelectNpmVersion, logInfo, @@ -22,8 +23,9 @@ import { checkInputValue } from '../utils'; import { saveProgressIntoProjectConfig } from '../projectGenerator'; export const inquiryInstallTemplate = async (data: NewProjectData) => { - const customTemplate = { name: 'Custom Template...', value: 'custom' }; - const localTemplate = { name: 'Local Template...', value: 'local' }; + const customTemplate = { name: 'Custom Template (npm)...', value: { key: 'custom' } }; + const localTemplate = { name: 'Local Template...', value: { key: 'local' } }; + const noTemplate = { name: 'No Template (blank project)', value: { key: 'none' } }; const c = getContext(); const { templateVersion, projectTemplate } = c.program; @@ -49,8 +51,10 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { const getTemplateKey = (val: string) => data.optionTemplates.valuesAsArray?.find((v) => v.title === val)?.key; // data.optionTemplates.keysAsArray.push(customTemplate); + options.push(inquirerSeparator('Advanced:----------------')); options.push(customTemplate); options.push(localTemplate); + options.push(noTemplate); let selectedInputTemplate; let localTemplatePath: string | undefined; if (checkInputValue(projectTemplate)) { @@ -61,28 +65,33 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { type: 'list', message: 'What template to use?', default: data.defaultTemplate, + loop: false, choices: options, }); - if (inputTemplate.key === customTemplate.value) { + if (inputTemplate.key === customTemplate.value.key) { const { inputTemplateCustom } = await inquirerPrompt({ name: 'inputTemplateCustom', type: 'input', - message: 'Type exact name of your template NPM package.', + message: 'NPM package name:', }); selectedInputTemplate = inputTemplateCustom; - } else if (inputTemplate.key === localTemplate.value) { + } else if (inputTemplate.key === localTemplate.value.key) { const { inputTemplateLocal } = await inquirerPrompt({ name: 'inputTemplateLocal', type: 'input', message: 'Path (absolute):', }); localTemplatePath = inputTemplateLocal; + } else if (inputTemplate.key === noTemplate.value.key) { + // TODO: add support for no templates + return Promise.reject('No templates NOT SUPPORTED YET'); } else if (inputTemplate.path) { localTemplatePath = inputTemplate.path; } else { selectedInputTemplate = getTemplateKey(inputTemplate); } + console.log('JSDDDJJD', inputTemplate); } const nmDir = path.join(c.paths.project.dir, '.rnv/npm_cache'); diff --git a/packages/template-starter/appConfigs/app/renative.json b/packages/template-starter/appConfigs/app/renative.json index 8d4e781699..3553458278 100644 --- a/packages/template-starter/appConfigs/app/renative.json +++ b/packages/template-starter/appConfigs/app/renative.json @@ -1,8 +1,9 @@ { "$schema": "../../.rnv/schema/rnv.app.json", "extendsTemplate": "@rnv/template-starter/appConfigs/base/renative.json", - "id": "com.app", + "id": "app", "common": { + "id": "com.app", "description": "ReNative App", "buildSchemes": {}, "runtime": { From 9b85628fd81b4bc2bff2cdce7804ceedba385415 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 20:56:18 +0100 Subject: [PATCH 015/175] update schema --- packages/core/jsonSchema/rnv.app.json | 18 ++-- packages/core/jsonSchema/rnv.engine.json | 18 ++-- packages/core/jsonSchema/rnv.global.json | 18 ++-- packages/core/jsonSchema/rnv.local.json | 18 ++-- packages/core/jsonSchema/rnv.project.json | 97 +++++++++---------- packages/core/jsonSchema/rnv.template.json | 58 +++++------ packages/core/jsonSchema/rnv.templates.json | 18 ++-- .../global/new/questions/installTemplate.ts | 1 - .../rnv/pluginTemplates/renative.plugins.json | 3 + packages/sdk-utils/src/index.ts | 3 +- 10 files changed, 125 insertions(+), 127 deletions(-) diff --git a/packages/core/jsonSchema/rnv.app.json b/packages/core/jsonSchema/rnv.app.json index 9a90fd33c5..d3fef243af 100644 --- a/packages/core/jsonSchema/rnv.app.json +++ b/packages/core/jsonSchema/rnv.app.json @@ -216,23 +216,23 @@ "extendPlatform": { "type": "string", "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, diff --git a/packages/core/jsonSchema/rnv.engine.json b/packages/core/jsonSchema/rnv.engine.json index 17c4f394b6..9ea159fccb 100644 --- a/packages/core/jsonSchema/rnv.engine.json +++ b/packages/core/jsonSchema/rnv.engine.json @@ -68,23 +68,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] } diff --git a/packages/core/jsonSchema/rnv.global.json b/packages/core/jsonSchema/rnv.global.json index f4a1c08030..5fc5ce4f61 100644 --- a/packages/core/jsonSchema/rnv.global.json +++ b/packages/core/jsonSchema/rnv.global.json @@ -11,23 +11,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, diff --git a/packages/core/jsonSchema/rnv.local.json b/packages/core/jsonSchema/rnv.local.json index 6e8b2b7b25..d00a18e2d2 100644 --- a/packages/core/jsonSchema/rnv.local.json +++ b/packages/core/jsonSchema/rnv.local.json @@ -15,23 +15,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, diff --git a/packages/core/jsonSchema/rnv.project.json b/packages/core/jsonSchema/rnv.project.json index 8865bd7552..56ea4a30d6 100644 --- a/packages/core/jsonSchema/rnv.project.json +++ b/packages/core/jsonSchema/rnv.project.json @@ -54,23 +54,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, @@ -81,23 +81,23 @@ "items": { "type": "string", "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, @@ -128,23 +128,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, @@ -213,23 +213,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, @@ -367,23 +367,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] } @@ -4017,13 +4017,6 @@ "description": "schema definition" } }, - "required": [ - "workspaceID", - "projectVersion", - "projectName", - "templates", - "currentTemplate" - ], "additionalProperties": false } }, diff --git a/packages/core/jsonSchema/rnv.template.json b/packages/core/jsonSchema/rnv.template.json index 3d75802603..b3bc8ad4f6 100644 --- a/packages/core/jsonSchema/rnv.template.json +++ b/packages/core/jsonSchema/rnv.template.json @@ -14,23 +14,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, @@ -41,23 +41,23 @@ "items": { "type": "string", "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, @@ -88,23 +88,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] }, @@ -334,6 +334,10 @@ "engines" ], "additionalProperties": false + }, + "defaultSelectedPlatforms": { + "$ref": "#/definitions/rnv.template/properties/defaults/properties/supportedPlatforms", + "description": "Array list of all supported platforms in current project" } }, "additionalProperties": false diff --git a/packages/core/jsonSchema/rnv.templates.json b/packages/core/jsonSchema/rnv.templates.json index 63d0baa950..de81c160a7 100644 --- a/packages/core/jsonSchema/rnv.templates.json +++ b/packages/core/jsonSchema/rnv.templates.json @@ -72,23 +72,23 @@ }, "propertyNames": { "enum": [ + "web", "ios", "android", "androidtv", - "androidwear", "firetv", - "web", - "webtv", - "tizen", - "tizenmobile", "tvos", - "webos", "macos", - "windows", "linux", - "tizenwatch", - "kaios", + "windows", + "tizen", + "webos", "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", "xbox" ] } diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 1d8940085a..c259885767 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -91,7 +91,6 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { } else { selectedInputTemplate = getTemplateKey(inputTemplate); } - console.log('JSDDDJJD', inputTemplate); } const nmDir = path.join(c.paths.project.dir, '.rnv/npm_cache'); diff --git a/packages/rnv/pluginTemplates/renative.plugins.json b/packages/rnv/pluginTemplates/renative.plugins.json index 803704fe79..8394de3d87 100644 --- a/packages/rnv/pluginTemplates/renative.plugins.json +++ b/packages/rnv/pluginTemplates/renative.plugins.json @@ -9,6 +9,9 @@ "version": "1.0.0-rc.12" }, "react-native-tvos": { + "supportedPlatforms": [ + "tvos", "androidtv", "firetv" + ], "version": "0.73.1-3" }, "react-native-web": { diff --git a/packages/sdk-utils/src/index.ts b/packages/sdk-utils/src/index.ts index 833b5c77f8..89a48b3ae1 100644 --- a/packages/sdk-utils/src/index.ts +++ b/packages/sdk-utils/src/index.ts @@ -284,8 +284,7 @@ export const confirmActiveBundler = async () => { }); if (choices[0] === selectedOption) { - const result = await killPort(c.runtime.port); - console.log('WTFFF', result); + await killPort(c.runtime.port); } else { return false; } From bbd62ebb8b5e7d822c63566ac74fd2df38f3ecfd Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 13 Mar 2024 21:18:39 +0100 Subject: [PATCH 016/175] add platform filters to plugins --- packages/core/jsonSchema/rnv.app.json | 7 +++++ packages/core/jsonSchema/rnv.plugin.json | 27 +++++++++++++++++++ packages/core/jsonSchema/rnv.plugins.json | 27 +++++++++++++++++++ packages/core/jsonSchema/rnv.project.json | 4 +++ packages/core/jsonSchema/rnv.template.json | 5 +--- .../core/src/schema/configFiles/template.ts | 2 +- .../core/src/schema/plugins/fragments/base.ts | 2 ++ .../rnv/pluginTemplates/renative.plugins.json | 3 --- packages/template-starter/renative.json | 16 ++++++++--- 9 files changed, 81 insertions(+), 12 deletions(-) diff --git a/packages/core/jsonSchema/rnv.app.json b/packages/core/jsonSchema/rnv.app.json index d3fef243af..de69f008e2 100644 --- a/packages/core/jsonSchema/rnv.app.json +++ b/packages/core/jsonSchema/rnv.app.json @@ -3203,6 +3203,13 @@ { "type": "object", "properties": { + "supportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "description": "Array list of all supported platforms in current project" + }, "disabled": { "type": "boolean", "default": false, diff --git a/packages/core/jsonSchema/rnv.plugin.json b/packages/core/jsonSchema/rnv.plugin.json index 238afa2793..4c998d2cf8 100644 --- a/packages/core/jsonSchema/rnv.plugin.json +++ b/packages/core/jsonSchema/rnv.plugin.json @@ -4,6 +4,33 @@ "rnv.plugin": { "type": "object", "properties": { + "supportedPlatforms": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Array list of all supported platforms in current project" + }, "disabled": { "type": "boolean", "default": false, diff --git a/packages/core/jsonSchema/rnv.plugins.json b/packages/core/jsonSchema/rnv.plugins.json index e547809b9e..d24805e272 100644 --- a/packages/core/jsonSchema/rnv.plugins.json +++ b/packages/core/jsonSchema/rnv.plugins.json @@ -12,6 +12,33 @@ "additionalProperties": { "type": "object", "properties": { + "supportedPlatforms": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Array list of all supported platforms in current project" + }, "disabled": { "type": "boolean", "default": false, diff --git a/packages/core/jsonSchema/rnv.project.json b/packages/core/jsonSchema/rnv.project.json index 56ea4a30d6..87d1e42dc9 100644 --- a/packages/core/jsonSchema/rnv.project.json +++ b/packages/core/jsonSchema/rnv.project.json @@ -3661,6 +3661,10 @@ { "type": "object", "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/rnv.project/properties/defaults/properties/supportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, "disabled": { "type": "boolean", "default": false, diff --git a/packages/core/jsonSchema/rnv.template.json b/packages/core/jsonSchema/rnv.template.json index b3bc8ad4f6..c9e867775f 100644 --- a/packages/core/jsonSchema/rnv.template.json +++ b/packages/core/jsonSchema/rnv.template.json @@ -313,10 +313,7 @@ "type": "string" }, "supportedPlatforms": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/rnv.template/properties/defaults/properties/supportedPlatforms" }, "nullifyIfFalse": { "type": "boolean" diff --git a/packages/core/src/schema/configFiles/template.ts b/packages/core/src/schema/configFiles/template.ts index 97690bdfd2..ce1834147c 100644 --- a/packages/core/src/schema/configFiles/template.ts +++ b/packages/core/src/schema/configFiles/template.ts @@ -46,7 +46,7 @@ const BootstrapConfig = z engines: z.array( z.object({ name: z.string(), - supportedPlatforms: z.array(z.string()), + supportedPlatforms: SupportedPlatforms, nullifyIfFalse: z.boolean().optional(), }) ), diff --git a/packages/core/src/schema/plugins/fragments/base.ts b/packages/core/src/schema/plugins/fragments/base.ts index 513963ab4b..9eaa027969 100644 --- a/packages/core/src/schema/plugins/fragments/base.ts +++ b/packages/core/src/schema/plugins/fragments/base.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import { SupportedPlatforms } from '../../shared'; const Disabled = z.boolean().default(false).describe('Marks plugin disabled'); @@ -50,6 +51,7 @@ const Deprecated = z const DisablePluginTemplateOverrides = z.boolean().describe('Disables plugin overrides for selected plugin'); export const PluginBaseFragment = { + supportedPlatforms: SupportedPlatforms.optional(), disabled: z.optional(Disabled), props: z.optional(Props), version: z.optional(Version), diff --git a/packages/rnv/pluginTemplates/renative.plugins.json b/packages/rnv/pluginTemplates/renative.plugins.json index 8394de3d87..803704fe79 100644 --- a/packages/rnv/pluginTemplates/renative.plugins.json +++ b/packages/rnv/pluginTemplates/renative.plugins.json @@ -9,9 +9,6 @@ "version": "1.0.0-rc.12" }, "react-native-tvos": { - "supportedPlatforms": [ - "tvos", "androidtv", "firetv" - ], "version": "0.73.1-3" }, "react-native-web": { diff --git a/packages/template-starter/renative.json b/packages/template-starter/renative.json index fcf535b043..e07bfb7318 100644 --- a/packages/template-starter/renative.json +++ b/packages/template-starter/renative.json @@ -130,11 +130,19 @@ "react-art": "source:rnv", "react-dom": "source:rnv", "react-native-gesture-handler": "source:rnv", - "@react-native-community/cli-platform-ios": "source:rnv", + "@react-native-community/cli-platform-ios": { + "supportedPlatforms": ["tvos", "ios"] + }, "react-native": "source:rnv", - "next": "source:rnv", - "react-native-web": "source:rnv", - "react-native-tvos": "source:rnv" + "next": { + "supportedPlatforms": ["web"] + }, + "react-native-web": { + "supportedPlatforms": ["web", "tizen", "webos"] + }, + "react-native-tvos": { + "supportedPlatforms": ["tvos", "firetv", "androidtv"] + } }, "permissions": { "ios": {}, From e4f25e318d2309a2c707c3e611d2971b334a9599 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 14 Mar 2024 00:15:02 +0100 Subject: [PATCH 017/175] handle multiple instances of @rnv/core --- packages/cli/src/logger/index.ts | 4 +-- packages/core/src/context/defaults.ts | 1 + packages/core/src/context/index.ts | 52 ++++++++++++++------------- packages/core/src/context/types.ts | 1 + packages/core/src/plugins/index.ts | 9 +++-- 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index 98ad95cca0..d77d1bd0b1 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -578,8 +578,8 @@ export const logError = (e: Error | string | unknown, isEnd = false, skipAnalyti task: stripAnsi(_getCurrentTask()), message: stripAnsi(_sanitizePaths(err)), }); - } else if (e && e instanceof Error && e.message) { - logAndSave(currentChalk.red(`error: ⨯ ${_getCurrentTask()} ${e.message}\n${e.stack}`), isEnd); + } else if (e && e instanceof Error) { + logAndSave(currentChalk.red(`error: ⨯ ${_getCurrentTask()} ${e.stack || e}\n`), isEnd); } else { logAndSave(currentChalk.red(`error: ⨯ ${_getCurrentTask()} ${e}`), isEnd); } diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 22af30dfe9..d11e94203f 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -96,6 +96,7 @@ export const generateContextDefaults = (): RnvContext => ({ injectableConfigProps: {}, runtime, paths: { + RNV_CORE_HOME_DIR: '', CURRENT_DIR: '', IS_LINKED: false, IS_NPX_MODE: false, diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index c6cb81dfce..9a4250bd84 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -28,34 +28,37 @@ const populateLinkingInfo = (ctx: RnvContext) => { }; export const createRnvContext = (ctx?: CreateContextOptions) => { - if (!ctx && !global.RNV_CONTEXT) { - // Initial empty context to be initialized - global.RNV_CONTEXT = generateContextDefaults(); - return; + console.log('WTF IS THIS', !!ctx, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); + + let haltExecution = false; + // Handle new imports of @rnv/core + if (!ctx) { + if (!global.RNV_CONTEXT) { + // Initial empty context to be initialized + global.RNV_CONTEXT = generateContextDefaults(); + return; + } + // Full Context already initialized. Another @rnv/core instance has been just imported + haltExecution = true; } - if (!global.RNV_CONTEXT?.isDefault) { - // Full Context already initialized. Another RNV is trying to initialize - - if (global.RNV_CONTEXT.paths.rnv.dir !== ctx?.RNV_HOME_DIR) { - // If locations of RNV do not match throw warning as this might produce problems! - console.log(` -======= -WARNING: it seems your project is executed with 2 different versions of RNV: -INITIAL (Will be used) located at: ${global.RNV_CONTEXT.paths.rnv.dir}. -NEW: (Will NOT be used) located at: v${ctx?.RNV_HOME_DIR}. --- -This usually happens if: -A) you have multiple versions of rnv dependencies located in your repository -B) you are running project with global rnv (without npx). --- -This might result in unexpected issues! -Make sure all your rnv dependencies are of same version and you are executing with npx prefix -======= + if (haltExecution) { + const err = new Error(` + +FATAL: Multiple instances of @rnv/core detected: + +1 (${global.RNV_CONTEXT.timeStart.toISOString()}) + ${global.RNV_CONTEXT.paths.RNV_CORE_HOME_DIR} +2 (${new Date().toISOString()}) + ${path.join(__dirname, '../..')} + +This usually happens if you have multiple versions of @rnv/core dependencies located in your project or you are running project with global rnv (without npx). + `); - } - return; + + throw err; } + const c: RnvContext = generateContextDefaults(); c.program = ctx?.program || c.program; @@ -64,6 +67,7 @@ Make sure all your rnv dependencies are of same version and you are executing wi c.subCommand = ctx?.subCmd || c.subCommand; c.isSystemWin = isSystemWin; c.paths.rnv.dir = ctx?.RNV_HOME_DIR || c.paths.rnv.dir; + c.paths.RNV_CORE_HOME_DIR = path.join(__dirname, '../..'); populateContextPaths(c); diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index c3e85b938c..049a53f4a6 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -191,6 +191,7 @@ export type RnvContextPaths = { IS_LINKED: boolean; IS_NPX_MODE: boolean; CURRENT_DIR: string; + RNV_CORE_HOME_DIR: string; RNV_NODE_MODULES_DIR: string; //======= rnv: { diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index a55dc51dbf..abe515067b 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -191,7 +191,7 @@ export const configurePlugins = async () => { if (!plugin) { if (c.buildConfig?.plugins?.[k] === null) { - // Skip Warning as this is intentional "plugin":null + // Skip Warning as this is intentional "plugin":null override } else { logWarning( `Plugin with name ${chalk().bold( @@ -424,15 +424,20 @@ export const parsePlugins = ( //TODO: consider supportedPlatforms for plugins const isPluginPlatDisabled = pluginPlat.disabled === true; const isPluginDisabled = plugin.disabled === true; + const isPluginPlatSupported = plugin.supportedPlatforms + ? plugin.supportedPlatforms.includes(platform) + : true; if (ignorePlatformObjectCheck || includeDisabledOrExcludedPlugins) { if (isPluginDisabled) { logInfo(`Plugin ${key} is marked disabled. skipping.`); } else if (isPluginPlatDisabled) { logInfo(`Plugin ${key} is marked disabled for platform ${platform} skipping.`); + } else if (!isPluginPlatSupported) { + logInfo(`Plugin ${key} supportedPlatforms does not include ${platform} skipping.`); } handleActivePlugin(plugin, pluginPlat, key); - } else if (!isPluginPlatDisabled && !isPluginDisabled) { + } else if (!isPluginPlatDisabled && !isPluginDisabled && isPluginPlatSupported) { handleActivePlugin(plugin, pluginPlat, key); } } else if (includeDisabledOrExcludedPlugins) { From 8c943e868958f72531657a59497763774d2defa3 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 14 Mar 2024 20:33:10 +0100 Subject: [PATCH 018/175] bootstrap fixes, config fixes --- .../appConfigs/harness/renative.json | 6 +- packages/app-harness/package.json | 8 +- packages/app-harness/renative.json | 2 + packages/app-harness/src/app/index.tsx | 9 +- packages/core/src/plugins/index.ts | 40 +- .../tasks/global/new/questions/appTitle.ts | 2 - .../global/new/questions/installTemplate.ts | 14 +- .../tasks/global/new/questions/projectName.ts | 2 + .../src/tasks/linking/constants.ts | 2 +- .../engine-core/src/tasks/linking/taskLink.ts | 3 +- .../src/tasks/linking/taskUnlink.ts | 3 +- .../buildHooks/tsconfig.json | 7 - .../rnv/pluginTemplates/renative.plugins.json | 4 +- .../appConfigs/template/renative.json | 19 + .../template-starter/buildHooks/src/index.ts | 4 +- packages/template-starter/package.json | 6 +- packages/template-starter/renative.json | 17 - yarn.lock | 411 ++++++------------ 18 files changed, 202 insertions(+), 357 deletions(-) delete mode 100644 packages/rnv/coreTemplateFiles/buildHooks/tsconfig.json diff --git a/packages/app-harness/appConfigs/harness/renative.json b/packages/app-harness/appConfigs/harness/renative.json index f65fe3eabd..2a7575386e 100644 --- a/packages/app-harness/appConfigs/harness/renative.json +++ b/packages/app-harness/appConfigs/harness/renative.json @@ -5,16 +5,16 @@ "skipBootstrapCopy": true, "common": { "id": "renative.harness", - "title": "ReNative", + "title": "Harness", "description": "Cross-platform application project based on ReNative", "buildSchemes": { "debug": { "id": "renative.harness.debug", - "title": "ReNative Debug" + "title": "Debug Harness" }, "test": { "id": "renative.harness.test", - "title": "ReNative Test" + "title": "Test Harness" } }, "runtime": { diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index cc730db425..8b6af17237 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -48,15 +48,17 @@ "react": "18.2.0", "react-art": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.4", + "react-native": "0.73.6", "react-native-carplay": "2.3.0", "react-native-gesture-handler": "2.14.1", "react-native-orientation-locker": "1.5.0", "react-native-permissions": "4.1.4", "react-native-photo-editor": "1.0.13", "react-native-splash-screen": "3.3.0", - "react-native-tvos": "0.73.1-3", - "react-native-web": "0.19.9" + "react-native-tvos": "0.73.6-0", + "react-native-web": "0.19.9", + "react-native-safe-area-context": "4.9.0", + "@react-native-community/cli-platform-ios": "11.3.7" }, "devDependencies": { "@flexn/assets-renative-outline": "0.3.3", diff --git a/packages/app-harness/renative.json b/packages/app-harness/renative.json index 57f4113220..8ddafa6e34 100644 --- a/packages/app-harness/renative.json +++ b/packages/app-harness/renative.json @@ -5,10 +5,12 @@ "crypto": { "path": "./secrets/privateConfigs.enc" }, + "isMonorepo": true, "integrations": { "@rnv/integration-starter": {} }, "plugins": { + "react-native-safe-area-context": "4.9.0", "react-native-splash-screen": { "android": { "templateAndroid": { diff --git a/packages/app-harness/src/app/index.tsx b/packages/app-harness/src/app/index.tsx index 7656e294cf..4450a37ba5 100644 --- a/packages/app-harness/src/app/index.tsx +++ b/packages/app-harness/src/app/index.tsx @@ -13,11 +13,14 @@ import { TestCase } from '../components/TestCase'; import config from '../../package.json'; import { LoggerProvider, useLoggerContext } from '../context'; import { NotificationCallback } from '../components/types'; +import { SafeAreaProvider } from 'react-native-safe-area-context'; const App = () => ( - - - + + + + + ); const AppContent = () => { diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index abe515067b..ed83ebe67c 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -201,8 +201,12 @@ export const configurePlugins = async () => { )}` ); } - } else if (dependencies && dependencies[k]) { - if (plugin.disabled !== true && plugin.disableNpm !== true) { + } else if ( + plugin && plugin.disabled !== true && plugin.disableNpm !== true && c.platform && plugin.supportedPlatforms + ? plugin.supportedPlatforms.includes(c.platform) + : true + ) { + if (dependencies && dependencies[k]) { if (!plugin.version) { if (!c.runtime._skipPluginScopeWarnings) { logInfo(`Plugin ${k} not ready yet (waiting for scope ${plugin.scope}). SKIPPING...`); @@ -210,17 +214,15 @@ export const configurePlugins = async () => { } else if (dependencies[k] !== plugin.version) { logWarning( `Version mismatch of dependency ${chalk().bold(k)} between: -${chalk().bold(c.paths.project.package)}: v(${chalk().red(dependencies[k])}) and -${chalk().bold(c.paths.project.builds.config)}: v(${chalk().green(plugin.version)}). -${ovMsg}` + ${chalk().bold(c.paths.project.package)}: v(${chalk().red(dependencies[k])}) and + ${chalk().bold(c.paths.project.builds.config)}: v(${chalk().green(plugin.version)}). + ${ovMsg}` ); hasPackageChanged = true; _applyPackageDependency(newDeps, k, plugin.version); } - } - } else if (devDependencies && devDependencies[k]) { - if (plugin.disabled !== true && plugin.disableNpm !== true) { + } else if (devDependencies && devDependencies[k]) { if (!plugin.version) { if (!c.runtime._skipPluginScopeWarnings) { logInfo(`Plugin ${k} not ready yet (waiting for scope ${plugin.scope}). SKIPPING...`); @@ -234,17 +236,19 @@ ${ovMsg}` hasPackageChanged = true; _applyPackageDependency(newDevDeps, k, plugin.version); } - } - } else if (plugin.disabled !== true && plugin.disableNpm !== true) { - // Dependency does not exists - if (plugin.version) { - logInfo( - `Missing dependency ${chalk().bold(k)} v(${chalk().red(plugin.version)}) in package.json. ${ovMsg}` - ); - - hasPackageChanged = true; + } else { + // Dependency does not exists if (plugin.version) { - _applyPackageDependency(newDeps, k, plugin.version); + logInfo( + `Missing dependency ${chalk().bold(k)} v(${chalk().red( + plugin.version + )}) in package.json. ${ovMsg}` + ); + + hasPackageChanged = true; + if (plugin.version) { + _applyPackageDependency(newDeps, k, plugin.version); + } } } } diff --git a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts index 71546a4c27..74559523a4 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts +++ b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts @@ -21,6 +21,4 @@ export const inquiryAppTitle = async (data: NewProjectData) => { data.inputAppTitle = result; data.appTitle = data.inputAppTitle || data.defaultAppTitle; - - data.packageName = data?.appTitle?.replace(/\s+/g, '-').toLowerCase(); }; diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index c259885767..32d127ad43 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -21,6 +21,7 @@ import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; import { saveProgressIntoProjectConfig } from '../projectGenerator'; +import { merge } from 'lodash'; export const inquiryInstallTemplate = async (data: NewProjectData) => { const customTemplate = { name: 'Custom Template (npm)...', value: { key: 'custom' } }; @@ -144,12 +145,21 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { }); // NOTE: this is a workaround for npm/yarn bug where manually added packages are overriden on next install - data.files.project.packageJson = { + data.files.project.packageJson = merge(data.files.project.packageJson, { devDependencies: { [data.optionTemplates.selectedOption]: `file:.rnv/npm_cache/${data.optionTemplates.selectedOption}`, }, - }; + }); + data.files.project.renativeConfig = merge(data.files.project.renativeConfig, { + templates: { + [data.optionTemplates.selectedOption]: { + version: `file:.rnv/npm_cache/${data.optionTemplates.selectedOption}`, + }, + }, + }); + await saveProgressIntoProjectConfig(data); + await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm install'}`, { cwd: c.paths.project.dir, }); diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index cea2a38af5..a6abcbfdc2 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -20,11 +20,13 @@ export const inquiryProjectName = async (data: NewProjectData) => { } data.projectName = data.inputProjectName?.replace?.(/(\s+)/g, '_'); + data.packageName = data.inputProjectName?.replace(/\s+/g, '-').toLowerCase(); c.paths.project.dir = path.join(c.paths.CURRENT_DIR, data.projectName || ''); c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); data.files.project.renativeConfig.projectName = data.projectName; + data.files.project.packageJson.name = data.packageName; if (fsExistsSync(c.paths.project.dir)) { logWarning(`Folder ${c.paths.project.dir} already exists. RNV will override it.`); diff --git a/packages/engine-core/src/tasks/linking/constants.ts b/packages/engine-core/src/tasks/linking/constants.ts index d7455b2fe4..667e4c3506 100644 --- a/packages/engine-core/src/tasks/linking/constants.ts +++ b/packages/engine-core/src/tasks/linking/constants.ts @@ -2,7 +2,7 @@ export const RNV_PACKAGES = [ { packageName: '@rnv/renative', folderName: 'renative', - skipLinking: false, + skipLinking: true, }, { packageName: '@rnv/core', diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index e5b2b412c9..b090f53b63 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -2,7 +2,6 @@ import path from 'path'; import { logInfo, logTask, - logSuccess, RnvTaskOptionPresets, fsExistsSync, fsRenameSync, @@ -31,7 +30,7 @@ const _linkPackage = (c: RnvContext, key: string, folder: string) => { } else if (fsExistsSync(rnvPath)) { fsRenameSync(rnvPath, rnvPathUnlinked); fsSymlinkSync(pkgDir, rnvPath); - logSuccess(`${key} => link => SUCCESS`); + logInfo(`${key} => link => SUCCESS`); } }; diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index 38ab7ce66b..7dfbc676dd 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -2,7 +2,6 @@ import path from 'path'; import { logInfo, logTask, - logSuccess, RnvTaskOptionPresets, fsExistsSync, fsRenameSync, @@ -25,7 +24,7 @@ const _unlinkPackage = (c: RnvContext, key: string) => { if (fsLstatSync(rnvPath).isSymbolicLink()) { fsUnlinkSync(rnvPath); fsRenameSync(rnvPathUnlinked, rnvPath); - logSuccess(`${key} => unlink => SUCCESS`); + logInfo(`${key} => unlink => SUCCESS`); } else { logInfo(`${key} is not a symlink anymore. SKIPPING`); } diff --git a/packages/rnv/coreTemplateFiles/buildHooks/tsconfig.json b/packages/rnv/coreTemplateFiles/buildHooks/tsconfig.json deleted file mode 100644 index 82dac4d899..0000000000 --- a/packages/rnv/coreTemplateFiles/buildHooks/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "@rnv/core/tsconfig.hooks.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - } -} diff --git a/packages/rnv/pluginTemplates/renative.plugins.json b/packages/rnv/pluginTemplates/renative.plugins.json index 803704fe79..3c6fe6ed6e 100644 --- a/packages/rnv/pluginTemplates/renative.plugins.json +++ b/packages/rnv/pluginTemplates/renative.plugins.json @@ -9,7 +9,7 @@ "version": "1.0.0-rc.12" }, "react-native-tvos": { - "version": "0.73.1-3" + "version": "0.73.6-0" }, "react-native-web": { "version": "0.19.9", @@ -22,7 +22,7 @@ "disablePluginTemplateOverrides": true }, "react-native": { - "version": "0.73.4" + "version": "0.73.6" }, "@react-native-community/cli-platform-ios": { "version": "11.3.7", diff --git a/packages/template-starter/appConfigs/template/renative.json b/packages/template-starter/appConfigs/template/renative.json index 34e8ab0565..5b1271134f 100644 --- a/packages/template-starter/appConfigs/template/renative.json +++ b/packages/template-starter/appConfigs/template/renative.json @@ -4,6 +4,25 @@ "id": "template", "isTemplate": true, "isMonorepo": true, + "defaults": { + "ports": { + "ios": 8082, + "android": 8083, + "androidtv": 8084, + "firetv": 8098, + "tvos": 8085, + "macos": 8086, + "web": 8080, + "tizen": 8087, + "webos": 8088, + "androidwear": 8089, + "tizenwatch": 8090, + "tizenmobile": 8091, + "windows": 8092, + "xbox": 8099, + "kaios": 8093 + } + }, "skipBootstrapCopy": true, "common": { "id": "renative.helloworld", diff --git a/packages/template-starter/buildHooks/src/index.ts b/packages/template-starter/buildHooks/src/index.ts index 9c79bab25a..c180f4946b 100644 --- a/packages/template-starter/buildHooks/src/index.ts +++ b/packages/template-starter/buildHooks/src/index.ts @@ -1,8 +1,6 @@ -import { logHook } from '@rnv/core'; - const hooks = { hello: async () => { - logHook('Hello build hook!'); + console.log('Hello build hook!'); }, }; diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index cb382ca923..dc42e11be5 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -117,9 +117,9 @@ "react": "18.2.0", "react-art": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.4", + "react-native": "0.73.6", "react-native-gesture-handler": "2.14.1", - "react-native-tvos": "0.73.1-3", + "react-native-tvos": "0.73.6-0", "react-native-web": "0.19.9", "rnv": "1.0.0-rc.12" }, @@ -131,4 +131,4 @@ ">0.2%", "op_mini all" ] -} \ No newline at end of file +} diff --git a/packages/template-starter/renative.json b/packages/template-starter/renative.json index e07bfb7318..9f8e3501da 100644 --- a/packages/template-starter/renative.json +++ b/packages/template-starter/renative.json @@ -17,23 +17,6 @@ "platformBuildsDir": "./platformBuilds" }, "defaults": { - "ports": { - "ios": 8082, - "android": 8083, - "androidtv": 8084, - "firetv": 8098, - "tvos": 8085, - "macos": 8086, - "web": 8080, - "tizen": 8087, - "webos": 8088, - "androidwear": 8089, - "tizenwatch": 8090, - "tizenmobile": 8091, - "windows": 8092, - "xbox": 8099, - "kaios": 8093 - }, "supportedPlatforms": [ "ios", "android", diff --git a/yarn.lock b/yarn.lock index e8f8acd7d0..da8a526ce5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3231,21 +3231,12 @@ execa "^5.0.0" prompts "^2.4.0" -"@react-native-community/cli-clean@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-12.3.0.tgz#667b32daa58b4d11d5b5ab9eb0a2e216d500c90b" - integrity sha512-iAgLCOWYRGh9ukr+eVQnhkV/OqN3V2EGd/in33Ggn/Mj4uO6+oUncXFwB+yjlyaUNz6FfjudhIz09yYGSF+9sg== +"@react-native-community/cli-clean@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz#e8a7910bebc97266fd5068649013a03958021fc4" + integrity sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig== dependencies: - "@react-native-community/cli-tools" "12.3.0" - chalk "^4.1.2" - execa "^5.0.0" - -"@react-native-community/cli-clean@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz#d4f1730c3d22d816b4d513d330d5f3896a3f5921" - integrity sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A== - dependencies: - "@react-native-community/cli-tools" "12.3.2" + "@react-native-community/cli-tools" "12.3.6" chalk "^4.1.2" execa "^5.0.0" @@ -3261,24 +3252,12 @@ glob "^7.1.3" joi "^17.2.1" -"@react-native-community/cli-config@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-12.3.0.tgz#255b4e5391878937a25888f452f50a968d053e3e" - integrity sha512-BrTn5ndFD9uOxO8kxBQ32EpbtOvAsQExGPI7SokdI4Zlve70FziLtTq91LTlTUgMq1InVZn/jJb3VIDk6BTInQ== - dependencies: - "@react-native-community/cli-tools" "12.3.0" - chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" - glob "^7.1.3" - joi "^17.2.1" - -"@react-native-community/cli-config@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-12.3.2.tgz#1a5de302de4d597ff2fc9932a032134b6ec4325f" - integrity sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ== +"@react-native-community/cli-config@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.6.tgz#5f0be68270217908a739c32e3155a0e354773251" + integrity sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew== dependencies: - "@react-native-community/cli-tools" "12.3.2" + "@react-native-community/cli-tools" "12.3.6" chalk "^4.1.2" cosmiconfig "^5.1.0" deepmerge "^4.3.0" @@ -3292,17 +3271,10 @@ dependencies: serve-static "^1.13.1" -"@react-native-community/cli-debugger-ui@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.0.tgz#75bbb2082a369b3559e0dffa8bfeebf2a9107e3e" - integrity sha512-w3b0iwjQlk47GhZWHaeTG8kKH09NCMUJO729xSdMBXE8rlbm4kHpKbxQY9qKb6NlfWSJN4noGY+FkNZS2rRwnQ== - dependencies: - serve-static "^1.13.1" - -"@react-native-community/cli-debugger-ui@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz#b2743876b03e560fbf5ef516e95387fcb6d91630" - integrity sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q== +"@react-native-community/cli-debugger-ui@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz#418027a1ae76850079684d309a732eb378c7f690" + integrity sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA== dependencies: serve-static "^1.13.1" @@ -3330,45 +3302,21 @@ wcwidth "^1.0.1" yaml "^2.2.1" -"@react-native-community/cli-doctor@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-12.3.0.tgz#420eb4e80d482f16d431c4df33fbc203862508af" - integrity sha512-BPCwNNesoQMkKsxB08Ayy6URgGQ8Kndv6mMhIvJSNdST3J1+x3ehBHXzG9B9Vfi+DrTKRb8lmEl/b/7VkDlPkA== +"@react-native-community/cli-doctor@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz#f68b51bbc6554ff4837269d98e9e405044e6f1b9" + integrity sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ== dependencies: - "@react-native-community/cli-config" "12.3.0" - "@react-native-community/cli-platform-android" "12.3.0" - "@react-native-community/cli-platform-ios" "12.3.0" - "@react-native-community/cli-tools" "12.3.0" + "@react-native-community/cli-config" "12.3.6" + "@react-native-community/cli-platform-android" "12.3.6" + "@react-native-community/cli-platform-ios" "12.3.6" + "@react-native-community/cli-tools" "12.3.6" chalk "^4.1.2" command-exists "^1.2.8" deepmerge "^4.3.0" envinfo "^7.10.0" execa "^5.0.0" hermes-profile-transformer "^0.0.6" - ip "^1.1.5" - node-stream-zip "^1.9.1" - ora "^5.4.1" - semver "^7.5.2" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - yaml "^2.2.1" - -"@react-native-community/cli-doctor@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz#9e82b49f04ee03872b2975f26c8799cecac021ce" - integrity sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg== - dependencies: - "@react-native-community/cli-config" "12.3.2" - "@react-native-community/cli-platform-android" "12.3.2" - "@react-native-community/cli-platform-ios" "12.3.2" - "@react-native-community/cli-tools" "12.3.2" - chalk "^4.1.2" - command-exists "^1.2.8" - deepmerge "^4.3.0" - envinfo "^7.10.0" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - ip "^1.1.5" node-stream-zip "^1.9.1" ora "^5.4.1" semver "^7.5.2" @@ -3387,27 +3335,15 @@ hermes-profile-transformer "^0.0.6" ip "^1.1.5" -"@react-native-community/cli-hermes@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-12.3.0.tgz#c302acbfb07e1f4e73e76e3150c32f0e4f54e9ed" - integrity sha512-G6FxpeZBO4AimKZwtWR3dpXRqTvsmEqlIkkxgwthdzn3LbVjDVIXKpVYU9PkR5cnT+KuAUxO0WwthrJ6Nmrrlg== - dependencies: - "@react-native-community/cli-platform-android" "12.3.0" - "@react-native-community/cli-tools" "12.3.0" - chalk "^4.1.2" - hermes-profile-transformer "^0.0.6" - ip "^1.1.5" - -"@react-native-community/cli-hermes@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz#5f266985fe32a37e9020e881460e9017870be2e5" - integrity sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA== +"@react-native-community/cli-hermes@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz#5ac2c9ee26c69e1ce6b5047ba0f399984a6dea16" + integrity sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ== dependencies: - "@react-native-community/cli-platform-android" "12.3.2" - "@react-native-community/cli-tools" "12.3.2" + "@react-native-community/cli-platform-android" "12.3.6" + "@react-native-community/cli-tools" "12.3.6" chalk "^4.1.2" hermes-profile-transformer "^0.0.6" - ip "^1.1.5" "@react-native-community/cli-platform-android@11.3.7": version "11.3.7" @@ -3420,24 +3356,12 @@ glob "^7.1.3" logkitty "^0.7.1" -"@react-native-community/cli-platform-android@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.0.tgz#eafa5fb12ebc25f716aea18cd55039c19fbedca6" - integrity sha512-VU1NZw63+GLU2TnyQ919bEMThpHQ/oMFju9MCfrd3pyPJz4Sn+vc3NfnTDUVA5Z5yfLijFOkHIHr4vo/C9bjnw== +"@react-native-community/cli-platform-android@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz#e1103692c659ff0b72ee6f00b7c72578db7376ec" + integrity sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g== dependencies: - "@react-native-community/cli-tools" "12.3.0" - chalk "^4.1.2" - execa "^5.0.0" - fast-xml-parser "^4.2.4" - glob "^7.1.3" - logkitty "^0.7.1" - -"@react-native-community/cli-platform-android@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz#de54d89712f8ea95046d798ec274fd6caea70c34" - integrity sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg== - dependencies: - "@react-native-community/cli-tools" "12.3.2" + "@react-native-community/cli-tools" "12.3.6" chalk "^4.1.2" execa "^5.0.0" fast-xml-parser "^4.2.4" @@ -3456,24 +3380,12 @@ glob "^7.1.3" ora "^5.4.1" -"@react-native-community/cli-platform-ios@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.0.tgz#42a9185bb51f35a7eb9c5818b2f0072846945ef5" - integrity sha512-H95Sgt3wT7L8V75V0syFJDtv4YgqK5zbu69ko4yrXGv8dv2EBi6qZP0VMmkqXDamoPm9/U7tDTdbcf26ctnLfg== +"@react-native-community/cli-platform-ios@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz#e7decb5ee764f5fdc7a6ad1ba5e15de8929d54a5" + integrity sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg== dependencies: - "@react-native-community/cli-tools" "12.3.0" - chalk "^4.1.2" - execa "^5.0.0" - fast-xml-parser "^4.0.12" - glob "^7.1.3" - ora "^5.4.1" - -"@react-native-community/cli-platform-ios@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz#07e298f69761424da85909790a43ec60ebfe6097" - integrity sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg== - dependencies: - "@react-native-community/cli-tools" "12.3.2" + "@react-native-community/cli-tools" "12.3.6" chalk "^4.1.2" execa "^5.0.0" fast-xml-parser "^4.0.12" @@ -3497,15 +3409,10 @@ metro-runtime "0.76.8" readline "^1.3.0" -"@react-native-community/cli-plugin-metro@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.0.tgz#b4ea8da691d294aee98ccfcd1162bcd958cae834" - integrity sha512-tYNHIYnNmxrBcsqbE2dAnLMzlKI3Cp1p1xUgTrNaOMsGPDN1epzNfa34n6Nps3iwKElSL7Js91CzYNqgTalucA== - -"@react-native-community/cli-plugin-metro@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz#7db7dc8939b821b9aeebdd5ee3293f3a0201a2ea" - integrity sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g== +"@react-native-community/cli-plugin-metro@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.6.tgz#ae62de18e998478db60a3fe10dc746162c272dbd" + integrity sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg== "@react-native-community/cli-server-api@11.3.7": version "11.3.7" @@ -3522,28 +3429,13 @@ serve-static "^1.13.1" ws "^7.5.1" -"@react-native-community/cli-server-api@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-12.3.0.tgz#0460472d44c121d1db8a98ad1df811200c074fb3" - integrity sha512-Rode8NrdyByC+lBKHHn+/W8Zu0c+DajJvLmOWbe2WY/ECvnwcd9MHHbu92hlT2EQaJ9LbLhGrSbQE3cQy9EOCw== - dependencies: - "@react-native-community/cli-debugger-ui" "12.3.0" - "@react-native-community/cli-tools" "12.3.0" - compression "^1.7.1" - connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" - serve-static "^1.13.1" - ws "^7.5.1" - -"@react-native-community/cli-server-api@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz#11df4e20ed72d59cf22adf77bd30aff3d6e70dc9" - integrity sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q== +"@react-native-community/cli-server-api@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz#cd78122954a02d22c7821c365938635b51ddd1bd" + integrity sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ== dependencies: - "@react-native-community/cli-debugger-ui" "12.3.2" - "@react-native-community/cli-tools" "12.3.2" + "@react-native-community/cli-debugger-ui" "12.3.6" + "@react-native-community/cli-tools" "12.3.6" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.1" @@ -3567,26 +3459,10 @@ semver "^7.5.2" shell-quote "^1.7.3" -"@react-native-community/cli-tools@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-12.3.0.tgz#d459a116e1a95034d3c9a6385069c9e2049fb2a6" - integrity sha512-2GafnCr8D88VdClwnm9KZfkEb+lzVoFdr/7ybqhdeYM0Vnt/tr2N+fM1EQzwI1DpzXiBzTYemw8GjRq+Utcz2Q== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - sudo-prompt "^9.0.0" - -"@react-native-community/cli-tools@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz#d3362b04fba3f73ec82c5a493696b575acfb420c" - integrity sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ== +"@react-native-community/cli-tools@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz#c39965982347635dfaf1daa7b3c0133b3bd45e64" + integrity sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ== dependencies: appdirsjs "^1.2.4" chalk "^4.1.2" @@ -3606,17 +3482,10 @@ dependencies: joi "^17.2.1" -"@react-native-community/cli-types@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-12.3.0.tgz#2d21a1f93aefbdb34a04311d68097aef0388704f" - integrity sha512-MgOkmrXH4zsGxhte4YqKL7d+N8ZNEd3w1wo56MZlhu5WabwCJh87wYpU5T8vyfujFLYOFuFK5jjlcbs8F4/WDw== - dependencies: - joi "^17.2.1" - -"@react-native-community/cli-types@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-12.3.2.tgz#0551c553c87701faae580097d7786dfff8ec2ef4" - integrity sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog== +"@react-native-community/cli-types@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.6.tgz#239de348800fe1ffba3eb1fe0edbeb9306981e57" + integrity sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q== dependencies: joi "^17.2.1" @@ -3643,44 +3512,20 @@ prompts "^2.4.0" semver "^7.5.2" -"@react-native-community/cli@12.3.0": - version "12.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-12.3.0.tgz#c89aacc3973943bf24002255d7d0859b511d88a1" - integrity sha512-XeQohi2E+S2+MMSz97QcEZ/bWpi8sfKiQg35XuYeJkc32Til2g0b97jRpn0/+fV0BInHoG1CQYWwHA7opMsrHg== - dependencies: - "@react-native-community/cli-clean" "12.3.0" - "@react-native-community/cli-config" "12.3.0" - "@react-native-community/cli-debugger-ui" "12.3.0" - "@react-native-community/cli-doctor" "12.3.0" - "@react-native-community/cli-hermes" "12.3.0" - "@react-native-community/cli-plugin-metro" "12.3.0" - "@react-native-community/cli-server-api" "12.3.0" - "@react-native-community/cli-tools" "12.3.0" - "@react-native-community/cli-types" "12.3.0" - chalk "^4.1.2" - commander "^9.4.1" - deepmerge "^4.3.0" - execa "^5.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - graceful-fs "^4.1.3" - prompts "^2.4.2" - semver "^7.5.2" - -"@react-native-community/cli@12.3.2": - version "12.3.2" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-12.3.2.tgz#002ae3683b9fe6b0a83a837f41d9db541ea7667f" - integrity sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ== - dependencies: - "@react-native-community/cli-clean" "12.3.2" - "@react-native-community/cli-config" "12.3.2" - "@react-native-community/cli-debugger-ui" "12.3.2" - "@react-native-community/cli-doctor" "12.3.2" - "@react-native-community/cli-hermes" "12.3.2" - "@react-native-community/cli-plugin-metro" "12.3.2" - "@react-native-community/cli-server-api" "12.3.2" - "@react-native-community/cli-tools" "12.3.2" - "@react-native-community/cli-types" "12.3.2" +"@react-native-community/cli@12.3.6": + version "12.3.6" + resolved "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz#7a323b78725b959bb8a31cca1145918263ff3c8d" + integrity sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw== + dependencies: + "@react-native-community/cli-clean" "12.3.6" + "@react-native-community/cli-config" "12.3.6" + "@react-native-community/cli-debugger-ui" "12.3.6" + "@react-native-community/cli-doctor" "12.3.6" + "@react-native-community/cli-hermes" "12.3.6" + "@react-native-community/cli-plugin-metro" "12.3.6" + "@react-native-community/cli-server-api" "12.3.6" + "@react-native-community/cli-tools" "12.3.6" + "@react-native-community/cli-types" "12.3.6" chalk "^4.1.2" commander "^9.4.1" deepmerge "^4.3.0" @@ -3706,6 +3551,14 @@ opencollective-postinstall "^2.0.3" superstruct "^0.6.2" +"@react-native-tvos/virtualized-lists@0.73.6-0": + version "0.73.6-0" + resolved "https://registry.npmjs.org/@react-native-tvos/virtualized-lists/-/virtualized-lists-0.73.6-0.tgz#9ba4b53aa79ac36230be5f86e905c1e3e7f8c6af" + integrity sha512-hnLlHHUeVW8sNKCmxcCTTI/X8sZEtsxhcSnMy3RvFCLH8/58WK6jOAWYiUnSYoUItdrhZmN8EI09I83tfKdRmA== + dependencies: + invariant "^2.2.4" + nullthrows "^1.1.1" + "@react-native-windows/cli@0.72.3": version "0.72.3" resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.72.3.tgz#4e30f91cbc976d5c05e3bf28ffe43245c38831b6" @@ -3813,7 +3666,7 @@ dependencies: "@react-native/codegen" "0.73.3" -"@react-native/babel-preset@*", "@react-native/babel-preset@0.73.20": +"@react-native/babel-preset@*": version "0.73.20" resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.73.20.tgz#65ab68cce16bb222bb1faece498abb6f7b1d5db0" integrity sha512-fU9NqkusbfFq71l4BWQfqqD/lLcLC0MZ++UYgieA3j8lIEppJTLVauv2RwtD2yltBkjebgYEC5Rwvt1l0MUBXw== @@ -3948,31 +3801,14 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.73.11": - version "0.73.11" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.11.tgz#8826cb81bb794408202e1ce7d87e45710eff1a9f" - integrity sha512-s0bprwljKS1Al8wOKathDDmRyF+70CcNE2G/aqZ7+L0NoOE0Uxxx/5P2BxlM2Mfht7O33B4SeMNiPdE/FqIubQ== - dependencies: - "@react-native-community/cli-server-api" "12.3.0" - "@react-native-community/cli-tools" "12.3.0" - "@react-native/dev-middleware" "^0.73.6" - "@react-native/metro-babel-transformer" "^0.73.12" - chalk "^4.0.0" - execa "^5.1.1" - metro "^0.80.0" - metro-config "^0.80.0" - metro-core "^0.80.0" - node-fetch "^2.2.0" - readline "^1.3.0" - -"@react-native/community-cli-plugin@0.73.16": - version "0.73.16" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz#29dca91aa3e24c8cd534dbf3db5766509da92ea3" - integrity sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ== +"@react-native/community-cli-plugin@0.73.17": + version "0.73.17" + resolved "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz#37b381a8b503a3296eaa6727e0c52ea8835add28" + integrity sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ== dependencies: - "@react-native-community/cli-server-api" "12.3.2" - "@react-native-community/cli-tools" "12.3.2" - "@react-native/dev-middleware" "0.73.7" + "@react-native-community/cli-server-api" "12.3.6" + "@react-native-community/cli-tools" "12.3.6" + "@react-native/dev-middleware" "0.73.8" "@react-native/metro-babel-transformer" "0.73.15" chalk "^4.0.0" execa "^5.1.1" @@ -3987,10 +3823,10 @@ resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz#033757614d2ada994c68a1deae78c1dd2ad33c2b" integrity sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw== -"@react-native/dev-middleware@0.73.7", "@react-native/dev-middleware@^0.73.6": - version "0.73.7" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz#61d2bf08973d9a537fa3f2a42deeb13530d721ae" - integrity sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg== +"@react-native/dev-middleware@0.73.8": + version "0.73.8" + resolved "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz#2e43722a00c7b8db753f747f40267cbad6caba4d" + integrity sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg== dependencies: "@isaacs/ttlcache" "^1.4.1" "@react-native/debugger-frontend" "0.73.3" @@ -4002,6 +3838,7 @@ open "^7.0.3" serve-static "^1.13.1" temp-dir "^2.0.0" + ws "^6.2.2" "@react-native/gradle-plugin@0.73.4": version "0.73.4" @@ -4033,16 +3870,6 @@ hermes-parser "0.15.0" nullthrows "^1.1.1" -"@react-native/metro-babel-transformer@^0.73.12": - version "0.73.14" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.14.tgz#a4ee02c729216e4ab5b7c7aa28abbfe8e0a943a8" - integrity sha512-5wLeYw/lormpSqYfI9H/geZ/EtPmi+x5qLkEit15Q/70hkzYo/M+aWztUtbOITfgTEOP8d6ybROzoGsqgyZLcw== - dependencies: - "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.73.20" - hermes-parser "0.15.0" - nullthrows "^1.1.1" - "@react-native/metro-babel-transformer@^0.74.0": version "0.74.0" resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.0.tgz#ed84c03621ae0d9f985def55153fc35e8a062618" @@ -14531,7 +14358,7 @@ metro-config@0.76.8: metro-core "0.76.8" metro-runtime "0.76.8" -metro-config@0.80.5, metro-config@^0.80.0, metro-config@^0.80.3: +metro-config@0.80.5, metro-config@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.80.5.tgz#859e2ce307372f583bc8ebfe69bd233dd9328a8b" integrity sha512-elqo/lwvF+VjZ1OPyvmW/9hSiGlmcqu+rQvDKw5F5WMX48ZC+ySTD1WcaD7e97pkgAlJHVYqZ98FCjRAYOAFRQ== @@ -14552,7 +14379,7 @@ metro-core@0.76.8: lodash.throttle "^4.1.1" metro-resolver "0.76.8" -metro-core@0.80.5, metro-core@^0.80.0, metro-core@^0.80.3: +metro-core@0.80.5, metro-core@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.80.5.tgz#3ead635dcecfa6d0b380f8a80d3e5406f70846a9" integrity sha512-vkLuaBhnZxTVpaZO8ZJVEHzjaqSXpOdpAiztSZ+NDaYM6jEFgle3/XIbLW91jTSf2+T8Pj5yB1G7KuOX+BcVwg== @@ -14704,7 +14531,7 @@ metro-runtime@0.76.8: "@babel/runtime" "^7.0.0" react-refresh "^0.4.0" -metro-runtime@0.80.5, metro-runtime@^0.80.0, metro-runtime@^0.80.3: +metro-runtime@0.80.5, metro-runtime@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.80.5.tgz#48ac4c732be195e0ebdefb5ac5d32c7da76305ad" integrity sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg== @@ -14725,7 +14552,7 @@ metro-source-map@0.76.8: source-map "^0.5.6" vlq "^1.0.0" -metro-source-map@0.80.5, metro-source-map@^0.80.0, metro-source-map@^0.80.3: +metro-source-map@0.80.5, metro-source-map@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.80.5.tgz#21acdc1d5417cf3009209555d84cbeb61de5d6d5" integrity sha512-DwSF4l03mKPNqCtyQ6K23I43qzU1BViAXnuH81eYWdHglP+sDlPpY+/7rUahXEo6qXEHXfAJgVoo1sirbXbmsQ== @@ -14875,7 +14702,7 @@ metro@0.76.8: ws "^7.5.1" yargs "^17.6.2" -metro@0.80.5, metro@^0.80.0, metro@^0.80.3: +metro@0.80.5, metro@^0.80.3: version "0.80.5" resolved "https://registry.yarnpkg.com/metro/-/metro-0.80.5.tgz#94cd36df2eab434f050314a6d31529e8dc1b26df" integrity sha512-OE/CGbOgbi8BlTN1QqJgKOBaC27dS0JBQw473JcivrpgVnqIsluROA7AavEaTVUrB9wPUZvoNVDROn5uiM2jfw== @@ -17950,31 +17777,37 @@ react-native-photo-editor@1.0.13: resolved "https://registry.yarnpkg.com/react-native-photo-editor/-/react-native-photo-editor-1.0.13.tgz#292d2f1a87bb3fb9b75000683f05664f360bdf6b" integrity sha512-SWrnatVC4H73cEN+6rVlc0M5cGS20K6EwL8u2CmlBlLNEwH6OfayMgOCwpKJdmN2GPZKJ2JraQru8Ga7JL4zaw== +react-native-safe-area-context@4.9.0: + version "4.9.0" + resolved "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.9.0.tgz#21a570ca3594cb4259ba65f93befaa60d91bcbd0" + integrity sha512-/OJD9Pb8IURyvn+1tWTszWPJqsbZ4hyHBU9P0xhOmk7h5owSuqL0zkfagU0pg7Vh0G2NKQkaPpUKUMMCUMDh/w== + react-native-splash-screen@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/react-native-splash-screen/-/react-native-splash-screen-3.3.0.tgz#3af71ed17afe50fee69590a45aec399d071ead02" integrity sha512-rGjt6HkoSXxMqH4SQUJ1gnPQlPJV8+J47+4yhgTIan4bVvAwJhEeJH7wWt9hXSdH4+VfwTS0GTaflj1Tw83IhA== -react-native-tvos@0.73.1-3: - version "0.73.1-3" - resolved "https://registry.yarnpkg.com/react-native-tvos/-/react-native-tvos-0.73.1-3.tgz#fa77431e4aaa312a2e59cab17f40ce7e5fb512bf" - integrity sha512-/T2HXOczNZ2OyB1TtWGDaiCB/aHPaTaAZ/xrNKyhMtIt/LHEQyJkLuFxP48Y4WPb+r5GavL/LBt0j+E09O3FEg== +react-native-tvos@0.73.6-0: + version "0.73.6-0" + resolved "https://registry.npmjs.org/react-native-tvos/-/react-native-tvos-0.73.6-0.tgz#c1f362a07beec36320c5f7a1f58494e57b7741ff" + integrity sha512-1zZGSwjXWE5056LJaDgtHpRI0blabx5TIOhT4A5d+9kL1TAVwLf9XiHTLWAhU00FrG4LCi5B+8mMmCM6IsefIw== dependencies: "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "12.3.0" - "@react-native-community/cli-platform-android" "12.3.0" - "@react-native-community/cli-platform-ios" "12.3.0" + "@react-native-community/cli" "12.3.6" + "@react-native-community/cli-platform-android" "12.3.6" + "@react-native-community/cli-platform-ios" "12.3.6" + "@react-native-tvos/virtualized-lists" "0.73.6-0" "@react-native/assets-registry" "0.73.1" - "@react-native/codegen" "0.73.2" - "@react-native/community-cli-plugin" "0.73.11" + "@react-native/codegen" "0.73.3" + "@react-native/community-cli-plugin" "0.73.17" "@react-native/gradle-plugin" "0.73.4" "@react-native/js-polyfills" "0.73.1" "@react-native/normalize-colors" "0.73.2" - "@react-native/virtualized-lists" "0.73.4" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" base64-js "^1.5.1" + chalk "^4.0.0" deprecated-react-native-prop-types "^5.0.0" event-target-shim "^5.0.1" flow-enums-runtime "^0.0.6" @@ -17982,8 +17815,8 @@ react-native-tvos@0.73.1-3: jest-environment-node "^29.6.3" jsc-android "^250231.0.0" memoize-one "^5.0.0" - metro-runtime "^0.80.0" - metro-source-map "^0.80.0" + metro-runtime "^0.80.3" + metro-source-map "^0.80.3" mkdirp "^0.5.1" nullthrows "^1.1.1" pretty-format "^26.5.2" @@ -18058,18 +17891,18 @@ react-native-windows@0.72.10: ws "^6.2.2" yargs "^17.6.2" -react-native@0.73.4: - version "0.73.4" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.4.tgz#81e07d4e7b6308c4649d5fa24038c0e87b17f2e1" - integrity sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg== +react-native@0.73.6: + version "0.73.6" + resolved "https://registry.npmjs.org/react-native/-/react-native-0.73.6.tgz#ed4c675e205a34bd62c4ce8b9bd1ca5c85126d5b" + integrity sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA== dependencies: "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "12.3.2" - "@react-native-community/cli-platform-android" "12.3.2" - "@react-native-community/cli-platform-ios" "12.3.2" + "@react-native-community/cli" "12.3.6" + "@react-native-community/cli-platform-android" "12.3.6" + "@react-native-community/cli-platform-ios" "12.3.6" "@react-native/assets-registry" "0.73.1" "@react-native/codegen" "0.73.3" - "@react-native/community-cli-plugin" "0.73.16" + "@react-native/community-cli-plugin" "0.73.17" "@react-native/gradle-plugin" "0.73.4" "@react-native/js-polyfills" "0.73.1" "@react-native/normalize-colors" "0.73.2" From 64f9979bba028156af7fd2de464df22d49578c89 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 15 Mar 2024 10:13:01 +0100 Subject: [PATCH 019/175] fix rn-tvos codegen based plugins support --- packages/app-harness/metro.config.js | 6 +++- packages/app-harness/src/app/index.tsx | 28 +++++++++++++++++++ packages/core/src/context/index.ts | 2 +- .../src/adapters/babelAdapter.ts | 12 ++++++++ .../src/adapters/metroAdapter.ts | 11 ++++++++ 5 files changed, 57 insertions(+), 2 deletions(-) diff --git a/packages/app-harness/metro.config.js b/packages/app-harness/metro.config.js index 58f9428bfb..ec7b853145 100644 --- a/packages/app-harness/metro.config.js +++ b/packages/app-harness/metro.config.js @@ -1,3 +1,7 @@ const { withRNVMetro } = require('rnv'); -module.exports = withRNVMetro({}); +module.exports = withRNVMetro({ + resolver: { + unstable_enableSymlinks: true, + }, +}); diff --git a/packages/app-harness/src/app/index.tsx b/packages/app-harness/src/app/index.tsx index 4450a37ba5..772a2ffbcf 100644 --- a/packages/app-harness/src/app/index.tsx +++ b/packages/app-harness/src/app/index.tsx @@ -15,6 +15,34 @@ import { LoggerProvider, useLoggerContext } from '../context'; import { NotificationCallback } from '../components/types'; import { SafeAreaProvider } from 'react-native-safe-area-context'; +import { observe as observeLogBoxLogs, symbolicateLogNow } from 'react-native/Libraries/LogBox/Data/LogBoxData'; + +// LogBox keeps all logs that you have not viewed yet. +// When a new log comes in, we only want to print out the new ones. +let lastCount = 0; + +// observeLogBoxLogs((data) => { +// const logs = Array.from(data.logs); +// const symbolicatedLogs = logs.filter((log) => log.symbolicated.stack?.length); +// for (let i = lastCount; i < symbolicatedLogs.length; i++) { +// // use log instead of warn/error to prevent resending error to LogBox +// console.log(formatLog(symbolicatedLogs[i])); +// } +// lastCount = symbolicatedLogs.length; + +// // Trigger symbolication on remaining logs because +// // logs do not symbolicate until you click on LogBox +// logs.filter((log) => log.symbolicated.status === 'NONE').forEach((log) => symbolicateLogNow(log)); +// }); + +function formatLog(log) { + const stackLines = (log.symbolicated.stack || []) + .filter((line) => !line.collapse) + .map((line) => ` at ${line.methodName} (${line.file}:${line.lineNumber}:${line.column})`) + .join('\n'); + return `Error has been symbolicated\nError: ${log.message.content}\n${stackLines}`; +} + const App = () => ( diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 9a4250bd84..f11b8cceeb 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -28,7 +28,7 @@ const populateLinkingInfo = (ctx: RnvContext) => { }; export const createRnvContext = (ctx?: CreateContextOptions) => { - console.log('WTF IS THIS', !!ctx, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); + // console.log('CREATE_RNV_CONTEXT', !!ctx, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); let haltExecution = false; // Handle new imports of @rnv/core diff --git a/packages/engine-rn-tvos/src/adapters/babelAdapter.ts b/packages/engine-rn-tvos/src/adapters/babelAdapter.ts index 85579d8ef5..691be006aa 100644 --- a/packages/engine-rn-tvos/src/adapters/babelAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/babelAdapter.ts @@ -14,6 +14,18 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { root: [process.env.RNV_MONO_ROOT], alias: { 'react-native': 'react-native-tvos', + // '^react-native/(.+)': 'react-native-tvos/\\1', + 'react-native/Libraries/Utilities/codegenNativeComponent': + 'react-native-tvos/Libraries/Utilities/codegenNativeComponent', + 'react-native/Libraries/Types/CodegenTypes': 'react-native-tvos/Libraries/Types/CodegenTypes', + 'react-native/Libraries/Components/ScrollView/ScrollView': + 'react-native-tvos/Libraries/Components/ScrollView/ScrollView', + 'react-native/Libraries/StyleSheet/flattenStyle': + 'react-native-tvos/Libraries/StyleSheet/flattenStyle', + 'react-native/Libraries/Pressability/PressabilityDebug': + 'react-native-tvos/Libraries/StyleSheet/flattenStyle', + 'react-native/Libraries/Pressability/Pressability': + 'react-native-tvos/Libraries/StyleSheet/flattenStyle', }, }, ], diff --git a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts index 5e5d3ee7bb..fddcdf2e6e 100644 --- a/packages/engine-rn-tvos/src/adapters/metroAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/metroAdapter.ts @@ -69,6 +69,17 @@ export const withRNVMetro = (config: InputConfig) => { assetRegistryPath: path.resolve(`${doResolve('react-native-tvos')}/Libraries/Image/AssetRegistry.js`), }, resolver: { + resolveRequest: (context, moduleName, platform) => { + if (moduleName.startsWith('react-native/')) { + return context.resolveRequest( + context, + moduleName.replace('react-native/', 'react-native-tvos/'), + platform + ); + } + // Optionally, chain to the standard Metro resolver. + return context.resolveRequest(context, moduleName, platform); + }, blacklistRE: blacklist([ /platformBuilds\/.*/, /buildHooks\/.*/, From 8e4749ecbcf681f0644994e97f3bf13d2ee35ff9 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 15 Mar 2024 16:14:50 +0100 Subject: [PATCH 020/175] refactor adapters --- buildHooks/src/prePublish.ts | 1 + package.json | 1 - packages/adapter/.gitignore | 3 ++ packages/adapter/LICENSE | 21 +++++++++ packages/adapter/README.md | 2 + packages/adapter/package.json | 39 +++++++++++++++ .../index.ts => adapter/src/adapters.ts} | 47 ++++++++++++++----- packages/adapter/src/index.ts | 2 + packages/adapter/src/types.ts | 25 ++++++++++ packages/adapter/tsconfig.json | 11 +++++ packages/adapter/types.d.ts | 1 + packages/app-harness/metro.config.js | 2 +- packages/app-harness/next.config.js | 2 +- packages/app-harness/src/app/index.tsx | 18 +++---- packages/app-harness/webpack.config.js | 2 +- packages/core/src/types.ts | 26 ---------- packages/engine-rn-electron/package.json | 1 + packages/engine-rn-electron/src/adapter.ts | 12 +---- packages/engine-rn-macos/package.json | 3 +- .../src/adapters/babelAdapter.ts | 12 +---- packages/engine-rn-next/package.json | 3 +- .../src/adapters/babelAdapter.ts | 12 +---- .../src/adapters/nextAdapter.ts | 4 +- packages/engine-rn-tvos/package.json | 3 +- .../src/adapters/babelAdapter.ts | 39 +++++++-------- packages/engine-rn-web/package.json | 3 +- packages/engine-rn-web/src/adapter.ts | 12 +---- packages/engine-rn-windows/package.json | 1 + .../src/adapters/babelAdapter.ts | 12 +---- packages/engine-rn/package.json | 3 +- .../engine-rn/src/adapters/babelAdapter.ts | 12 +---- packages/rnv/src/index.ts | 1 - packages/template-starter/babel.config.js | 2 +- packages/template-starter/metro.config.js | 2 +- packages/template-starter/next.config.js | 2 +- packages/template-starter/package.json | 1 + .../template-starter/react-native.config.js | 2 +- .../template-starter/renative.template.json | 1 + packages/template-starter/webpack.config.js | 2 +- 39 files changed, 203 insertions(+), 145 deletions(-) create mode 100644 packages/adapter/.gitignore create mode 100644 packages/adapter/LICENSE create mode 100644 packages/adapter/README.md create mode 100644 packages/adapter/package.json rename packages/{rnv/src/adapter/index.ts => adapter/src/adapters.ts} (51%) create mode 100644 packages/adapter/src/index.ts create mode 100644 packages/adapter/src/types.ts create mode 100644 packages/adapter/tsconfig.json create mode 100644 packages/adapter/types.d.ts diff --git a/buildHooks/src/prePublish.ts b/buildHooks/src/prePublish.ts index 66a4c1679d..bf51f6c8bf 100644 --- a/buildHooks/src/prePublish.ts +++ b/buildHooks/src/prePublish.ts @@ -30,6 +30,7 @@ const VERSIONED_PACKAGES = [ 'sdk-utils', 'renative', 'integration-docker', + 'adapter', ]; type PackageConfig = { diff --git a/package.json b/package.json index ce460f3a47..95cfefd200 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,6 @@ "@typescript-eslint/eslint-plugin": "^5.4.0", "@typescript-eslint/parser": "^5.4.0", "babel-jest": "29.6.3", - "babel-plugin-module-resolver": "^5.0.0", "deepmerge": "3.2.0", "eslint": "8.19.0", "eslint-config-prettier": "8.8.0", diff --git a/packages/adapter/.gitignore b/packages/adapter/.gitignore new file mode 100644 index 0000000000..0498e17dcb --- /dev/null +++ b/packages/adapter/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +coverage \ No newline at end of file diff --git a/packages/adapter/LICENSE b/packages/adapter/LICENSE new file mode 100644 index 0000000000..9994b5bb3f --- /dev/null +++ b/packages/adapter/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 - present, Flexn BV + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/adapter/README.md b/packages/adapter/README.md new file mode 100644 index 0000000000..3c84e377e4 --- /dev/null +++ b/packages/adapter/README.md @@ -0,0 +1,2 @@ +# @rnv/adapter + diff --git a/packages/adapter/package.json b/packages/adapter/package.json new file mode 100644 index 0000000000..af96a76290 --- /dev/null +++ b/packages/adapter/package.json @@ -0,0 +1,39 @@ +{ + "name": "@rnv/adapter", + "version": "1.0.0-rc.12", + "description": "ReNative Adapters for babel, metro, next and other build configs", + "keywords": [], + "homepage": "https://github.com/flexn-io/renative#readme", + "bugs": { + "url": "https://github.com/flexn-io/renative/issues" + }, + "license": "MIT", + "author": "Pavel Jacko (https://github.com/pavjacko)", + "files": [ + "LICENSE", + "lib", + "types.d.ts" + ], + "main": "lib/index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/flexn-io/renative.git" + }, + "scripts": { + "bootstrap": "yarn && yarn build && npm link", + "build": "yarn clean && yarn compile", + "clean": "rimraf -I ./lib && rimraf -I tsconfig.tsbuildinfo", + "compile": "tsc -b tsconfig.json", + "compile:prod": "tsc -b tsconfig.json", + "lint": "eslint . --ext .ts", + "watch": "tsc --watch --preserveWatchOutput" + }, + "dependencies": { + "babel-plugin-module-resolver": "^5.0.0" + }, + "peerDependencies": {}, + "private": false, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/rnv/src/adapter/index.ts b/packages/adapter/src/adapters.ts similarity index 51% rename from packages/rnv/src/adapter/index.ts rename to packages/adapter/src/adapters.ts index c3c4cd41be..1ca052b445 100644 --- a/packages/rnv/src/adapter/index.ts +++ b/packages/adapter/src/adapters.ts @@ -1,17 +1,18 @@ import fs from 'fs'; -import { BabelApi, BabelConfig, logInfo } from '@rnv/core'; +import type { BabelApi, BabelConfig, BabelConfigPlugin } from './types'; -export const withDefaultRNVBabel = (cnf: BabelConfig): BabelConfig => ({ +export const withBabelPluginModuleResolver = (cnf?: any): BabelConfigPlugin => [ + require.resolve('babel-plugin-module-resolver'), + { + root: [process.env.RNV_MONO_ROOT || '.'], + ...(cnf || {}), + }, +]; + +const _withDefaultRNVBabel = (cnf: BabelConfig): BabelConfig => ({ retainLines: true, presets: [['@babel/preset-env', {}]], - plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT || '.'], - }, - ], - ], + plugins: [withBabelPluginModuleResolver()], ...cnf, }); @@ -20,9 +21,9 @@ export const withRNVBabel = (api: BabelApi): BabelConfig => { api.cache(true); if (process.env.RNV_ENGINE_PATH && !fs.existsSync(process.env.RNV_ENGINE_PATH)) { - logInfo(`Path to engine cannot be resolved: ${process.env.RNV_ENGINE_PATH}. Will use default one`); + console.warn(`Path to engine cannot be resolved: ${process.env.RNV_ENGINE_PATH}. Will use default one`); api.cache(false); - return withDefaultRNVBabel(cnf); + return _withDefaultRNVBabel(cnf); } if (process.env.RNV_ENGINE_PATH) { @@ -57,3 +58,25 @@ export const withRNVRNConfig = (cnf: unknown) => { return cnf; }; + +export const withRNVNext = (cnf: unknown) => { + if (process.env.RNV_ENGINE_PATH) { + const engine = require(process.env.RNV_ENGINE_PATH); + if (engine.withRNVNext) { + return engine.withRNVNext(cnf); + } + } + + return cnf; +}; + +export const withRNVWebpack = (cnf: unknown) => { + if (process.env.RNV_ENGINE_PATH) { + const engine = require(process.env.RNV_ENGINE_PATH); + if (engine.withRNVNext) { + return engine.withRNVNext(cnf); + } + } + + return cnf; +}; diff --git a/packages/adapter/src/index.ts b/packages/adapter/src/index.ts new file mode 100644 index 0000000000..8a1afa21e9 --- /dev/null +++ b/packages/adapter/src/index.ts @@ -0,0 +1,2 @@ +export * from './adapters'; +export * from './types'; diff --git a/packages/adapter/src/types.ts b/packages/adapter/src/types.ts new file mode 100644 index 0000000000..ab4715fd9a --- /dev/null +++ b/packages/adapter/src/types.ts @@ -0,0 +1,25 @@ +export type BabelApi = { + cache: (value: boolean) => void; +}; + +export type BabelConfigPlugin = [ + string, + { + root?: Array; + alias?: Record; + } +]; + +export type BabelConfig = { + retainLines?: boolean; + plugins?: Array; + presets?: Array< + | string + | [ + string, + { + useTransformReactJSXExperimental?: boolean; + } + ] + >; +}; diff --git a/packages/adapter/tsconfig.json b/packages/adapter/tsconfig.json new file mode 100644 index 0000000000..bc57e8fcd2 --- /dev/null +++ b/packages/adapter/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@flexn/typescript-config/tsconfig.lib.node.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src", + "resolveJsonModule": false, + "lib": ["ES2021.String"] + }, + "include": ["./src/**/*", "./src/**/*.json", "./types.d.ts", "./package.json"], + "exclude": ["node_modules", "./src/**/*.test.ts"] +} diff --git a/packages/adapter/types.d.ts b/packages/adapter/types.d.ts new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/packages/adapter/types.d.ts @@ -0,0 +1 @@ + diff --git a/packages/app-harness/metro.config.js b/packages/app-harness/metro.config.js index ec7b853145..7a554ce6a1 100644 --- a/packages/app-harness/metro.config.js +++ b/packages/app-harness/metro.config.js @@ -1,4 +1,4 @@ -const { withRNVMetro } = require('rnv'); +const { withRNVMetro } = require('@rnv/adapter'); module.exports = withRNVMetro({ resolver: { diff --git a/packages/app-harness/next.config.js b/packages/app-harness/next.config.js index e82ad67a8d..92651f1cc7 100644 --- a/packages/app-harness/next.config.js +++ b/packages/app-harness/next.config.js @@ -1,4 +1,4 @@ -const { withRNVNext } = require('@rnv/engine-rn-next'); +const { withRNVNext } = require('@rnv/adapter'); const config = { compress: false, diff --git a/packages/app-harness/src/app/index.tsx b/packages/app-harness/src/app/index.tsx index 772a2ffbcf..378c0ba771 100644 --- a/packages/app-harness/src/app/index.tsx +++ b/packages/app-harness/src/app/index.tsx @@ -15,11 +15,11 @@ import { LoggerProvider, useLoggerContext } from '../context'; import { NotificationCallback } from '../components/types'; import { SafeAreaProvider } from 'react-native-safe-area-context'; -import { observe as observeLogBoxLogs, symbolicateLogNow } from 'react-native/Libraries/LogBox/Data/LogBoxData'; +// import { observe as observeLogBoxLogs, symbolicateLogNow } from 'react-native/Libraries/LogBox/Data/LogBoxData'; // LogBox keeps all logs that you have not viewed yet. // When a new log comes in, we only want to print out the new ones. -let lastCount = 0; +// let lastCount = 0; // observeLogBoxLogs((data) => { // const logs = Array.from(data.logs); @@ -35,13 +35,13 @@ let lastCount = 0; // logs.filter((log) => log.symbolicated.status === 'NONE').forEach((log) => symbolicateLogNow(log)); // }); -function formatLog(log) { - const stackLines = (log.symbolicated.stack || []) - .filter((line) => !line.collapse) - .map((line) => ` at ${line.methodName} (${line.file}:${line.lineNumber}:${line.column})`) - .join('\n'); - return `Error has been symbolicated\nError: ${log.message.content}\n${stackLines}`; -} +// function formatLog(log) { +// const stackLines = (log.symbolicated.stack || []) +// .filter((line) => !line.collapse) +// .map((line) => ` at ${line.methodName} (${line.file}:${line.lineNumber}:${line.column})`) +// .join('\n'); +// return `Error has been symbolicated\nError: ${log.message.content}\n${stackLines}`; +// } const App = () => ( diff --git a/packages/app-harness/webpack.config.js b/packages/app-harness/webpack.config.js index a8bbfa9eed..843184970a 100644 --- a/packages/app-harness/webpack.config.js +++ b/packages/app-harness/webpack.config.js @@ -1,6 +1,6 @@ const webpack = require('webpack'); //to access built-in plugins -const { withRNVWebpack } = require('@rnv/engine-rn-web'); +const { withRNVWebpack } = require('@rnv/adapter'); module.exports = withRNVWebpack({ resolve: { diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 4b0ea823ba..fb2e37305d 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -13,32 +13,6 @@ export type RnvError = any; export type Env = Record; -export type BabelConfig = { - retainLines?: boolean; - plugins?: Array< - [ - string, - { - root?: Array; - alias?: Record; - } - ] - >; - presets?: Array< - | string - | [ - string, - { - useTransformReactJSXExperimental?: boolean; - } - ] - >; -}; - -export type BabelApi = { - cache: (value: boolean) => void; -}; - type Plat = Required['platforms']>[PlatformKey]; export type PlatPropKey = keyof Plat; export type BuildSchemePropKey = keyof Required['buildSchemes'][string]; diff --git a/packages/engine-rn-electron/package.json b/packages/engine-rn-electron/package.json index e5a7008366..ef9a01107a 100644 --- a/packages/engine-rn-electron/package.json +++ b/packages/engine-rn-electron/package.json @@ -37,6 +37,7 @@ "@rnv/sdk-react-native": "1.0.0-rc.12", "@rnv/sdk-utils": "1.0.0-rc.12", "@rnv/sdk-webpack": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12", "electron": "26.3.0", "electron-builder": "24.6.4", "electron-notarize": "1.2.2" diff --git a/packages/engine-rn-electron/src/adapter.ts b/packages/engine-rn-electron/src/adapter.ts index 0cc3624f00..07df22b3bc 100644 --- a/packages/engine-rn-electron/src/adapter.ts +++ b/packages/engine-rn-electron/src/adapter.ts @@ -1,4 +1,4 @@ -import { BabelConfig } from '@rnv/core'; +import { BabelConfig, withBabelPluginModuleResolver } from '@rnv/adapter'; export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { const plugins = cnf?.plugins || []; @@ -6,14 +6,6 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { retainLines: true, presets: [['module:metro-react-native-babel-preset', { useTransformReactJSXExperimental: true }]], ...cnf, - plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT || '.'], - }, - ], - ...plugins, - ], + plugins: [withBabelPluginModuleResolver(), ...plugins], }; }; diff --git a/packages/engine-rn-macos/package.json b/packages/engine-rn-macos/package.json index e5039cdd04..4f5ff01082 100644 --- a/packages/engine-rn-macos/package.json +++ b/packages/engine-rn-macos/package.json @@ -34,7 +34,8 @@ "dependencies": { "@react-native/babel-preset": "0.73.21", "@rnv/sdk-apple": "1.0.0-rc.12", - "@rnv/sdk-react-native": "1.0.0-rc.12" + "@rnv/sdk-react-native": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" diff --git a/packages/engine-rn-macos/src/adapters/babelAdapter.ts b/packages/engine-rn-macos/src/adapters/babelAdapter.ts index 69ce237bba..9943fe5742 100644 --- a/packages/engine-rn-macos/src/adapters/babelAdapter.ts +++ b/packages/engine-rn-macos/src/adapters/babelAdapter.ts @@ -1,4 +1,4 @@ -import { BabelConfig } from '@rnv/core'; +import { BabelConfig, withBabelPluginModuleResolver } from '@rnv/adapter'; export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { const plugins = cnf?.plugins || []; @@ -7,14 +7,6 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { retainLines: true, presets: ['module:@react-native/babel-preset'], ...cnf, - plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT || '.'], - }, - ], - ...plugins, - ], + plugins: [withBabelPluginModuleResolver(), ...plugins], }; }; diff --git a/packages/engine-rn-next/package.json b/packages/engine-rn-next/package.json index 4f445153a5..297f82570f 100644 --- a/packages/engine-rn-next/package.json +++ b/packages/engine-rn-next/package.json @@ -36,7 +36,8 @@ "@rnv/sdk-utils": "1.0.0-rc.12", "babel-preset-expo": "9.5.2", "next-fonts": "1.5.1", - "next-images": "1.8.4" + "next-images": "1.8.4", + "@rnv/adapter": "1.0.0-rc.12" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12", diff --git a/packages/engine-rn-next/src/adapters/babelAdapter.ts b/packages/engine-rn-next/src/adapters/babelAdapter.ts index af2ea79f70..7f6afcb57b 100644 --- a/packages/engine-rn-next/src/adapters/babelAdapter.ts +++ b/packages/engine-rn-next/src/adapters/babelAdapter.ts @@ -1,4 +1,4 @@ -import { BabelConfig } from '@rnv/core'; +import { BabelConfig, withBabelPluginModuleResolver } from '@rnv/adapter'; export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { const plugins = cnf?.plugins || []; @@ -17,14 +17,6 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { ], ], ...cnf, - plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT || '.'], - }, - ], - ...plugins, - ], + plugins: [withBabelPluginModuleResolver(), ...plugins], }; }; diff --git a/packages/engine-rn-next/src/adapters/nextAdapter.ts b/packages/engine-rn-next/src/adapters/nextAdapter.ts index 83edbcab5e..a9d6e064d8 100644 --- a/packages/engine-rn-next/src/adapters/nextAdapter.ts +++ b/packages/engine-rn-next/src/adapters/nextAdapter.ts @@ -3,7 +3,7 @@ const withFonts = require('next-fonts'); import { Configuration, DefinePlugin } from 'webpack'; import { NextConfig } from 'next'; -export function withRNWNext(nextConfig: NextConfig = {}): NextConfig { +function _withRNWNext(nextConfig: NextConfig = {}): NextConfig { return { ...nextConfig, webpack(config: Configuration, options: any): Configuration { @@ -90,7 +90,7 @@ export const withRNVNext = (config: NextConfig) => { let transModules: string[] = []; - const cnf1 = withRNWNext(withFonts(withImages(cnf))); + const cnf1 = _withRNWNext(withFonts(withImages(cnf))); if (process.env.RNV_EXTENSIONS) { cnf1.pageExtensions = process.env.RNV_EXTENSIONS.split(','); diff --git a/packages/engine-rn-tvos/package.json b/packages/engine-rn-tvos/package.json index 29a9fd1aee..a92a45f3ee 100644 --- a/packages/engine-rn-tvos/package.json +++ b/packages/engine-rn-tvos/package.json @@ -35,7 +35,8 @@ "@react-native/babel-preset": "0.73.21", "@rnv/sdk-android": "1.0.0-rc.12", "@rnv/sdk-apple": "1.0.0-rc.12", - "@rnv/sdk-react-native": "1.0.0-rc.12" + "@rnv/sdk-react-native": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12", diff --git a/packages/engine-rn-tvos/src/adapters/babelAdapter.ts b/packages/engine-rn-tvos/src/adapters/babelAdapter.ts index 691be006aa..5e3e7b0dca 100644 --- a/packages/engine-rn-tvos/src/adapters/babelAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/babelAdapter.ts @@ -1,4 +1,4 @@ -import { BabelConfig } from '@rnv/core'; +import { BabelConfig, withBabelPluginModuleResolver } from '@rnv/adapter'; export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { const plugins = cnf?.plugins || []; @@ -8,27 +8,24 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { presets: ['module:@react-native/babel-preset'], ...cnf, plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT], - alias: { - 'react-native': 'react-native-tvos', - // '^react-native/(.+)': 'react-native-tvos/\\1', - 'react-native/Libraries/Utilities/codegenNativeComponent': - 'react-native-tvos/Libraries/Utilities/codegenNativeComponent', - 'react-native/Libraries/Types/CodegenTypes': 'react-native-tvos/Libraries/Types/CodegenTypes', - 'react-native/Libraries/Components/ScrollView/ScrollView': - 'react-native-tvos/Libraries/Components/ScrollView/ScrollView', - 'react-native/Libraries/StyleSheet/flattenStyle': - 'react-native-tvos/Libraries/StyleSheet/flattenStyle', - 'react-native/Libraries/Pressability/PressabilityDebug': - 'react-native-tvos/Libraries/StyleSheet/flattenStyle', - 'react-native/Libraries/Pressability/Pressability': - 'react-native-tvos/Libraries/StyleSheet/flattenStyle', - }, + withBabelPluginModuleResolver({ + alias: { + 'react-native': 'react-native-tvos', + // '^react-native/(.+)': 'react-native-tvos/\\1', + 'react-native/Libraries/Utilities/codegenNativeComponent': + 'react-native-tvos/Libraries/Utilities/codegenNativeComponent', + 'react-native/Libraries/Types/CodegenTypes': 'react-native-tvos/Libraries/Types/CodegenTypes', + 'react-native/Libraries/Components/ScrollView/ScrollView': + 'react-native-tvos/Libraries/Components/ScrollView/ScrollView', + 'react-native/Libraries/StyleSheet/flattenStyle': + 'react-native-tvos/Libraries/StyleSheet/flattenStyle', + 'react-native/Libraries/Pressability/PressabilityDebug': + 'react-native-tvos/Libraries/StyleSheet/flattenStyle', + 'react-native/Libraries/Pressability/Pressability': + 'react-native-tvos/Libraries/StyleSheet/flattenStyle', }, - ], + }), + ...plugins, ], }; diff --git a/packages/engine-rn-web/package.json b/packages/engine-rn-web/package.json index 7eba17006b..043ba268b7 100644 --- a/packages/engine-rn-web/package.json +++ b/packages/engine-rn-web/package.json @@ -36,7 +36,8 @@ "@rnv/sdk-tizen": "1.0.0-rc.12", "@rnv/sdk-utils": "1.0.0-rc.12", "@rnv/sdk-webos": "1.0.0-rc.12", - "@rnv/sdk-webpack": "1.0.0-rc.12" + "@rnv/sdk-webpack": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" diff --git a/packages/engine-rn-web/src/adapter.ts b/packages/engine-rn-web/src/adapter.ts index 5ea1229578..2904ee8991 100644 --- a/packages/engine-rn-web/src/adapter.ts +++ b/packages/engine-rn-web/src/adapter.ts @@ -1,4 +1,4 @@ -import { BabelConfig } from '@rnv/core'; +import { BabelConfig, withBabelPluginModuleResolver } from '@rnv/adapter'; import { withRNVWebpack } from '@rnv/sdk-webpack'; const withRNVBabel = (cnf: BabelConfig): BabelConfig => { @@ -8,15 +8,7 @@ const withRNVBabel = (cnf: BabelConfig): BabelConfig => { retainLines: true, presets: [['module:metro-react-native-babel-preset', { useTransformReactJSXExperimental: true }]], ...cnf, - plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT || '.'], - }, - ], - ...plugins, - ], + plugins: [withBabelPluginModuleResolver(), ...plugins], }; }; diff --git a/packages/engine-rn-windows/package.json b/packages/engine-rn-windows/package.json index c494f88044..d995d37617 100644 --- a/packages/engine-rn-windows/package.json +++ b/packages/engine-rn-windows/package.json @@ -35,6 +35,7 @@ }, "dependencies": { "@rnv/sdk-react-native": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12", "@xmldom/xmldom": "0.7.7", "react-native-windows": "0.72.10" }, diff --git a/packages/engine-rn-windows/src/adapters/babelAdapter.ts b/packages/engine-rn-windows/src/adapters/babelAdapter.ts index 69ce237bba..9943fe5742 100644 --- a/packages/engine-rn-windows/src/adapters/babelAdapter.ts +++ b/packages/engine-rn-windows/src/adapters/babelAdapter.ts @@ -1,4 +1,4 @@ -import { BabelConfig } from '@rnv/core'; +import { BabelConfig, withBabelPluginModuleResolver } from '@rnv/adapter'; export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { const plugins = cnf?.plugins || []; @@ -7,14 +7,6 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { retainLines: true, presets: ['module:@react-native/babel-preset'], ...cnf, - plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT || '.'], - }, - ], - ...plugins, - ], + plugins: [withBabelPluginModuleResolver(), ...plugins], }; }; diff --git a/packages/engine-rn/package.json b/packages/engine-rn/package.json index fdc1196491..fc3870bc99 100644 --- a/packages/engine-rn/package.json +++ b/packages/engine-rn/package.json @@ -35,7 +35,8 @@ "@react-native/babel-preset": "0.73.21", "@rnv/sdk-android": "1.0.0-rc.12", "@rnv/sdk-apple": "1.0.0-rc.12", - "@rnv/sdk-react-native": "1.0.0-rc.12" + "@rnv/sdk-react-native": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" diff --git a/packages/engine-rn/src/adapters/babelAdapter.ts b/packages/engine-rn/src/adapters/babelAdapter.ts index 69ce237bba..9943fe5742 100644 --- a/packages/engine-rn/src/adapters/babelAdapter.ts +++ b/packages/engine-rn/src/adapters/babelAdapter.ts @@ -1,4 +1,4 @@ -import { BabelConfig } from '@rnv/core'; +import { BabelConfig, withBabelPluginModuleResolver } from '@rnv/adapter'; export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { const plugins = cnf?.plugins || []; @@ -7,14 +7,6 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { retainLines: true, presets: ['module:@react-native/babel-preset'], ...cnf, - plugins: [ - [ - require.resolve('babel-plugin-module-resolver'), - { - root: [process.env.RNV_MONO_ROOT || '.'], - }, - ], - ...plugins, - ], + plugins: [withBabelPluginModuleResolver(), ...plugins], }; }; diff --git a/packages/rnv/src/index.ts b/packages/rnv/src/index.ts index 98e83e44c9..bde5e81d30 100755 --- a/packages/rnv/src/index.ts +++ b/packages/rnv/src/index.ts @@ -1,2 +1 @@ -export * from './adapter'; export * from './runner'; diff --git a/packages/template-starter/babel.config.js b/packages/template-starter/babel.config.js index 8d4e054380..f0dfefd3c5 100644 --- a/packages/template-starter/babel.config.js +++ b/packages/template-starter/babel.config.js @@ -1,3 +1,3 @@ -const { withRNVBabel } = require('rnv'); +const { withRNVBabel } = require('@rnv/adapter'); module.exports = withRNVBabel({}); diff --git a/packages/template-starter/metro.config.js b/packages/template-starter/metro.config.js index 58f9428bfb..fc7d7b4a41 100644 --- a/packages/template-starter/metro.config.js +++ b/packages/template-starter/metro.config.js @@ -1,3 +1,3 @@ -const { withRNVMetro } = require('rnv'); +const { withRNVMetro } = require('@rnv/adapter'); module.exports = withRNVMetro({}); diff --git a/packages/template-starter/next.config.js b/packages/template-starter/next.config.js index e82ad67a8d..92651f1cc7 100644 --- a/packages/template-starter/next.config.js +++ b/packages/template-starter/next.config.js @@ -1,4 +1,4 @@ -const { withRNVNext } = require('@rnv/engine-rn-next'); +const { withRNVNext } = require('@rnv/adapter'); const config = { compress: false, diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index dc42e11be5..3d71e3be28 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -98,6 +98,7 @@ "@flexn/graybox": "1.0.0-feat.12", "@lightningjs/sdk": "^5.4.1", "@rnv/core": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12", "@rnv/engine-lightning": "1.0.0-rc.12", "@rnv/engine-rn": "1.0.0-rc.12", "@rnv/engine-rn-electron": "1.0.0-rc.12", diff --git a/packages/template-starter/react-native.config.js b/packages/template-starter/react-native.config.js index ab5f2f06eb..d8dc90f703 100644 --- a/packages/template-starter/react-native.config.js +++ b/packages/template-starter/react-native.config.js @@ -1,5 +1,5 @@ //! NO CONSOLE LOGS HERE. IT WILL BREAK THE APP -const { withRNVRNConfig } = require('rnv'); +const { withRNVRNConfig } = require('@rnv/adapter'); const config = withRNVRNConfig({}); diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index f2e5282264..3ea6a8b4d3 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -33,6 +33,7 @@ "@flexn/assets-renative-outline": "0.3.3", "babel-loader": "9.1.3", "@rnv/core": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12", "rnv": "1.0.0-rc.12" }, "browserslist": { diff --git a/packages/template-starter/webpack.config.js b/packages/template-starter/webpack.config.js index 0e1f352ae5..b925808500 100644 --- a/packages/template-starter/webpack.config.js +++ b/packages/template-starter/webpack.config.js @@ -1,3 +1,3 @@ -const { withRNVWebpack } = require('@rnv/engine-rn-web'); +const { withRNVWebpack } = require('@rnv/adapter'); module.exports = withRNVWebpack({}); From 83e42662294c6bcc389146833bc81b36e76b7d12 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 15 Mar 2024 16:41:41 +0100 Subject: [PATCH 021/175] fixes --- packages/app-harness/babel.config.js | 2 +- packages/app-harness/react-native.config.js | 2 +- packages/app-harness/src/app/index.tsx | 2 +- packages/app-harness/src/components/SafeArea/index.ts | 3 +++ .../app-harness/src/components/SafeArea/index.web.tsx | 11 +++++++++++ packages/engine-rn-tvos/src/adapters/babelAdapter.ts | 1 - packages/sdk-webpack/src/scripts/start.js | 9 ++++----- 7 files changed, 21 insertions(+), 9 deletions(-) create mode 100644 packages/app-harness/src/components/SafeArea/index.ts create mode 100644 packages/app-harness/src/components/SafeArea/index.web.tsx diff --git a/packages/app-harness/babel.config.js b/packages/app-harness/babel.config.js index 8d4e054380..f0dfefd3c5 100644 --- a/packages/app-harness/babel.config.js +++ b/packages/app-harness/babel.config.js @@ -1,3 +1,3 @@ -const { withRNVBabel } = require('rnv'); +const { withRNVBabel } = require('@rnv/adapter'); module.exports = withRNVBabel({}); diff --git a/packages/app-harness/react-native.config.js b/packages/app-harness/react-native.config.js index ab5f2f06eb..d8dc90f703 100644 --- a/packages/app-harness/react-native.config.js +++ b/packages/app-harness/react-native.config.js @@ -1,5 +1,5 @@ //! NO CONSOLE LOGS HERE. IT WILL BREAK THE APP -const { withRNVRNConfig } = require('rnv'); +const { withRNVRNConfig } = require('@rnv/adapter'); const config = withRNVRNConfig({}); diff --git a/packages/app-harness/src/app/index.tsx b/packages/app-harness/src/app/index.tsx index 378c0ba771..5be91ac3ed 100644 --- a/packages/app-harness/src/app/index.tsx +++ b/packages/app-harness/src/app/index.tsx @@ -13,7 +13,7 @@ import { TestCase } from '../components/TestCase'; import config from '../../package.json'; import { LoggerProvider, useLoggerContext } from '../context'; import { NotificationCallback } from '../components/types'; -import { SafeAreaProvider } from 'react-native-safe-area-context'; +import { SafeAreaProvider } from '../components/SafeArea'; // import { observe as observeLogBoxLogs, symbolicateLogNow } from 'react-native/Libraries/LogBox/Data/LogBoxData'; diff --git a/packages/app-harness/src/components/SafeArea/index.ts b/packages/app-harness/src/components/SafeArea/index.ts new file mode 100644 index 0000000000..8d0816fbaa --- /dev/null +++ b/packages/app-harness/src/components/SafeArea/index.ts @@ -0,0 +1,3 @@ +import { SafeAreaProvider } from 'react-native-safe-area-context'; + +export { SafeAreaProvider }; diff --git a/packages/app-harness/src/components/SafeArea/index.web.tsx b/packages/app-harness/src/components/SafeArea/index.web.tsx new file mode 100644 index 0000000000..232d39bc05 --- /dev/null +++ b/packages/app-harness/src/components/SafeArea/index.web.tsx @@ -0,0 +1,11 @@ +import { FC, ReactNode, createContext } from 'react'; + +const MockContext = createContext({}); + +type MockProviderProps = { + children: ReactNode; +}; + +export const SafeAreaProvider: FC = ({ children }) => { + return {children}; +}; diff --git a/packages/engine-rn-tvos/src/adapters/babelAdapter.ts b/packages/engine-rn-tvos/src/adapters/babelAdapter.ts index 5e3e7b0dca..e0a0d1b844 100644 --- a/packages/engine-rn-tvos/src/adapters/babelAdapter.ts +++ b/packages/engine-rn-tvos/src/adapters/babelAdapter.ts @@ -25,7 +25,6 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { 'react-native-tvos/Libraries/StyleSheet/flattenStyle', }, }), - ...plugins, ], }; diff --git a/packages/sdk-webpack/src/scripts/start.js b/packages/sdk-webpack/src/scripts/start.js index 85ba425793..7f0c372178 100644 --- a/packages/sdk-webpack/src/scripts/start.js +++ b/packages/sdk-webpack/src/scripts/start.js @@ -23,7 +23,7 @@ const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); const { createCompiler, prepareProxy, prepareUrls } = require('react-dev-utils/WebpackDevServerUtils'); // const openBrowser = require('react-dev-utils/openBrowser'); const semver = require('semver'); -const { Logger } = require('rnv'); +// const { Logger } = require('rnv'); const paths = require('../config/paths'); // const configFactory = require('../config/webpack.config'); // const configFactory = require('react-scripts/config/webpack.config.js'); @@ -51,12 +51,11 @@ export default async () => const HOST = process.env.HOST || '0.0.0.0'; if (process.env.HOST) { - Logger.logInfo( + console.log( `Attempting to bind to HOST environment variable: ${chalk.yellow(chalk.bold(process.env.HOST))}` ); - Logger.logInfo("If this was unintentional, check that you haven't mistakenly set it in your shell."); - Logger.logInfo(`Learn more here: ${chalk.yellow('https://cra.link/advanced-config')}`); - Logger.logInfo(); + console.log("If this was unintentional, check that you haven't mistakenly set it in your shell."); + console.log(`Learn more here: ${chalk.yellow('https://cra.link/advanced-config')}`); } const protocol = process.env.HTTPS === 'true' ? 'https' : 'http'; const appName = require(paths.appPackageJson).name; From ad9f49c1e40e0bb75fa7beaca719baec0b250e80 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 15 Mar 2024 20:29:46 +0100 Subject: [PATCH 022/175] add fallback resolver to support complex symlinked deps --- packages/core/src/system/resolve.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/core/src/system/resolve.ts b/packages/core/src/system/resolve.ts index d831bbb530..440425fe10 100644 --- a/packages/core/src/system/resolve.ts +++ b/packages/core/src/system/resolve.ts @@ -26,6 +26,7 @@ export const doResolve: DoResolveFn = (aPath, mandatory = true, options = {}) => return _withPathFix(_doResolveFSPath(aPath, options), options?.forceForwardPaths); } const pth = _doResolveExternalPackage(aPath, options); + if (pth) { return _withPathFix(pth, options?.forceForwardPaths); } @@ -122,7 +123,6 @@ const _doResolveFSPath = (aPath: string, options: ResolveOptions) => { */ const _doResolveExternalPackage = (aPath: string, options: ResolveOptions) => { const [packageBase, packageSuffix] = _getPackagePathParts(aPath); - try { const resolvedPath = resolve .sync(packageBase, { @@ -136,6 +136,11 @@ const _doResolveExternalPackage = (aPath: string, options: ResolveOptions) => { .replace(/(\\|\/)package.json$/, ''); return options.keepSuffix ?? false ? `${resolvedPath}/${packageSuffix}` : resolvedPath; } catch (e) { + //Last resort we try to resolve it as standard require.resolve + const fallback = require.resolve(aPath); + if (fallback) { + return fallback.replace(/(\\|\/)package.json$/, '').replace(/(\\|\/)index.js$/, ''); + } return null; } }; From fa850d501332f18c75534ee4c01a202a31b3674f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 15 Mar 2024 21:45:55 +0100 Subject: [PATCH 023/175] fix resolver fallback, add config spec --- packages/core/src/system/resolve.ts | 12 ++++--- packages/template-starter/renative.spec.json | 33 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 packages/template-starter/renative.spec.json diff --git a/packages/core/src/system/resolve.ts b/packages/core/src/system/resolve.ts index 440425fe10..b2e4180152 100644 --- a/packages/core/src/system/resolve.ts +++ b/packages/core/src/system/resolve.ts @@ -136,10 +136,14 @@ const _doResolveExternalPackage = (aPath: string, options: ResolveOptions) => { .replace(/(\\|\/)package.json$/, ''); return options.keepSuffix ?? false ? `${resolvedPath}/${packageSuffix}` : resolvedPath; } catch (e) { - //Last resort we try to resolve it as standard require.resolve - const fallback = require.resolve(aPath); - if (fallback) { - return fallback.replace(/(\\|\/)package.json$/, '').replace(/(\\|\/)index.js$/, ''); + try { + //Last resort we try to resolve it as standard require.resolve + const fallback = require.resolve(aPath); + if (fallback) { + return fallback.replace(/(\\|\/)package.json$/, '').replace(/(\\|\/)index.js$/, ''); + } + } catch (e) { + return null; } return null; } diff --git a/packages/template-starter/renative.spec.json b/packages/template-starter/renative.spec.json new file mode 100644 index 0000000000..a5eb55125e --- /dev/null +++ b/packages/template-starter/renative.spec.json @@ -0,0 +1,33 @@ +{ + "templateConfig": { + "name": "@rnv/template-starter", + "version": "1.0.0-rc.12" + }, + "modsConfig": { + "name": "@rnv/mods", + "version": "3.3.9", + "namespace": "rnv" + }, + "pluginsConfig": { + "name": "@rnv/plugins", + "version": "1.3.9" + }, + "platformsConfig": {}, + "projectConfig": { + "appConfigsDir": "./appConfigs", + "platformAssetsDir": "./platformAssets", + "platformBuildsDir": "./platformBuilds", + "defaultCommandSchemes": { + "run": "debug" + }, + "defaultTargets": {} + }, + "appConfigs": {}, + "tasks": {}, + "engines": {}, + "mods": {}, + "platforms": {}, + "plugins": {}, + "permissions": {}, + "supportedPlatforms": ["ios", "android"] +} From e5fad433e4dfe6da6e9b2d9f6160298a469d354f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 15 Mar 2024 23:57:12 +0100 Subject: [PATCH 024/175] fix ios skip linking for ios --- packages/sdk-react-native/src/iosRunner.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/sdk-react-native/src/iosRunner.ts b/packages/sdk-react-native/src/iosRunner.ts index d2eb41e0ff..5a92234bf5 100644 --- a/packages/sdk-react-native/src/iosRunner.ts +++ b/packages/sdk-react-native/src/iosRunner.ts @@ -65,6 +65,7 @@ export const packageReactNativeIOS = (isDev = false) => { ...CoreEnvVars.RNV_EXTENSIONS(), ...EnvVars.RNV_REACT_NATIVE_PATH(), ...EnvVars.RNV_APP_ID(), + ...EnvVars.RNV_SKIP_LINKING(), }, } ); @@ -88,6 +89,7 @@ export const runReactNativeIOS = async ( ...EnvVars.RCT_METRO_PORT(), ...EnvVars.RNV_REACT_NATIVE_PATH(), ...EnvVars.RNV_APP_ID(), + ...EnvVars.RNV_SKIP_LINKING(), }; try { From 454ad5937c1769662ac9d1641cdf6f44e8a5b4e2 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 16 Mar 2024 09:16:56 +0100 Subject: [PATCH 025/175] update UTs --- .../src/platforms/__tests__/index.test.ts | 6 ++-- .../core/src/plugins/__tests__/index.test.ts | 2 +- .../core/src/projects/__tests__/index.test.ts | 6 +++- .../core/src/system/__tests__/exec.test.ts | 36 +++++++++++++++---- packages/core/src/system/__tests__/fs.test.ts | 6 ++-- .../core/src/tasks/__tests__/index.test.ts | 13 +++---- .../global/new/__tests__/taskNew.test.ts | 8 ++--- 7 files changed, 51 insertions(+), 26 deletions(-) diff --git a/packages/core/src/platforms/__tests__/index.test.ts b/packages/core/src/platforms/__tests__/index.test.ts index 429b9f90f4..e51652c33c 100644 --- a/packages/core/src/platforms/__tests__/index.test.ts +++ b/packages/core/src/platforms/__tests__/index.test.ts @@ -11,12 +11,12 @@ jest.mock('../../system/fs'); jest.mock('../../system/resolve'); jest.mock('../../context/contextProps'); -beforeAll(() => { - // Before all placeholder +beforeEach(() => { + // NOTE: do not call createRnvContext() in core library itself }); afterEach(() => { - jest.clearAllMocks(); + jest.resetAllMocks(); }); describe('createPlatformBuild', () => { diff --git a/packages/core/src/plugins/__tests__/index.test.ts b/packages/core/src/plugins/__tests__/index.test.ts index d3d6981215..9c730e5a91 100644 --- a/packages/core/src/plugins/__tests__/index.test.ts +++ b/packages/core/src/plugins/__tests__/index.test.ts @@ -6,7 +6,7 @@ jest.mock('../../logger'); jest.mock('../../context/provider'); beforeEach(() => { - //TBC + // NOTE: do not call createRnvContext() in core library itself }); afterEach(() => { diff --git a/packages/core/src/projects/__tests__/index.test.ts b/packages/core/src/projects/__tests__/index.test.ts index efae1674a3..fd4870694b 100644 --- a/packages/core/src/projects/__tests__/index.test.ts +++ b/packages/core/src/projects/__tests__/index.test.ts @@ -13,8 +13,12 @@ jest.mock('../../context/provider'); jest.mock('../../context/contextProps'); jest.mock('../../platforms/index'); +beforeEach(() => { + // NOTE: do not call createRnvContext() in core library itself +}); + afterEach(() => { - jest.clearAllMocks(); + jest.resetAllMocks(); }); describe('copyAssetsFolder', () => { diff --git a/packages/core/src/system/__tests__/exec.test.ts b/packages/core/src/system/__tests__/exec.test.ts index 38efc4c2eb..988b22fb99 100644 --- a/packages/core/src/system/__tests__/exec.test.ts +++ b/packages/core/src/system/__tests__/exec.test.ts @@ -1,43 +1,65 @@ -import { createRnvApi } from '../../api'; -import { createRnvContext } from '../../context'; +import { generateContextDefaults } from '../../context/defaults'; +import { getContext } from '../../context/provider'; import { executeAsync, commandExistsSync, commandExists } from '../../system/exec'; jest.mock('../../logger'); +jest.mock('../../context/provider'); -describe('Testing exec functions', () => { - beforeAll(() => { - createRnvContext(); - createRnvApi(); - }); +beforeEach(() => { + // NOTE: do not call createRnvContext() in core library itself +}); +afterEach(() => { + jest.resetAllMocks(); +}); + +describe('Testing exec functions', () => { it('should execute command', async () => { + // GIVEN + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); expect.assertions(1); + // WHEN // THEN await expect(executeAsync('node -v').then((data) => typeof data)).resolves.toBe('string'); }); it('should execute array command', async () => { + // GIVEN + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); expect.assertions(1); + // WHEN // THEN await expect(executeAsync(['node', '-v']).then((data) => typeof data)).resolves.toBe('string'); }); it('should execute command with privateParams', async () => { + // GIVEN + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); expect.assertions(1); + // WHEN // THEN await expect( executeAsync('node -v 1234', { privateParams: ['1234'] }).then((data) => typeof data) ).resolves.toBe('string'); }); it('should execute with error', async () => { + // GIVEN + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); expect.assertions(1); + // WHEN // THEN await expect(executeAsync('shouldTrow')).rejects.toBeDefined(); }); it('should recognize command sync', () => { + // GIVEN + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); + // WHEN // THEN expect(commandExistsSync('node')).toBe(true); }); it('should recognize command async', async () => { + // GIVEN + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); expect.assertions(1); + // WHEN // THEN await expect(commandExists('node')).resolves.toBe('node'); }); }); diff --git a/packages/core/src/system/__tests__/fs.test.ts b/packages/core/src/system/__tests__/fs.test.ts index a74b63a0e4..b056405c5d 100644 --- a/packages/core/src/system/__tests__/fs.test.ts +++ b/packages/core/src/system/__tests__/fs.test.ts @@ -5,12 +5,12 @@ import { generateContextDefaults } from '../../context/defaults'; jest.mock('../../logger'); jest.mock('../../context/provider'); -beforeAll(() => { - // Before all placeholder +beforeEach(() => { + // NOTE: do not call createRnvContext() in core library itself }); afterEach(() => { - jest.clearAllMocks(); + jest.resetAllMocks(); }); describe('sanitizeDynamicProps', () => { diff --git a/packages/core/src/tasks/__tests__/index.test.ts b/packages/core/src/tasks/__tests__/index.test.ts index 497a19115c..935f9e990c 100644 --- a/packages/core/src/tasks/__tests__/index.test.ts +++ b/packages/core/src/tasks/__tests__/index.test.ts @@ -1,17 +1,19 @@ import { getAllSuitableTasks } from '..'; -import { createRnvContext } from '@rnv/core'; import { getRegisteredEngines } from '../../engines'; import { RnvEngine } from '../../engines/types'; import { DEFAULT_TASK_DESCRIPTIONS } from '../constants'; +import { getContext } from '../../context/provider'; +import { generateContextDefaults } from '../../context/defaults'; jest.mock('../../engines'); jest.mock('chalk'); jest.mock('../../logger'); jest.mock('../../api'); +jest.mock('../../context/provider'); jest.mock('../constants', () => ({ DEFAULT_TASK_DESCRIPTIONS: {} })); beforeEach(() => { - createRnvContext(); + // NOTE: do not call createRnvContext() in core library itself }); afterEach(() => { @@ -64,7 +66,7 @@ const rnvEngineMock2: RnvEngine = { describe('Get suitable tasks', () => { it('should return all tasks for given 1 engine', () => { // GIVEN - // const c = getContext(); + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1]); // WHEN const result = getAllSuitableTasks(); @@ -75,10 +77,9 @@ describe('Get suitable tasks', () => { it('should return common description for tasks from 2 different engines but same name', () => { // GIVEN - // const c = getContext(); + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1, rnvEngineMock2]); DEFAULT_TASK_DESCRIPTIONS['mock-task'] = 'mock task common'; - // WHEN const result = getAllSuitableTasks(); // THEN @@ -88,7 +89,7 @@ describe('Get suitable tasks', () => { it('should return first task description for tasks from 2 different engines but same name if common desc not available', () => { // GIVEN - // const c = getContext(); + jest.mocked(getContext).mockReturnValue(generateContextDefaults()); jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock2, rnvEngineMock1]); delete DEFAULT_TASK_DESCRIPTIONS['mock-task']; // WHEN diff --git a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts index 243f377d5f..55bdf5b1fd 100644 --- a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts @@ -1,12 +1,10 @@ import { - createRnvContext, fsExistsSync, getContext, writeFileSync, inquirerPrompt, getWorkspaceOptions, getTemplateOptions, - checkAndCreateGitignore, commandExistsSync, } from '@rnv/core'; import taskNew from '../taskNew'; @@ -17,7 +15,7 @@ jest.mock('path'); jest.mock('semver'); beforeEach(() => { - createRnvContext(); + // NOTE: do not call createRnvContext() in core library itself }); afterEach(() => { @@ -28,7 +26,7 @@ test('Execute task.rnv.new', async () => { //GIVEN const ctx = getContext(); - jest.mocked(checkAndCreateGitignore).mockReturnValue(Promise.resolve(true)); + // jest.mocked(checkAndCreateGitignore).mockReturnValue(Promise.resolve(true)); jest.mocked(commandExistsSync).mockReturnValue(true); jest.mocked(fsExistsSync).mockReturnValue(true); @@ -119,5 +117,5 @@ test('Execute task.rnv.new', async () => { }, workspaceID: 'rnv', }); - expect(checkAndCreateGitignore).toHaveBeenCalledTimes(1); + // expect(checkAndCreateGitignore).toHaveBeenCalledTimes(1); }); From 737cbdc048e93be87e9d7531d0758acaa92357c8 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 16 Mar 2024 11:00:23 +0100 Subject: [PATCH 026/175] fix UTs --- packages/core/src/context/defaults.ts | 3 +- packages/core/src/context/index.ts | 20 +- .../core/src/system/__tests__/exec.test.ts | 5 + .../core/src/tasks/__tests__/index.test.ts | 5 + .../global/new/__tests__/taskNew.test.ts | 183 ++++++++---------- 5 files changed, 107 insertions(+), 109 deletions(-) diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index d11e94203f..52f419cc51 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -1,3 +1,4 @@ +import path from 'path'; import type { RnvContext, RnvContextPathObj } from './types'; import { homedir } from 'os'; @@ -96,7 +97,7 @@ export const generateContextDefaults = (): RnvContext => ({ injectableConfigProps: {}, runtime, paths: { - RNV_CORE_HOME_DIR: '', + RNV_CORE_HOME_DIR: path.join(__dirname, '../..'), CURRENT_DIR: '', IS_LINKED: false, IS_NPX_MODE: false, diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index f11b8cceeb..0d1fbf7257 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -28,21 +28,29 @@ const populateLinkingInfo = (ctx: RnvContext) => { }; export const createRnvContext = (ctx?: CreateContextOptions) => { - // console.log('CREATE_RNV_CONTEXT', !!ctx, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); + // console.trace('CREATE_RNV_CONTEXT', !!ctx, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); let haltExecution = false; // Handle new imports of @rnv/core if (!ctx) { if (!global.RNV_CONTEXT) { - // Initial empty context to be initialized - global.RNV_CONTEXT = generateContextDefaults(); - return; + if (process.env.JEST_WORKER_ID === undefined) { + // Initial empty context to be initialized + global.RNV_CONTEXT = generateContextDefaults(); + return; + } else { + // We are in jest test mode. (multiple imports will occur due to mocking of imports in tests) + // We do not initialize context but do not throw error + return; + } } // Full Context already initialized. Another @rnv/core instance has been just imported haltExecution = true; } if (haltExecution) { + const msg = + 'This usually happens if you have multiple versions of @rnv/core dependencies located in your project or you are running project with global rnv (without npx).'; const err = new Error(` FATAL: Multiple instances of @rnv/core detected: @@ -52,8 +60,7 @@ FATAL: Multiple instances of @rnv/core detected: 2 (${new Date().toISOString()}) ${path.join(__dirname, '../..')} -This usually happens if you have multiple versions of @rnv/core dependencies located in your project or you are running project with global rnv (without npx). - +${msg} `); throw err; @@ -67,7 +74,6 @@ This usually happens if you have multiple versions of @rnv/core dependencies loc c.subCommand = ctx?.subCmd || c.subCommand; c.isSystemWin = isSystemWin; c.paths.rnv.dir = ctx?.RNV_HOME_DIR || c.paths.rnv.dir; - c.paths.RNV_CORE_HOME_DIR = path.join(__dirname, '../..'); populateContextPaths(c); diff --git a/packages/core/src/system/__tests__/exec.test.ts b/packages/core/src/system/__tests__/exec.test.ts index 988b22fb99..bd2b916eba 100644 --- a/packages/core/src/system/__tests__/exec.test.ts +++ b/packages/core/src/system/__tests__/exec.test.ts @@ -1,12 +1,16 @@ +import { generateApiDefaults } from '../../api/defaults'; +import { getApi } from '../../api/provider'; import { generateContextDefaults } from '../../context/defaults'; import { getContext } from '../../context/provider'; import { executeAsync, commandExistsSync, commandExists } from '../../system/exec'; jest.mock('../../logger'); jest.mock('../../context/provider'); +jest.mock('../../api/provider'); beforeEach(() => { // NOTE: do not call createRnvContext() in core library itself + jest.mocked(getApi).mockReturnValue(generateApiDefaults()); }); afterEach(() => { @@ -17,6 +21,7 @@ describe('Testing exec functions', () => { it('should execute command', async () => { // GIVEN jest.mocked(getContext).mockReturnValue(generateContextDefaults()); + // jest.mocked(spinner) expect.assertions(1); // WHEN // THEN await expect(executeAsync('node -v').then((data) => typeof data)).resolves.toBe('string'); diff --git a/packages/core/src/tasks/__tests__/index.test.ts b/packages/core/src/tasks/__tests__/index.test.ts index 935f9e990c..a765ae4834 100644 --- a/packages/core/src/tasks/__tests__/index.test.ts +++ b/packages/core/src/tasks/__tests__/index.test.ts @@ -4,6 +4,7 @@ import { RnvEngine } from '../../engines/types'; import { DEFAULT_TASK_DESCRIPTIONS } from '../constants'; import { getContext } from '../../context/provider'; import { generateContextDefaults } from '../../context/defaults'; +import { checkIfProjectAndNodeModulesExists } from '../../projects/dependencyManager'; jest.mock('../../engines'); jest.mock('chalk'); @@ -11,6 +12,7 @@ jest.mock('../../logger'); jest.mock('../../api'); jest.mock('../../context/provider'); jest.mock('../constants', () => ({ DEFAULT_TASK_DESCRIPTIONS: {} })); +jest.mock('../../projects/dependencyManager'); beforeEach(() => { // NOTE: do not call createRnvContext() in core library itself @@ -68,6 +70,7 @@ describe('Get suitable tasks', () => { // GIVEN jest.mocked(getContext).mockReturnValue(generateContextDefaults()); jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1]); + jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); // WHEN const result = getAllSuitableTasks(); // THEN @@ -79,6 +82,7 @@ describe('Get suitable tasks', () => { // GIVEN jest.mocked(getContext).mockReturnValue(generateContextDefaults()); jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1, rnvEngineMock2]); + jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); DEFAULT_TASK_DESCRIPTIONS['mock-task'] = 'mock task common'; // WHEN const result = getAllSuitableTasks(); @@ -91,6 +95,7 @@ describe('Get suitable tasks', () => { // GIVEN jest.mocked(getContext).mockReturnValue(generateContextDefaults()); jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock2, rnvEngineMock1]); + jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); delete DEFAULT_TASK_DESCRIPTIONS['mock-task']; // WHEN const result = getAllSuitableTasks(); diff --git a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts index 55bdf5b1fd..5272463008 100644 --- a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts @@ -1,21 +1,52 @@ -import { - fsExistsSync, - getContext, - writeFileSync, - inquirerPrompt, - getWorkspaceOptions, - getTemplateOptions, - commandExistsSync, -} from '@rnv/core'; +import { getContext, createRnvContext, logSuccess } from '@rnv/core'; import taskNew from '../taskNew'; +import { + generateNewProject, + initNewProject, + saveProgressIntoProjectConfig, + telemetryNewProject, +} from '../projectGenerator'; +import { NewProjectData } from '../types'; +import { inquiryProjectName } from '../questions/projectName'; +import { processChdirToProject } from '../utils'; +import { inquiryIsRenativeProject } from '../questions/isRenativeProject'; +import { inquiryHasNodeModules } from '../questions/hasNodeModules'; +import { inquiryInstallTemplate } from '../questions/installTemplate'; +import { inquiryApplyTemplate } from '../questions/applyTemplate'; +import { inquiryAppTitle } from '../questions/appTitle'; +import { inquiryAppID } from '../questions/appID'; +import { inquiryAppVersion } from '../questions/appVersion'; +import { inquiryWorkspace } from '../questions/workspace'; +import { inquirySupportedPlatforms } from '../questions/supportedPlatforms'; +import { inquiryBootstrapQuestions } from '../questions/bootstrapQuestions'; +import { inquiryGit } from '../questions/confirmGit'; +import { inquiryBookmarkTemplate } from '../questions/bookmarkTemplate'; +import { inquiryConfirm } from '../questions/confirmOverview'; jest.mock('@rnv/core'); jest.mock('lodash/set'); jest.mock('path'); jest.mock('semver'); +jest.mock('../utils'); +jest.mock('../questions/bootstrapQuestions'); +jest.mock('../questions/appTitle'); +jest.mock('../questions/installTemplate'); +jest.mock('../questions/applyTemplate'); +jest.mock('../questions/bookmarkTemplate'); +jest.mock('../questions/appID'); +jest.mock('../questions/appVersion'); +jest.mock('../questions/workspace'); +jest.mock('../questions/hasNodeModules'); +jest.mock('../questions/confirmOverview'); +jest.mock('../questions/isRenativeProject'); +jest.mock('../questions/projectName'); +jest.mock('../questions/supportedPlatforms'); +jest.mock('../questions/bookmarkTemplate'); +jest.mock('../questions/confirmGit'); +jest.mock('../projectGenerator'); beforeEach(() => { - // NOTE: do not call createRnvContext() in core library itself + createRnvContext(); }); afterEach(() => { @@ -23,99 +54,49 @@ afterEach(() => { }); test('Execute task.rnv.new', async () => { - //GIVEN + // GIVEN const ctx = getContext(); - - // jest.mocked(checkAndCreateGitignore).mockReturnValue(Promise.resolve(true)); - jest.mocked(commandExistsSync).mockReturnValue(true); - jest.mocked(fsExistsSync).mockReturnValue(true); - - jest.mocked(inquirerPrompt).mockReturnValue( - Promise.resolve({ - inputProjectName: 'test', - confirm: true, - inputAppTitle: 'testtitle', - inputAppID: 'com.test.app', - inputVersion: '1.0.0', - inputWorkspace: 'rnv', - // inputTemplate: '@rnv/template-starter', - // inputTemplateVersion: '1.0.0-canary.7', - inputSupportedPlatforms: ['android', 'ios', 'web'], - gitEnabled: true, - confirmInRnvProject: true, - }) - ); - - jest.mocked(getWorkspaceOptions).mockReturnValue({ - keysAsArray: ['company', 'rnv'], - valuesAsArray: [{ path: '/Users/someuser/.rnv' }, { path: '/Users/someuser/.company' }], - keysAsObject: { rnv: 'rnv', company: 'company' }, - valuesAsObject: { - rnv: { path: '/Users/someuser/.rnv' }, - company: { path: '/Users/someuser/.company' }, - }, - asString: ' [\x1B[90m1\x1B[39m]> \x1B[1mrnv\x1B[22m \n [\x1B[90m2\x1B[39m]> \x1B[1mcompany\x1B[22m \n', - optionsAsArray: [ - ' [\x1B[90m1\x1B[39m]> \x1B[1mrnv\x1B[22m \n', - ' [\x1B[90m2\x1B[39m]> \x1B[1mcompany\x1B[22m \n', - ], - }); - - jest.mocked(getTemplateOptions).mockReturnValue({ - keysAsArray: ['@flexn/create-template-starter', '@rnv/template-starter'], - valuesAsArray: [ - { description: "Multiplatform 'hello world' template" }, - { - description: 'Advanced multiplatform template using flexn Create SDK', + const payload: NewProjectData = { + defaultVersion: 'MOCK_VERSION', + defaultTemplate: 'MOCK_TEMPLATE', + optionTemplates: {}, + optionWorkspaces: {}, + optionPlatforms: {}, + files: { + project: { + renativeConfig: {}, + packageJson: {}, }, - ], - keysAsObject: { - '@rnv/template-starter': '@rnv/template-starter', - '@flexn/create-template-starter': '@flexn/create-template-starter', - }, - valuesAsObject: { - '@rnv/template-starter': { description: "Multiplatform 'hello world' template" }, - '@flexn/create-template-starter': { - description: 'Advanced multiplatform template using flexn Create SDK', - }, - }, - asString: - ' [\x1B[90m1\x1B[39m]> \x1B[1m@rnv/template-starter\x1B[22m \n' + - ' [\x1B[90m2\x1B[39m]> \x1B[1m@flexn/create-template-starter\x1B[22m \n', - optionsAsArray: [ - ' [\x1B[90m1\x1B[39m]> \x1B[1m@rnv/template-starter\x1B[22m \n', - ' [\x1B[90m2\x1B[39m]> \x1B[1m@flexn/create-template-starter\x1B[22m \n', - ], - }); - - ctx.program.ci = false; - ctx.program.templateVersion = '1.0.0-canary.7'; - ctx.program.projectTemplate = '@rnv/template-starter'; - //WHEN - await expect(taskNew.fn?.(ctx)).resolves.toEqual(true); - //THEN - expect(writeFileSync).toHaveBeenCalledTimes(1); - expect(writeFileSync).toHaveBeenCalledWith(undefined, { - currentTemplate: '@rnv/template-starter', - common: { - id: 'com.test.app', - title: 'testtitle', - }, - defaults: { - supportedPlatforms: ['android', 'ios', 'web'], - }, - engines: {}, - isMonorepo: false, - isNew: true, - platforms: {}, - projectName: 'test', - projectVersion: '1.0.0', - templates: { - '@rnv/template-starter': { - version: '1.0.0-canary.7', + template: { + renativeTemplateConfig: {}, + renativeConfig: {}, }, }, - workspaceID: 'rnv', - }); - // expect(checkAndCreateGitignore).toHaveBeenCalledTimes(1); + }; + jest.mocked(initNewProject).mockResolvedValue(payload); + // WHEN + const result = await taskNew.fn?.(ctx); + // THEN + expect(result).toEqual(true); + expect(initNewProject).toHaveBeenCalled(); + expect(inquiryProjectName).toHaveBeenCalledWith(payload); + expect(processChdirToProject).toHaveBeenCalled(); + expect(inquiryIsRenativeProject).toHaveBeenCalledWith(payload); + expect(inquiryHasNodeModules).toHaveBeenCalledWith(payload); + expect(inquiryInstallTemplate).toHaveBeenCalledWith(payload); + expect(inquiryApplyTemplate).toHaveBeenCalledWith(payload); + expect(saveProgressIntoProjectConfig).toHaveBeenCalledWith(payload); + expect(inquiryAppTitle).toHaveBeenCalledWith(payload); + expect(inquiryAppID).toHaveBeenCalledWith(payload); + expect(inquiryAppVersion).toHaveBeenCalledWith(payload); + expect(saveProgressIntoProjectConfig).toHaveBeenCalledWith(payload); + expect(inquiryWorkspace).toHaveBeenCalledWith(payload); + expect(inquirySupportedPlatforms).toHaveBeenCalledWith(payload); + expect(inquiryBootstrapQuestions).toHaveBeenCalledWith(payload); + expect(inquiryGit).toHaveBeenCalledWith(payload); + expect(inquiryBookmarkTemplate).toHaveBeenCalledWith(payload); + expect(inquiryConfirm).toHaveBeenCalledWith(payload); + expect(generateNewProject).toHaveBeenCalledWith(payload); + expect(telemetryNewProject).toHaveBeenCalledWith(payload); + expect(logSuccess).toHaveBeenCalled(); }); From 90fe36576aa3293fe42979ccbb012f9bfb03c801 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 16 Mar 2024 13:30:58 +0100 Subject: [PATCH 027/175] refactor bootstrap payload --- package.json | 3 +- .../src/tasks/global/new/projectGenerator.ts | 1 + .../src/tasks/global/new/questions/appID.ts | 9 ++-- .../global/new/questions/applyTemplate.ts | 9 ++++ .../global/new/questions/confirmOverview.ts | 4 +- .../{appVersion.ts => projectVersion.ts} | 7 +-- .../src/tasks/global/new/taskNew.ts | 2 +- .../engine-core/src/tasks/global/new/types.ts | 5 +-- packages/template-starter/renative.spec.json | 4 +- .../template-starter/renative.template.json | 7 +-- .../renative.template.spec.json | 44 ------------------- 11 files changed, 27 insertions(+), 68 deletions(-) rename packages/engine-core/src/tasks/global/new/questions/{appVersion.ts => projectVersion.ts} (76%) diff --git a/package.json b/package.json index 95cfefd200..0c5c36edc4 100644 --- a/package.json +++ b/package.json @@ -148,6 +148,5 @@ "**/@wdio/*", "**/@react-native/metro-babel-transformer" ] - }, - "resolutions": {} + } } diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index 45f40086a0..066d4ff761 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -45,6 +45,7 @@ export const initNewProject = async () => { project: { renativeConfig: {}, packageJson: {}, + renativeAppConfig: {}, }, template: { renativeTemplateConfig: {}, diff --git a/packages/engine-core/src/tasks/global/new/questions/appID.ts b/packages/engine-core/src/tasks/global/new/questions/appID.ts index 117caf0626..c12e9437ed 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appID.ts +++ b/packages/engine-core/src/tasks/global/new/questions/appID.ts @@ -7,7 +7,7 @@ export const inquiryAppID = async (data: NewProjectData) => { const { id, ci } = c.program; const validator = (appId: string) => (typeof appId === 'string' && !!appId.match(/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/)) || - 'Please enter a valid appID (com.test.app)'; + 'Please enter a valid app ID (com.test.app)'; const result = await validateAndAssign( { @@ -15,8 +15,8 @@ export const inquiryAppID = async (data: NewProjectData) => { validFn: validator, name: 'inputAppID', defaultVal: () => { - data.appID = `com.mycompany.${data.inputProjectName?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; - return data.appID; + data.inputAppID = `com.mycompany.${data.inputProjectName?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; + return data.inputAppID; }, message: "What's your App ID?", warning: `Command contains invalid appId : ${id}`, @@ -24,6 +24,5 @@ export const inquiryAppID = async (data: NewProjectData) => { ci ); - data.inputAppID = result; - data.appID = data.inputAppID ? data.inputAppID.replace(/\s+/g, '-').toLowerCase() : data.appID; + data.inputAppID = result ? result.replace(/\s+/g, '-').toLowerCase() : data.inputAppID; }; diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index 5fe8896dd1..dc6044884f 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -30,6 +30,15 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { data.files.template.renativeConfig = renativeConfig; } + // const templateAppConfigDir = path.join(templateDir, 'appConfigs'); + // if(fsExistsSync(templateAppConfigDir)) { + // read + // } + // const renativeAppConfig = readObjectSync(path.join(templateDir, ConfigName.renative)); + // if (renativeConfig) { + // data.files.template.renativeConfig = renativeConfig; + // } + const optExtend = 'Extend template (cleaner, overridable)'; const optCopy = 'Copy from template (full control)'; const options = [optExtend, optCopy]; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts index 00843233b0..c44a0921d7 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts @@ -37,8 +37,8 @@ const _prepareProjectOverview = (data: NewProjectData) => { str += printIntoBox(`Project Name (folder): ${highlight(data.projectName)}`); str += printIntoBox(`Workspace: ${highlight(data.optionWorkspaces.selectedOption)}`); str += printIntoBox(`Project Title: ${highlight(data.appTitle)}`); - str += printIntoBox(`Project Version: ${highlight(data.version)}`); - str += printIntoBox(`App ID: ${highlight(data.appID)}`); + str += printIntoBox(`Project Version: ${highlight(data.inputVersion)}`); + str += printIntoBox(`App ID: ${highlight(data.inputAppID)}`); str += printIntoBox(`Project Template: ${highlight(tempString)}`); str += printIntoBox(`Git Enabled: ${highlight(data.gitEnabled)}`); str += printIntoBox(''); diff --git a/packages/engine-core/src/tasks/global/new/questions/appVersion.ts b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts similarity index 76% rename from packages/engine-core/src/tasks/global/new/questions/appVersion.ts rename to packages/engine-core/src/tasks/global/new/questions/projectVersion.ts index 485213cf5e..9eef86e00b 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appVersion.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts @@ -2,6 +2,7 @@ import { getContext } from '@rnv/core'; import type { NewProjectData } from '../types'; import { validateAndAssign } from '../utils'; import semver from 'semver'; +import { merge } from 'lodash'; export const inquiryAppVersion = async (data: NewProjectData) => { const c = getContext(); @@ -16,12 +17,12 @@ export const inquiryAppVersion = async (data: NewProjectData) => { validFn: validator, name: 'inputVersion', defaultVal: data.defaultVersion, - message: "What's your Version?", + message: "What's your project version?", warning: `Command contains invalid appVersion. Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.`, }, ci ); - data.inputVersion = result; - data.version = data.inputVersion || data.defaultVersion; + data.inputVersion = result || data.defaultVersion; + data.files.project.packageJson = merge(data.files.project.packageJson, { version: data.inputVersion }); }; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 640e23d273..6423384c5a 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -15,7 +15,7 @@ import { } from './projectGenerator'; import { inquiryAppTitle } from './questions/appTitle'; import { inquiryAppID } from './questions/appID'; -import { inquiryAppVersion } from './questions/appVersion'; +import { inquiryAppVersion } from './questions/projectVersion'; import { inquiryInstallTemplate } from './questions/installTemplate'; import { inquiryApplyTemplate } from './questions/applyTemplate'; import { inquiryBookmarkTemplate } from './questions/bookmarkTemplate'; diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index 785e8cac4d..a46b41e934 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -1,4 +1,4 @@ -import { ConfigFileProject, ConfigFileTemplate, NpmPackageFile, PlatformKey } from '@rnv/core'; +import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate, NpmPackageFile, PlatformKey } from '@rnv/core'; export type NewProjectData = { appTitle?: string; @@ -8,12 +8,10 @@ export type NewProjectData = { defaultTemplate?: string; inputProjectName?: string; teamID?: string; - appID?: string; inputAppID?: string; inputVersion?: string; defaultVersion: string; inputTemplate?: string; - version?: string; optionTemplates: { selectedOption?: string; selectedVersion?: string; @@ -67,6 +65,7 @@ export type NewProjectData = { project: { renativeConfig: ConfigFileProject; packageJson: NpmPackageFile; + renativeAppConfig: ConfigFileApp; }; }; }; diff --git a/packages/template-starter/renative.spec.json b/packages/template-starter/renative.spec.json index a5eb55125e..6e6307948c 100644 --- a/packages/template-starter/renative.spec.json +++ b/packages/template-starter/renative.spec.json @@ -1,11 +1,11 @@ { "templateConfig": { "name": "@rnv/template-starter", - "version": "1.0.0-rc.12" + "version": "0.0.0" }, "modsConfig": { "name": "@rnv/mods", - "version": "3.3.9", + "version": "0.0.0", "namespace": "rnv" }, "pluginsConfig": { diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index 3ea6a8b4d3..e1494216ac 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -25,13 +25,12 @@ }, "package_json": { "devDependencies": { - "typescript": "5.0.4", + "typescript": "5.2.2", "@types/react": "18.2.52", "@types/react-dom": "18.2.18", "@types/react-native": "0.72.3", "@flexn/typescript-config": "1.0.0", "@flexn/assets-renative-outline": "0.3.3", - "babel-loader": "9.1.3", "@rnv/core": "1.0.0-rc.12", "@rnv/adapter": "1.0.0-rc.12", "rnv": "1.0.0-rc.12" @@ -39,10 +38,6 @@ "browserslist": { "production": [">0.2%", "not dead", "not op_mini all"], "development": ["last 1 chrome version", "last 1 firefox version", "last 1 safari version"] - }, - "resolutions": { - "@babel/traverse": "7.15.0", - "@types/react": "18.2.52" } } }, diff --git a/packages/template-starter/renative.template.spec.json b/packages/template-starter/renative.template.spec.json index 18dca7ef6d..4e4e5da8aa 100644 --- a/packages/template-starter/renative.template.spec.json +++ b/packages/template-starter/renative.template.spec.json @@ -1,48 +1,4 @@ { - "$schema": ".rnv/schema/rnv.template.json", - "templateConfig": { - "disabled": false, - "includedPaths": [ - { - "paths": ["buildHooks", "src", "index.js", "tsconfig.json", "babel.config.js", "typings", ".gitignore"] - }, - { - "paths": ["Gemfile", "metro.config.js", ".bundle", "react-native.config.js"], - "engines": ["engine-rn", "engine-rn-tvos"] - }, - { - "paths": ["next.config.js", "next-env.d.ts"], - "engines": ["engine-rn-next"] - }, - { - "paths": ["webpack.config.js"], - "engines": ["engine-web"] - } - ], - "renative_json": { - "$schema": ".rnv/schema/rnv.project.json", - "extendsTemplate": "@rnv/template-starter/renative.json" - }, - "package_json": { - "devDependencies": { - "typescript": "5.0.4", - "@types/react": "18.2.52", - "@types/react-dom": "18.2.18", - "@types/react-native": "0.72.3", - "@flexn/typescript-config": "1.0.0", - "@flexn/assets-renative-outline": "0.3.3", - "babel-loader": "9.1.3" - }, - "browserslist": { - "production": [">0.2%", "not dead", "not op_mini all"], - "development": ["last 1 chrome version", "last 1 firefox version", "last 1 safari version"] - }, - "resolutions": { - "@babel/traverse": "7.15.0", - "@types/react": "18.2.52" - } - } - }, "bootstrapConfig": { "rnvNewPatchDependencies": { "pkg-dir": "7.0.0", From 3a3c55af210bc86472c0525a5e97fd4e14e30c5b Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 16 Mar 2024 14:49:16 +0100 Subject: [PATCH 028/175] migrate jetifier into sdk-android --- packages/app-harness/package.json | 1 - packages/core/src/projects/npm.ts | 13 ------- .../engine-rn-tvos/src/tasks/taskConfigure.ts | 3 +- packages/engine-rn/renative.engine.json | 37 ++----------------- packages/engine-rn/src/tasks/taskConfigure.ts | 3 +- packages/sdk-android/package.json | 3 +- packages/sdk-android/src/index.ts | 1 + packages/sdk-android/src/jetifier.ts | 14 +++++++ packages/template-starter/package.json | 1 - 9 files changed, 23 insertions(+), 53 deletions(-) create mode 100644 packages/sdk-android/src/jetifier.ts diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index 961f3a2a8e..5670b8278f 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -80,7 +80,6 @@ "babel-jest": "29.6.3", "babel-loader": "9.1.3", "detox": "18.20.2", - "jetifier": "2.0.0", "rnv": "1.0.0-rc.12" }, "private": true, diff --git a/packages/core/src/projects/npm.ts b/packages/core/src/projects/npm.ts index 2eeed8524d..0829136265 100644 --- a/packages/core/src/projects/npm.ts +++ b/packages/core/src/projects/npm.ts @@ -212,19 +212,6 @@ export const installPackageDependencies = async (failOnError = false) => { } }; -export const jetifyIfRequired = async () => { - const c = getContext(); - logDefault('jetifyIfRequired'); - if (c.files.project.configLocal?._meta?.requiresJetify) { - if (doResolve('jetifier')) { - await executeAsync('npx jetify'); - c.files.project.configLocal._meta.requiresJetify = false; - writeFileSync(c.paths.project.configLocal, c.files.project.configLocal); - } - } - return true; -}; - export const cleanNodeModules = () => new Promise((resolve, reject) => { logDefault('cleanNodeModules'); diff --git a/packages/engine-rn-tvos/src/tasks/taskConfigure.ts b/packages/engine-rn-tvos/src/tasks/taskConfigure.ts index 43a255daf1..613cf33fb5 100644 --- a/packages/engine-rn-tvos/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-tvos/src/tasks/taskConfigure.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - jetifyIfRequired, logErrorPlatform, logTask, RnvTaskOptionPresets, @@ -10,7 +9,7 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { configureGradleProject } from '@rnv/sdk-android'; +import { configureGradleProject, jetifyIfRequired } from '@rnv/sdk-android'; import { configureXcodeProject } from '@rnv/sdk-apple'; const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { diff --git a/packages/engine-rn/renative.engine.json b/packages/engine-rn/renative.engine.json index c323d113ef..d1fdd130ff 100644 --- a/packages/engine-rn/renative.engine.json +++ b/packages/engine-rn/renative.engine.json @@ -14,45 +14,16 @@ }, "platforms": { "ios": { - "engine": "engine-rn", - "npm": { - "devDependencies": {} - } + "engine": "engine-rn" }, "macos": { - "engine": "engine-rn", - "npm": { - "devDependencies": {} - } + "engine": "engine-rn" }, "android": { - "engine": "engine-rn", - "npm": { - "devDependencies": { - "jetifier": "2.0.0" - } - } + "engine": "engine-rn" }, "androidwear": { - "npm": { - "devDependencies": { - "jetifier": "2.0.0" - } - } - }, - "androidtv": { - "npm": { - "devDependencies": { - "jetifier": "2.0.0" - } - } - }, - "firetv": { - "npm": { - "devDependencies": { - "jetifier": "2.0.0" - } - } + "engine": "engine-rn" } } } diff --git a/packages/engine-rn/src/tasks/taskConfigure.ts b/packages/engine-rn/src/tasks/taskConfigure.ts index 8a04c3a121..4be52ed0d1 100644 --- a/packages/engine-rn/src/tasks/taskConfigure.ts +++ b/packages/engine-rn/src/tasks/taskConfigure.ts @@ -5,12 +5,11 @@ import { configureEntryPoint, executeTask, shouldSkipTask, - jetifyIfRequired, RnvTask, RnvTaskName, RnvTaskOptionPresets, } from '@rnv/core'; -import { configureGradleProject } from '@rnv/sdk-android'; +import { configureGradleProject, jetifyIfRequired } from '@rnv/sdk-android'; import { configureXcodeProject } from '@rnv/sdk-apple'; import { configureFonts } from '@rnv/sdk-react-native'; diff --git a/packages/sdk-android/package.json b/packages/sdk-android/package.json index cfeece62df..3b8f3fd1dd 100644 --- a/packages/sdk-android/package.json +++ b/packages/sdk-android/package.json @@ -32,7 +32,8 @@ }, "dependencies": { "@rnv/sdk-react-native": "1.0.0-rc.12", - "@rnv/sdk-utils": "1.0.0-rc.12" + "@rnv/sdk-utils": "1.0.0-rc.12", + "jetifier": "2.0.0" }, "peerDependencies": { "@react-native-community/cli": "^11.3.8", diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index 72c45c596d..cfa25c58e9 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -2,3 +2,4 @@ export * from './runner'; export * from './deviceManager'; export * from './constants'; export * from './installer'; +export * from './jetifier'; diff --git a/packages/sdk-android/src/jetifier.ts b/packages/sdk-android/src/jetifier.ts new file mode 100644 index 0000000000..1bbde35f5c --- /dev/null +++ b/packages/sdk-android/src/jetifier.ts @@ -0,0 +1,14 @@ +import { doResolve, executeAsync, getContext, logDefault, writeFileSync } from '@rnv/core'; + +export const jetifyIfRequired = async () => { + const c = getContext(); + logDefault('jetifyIfRequired'); + if (c.files.project.configLocal?._meta?.requiresJetify) { + if (doResolve('jetifier')) { + await executeAsync('npx jetify'); + c.files.project.configLocal._meta.requiresJetify = false; + writeFileSync(c.paths.project.configLocal, c.files.project.configLocal); + } + } + return true; +}; diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index 3d71e3be28..27fe291a8c 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -112,7 +112,6 @@ "babel-jest": "29.6.3", "babel-loader": "9.1.3", "detox": "18.20.2", - "jetifier": "2.0.0", "next": "14.1.0", "raf": "3.4.1", "react": "18.2.0", From 9b2f87669ee200fd78242c35551c0cb661a2d738 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 16 Mar 2024 14:49:39 +0100 Subject: [PATCH 029/175] fix plugin filtering --- packages/core/src/plugins/index.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index f57228d02d..85b712b078 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -202,9 +202,11 @@ export const configurePlugins = async () => { ); } } else if ( - plugin && plugin.disabled !== true && plugin.disableNpm !== true && c.platform && plugin.supportedPlatforms - ? plugin.supportedPlatforms.includes(c.platform) - : true + plugin && + plugin.disabled !== true && + plugin.disableNpm !== true && + c.platform && + (plugin.supportedPlatforms ? plugin.supportedPlatforms.includes(c.platform) : true) ) { if (dependencies && dependencies[k]) { if (!plugin.version) { From a4496e595b53d202d5dcd6dc7bcd84f77dfa16cf Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 16 Mar 2024 14:51:03 +0100 Subject: [PATCH 030/175] fix sdk-rn watch folders to be mono root instead of project root. (fixes @babel/runtime errors when running rn in monorepo based projects) --- packages/sdk-react-native/src/adapters.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk-react-native/src/adapters.ts b/packages/sdk-react-native/src/adapters.ts index b050c39c14..32b211dd78 100644 --- a/packages/sdk-react-native/src/adapters.ts +++ b/packages/sdk-react-native/src/adapters.ts @@ -172,7 +172,7 @@ export const withMetroConfig = (projectRoot: string): ConfigT => { }, }), }, - watchFolders: [], + watchFolders: [process.env.RNV_MONO_ROOT || process.cwd()], }; const { mergeConfig, getDefaultConfig } = require('metro-config'); From 0254ae825e761fcc7beea50e5247aec0eaa2f536 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 02:06:07 +0100 Subject: [PATCH 031/175] rnv link updates --- .../src/tasks/linking/constants.ts | 4 +- .../engine-core/src/tasks/linking/taskLink.ts | 114 +++++++++++++++--- .../src/tasks/linking/taskUnlink.ts | 39 ++++-- .../engine-core/src/tasks/linking/types.ts | 18 +++ 4 files changed, 146 insertions(+), 29 deletions(-) create mode 100644 packages/engine-core/src/tasks/linking/types.ts diff --git a/packages/engine-core/src/tasks/linking/constants.ts b/packages/engine-core/src/tasks/linking/constants.ts index 667e4c3506..5807831b85 100644 --- a/packages/engine-core/src/tasks/linking/constants.ts +++ b/packages/engine-core/src/tasks/linking/constants.ts @@ -1,4 +1,6 @@ -export const RNV_PACKAGES = [ +import type { RnvPackage } from './types'; + +export const RNV_PACKAGES: RnvPackage[] = [ { packageName: '@rnv/renative', folderName: 'renative', diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index b090f53b63..959527527b 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -7,40 +7,116 @@ import { fsRenameSync, fsSymlinkSync, RnvTaskFn, - RnvContext, RnvTask, RnvTaskName, + mkdirSync, + fsReaddirSync, + getContext, + chalk, + fsLstatSync, + fsUnlinkSync, + removeDirSync, } from '@rnv/core'; import { RNV_PACKAGES } from './constants'; +import { LinkablePackage } from './types'; -const _linkPackage = (c: RnvContext, key: string, folder: string) => { - const rnvPath = path.join(c.paths.project.nodeModulesDir, key); - const rnvPathUnlinked = path.join(c.paths.project.nodeModulesDir, `${key}_unlinked`); - const pkgDir = path.join(c.paths.rnv.dir, '../', folder); +const _linkPackage = (pkg: LinkablePackage) => { + if (!fsExistsSync(pkg.cacheDir)) { + mkdirSync(pkg.cacheDir); + } - if (fsExistsSync(rnvPathUnlinked)) { - logInfo(`${key} is already linked. SKIPPING`); + if (pkg.isBrokenLink) { + logInfo(`${pkg.name} is a ${chalk().red('broken')} link. Attempting to fix...`); + fsUnlinkSync(pkg.nmPath); + } else if (pkg.isLinked) { + logInfo(`${pkg.name} is already linked. SKIPPING`); + } else if (pkg.nmPathExists) { + if (pkg.unlinkedPathExists) { + logInfo(`${pkg.name} found in exisitng cache. Removing and relinking...`); + removeDirSync(pkg.unlinkedPath); + } + mkdirSync(pkg.unlinkedPath); + fsRenameSync(pkg.nmPath, pkg.unlinkedPath); + fsSymlinkSync(pkg.sourcePath, pkg.nmPath); + logInfo(`${pkg.name} => link => ${chalk().green('SUCCESS')} (${chalk().gray(pkg.nmPath)})`); + } else if (pkg.unlinkedPathExists) { + logInfo(`${pkg.name} found in unlinked cache. Attempting to relink...`); + fsSymlinkSync(pkg.sourcePath, pkg.nmPath); + logInfo(`${pkg.name} => link => ${chalk().green('SUCCESS')} (${chalk().gray(pkg.nmPath)})`); + } +}; +const captureLinkablePackages = (baseDir: string, linkablePackages: LinkablePackage[]) => { + const ctx = getContext(); + RNV_PACKAGES.forEach((pkg) => { + const rnvDepPath = path.join(baseDir, pkg.packageName); + + // const stat = fsStatSync(rnvDepPath); + // console.log('DJDJDJDDJ', rnvDepPath, fsExistsSync(rnvDepPath)); + let isSymLink = false; + const nmPathExists = fsExistsSync(rnvDepPath); try { - fsSymlinkSync(pkgDir, rnvPath); + isSymLink = fsLstatSync(rnvDepPath).isSymbolicLink(); + if (!nmPathExists) { + // Broken link + } } catch (e) { - // In case of corrupted symlinks we attempt to relink - // however existing symlinks will throw error + //Catch error + } + const cacheDir = path.join(baseDir, '.rnv/unlinked_cache'); + const unlinkedPath = path.join(cacheDir, pkg.packageName); + const unlinkedPathExists = fsExistsSync(unlinkedPath); + + if (nmPathExists || isSymLink || unlinkedPathExists) { + const sourcePath = path.join(ctx.paths.rnv.dir, '../', pkg.folderName); + linkablePackages.push({ + name: pkg.packageName, + nmPath: rnvDepPath, + sourcePath, + sourcePathRelative: path.relative(rnvDepPath.replace(`/${pkg.packageName}`, ''), sourcePath), + unlinkedPath, + cacheDir, + skipLinking: pkg.skipLinking || false, + isLinked: isSymLink, + isBrokenLink: isSymLink && !nmPathExists, + nmPathExists, + unlinkedPathExists, + }); } - } else if (fsExistsSync(rnvPath)) { - fsRenameSync(rnvPath, rnvPathUnlinked); - fsSymlinkSync(pkgDir, rnvPath); - logInfo(`${key} => link => SUCCESS`); + }); +}; + +const traverseProject = () => { + const c = getContext(); + const linkablePackages: LinkablePackage[] = []; + captureLinkablePackages(c.paths.project.nodeModulesDir, linkablePackages); + const monoPackages = path.join(c.paths.project.dir, 'packages'); + // If monorepo, we need to link all packages + if (fsExistsSync(monoPackages)) { + fsReaddirSync(monoPackages).forEach((pkgName) => { + const pkgPath = path.join(monoPackages, pkgName); + captureLinkablePackages(path.join(pkgPath, 'node_modules'), linkablePackages); + }); } + return linkablePackages; }; -const taskLink: RnvTaskFn = async (c, _parentTask, _originalTask) => { +const taskLink: RnvTaskFn = async (_c, _parentTask, _originalTask) => { logTask('taskLink'); + const linkablePackages = traverseProject(); - RNV_PACKAGES.forEach((pkg) => { - if (!pkg.skipLinking) { - _linkPackage(c, pkg.packageName, pkg.folderName); - } + let msg = 'Found following renative packages:\n\n'; + + linkablePackages.forEach((pkg) => { + msg += `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ + pkg.isBrokenLink ? chalk().red('(broken)') : pkg.isLinked ? chalk().green('(linked)') : '(unlinked)' + }\n`; + }); + + logInfo(msg); + + linkablePackages.forEach((pkg) => { + _linkPackage(pkg); }); return true; diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index 7dfbc676dd..0b112ca15d 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -11,19 +11,25 @@ import { RnvContext, RnvTask, RnvTaskName, + fsReaddirSync, } from '@rnv/core'; import { RNV_PACKAGES } from './constants'; +import { mkdirSync } from 'fs'; -const _unlinkPackage = (c: RnvContext, key: string) => { - const rnvPath = path.join(c.paths.project.nodeModulesDir, key); - const rnvPathUnlinked = path.join(c.paths.project.nodeModulesDir, `${key}_unlinked`); +const _unlinkPackage = (c: RnvContext, nmDir: string, key: string) => { + const rnvDepPath = path.join(nmDir, key); + const nmRnvDir = path.join(nmDir, '.rnv/unlinked_cache'); + if (!fsExistsSync(nmRnvDir)) { + mkdirSync(nmRnvDir); + } + const rnvDepPathUnlinked = path.join(nmRnvDir, key); - if (!fsExistsSync(rnvPathUnlinked)) { + if (!fsExistsSync(rnvDepPathUnlinked)) { logInfo(`${key} is not linked. SKIPPING`); - } else if (fsExistsSync(rnvPath)) { - if (fsLstatSync(rnvPath).isSymbolicLink()) { - fsUnlinkSync(rnvPath); - fsRenameSync(rnvPathUnlinked, rnvPath); + } else if (fsExistsSync(rnvDepPath)) { + if (fsLstatSync(rnvDepPath).isSymbolicLink()) { + fsUnlinkSync(rnvDepPath); + fsRenameSync(rnvDepPathUnlinked, rnvDepPath); logInfo(`${key} => unlink => SUCCESS`); } else { logInfo(`${key} is not a symlink anymore. SKIPPING`); @@ -31,12 +37,27 @@ const _unlinkPackage = (c: RnvContext, key: string) => { } }; +const _findAndUnlinkPackage = (c: RnvContext, key: string) => { + _unlinkPackage(c, c.paths.project.nodeModulesDir, key); + const monoPackages = path.join(c.paths.project.dir, 'packages'); + //If monorepo, we need to link all packages + if (fsExistsSync(monoPackages)) { + fsReaddirSync(monoPackages).forEach((pkg) => { + const pkgPath = path.join(monoPackages, pkg); + if (fsExistsSync(pkg)) { + const nmDir = path.join(pkgPath, 'node_modules'); + _unlinkPackage(c, nmDir, key); + } + }); + } +}; + const taskUnlink: RnvTaskFn = async (c) => { logTask('taskUnlink'); RNV_PACKAGES.forEach((pkg) => { if (!pkg.skipLinking) { - _unlinkPackage(c, pkg.packageName); + _findAndUnlinkPackage(c, pkg.packageName); } }); diff --git a/packages/engine-core/src/tasks/linking/types.ts b/packages/engine-core/src/tasks/linking/types.ts new file mode 100644 index 0000000000..4a5ab4c080 --- /dev/null +++ b/packages/engine-core/src/tasks/linking/types.ts @@ -0,0 +1,18 @@ +export type LinkablePackage = { + name: string; + sourcePath: string; + sourcePathRelative: string; + nmPath: string; + unlinkedPath: string; + cacheDir: string; + skipLinking: boolean; + isLinked: boolean; + isBrokenLink: boolean; + nmPathExists: boolean; + unlinkedPathExists: boolean; +}; +export type RnvPackage = { + packageName: string; + folderName: string; + skipLinking?: boolean; +}; From 982e31faaba4fbdb29713cdf36471ae3db72e69d Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 03:27:57 +0100 Subject: [PATCH 032/175] dynamic linker, support for monorepos --- packages/core/src/runner.ts | 4 +- packages/core/src/tasks/index.ts | 10 +- .../src/tasks/linking/constants.ts | 210 +++++++++--------- .../engine-core/src/tasks/linking/linker.ts | 120 ++++++++++ .../engine-core/src/tasks/linking/taskLink.ts | 74 +----- .../src/tasks/linking/taskUnlink.ts | 77 +++---- .../engine-core/src/tasks/linking/types.ts | 6 +- .../src/tasks/project/taskProjectConfigure.ts | 2 +- .../src/tasks/taskDockerDeploy.ts | 2 +- .../src/tasks/taskDockerExport.ts | 2 +- 10 files changed, 282 insertions(+), 225 deletions(-) create mode 100644 packages/engine-core/src/tasks/linking/linker.ts diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index 04b17bc5f2..9ec3710b7c 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -25,7 +25,7 @@ export const executeRnvCore = async () => { // ie rnv link const initTask = await findSuitableGlobalTask(); if (initTask?.task && initTask.isGlobalScope) { - return initializeTask(initTask?.task); + return initializeTask(initTask); } await loadIntegrations(); @@ -48,5 +48,5 @@ export const executeRnvCore = async () => { await registerMissingPlatformEngines(taskInstance); } - if (taskInstance?.task) await initializeTask(taskInstance?.task); + if (taskInstance?.task) await initializeTask(taskInstance); }; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 0d6c48f6f7..a77391d665 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -28,9 +28,11 @@ export const registerCustomTask = async (task: RnvTask) => { } }; -export const initializeTask = async (task: string) => { +export const initializeTask = async (taskInstance: RnvTask) => { + const { task } = taskInstance; logDefault('initializeTask', task); const c = getContext(); + _populateExtraParameters(c, taskInstance); logInfo( `Current engine: ${chalk().bold(c.runtime.engine?.config.id)} ${chalk().grey( @@ -337,7 +339,7 @@ export const findSuitableTask = async (specificTask?: string): Promise { diff --git a/packages/engine-core/src/tasks/linking/constants.ts b/packages/engine-core/src/tasks/linking/constants.ts index 5807831b85..b69304a138 100644 --- a/packages/engine-core/src/tasks/linking/constants.ts +++ b/packages/engine-core/src/tasks/linking/constants.ts @@ -1,105 +1,107 @@ -import type { RnvPackage } from './types'; +// import type { RnvPackage } from './types'; -export const RNV_PACKAGES: RnvPackage[] = [ - { - packageName: '@rnv/renative', - folderName: 'renative', - skipLinking: true, - }, - { - packageName: '@rnv/core', - folderName: 'core', - }, - { - packageName: '@rnv/engine-core', - folderName: 'engine-core', - }, - { - packageName: '@rnv/cli', - folderName: 'cli', - }, - { - packageName: '@rnv/template-starter', - folderName: 'template-starter', - }, - { - packageName: 'rnv', - folderName: 'rnv', - }, - { - packageName: '@rnv/engine-lightning', - folderName: 'engine-lightning', - }, - { - packageName: '@rnv/engine-rn', - folderName: 'engine-rn', - }, - { - packageName: '@rnv/engine-rn-electron', - folderName: 'engine-rn-electron', - }, - { - packageName: '@rnv/engine-rn-windows', - folderName: 'engine-rn-windows', - }, - { - packageName: '@rnv/engine-rn-next', - folderName: 'engine-rn-next', - }, - { - packageName: '@rnv/engine-rn-tvos', - folderName: 'engine-rn-tvos', - }, - { - packageName: '@rnv/engine-rn-web', - folderName: 'engine-rn-web', - }, - { - packageName: '@rnv/engine-roku', - folderName: 'engine-roku', - }, - { - packageName: '@rnv/integration-docker', - folderName: 'integration-docker', - }, - { - packageName: '@rnv/integration-ftp', - folderName: 'integration-ftp', - }, - { - packageName: '@rnv/integration-vercel', - folderName: 'integration-vercel', - }, - { - packageName: '@rnv/build-hooks-git', - folderName: 'build-hooks-git', - }, - { - packageName: '@rnv/sdk-apple', - folderName: 'sdk-apple', - }, - { - packageName: '@rnv/sdk-android', - folderName: 'sdk-android', - }, - { - packageName: '@rnv/sdk-tizen', - folderName: 'sdk-tizen', - }, - { - packageName: '@rnv/sdk-kaios', - folderName: 'sdk-kaios', - }, - { - packageName: '@rnv/sdk-react-native', - folderName: 'sdk-react-native', - }, - { - packageName: '@rnv/sdk-webpack', - folderName: 'sdk-webpack', - }, - { - packageName: '@rnv/sdk-webos', - folderName: 'sdk-webos', - }, -]; +// export const RNV_PACKAGES: RnvPackage[] = [ +// { +// packageName: '@rnv/renative', +// folderName: 'renative', +// skipLinking: true, +// }, +// { +// packageName: '@rnv/core', +// folderName: 'core', +// }, +// { +// packageName: '@rnv/engine-core', +// folderName: 'engine-core', +// }, +// { +// packageName: '@rnv/cli', +// folderName: 'cli', +// }, +// { +// packageName: '@rnv/template-starter', +// folderName: 'template-starter', +// }, +// { +// packageName: 'rnv', +// folderName: 'rnv', +// }, +// { +// packageName: '@rnv/engine-lightning', +// folderName: 'engine-lightning', +// }, +// { +// packageName: '@rnv/engine-rn', +// folderName: 'engine-rn', +// }, +// { +// packageName: '@rnv/engine-rn-electron', +// folderName: 'engine-rn-electron', +// }, +// { +// packageName: '@rnv/engine-rn-windows', +// folderName: 'engine-rn-windows', +// }, +// { +// packageName: '@rnv/engine-rn-next', +// folderName: 'engine-rn-next', +// }, +// { +// packageName: '@rnv/engine-rn-tvos', +// folderName: 'engine-rn-tvos', +// }, +// { +// packageName: '@rnv/engine-rn-web', +// folderName: 'engine-rn-web', +// }, +// { +// packageName: '@rnv/engine-roku', +// folderName: 'engine-roku', +// }, +// { +// packageName: '@rnv/integration-docker', +// folderName: 'integration-docker', +// }, +// { +// packageName: '@rnv/integration-ftp', +// folderName: 'integration-ftp', +// }, +// { +// packageName: '@rnv/integration-vercel', +// folderName: 'integration-vercel', +// }, +// { +// packageName: '@rnv/build-hooks-git', +// folderName: 'build-hooks-git', +// }, +// { +// packageName: '@rnv/sdk-apple', +// folderName: 'sdk-apple', +// }, +// { +// packageName: '@rnv/sdk-android', +// folderName: 'sdk-android', +// }, +// { +// packageName: '@rnv/sdk-tizen', +// folderName: 'sdk-tizen', +// }, +// { +// packageName: '@rnv/sdk-kaios', +// folderName: 'sdk-kaios', +// }, +// { +// packageName: '@rnv/sdk-react-native', +// folderName: 'sdk-react-native', +// }, +// { +// packageName: '@rnv/sdk-webpack', +// folderName: 'sdk-webpack', +// }, +// { +// packageName: '@rnv/sdk-webos', +// folderName: 'sdk-webos', +// }, +// ]; + +export default {}; diff --git a/packages/engine-core/src/tasks/linking/linker.ts b/packages/engine-core/src/tasks/linking/linker.ts new file mode 100644 index 0000000000..c93643ee0a --- /dev/null +++ b/packages/engine-core/src/tasks/linking/linker.ts @@ -0,0 +1,120 @@ +import { + NpmPackageFile, + chalk, + fsExistsSync, + fsLstatSync, + fsReaddirSync, + getContext, + logInfo, + readObjectSync, +} from '@rnv/core'; +import path from 'path'; +import { LinkablePackage, SourcePackage } from './types'; + +const captureLinkablePackages = ( + baseDir: string, + sourcePackages: SourcePackage[], + linkablePackages: LinkablePackage[] +) => { + sourcePackages.forEach((pkg) => { + const rnvDepPath = path.join(baseDir, pkg.name); + + // const stat = fsStatSync(rnvDepPath); + // console.log('DJDJDJDDJ', rnvDepPath, fsExistsSync(rnvDepPath)); + let isSymLink = false; + const nmPathExists = fsExistsSync(rnvDepPath); + try { + isSymLink = fsLstatSync(rnvDepPath).isSymbolicLink(); + if (!nmPathExists) { + // Broken link + } + } catch (e) { + //Catch error + } + const cacheDir = path.join(baseDir, '.rnv/unlinked_cache'); + const unlinkedPath = path.join(cacheDir, pkg.name); + const unlinkedPathExists = fsExistsSync(unlinkedPath); + + if (nmPathExists || isSymLink || unlinkedPathExists) { + linkablePackages.push({ + name: pkg.name, + nmPath: rnvDepPath, + sourcePath: pkg.path, + sourcePathRelative: path.relative(rnvDepPath.replace(`/${pkg.name}`, ''), pkg.path), + unlinkedPath, + cacheDir, + skipLinking: pkg.skipLinking || false, + isLinked: isSymLink, + isBrokenLink: isSymLink && !nmPathExists, + nmPathExists, + unlinkedPathExists, + }); + } + }); +}; + +export const traverseTargetProject = (sourceDir: string) => { + const c = getContext(); + const linkablePackages: LinkablePackage[] = []; + const sourcePackages = traverseSourceProject(sourceDir); + captureLinkablePackages(c.paths.project.nodeModulesDir, sourcePackages, linkablePackages); + const monoPackages = path.join(c.paths.project.dir, 'packages'); + // If monorepo, we need to link all packages + if (fsExistsSync(monoPackages)) { + fsReaddirSync(monoPackages).forEach((pkgName) => { + const pkgPath = path.join(monoPackages, pkgName); + captureLinkablePackages(path.join(pkgPath, 'node_modules'), sourcePackages, linkablePackages); + }); + } + return linkablePackages; +}; + +export const getSourceDir = () => { + const ctx = getContext(); + + if (ctx.program.dir) { + logInfo(`Using custom source directory: ${chalk().bold(ctx.program.dir)}`); + } + + const sourceDir = ctx.program.dir || path.join(ctx.paths.rnv.dir, '../../'); + if (!fsExistsSync(sourceDir)) { + throw new Error(`Source directory ${sourceDir} does not exist!`); + } + return sourceDir; +}; + +const captureSourcePackage = (baseDir: string, sourcePackages: SourcePackage[]) => { + const pkgPath = path.join(baseDir, 'package.json'); + if (fsExistsSync(pkgPath)) { + const pkgFile = readObjectSync(pkgPath); + if (pkgFile?.name) { + sourcePackages.push({ + name: pkgFile.name, + path: baseDir, + skipLinking: false, + }); + } + } +}; + +export const traverseSourceProject = (sourceDir: string) => { + const sourcePackages: SourcePackage[] = []; + captureSourcePackage(sourceDir, sourcePackages); + const monoPackages = path.join(sourceDir, 'packages'); + // If monorepo, we need to link all packages + if (fsExistsSync(monoPackages)) { + fsReaddirSync(monoPackages).forEach((pkgName) => { + if (pkgName.startsWith('@')) { + const monoPackageGroup = path.join(monoPackages, pkgName); + fsReaddirSync(monoPackages).forEach((pkgName) => { + const pkgPath = path.join(monoPackageGroup, pkgName); + captureSourcePackage(pkgPath, sourcePackages); + }); + } else { + const pkgPath = path.join(monoPackages, pkgName); + captureSourcePackage(pkgPath, sourcePackages); + } + }); + } + return sourcePackages; +}; diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index 959527527b..4de9529a89 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -1,4 +1,3 @@ -import path from 'path'; import { logInfo, logTask, @@ -10,15 +9,12 @@ import { RnvTask, RnvTaskName, mkdirSync, - fsReaddirSync, - getContext, chalk, - fsLstatSync, fsUnlinkSync, removeDirSync, } from '@rnv/core'; -import { RNV_PACKAGES } from './constants'; import { LinkablePackage } from './types'; +import { getSourceDir, traverseTargetProject } from './linker'; const _linkPackage = (pkg: LinkablePackage) => { if (!fsExistsSync(pkg.cacheDir)) { @@ -30,6 +26,8 @@ const _linkPackage = (pkg: LinkablePackage) => { fsUnlinkSync(pkg.nmPath); } else if (pkg.isLinked) { logInfo(`${pkg.name} is already linked. SKIPPING`); + } else if (pkg.skipLinking) { + logInfo(`${pkg.name} is set to skip linking. SKIPPING`); } else if (pkg.nmPathExists) { if (pkg.unlinkedPathExists) { logInfo(`${pkg.name} found in exisitng cache. Removing and relinking...`); @@ -46,66 +44,12 @@ const _linkPackage = (pkg: LinkablePackage) => { } }; -const captureLinkablePackages = (baseDir: string, linkablePackages: LinkablePackage[]) => { - const ctx = getContext(); - RNV_PACKAGES.forEach((pkg) => { - const rnvDepPath = path.join(baseDir, pkg.packageName); - - // const stat = fsStatSync(rnvDepPath); - // console.log('DJDJDJDDJ', rnvDepPath, fsExistsSync(rnvDepPath)); - let isSymLink = false; - const nmPathExists = fsExistsSync(rnvDepPath); - try { - isSymLink = fsLstatSync(rnvDepPath).isSymbolicLink(); - if (!nmPathExists) { - // Broken link - } - } catch (e) { - //Catch error - } - const cacheDir = path.join(baseDir, '.rnv/unlinked_cache'); - const unlinkedPath = path.join(cacheDir, pkg.packageName); - const unlinkedPathExists = fsExistsSync(unlinkedPath); - - if (nmPathExists || isSymLink || unlinkedPathExists) { - const sourcePath = path.join(ctx.paths.rnv.dir, '../', pkg.folderName); - linkablePackages.push({ - name: pkg.packageName, - nmPath: rnvDepPath, - sourcePath, - sourcePathRelative: path.relative(rnvDepPath.replace(`/${pkg.packageName}`, ''), sourcePath), - unlinkedPath, - cacheDir, - skipLinking: pkg.skipLinking || false, - isLinked: isSymLink, - isBrokenLink: isSymLink && !nmPathExists, - nmPathExists, - unlinkedPathExists, - }); - } - }); -}; - -const traverseProject = () => { - const c = getContext(); - const linkablePackages: LinkablePackage[] = []; - captureLinkablePackages(c.paths.project.nodeModulesDir, linkablePackages); - const monoPackages = path.join(c.paths.project.dir, 'packages'); - // If monorepo, we need to link all packages - if (fsExistsSync(monoPackages)) { - fsReaddirSync(monoPackages).forEach((pkgName) => { - const pkgPath = path.join(monoPackages, pkgName); - captureLinkablePackages(path.join(pkgPath, 'node_modules'), linkablePackages); - }); - } - return linkablePackages; -}; - -const taskLink: RnvTaskFn = async (_c, _parentTask, _originalTask) => { +const taskLink: RnvTaskFn = async () => { logTask('taskLink'); - const linkablePackages = traverseProject(); - let msg = 'Found following renative packages:\n\n'; + const linkablePackages = traverseTargetProject(getSourceDir()); + + let msg = 'Found following source packages:\n\n'; linkablePackages.forEach((pkg) => { msg += `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ @@ -126,7 +70,9 @@ const Task: RnvTask = { description: 'Links development version or renative with this project', fn: taskLink, task: RnvTaskName.link, - options: RnvTaskOptionPresets.withBase(), + options: RnvTaskOptionPresets.withBase([ + { key: 'dir', description: 'Source folder to be linked into project', isValueType: true }, + ]), platforms: [], isGlobalScope: true, ignoreEngines: true, diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index 0b112ca15d..b7ec16f92f 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -1,64 +1,49 @@ -import path from 'path'; import { logInfo, logTask, RnvTaskOptionPresets, - fsExistsSync, fsRenameSync, fsUnlinkSync, - fsLstatSync, RnvTaskFn, - RnvContext, RnvTask, RnvTaskName, - fsReaddirSync, + chalk, } from '@rnv/core'; -import { RNV_PACKAGES } from './constants'; -import { mkdirSync } from 'fs'; - -const _unlinkPackage = (c: RnvContext, nmDir: string, key: string) => { - const rnvDepPath = path.join(nmDir, key); - const nmRnvDir = path.join(nmDir, '.rnv/unlinked_cache'); - if (!fsExistsSync(nmRnvDir)) { - mkdirSync(nmRnvDir); - } - const rnvDepPathUnlinked = path.join(nmRnvDir, key); - - if (!fsExistsSync(rnvDepPathUnlinked)) { - logInfo(`${key} is not linked. SKIPPING`); - } else if (fsExistsSync(rnvDepPath)) { - if (fsLstatSync(rnvDepPath).isSymbolicLink()) { - fsUnlinkSync(rnvDepPath); - fsRenameSync(rnvDepPathUnlinked, rnvDepPath); - logInfo(`${key} => unlink => SUCCESS`); - } else { - logInfo(`${key} is not a symlink anymore. SKIPPING`); - } - } -}; - -const _findAndUnlinkPackage = (c: RnvContext, key: string) => { - _unlinkPackage(c, c.paths.project.nodeModulesDir, key); - const monoPackages = path.join(c.paths.project.dir, 'packages'); - //If monorepo, we need to link all packages - if (fsExistsSync(monoPackages)) { - fsReaddirSync(monoPackages).forEach((pkg) => { - const pkgPath = path.join(monoPackages, pkg); - if (fsExistsSync(pkg)) { - const nmDir = path.join(pkgPath, 'node_modules'); - _unlinkPackage(c, nmDir, key); - } - }); +import { getSourceDir, traverseTargetProject } from './linker'; +import { LinkablePackage } from './types'; + +const _unlinkPackage = (pkg: LinkablePackage) => { + if (pkg.isBrokenLink) { + logInfo(`${pkg.name} is a ${chalk().red('broken')} link. Attempting to fix...`); + fsUnlinkSync(pkg.nmPath); + } else if (pkg.isLinked && pkg.unlinkedPathExists) { + fsUnlinkSync(pkg.nmPath); + fsRenameSync(pkg.unlinkedPath, pkg.nmPath); + logInfo(`${pkg.name} => unlink => ${chalk().green('SUCCESS')} (${chalk().gray(pkg.nmPath)})`); + } else if (!pkg.isLinked) { + logInfo(`${pkg.name} is not linked. SKIPPING`); + } else if (pkg.skipLinking) { + logInfo(`${pkg.name} is set to skip linking. SKIPPING`); } }; -const taskUnlink: RnvTaskFn = async (c) => { +const taskUnlink: RnvTaskFn = async () => { logTask('taskUnlink'); - RNV_PACKAGES.forEach((pkg) => { - if (!pkg.skipLinking) { - _findAndUnlinkPackage(c, pkg.packageName); - } + const linkablePackages = traverseTargetProject(getSourceDir()); + + let msg = 'Found following source packages:\n\n'; + + linkablePackages.forEach((pkg) => { + msg += `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ + pkg.isBrokenLink ? chalk().red('(broken)') : pkg.isLinked ? chalk().green('(linked)') : '(unlinked)' + }\n`; + }); + + logInfo(msg); + + linkablePackages.forEach((pkg) => { + _unlinkPackage(pkg); }); return true; diff --git a/packages/engine-core/src/tasks/linking/types.ts b/packages/engine-core/src/tasks/linking/types.ts index 4a5ab4c080..3bef51821e 100644 --- a/packages/engine-core/src/tasks/linking/types.ts +++ b/packages/engine-core/src/tasks/linking/types.ts @@ -11,8 +11,8 @@ export type LinkablePackage = { nmPathExists: boolean; unlinkedPathExists: boolean; }; -export type RnvPackage = { - packageName: string; - folderName: string; +export type SourcePackage = { + name: string; + path: string; skipLinking?: boolean; }; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 69bc80e8a2..90fa6c47c9 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -89,7 +89,7 @@ const taskProjectConfigure: RnvTaskFn = async (c, parentTask, originTask) => { const taskInstance = await findSuitableTask(); c.runtime.requiresBootstrap = false; if (taskInstance?.task) { - return initializeTask(taskInstance?.task); + return initializeTask(taskInstance); } } await applyTemplate(); diff --git a/packages/integration-docker/src/tasks/taskDockerDeploy.ts b/packages/integration-docker/src/tasks/taskDockerDeploy.ts index 62cd8863c5..f4ef53aeb9 100644 --- a/packages/integration-docker/src/tasks/taskDockerDeploy.ts +++ b/packages/integration-docker/src/tasks/taskDockerDeploy.ts @@ -18,7 +18,7 @@ const taskDockerDeploy: RnvTaskFn = async (c, parentTask, originTask) => { await executeOrSkipTask(RnvTaskName.export, 'docker export', originTask); } else { const taskInstance = await findSuitableTask(RnvTaskName.export); - if (taskInstance) await initializeTask(taskInstance.task); + if (taskInstance) await initializeTask(taskInstance); } const docker = new Docker(); diff --git a/packages/integration-docker/src/tasks/taskDockerExport.ts b/packages/integration-docker/src/tasks/taskDockerExport.ts index 7fd2b18bc1..f2bc590128 100644 --- a/packages/integration-docker/src/tasks/taskDockerExport.ts +++ b/packages/integration-docker/src/tasks/taskDockerExport.ts @@ -18,7 +18,7 @@ const taskDockerExport: RnvTaskFn = async (c, parentTask, originTask) => { await executeOrSkipTask(RnvTaskName.export, 'docker export', originTask); } else { const taskInstance = await findSuitableTask(RnvTaskName.export); - if (taskInstance) await initializeTask(taskInstance.task); + if (taskInstance) await initializeTask(taskInstance); } const docker = new Docker(); From 4656af4f13d7f3491042b9ab603ace99d3a30625 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 03:30:23 +0100 Subject: [PATCH 033/175] fix UTs --- .../src/tasks/global/new/__tests__/taskNew.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts index 5272463008..7cb566e6fb 100644 --- a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts @@ -15,7 +15,7 @@ import { inquiryInstallTemplate } from '../questions/installTemplate'; import { inquiryApplyTemplate } from '../questions/applyTemplate'; import { inquiryAppTitle } from '../questions/appTitle'; import { inquiryAppID } from '../questions/appID'; -import { inquiryAppVersion } from '../questions/appVersion'; +import { inquiryAppVersion } from '../questions/projectVersion'; import { inquiryWorkspace } from '../questions/workspace'; import { inquirySupportedPlatforms } from '../questions/supportedPlatforms'; import { inquiryBootstrapQuestions } from '../questions/bootstrapQuestions'; @@ -34,7 +34,7 @@ jest.mock('../questions/installTemplate'); jest.mock('../questions/applyTemplate'); jest.mock('../questions/bookmarkTemplate'); jest.mock('../questions/appID'); -jest.mock('../questions/appVersion'); +jest.mock('../questions/projectVersion'); jest.mock('../questions/workspace'); jest.mock('../questions/hasNodeModules'); jest.mock('../questions/confirmOverview'); @@ -66,6 +66,7 @@ test('Execute task.rnv.new', async () => { project: { renativeConfig: {}, packageJson: {}, + renativeAppConfig: {}, }, template: { renativeTemplateConfig: {}, From 8f4a97410cfedf0bd796cb1537dfef28f6e0961f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 12:17:44 +0100 Subject: [PATCH 034/175] revamp help command, let tasks determine required options --- packages/cli/src/index.ts | 14 +++++++++++-- packages/cli/src/logger/index.ts | 15 ++++++++++++++ packages/core/src/tasks/constants.ts | 31 +++++++++++++++++++++------- packages/core/src/tasks/index.ts | 27 +++++++++--------------- 4 files changed, 60 insertions(+), 27 deletions(-) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index bf7594d019..fb98db0cbc 100644 --- a/packages/cli/src/index.ts +++ b/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, generateStringFromTaskOption } from '@rnv/core'; +import { logComplete, logError, getContext, generateStringFromTaskOption, RnvTaskCoreOptionPresets } from '@rnv/core'; import Spinner from './ora'; import Prompt from './prompt'; import Logger from './logger'; @@ -28,11 +28,12 @@ export const run = () => { program.version(packageJson.version, '-v, --version', 'output current version'); - RnvTaskOptionPresets.withAll().forEach((param) => { + RnvTaskCoreOptionPresets.withCore().forEach((param) => { program.option(generateStringFromTaskOption(param), param.description); }); program.allowUnknownOption(true); // integration options are not known ahead of time + program.helpOption(false); // Make both arguments optional un order to allow `$ rnv` top level command program.arguments('[cmd] [option]').action((cmd, option) => { @@ -47,6 +48,15 @@ export const run = () => { process.exit(0); }); + // This looks weird but commander default help is actual function. + // if you pass --help it will override it with undefined + // So we need to check if it's not a function to output help + if (!program.help) { + //program.outputHelp(); + // Let's use alternative name for this flag + program.isHelpInvoked = true; + } + // 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 diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index d77d1bd0b1..76ac883922 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -59,6 +59,7 @@ export const logInitialize = () => { export const logWelcome = () => { const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; const shortLen = 64; // prettier-ignore let str = _defaultColor(` @@ -189,6 +190,7 @@ export const getCurrentCommand = (excludeDollar = false) => { export const logToSummary = (v: string, sanitizePaths?: () => string) => { const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; const _v = sanitizePaths ? _sanitizePaths(v) : v; ctx.logMessages.push(`\n${_v}`); }; @@ -206,6 +208,7 @@ export const logRaw = (...args: Array) => { export const logSummary = (header = '✔ SUMMARY') => { const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; if (_jsonOnly) return; @@ -370,6 +373,8 @@ const _sanitizePaths = (msg: string) => { const TASK_COUNTER: Record = {}; export const logTask = (task: string, customChalk?: string | RnvApiChalkFn) => { + const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; if (!TASK_COUNTER[task]) TASK_COUNTER[task] = 0; TASK_COUNTER[task] += 1; const taskCount = currentChalk.grey(`[${TASK_COUNTER[task]}]`); @@ -400,6 +405,8 @@ export const logTask = (task: string, customChalk?: string | RnvApiChalkFn) => { }; export const logDefault = (task: string, customChalk?: string | RnvApiChalkFn) => { + const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; const taskCount = getLogCounter(task); if (_jsonOnly) { @@ -436,6 +443,8 @@ const getLogCounter = (task: string, skipAddition = false) => { }; export const logInitTask = (task: string) => { + const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; const taskCount = getLogCounter(task); if (_jsonOnly) { @@ -460,6 +469,8 @@ type PrintJsonPayload = { }; export const logExitTask = (task: string) => { + const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; if (_jsonOnly) { return _printJson({ type: 'taskExit', @@ -474,6 +485,8 @@ export const logExitTask = (task: string) => { }; export const logHook = (hook = '', msg = '') => { + const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; if (_jsonOnly) { const payload: PrintJsonPayload = { type: 'hook', hook, message: stripAnsi(_sanitizePaths(msg)) }; if (_getCurrentTask()) payload.task = stripAnsi(_getCurrentTask()); @@ -496,6 +509,8 @@ export const logWarning = (msg: string | boolean | unknown) => { }; export const logInfo = (msg: string) => { + const ctx = getContext(); + if (ctx.program?.isHelpInvoked) return; if (_jsonOnly) { return _printJson({ type: 'log', diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 8eaf5166fc..8285f6530e 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -11,6 +11,10 @@ export const DEFAULT_TASK_DESCRIPTIONS: Record = { }; export const RnvTaskOptions: Record = { + help: { + shortcut: 'h', + description: 'Displays help info for particular command', + }, info: { shortcut: 'i', isValueType: true, @@ -119,10 +123,6 @@ export const RnvTaskOptions: Record = { isValueType: true, description: 'Blueprint for targets', }, - help: { - shortcut: 'h', - description: 'Displays help info for particular command', - }, host: { shortcut: 'H', isValueType: true, @@ -159,7 +159,7 @@ export const RnvTaskOptions: Record = { shortcut: 'e', isValueType: true, isRequired: true, - description: 'engine to be used (next)', + description: 'engine to be used ie "engine-rn"', }, debugIp: { isValueType: true, @@ -304,15 +304,30 @@ export type ParamKeys = Partial>; RnvTaskOptions[k].key = k; }); -export const RnvTaskOptionPresets = { - withBase: (arr?: Array) => +export const RnvTaskCoreOptionPresets = { + withCore: (arr?: Array) => [ RnvTaskOptions.info, RnvTaskOptions.ci, RnvTaskOptions.mono, RnvTaskOptions.maxErrorLength, RnvTaskOptions.only, + // platform is necessary to be accepted as base for the `rnv` command to work with enginie plugins + RnvTaskOptions.platform, + RnvTaskOptions.help, ].concat(arr || []), +}; + +export const RnvTaskOptionPresets = { + withBase: (arr?: Array) => arr || [], + // withBase: (arr?: Array) => + // [ + // RnvTaskOptions.info, + // RnvTaskOptions.ci, + // RnvTaskOptions.mono, + // RnvTaskOptions.maxErrorLength, + // RnvTaskOptions.only, + // ].concat(arr || []), withConfigure: (arr?: Array) => [ RnvTaskOptions.reset, @@ -321,7 +336,7 @@ export const RnvTaskOptionPresets = { RnvTaskOptions.resetAssets, RnvTaskOptions.appConfigID, RnvTaskOptions.scheme, - RnvTaskOptions.platform, + // RnvTaskOptions.platform, ].concat(arr || []), withRun: (arr?: Array) => [ diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index a77391d665..36e2c6e1b2 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -376,6 +376,7 @@ export const generateStringFromTaskOption = (opt: RnvTaskOption) => { }; const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { + c.program?.allowUnknownOption(false); // integration options are not known ahead of time if (task.options) { task.options.forEach((opt) => { c.program.option?.(generateStringFromTaskOption(opt), opt.description); @@ -555,28 +556,20 @@ export const executeEngineTask = async ( if (needsHelp && !parentTask && t) { logRaw(` -======================================================= -INTERACTIVE HELP FOR TASK: ${chalk().green(t.task)} - Description: ${t.description} - -Options: - -${t.options - .map((v) => { - const option = v.shortcut ? `\`-${v.shortcut}\`, ` : ''; - return `${option}\`--${v.key}\` - ${v.description}`; - }) - .join('\n')} - `); + c.program.outputHelp(); + + // ${t.options + // .map((v) => { + // const option = v.shortcut ? `-${v.shortcut}, ` : ''; + // return ` ${option}--${v.key} ${v.description}`; + // }) + // .join('\n')} if (t.fnHelp) { await t.fnHelp(c, parentTask, originTask); } - - await pressAnyKeyToContinue(); - logRaw(` -=======================================================`); + return; } if (t && !t.isGlobalScope && isFirstTask) { if (c.files.project.package) { From 565e0eaf1f2358ceb7b2a553e94ca78933721e39 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 12:19:16 +0100 Subject: [PATCH 035/175] remove press any key func --- packages/cli/src/prompt.ts | 10 ---------- packages/core/src/api/defaults.ts | 3 --- packages/core/src/api/index.ts | 4 ---- packages/core/src/api/types.ts | 1 - packages/core/src/tasks/index.ts | 2 +- 5 files changed, 1 insertion(+), 19 deletions(-) diff --git a/packages/cli/src/prompt.ts b/packages/cli/src/prompt.ts index c0f3ab6465..ef19707be5 100644 --- a/packages/cli/src/prompt.ts +++ b/packages/cli/src/prompt.ts @@ -55,15 +55,6 @@ export const inquirerSeparator = (text?: string) => { return new inquirer.Separator(text); }; -export const pressAnyKeyToContinue = () => { - const params = { - type: 'input', - name: 'confirm', - message: 'Press any key to continue', - }; - return inquirer.prompt(params as any); -}; - export const generateOptions = ( inputData: any, isMultiChoice = false, @@ -148,6 +139,5 @@ const _generateOptionString = (i: number, _obj: any, mapping: any, defaultVal: s export default { inquirerPrompt, generateOptions, - pressAnyKeyToContinue, inquirerSeparator, }; diff --git a/packages/core/src/api/defaults.ts b/packages/core/src/api/defaults.ts index 27f68ba94b..2660978183 100644 --- a/packages/core/src/api/defaults.ts +++ b/packages/core/src/api/defaults.ts @@ -82,9 +82,6 @@ export const generateApiDefaults = (): RnvApi => ({ inquirerPrompt: async () => { //NOOP }, - pressAnyKeyToContinue: async () => { - //NOOP - }, inquirerSeparator() { //NOOP }, diff --git a/packages/core/src/api/index.ts b/packages/core/src/api/index.ts index 14b5b31286..c3b2c75001 100644 --- a/packages/core/src/api/index.ts +++ b/packages/core/src/api/index.ts @@ -47,7 +47,3 @@ export const inquirerSeparator: RnvApiPrompt['inquirerSeparator'] = (text?: stri export const generateOptions: RnvApiPrompt['generateOptions'] = (inputData, isMultiChoice, mapping, renderMethod) => { return getApi().prompt.generateOptions(inputData, isMultiChoice, mapping, renderMethod); }; - -export const pressAnyKeyToContinue: RnvApiPrompt['pressAnyKeyToContinue'] = () => { - return getApi().prompt.pressAnyKeyToContinue(); -}; diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index b88b8d963c..23ab631557 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -36,7 +36,6 @@ export type RnvApiPrompt = { mapping?: any, renderMethod?: PromptRenderFn ) => PromptOptions; - pressAnyKeyToContinue: () => Promise; inquirerSeparator: (text?: string) => any; }; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 36e2c6e1b2..0ffc8aedeb 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -11,7 +11,7 @@ import { import type { RnvContext } from '../context/types'; import type { RnvTask, RnvTaskMap, RnvTaskOption, TaskItemMap, TaskObj, TaskPromptOption } from './types'; import type { RnvEngine } from '../engines/types'; -import { inquirerPrompt, inquirerSeparator, pressAnyKeyToContinue } from '../api'; +import { inquirerPrompt, inquirerSeparator } from '../api'; import { getApi } from '../api/provider'; import type { PlatformKey, RenativeConfigRnvTaskName } from '../schema/types'; import { checkIfProjectAndNodeModulesExists } from '../projects/dependencyManager'; From fa923eb4996982b44974f6923c42804e2a1cc219 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 14:48:23 +0100 Subject: [PATCH 036/175] migrate telemetry, decouple rnv from cli --- packages/cli/package.json | 7 +- packages/cli/src/bin.ts | 2 +- packages/cli/src/index.ts | 67 +++++++++++++++++-- packages/rnv/bin/index.js | 11 --- packages/rnv/package.json | 11 +-- packages/rnv/src/bin.ts | 6 ++ packages/rnv/src/constants.ts | 3 - packages/rnv/src/index.ts | 1 - packages/rnv/src/runner.ts | 53 --------------- packages/sdk-telemetry/.gitignore | 3 + packages/sdk-telemetry/LICENSE | 21 ++++++ packages/sdk-telemetry/README.md | 2 + packages/sdk-telemetry/package.json | 43 ++++++++++++ packages/sdk-telemetry/src/constants.ts | 3 + .../analytics => sdk-telemetry/src}/index.ts | 7 +- packages/sdk-telemetry/src/types.ts | 12 ++++ packages/sdk-telemetry/tsconfig.json | 11 +++ packages/sdk-telemetry/types.d.ts | 1 + 18 files changed, 175 insertions(+), 89 deletions(-) delete mode 100755 packages/rnv/bin/index.js create mode 100644 packages/rnv/src/bin.ts delete mode 100755 packages/rnv/src/index.ts delete mode 100644 packages/rnv/src/runner.ts create mode 100644 packages/sdk-telemetry/.gitignore create mode 100644 packages/sdk-telemetry/LICENSE create mode 100644 packages/sdk-telemetry/README.md create mode 100644 packages/sdk-telemetry/package.json create mode 100644 packages/sdk-telemetry/src/constants.ts rename packages/{rnv/src/analytics => sdk-telemetry/src}/index.ts (95%) create mode 100644 packages/sdk-telemetry/src/types.ts create mode 100644 packages/sdk-telemetry/tsconfig.json create mode 100644 packages/sdk-telemetry/types.d.ts diff --git a/packages/cli/package.json b/packages/cli/package.json index 76ba537e30..5fefa64177 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -34,7 +34,9 @@ "dependencies": { "chalk": "4.1.0", "commander": "^6.2.0", - "inquirer": "8.2.0" + "inquirer": "8.2.0", + "@rnv/sdk-telemetry": "1.0.0-rc.12", + "@rnv/engine-core": "1.0.0-rc.12" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" @@ -42,6 +44,5 @@ "private": false, "publishConfig": { "access": "public" - }, - "gitHead": "48ef244c6ec2e206cbfd72fe8770d8dc03387591" + } } diff --git a/packages/cli/src/bin.ts b/packages/cli/src/bin.ts index 96ce30aa65..1fb698d94d 100644 --- a/packages/cli/src/bin.ts +++ b/packages/cli/src/bin.ts @@ -2,4 +2,4 @@ import { run } from './'; -run(); +run({ RNV_HOME_DIR: undefined }); diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index fb98db0cbc..923b0b0060 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,14 +1,32 @@ import program from 'commander'; import fs from 'fs'; import path from 'path'; -import { logComplete, logError, getContext, generateStringFromTaskOption, RnvTaskCoreOptionPresets } from '@rnv/core'; +import { + logComplete, + logError, + getContext, + generateStringFromTaskOption, + RnvTaskCoreOptionPresets, + RnvContextProgram, + RnvApiSpinner, + RnvApiPrompt, + RnvApiLogger, + createRnvApi, + createRnvContext, + logInitialize, + loadWorkspacesConfigSync, + registerEngine, + executeRnvCore, + getConfigProp, + doResolve, +} from '@rnv/core'; +import { Telemetry } from '@rnv/sdk-telemetry'; +import EngineCore from '@rnv/engine-core'; + import Spinner from './ora'; import Prompt from './prompt'; import Logger from './logger'; -//IMPORTANT: Using require instead of import here to avoid circular dependency issue rnv => @rnv/cli => rnv -const { executeRnv } = require('rnv'); - const terminateProcesses = (): void => { const { runningProcesses } = getContext(); try { @@ -21,7 +39,7 @@ const terminateProcesses = (): void => { runningProcesses.length = 0; }; -export const run = () => { +export const run = ({ RNV_HOME_DIR }: { RNV_HOME_DIR?: string }) => { const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json')).toString()); let cmdValue = ''; let cmdOption = ''; @@ -72,6 +90,7 @@ export const run = () => { spinner: Spinner, prompt: Prompt, logger: Logger, + RNV_HOME_DIR, }) .then(() => { logComplete(!getContext().runtime.keepSessionActive); @@ -81,3 +100,41 @@ export const run = () => { logError(e, true); }); }; + +export const executeRnv = async ({ + cmd, + subCmd, + process, + program, + spinner, + prompt, + logger, + RNV_HOME_DIR, +}: { + cmd: string; + subCmd: string; + process: NodeJS.Process; + program: RnvContextProgram; + spinner: RnvApiSpinner; + prompt: RnvApiPrompt; + logger: RnvApiLogger; + RNV_HOME_DIR?: string; +}) => { + // set mono and ci if json is enabled + if (program.json) { + program.mono = true; + program.ci = true; + } + + createRnvApi({ spinner, prompt, analytics: Telemetry, logger, getConfigProp, doResolve }); + createRnvContext({ program, process, cmd, subCmd, RNV_HOME_DIR }); + + logInitialize(); + loadWorkspacesConfigSync(); + + Telemetry.initialize(); + + await registerEngine(EngineCore); + + await executeRnvCore(); +}; diff --git a/packages/rnv/bin/index.js b/packages/rnv/bin/index.js deleted file mode 100755 index 967b28b86a..0000000000 --- a/packages/rnv/bin/index.js +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -var cli = require('@rnv/cli'); - -if (require.main === module) { - cli.run(); -} - -module.exports = cli; diff --git a/packages/rnv/package.json b/packages/rnv/package.json index 6710b2ec9d..1e88368189 100644 --- a/packages/rnv/package.json +++ b/packages/rnv/package.json @@ -54,9 +54,8 @@ "lib", "pluginTemplates" ], - "main": "lib/index.js", "bin": { - "rnv": "./bin/index.js" + "rnv": "./lib/bin.js" }, "repository": { "type": "git", @@ -72,17 +71,11 @@ }, "dependencies": { "@rnv/cli": "1.0.0-rc.12", - "@rnv/core": "1.0.0-rc.12", - "@rnv/engine-core": "1.0.0-rc.12", - "@sentry/integrations": "7.57.0", - "@sentry/node": "7.57.0", - "node-machine-id": "^1.1.12", "tslib": "2.5.2" }, "private": false, "publishConfig": { "access": "public" }, - "title": "ReNative CLI", - "gitHead": "48ef244c6ec2e206cbfd72fe8770d8dc03387591" + "title": "ReNative CLI" } diff --git a/packages/rnv/src/bin.ts b/packages/rnv/src/bin.ts new file mode 100644 index 0000000000..d939ba3fb6 --- /dev/null +++ b/packages/rnv/src/bin.ts @@ -0,0 +1,6 @@ +#!/usr/bin/env node + +import { run } from '@rnv/cli'; +import { RNV_HOME_DIR } from './constants'; + +run({ RNV_HOME_DIR }); diff --git a/packages/rnv/src/constants.ts b/packages/rnv/src/constants.ts index c56fe126e1..7719d7126e 100644 --- a/packages/rnv/src/constants.ts +++ b/packages/rnv/src/constants.ts @@ -1,6 +1,3 @@ import path from 'path'; export const RNV_HOME_DIR = path.join(__dirname, '..'); -export const REDASH_URL = 'https://analytics.prod.api.flexn.io/rnv'; -export const REDASH_KEY = '471577f3b856fb6348ae913ceb32545c'; -export const SENTRY_ENDPOINT = 'https://004caee3caa04c81a10f2ba31a945362@sentry.io/1795473'; diff --git a/packages/rnv/src/index.ts b/packages/rnv/src/index.ts deleted file mode 100755 index bde5e81d30..0000000000 --- a/packages/rnv/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './runner'; diff --git a/packages/rnv/src/runner.ts b/packages/rnv/src/runner.ts deleted file mode 100644 index 42c23a0471..0000000000 --- a/packages/rnv/src/runner.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Analytics } from './analytics'; -import { - RnvApiLogger, - RnvApiPrompt, - RnvApiSpinner, - RnvContextProgram, - createRnvApi, - createRnvContext, - doResolve, - executeRnvCore, - getConfigProp, - loadWorkspacesConfigSync, - logInitialize, - registerEngine, -} from '@rnv/core'; -import { RNV_HOME_DIR } from './constants'; -import EngineCore from '@rnv/engine-core'; - -export const executeRnv = async ({ - cmd, - subCmd, - process, - program, - spinner, - prompt, - logger, -}: { - cmd: string; - subCmd: string; - process: NodeJS.Process; - program: RnvContextProgram; - spinner: RnvApiSpinner; - prompt: RnvApiPrompt; - logger: RnvApiLogger; -}) => { - // set mono and ci if json is enabled - if (program.json) { - program.mono = true; - program.ci = true; - } - - createRnvApi({ spinner, prompt, analytics: Analytics, logger, getConfigProp, doResolve }); - createRnvContext({ program, process, cmd, subCmd, RNV_HOME_DIR }); - - logInitialize(); - loadWorkspacesConfigSync(); - - Analytics.initialize(); - - await registerEngine(EngineCore); - - await executeRnvCore(); -}; diff --git a/packages/sdk-telemetry/.gitignore b/packages/sdk-telemetry/.gitignore new file mode 100644 index 0000000000..0498e17dcb --- /dev/null +++ b/packages/sdk-telemetry/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +coverage \ No newline at end of file diff --git a/packages/sdk-telemetry/LICENSE b/packages/sdk-telemetry/LICENSE new file mode 100644 index 0000000000..9994b5bb3f --- /dev/null +++ b/packages/sdk-telemetry/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 - present, Flexn BV + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/sdk-telemetry/README.md b/packages/sdk-telemetry/README.md new file mode 100644 index 0000000000..15436521a6 --- /dev/null +++ b/packages/sdk-telemetry/README.md @@ -0,0 +1,2 @@ +# @rnv/sdk-telemetry + diff --git a/packages/sdk-telemetry/package.json b/packages/sdk-telemetry/package.json new file mode 100644 index 0000000000..c5c99449be --- /dev/null +++ b/packages/sdk-telemetry/package.json @@ -0,0 +1,43 @@ +{ + "name": "@rnv/sdk-telemetry", + "version": "1.0.0-rc.12", + "description": "ReNative Telemetry SDK", + "keywords": [], + "homepage": "https://github.com/flexn-io/renative#readme", + "bugs": { + "url": "https://github.com/flexn-io/renative/issues" + }, + "license": "MIT", + "author": "Pavel Jacko (https://github.com/pavjacko)", + "files": [ + "LICENSE", + "lib", + "types.d.ts" + ], + "main": "lib/index.js", + "repository": { + "type": "git", + "url": "git+https://github.com/flexn-io/renative.git" + }, + "scripts": { + "bootstrap": "yarn && yarn build && npm link", + "build": "yarn clean && yarn compile", + "clean": "rimraf -I ./lib && rimraf -I tsconfig.tsbuildinfo", + "compile": "tsc -b tsconfig.json", + "compile:prod": "tsc -b tsconfig.json", + "lint": "eslint . --ext .ts", + "watch": "tsc --watch --preserveWatchOutput" + }, + "dependencies": { + "@sentry/integrations": "7.57.0", + "@sentry/node": "7.57.0", + "node-machine-id": "^1.1.12" + }, + "peerDependencies": { + "@rnv/core": "^1.0.0-rc.12" + }, + "private": false, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/sdk-telemetry/src/constants.ts b/packages/sdk-telemetry/src/constants.ts new file mode 100644 index 0000000000..b07b7841dc --- /dev/null +++ b/packages/sdk-telemetry/src/constants.ts @@ -0,0 +1,3 @@ +export const REDASH_URL = 'https://analytics.prod.api.flexn.io/rnv'; +export const REDASH_KEY = '471577f3b856fb6348ae913ceb32545c'; +export const SENTRY_ENDPOINT = 'https://004caee3caa04c81a10f2ba31a945362@sentry.io/1795473'; diff --git a/packages/rnv/src/analytics/index.ts b/packages/sdk-telemetry/src/index.ts similarity index 95% rename from packages/rnv/src/analytics/index.ts rename to packages/sdk-telemetry/src/index.ts index 5cdb869d22..e07acd5225 100644 --- a/packages/rnv/src/analytics/index.ts +++ b/packages/sdk-telemetry/src/index.ts @@ -7,7 +7,7 @@ import path from 'path'; import { RnvPlatform, getContext, logRaw } from '@rnv/core'; //@ts-ignore import pkg from '../../package.json'; -import { REDASH_KEY, REDASH_URL, SENTRY_ENDPOINT } from '../constants'; +import { REDASH_KEY, REDASH_URL, SENTRY_ENDPOINT } from './constants'; // deal with useless duplicate errors on sentry because of different error texts const sanitizeError = (err: string) => { @@ -28,6 +28,7 @@ class Redash { const defaultProps = { fingerprint: machineIdSync(), os: os.platform(), + //TODO: this points to telemetry version. migrate to universal RNV version (@rnv/core) rnvVersion: pkg.version, }; return axios @@ -146,6 +147,6 @@ ${JSON.stringify(e, null, 2)} } } -const Analytics = new AnalyticsCls(); +const Telemetry = new AnalyticsCls(); -export { Analytics }; +export { Telemetry }; diff --git a/packages/sdk-telemetry/src/types.ts b/packages/sdk-telemetry/src/types.ts new file mode 100644 index 0000000000..298a0923f9 --- /dev/null +++ b/packages/sdk-telemetry/src/types.ts @@ -0,0 +1,12 @@ +export type TizenDevice = { + name: string; + type: string; + id: string; + deviceType: string; +}; + +export type TizenSecurityConfig = { + profileName: string; + certPath: string; + certPassword: string; +}; diff --git a/packages/sdk-telemetry/tsconfig.json b/packages/sdk-telemetry/tsconfig.json new file mode 100644 index 0000000000..bc57e8fcd2 --- /dev/null +++ b/packages/sdk-telemetry/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@flexn/typescript-config/tsconfig.lib.node.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src", + "resolveJsonModule": false, + "lib": ["ES2021.String"] + }, + "include": ["./src/**/*", "./src/**/*.json", "./types.d.ts", "./package.json"], + "exclude": ["node_modules", "./src/**/*.test.ts"] +} diff --git a/packages/sdk-telemetry/types.d.ts b/packages/sdk-telemetry/types.d.ts new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/packages/sdk-telemetry/types.d.ts @@ -0,0 +1 @@ + From 19fc200fbf07855bfa3af18b0ea4b4d0cc8109a2 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 19:41:06 +0100 Subject: [PATCH 037/175] rnv migration fixes --- packages/app-harness/package.json | 4 ++-- packages/core/src/context/defaults.ts | 4 ++++ packages/core/src/context/index.ts | 3 +++ packages/core/src/context/types.ts | 6 ++++++ packages/sdk-telemetry/src/index.ts | 2 +- packages/template-starter/package.json | 4 ++-- packages/template-starter/renative.template.json | 4 ++-- 7 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index 5670b8278f..013022fbf3 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -66,6 +66,7 @@ "@flexn/assets-renative-outline": "0.3.3", "@flexn/graybox": "1.0.0-feat.12", "@rnv/core": "1.0.0-rc.12", + "@rnv/cli": "1.0.0-rc.12", "@rnv/engine-lightning": "1.0.0-rc.12", "@rnv/engine-rn": "1.0.0-rc.12", "@rnv/engine-rn-electron": "1.0.0-rc.12", @@ -79,8 +80,7 @@ "@types/react-native": "0.72.2", "babel-jest": "29.6.3", "babel-loader": "9.1.3", - "detox": "18.20.2", - "rnv": "1.0.0-rc.12" + "detox": "18.20.2" }, "private": true, "browserslist": [ diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 52f419cc51..0cabe58b1c 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -120,6 +120,7 @@ export const generateContextDefaults = (): RnvContext => ({ dir: '', }, projectTemplate: { dir: '' }, + core: { package: '' }, }, workspace: { ...generateRnvConfigPathObj(), @@ -222,6 +223,9 @@ export const generateContextDefaults = (): RnvContext => ({ }, projectTemplates: {}, package: {}, + core: { + package: {}, + }, }, workspace: { ...generateRnvConfigFileObj(), diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 0d1fbf7257..364c8d25cd 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -91,10 +91,13 @@ export const populateContextPaths = (c: RnvContext) => { c.paths.rnv.projectTemplates.dir = path.join(c.paths.rnv.dir, 'coreTemplateFiles'); c.paths.rnv.projectTemplates.config = path.join(c.paths.rnv.projectTemplates.dir, ConfigName.renativeTemplates); c.paths.rnv.package = path.join(c.paths.rnv.dir, 'package.json'); + c.paths.rnv.core.package = path.join(c.paths.RNV_CORE_HOME_DIR, 'package.json'); c.paths.rnv.projectTemplate.dir = path.join(c.paths.rnv.dir, 'coreTemplateFiles'); c.files.rnv.package = JSON.parse(fsReadFileSync(c.paths.rnv.package).toString()); + c.files.rnv.core.package = JSON.parse(fsReadFileSync(c.paths.rnv.core.package).toString()); + c.platform = c.program.platform; c.paths.home.dir = USER_HOME_DIR; c.paths.GLOBAL_RNV_DIR = path.join(c.paths.home.dir, '.rnv'); diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 049a53f4a6..86bb606b01 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -155,6 +155,9 @@ export type RnvContextFiles = { }; configWorkspaces?: ConfigFileWorkspaces; package: NpmPackageFile; + core: { + package: NpmPackageFile; + }; }; workspace: RnvContextFileObj & { project: RnvContextFileObj; @@ -213,6 +216,9 @@ export type RnvContextPaths = { }; dir: string; package: string; + core: { + package: string; + }; }; workspace: RnvContextPathObj & { project: RnvContextPathObj & { diff --git a/packages/sdk-telemetry/src/index.ts b/packages/sdk-telemetry/src/index.ts index e07acd5225..22aae176d5 100644 --- a/packages/sdk-telemetry/src/index.ts +++ b/packages/sdk-telemetry/src/index.ts @@ -6,7 +6,7 @@ import path from 'path'; import { RnvPlatform, getContext, logRaw } from '@rnv/core'; //@ts-ignore -import pkg from '../../package.json'; +import pkg from '../package.json'; import { REDASH_KEY, REDASH_URL, SENTRY_ENDPOINT } from './constants'; // deal with useless duplicate errors on sentry because of different error texts diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index 27fe291a8c..467713531d 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -98,6 +98,7 @@ "@flexn/graybox": "1.0.0-feat.12", "@lightningjs/sdk": "^5.4.1", "@rnv/core": "1.0.0-rc.12", + "@rnv/cli": "1.0.0-rc.12", "@rnv/adapter": "1.0.0-rc.12", "@rnv/engine-lightning": "1.0.0-rc.12", "@rnv/engine-rn": "1.0.0-rc.12", @@ -120,8 +121,7 @@ "react-native": "0.73.6", "react-native-gesture-handler": "2.14.1", "react-native-tvos": "0.73.6-0", - "react-native-web": "0.19.9", - "rnv": "1.0.0-rc.12" + "react-native-web": "0.19.9" }, "private": false, "publishConfig": { diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index e1494216ac..ecc7c2e459 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -32,8 +32,8 @@ "@flexn/typescript-config": "1.0.0", "@flexn/assets-renative-outline": "0.3.3", "@rnv/core": "1.0.0-rc.12", - "@rnv/adapter": "1.0.0-rc.12", - "rnv": "1.0.0-rc.12" + "@rnv/cli": "1.0.0-rc.12", + "@rnv/adapter": "1.0.0-rc.12" }, "browserslist": { "production": [">0.2%", "not dead", "not op_mini all"], From a92ba2a7d7574047d6c0e94239ca91a5aefaac78 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 19:43:05 +0100 Subject: [PATCH 038/175] split core project submodule into smaller parts. move configureFonts to sdk-utils to separate specific implementation from @rnv/core --- packages/core/src/index.ts | 10 +- packages/core/src/plugins/index.ts | 17 +- packages/core/src/projects/appConfig.ts | 65 ++ packages/core/src/projects/assets.ts | 202 ++++++ packages/core/src/projects/bootstrap.ts | 167 +++++ .../{dependencyManager.ts => dependencies.ts} | 32 +- packages/core/src/projects/fonts.ts | 57 ++ packages/core/src/projects/index.ts | 642 ------------------ packages/core/src/projects/types.ts | 2 + packages/core/src/projects/utils.ts | 10 + packages/core/src/projects/version.ts | 51 ++ packages/core/src/tasks/index.ts | 2 +- packages/core/src/templates/index.ts | 2 +- packages/engine-core/src/plugins.ts | 26 +- .../src/tasks/app/taskAppSwitch.ts | 2 +- .../src/tasks/global/taskInstall.ts | 2 +- .../tasks/platform/taskPlatformConfigure.ts | 16 +- .../src/tasks/project/taskProjectConfigure.ts | 7 +- .../src/tasks/project/taskProjectUpgrade.ts | 2 +- .../tasks/workspace/taskWorkspaceConfigure.ts | 14 +- .../global-config-template.json | 22 - packages/sdk-utils/package.json | 1 + packages/sdk-utils/src/constants.ts | 3 + packages/sdk-utils/src/fonts.ts | 86 +++ packages/sdk-utils/src/getConfigProps.ts | 169 +++++ packages/sdk-utils/src/index.ts | 344 +--------- packages/sdk-utils/src/ipUtils.ts | 125 ++++ packages/sdk-utils/src/utils.ts | 32 + 28 files changed, 1060 insertions(+), 1050 deletions(-) create mode 100644 packages/core/src/projects/appConfig.ts create mode 100644 packages/core/src/projects/assets.ts create mode 100644 packages/core/src/projects/bootstrap.ts rename packages/core/src/projects/{dependencyManager.ts => dependencies.ts} (89%) create mode 100644 packages/core/src/projects/fonts.ts delete mode 100644 packages/core/src/projects/index.ts create mode 100644 packages/core/src/projects/utils.ts create mode 100644 packages/core/src/projects/version.ts delete mode 100644 packages/rnv/coreTemplateFiles/global-config-template.json create mode 100644 packages/sdk-utils/src/constants.ts create mode 100644 packages/sdk-utils/src/fonts.ts create mode 100644 packages/sdk-utils/src/getConfigProps.ts create mode 100644 packages/sdk-utils/src/ipUtils.ts create mode 100644 packages/sdk-utils/src/utils.ts diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index db80314ae7..88bd499387 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -18,10 +18,16 @@ export * from './configs/templates'; export * from './context/contextProps'; export * from './configs/utils'; -export * from './projects'; +export * from './projects/appConfig'; +export * from './projects/assets'; +export * from './projects/fonts'; +export * from './projects/bootstrap'; +export * from './projects/version'; export * from './projects/npm'; export * from './projects/package'; -export * from './projects/dependencyManager'; +export * from './projects/dependencies'; +export * from './projects/fonts'; +export * from './projects/utils'; export * from './tasks'; export * from './tasks/constants'; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 85b712b078..af87c9220a 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -2,7 +2,6 @@ import merge from 'deepmerge'; import path from 'path'; import { getAppConfigBuildsFolder, getAppFolder } from '../context/contextProps'; import { parseRenativeConfigs } from '../configs'; -import { configureFonts } from '../projects'; import { copyFolderContentsRecursiveSync, fsExistsSync, @@ -27,6 +26,7 @@ import { NpmPackageFile } from '../configs/types'; import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; import { ConfigName } from '../enums/configName'; +import { AsyncCallback } from '../projects/types'; const _getPluginScope = (plugin: RenativeConfigPlugin | string): RnvPluginScope => { if (typeof plugin === 'string') { @@ -749,15 +749,6 @@ export const overrideFileContents = (dest: string, override: Record { - logDefault('installPackageDependenciesAndPlugins'); - - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); - await checkForPluginDependencies(); -}; - const _getPluginConfiguration = (c: RnvContext, pluginName: string) => { let renativePlugin: ConfigFilePlugin | undefined; let renativePluginPath; @@ -773,7 +764,7 @@ const _getPluginConfiguration = (c: RnvContext, pluginName: string) => { return renativePlugin; }; -export const checkForPluginDependencies = async () => { +export const checkForPluginDependencies = async (postInjectHandler?: AsyncCallback) => { const c = getContext(); const toAdd: Record = {}; @@ -831,7 +822,9 @@ export const checkForPluginDependencies = async () => { // Need to reload merged files await parseRenativeConfigs(); await configurePlugins(); - await installPackageDependenciesAndPlugins(); + if (postInjectHandler) { + await postInjectHandler(); + } } } }; diff --git a/packages/core/src/projects/appConfig.ts b/packages/core/src/projects/appConfig.ts new file mode 100644 index 0000000000..2ba7475ab8 --- /dev/null +++ b/packages/core/src/projects/appConfig.ts @@ -0,0 +1,65 @@ +import path from 'path'; +import { getAppConfigBuildsFolder, getAppFolder, getTimestampPathsConfig } from '../context/contextProps'; +import { isPlatformActive } from '../platforms'; +import { copyTemplatePluginsSync } from '../plugins'; +import { copyFolderContentsRecursiveSync, fsExistsSync } from '../system/fs'; +import { logDefault, logWarning } from '../logger'; +import { generateConfigPropInjects } from '../system/injectors'; +import { getContext } from '../context/provider'; + +export const copyBuildsFolder = () => + new Promise((resolve) => { + logDefault('copyBuildsFolder'); + const c = getContext(); + + if (!isPlatformActive(resolve)) return; + + const destPath = path.join(getAppFolder()); + const tsPathsConfig = getTimestampPathsConfig(); + + generateConfigPropInjects(); + const allInjects = [...c.configPropsInjects, ...c.systemPropsInjects, ...c.runtimePropsInjects]; + + // FOLDER MERGERS PROJECT CONFIG + const sourcePath1 = getAppConfigBuildsFolder(c.paths.project.appConfigBase.dir); + copyFolderContentsRecursiveSync(sourcePath1, destPath, true, undefined, false, allInjects, tsPathsConfig); + + // FOLDER MERGERS PROJECT CONFIG (PRIVATE) + const sourcePath1sec = getAppConfigBuildsFolder(c.paths.workspace.project.appConfigBase.dir); + copyFolderContentsRecursiveSync(sourcePath1sec, destPath, true, undefined, false, allInjects, tsPathsConfig); + + // DEPRECATED SHARED + if (c.runtime.currentPlatform?.isWebHosted) { + const sourcePathShared = path.join(c.paths.project.appConfigBase.dir, 'builds/_shared'); + if (fsExistsSync(sourcePathShared)) { + logWarning('Folder builds/_shared is DEPRECATED. use builds/ instead '); + } + copyFolderContentsRecursiveSync(sourcePathShared, getAppFolder(), true, undefined, false, allInjects); + } + + // FOLDER MERGERS FROM APP CONFIG + EXTEND + if (c.paths.appConfig.dirs) { + c.paths.appConfig.dirs.forEach((v) => { + const sourceV = getAppConfigBuildsFolder(v); + copyFolderContentsRecursiveSync(sourceV, destPath, true, undefined, false, allInjects, tsPathsConfig); + }); + } else { + copyFolderContentsRecursiveSync( + getAppConfigBuildsFolder(c.paths.appConfig.dir), + destPath, + true, + undefined, + false, + allInjects, + tsPathsConfig + ); + } + + // FOLDER MERGERS FROM APP CONFIG (PRIVATE) + const sourcePath0sec = getAppConfigBuildsFolder(c.paths.workspace.appConfig.dir); + copyFolderContentsRecursiveSync(sourcePath0sec, destPath, true, undefined, false, allInjects, tsPathsConfig); + + copyTemplatePluginsSync(c); + + resolve(); + }); diff --git a/packages/core/src/projects/assets.ts b/packages/core/src/projects/assets.ts new file mode 100644 index 0000000000..795290e686 --- /dev/null +++ b/packages/core/src/projects/assets.ts @@ -0,0 +1,202 @@ +import path from 'path'; +import { getPlatformProjectDir, getTimestampPathsConfig } from '../context/contextProps'; +import { isPlatformActive } from '../platforms'; +import { cleanFolder, copyFolderContentsRecursiveSync, fsExistsSync, mkdirSync } from '../system/fs'; +import { chalk, logDefault, logWarning, logDebug, logInfo } from '../logger'; +import { RnvPlatform } from '../types'; +import { getConfigProp } from '../context/contextProps'; +import { getContext } from '../context/provider'; +import { resolveRelativePackage } from './utils'; +import { RnvContext } from '../context/types'; + +export const copyRuntimeAssets = async () => { + logDefault('copyRuntimeAssets'); + const c = getContext(); + const destPath = path.join(c.paths.project.assets.dir, 'runtime'); + + // FOLDER MERGERS FROM APP CONFIG + EXTEND + if (c.paths.appConfig.dirs) { + c.paths.appConfig.dirs.forEach((v) => { + const sourcePath = path.join(v, 'assets/runtime'); + copyFolderContentsRecursiveSync(sourcePath, destPath); + }); + } else if (c.paths.appConfig.dir) { + const sourcePath = path.join(c.paths.appConfig.dir, 'assets/runtime'); + copyFolderContentsRecursiveSync(sourcePath, destPath); + } + + if (!c.buildConfig?.common) { + logDebug('BUILD_CONFIG', c.buildConfig); + logWarning( + `Your ${chalk().bold( + c.paths.appConfig.config + )} is misconfigured. (Maybe you have older version?). Missing ${chalk().bold( + '{ common: {} }' + )} object at root` + ); + + return true; + } + + return true; +}; + +// const _requiresAssetOverride = async (c: RnvConfig) => { +// const requiredAssets = c.runtime.engine?.platforms?.[c.platform]?.requiredAssets || []; + +// const assetsToCopy = []; +// const assetsDir = path.join(c.paths.project.appConfigBase.dir, 'assets', c.platform); + +// requiredAssets.forEach((v) => { +// const sourcePath = path.join(c.runtime.engine.originalTemplateAssetsDir, c.platform, v); + +// const destPath = path.join(assetsDir, v); + +// if (fsExistsSync(sourcePath)) { +// if (!fsExistsSync(destPath)) { +// assetsToCopy.push({ +// sourcePath, +// destPath, +// value: v, +// }); +// } +// } +// }); + +// const actionOverride = 'Override exisitng folder'; +// const actionMerge = 'Merge with existing folder'; +// const actionSkip = 'Skip. Warning: this might fail your build'; + +// if (assetsToCopy.length > 0) { +// if (!fsExistsSync(assetsDir)) { +// logInfo( +// `Required assets: ${chalk().bold( +// JSON.stringify(assetsToCopy.map((v) => v.value)) +// )} will be copied to ${chalk().bold('appConfigs/assets')} folder` +// ); +// return true; +// } + +// const { chosenAction } = await inquirerPrompt({ +// message: 'What to do next?', +// type: 'list', +// name: 'chosenAction', +// choices: [actionOverride, actionMerge, actionSkip], +// warningMessage: `Your appConfig/base/assets/${c.platform} exists but engine ${ +// c.runtime.engine.config.id +// } requires some additional assets: +// ${chalk().red(requiredAssets.join(','))}`, +// }); + +// if (chosenAction === actionOverride) { +// await removeDirs([assetsDir]); +// } + +// if (chosenAction === actionOverride || chosenAction === actionMerge) { +// return true; +// } +// } + +// return false; +// }; + +export const copyAssetsFolder = async (subPath?: string, customFn?: (c: RnvContext, platform: RnvPlatform) => void) => { + logDefault('copyAssetsFolder'); + + const c = getContext(); + const { platform } = c; + + if (!isPlatformActive()) return; + + const assetFolderPlatform = getConfigProp('assetFolderPlatform') || platform; + + if (assetFolderPlatform !== platform) { + logInfo( + `Found custom assetFolderPlatform: ${chalk().green( + assetFolderPlatform + )}. Will use it instead of deafult ${platform}` + ); + } + + const tsPathsConfig = getTimestampPathsConfig(); + + const assetSources = getConfigProp('assetSources') || []; + + const validAssetSources: Array = []; + + if (assetFolderPlatform) { + assetSources.forEach((v) => { + const assetsPath = path.join(resolveRelativePackage(c, v), assetFolderPlatform); + + if (fsExistsSync(assetsPath)) { + validAssetSources.push(assetsPath); + } else { + logWarning( + `AssetSources is specified as ${chalk().red(v)}. But path ${chalk().red(assetsPath)} was not found.` + ); + } + }); + } + + const destPath = path.join(getPlatformProjectDir()!, subPath || ''); + + // FOLDER MERGERS FROM EXTERNAL SOURCES + if (validAssetSources.length > 0) { + logInfo( + `Found custom assetSources at ${chalk().gray( + validAssetSources.join('/n') + )}. Will be used to generate assets.` + ); + validAssetSources.forEach((sourcePath) => { + copyFolderContentsRecursiveSync(sourcePath, destPath, true, undefined, false, undefined, tsPathsConfig, c); + }); + return; + } + + // FOLDER MERGERS FROM APP CONFIG + EXTEND + if (c.paths.appConfig.dirs) { + const hasAssetFolder = c.paths.appConfig.dirs.filter((v) => + fsExistsSync(path.join(v, `assets/${assetFolderPlatform}`)) + ).length; + // const requireOverride = await _requiresAssetOverride(c); + if (!hasAssetFolder) { + logWarning(`Your app is missing assets at ${chalk().red(c.paths.appConfig.dirs.join(','))}.`); + // await generateDefaultAssets( + // c, + // platform, + // path.join(c.paths.appConfig.dirs[0], `assets/${assetFolderPlatform}`) + // // requireOverride + // ); + } + } else { + const sourcePath = path.join(c.paths.appConfig.dir, `assets/${assetFolderPlatform}`); + if (!fsExistsSync(sourcePath)) { + logWarning(`Your app is missing assets at ${chalk().red(sourcePath)}.`); + // await generateDefaultAssets(c, platform, sourcePath); + } + } + + if (customFn) { + return customFn(c, platform); + } + + // FOLDER MERGERS FROM APP CONFIG + EXTEND + if (c.paths.appConfig.dirs) { + c.paths.appConfig.dirs.forEach((v) => { + const sourcePath = path.join(v, `assets/${assetFolderPlatform}`); + copyFolderContentsRecursiveSync(sourcePath, destPath, true, undefined, false, undefined, tsPathsConfig, c); + }); + } else { + const sourcePath = path.join(c.paths.appConfig.dir, `assets/${assetFolderPlatform}`); + copyFolderContentsRecursiveSync(sourcePath, destPath, true, undefined, false, undefined, tsPathsConfig, c); + } +}; + +export const cleanPlaformAssets = async () => { + const c = getContext(); + logDefault('cleanPlaformAssets'); + + await cleanFolder(c.paths.project.assets.dir); + mkdirSync(c.paths.project.assets.runtimeDir); + return true; +}; diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts new file mode 100644 index 0000000000..2c58cc743e --- /dev/null +++ b/packages/core/src/projects/bootstrap.ts @@ -0,0 +1,167 @@ +import path from 'path'; +import { copyFolderContentsRecursiveSync, readObjectSync, writeFileSync, fsExistsSync } from '../system/fs'; +import { installPackageDependencies, isYarnInstalled } from './npm'; +import { executeAsync } from '../system/exec'; +import { logDefault, logInfo } from '../logger'; +import { configureTemplateFiles, configureEntryPoint } from '../templates'; +import { parseRenativeConfigs } from '../configs'; +import { ConfigFileApp, ConfigFileEngine, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; +import { ConfigName } from '../enums/configName'; +import { getContext } from '../context/provider'; + +export const checkAndBootstrapIfRequired = async () => { + logDefault('checkAndBootstrapIfRequired'); + const c = getContext(); + + const template: string = c.program?.template; + if (!c.paths.project.configExists && template) { + await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${template}`, { + cwd: c.paths.project.dir, + }); + + const templateArr = template.split('@').filter((v) => v !== ''); + const templateDir = template.startsWith('@') ? `@${templateArr[0]}` : templateArr[0]; + const templatePath = path.join(c.paths.project.dir, 'node_modules', templateDir); + + c.paths.template.dir = templatePath; + c.paths.template.configTemplate = path.join(templatePath, ConfigName.renativeTemplate); + + const templateObj = readObjectSync(c.paths.template.configTemplate); + const appConfigPath = path.join(c.paths.project.appConfigsDir, c.program.appConfigID, 'renative.json'); + //TODO: Investigate whether we really need to support this: supportedPlatforms inside appconfig + const appConfigObj = readObjectSync(appConfigPath); + const supportedPlatforms = appConfigObj?.defaults?.supportedPlatforms || []; + //========= + const engineTemplates = c.files.rnv.projectTemplates?.config?.engineTemplates; + const rnvPlatforms = c.files.rnv.projectTemplates?.config?.platformTemplates || {}; + const activeEngineKeys: Array = []; + + if (engineTemplates) { + supportedPlatforms.forEach((supPlat) => { + Object.keys(engineTemplates).forEach((eKey) => { + if (engineTemplates[eKey].id === rnvPlatforms[supPlat]?.engine) { + activeEngineKeys.push(eKey); + } + }); + }); + } + + if (!templateObj) { + return; + } + + const config = { + ...templateObj, + }; + + // Clean unused engines + if (config.engines) { + Object.keys(config.engines).forEach((k) => { + if (!activeEngineKeys.includes(k)) { + delete config.engines?.[k]; + } + }); + } + + if (config.templateConfig?.package_json) { + const pkgJson = config.templateConfig.package_json; + if (!pkgJson.devDependencies) pkgJson.devDependencies = {}; + if (!pkgJson.dependencies) pkgJson.dependencies = {}; + c.files.project.package = pkgJson; + + const installPromises: Array> = []; + Object.keys(pkgJson.devDependencies).forEach((devDepKey) => { + if (activeEngineKeys.includes(devDepKey)) { + installPromises.push( + executeAsync(`npx yarn add ${devDepKey}@${pkgJson.devDependencies?.[devDepKey]}`, { + cwd: c.paths.project.dir, + }) + ); + } + }); + + if (installPromises.length) { + await Promise.all(installPromises); + + logInfo('Installed engines DONE'); + + activeEngineKeys.forEach((aek) => { + const engineConfigPath = path.join( + c.paths.project.dir, + 'node_modules', + aek, + 'renative.engine.json' + ); + const eConfig = readObjectSync(engineConfigPath); + if (eConfig?.platforms) { + supportedPlatforms.forEach((supPlat) => { + const engPlatNpm = eConfig.platforms?.[supPlat]?.npm; + if (engPlatNpm) { + const engPlatDeps = engPlatNpm.dependencies; + const deps = pkgJson.dependencies || {}; + pkgJson.dependencies = deps; + if (engPlatDeps) { + Object.keys(engPlatDeps).forEach((engPlatDepKey) => { + if (!deps[engPlatDepKey]) { + logInfo(`Installing active engine dependency ${engPlatDepKey}`); + deps[engPlatDepKey] = engPlatDeps[engPlatDepKey]; + } + }); + } + + const engPlatDevDeps = engPlatNpm.devDependencies; + if (engPlatDevDeps) { + Object.keys(engPlatDevDeps).forEach((engPlatDevDepKey) => { + pkgJson.devDependencies = pkgJson.devDependencies || {}; + if (!pkgJson.devDependencies[engPlatDevDepKey]) { + logInfo(`Installing active engine dependency ${engPlatDevDepKey}`); + pkgJson.devDependencies[engPlatDevDepKey] = + engPlatDevDeps[engPlatDevDepKey]; + } + }); + } + + const engPlatOptDeps = engPlatNpm.optionalDependencies; + if (engPlatOptDeps) { + Object.keys(engPlatOptDeps).forEach((engPlatOptDepKey) => { + pkgJson.optionalDependencies = pkgJson.optionalDependencies || {}; + if (!pkgJson.optionalDependencies[engPlatOptDepKey]) { + logInfo(`Installing active engine dependency ${engPlatOptDepKey}`); + pkgJson.optionalDependencies[engPlatOptDepKey] = + engPlatOptDeps[engPlatOptDepKey]; + } + }); + } + } + }); + } + }); + } + + writeFileSync(c.paths.project.package, pkgJson); + } + + delete config.templateConfig; + writeFileSync(c.paths.project.config, config); + + const appConfigsPath = path.join(templatePath, 'appConfigs'); + if (fsExistsSync(appConfigsPath)) { + copyFolderContentsRecursiveSync(appConfigsPath, path.join(c.paths.project.appConfigsDir)); + } + + await installPackageDependencies(); + + if (c.program.npxMode) { + return; + } + + await parseRenativeConfigs(); + + await configureTemplateFiles(); + await configureEntryPoint(c.platform); + // await applyTemplate(c); + + // copyFolderContentsRecursiveSync(templatePath, c.paths.project.dir); + } + return true; +}; diff --git a/packages/core/src/projects/dependencyManager.ts b/packages/core/src/projects/dependencies.ts similarity index 89% rename from packages/core/src/projects/dependencyManager.ts rename to packages/core/src/projects/dependencies.ts index 454d0254ce..29a38fa038 100644 --- a/packages/core/src/projects/dependencyManager.ts +++ b/packages/core/src/projects/dependencies.ts @@ -5,14 +5,13 @@ import { executeAsync } from '../system/exec'; import { installPackageDependencies } from './npm'; import { chalk, logInfo, logDebug, logDefault } from '../logger'; import { getEngineRunnerByPlatform } from '../engines'; -import { overrideTemplatePlugins } from '../plugins'; -import { configureFonts } from '.'; import { RnvContext } from '../context/types'; import { inquirerPrompt } from '../api'; import { writeRenativeConfigFile } from '../configs/utils'; import { fsExistsSync } from '../system/fs'; import { NpmDepKey, NpmPackageFile } from '../configs/types'; import { getContext } from '../context/provider'; +import { AsyncCallback } from './types'; export const checkIfProjectAndNodeModulesExists = async () => { logDefault('checkIfProjectAndNodeModulesExists'); @@ -31,7 +30,8 @@ const injectProjectDependency = async ( dependency: string, version: string, type: NpmDepKey, - skipInstall = false + skipInstall = false, + postInjectHandler: AsyncCallback | undefined ) => { logDefault('injectProjectDependency'); @@ -43,9 +43,9 @@ const injectProjectDependency = async ( dep[dependency] = version; writeRenativeConfigFile(existingPath, currentPackage); if (!skipInstall) { - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); + if (postInjectHandler) { + await postInjectHandler(); + } } return true; } @@ -59,7 +59,8 @@ export const checkRequiredPackage = async ( type: NpmDepKey, skipAsking = false, skipInstall = false, - skipVersionCheck = false + skipVersionCheck = false, + postInjectHandler: AsyncCallback | undefined ) => { logDebug('checkRequiredPackage'); if (!pkg) return false; @@ -85,7 +86,7 @@ export const checkRequiredPackage = async ( // eslint-disable-next-line no-empty } catch (e) {} } - return injectProjectDependency(c, pkg, version || latestVersion, type, skipInstall); + return injectProjectDependency(c, pkg, version || latestVersion, type, skipInstall, postInjectHandler); } } else if (version === '') { // package exists, checking version only if version is not @@ -119,7 +120,7 @@ export const checkRequiredPackage = async ( } if (confirm) { - return injectProjectDependency(c, pkg, latestVersion, type, skipInstall); + return injectProjectDependency(c, pkg, latestVersion, type, skipInstall, postInjectHandler); } } } @@ -128,7 +129,10 @@ export const checkRequiredPackage = async ( return false; }; -export const injectPlatformDependencies = async () => { +export const injectPlatformDependencies = async ( + handleExtraDepsCallback?: AsyncCallback, + postInjectHandler?: AsyncCallback +) => { logDefault('injectPlatformDependencies'); const c = getContext(); const { platform } = c; @@ -145,7 +149,7 @@ export const injectPlatformDependencies = async () => { if (deps) { Object.keys(deps).forEach((dep) => { // iterate over deps - acc.push(checkRequiredPackage(c, dep, deps[dep], type, true, true)); + acc.push(checkRequiredPackage(c, dep, deps[dep], type, true, true, false, postInjectHandler)); }); } @@ -167,9 +171,9 @@ export const injectPlatformDependencies = async () => { logInfo( `Found extra npm dependencies required by ${chalk().bold(engine.config.id)} engine. ADDING...DONE` ); - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); + if (handleExtraDepsCallback) { + await handleExtraDepsCallback(); + } } } } diff --git a/packages/core/src/projects/fonts.ts b/packages/core/src/projects/fonts.ts new file mode 100644 index 0000000000..713d5feeeb --- /dev/null +++ b/packages/core/src/projects/fonts.ts @@ -0,0 +1,57 @@ +import { getConfigProp } from '../context/contextProps'; +import { getContext } from '../context/provider'; +import { logDefault } from '../logger'; +import { fsExistsSync, fsReaddirSync } from '../system/fs'; +import { ParseFontsCallback } from './types'; +import { RnvContext } from '../context/types'; +import { parsePlugins } from '../plugins'; +import { resolveRelativePackage } from './utils'; + +export const parseFonts = (callback: ParseFontsCallback) => { + logDefault('parseFonts'); + + const c = getContext(); + + if (c.buildConfig) { + // FONTS - PROJECT CONFIG + if (fsExistsSync(c.paths.project.appConfigBase.fontsDir)) { + fsReaddirSync(c.paths.project.appConfigBase.fontsDir).forEach((font) => { + if (callback) { + callback(font, c.paths.project.appConfigBase.fontsDir); + } + }); + } + // FONTS - APP CONFIG + if (c.paths.appConfig.fontsDirs) { + c.paths.appConfig.fontsDirs.forEach((v) => { + if (fsExistsSync(v)) { + fsReaddirSync(v).forEach((font) => { + if (callback) callback(font, v); + }); + } + }); + } else if (fsExistsSync(c.paths.appConfig.fontsDir)) { + fsReaddirSync(c.paths.appConfig.fontsDir).forEach((font) => { + if (callback) callback(font, c.paths.appConfig.fontsDir); + }); + } + _parseFontSources(c, getConfigProp('fontSources') || [], callback); + // PLUGIN FONTS + parsePlugins((plugin) => { + if (plugin.config?.fontSources) { + _parseFontSources(c, plugin.config?.fontSources, callback); + } + }, true); + } +}; + +const _parseFontSources = (c: RnvContext, fontSourcesArr: Array, callback: ParseFontsCallback) => { + const fontSources = fontSourcesArr.map((v) => resolveRelativePackage(c, v)); + fontSources.forEach((fontSourceDir) => { + if (fsExistsSync(fontSourceDir)) { + fsReaddirSync(fontSourceDir).forEach((font) => { + if (callback) callback(font, fontSourceDir); + }); + } + }); +}; diff --git a/packages/core/src/projects/index.ts b/packages/core/src/projects/index.ts deleted file mode 100644 index f66b00de95..0000000000 --- a/packages/core/src/projects/index.ts +++ /dev/null @@ -1,642 +0,0 @@ -import path from 'path'; -import { - getAppConfigBuildsFolder, - getAppFolder, - getPlatformProjectDir, - getTimestampPathsConfig, -} from '../context/contextProps'; -import { isPlatformActive } from '../platforms'; -import { copyTemplatePluginsSync, parsePlugins } from '../plugins'; -import { - cleanFolder, - copyFolderContentsRecursiveSync, - copyFileSync, - mkdirSync, - readObjectSync, - writeFileSync, - fsWriteFileSync, - fsExistsSync, - fsReaddirSync, - fsReadFileSync, - resolvePackage, -} from '../system/fs'; -import { installPackageDependencies, isYarnInstalled } from './npm'; -import { executeAsync } from '../system/exec'; -import { chalk, logDefault, logWarning, logDebug, logInfo, getCurrentCommand } from '../logger'; -import { configureTemplateFiles, configureEntryPoint } from '../templates'; -import { parseRenativeConfigs } from '../configs'; -import { RnvContext } from '../context/types'; -import { RnvPlatform } from '../types'; -import { ParseFontsCallback } from './types'; -import { inquirerPrompt } from '../api'; -import { upgradeProjectDependencies } from '../configs/configProject'; -import { generateConfigPropInjects } from '../system/injectors'; -import { ConfigFileApp, ConfigFileEngine, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -import { getConfigProp } from '../context/contextProps'; -import { ConfigName } from '../enums/configName'; -import { getContext } from '../context/provider'; - -export const checkAndBootstrapIfRequired = async () => { - logDefault('checkAndBootstrapIfRequired'); - const c = getContext(); - - const template: string = c.program?.template; - if (!c.paths.project.configExists && template) { - await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${template}`, { - cwd: c.paths.project.dir, - }); - - const templateArr = template.split('@').filter((v) => v !== ''); - const templateDir = template.startsWith('@') ? `@${templateArr[0]}` : templateArr[0]; - const templatePath = path.join(c.paths.project.dir, 'node_modules', templateDir); - - c.paths.template.dir = templatePath; - c.paths.template.configTemplate = path.join(templatePath, ConfigName.renativeTemplate); - - const templateObj = readObjectSync(c.paths.template.configTemplate); - const appConfigPath = path.join(c.paths.project.appConfigsDir, c.program.appConfigID, 'renative.json'); - //TODO: Investigate whether we really need to support this: supportedPlatforms inside appconfig - const appConfigObj = readObjectSync(appConfigPath); - const supportedPlatforms = appConfigObj?.defaults?.supportedPlatforms || []; - //========= - const engineTemplates = c.files.rnv.projectTemplates?.config?.engineTemplates; - const rnvPlatforms = c.files.rnv.projectTemplates?.config?.platformTemplates || {}; - const activeEngineKeys: Array = []; - - if (engineTemplates) { - supportedPlatforms.forEach((supPlat) => { - Object.keys(engineTemplates).forEach((eKey) => { - if (engineTemplates[eKey].id === rnvPlatforms[supPlat]?.engine) { - activeEngineKeys.push(eKey); - } - }); - }); - } - - if (!templateObj) { - return; - } - - const config = { - ...templateObj, - }; - - // Clean unused engines - if (config.engines) { - Object.keys(config.engines).forEach((k) => { - if (!activeEngineKeys.includes(k)) { - delete config.engines?.[k]; - } - }); - } - - if (config.templateConfig?.package_json) { - const pkgJson = config.templateConfig.package_json; - if (!pkgJson.devDependencies) pkgJson.devDependencies = {}; - if (!pkgJson.dependencies) pkgJson.dependencies = {}; - c.files.project.package = pkgJson; - - const installPromises: Array> = []; - Object.keys(pkgJson.devDependencies).forEach((devDepKey) => { - if (activeEngineKeys.includes(devDepKey)) { - installPromises.push( - executeAsync(`npx yarn add ${devDepKey}@${pkgJson.devDependencies?.[devDepKey]}`, { - cwd: c.paths.project.dir, - }) - ); - } - }); - - if (installPromises.length) { - await Promise.all(installPromises); - - logInfo('Installed engines DONE'); - - activeEngineKeys.forEach((aek) => { - const engineConfigPath = path.join( - c.paths.project.dir, - 'node_modules', - aek, - 'renative.engine.json' - ); - const eConfig = readObjectSync(engineConfigPath); - if (eConfig?.platforms) { - supportedPlatforms.forEach((supPlat) => { - const engPlatNpm = eConfig.platforms?.[supPlat]?.npm; - if (engPlatNpm) { - const engPlatDeps = engPlatNpm.dependencies; - const deps = pkgJson.dependencies || {}; - pkgJson.dependencies = deps; - if (engPlatDeps) { - Object.keys(engPlatDeps).forEach((engPlatDepKey) => { - if (!deps[engPlatDepKey]) { - logInfo(`Installing active engine dependency ${engPlatDepKey}`); - deps[engPlatDepKey] = engPlatDeps[engPlatDepKey]; - } - }); - } - - const engPlatDevDeps = engPlatNpm.devDependencies; - if (engPlatDevDeps) { - Object.keys(engPlatDevDeps).forEach((engPlatDevDepKey) => { - pkgJson.devDependencies = pkgJson.devDependencies || {}; - if (!pkgJson.devDependencies[engPlatDevDepKey]) { - logInfo(`Installing active engine dependency ${engPlatDevDepKey}`); - pkgJson.devDependencies[engPlatDevDepKey] = - engPlatDevDeps[engPlatDevDepKey]; - } - }); - } - - const engPlatOptDeps = engPlatNpm.optionalDependencies; - if (engPlatOptDeps) { - Object.keys(engPlatOptDeps).forEach((engPlatOptDepKey) => { - pkgJson.optionalDependencies = pkgJson.optionalDependencies || {}; - if (!pkgJson.optionalDependencies[engPlatOptDepKey]) { - logInfo(`Installing active engine dependency ${engPlatOptDepKey}`); - pkgJson.optionalDependencies[engPlatOptDepKey] = - engPlatOptDeps[engPlatOptDepKey]; - } - }); - } - } - }); - } - }); - } - - writeFileSync(c.paths.project.package, pkgJson); - } - - delete config.templateConfig; - writeFileSync(c.paths.project.config, config); - - const appConfigsPath = path.join(templatePath, 'appConfigs'); - if (fsExistsSync(appConfigsPath)) { - copyFolderContentsRecursiveSync(appConfigsPath, path.join(c.paths.project.appConfigsDir)); - } - - await installPackageDependencies(); - - if (c.program.npxMode) { - return; - } - - await parseRenativeConfigs(); - - await configureTemplateFiles(); - await configureEntryPoint(c.platform); - // await applyTemplate(c); - - // copyFolderContentsRecursiveSync(templatePath, c.paths.project.dir); - } - return true; -}; - -export const configureFonts = async () => { - const c = getContext(); - - // FONTS - let fontsObj = 'export default ['; - - const duplicateFontCheck: Array = []; - parseFonts((font, dir) => { - if (font.includes('.ttf') || font.includes('.otf') || font.includes('.woff')) { - const keOriginal = font.split('.')[0]; - const keyNormalised = keOriginal.replace(/__/g, ' '); - const includedFonts = getConfigProp('includedFonts'); - if (includedFonts) { - if ( - includedFonts.includes('*') || - includedFonts.includes(keOriginal) || - includedFonts.includes(keyNormalised) - ) { - if (font && !duplicateFontCheck.includes(font)) { - duplicateFontCheck.push(font); - const fontSource = path.join(dir, font).replace(/\\/g, '\\\\'); - if (fsExistsSync(fontSource)) { - // const fontFolder = path.join(appFolder, 'app/src/main/assets/fonts'); - // mkdirSync(fontFolder); - // const fontDest = path.join(fontFolder, font); - // copyFileSync(fontSource, fontDest); - fontsObj += `{ - fontFamily: '${keyNormalised}', - file: require('${fontSource}'), - },`; - } else { - logWarning(`Font ${chalk().bold(fontSource)} doesn't exist! Skipping.`); - } - } - } - } - } - }); - - fontsObj += '];'; - if (!fsExistsSync(c.paths.project.assets.runtimeDir)) { - mkdirSync(c.paths.project.assets.runtimeDir); - } - const fontJsPath = path.join(c.paths.project.assets.dir, 'runtime', 'fonts.web.js'); - if (fsExistsSync(fontJsPath)) { - const existingFileContents = fsReadFileSync(fontJsPath).toString(); - - if (existingFileContents !== fontsObj) { - logDebug('newFontsJsFile'); - fsWriteFileSync(fontJsPath, fontsObj); - } - } else { - logDebug('newFontsJsFile'); - fsWriteFileSync(fontJsPath, fontsObj); - } - - const coreTemplateFiles = path.resolve(c.paths.rnv.dir, 'coreTemplateFiles'); - copyFileSync( - path.resolve(coreTemplateFiles, 'fontManager.js'), - path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.js') - ); - copyFileSync( - path.resolve(coreTemplateFiles, 'fontManager.js'), - path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.server.web.js') - ); - copyFileSync( - path.resolve(coreTemplateFiles, 'fontManager.web.js'), - path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.web.js') - ); - - return true; -}; - -export const copyRuntimeAssets = async () => { - logDefault('copyRuntimeAssets'); - const c = getContext(); - const destPath = path.join(c.paths.project.assets.dir, 'runtime'); - - // FOLDER MERGERS FROM APP CONFIG + EXTEND - if (c.paths.appConfig.dirs) { - c.paths.appConfig.dirs.forEach((v) => { - const sourcePath = path.join(v, 'assets/runtime'); - copyFolderContentsRecursiveSync(sourcePath, destPath); - }); - } else if (c.paths.appConfig.dir) { - const sourcePath = path.join(c.paths.appConfig.dir, 'assets/runtime'); - copyFolderContentsRecursiveSync(sourcePath, destPath); - } - - if (!c.buildConfig?.common) { - logDebug('BUILD_CONFIG', c.buildConfig); - logWarning( - `Your ${chalk().bold( - c.paths.appConfig.config - )} is misconfigured. (Maybe you have older version?). Missing ${chalk().bold( - '{ common: {} }' - )} object at root` - ); - - return true; - } - - return true; -}; - -export const parseFonts = (callback: ParseFontsCallback) => { - logDefault('parseFonts'); - - const c = getContext(); - - if (c.buildConfig) { - // FONTS - PROJECT CONFIG - if (fsExistsSync(c.paths.project.appConfigBase.fontsDir)) { - fsReaddirSync(c.paths.project.appConfigBase.fontsDir).forEach((font) => { - if (callback) { - callback(font, c.paths.project.appConfigBase.fontsDir); - } - }); - } - // FONTS - APP CONFIG - if (c.paths.appConfig.fontsDirs) { - c.paths.appConfig.fontsDirs.forEach((v) => { - if (fsExistsSync(v)) { - fsReaddirSync(v).forEach((font) => { - if (callback) callback(font, v); - }); - } - }); - } else if (fsExistsSync(c.paths.appConfig.fontsDir)) { - fsReaddirSync(c.paths.appConfig.fontsDir).forEach((font) => { - if (callback) callback(font, c.paths.appConfig.fontsDir); - }); - } - _parseFontSources(c, getConfigProp('fontSources') || [], callback); - // PLUGIN FONTS - parsePlugins((plugin) => { - if (plugin.config?.fontSources) { - _parseFontSources(c, plugin.config?.fontSources, callback); - } - }, true); - } -}; - -const _parseFontSources = (c: RnvContext, fontSourcesArr: Array, callback: ParseFontsCallback) => { - const fontSources = fontSourcesArr.map((v) => _resolvePackage(c, v)); - fontSources.forEach((fontSourceDir) => { - if (fsExistsSync(fontSourceDir)) { - fsReaddirSync(fontSourceDir).forEach((font) => { - if (callback) callback(font, fontSourceDir); - }); - } - }); -}; - -const _resolvePackage = (c: RnvContext, v: string) => { - if (v?.startsWith?.('./')) { - return path.join(c.paths.project.dir, v); - } - return resolvePackage(v); -}; - -// const _requiresAssetOverride = async (c: RnvConfig) => { -// const requiredAssets = c.runtime.engine?.platforms?.[c.platform]?.requiredAssets || []; - -// const assetsToCopy = []; -// const assetsDir = path.join(c.paths.project.appConfigBase.dir, 'assets', c.platform); - -// requiredAssets.forEach((v) => { -// const sourcePath = path.join(c.runtime.engine.originalTemplateAssetsDir, c.platform, v); - -// const destPath = path.join(assetsDir, v); - -// if (fsExistsSync(sourcePath)) { -// if (!fsExistsSync(destPath)) { -// assetsToCopy.push({ -// sourcePath, -// destPath, -// value: v, -// }); -// } -// } -// }); - -// const actionOverride = 'Override exisitng folder'; -// const actionMerge = 'Merge with existing folder'; -// const actionSkip = 'Skip. Warning: this might fail your build'; - -// if (assetsToCopy.length > 0) { -// if (!fsExistsSync(assetsDir)) { -// logInfo( -// `Required assets: ${chalk().bold( -// JSON.stringify(assetsToCopy.map((v) => v.value)) -// )} will be copied to ${chalk().bold('appConfigs/assets')} folder` -// ); -// return true; -// } - -// const { chosenAction } = await inquirerPrompt({ -// message: 'What to do next?', -// type: 'list', -// name: 'chosenAction', -// choices: [actionOverride, actionMerge, actionSkip], -// warningMessage: `Your appConfig/base/assets/${c.platform} exists but engine ${ -// c.runtime.engine.config.id -// } requires some additional assets: -// ${chalk().red(requiredAssets.join(','))}`, -// }); - -// if (chosenAction === actionOverride) { -// await removeDirs([assetsDir]); -// } - -// if (chosenAction === actionOverride || chosenAction === actionMerge) { -// return true; -// } -// } - -// return false; -// }; - -export const copyAssetsFolder = async (subPath?: string, customFn?: (c: RnvContext, platform: RnvPlatform) => void) => { - logDefault('copyAssetsFolder'); - - const c = getContext(); - const { platform } = c; - - if (!isPlatformActive()) return; - - const assetFolderPlatform = getConfigProp('assetFolderPlatform') || platform; - - if (assetFolderPlatform !== platform) { - logInfo( - `Found custom assetFolderPlatform: ${chalk().green( - assetFolderPlatform - )}. Will use it instead of deafult ${platform}` - ); - } - - const tsPathsConfig = getTimestampPathsConfig(); - - const assetSources = getConfigProp('assetSources') || []; - - const validAssetSources: Array = []; - - if (assetFolderPlatform) { - assetSources.forEach((v) => { - const assetsPath = path.join(_resolvePackage(c, v), assetFolderPlatform); - - if (fsExistsSync(assetsPath)) { - validAssetSources.push(assetsPath); - } else { - logWarning( - `AssetSources is specified as ${chalk().red(v)}. But path ${chalk().red(assetsPath)} was not found.` - ); - } - }); - } - - const destPath = path.join(getPlatformProjectDir()!, subPath || ''); - - // FOLDER MERGERS FROM EXTERNAL SOURCES - if (validAssetSources.length > 0) { - logInfo( - `Found custom assetSources at ${chalk().gray( - validAssetSources.join('/n') - )}. Will be used to generate assets.` - ); - validAssetSources.forEach((sourcePath) => { - copyFolderContentsRecursiveSync(sourcePath, destPath, true, undefined, false, undefined, tsPathsConfig, c); - }); - return; - } - - // FOLDER MERGERS FROM APP CONFIG + EXTEND - if (c.paths.appConfig.dirs) { - const hasAssetFolder = c.paths.appConfig.dirs.filter((v) => - fsExistsSync(path.join(v, `assets/${assetFolderPlatform}`)) - ).length; - // const requireOverride = await _requiresAssetOverride(c); - if (!hasAssetFolder) { - logWarning(`Your app is missing assets at ${chalk().red(c.paths.appConfig.dirs.join(','))}.`); - // await generateDefaultAssets( - // c, - // platform, - // path.join(c.paths.appConfig.dirs[0], `assets/${assetFolderPlatform}`) - // // requireOverride - // ); - } - } else { - const sourcePath = path.join(c.paths.appConfig.dir, `assets/${assetFolderPlatform}`); - if (!fsExistsSync(sourcePath)) { - logWarning(`Your app is missing assets at ${chalk().red(sourcePath)}.`); - // await generateDefaultAssets(c, platform, sourcePath); - } - } - - if (customFn) { - return customFn(c, platform); - } - - // FOLDER MERGERS FROM APP CONFIG + EXTEND - if (c.paths.appConfig.dirs) { - c.paths.appConfig.dirs.forEach((v) => { - const sourcePath = path.join(v, `assets/${assetFolderPlatform}`); - copyFolderContentsRecursiveSync(sourcePath, destPath, true, undefined, false, undefined, tsPathsConfig, c); - }); - } else { - const sourcePath = path.join(c.paths.appConfig.dir, `assets/${assetFolderPlatform}`); - copyFolderContentsRecursiveSync(sourcePath, destPath, true, undefined, false, undefined, tsPathsConfig, c); - } -}; - -//NOTE: Default assets have been removed from engines -// const generateDefaultAssets = async (c: RnvConfig, platform, sourcePath, forceTrue) => { -// logDefault('generateDefaultAssets'); -// let confirmAssets = true; -// if (c.program.ci !== true && c.program.yes !== true && !forceTrue) { -// const { confirm } = await inquirerPrompt({ -// type: 'confirm', -// message: `It seems you don't have assets configured in ${chalk().bold( -// sourcePath -// )} do you want generate default ones?`, -// }); -// confirmAssets = confirm; -// } - -// if (confirmAssets) { -// const engine = getEngineRunnerByPlatform(c, c.platform); -// if (fsExistsSync(path.join(engine.originalTemplateAssetsDir, platform))) { -// copyFolderContentsRecursiveSync(path.join(engine.originalTemplateAssetsDir, platform), sourcePath); -// } else { -// logWarning('Currently used engine does not have default assets, creating an empty folder'); -// mkdirSync(sourcePath); -// } -// } -// }; - -export const copyBuildsFolder = () => - new Promise((resolve) => { - logDefault('copyBuildsFolder'); - const c = getContext(); - - if (!isPlatformActive(resolve)) return; - - const destPath = path.join(getAppFolder()); - const tsPathsConfig = getTimestampPathsConfig(); - - generateConfigPropInjects(); - const allInjects = [...c.configPropsInjects, ...c.systemPropsInjects, ...c.runtimePropsInjects]; - - // FOLDER MERGERS PROJECT CONFIG - const sourcePath1 = getAppConfigBuildsFolder(c.paths.project.appConfigBase.dir); - copyFolderContentsRecursiveSync(sourcePath1, destPath, true, undefined, false, allInjects, tsPathsConfig); - - // FOLDER MERGERS PROJECT CONFIG (PRIVATE) - const sourcePath1sec = getAppConfigBuildsFolder(c.paths.workspace.project.appConfigBase.dir); - copyFolderContentsRecursiveSync(sourcePath1sec, destPath, true, undefined, false, allInjects, tsPathsConfig); - - // DEPRECATED SHARED - if (c.runtime.currentPlatform?.isWebHosted) { - const sourcePathShared = path.join(c.paths.project.appConfigBase.dir, 'builds/_shared'); - if (fsExistsSync(sourcePathShared)) { - logWarning('Folder builds/_shared is DEPRECATED. use builds/ instead '); - } - copyFolderContentsRecursiveSync(sourcePathShared, getAppFolder(), true, undefined, false, allInjects); - } - - // FOLDER MERGERS FROM APP CONFIG + EXTEND - if (c.paths.appConfig.dirs) { - c.paths.appConfig.dirs.forEach((v) => { - const sourceV = getAppConfigBuildsFolder(v); - copyFolderContentsRecursiveSync(sourceV, destPath, true, undefined, false, allInjects, tsPathsConfig); - }); - } else { - copyFolderContentsRecursiveSync( - getAppConfigBuildsFolder(c.paths.appConfig.dir), - destPath, - true, - undefined, - false, - allInjects, - tsPathsConfig - ); - } - - // FOLDER MERGERS FROM APP CONFIG (PRIVATE) - const sourcePath0sec = getAppConfigBuildsFolder(c.paths.workspace.appConfig.dir); - copyFolderContentsRecursiveSync(sourcePath0sec, destPath, true, undefined, false, allInjects, tsPathsConfig); - - copyTemplatePluginsSync(c); - - resolve(); - }); - -export const versionCheck = async (c: RnvContext) => { - logDefault('versionCheck'); - - if (c.runtime.versionCheckCompleted || c.files.project?.config?.skipAutoUpdate || c.program.skipDependencyCheck) { - return true; - } - c.runtime.rnvVersionRunner = c.files.rnv?.package?.version || 'unknown'; - c.runtime.rnvVersionProject = - c.files.project?.package?.devDependencies?.rnv || c.files.project?.package?.dependencies?.rnv || 'unknown'; - logDefault( - `versionCheck:rnvRunner:${c.runtime.rnvVersionRunner},rnvProject:${c.runtime.rnvVersionProject}`, - chalk().grey - ); - if (c.runtime.rnvVersionRunner && c.runtime.rnvVersionProject) { - if (c.runtime.rnvVersionRunner !== c.runtime.rnvVersionProject && !c.program.skipRnvCheck) { - const recCmd = chalk().bold(`$ npx ${getCurrentCommand(true)}`); - const actionNoUpdate = 'Continue and skip updating package.json'; - const actionWithUpdate = 'Continue and update package.json'; - const actionUpgrade = `Upgrade project to ${c.runtime.rnvVersionRunner}`; - - const { chosenAction } = await inquirerPrompt({ - message: 'What to do next?', - type: 'list', - name: 'chosenAction', - choices: [actionNoUpdate, actionWithUpdate, actionUpgrade], - warningMessage: `You are running $rnv v${chalk().red( - c.runtime.rnvVersionRunner - )} against project built with rnv v${chalk().red( - c.runtime.rnvVersionProject - )}. This might result in unexpected behaviour! -It is recommended that you run your rnv command with npx prefix: ${recCmd} . or manually update your devDependencies.rnv version in your package.json.`, - }); - - c.runtime.versionCheckCompleted = true; - - c.runtime.skipPackageUpdate = chosenAction === actionNoUpdate; - - if (chosenAction === actionUpgrade) { - upgradeProjectDependencies(c.runtime.rnvVersionRunner); - } - } - } - return true; -}; - -export const cleanPlaformAssets = async () => { - const c = getContext(); - logDefault('cleanPlaformAssets'); - - await cleanFolder(c.paths.project.assets.dir); - mkdirSync(c.paths.project.assets.runtimeDir); - return true; -}; diff --git a/packages/core/src/projects/types.ts b/packages/core/src/projects/types.ts index 2cd2fda11a..3ae6f08c25 100644 --- a/packages/core/src/projects/types.ts +++ b/packages/core/src/projects/types.ts @@ -1 +1,3 @@ export type ParseFontsCallback = (font: string, dir: string) => void; + +export type AsyncCallback = () => Promise; diff --git a/packages/core/src/projects/utils.ts b/packages/core/src/projects/utils.ts new file mode 100644 index 0000000000..d0bd375262 --- /dev/null +++ b/packages/core/src/projects/utils.ts @@ -0,0 +1,10 @@ +import path from 'path'; +import { RnvContext } from '../context/types'; +import { resolvePackage } from '../system/fs'; + +export const resolveRelativePackage = (c: RnvContext, v: string) => { + if (v?.startsWith?.('./')) { + return path.join(c.paths.project.dir, v); + } + return resolvePackage(v); +}; diff --git a/packages/core/src/projects/version.ts b/packages/core/src/projects/version.ts new file mode 100644 index 0000000000..0a5d43e4aa --- /dev/null +++ b/packages/core/src/projects/version.ts @@ -0,0 +1,51 @@ +import { chalk, logDefault, getCurrentCommand } from '../logger'; +import { RnvContext } from '../context/types'; +import { inquirerPrompt } from '../api'; +import { upgradeProjectDependencies } from '../configs/configProject'; + +export const versionCheck = async (c: RnvContext) => { + logDefault('versionCheck'); + + if (c.runtime.versionCheckCompleted || c.files.project?.config?.skipAutoUpdate || c.program.skipDependencyCheck) { + return true; + } + c.runtime.rnvVersionRunner = c.files.rnv?.core?.package?.version || 'unknown'; + c.runtime.rnvVersionProject = + c.files.project?.package?.devDependencies?.['@rnv/core'] || + c.files.project?.package?.dependencies?.['@rnv/core'] || + 'unknown'; + logDefault( + `versionCheck:rnvRunner:${c.runtime.rnvVersionRunner},rnvProject:${c.runtime.rnvVersionProject}`, + chalk().grey + ); + if (c.runtime.rnvVersionRunner && c.runtime.rnvVersionProject) { + if (c.runtime.rnvVersionRunner !== c.runtime.rnvVersionProject && !c.program.skipRnvCheck) { + const recCmd = chalk().bold(`$ npx ${getCurrentCommand(true)}`); + const actionNoUpdate = 'Continue and skip updating package.json'; + const actionWithUpdate = 'Continue and update package.json'; + const actionUpgrade = `Upgrade project to ${c.runtime.rnvVersionRunner}`; + + const { chosenAction } = await inquirerPrompt({ + message: 'What to do next?', + type: 'list', + name: 'chosenAction', + choices: [actionNoUpdate, actionWithUpdate, actionUpgrade], + warningMessage: `You are running $rnv v${chalk().red( + c.runtime.rnvVersionRunner + )} against project built with rnv v${chalk().red( + c.runtime.rnvVersionProject + )}. This might result in unexpected behaviour! +It is recommended that you run your rnv command with npx prefix: ${recCmd} . or manually update your devDependencies.rnv version in your package.json.`, + }); + + c.runtime.versionCheckCompleted = true; + + c.runtime.skipPackageUpdate = chosenAction === actionNoUpdate; + + if (chosenAction === actionUpgrade) { + upgradeProjectDependencies(c.runtime.rnvVersionRunner); + } + } + } + return true; +}; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 0ffc8aedeb..469432f39b 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -14,7 +14,7 @@ import type { RnvEngine } from '../engines/types'; import { inquirerPrompt, inquirerSeparator } from '../api'; import { getApi } from '../api/provider'; import type { PlatformKey, RenativeConfigRnvTaskName } from '../schema/types'; -import { checkIfProjectAndNodeModulesExists } from '../projects/dependencyManager'; +import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { DEFAULT_TASK_DESCRIPTIONS } from './constants'; import { getContext } from '../context/provider'; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index 813e6f8fd9..b351cff0e3 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -20,7 +20,7 @@ import { PromptOptions } from '../api/types'; import { RnvPlatform } from '../types'; import { listAppConfigsFoldersSync } from '../configs/appConfigs'; import { writeRenativeConfigFile } from '../configs/utils'; -import { checkIfProjectAndNodeModulesExists } from '../projects/dependencyManager'; +import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; diff --git a/packages/engine-core/src/plugins.ts b/packages/engine-core/src/plugins.ts index a738ddb9db..0bdd4ffc45 100644 --- a/packages/engine-core/src/plugins.ts +++ b/packages/engine-core/src/plugins.ts @@ -1,6 +1,30 @@ -import { PluginListResponse, chalk, getContext } from '@rnv/core'; +import { + PluginListResponse, + chalk, + checkForPluginDependencies, + getContext, + installPackageDependencies, + logDefault, + overrideTemplatePlugins, +} from '@rnv/core'; +import { configureFonts } from '@rnv/sdk-utils'; import intersection from 'lodash/intersection'; +// export const configurePlugins = async () => { +// await installPackageDependenciesAndPlugins(); +// } + +export const installPackageDependenciesAndPlugins = async () => { + logDefault('installPackageDependenciesAndPlugins'); + + await installPackageDependencies(); + await overrideTemplatePlugins(); + await configureFonts(); + await checkForPluginDependencies(async () => { + await installPackageDependenciesAndPlugins(); + }); +}; + export const getPluginList = (isUpdate = false) => { const c = getContext(); diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index e18ab7ad40..63a07d6f74 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -1,6 +1,5 @@ import { logTask, - configureFonts, copyRuntimeAssets, executeTask, RnvTaskOptionPresets, @@ -9,6 +8,7 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; +import { configureFonts } from '@rnv/sdk-utils'; const taskSwitch: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskSwitch'); diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 6c9e0102e4..03bf33f04c 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -1,13 +1,13 @@ import { areNodeModulesInstalled, RnvTaskOptionPresets, - installPackageDependenciesAndPlugins, logTask, logInfo, RnvTaskFn, RnvTask, RnvTaskName, } from '@rnv/core'; +import { installPackageDependenciesAndPlugins } from '../../plugins'; const taskInstall: RnvTaskFn = async (c, parentTask, _) => { logTask('taskInstall', `requiresInstall:${!!c._requiresNpmInstall}:${!c.runtime.skipPackageUpdate}`); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 8e89c402d5..3c38403975 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -15,9 +15,12 @@ import { RnvTaskFn, RnvTask, RnvTaskName, + installPackageDependencies, + overrideTemplatePlugins, } from '@rnv/core'; import { checkAndConfigureSdks, checkSdk } from '../../common'; import { isBuildSchemeSupported } from '../../buildSchemes'; +import { configureFonts } from '@rnv/sdk-utils'; const taskPlatformConfigure: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskPlatformConfigure', ''); @@ -49,7 +52,18 @@ const taskPlatformConfigure: RnvTaskFn = async (c, parentTask, originTask) => { } await createPlatformBuild(c.platform); - await injectPlatformDependencies(); + await injectPlatformDependencies( + async () => { + await installPackageDependencies(); + await overrideTemplatePlugins(); + await configureFonts(); + }, + async () => { + await installPackageDependencies(); + await overrideTemplatePlugins(); + await configureFonts(); + } + ); // await _runCopyPlatforms(c); return true; }; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 90fa6c47c9..9f590907af 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -19,7 +19,6 @@ import { copyRuntimeAssets, cleanPlaformAssets, versionCheck, - configureFonts, configureEngines, executeTask, initializeTask, @@ -32,6 +31,8 @@ import { getContext, } from '@rnv/core'; import { checkCrypto } from '../crypto/common'; +import { installPackageDependenciesAndPlugins } from '../../plugins'; +import { configureFonts } from '@rnv/sdk-utils'; const checkIsRenativeProject = async () => { const c = getContext(); @@ -130,7 +131,9 @@ const taskProjectConfigure: RnvTaskFn = async (c, parentTask, originTask) => { await generatePlatformAssetsRuntimeConfig(); await overrideTemplatePlugins(); // NOTE: this is needed to ensure missing rnv plugin sub-deps are caught - await checkForPluginDependencies(); + await checkForPluginDependencies(async () => { + await installPackageDependenciesAndPlugins(); + }); await configureFonts(); } diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index c48383eccf..98d4fdac2c 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -9,7 +9,6 @@ import { upgradeDependencies, executeTask, listAndSelectNpmVersion, - installPackageDependenciesAndPlugins, fsExistsSync, readObjectSync, RnvTaskFn, @@ -18,6 +17,7 @@ import { NpmPackageFile, ConfigFileProject, } from '@rnv/core'; +import { installPackageDependenciesAndPlugins } from '../../plugins'; const taskProjectUpgrade: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskProjectUpgrade'); diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index f4fe693ab6..c862bbbc60 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -16,6 +16,7 @@ import { RnvTaskName, ConfigName, } from '@rnv/core'; +import { writeFileSync } from 'fs'; const taskWorkspaceConfigure: RnvTaskFn = async (c) => { logTask('taskWorkspaceConfigure'); @@ -38,10 +39,7 @@ const taskWorkspaceConfigure: RnvTaskFn = async (c) => { copyFileSync(oldGlobalConfigPath, c.paths.workspace.config); } else { logInfo(`${c.paths.workspace.dir}/${ConfigName.renative} file missing! Creating one for you...`); - copyFileSync( - path.join(c.paths.rnv.dir, 'coreTemplateFiles', 'global-config-template.json'), - c.paths.workspace.config - ); + writeFileSync(c.paths.workspace.config, '{}'); } } @@ -72,14 +70,10 @@ const taskWorkspaceConfigure: RnvTaskFn = async (c) => { c.paths.workspace.config )}. Let's add them!` ); - const defaultConfig = JSON.parse( - fsReadFileSync( - path.join(c.paths.rnv.dir, 'coreTemplateFiles', 'global-config-template.json') - ).toString() - ); + const newConfig = { ...c.files.workspace.config, - defaultTargets: defaultConfig.defaultTargets, + defaultTargets: {}, }; fsWriteFileSync(c.paths.workspace.config, JSON.stringify(newConfig, null, 2)); } diff --git a/packages/rnv/coreTemplateFiles/global-config-template.json b/packages/rnv/coreTemplateFiles/global-config-template.json deleted file mode 100644 index 85b56a76cd..0000000000 --- a/packages/rnv/coreTemplateFiles/global-config-template.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "sdks": { - "ANDROID_SDK": "/Users//Library/Android/sdk", - "ANDROID_NDK": "/Users//Library/Android/sdk/ndk-bundle", - "TIZEN_SDK": "/Users//tizen-studio", - "WEBOS_SDK": "/Users//Library/webOS_TV_SDK", - "KAIOS_SDK": "/Applications/KaiosSimulators" - }, - "defaultTargets": { - "android": "Nexus_5X_API_26", - "androidtv": "Android_TV_720p_API_22", - "firetv": "Android_TV_720p_API_22", - "androidwear": "Android_Wear_Round_API_28", - "ios": "iPhone 8", - "tvos": "Apple TV", - "tizen": "T-samsung-5.5-x86", - "tizenwatch": "W-5.5-circle-x86", - "tizenmobile": "mobile-5.5-x86", - "webos": "emulator", - "kaios": "Kaiosrtv3.0_ubuntu" - } -} diff --git a/packages/sdk-utils/package.json b/packages/sdk-utils/package.json index 26ba3d8e09..9356572456 100644 --- a/packages/sdk-utils/package.json +++ b/packages/sdk-utils/package.json @@ -12,6 +12,7 @@ "files": [ "LICENSE", "lib", + "templateFiles", "types.d.ts" ], "main": "lib/index.js", diff --git a/packages/sdk-utils/src/constants.ts b/packages/sdk-utils/src/constants.ts new file mode 100644 index 0000000000..4bc4e05454 --- /dev/null +++ b/packages/sdk-utils/src/constants.ts @@ -0,0 +1,3 @@ +import { PlatformKey } from '@rnv/core'; + +export const REMOTE_DEBUGGER_ENABLED_PLATFORMS: PlatformKey[] = ['tizen', 'tizenmobile', 'tizenwatch']; diff --git a/packages/sdk-utils/src/fonts.ts b/packages/sdk-utils/src/fonts.ts new file mode 100644 index 0000000000..f54106b8d5 --- /dev/null +++ b/packages/sdk-utils/src/fonts.ts @@ -0,0 +1,86 @@ +import { + chalk, + fsExistsSync, + fsReadFileSync, + fsWriteFileSync, + getConfigProp, + getContext, + logDebug, + logWarning, + parseFonts, +} from '@rnv/core'; +import { copyFileSync, mkdirSync } from 'fs'; +import path from 'path'; + +export const configureFonts = async () => { + const c = getContext(); + + // FONTS + let fontsObj = 'export default ['; + + const duplicateFontCheck: Array = []; + parseFonts((font, dir) => { + if (font.includes('.ttf') || font.includes('.otf') || font.includes('.woff')) { + const keOriginal = font.split('.')[0]; + const keyNormalised = keOriginal.replace(/__/g, ' '); + const includedFonts = getConfigProp('includedFonts'); + if (includedFonts) { + if ( + includedFonts.includes('*') || + includedFonts.includes(keOriginal) || + includedFonts.includes(keyNormalised) + ) { + if (font && !duplicateFontCheck.includes(font)) { + duplicateFontCheck.push(font); + const fontSource = path.join(dir, font).replace(/\\/g, '\\\\'); + if (fsExistsSync(fontSource)) { + // const fontFolder = path.join(appFolder, 'app/src/main/assets/fonts'); + // mkdirSync(fontFolder); + // const fontDest = path.join(fontFolder, font); + // copyFileSync(fontSource, fontDest); + fontsObj += `{ + fontFamily: '${keyNormalised}', + file: require('${fontSource}'), + },`; + } else { + logWarning(`Font ${chalk().bold(fontSource)} doesn't exist! Skipping.`); + } + } + } + } + } + }); + + fontsObj += '];'; + if (!fsExistsSync(c.paths.project.assets.runtimeDir)) { + mkdirSync(c.paths.project.assets.runtimeDir); + } + const fontJsPath = path.join(c.paths.project.assets.dir, 'runtime', 'fonts.web.js'); + if (fsExistsSync(fontJsPath)) { + const existingFileContents = fsReadFileSync(fontJsPath).toString(); + + if (existingFileContents !== fontsObj) { + logDebug('newFontsJsFile'); + fsWriteFileSync(fontJsPath, fontsObj); + } + } else { + logDebug('newFontsJsFile'); + fsWriteFileSync(fontJsPath, fontsObj); + } + + const coreTemplateFiles = path.resolve(c.paths.rnv.dir, 'coreTemplateFiles'); + copyFileSync( + path.resolve(coreTemplateFiles, 'fontManager.js'), + path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.js') + ); + copyFileSync( + path.resolve(coreTemplateFiles, 'fontManager.js'), + path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.server.web.js') + ); + copyFileSync( + path.resolve(coreTemplateFiles, 'fontManager.web.js'), + path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.web.js') + ); + + return true; +}; diff --git a/packages/sdk-utils/src/getConfigProps.ts b/packages/sdk-utils/src/getConfigProps.ts new file mode 100644 index 0000000000..22f696c90a --- /dev/null +++ b/packages/sdk-utils/src/getConfigProps.ts @@ -0,0 +1,169 @@ +import { getAppConfigBuildsFolder, logWarning, RnvPlatform, getConfigProp, fsExistsSync, getContext } from '@rnv/core'; +import path from 'path'; + +export const getBuildFilePath = (filePath: string, altTemplateFolder?: string) => { + const c = getContext(); + // P1 => platformTemplates + let sp = path.join(altTemplateFolder || getAppTemplateFolder()!, filePath); + // P2 => appConfigs/base + @buildSchemes + const sp2bf = getAppConfigBuildsFolder(c.paths.project.appConfigBase.dir); + if (sp2bf) { + const sp2 = path.join(sp2bf, filePath); + if (fsExistsSync(sp2)) sp = sp2; + } + + // P3 => appConfigs + @buildSchemes + const sp3bf = getAppConfigBuildsFolder(); + + if (sp3bf) { + const sp3 = path.join(sp3bf, filePath); + if (fsExistsSync(sp3)) sp = sp3; + } + + return sp; +}; + +export const getAppId = () => { + const id = getConfigProp('id'); + const idSuffix = getConfigProp('idSuffix'); + return idSuffix ? `${id}${idSuffix}` : id; +}; + +export const getAppTitle = () => getConfigProp('title'); + +export const getAppAuthor = () => getConfigProp('author') || getContext().files.project.package?.author; + +export const getAppLicense = () => getConfigProp('license') || getContext().files.project.package?.license; + +export const getEntryFile = () => { + const c = getContext(); + return c.platform ? c.buildConfig.platforms?.[c.platform]?.entryFile : undefined; +}; + +export const getGetJsBundleFile = () => getConfigProp('getJsBundleFile'); + +export const getAppDescription = () => getConfigProp('description') || getContext().files.project.package?.description; + +export const getAppVersion = () => { + const version = getConfigProp('version') || getContext().files.project.package?.version; + if (!version) { + logWarning('You are missing version prop in your config. will default to 0'); + return '0'; + } + const versionFormat = getConfigProp('versionFormat'); + if (!versionFormat) return version; + const versionCodeArr = versionFormat.split('.'); + const dotLength = versionCodeArr.length; + const isNumArr = versionCodeArr.map((v: string) => !Number.isNaN(Number(v))); + + const verArr: Array = []; + let i = 0; + version.split('.').map((v: string) => + v.split('-').map((v2) => + v2.split('+').forEach((v3) => { + const isNum = !Number.isNaN(Number(v3)); + if (isNumArr[i] && isNum) { + verArr.push(v3); + } else if (!isNumArr[i]) { + verArr.push(v3); + } + + i++; + }) + ) + ); + if (verArr.length > dotLength) { + verArr.length = dotLength; + } + + const output = verArr.join('.'); + // console.log(`IN: ${version}\nOUT: ${output}`); + return output; +}; + +const _androidLikePlatform = (platform: RnvPlatform) => + ['android', 'androidtv', 'firetv', 'androidwear'].includes(platform!); + +/** + * Retrieves the version code for the specified platform from the configuration. + * If the platform is Android, the version code must be a positive integer. + * If the version code is not found or is invalid, it falls back to a default value of '0'. + * Otherwise version code is generated based on the version and version code format specified in the configuration. + * + * @param c - The RnvContext object. + * @param platform - The RnvPlatform object. + * @returns The version code as a string. + * @throws An error if the version code is not a positive integer for Android platforms. + */ +export const getAppVersionCode = () => { + const c = getContext(); + const versionCode = getConfigProp('versionCode'); + + if (versionCode) { + // android platforms don't allow versionCode to be a string, only positive integer + if (_androidLikePlatform(c.platform)) { + const isValidVersionCode = Number.isInteger(Number(versionCode)) && Number(versionCode) > 0; + if (!isValidVersionCode) { + throw new Error(`'versionCode' should be a positive integer. Check your config`); + } + } + return versionCode; + } + + const version = getConfigProp('version') || c.files.project.package?.version; + if (!version || typeof version !== 'string') { + logWarning('You are missing version prop in your config. will default to 0'); + return '0'; + } + const versionCodeFormat = getConfigProp('versionCodeFormat') || '00.00.00'; + const vFormatArr = versionCodeFormat.split('.').map((v: string) => v.length); + const versionCodeMaxCount = vFormatArr.length; + const verArr = []; + + version.split('.').map((v) => + v.split('-').map((v2) => + v2.split('+').forEach((v3) => { + const asNumber = Number(v3); + if (!Number.isNaN(asNumber)) { + let val = v3; + const maxDigits = vFormatArr[verArr.length] || 2; + + if (v3.length > maxDigits) { + val = v3.substr(0, maxDigits); + } else if (v3.length < maxDigits) { + let toAdd = maxDigits - v3.length; + val = v3; + while (toAdd > 0) { + val = `0${val}`; + toAdd--; + } + } + verArr.push(val); + } + }) + ) + ); + let verCountDiff = verArr.length - versionCodeMaxCount; + if (verCountDiff < 0) { + while (verCountDiff < 0) { + let extraVersionLen = vFormatArr[versionCodeMaxCount + verCountDiff]; + let num = ''; + while (extraVersionLen) { + num += '0'; + extraVersionLen--; + } + verArr.push(num); + verCountDiff++; + } + } + + const output = Number(verArr.join('')).toString(); + // console.log(`IN: ${version}\nOUT: ${output}`); + return output; +}; + +export const getAppTemplateFolder = () => { + const c = getContext(); + const { platform } = c; + return platform ? path.join(c.paths.project.platformTemplatesDirs[platform], `${platform}`) : undefined; +}; diff --git a/packages/sdk-utils/src/index.ts b/packages/sdk-utils/src/index.ts index 89a48b3ae1..6ec6d2cdfa 100644 --- a/packages/sdk-utils/src/index.ts +++ b/packages/sdk-utils/src/index.ts @@ -1,339 +1,5 @@ -import { - OverridesOptions, - chalk, - getAppConfigBuildsFolder, - inquirerPrompt, - logWarning, - DEFAULTS, - RnvPlatform, - getConfigProp, - logDefault, - fsExistsSync, - PlatformKey, - getContext, -} from '@rnv/core'; -import axios from 'axios'; -import open from 'better-opn'; -import detectPort from 'detect-port'; -import killPort from 'kill-port'; -import path from 'path'; -import ip from 'ip'; -import colorString from 'color-string'; - -export const REMOTE_DEBUGGER_ENABLED_PLATFORMS: PlatformKey[] = ['tizen', 'tizenmobile', 'tizenwatch']; - -export const getValidLocalhost = (value: string, localhost: string) => { - if (!value) return localhost; - switch (value) { - case 'localhost': - case '0.0.0.0': - case '127.0.0.1': - return localhost; - default: - return value; - } -}; - -export const openBrowser = open; - -export const getDevServerHost = () => { - const c = getContext(); - const devServerHostOrig = getConfigProp('devServerHost'); - - const devServerHostFixed = devServerHostOrig - ? getValidLocalhost(devServerHostOrig, c.runtime.localhost || DEFAULTS.devServerHost) - : DEFAULTS.devServerHost; - - return devServerHostFixed; -}; - -export const waitForHost = async (suffix = 'assets/bundle.js') => { - const c = getContext(); - logDefault('waitForHost', `port:${c.runtime.port}`); - let attempts = 0; - const maxAttempts = 10; - const CHECK_INTEVAL = 2000; - // const spinner = ora('Waiting for webpack to finish...').start(); - - const devServerHost = getDevServerHost(); - const url = `http://${devServerHost}:${c.runtime.port}/${suffix}`; - - return new Promise((resolve, reject) => { - const interval = setInterval(() => { - axios - .get(url) - .then((res) => { - if (res.status === 200) { - clearInterval(interval); - // spinner.succeed(); - return resolve(true); - } - attempts++; - if (attempts === maxAttempts) { - clearInterval(interval); - // spinner.fail('Can\'t connect to webpack. Try restarting it.'); - return reject(`Can't connect to host ${url}. Try restarting it.`); - } - }) - .catch(() => { - attempts++; - if (attempts > maxAttempts) { - clearInterval(interval); - // spinner.fail('Can\'t connect to webpack. Try restarting it.'); - return reject(`Can't connect to host ${url}. Try restarting it.`); - } - }); - }, CHECK_INTEVAL); - }); -}; - -export const checkPortInUse = (port: number) => - new Promise((resolve, reject) => { - if (port === undefined || port === null) { - resolve(false); - return; - } - detectPort(port, (err: string, availablePort: string) => { - if (err) { - reject(err); - return; - } - const result = port !== parseInt(availablePort, 10); - resolve(result); - }); - }); - -export const getBuildFilePath = (filePath: string, altTemplateFolder?: string) => { - const c = getContext(); - // P1 => platformTemplates - let sp = path.join(altTemplateFolder || getAppTemplateFolder()!, filePath); - // P2 => appConfigs/base + @buildSchemes - const sp2bf = getAppConfigBuildsFolder(c.paths.project.appConfigBase.dir); - if (sp2bf) { - const sp2 = path.join(sp2bf, filePath); - if (fsExistsSync(sp2)) sp = sp2; - } - - // P3 => appConfigs + @buildSchemes - const sp3bf = getAppConfigBuildsFolder(); - - if (sp3bf) { - const sp3 = path.join(sp3bf, filePath); - if (fsExistsSync(sp3)) sp = sp3; - } - - return sp; -}; - -export const getAppId = () => { - const id = getConfigProp('id'); - const idSuffix = getConfigProp('idSuffix'); - return idSuffix ? `${id}${idSuffix}` : id; -}; - -export const getAppTitle = () => getConfigProp('title'); - -export const getAppAuthor = () => getConfigProp('author') || getContext().files.project.package?.author; - -export const getAppLicense = () => getConfigProp('license') || getContext().files.project.package?.license; - -export const getEntryFile = () => { - const c = getContext(); - return c.platform ? c.buildConfig.platforms?.[c.platform]?.entryFile : undefined; -}; - -export const getGetJsBundleFile = () => getConfigProp('getJsBundleFile'); - -export const getAppDescription = () => getConfigProp('description') || getContext().files.project.package?.description; - -export const getAppVersion = () => { - const version = getConfigProp('version') || getContext().files.project.package?.version; - if (!version) { - logWarning('You are missing version prop in your config. will default to 0'); - return '0'; - } - const versionFormat = getConfigProp('versionFormat'); - if (!versionFormat) return version; - const versionCodeArr = versionFormat.split('.'); - const dotLength = versionCodeArr.length; - const isNumArr = versionCodeArr.map((v: string) => !Number.isNaN(Number(v))); - - const verArr: Array = []; - let i = 0; - version.split('.').map((v: string) => - v.split('-').map((v2) => - v2.split('+').forEach((v3) => { - const isNum = !Number.isNaN(Number(v3)); - if (isNumArr[i] && isNum) { - verArr.push(v3); - } else if (!isNumArr[i]) { - verArr.push(v3); - } - - i++; - }) - ) - ); - if (verArr.length > dotLength) { - verArr.length = dotLength; - } - - const output = verArr.join('.'); - // console.log(`IN: ${version}\nOUT: ${output}`); - return output; -}; - -const _androidLikePlatform = (platform: RnvPlatform) => - ['android', 'androidtv', 'firetv', 'androidwear'].includes(platform!); - -/** - * Retrieves the version code for the specified platform from the configuration. - * If the platform is Android, the version code must be a positive integer. - * If the version code is not found or is invalid, it falls back to a default value of '0'. - * Otherwise version code is generated based on the version and version code format specified in the configuration. - * - * @param c - The RnvContext object. - * @param platform - The RnvPlatform object. - * @returns The version code as a string. - * @throws An error if the version code is not a positive integer for Android platforms. - */ -export const getAppVersionCode = () => { - const c = getContext(); - const versionCode = getConfigProp('versionCode'); - - if (versionCode) { - // android platforms don't allow versionCode to be a string, only positive integer - if (_androidLikePlatform(c.platform)) { - const isValidVersionCode = Number.isInteger(Number(versionCode)) && Number(versionCode) > 0; - if (!isValidVersionCode) { - throw new Error(`'versionCode' should be a positive integer. Check your config`); - } - } - return versionCode; - } - - const version = getConfigProp('version') || c.files.project.package?.version; - if (!version || typeof version !== 'string') { - logWarning('You are missing version prop in your config. will default to 0'); - return '0'; - } - const versionCodeFormat = getConfigProp('versionCodeFormat') || '00.00.00'; - const vFormatArr = versionCodeFormat.split('.').map((v: string) => v.length); - const versionCodeMaxCount = vFormatArr.length; - const verArr = []; - - version.split('.').map((v) => - v.split('-').map((v2) => - v2.split('+').forEach((v3) => { - const asNumber = Number(v3); - if (!Number.isNaN(asNumber)) { - let val = v3; - const maxDigits = vFormatArr[verArr.length] || 2; - - if (v3.length > maxDigits) { - val = v3.substr(0, maxDigits); - } else if (v3.length < maxDigits) { - let toAdd = maxDigits - v3.length; - val = v3; - while (toAdd > 0) { - val = `0${val}`; - toAdd--; - } - } - verArr.push(val); - } - }) - ) - ); - let verCountDiff = verArr.length - versionCodeMaxCount; - if (verCountDiff < 0) { - while (verCountDiff < 0) { - let extraVersionLen = vFormatArr[versionCodeMaxCount + verCountDiff]; - let num = ''; - while (extraVersionLen) { - num += '0'; - extraVersionLen--; - } - verArr.push(num); - verCountDiff++; - } - } - - const output = Number(verArr.join('')).toString(); - // console.log(`IN: ${version}\nOUT: ${output}`); - return output; -}; - -export const confirmActiveBundler = async () => { - const c = getContext(); - if (c.runtime.skipActiveServerCheck) return true; - - if (c.program.ci) { - //TODO: handle return codes properly - await killPort(c.runtime.port); - return true; - } - - const choices = ['Restart the server (recommended)', 'Use existing session']; - - const { selectedOption } = await inquirerPrompt({ - name: 'selectedOption', - type: 'list', - choices, - warningMessage: `Another ${c.platform} server at port ${chalk().bold(c.runtime.port)} already running`, - }); - - if (choices[0] === selectedOption) { - await killPort(c.runtime.port); - } else { - return false; - } - return true; -}; - -export const getIP = () => ip.address(); - -export const getAppTemplateFolder = () => { - const c = getContext(); - const { platform } = c; - return platform ? path.join(c.paths.project.platformTemplatesDirs[platform], `${platform}`) : undefined; -}; - -export const addSystemInjects = (injects: OverridesOptions) => { - const c = getContext(); - if (!c.systemPropsInjects) c.systemPropsInjects = []; - if (injects) { - injects.forEach((item) => { - c.systemPropsInjects.push(item); - }); - } -}; - -export const sanitizeColor = (val: string | undefined, key: string) => { - if (!val) { - logWarning(`You are missing ${chalk().bold(key)} in your renative config. will use default #FFFFFF instead`); - return { - rgb: [255, 255, 255, 1], - rgbDecimal: [1, 1, 1, 1], - hex: '#FFFFFF', - }; - } - - const rgb = colorString.get.rgb(val); - const hex = colorString.to.hex(rgb); - - return { - rgb, - rgbDecimal: rgb.map((v: number) => (v > 1 ? Math.round((v / 255) * 10) / 10 : v)), - hex, - }; -}; - -export const isUrlLocalhost = (value: string) => { - if (value?.includes) { - if (value.includes('localhost')) return true; - if (value.includes('0.0.0.0')) return true; - if (value.includes('127.0.0.1')) return true; - } - return false; -}; +export * from './constants'; +export * from './fonts'; +export * from './getConfigProps'; +export * from './ipUtils'; +export * from './utils'; diff --git a/packages/sdk-utils/src/ipUtils.ts b/packages/sdk-utils/src/ipUtils.ts new file mode 100644 index 0000000000..6a8e3da863 --- /dev/null +++ b/packages/sdk-utils/src/ipUtils.ts @@ -0,0 +1,125 @@ +import { DEFAULTS, getConfigProp, logDefault, getContext, inquirerPrompt, chalk } from '@rnv/core'; +import axios from 'axios'; +import open from 'better-opn'; +import detectPort from 'detect-port'; +import killPort from 'kill-port'; +import ip from 'ip'; + +export const confirmActiveBundler = async () => { + const c = getContext(); + if (c.runtime.skipActiveServerCheck) return true; + + if (c.program.ci) { + //TODO: handle return codes properly + await killPort(c.runtime.port); + return true; + } + + const choices = ['Restart the server (recommended)', 'Use existing session']; + + const { selectedOption } = await inquirerPrompt({ + name: 'selectedOption', + type: 'list', + choices, + warningMessage: `Another ${c.platform} server at port ${chalk().bold(c.runtime.port)} already running`, + }); + + if (choices[0] === selectedOption) { + await killPort(c.runtime.port); + } else { + return false; + } + return true; +}; + +export const getValidLocalhost = (value: string, localhost: string) => { + if (!value) return localhost; + switch (value) { + case 'localhost': + case '0.0.0.0': + case '127.0.0.1': + return localhost; + default: + return value; + } +}; + +export const openBrowser = open; + +export const getDevServerHost = () => { + const c = getContext(); + const devServerHostOrig = getConfigProp('devServerHost'); + + const devServerHostFixed = devServerHostOrig + ? getValidLocalhost(devServerHostOrig, c.runtime.localhost || DEFAULTS.devServerHost) + : DEFAULTS.devServerHost; + + return devServerHostFixed; +}; + +export const waitForHost = async (suffix = 'assets/bundle.js') => { + const c = getContext(); + logDefault('waitForHost', `port:${c.runtime.port}`); + let attempts = 0; + const maxAttempts = 10; + const CHECK_INTEVAL = 2000; + // const spinner = ora('Waiting for webpack to finish...').start(); + + const devServerHost = getDevServerHost(); + const url = `http://${devServerHost}:${c.runtime.port}/${suffix}`; + + return new Promise((resolve, reject) => { + const interval = setInterval(() => { + axios + .get(url) + .then((res) => { + if (res.status === 200) { + clearInterval(interval); + // spinner.succeed(); + return resolve(true); + } + attempts++; + if (attempts === maxAttempts) { + clearInterval(interval); + // spinner.fail('Can\'t connect to webpack. Try restarting it.'); + return reject(`Can't connect to host ${url}. Try restarting it.`); + } + }) + .catch(() => { + attempts++; + if (attempts > maxAttempts) { + clearInterval(interval); + // spinner.fail('Can\'t connect to webpack. Try restarting it.'); + return reject(`Can't connect to host ${url}. Try restarting it.`); + } + }); + }, CHECK_INTEVAL); + }); +}; + +export const checkPortInUse = (port: number) => + new Promise((resolve, reject) => { + if (port === undefined || port === null) { + resolve(false); + return; + } + detectPort(port, (err: string, availablePort: string) => { + if (err) { + reject(err); + return; + } + const result = port !== parseInt(availablePort, 10); + resolve(result); + }); + }); + +export const isUrlLocalhost = (value: string) => { + if (value?.includes) { + if (value.includes('localhost')) return true; + if (value.includes('0.0.0.0')) return true; + if (value.includes('127.0.0.1')) return true; + } + return false; +}; + +export const getIP = () => ip.address(); diff --git a/packages/sdk-utils/src/utils.ts b/packages/sdk-utils/src/utils.ts new file mode 100644 index 0000000000..a303a0e45a --- /dev/null +++ b/packages/sdk-utils/src/utils.ts @@ -0,0 +1,32 @@ +import { OverridesOptions, chalk, logWarning, getContext } from '@rnv/core'; +import colorString from 'color-string'; + +export const addSystemInjects = (injects: OverridesOptions) => { + const c = getContext(); + if (!c.systemPropsInjects) c.systemPropsInjects = []; + if (injects) { + injects.forEach((item) => { + c.systemPropsInjects.push(item); + }); + } +}; + +export const sanitizeColor = (val: string | undefined, key: string) => { + if (!val) { + logWarning(`You are missing ${chalk().bold(key)} in your renative config. will use default #FFFFFF instead`); + return { + rgb: [255, 255, 255, 1], + rgbDecimal: [1, 1, 1, 1], + hex: '#FFFFFF', + }; + } + + const rgb = colorString.get.rgb(val); + const hex = colorString.to.hex(rgb); + + return { + rgb, + rgbDecimal: rgb.map((v: number) => (v > 1 ? Math.round((v / 255) * 10) / 10 : v)), + hex, + }; +}; From 0edd19bb72c833aed5636ac7df3e63c92aff50cb Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 19:46:56 +0100 Subject: [PATCH 039/175] move font templates into sdk-utils --- packages/sdk-utils/src/fonts.ts | 8 ++++---- .../templateFiles}/fontManager.js | 0 .../templateFiles}/fontManager.web.js | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename packages/{rnv/coreTemplateFiles => sdk-utils/templateFiles}/fontManager.js (100%) rename packages/{rnv/coreTemplateFiles => sdk-utils/templateFiles}/fontManager.web.js (100%) diff --git a/packages/sdk-utils/src/fonts.ts b/packages/sdk-utils/src/fonts.ts index f54106b8d5..73ab141703 100644 --- a/packages/sdk-utils/src/fonts.ts +++ b/packages/sdk-utils/src/fonts.ts @@ -68,17 +68,17 @@ export const configureFonts = async () => { fsWriteFileSync(fontJsPath, fontsObj); } - const coreTemplateFiles = path.resolve(c.paths.rnv.dir, 'coreTemplateFiles'); + const templateFiles = path.resolve(__dirname, '..', 'templateFiles'); copyFileSync( - path.resolve(coreTemplateFiles, 'fontManager.js'), + path.resolve(templateFiles, 'fontManager.js'), path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.js') ); copyFileSync( - path.resolve(coreTemplateFiles, 'fontManager.js'), + path.resolve(templateFiles, 'fontManager.js'), path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.server.web.js') ); copyFileSync( - path.resolve(coreTemplateFiles, 'fontManager.web.js'), + path.resolve(templateFiles, 'fontManager.web.js'), path.resolve(c.paths.project.assets.dir, 'runtime', 'fontManager.web.js') ); diff --git a/packages/rnv/coreTemplateFiles/fontManager.js b/packages/sdk-utils/templateFiles/fontManager.js similarity index 100% rename from packages/rnv/coreTemplateFiles/fontManager.js rename to packages/sdk-utils/templateFiles/fontManager.js diff --git a/packages/rnv/coreTemplateFiles/fontManager.web.js b/packages/sdk-utils/templateFiles/fontManager.web.js similarity index 100% rename from packages/rnv/coreTemplateFiles/fontManager.web.js rename to packages/sdk-utils/templateFiles/fontManager.web.js From dbef43dede888f522f43e060958fd88b058f3831 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 17 Mar 2024 20:19:03 +0100 Subject: [PATCH 040/175] refactor template files --- .eslintignore | 2 +- .prettierignore | 1 + buildHooks/src/prePublish.ts | 2 +- packages/core/package.json | 1 + .../renative.templates.json | 2 +- packages/core/src/buildHooks/index.ts | 2 +- packages/core/src/context/defaults.ts | 2 +- packages/core/src/context/index.ts | 10 +- packages/core/src/context/types.ts | 1 + packages/core/src/runner.ts | 2 +- .../templateFiles/buildHooksSrc}/index.ts | 4 +- packages/core/tsconfig.json | 2 +- .../rnv/coreTemplateFiles/permissions.json | 420 ------------------ packages/rnv/package.json | 1 - packages/rnv/tsconfig.json | 2 +- 15 files changed, 19 insertions(+), 435 deletions(-) rename packages/{rnv/coreTemplateFiles => core}/renative.templates.json (97%) rename packages/{rnv/coreTemplateFiles/buildHooks/src => core/templateFiles/buildHooksSrc}/index.ts (53%) delete mode 100644 packages/rnv/coreTemplateFiles/permissions.json diff --git a/.eslintignore b/.eslintignore index 91baf7cb15..fb29af8ccd 100755 --- a/.eslintignore +++ b/.eslintignore @@ -17,7 +17,7 @@ test/examples/*.js **/pluginTemplates **/nodeModuleOverrides **/supportFiles -**/coreTemplateFiles +**/templateFiles packages/rnv/tests jest.config.*.js **/templates diff --git a/.prettierignore b/.prettierignore index e8112627ba..1fe0bf92c0 100644 --- a/.prettierignore +++ b/.prettierignore @@ -22,4 +22,5 @@ build allure-results pluginTemplates +templateFiles *.d.ts \ No newline at end of file diff --git a/buildHooks/src/prePublish.ts b/buildHooks/src/prePublish.ts index bf51f6c8bf..c1d627eb07 100644 --- a/buildHooks/src/prePublish.ts +++ b/buildHooks/src/prePublish.ts @@ -117,7 +117,7 @@ export const prePublish = async (c: RnvContext) => { }, }); - _updateJson(path.join(pkgDirPath, 'rnv/coreTemplateFiles/renative.templates.json'), { + _updateJson(path.join(pkgDirPath, 'core/renative.templates.json'), { engineTemplates: { '@rnv/engine-rn': v, '@rnv/engine-rn-tvos': v, diff --git a/packages/core/package.json b/packages/core/package.json index f7e826b9bf..a9a308306d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -13,6 +13,7 @@ "files": [ "LICENSE", "jsonSchema", + "templateFiles", "lib" ], "main": "lib/index.js", diff --git a/packages/rnv/coreTemplateFiles/renative.templates.json b/packages/core/renative.templates.json similarity index 97% rename from packages/rnv/coreTemplateFiles/renative.templates.json rename to packages/core/renative.templates.json index 83b19fddc7..ac842e3bf7 100644 --- a/packages/rnv/coreTemplateFiles/renative.templates.json +++ b/packages/core/renative.templates.json @@ -1,5 +1,5 @@ { - "$schema": "../../../.rnv/schema/rnv.templates.json", + "$schema": "../../.rnv/schema/rnv.templates.json", "projectTemplates": { "@rnv/template-starter": { "description": "Multiplatform 'hello world' template" diff --git a/packages/core/src/buildHooks/index.ts b/packages/core/src/buildHooks/index.ts index 5c96b4cdbe..d6846883b8 100644 --- a/packages/core/src/buildHooks/index.ts +++ b/packages/core/src/buildHooks/index.ts @@ -77,7 +77,7 @@ export const buildHooks = async () => { buildHooksSource = path.join(templatePath, 'buildHooks/src'); shouldBuildHook = true; } else { - buildHooksSource = path.join(c.paths.rnv.dir, 'coreTemplateFiles/buildHooks/src'); + buildHooksSource = path.join(c.paths.rnv.core.dir, 'templateFiles/buildHooksSrc'); } copyFolderContentsRecursiveSync(buildHooksSource, c.paths.buildHooks.src.dir); diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 0cabe58b1c..2091b522db 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -120,7 +120,7 @@ export const generateContextDefaults = (): RnvContext => ({ dir: '', }, projectTemplate: { dir: '' }, - core: { package: '' }, + core: { package: '', dir: '' }, }, workspace: { ...generateRnvConfigPathObj(), diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 364c8d25cd..9b8c7b2e4c 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -88,12 +88,14 @@ export const populateContextPaths = (c: RnvContext) => { c.paths.rnv.pluginTemplates.overrideDir = path.join(c.paths.rnv.dir, 'pluginTemplates'); c.paths.rnv.pluginTemplates.config = path.join(c.paths.rnv.pluginTemplates.overrideDir, ConfigName.renativePlugins); - c.paths.rnv.projectTemplates.dir = path.join(c.paths.rnv.dir, 'coreTemplateFiles'); - c.paths.rnv.projectTemplates.config = path.join(c.paths.rnv.projectTemplates.dir, ConfigName.renativeTemplates); + c.paths.rnv.projectTemplates.dir = path.join(c.paths.rnv.dir, 'templateFiles'); + c.paths.rnv.projectTemplates.config = path.join(c.paths.rnv.core.dir, ConfigName.renativeTemplates); c.paths.rnv.package = path.join(c.paths.rnv.dir, 'package.json'); - c.paths.rnv.core.package = path.join(c.paths.RNV_CORE_HOME_DIR, 'package.json'); - c.paths.rnv.projectTemplate.dir = path.join(c.paths.rnv.dir, 'coreTemplateFiles'); + c.paths.rnv.core.dir = path.join(c.paths.RNV_CORE_HOME_DIR); + c.paths.rnv.core.package = path.join(c.paths.rnv.core.dir, 'package.json'); + + c.paths.rnv.projectTemplate.dir = path.join(c.paths.rnv.dir, 'templateFiles'); c.files.rnv.package = JSON.parse(fsReadFileSync(c.paths.rnv.package).toString()); c.files.rnv.core.package = JSON.parse(fsReadFileSync(c.paths.rnv.core.package).toString()); diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 86bb606b01..155bff8402 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -217,6 +217,7 @@ export type RnvContextPaths = { dir: string; package: string; core: { + dir: string; package: string; }; }; diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index 9ec3710b7c..d9f6268775 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -2,10 +2,10 @@ import { getContext } from './context/provider'; import { loadEngines, registerMissingPlatformEngines } from './engines'; import { loadIntegrations } from './integrations'; import { checkAndMigrateProject } from './migrator'; -import { checkAndBootstrapIfRequired } from './projects'; import { configureRuntimeDefaults } from './context/runtime'; import { findSuitableGlobalTask, findSuitableTask, initializeTask } from './tasks'; import { updateRenativeConfigs } from './plugins'; +import { checkAndBootstrapIfRequired } from './projects/bootstrap'; export const executeRnvCore = async () => { const c = getContext(); diff --git a/packages/rnv/coreTemplateFiles/buildHooks/src/index.ts b/packages/core/templateFiles/buildHooksSrc/index.ts similarity index 53% rename from packages/rnv/coreTemplateFiles/buildHooks/src/index.ts rename to packages/core/templateFiles/buildHooksSrc/index.ts index 30cc2c7a20..09a75b36b3 100644 --- a/packages/rnv/coreTemplateFiles/buildHooks/src/index.ts +++ b/packages/core/templateFiles/buildHooksSrc/index.ts @@ -1,8 +1,8 @@ -import { RnvContext, logHook } from '@rnv/core'; +import { RnvContext } from '@rnv/core'; const hooks = { hello: async (c: RnvContext) => { - logHook('Hello build hook!'); + console.log('Hello build hook!', c.rnvVersion); }, }; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index a3988e5648..1dc09ed8d6 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -5,5 +5,5 @@ "rootDir": "./src", "resolveJsonModule": false }, - "exclude": ["./src/**/*.test.ts", "./lib/**/*"] + "exclude": ["./src/**/*.test.ts", "./lib/**/*", "./templateFiles/**/*"] } diff --git a/packages/rnv/coreTemplateFiles/permissions.json b/packages/rnv/coreTemplateFiles/permissions.json deleted file mode 100644 index 71776356cb..0000000000 --- a/packages/rnv/coreTemplateFiles/permissions.json +++ /dev/null @@ -1,420 +0,0 @@ -{ - "permissions": { - "ios": { - "NSAppleMusicUsageDescription": { - "key": "NSAppleMusicUsageDescription", - "desc": "Get favorite music" - }, - "NSBluetoothPeripheralUsageDescription": { - "key": "NSBluetoothPeripheralUsageDescription", - "desc": "Allow you to use your bluetooth to play music" - }, - "NSCalendarsUsageDescription": { - "key": "NSCalendarsUsageDescription", - "desc": "Calendar for add events" - }, - "NSCameraUsageDescription": { - "key": "NSCameraUsageDescription", - "desc": "Need camera to scan QR Codes" - }, - "NSLocationWhenInUseUsageDescription": { - "key": "NSLocationWhenInUseUsageDescription", - "desc": "Geolocation tags for photos" - }, - "NSLocationAlwaysAndWhenInUseUsageDescription": { - "key": "NSLocationAlwaysAndWhenInUseUsageDescription", - "desc": "Geolocation tags for photos" - }, - "NSLocationAlwaysUsageDescription": { - "key": "NSLocationAlwaysUsageDescription", - "desc": "Geolocation tags for photos" - }, - "NSMicrophoneUsageDescription": { - "key": "NSMicrophoneUsageDescription", - "desc": "Need microphone for videos" - }, - "NSMotionUsageDescription": { - "key": "NSMotionUsageDescription", - "desc": "To know when device is moving" - }, - "NSPhotoLibraryAddUsageDescription": { - "key": "NSPhotoLibraryAddUsageDescription", - "desc": "Need library to save images" - }, - "NSPhotoLibraryUsageDescription": { - "key": "NSPhotoLibraryUsageDescription", - "desc": "Allows to upload images from photo library" - }, - "NSSpeechRecognitionUsageDescription": { - "key": "NSSpeechRecognitionUsageDescription", - "desc": "Speech Recognition to run in app commands" - } - }, - "android": { - "ACCESS_LOCATION_EXTRA_COMMANDS": { - "key": "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS", - "security": "normal" - }, - "ACCESS_NETWORK_STATE": { - "key": "android.permission.ACCESS_NETWORK_STATE", - "security": "normal" - }, - "ACCESS_NOTIFICATION_POLICY": { - "key": "android.permission.ACCESS_NOTIFICATION_POLICY", - "security": "normal" - }, - "ACCESS_WIFI_STATE": { - "key": "android.permission.ACCESS_WIFI_STATE", - "security": "normal" - }, - "BLUETOOTH": { - "key": "android.permission.BLUETOOTH", - "security": "normal" - }, - "BLUETOOTH_ADMIN": { - "key": "android.permission.BLUETOOTH_ADMIN", - "security": "normal" - }, - "BROADCAST_STICKY": { - "key": "android.permission.BROADCAST_STICKY", - "security": "normal" - }, - "CHANGE_NETWORK_STATE": { - "key": "android.permission.CHANGE_NETWORK_STATE", - "security": "normal" - }, - "CHANGE_WIFI_MULTICAST_STATE": { - "key": "android.permission.CHANGE_WIFI_MULTICAST_STATE", - "security": "normal" - }, - "CHANGE_WIFI_STATE": { - "key": "android.permission.CHANGE_WIFI_STATE", - "security": "normal" - }, - "DISABLE_KEYGUARD": { - "key": "android.permission.DISABLE_KEYGUARD", - "security": "normal" - }, - "EXPAND_STATUS_BAR": { - "key": "android.permission.EXPAND_STATUS_BAR", - "security": "normal" - }, - "FOREGROUND_SERVICE": { - "key": "android.permission.FOREGROUND_SERVICE", - "security": "normal" - }, - "GET_PACKAGE_SIZE": { - "key": "android.permission.GET_PACKAGE_SIZE", - "security": "normal" - }, - "INSTALL_SHORTCUT": { - "key": "android.permission.INSTALL_SHORTCUT", - "security": "normal" - }, - "INTERNET": { - "key": "android.permission.INTERNET", - "security": "normal" - }, - "KILL_BACKGROUND_PROCESSES": { - "key": "android.permission.KILL_BACKGROUND_PROCESSES", - "security": "normal" - }, - "MANAGE_OWN_CALLS": { - "key": "android.permission.MANAGE_OWN_CALLS", - "security": "normal" - }, - "MODIFY_AUDIO_SETTINGS": { - "key": "android.permission.MODIFY_AUDIO_SETTINGS", - "security": "normal" - }, - "NFC": { - "key": "android.permission.NFC", - "security": "normal" - }, - "READ_SYNC_SETTINGS": { - "key": "android.permission.READ_SYNC_SETTINGS", - "security": "normal" - }, - "READ_SYNC_STATS": { - "key": "android.permission.READ_SYNC_STATS", - "security": "normal" - }, - "RECEIVE_BOOT_COMPLETED": { - "key": "android.permission.RECEIVE_BOOT_COMPLETED", - "security": "normal" - }, - "REORDER_TASKS": { - "key": "android.permission.REORDER_TASKS", - "security": "normal" - }, - "REQUEST_COMPANION_RUN_IN_BACKGROUND": { - "key": "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND", - "security": "normal" - }, - "REQUEST_COMPANION_USE_DATA_IN_BACKGROUND": { - "key": "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND", - "security": "normal" - }, - "REQUEST_DELETE_PACKAGES": { - "key": "android.permission.REQUEST_DELETE_PACKAGES", - "security": "normal" - }, - "REQUEST_IGNORE_BATTERY_OPTIMIZATIONS": { - "key": "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", - "security": "normal" - }, - "SET_ALARM": { - "key": "android.permission.SET_ALARM", - "security": "normal" - }, - "SET_WALLPAPER": { - "key": "android.permission.SET_WALLPAPER", - "security": "normal" - }, - "SET_WALLPAPER_HINTS": { - "key": "android.permission.SET_WALLPAPER_HINTS", - "security": "normal" - }, - "TRANSMIT_IR": { - "key": "android.permission.TRANSMIT_IR", - "security": "normal" - }, - "USE_FINGERPRINT": { - "key": "android.permission.USE_FINGERPRINT", - "security": "normal" - }, - "VIBRATE": { - "key": "android.permission.VIBRATE", - "security": "normal" - }, - "WAKE_LOCK": { - "key": "android.permission.WAKE_LOCK", - "security": "normal" - }, - "WRITE_SYNC_SETTINGS": { - "key": "android.permission.WRITE_SYNC_SETTINGS", - "security": "normal" - }, - "BIND_ACCESSIBILITY_SERVICE": { - "key": "android.permission.BIND_ACCESSIBILITY_SERVICE", - "security": "signature" - }, - "BIND_AUTOFILL_SERVICE": { - "key": "android.permission.BIND_AUTOFILL_SERVICE", - "security": "signature" - }, - "BIND_CARRIER_SERVICES": { - "key": "android.permission.BIND_CARRIER_SERVICES", - "security": "signature" - }, - "BIND_CHOOSER_TARGET_SERVICE": { - "key": "android.permission.BIND_CHOOSER_TARGET_SERVICE", - "security": "signature" - }, - "BIND_CONDITION_PROVIDER_SERVICE": { - "key": "android.permission.BIND_CONDITION_PROVIDER_SERVICE", - "security": "signature" - }, - "BIND_DEVICE_ADMIN": { - "key": "android.permission.BIND_DEVICE_ADMIN", - "security": "signature" - }, - "BIND_DREAM_SERVICE": { - "key": "android.permission.BIND_DREAM_SERVICE", - "security": "signature" - }, - "BIND_INCALL_SERVICE": { - "key": "android.permission.BIND_INCALL_SERVICE", - "security": "signature" - }, - "BIND_INPUT_METHOD": { - "key": "android.permission.BIND_INPUT_METHOD", - "security": "signature" - }, - "BIND_MIDI_DEVICE_SERVICE": { - "key": "android.permission.BIND_MIDI_DEVICE_SERVICE", - "security": "signature" - }, - "BIND_NFC_SERVICE": { - "key": "android.permission.BIND_NFC_SERVICE", - "security": "signature" - }, - "BIND_NOTIFICATION_LISTENER_SERVICE": { - "key": "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE", - "security": "signature" - }, - "BIND_PRINT_SERVICE": { - "key": "android.permission.BIND_PRINT_SERVICE", - "security": "signature" - }, - "BIND_SCREENING_SERVICE": { - "key": "android.permission.BIND_SCREENING_SERVICE", - "security": "signature" - }, - "BIND_TELECOM_CONNECTION_SERVICE": { - "key": "android.permission.BIND_TELECOM_CONNECTION_SERVICE", - "security": "signature" - }, - "BIND_TEXT_SERVICE": { - "key": "android.permission.BIND_TEXT_SERVICE", - "security": "signature" - }, - "BIND_TV_INPUT": { - "key": "android.permission.BIND_TV_INPUT", - "security": "signature" - }, - "BIND_VISUAL_VOICEMAIL_SERVICE": { - "key": "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE", - "security": "signature" - }, - "BIND_VOICE_INTERACTION": { - "key": "android.permission.BIND_VOICE_INTERACTION", - "security": "signature" - }, - "BIND_VPN_SERVICE": { - "key": "android.permission.BIND_VPN_SERVICE", - "security": "signature" - }, - "BIND_VR_LISTENER_SERVICE": { - "key": "android.permission.BIND_VR_LISTENER_SERVICE", - "security": "signature" - }, - "BIND_WALLPAPER": { - "key": "android.permission.BIND_WALLPAPER", - "security": "signature" - }, - "CLEAR_APP_CACHE": { - "key": "android.permission.CLEAR_APP_CACHE", - "security": "signature" - }, - "MANAGE_DOCUMENTS": { - "key": "android.permission.MANAGE_DOCUMENTS", - "security": "signature" - }, - "READ_VOICEMAIL": { - "key": "android.permission.READ_VOICEMAIL", - "security": "signature" - }, - "REQUEST_INSTALL_PACKAGES": { - "key": "android.permission.REQUEST_INSTALL_PACKAGES", - "security": "signature" - }, - "SYSTEM_ALERT_WINDOW": { - "key": "android.permission.SYSTEM_ALERT_WINDOW", - "security": "signature" - }, - "WRITE_SETTINGS": { - "key": "android.permission.WRITE_SETTINGS", - "security": "signature" - }, - "WRITE_VOICEMAIL": { - "key": "android.permission.WRITE_VOICEMAIL", - "security": "signature" - }, - "READ_CALENDAR": { - "key": "android.permission.READ_CALENDAR", - "security": "dangerous" - }, - "WRITE_CALENDAR": { - "key": "android.permission.WRITE_CALENDAR", - "security": "dangerous" - }, - "READ_CALL_LOG": { - "key": "android.permission.READ_CALL_LOG", - "security": "dangerous" - }, - "WRITE_CALL_LOG": { - "key": "android.permission.WRITE_CALL_LOG", - "security": "dangerous" - }, - "PROCESS_OUTGOING_CALLS": { - "key": "android.permission.PROCESS_OUTGOING_CALLS", - "security": "dangerous" - }, - "CAMERA": { - "key": "android.permission.CAMERA", - "security": "dangerous" - }, - "READ_CONTACTS": { - "key": "android.permission.READ_CONTACTS", - "security": "dangerous" - }, - "WRITE_CONTACTS": { - "key": "android.permission.WRITE_CONTACTS", - "security": "dangerous" - }, - "GET_ACCOUNTS": { - "key": "android.permission.GET_ACCOUNTS", - "security": "dangerous" - }, - "ACCESS_FINE_LOCATION": { - "key": "android.permission.ACCESS_FINE_LOCATION", - "security": "dangerous" - }, - "ACCESS_COARSE_LOCATION": { - "key": "android.permission.ACCESS_COARSE_LOCATION", - "security": "dangerous" - }, - "RECORD_AUDIO": { - "key": "android.permission.RECORD_AUDIO", - "security": "dangerous" - }, - "READ_PHONE_STATE": { - "key": "android.permission.READ_PHONE_STATE", - "security": "dangerous" - }, - "READ_PHONE_NUMBERS": { - "key": "android.permission.READ_PHONE_NUMBERS", - "security": "dangerous" - }, - "CALL_PHONE": { - "key": "android.permission.CALL_PHONE", - "security": "dangerous" - }, - "ANSWER_PHONE_CALLS": { - "key": "android.permission.ANSWER_PHONE_CALLS", - "security": "dangerous" - }, - "ADD_VOICEMAIL": { - "key": "android.permission.ADD_VOICEMAIL", - "security": "dangerous" - }, - "USE_SIP": { - "key": "android.permission.USE_SIP", - "security": "dangerous" - }, - "BODY_SENSORS": { - "key": "android.permission.BODY_SENSORS", - "security": "dangerous" - }, - "SEND_SMS": { - "key": "android.permission.SEND_SMS", - "security": "dangerous" - }, - "RECEIVE_SMS": { - "key": "android.permission.RECEIVE_SMS", - "security": "dangerous" - }, - "READ_SMS": { - "key": "android.permission.READ_SMS", - "security": "dangerous" - }, - "RECEIVE_WAP_PUSH": { - "key": "android.permission.RECEIVE_WAP_PUSH", - "security": "dangerous" - }, - "RECEIVE_MMS": { - "key": "android.permission.RECEIVE_MMS", - "security": "dangerous" - }, - "READ_EXTERNAL_STORAGE": { - "key": "android.permission.READ_EXTERNAL_STORAGE", - "security": "dangerous" - }, - "WRITE_EXTERNAL_STORAGE": { - "key": "android.permission.WRITE_EXTERNAL_STORAGE", - "security": "dangerous" - } - } - } -} diff --git a/packages/rnv/package.json b/packages/rnv/package.json index 1e88368189..6f5640e636 100644 --- a/packages/rnv/package.json +++ b/packages/rnv/package.json @@ -50,7 +50,6 @@ "files": [ "LICENSE", "bin", - "coreTemplateFiles", "lib", "pluginTemplates" ], diff --git a/packages/rnv/tsconfig.json b/packages/rnv/tsconfig.json index b26b9c6670..1dc09ed8d6 100644 --- a/packages/rnv/tsconfig.json +++ b/packages/rnv/tsconfig.json @@ -5,5 +5,5 @@ "rootDir": "./src", "resolveJsonModule": false }, - "exclude": ["./src/**/*.test.ts", "./lib/**/*", "./coreTemplateFiles/**/*"] + "exclude": ["./src/**/*.test.ts", "./lib/**/*", "./templateFiles/**/*"] } From 5f9a083228c2b972e4b537121aa28de9a38b514d Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 10:53:47 +0100 Subject: [PATCH 041/175] refactor context paths and files --- packages/core/src/configs/index.ts | 10 +- packages/core/src/context/defaults.ts | 105 +++++++++----------- packages/core/src/context/index.ts | 88 +++++++++-------- packages/core/src/context/types.ts | 135 ++++++++++++++------------ packages/core/src/system/fs.ts | 6 +- 5 files changed, 175 insertions(+), 169 deletions(-) diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 02a845017a..27b43998b2 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -209,13 +209,13 @@ export const parseRenativeConfigs = async () => { _loadConfigFiles(c, c.files.workspace, c.paths.workspace); } - // LOAD DEFAULT WORKSPACE - generateContextPaths(c.paths.defaultWorkspace, c.paths.GLOBAL_RNV_DIR); - _loadConfigFiles(c, c.files.defaultWorkspace, c.paths.defaultWorkspace); + // LOAD DEFAULT WORKSPACE //not needed anymore. loaded at the initial stage + // generateContextPaths(c.paths.defaultWorkspace, c.paths.GLOBAL_RNV_DIR); + // _loadConfigFiles(c, c.files.defaultWorkspace, c.paths.defaultWorkspace); // LOAD PROJECT TEMPLATES - c.files.rnv.projectTemplates.config = - readObjectSync(c.paths.rnv.projectTemplates.config) || undefined; + c.files.rnvPlugins.configProjectTemplates = + readObjectSync(c.paths.rnvPlugins.configProjectTemplates) || undefined; // // LOAD PLUGIN TEMPLATES // await loadPluginTemplates(c); diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 2091b522db..3d5ba032da 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -1,9 +1,7 @@ -import path from 'path'; +// import path from 'path'; import type { RnvContext, RnvContextPathObj } from './types'; -import { homedir } from 'os'; - -export const USER_HOME_DIR = homedir(); +// export const USER_HOME_DIR = homedir(); export const generateRnvConfigPathObj = (): RnvContextPathObj => { return { @@ -97,30 +95,37 @@ export const generateContextDefaults = (): RnvContext => ({ injectableConfigProps: {}, runtime, paths: { - RNV_CORE_HOME_DIR: path.join(__dirname, '../..'), - CURRENT_DIR: '', + // RNV_CORE_HOME_DIR: path.join(__dirname, '../..'), + // CURRENT_DIR: '', IS_LINKED: false, IS_NPX_MODE: false, - RNV_HOME_DIR: '', - RNV_NODE_MODULES_DIR: '', + // RNV_HOME_DIR: '', + // RNV_NODE_MODULES_DIR: '', appConfigBase: '', - GLOBAL_RNV_CONFIG: '', + // GLOBAL_RNV_CONFIG: '', + user: { + currentDir: '', + homeDir: '', + }, rnv: { - configWorkspaces: '', dir: '', package: '', - pluginTemplates: { - dirs: {}, - }, - projectTemplates: { - config: '', - dir: '', - }, - engines: { - dir: '', - }, - projectTemplate: { dir: '' }, - core: { package: '', dir: '' }, + }, + scopedPluginTemplates: { + configs: {}, + dirs: {}, + }, + rnvCore: { + dir: '', + templateFilesDir: '', + package: '', + }, + rnvPlugins: { + configPluginTemplates: '', + dir: '', + package: '', + pluginTemplatesDir: '', + configProjectTemplates: '', }, workspace: { ...generateRnvConfigPathObj(), @@ -136,24 +141,9 @@ export const generateContextDefaults = (): RnvContext => ({ ...generateRnvConfigPathObj(), }, }, - defaultWorkspace: { - ...generateRnvConfigPathObj(), - project: { - appConfigBase: { - dir: '', - }, - builds: { - dir: '', - }, - assets: { - dir: '', - }, - }, - appConfig: { - configs: [], - configsPrivate: [], - configsLocal: [], - }, + dotRnv: { + dir: '', + configWorkspaces: '', }, project: { ...generateRnvConfigPathObj(), @@ -183,7 +173,6 @@ export const generateContextDefaults = (): RnvContext => ({ appConfig: { ...generateRnvConfigPathObj(), }, - GLOBAL_RNV_DIR: '', buildHooks: { dist: { dir: '', @@ -197,9 +186,7 @@ export const generateContextDefaults = (): RnvContext => ({ tsconfig: '', dir: '', }, - home: { - dir: '', - }, + template: { configTemplate: '', appConfigBase: { @@ -218,15 +205,24 @@ export const generateContextDefaults = (): RnvContext => ({ }, files: { rnv: { - pluginTemplates: { - configs: {}, + package: {}, + }, + dotRnv: { + configWorkspaces: { + workspaces: {}, }, - projectTemplates: {}, + }, + rnvCore: { package: {}, - core: { - package: {}, + }, + rnvPlugins: { + configPluginTemplates: { + pluginTemplates: {}, }, }, + scopedPluginTemplates: { + configs: {}, + }, workspace: { ...generateRnvConfigFileObj(), project: { @@ -236,17 +232,6 @@ export const generateContextDefaults = (): RnvContext => ({ ...generateRnvConfigFileObj(), }, }, - defaultWorkspace: { - ...generateRnvConfigFileObj(), - project: { - ...generateRnvConfigFileObj(), - }, - appConfig: { - configs: [], - configsPrivate: [], - configsLocal: [], - }, - }, project: { ...generateRnvConfigFileObj(), builds: {}, diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 9b8c7b2e4c..4466dd46e5 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -1,10 +1,11 @@ import { fsExistsSync, fsReadFileSync } from '../system/fs'; import { CreateContextOptions, RnvContext, RnvContextPathObj } from './types'; -import { USER_HOME_DIR, generateContextDefaults } from './defaults'; +import { generateContextDefaults } from './defaults'; import path from 'path'; import { mkdirSync } from 'fs'; import { isSystemWin } from '../system/is'; import { ConfigName } from '../enums/configName'; +import { homedir } from 'os'; export const generateContextPaths = (pathObj: RnvContextPathObj, dir: string, configName?: string) => { pathObj.dir = dir; @@ -27,12 +28,12 @@ const populateLinkingInfo = (ctx: RnvContext) => { ctx.paths.IS_NPX_MODE = isNpxMode; }; -export const createRnvContext = (ctx?: CreateContextOptions) => { +export const createRnvContext = (ctxOpts?: CreateContextOptions) => { // console.trace('CREATE_RNV_CONTEXT', !!ctx, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); let haltExecution = false; // Handle new imports of @rnv/core - if (!ctx) { + if (!ctxOpts) { if (!global.RNV_CONTEXT) { if (process.env.JEST_WORKER_ID === undefined) { // Initial empty context to be initialized @@ -56,7 +57,7 @@ export const createRnvContext = (ctx?: CreateContextOptions) => { FATAL: Multiple instances of @rnv/core detected: 1 (${global.RNV_CONTEXT.timeStart.toISOString()}) - ${global.RNV_CONTEXT.paths.RNV_CORE_HOME_DIR} + ${global.RNV_CONTEXT.paths.rnvCore.dir} 2 (${new Date().toISOString()}) ${path.join(__dirname, '../..')} @@ -68,53 +69,53 @@ ${msg} const c: RnvContext = generateContextDefaults(); - c.program = ctx?.program || c.program; - c.process = ctx?.process || c.process; - c.command = ctx?.cmd || c.command; - c.subCommand = ctx?.subCmd || c.subCommand; + c.program = ctxOpts?.program || c.program; + c.process = ctxOpts?.process || c.process; + c.command = ctxOpts?.cmd || c.command; + c.subCommand = ctxOpts?.subCmd || c.subCommand; c.isSystemWin = isSystemWin; - c.paths.rnv.dir = ctx?.RNV_HOME_DIR || c.paths.rnv.dir; - - populateContextPaths(c); global.RNV_CONTEXT = c; -}; -export const populateContextPaths = (c: RnvContext) => { - c.paths.CURRENT_DIR = path.resolve('.'); - c.paths.RNV_NODE_MODULES_DIR = path.join(c.paths.rnv.dir, 'node_modules'); + populateContextPaths(c, ctxOpts?.RNV_HOME_DIR); +}; - c.paths.rnv.engines.dir = path.join(c.paths.rnv.dir, 'engineTemplates'); - c.paths.rnv.pluginTemplates.overrideDir = path.join(c.paths.rnv.dir, 'pluginTemplates'); +export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undefined) => { + // user ------------------ + c.paths.user.homeDir = homedir(); + c.paths.user.currentDir = path.resolve('.'); - c.paths.rnv.pluginTemplates.config = path.join(c.paths.rnv.pluginTemplates.overrideDir, ConfigName.renativePlugins); - c.paths.rnv.projectTemplates.dir = path.join(c.paths.rnv.dir, 'templateFiles'); - c.paths.rnv.projectTemplates.config = path.join(c.paths.rnv.core.dir, ConfigName.renativeTemplates); + // @rnv/core ------------------ + c.paths.rnvCore.dir = path.join(__dirname, '../..'); //path.join(c.paths.RNV_CORE_HOME_DIR); + c.paths.rnvCore.templateFilesDir = path.join(c.paths.rnvCore.dir, 'templateFiles'); c.paths.rnv.package = path.join(c.paths.rnv.dir, 'package.json'); + c.files.rnvCore.package = JSON.parse(fsReadFileSync(c.paths.rnvCore.package).toString()); - c.paths.rnv.core.dir = path.join(c.paths.RNV_CORE_HOME_DIR); - c.paths.rnv.core.package = path.join(c.paths.rnv.core.dir, 'package.json'); + // rnv ------------------ + if (RNV_HOME_DIR) { + c.paths.rnv.dir = RNV_HOME_DIR; + // c.paths.rnv.nodeModulesDir = path.join(c.paths.rnv.dir, 'node_modules'); + c.paths.rnv.package = path.join(c.paths.rnv.dir, 'package.json'); - c.paths.rnv.projectTemplate.dir = path.join(c.paths.rnv.dir, 'templateFiles'); - c.files.rnv.package = JSON.parse(fsReadFileSync(c.paths.rnv.package).toString()); - - c.files.rnv.core.package = JSON.parse(fsReadFileSync(c.paths.rnv.core.package).toString()); - - c.platform = c.program.platform; - c.paths.home.dir = USER_HOME_DIR; - c.paths.GLOBAL_RNV_DIR = path.join(c.paths.home.dir, '.rnv'); - c.paths.GLOBAL_RNV_CONFIG = path.join(c.paths.GLOBAL_RNV_DIR, ConfigName.renative); - c.paths.rnv.configWorkspaces = path.join(c.paths.GLOBAL_RNV_DIR, ConfigName.renativeWorkspaces); + c.files.rnv.package = JSON.parse(fsReadFileSync(c.paths.rnv.package).toString()); + } - if (!fsExistsSync(c.paths.GLOBAL_RNV_DIR)) { - mkdirSync(c.paths.GLOBAL_RNV_DIR); + // dotRnv ------------------ + c.paths.dotRnv.dir = path.join(c.paths.user.homeDir, '.rnv'); + if (!fsExistsSync(c.paths.dotRnv.dir)) { + mkdirSync(c.paths.dotRnv.dir); } + // c.paths.dotRnv.config = path.join(c.paths.dotRnv.dir, ConfigName.renative); + c.paths.dotRnv.configWorkspaces = path.join(c.paths.dotRnv.dir, ConfigName.renativeWorkspaces); - generateContextPaths(c.paths.project, c.paths.CURRENT_DIR, c.program.configName); + // workspace ------------------ + generateContextPaths(c.paths.workspace, c.paths.dotRnv.dir); - // TODO: generate solution root + // solution ------------------ + // TODO: generate solution root paths - populateLinkingInfo(c); + // project ------------------ + generateContextPaths(c.paths.project, c.paths.user.currentDir, c.program.configName); c.paths.buildHooks.dir = path.join(c.paths.project.dir, 'buildHooks'); c.paths.buildHooks.src.dir = path.join(c.paths.buildHooks.dir, 'src'); c.paths.buildHooks.dist.dir = path.join(c.paths.buildHooks.dir, 'dist'); @@ -141,7 +142,18 @@ export const populateContextPaths = (c: RnvContext) => { c.paths.project.assets.config = path.join(c.paths.project.assets.dir, ConfigName.renativeRuntime); c.paths.project.builds.dir = path.join(c.paths.project.dir, 'platformBuilds'); - generateContextPaths(c.paths.workspace, c.paths.GLOBAL_RNV_DIR); + // @rnv/plugins ------------------ + // TODO: not populated + c.paths.rnvPlugins.pluginTemplatesDir = '????'; + c.paths.rnvPlugins.configPluginTemplates = path.join( + c.paths.rnvPlugins.pluginTemplatesDir, + ConfigName.renativePlugins + ); + c.paths.rnvPlugins.configProjectTemplates = path.join(c.paths.rnvPlugins.dir, ConfigName.renativeTemplates); + + // runtime + c.platform = c.program.platform; + populateLinkingInfo(c); }; createRnvContext(); diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 155bff8402..328a3322c4 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -145,28 +145,31 @@ export type RnvContextRuntime = { export type RuntimePropKey = keyof RnvContextRuntime; export type RnvContextFiles = { - rnv: { - pluginTemplates: { - config?: ConfigFilePlugins; - configs: Record; - }; - projectTemplates: { - config?: ConfigFileTemplates; - }; + dotRnv: { configWorkspaces?: ConfigFileWorkspaces; + }; + rnv: { package: NpmPackageFile; - core: { - package: NpmPackageFile; - }; }; - workspace: RnvContextFileObj & { - project: RnvContextFileObj; - appConfig: RnvContextFileObj; + rnvCore: { + package: NpmPackageFile; + }; + rnvPlugins: { + package?: NpmPackageFile; + configProjectTemplates?: ConfigFileTemplates; + configPluginTemplates?: ConfigFilePlugins; + }; + scopedPluginTemplates: { + configs: Record; }; - defaultWorkspace: RnvContextFileObj & { + workspace: RnvContextFileObj & { project: RnvContextFileObj; appConfig: RnvContextFileObj; }; + // defaultWorkspace: RnvContextFileObj & { + // project: RnvContextFileObj; + // appConfig: RnvContextFileObj; + // }; project: RnvContextFileObj & { builds: Record; assets: { @@ -188,38 +191,47 @@ export type RnvContextFileObj = { }; export type RnvContextPaths = { - GLOBAL_RNV_CONFIG: string; - GLOBAL_RNV_DIR: string; - RNV_HOME_DIR: string; + // GLOBAL_RNV_CONFIG: string; + // GLOBAL_RNV_DIR: string; + // RNV_HOME_DIR: string; IS_LINKED: boolean; IS_NPX_MODE: boolean; - CURRENT_DIR: string; - RNV_CORE_HOME_DIR: string; - RNV_NODE_MODULES_DIR: string; + // CURRENT_DIR: string; + // RNV_CORE_HOME_DIR: string; + // RNV_NODE_MODULES_DIR: string; //======= - rnv: { + user: { + homeDir: string; + currentDir: string; + }; + dotRnv: { + dir: string; + // config: string; configWorkspaces: string; - pluginTemplates: { - overrideDir?: string; - config?: string; - dirs: Record; - }; - projectTemplates: { - config: string; - dir: string; - }; - engines: { - dir: string; - }; - projectTemplate: { - dir: string; - }; + }; + rnvPlugins: { + dir: string; + package: string; + configProjectTemplates: string; + configPluginTemplates: string; + pluginTemplatesDir: string; + // pluginTemplatesDir: { + // config?: string; + // dirs: Record; + // }; + }; + scopedPluginTemplates: { + dirs: Record; + configs: Record; + }; + rnvCore: { + dir: string; + package: string; + templateFilesDir: string; + }; + rnv: { dir: string; package: string; - core: { - dir: string; - package: string; - }; }; workspace: RnvContextPathObj & { project: RnvContextPathObj & { @@ -231,24 +243,24 @@ export type RnvContextPaths = { }; appConfig: RnvContextPathObj; }; - defaultWorkspace: RnvContextPathObj & { - project: { - appConfigBase: { - dir: string; - }; - builds: { - dir: string; - }; - assets: { - dir: string; - }; - }; - appConfig: { - configs: Array; - configsPrivate: Array; - configsLocal: Array; - }; - }; + // defaultWorkspace: RnvContextPathObj & { + // project: { + // appConfigBase: { + // dir: string; + // }; + // builds: { + // dir: string; + // }; + // assets: { + // dir: string; + // }; + // }; + // appConfig: { + // configs: Array; + // configsPrivate: Array; + // configsLocal: Array; + // }; + // }; project: RnvContextPathObj & { appConfigBase: { dir: string; @@ -290,9 +302,6 @@ export type RnvContextPaths = { }; tsconfig: string; }; - home: { - dir: string; - }; template: { appConfigBase: { dir: string; @@ -308,7 +317,7 @@ export type RnvContextPaths = { config: string; dir: string; }; - appConfigBase: string; + appConfigBase: string; //REMOVE? }; export type RnvContextPathObj = { diff --git a/packages/core/src/system/fs.ts b/packages/core/src/system/fs.ts index c548c5f966..db30f921b4 100755 --- a/packages/core/src/system/fs.ts +++ b/packages/core/src/system/fs.ts @@ -551,12 +551,12 @@ export const getRealPath = (p: string | undefined, key = 'undefined', original?: } const output = p .replace(/\$RNV_HOME/g, c.paths.rnv.dir) - .replace(/~/g, c.paths.home.dir) - .replace(/\$USER_HOME/g, c.paths.home.dir) + .replace(/~/g, c.paths.user.homeDir) + .replace(/\$USER_HOME/g, c.paths.user.homeDir) .replace(/\$PROJECT_HOME/g, c.paths.project.dir) .replace(/\$WORKSPACE_HOME/g, c.paths.workspace.dir) .replace(/RNV_HOME/g, c.paths.rnv.dir) - .replace(/USER_HOME/g, c.paths.home.dir) + .replace(/USER_HOME/g, c.paths.user.homeDir) .replace(/PROJECT_HOME/g, c.paths.project.dir); return output; }; From e43accc14d53fe434fe3f4f186a9fe207a1aadb3 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Mon, 18 Mar 2024 13:11:23 +0200 Subject: [PATCH 042/175] fix/flipper_xcode_15.3 --- .../engine-rn-tvos/templates/platforms/tvos/Podfile | 13 +++++++++++++ packages/engine-rn/templates/platforms/ios/Podfile | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/packages/engine-rn-tvos/templates/platforms/tvos/Podfile b/packages/engine-rn-tvos/templates/platforms/tvos/Podfile index f221c517b1..92afdc3633 100644 --- a/packages/engine-rn-tvos/templates/platforms/tvos/Podfile +++ b/packages/engine-rn-tvos/templates/platforms/tvos/Podfile @@ -82,6 +82,19 @@ post_install do |installer| :mac_catalyst_enabled => false ) {{INJECT_POST_INSTALL}} + + installer.pods_project.targets.each do |target| + if target.name == 'Flipper' + file_path = 'Pods/Flipper/xplat/Flipper/FlipperTransportTypes.h' + contents = File.read(file_path) + unless contents.include?('#include ') + File.open(file_path, 'w') do |file| + file.puts('#include ') + file.puts(contents) + end + end + end + end end {{INJECT_PLUGIN_PODFILE_INJECT}} \ No newline at end of file diff --git a/packages/engine-rn/templates/platforms/ios/Podfile b/packages/engine-rn/templates/platforms/ios/Podfile index 80770050c4..93c1d15fcf 100755 --- a/packages/engine-rn/templates/platforms/ios/Podfile +++ b/packages/engine-rn/templates/platforms/ios/Podfile @@ -65,6 +65,19 @@ target 'RNVApp' do :mac_catalyst_enabled => false ) {{INJECT_POST_INSTALL}} + + installer.pods_project.targets.each do |target| + if target.name == 'Flipper' + file_path = 'Pods/Flipper/xplat/Flipper/FlipperTransportTypes.h' + contents = File.read(file_path) + unless contents.include?('#include ') + File.open(file_path, 'w') do |file| + file.puts('#include ') + file.puts(contents) + end + end + end + end end end From 5621825f59003a707c4a8fc015e69198a7a2f080 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 13:06:37 +0100 Subject: [PATCH 043/175] context paths, objs refactor --- packages/core/src/buildHooks/index.ts | 2 +- packages/core/src/configs/buildConfig.ts | 18 ++++---- packages/core/src/configs/engines.ts | 2 +- packages/core/src/configs/templates.ts | 2 +- packages/core/src/configs/workspaces.ts | 45 ++++++++++--------- packages/core/src/context/defaults.ts | 2 + packages/core/src/context/types.ts | 3 +- packages/core/src/engines/index.ts | 2 +- packages/core/src/plugins/index.ts | 32 ++++++------- packages/core/src/projects/bootstrap.ts | 4 +- packages/core/src/projects/version.ts | 2 +- packages/engine-core/src/plugins.ts | 4 +- .../src/tasks/global/new/projectGenerator.ts | 4 +- .../tasks/telemetry/taskTelemetryDisable.ts | 2 +- .../tasks/telemetry/taskTelemetryEnable.ts | 2 +- .../tasks/telemetry/taskTelemetryStatus.ts | 2 +- .../tasks/workspace/taskWorkspaceConnect.ts | 2 +- .../src/tasks/workspace/taskWorkspaceList.ts | 2 +- .../src/tasks/taskCryptoInstallProfiles.ts | 2 +- .../src/tasks/taskCryptoInstallProfiles.ts | 2 +- packages/sdk-android/src/deviceManager.ts | 2 +- packages/sdk-android/src/manifestParser.ts | 4 +- packages/sdk-apple/src/provisionParser.ts | 2 +- packages/sdk-telemetry/src/index.ts | 2 +- packages/sdk-webos/src/deviceManager.ts | 2 +- 25 files changed, 78 insertions(+), 70 deletions(-) diff --git a/packages/core/src/buildHooks/index.ts b/packages/core/src/buildHooks/index.ts index d6846883b8..49a6ac76fa 100644 --- a/packages/core/src/buildHooks/index.ts +++ b/packages/core/src/buildHooks/index.ts @@ -77,7 +77,7 @@ export const buildHooks = async () => { buildHooksSource = path.join(templatePath, 'buildHooks/src'); shouldBuildHook = true; } else { - buildHooksSource = path.join(c.paths.rnv.core.dir, 'templateFiles/buildHooksSrc'); + buildHooksSource = path.join(c.paths.rnvCore.templateFilesDir, 'buildHooksSrc'); } copyFolderContentsRecursiveSync(buildHooksSource, c.paths.buildHooks.src.dir); diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 9ca3e52e3d..3d068b0449 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -51,9 +51,10 @@ export const generateBuildConfig = () => { const c = getContext(); const mergeOrder = [ - c.paths.defaultWorkspace.config, - c.paths.rnv.projectTemplates.config, - c.paths.rnv.pluginTemplates.config, + // TODO: do we need to merge .rnv/renative.json with .customWorkspace/reantive.json ? + // c.paths.dotRnv.config, + c.paths.rnvPlugins.configProjectTemplates, + c.paths.rnvPlugins.configPluginTemplates, c.paths.workspace.config, c.paths.workspace.configPrivate, c.paths.workspace.configLocal, @@ -82,9 +83,9 @@ export const generateBuildConfig = () => { }); const pluginTemplates: Record = {}; - if (c.files.rnv.pluginTemplates.configs) { - Object.keys(c.files.rnv.pluginTemplates.configs).forEach((v) => { - const plgs = c.files.rnv.pluginTemplates.configs[v]; + if (c.files.scopedPluginTemplates.configs) { + Object.keys(c.files.scopedPluginTemplates.configs).forEach((v) => { + const plgs = c.files.scopedPluginTemplates.configs[v]; pluginTemplates[v] = plgs; }); } @@ -92,8 +93,9 @@ export const generateBuildConfig = () => { const extraPlugins = getEnginesPluginDelta(); const mergeFiles = [ - c.files.defaultWorkspace.config, - c.files.rnv.projectTemplates.config, + // TODO: do we need to merge .rnv/renative.json with .customWorkspace/reantive.json ? + // c.files.dotRnv.config, + c.files.rnvPlugins.configProjectTemplates, { plugins: extraPlugins }, // { pluginTemplates }, c.files.workspace.config, diff --git a/packages/core/src/configs/engines.ts b/packages/core/src/configs/engines.ts index add9577dc7..2656446f41 100644 --- a/packages/core/src/configs/engines.ts +++ b/packages/core/src/configs/engines.ts @@ -42,7 +42,7 @@ export const getEngineTemplateByPlatform = (platform: RnvPlatform): RnvEngineTem c.program.engine || getConfigProp('engine') || //Adding this as default engines moved from platforms into platformTemplates - c.files.rnv.projectTemplates.config?.platformTemplates?.[platform]?.engine; + c.files.rnvPlugins.configProjectTemplates?.platformTemplates?.[platform]?.engine; let selectedEngineConfig: RnvEngineTemplate | null = null; Object.values(mergedEngineConfigs).forEach((engineConfig) => { diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts index de2cc4bdb4..9c8e02ace8 100644 --- a/packages/core/src/configs/templates.ts +++ b/packages/core/src/configs/templates.ts @@ -43,7 +43,7 @@ export const getTemplateOptions = (isGlobalScope?: boolean) => { const c = getContext(); let defaultProjectTemplates; if (isGlobalScope) { - defaultProjectTemplates = c.files.rnv.projectTemplates.config?.projectTemplates; + defaultProjectTemplates = c.files.rnvPlugins.configProjectTemplates?.projectTemplates; } else { defaultProjectTemplates = c.buildConfig.projectTemplates || {}; } diff --git a/packages/core/src/configs/workspaces.ts b/packages/core/src/configs/workspaces.ts index 3285f9f01a..8f2c4e5299 100644 --- a/packages/core/src/configs/workspaces.ts +++ b/packages/core/src/configs/workspaces.ts @@ -10,7 +10,7 @@ import { ConfigFileWorkspace, ConfigFileWorkspaces } from '../schema/configFiles export const createWorkspace = async (workspaceID: string, workspacePath: string) => { const c = getContext(); - const cnf = c.files.rnv.configWorkspaces; + const cnf = c.files.dotRnv.configWorkspaces; if (!cnf) return; @@ -19,33 +19,36 @@ export const createWorkspace = async (workspaceID: string, workspacePath: string }; const workspaceConfig = { - sdks: c.files.defaultWorkspace?.config?.sdks, - defaultTargets: c.files.defaultWorkspace?.config?.defaultTargets, + // sdks: c.files.defaultWorkspace?.config?.sdks, + // defaultTargets: c.files.defaultWorkspace?.config?.defaultTargets, + // TODO: use empty default? + sdks: {}, + defaultTargets: {}, }; mkdirSync(workspacePath); writeFileSync(path.join(workspacePath, 'renative.json'), workspaceConfig); - writeFileSync(c.paths.rnv.configWorkspaces, cnf); + writeFileSync(c.paths.dotRnv.configWorkspaces, cnf); return true; }; export const getWorkspaceDirPath = async (c: RnvContext) => { logDefault('getWorkspaceDirPath'); - const wss = c.files.rnv.configWorkspaces; + const wss = c.files.dotRnv.configWorkspaces; const ws = c.runtime.selectedWorkspace || c.buildConfig?.workspaceID; let dirPath; if (wss?.workspaces && ws) { dirPath = wss.workspaces[ws]?.path; if (!dirPath) { - const wsDir = path.join(c.paths.home.dir, `.${ws}`); + const wsDir = path.join(c.paths.user.homeDir, `.${ws}`); if (fsExistsSync(wsDir)) { wss.workspaces[ws] = { path: wsDir, }; - writeFileSync(c.paths.rnv.configWorkspaces, wss); + writeFileSync(c.paths.dotRnv.configWorkspaces, wss); logInfo( - `Found workspace id ${ws} and compatible directory ${wsDir}. Your ${c.paths.rnv.configWorkspaces} has been updated.` + `Found workspace id ${ws} and compatible directory ${wsDir}. Your ${c.paths.dotRnv.configWorkspaces} has been updated.` ); } else if (!c.runtime.isWSConfirmed || c.program.ci === true) { let confirm = true; @@ -71,7 +74,7 @@ export const getWorkspaceDirPath = async (c: RnvContext) => { } if (!dirPath) { - return c.paths.GLOBAL_RNV_DIR; + return c.paths.dotRnv.dir; } return dirPath; }; @@ -84,7 +87,7 @@ export const getWorkspaceConnectionString = (obj?: ConfigFileWorkspaces['workspa export const getWorkspaceOptions = () => { const c = getContext(); - return generateOptions(c.files.rnv.configWorkspaces?.workspaces, false, null, (i, obj, mapping, defaultVal) => { + return generateOptions(c.files.dotRnv.configWorkspaces?.workspaces, false, null, (i, obj, mapping, defaultVal) => { logDebug('getWorkspaceOptions'); return ` [${chalk().grey(i + 1)}]> ${chalk().bold(defaultVal)} ${getWorkspaceConnectionString(obj)}\n`; @@ -94,42 +97,42 @@ export const getWorkspaceOptions = () => { export const loadWorkspacesConfigSync = () => { const c = getContext(); // CHECK WORKSPACES - if (fsExistsSync(c.paths.rnv.configWorkspaces)) { - logDebug(`${c.paths.rnv.configWorkspaces} file exists!`); + if (fsExistsSync(c.paths.dotRnv.configWorkspaces)) { + logDebug(`${c.paths.dotRnv.configWorkspaces} file exists!`); - const cnf = readObjectSync(c.paths.rnv.configWorkspaces); + const cnf = readObjectSync(c.paths.dotRnv.configWorkspaces); if (!cnf) return; - c.files.rnv.configWorkspaces = cnf; + c.files.dotRnv.configWorkspaces = cnf; if (!cnf.workspaces) { cnf.workspaces = {}; } if (Object.keys(cnf.workspaces).length === 0) { - logWarning(`No workspace found in ${c.paths.rnv.configWorkspaces}. Creating default rnv one for you`); + logWarning(`No workspace found in ${c.paths.dotRnv.configWorkspaces}. Creating default rnv one for you`); cnf.workspaces = { rnv: { path: c.paths.workspace.dir, }, }; - writeFileSync(c.paths.rnv.configWorkspaces, cnf); + writeFileSync(c.paths.dotRnv.configWorkspaces, cnf); } } else { - logWarning(`Cannot find ${c.paths.rnv.configWorkspaces}. creating one..`); - c.files.rnv.configWorkspaces = { + logWarning(`Cannot find ${c.paths.dotRnv.configWorkspaces}. creating one..`); + c.files.dotRnv.configWorkspaces = { workspaces: { rnv: { path: c.paths.workspace.dir, }, }, }; - writeFileSync(c.paths.rnv.configWorkspaces, c.files.rnv.configWorkspaces); + writeFileSync(c.paths.dotRnv.configWorkspaces, c.files.dotRnv.configWorkspaces); } - const defWsPath = c.paths.GLOBAL_RNV_CONFIG; + const defWsPath = c.paths.dotRnv.config; if (defWsPath && fsExistsSync(defWsPath)) { - c.files.defaultWorkspace.config = readObjectSync(defWsPath) || {}; + c.files.dotRnv.config = readObjectSync(defWsPath) || {}; } }; diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 3d5ba032da..09c44d1ab0 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -143,6 +143,7 @@ export const generateContextDefaults = (): RnvContext => ({ }, dotRnv: { dir: '', + config: '', configWorkspaces: '', }, project: { @@ -211,6 +212,7 @@ export const generateContextDefaults = (): RnvContext => ({ configWorkspaces: { workspaces: {}, }, + config: {}, }, rnvCore: { package: {}, diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 328a3322c4..e3ff9502d9 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -147,6 +147,7 @@ export type RuntimePropKey = keyof RnvContextRuntime; export type RnvContextFiles = { dotRnv: { configWorkspaces?: ConfigFileWorkspaces; + config: ConfigFileWorkspace; }; rnv: { package: NpmPackageFile; @@ -206,7 +207,7 @@ export type RnvContextPaths = { }; dotRnv: { dir: string; - // config: string; + config: string; configWorkspaces: string; }; rnvPlugins: { diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 60536f5572..8c8650c8f1 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -318,7 +318,7 @@ const _getFilteredEngines = (c: RnvContext) => { logError('Engine configs missing in your renative.json. FIXING...DONE'); return {}; } - const rnvPlatforms = c.files.rnv.projectTemplates?.config?.platformTemplates; + const rnvPlatforms = c.files.rnvPlugins.configProjectTemplates?.platformTemplates; const supportedPlatforms = c.files.project.config?.defaults?.supportedPlatforms || []; const filteredEngines: Record = {}; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index af87c9220a..5f3f81cd9e 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -504,19 +504,19 @@ export const loadPluginTemplates = async () => { const flexnPluginTemplates = readObjectSync( path.join(flexnPluginTemplatesPath, 'renative.plugins.json') ); - const rnvPluginTemplates = readObjectSync(c.paths.rnv.pluginTemplates.config); + const rnvPluginTemplates = readObjectSync(c.paths.rnvPlugins.configPluginTemplates); const cnf = merge(flexnPluginTemplates || {}, rnvPluginTemplates || {}); if (cnf) { - c.files.rnv.pluginTemplates.config = cnf; - c.files.rnv.pluginTemplates.configs = { + c.files.rnvPlugins.configPluginTemplates = cnf; + c.files.scopedPluginTemplates.configs = { rnv: cnf, }; } //Override default rnv path with flexn one and add it rnv as overrider - c.paths.rnv.pluginTemplates.dirs = { + c.paths.scopedPluginTemplates.dirs = { rnv: flexnPluginTemplatesPath, }; @@ -579,9 +579,9 @@ const _parsePluginTemplateDependencies = ( } const ptConfig = path.join(ptPath, ConfigName.renativePlugins); - c.paths.rnv.pluginTemplates.dirs[k] = ptPath; + c.paths.scopedPluginTemplates.dirs[k] = ptPath; if (fsExistsSync(ptConfig)) { - const ptConfigs = c.files.rnv.pluginTemplates.configs; + const ptConfigs = c.files.scopedPluginTemplates.configs; const ptConfigFile = readObjectSync(ptConfig); if (ptConfigFile) { ptConfigs[k] = ptConfigFile; @@ -589,7 +589,7 @@ const _parsePluginTemplateDependencies = ( // _parsePluginTemplateDependencies( // c, - // c.files.rnv.pluginTemplates.configs[k].pluginTemplateDependencies, + // c.files.scopedPluginTemplates.configs[k].pluginTemplateDependencies, // k // ); } else { @@ -836,7 +836,7 @@ export const overrideTemplatePlugins = async () => { const c = getContext(); - const rnvPluginsDirs = c.paths.rnv.pluginTemplates.dirs; + const rnvPluginsDirs = c.paths.scopedPluginTemplates.dirs; const appPluginDirs = c.paths.appConfig.pluginDirs; parsePlugins((plugin, pluginPlat, key) => { @@ -845,12 +845,12 @@ export const overrideTemplatePlugins = async () => { plugin._scopes.forEach((pluginScope) => { const pluginOverridePath = rnvPluginsDirs[pluginScope]; if (pluginOverridePath) { - const rnvOverridePath = path.join(c.paths.rnv.pluginTemplates.overrideDir!, key); - if (fsExistsSync(rnvOverridePath)) { - _overridePlugin(c, c.paths.rnv.pluginTemplates.overrideDir!, key); - } else { - _overridePlugin(c, pluginOverridePath, key); - } + // const rnvOverridePath = path.join(c.paths.rnv.pluginTemplates.overrideDir!, key); + // if (fsExistsSync(rnvOverridePath)) { + // _overridePlugin(c, c.paths.rnv.pluginTemplates.overrideDir!, key); + // } else { + _overridePlugin(c, pluginOverridePath, key); + // } } }); } @@ -908,10 +908,10 @@ export const copyTemplatePluginsSync = (c: RnvContext) => { copyFolderContentsRecursiveSync(sourcePath2sec, destPath, true, undefined, false, objectInject); // FOLDER MERGES FROM SCOPED PLUGIN TEMPLATES - Object.keys(c.paths.rnv.pluginTemplates.dirs).forEach((pathKey) => { + Object.keys(c.paths.scopedPluginTemplates.dirs).forEach((pathKey) => { // TODO: required for external rnv scoped templates to take effect. need to test full implications // if (pathKey !== 'rnv') { - const pluginTemplatePath = c.paths.rnv.pluginTemplates.dirs[pathKey]; + const pluginTemplatePath = c.paths.scopedPluginTemplates.dirs[pathKey]; const sourcePath4sec = getAppConfigBuildsFolder(path.join(pluginTemplatePath, key)); copyFolderContentsRecursiveSync(sourcePath4sec, destPath, true, undefined, false, objectInject); diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts index 2c58cc743e..e1c7ed6cf0 100644 --- a/packages/core/src/projects/bootstrap.ts +++ b/packages/core/src/projects/bootstrap.ts @@ -32,8 +32,8 @@ export const checkAndBootstrapIfRequired = async () => { const appConfigObj = readObjectSync(appConfigPath); const supportedPlatforms = appConfigObj?.defaults?.supportedPlatforms || []; //========= - const engineTemplates = c.files.rnv.projectTemplates?.config?.engineTemplates; - const rnvPlatforms = c.files.rnv.projectTemplates?.config?.platformTemplates || {}; + const engineTemplates = c.files.rnvPlugins.configProjectTemplates?.engineTemplates; + const rnvPlatforms = c.files.rnvPlugins.configProjectTemplates?.platformTemplates || {}; const activeEngineKeys: Array = []; if (engineTemplates) { diff --git a/packages/core/src/projects/version.ts b/packages/core/src/projects/version.ts index 0a5d43e4aa..f91a2799c1 100644 --- a/packages/core/src/projects/version.ts +++ b/packages/core/src/projects/version.ts @@ -9,7 +9,7 @@ export const versionCheck = async (c: RnvContext) => { if (c.runtime.versionCheckCompleted || c.files.project?.config?.skipAutoUpdate || c.program.skipDependencyCheck) { return true; } - c.runtime.rnvVersionRunner = c.files.rnv?.core?.package?.version || 'unknown'; + c.runtime.rnvVersionRunner = c.files.rnvCore?.package?.version || 'unknown'; c.runtime.rnvVersionProject = c.files.project?.package?.devDependencies?.['@rnv/core'] || c.files.project?.package?.dependencies?.['@rnv/core'] || diff --git a/packages/engine-core/src/plugins.ts b/packages/engine-core/src/plugins.ts index 0bdd4ffc45..bf6eb11644 100644 --- a/packages/engine-core/src/plugins.ts +++ b/packages/engine-core/src/plugins.ts @@ -37,8 +37,8 @@ export const getPluginList = (isUpdate = false) => { let i = 1; - Object.keys(c.files.rnv.pluginTemplates.configs).forEach((pk) => { - const plugins = c.files.rnv.pluginTemplates.configs[pk].pluginTemplates; + Object.keys(c.files.scopedPluginTemplates.configs).forEach((pk) => { + const plugins = c.files.scopedPluginTemplates.configs[pk].pluginTemplates; Object.keys(plugins).forEach((k) => { const plugin = plugins[k]; diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index 066d4ff761..88ba8adb02 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -100,7 +100,7 @@ export const generateNewProject = async (data: NewProjectData) => { supPlats.forEach((k) => { const selectedEngineId = loadedConf?.platforms?.[k]?.engine || - c.files.rnv.projectTemplates.config?.platformTemplates?.[k]?.engine; + c.files.rnvPlugins.configProjectTemplates?.platformTemplates?.[k]?.engine; if (selectedEngineId) { const selectedEngine = findEngineKeyById(selectedEngineId); @@ -148,7 +148,7 @@ export const telemetryNewProject = async (data: NewProjectData) => { const findEngineKeyById = (id: string) => { const c = getContext(); - const engineTemplates = c.files.rnv.projectTemplates.config?.engineTemplates; + const engineTemplates = c.files.rnvPlugins.configProjectTemplates?.engineTemplates; if (engineTemplates) { const etk = Object.keys(engineTemplates); for (let i = 0; i < etk.length; i++) { diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index 60efa63c21..b8ced57ee3 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -16,7 +16,7 @@ const taskTelemetryDisable: RnvTaskFn = async (c) => { if (config) { config.disableTelemetry = true; - writeFileSync(c.paths.GLOBAL_RNV_CONFIG, config); + writeFileSync(c.paths.dotRnv.config, config); logToSummary(` Succesfully ${chalk().red('disabled')} ReNative telemetry on your machine. diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index 9b5ed0dcf2..50f1387744 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -16,7 +16,7 @@ const taskTelemetryEnable: RnvTaskFn = async (c) => { if (config) { config.disableTelemetry = false; - writeFileSync(c.paths.GLOBAL_RNV_CONFIG, config); + writeFileSync(c.paths.dotRnv.config, config); logToSummary(` Succesfully ${chalk().green('enabled')} ReNative telemetry on your machine. diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts index e883b43b53..bf3b4c3898 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts @@ -3,7 +3,7 @@ import { chalk, logTask, logToSummary, RnvTaskOptionPresets, RnvTask, RnvTaskFn, const taskTelemetryStatus: RnvTaskFn = async (c) => { logTask('taskTelemetryStatus'); - const disableTelemetry = c.files.defaultWorkspace.config?.disableTelemetry; + const disableTelemetry = c.files.dotRnv.config?.disableTelemetry; if (disableTelemetry) { logToSummary( diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts index 4e1d05bf10..a171812803 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts @@ -18,7 +18,7 @@ const taskWorkspaceConnect: RnvTaskFn = async (c, _parentTask, originTask) => { } await executeTask(RnvTaskName.projectConfigure, RnvTaskName.workspaceConnect, originTask); - const cnf = c.files.rnv.configWorkspaces; + const cnf = c.files.dotRnv.configWorkspaces; if (!cnf) return; const opts = Object.keys(cnf.workspaces).map((v) => `${v} ${getWorkspaceConnectionString(cnf.workspaces[v])}`); diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts index 6f6e58618d..ad0399c024 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts @@ -18,7 +18,7 @@ const taskWorkspaceList: RnvTaskFn = async (c, _parentTask, originTask) => { } const opts = generateOptions( - c.files.rnv.configWorkspaces?.workspaces, + c.files.dotRnv.configWorkspaces?.workspaces, true, null, (i, obj, mapping, defaultVal) => { diff --git a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts b/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts index 43311186c7..7c89c671c6 100644 --- a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts @@ -28,7 +28,7 @@ const taskCryptoInstallProfiles: RnvTaskFn = async (c, _parentTask, originTask) return true; } - const ppFolder = path.join(c.paths.home.dir, 'Library/MobileDevice/Provisioning Profiles'); + const ppFolder = path.join(c.paths.user.homeDir, 'Library/MobileDevice/Provisioning Profiles'); if (!fsExistsSync(ppFolder)) { logWarning(`folder ${ppFolder} does not exist!`); diff --git a/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts b/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts index 1b90be0aff..f5e6e0247b 100644 --- a/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts @@ -27,7 +27,7 @@ const taskCryptoInstallProfiles: RnvTaskFn = async (c, _parentTask, originTask) return true; } - const ppFolder = path.join(c.paths.home.dir, 'Library/MobileDevice/Provisioning Profiles'); + const ppFolder = path.join(c.paths.user.homeDir, 'Library/MobileDevice/Provisioning Profiles'); if (!fsExistsSync(ppFolder)) { logWarning(`folder ${ppFolder} does not exist!`); diff --git a/packages/sdk-android/src/deviceManager.ts b/packages/sdk-android/src/deviceManager.ts index 814329a90e..9f0d04f0fa 100644 --- a/packages/sdk-android/src/deviceManager.ts +++ b/packages/sdk-android/src/deviceManager.ts @@ -117,7 +117,7 @@ export const launchAndroidSimulator = async ( logWarning( `Target with name ${chalk().red( newTarget - )} does not exist. You can update it here: ${chalk().cyan(c.paths.GLOBAL_RNV_CONFIG)}` + )} does not exist. You can update it here: ${chalk().cyan(c.paths.dotRnv.config)}` ); await launchAndroidSimulator(true, false); return true; diff --git a/packages/sdk-android/src/manifestParser.ts b/packages/sdk-android/src/manifestParser.ts index ebaa9dcc2b..2cae715ca5 100644 --- a/packages/sdk-android/src/manifestParser.ts +++ b/packages/sdk-android/src/manifestParser.ts @@ -180,8 +180,8 @@ const _mergeFeatures = ( const getConfigPropArray = (c: RnvContext, platform: RnvPlatform, key: T) => { const result: Array = []; const configArr = [ - c.files.defaultWorkspace.config, - c.files.rnv.projectTemplates.config, + c.files.dotRnv.config, + c.files.rnvPlugins.configProjectTemplates, // { plugins: extraPlugins }, // { pluginTemplates }, c.files.workspace.config, diff --git a/packages/sdk-apple/src/provisionParser.ts b/packages/sdk-apple/src/provisionParser.ts index de3ece7d25..24ca1aba72 100644 --- a/packages/sdk-apple/src/provisionParser.ts +++ b/packages/sdk-apple/src/provisionParser.ts @@ -20,7 +20,7 @@ export const parseProvisioningProfiles = async (c: Context) => { } catch (e) { logWarning( `You have no provisioning files available. Check your ${chalk().bold( - path.join(c.paths.home.dir, 'Library/MobileDevice/Provisioning Profiles') + path.join(c.paths.user.homeDir, 'Library/MobileDevice/Provisioning Profiles') )} folder` ); } diff --git a/packages/sdk-telemetry/src/index.ts b/packages/sdk-telemetry/src/index.ts index 22aae176d5..314facc1d5 100644 --- a/packages/sdk-telemetry/src/index.ts +++ b/packages/sdk-telemetry/src/index.ts @@ -56,7 +56,7 @@ export class AnalyticsCls { get isAnalyticsEnabled() { const c = getContext(); - return !c.files.defaultWorkspace.config?.disableTelemetry && c.process.env.RNV_TELEMETRY_DISABLED !== '1'; + return !c.files.dotRnv.config?.disableTelemetry && c.process.env.RNV_TELEMETRY_DISABLED !== '1'; } initialize() { diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index c0d918d718..eb65f0d2b9 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -59,7 +59,7 @@ export const launchWebOSimulator = async (target: string | boolean) => { } else if (typeof target === 'string' && !availableSimulatorVersions.includes(target)) { logWarning( `Target with name ${chalk().red(target)} does not exist. You can update it here: ${chalk().cyan( - c.paths.GLOBAL_RNV_CONFIG + c.paths.dotRnv.config )}` ); await launchWebOSimulator(true); From 9dde48745202a64b112776143ba862900643eb27 Mon Sep 17 00:00:00 2001 From: pauliusguzas Date: Mon, 18 Mar 2024 15:29:22 +0200 Subject: [PATCH 044/175] fix: change e2e selector because renative text has been removed from mobiles --- packages/app-harness/src/app/index.tsx | 2 +- packages/app-harness/test/specs/e2e.cjs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/app-harness/src/app/index.tsx b/packages/app-harness/src/app/index.tsx index 85193e0a18..428f1387cc 100644 --- a/packages/app-harness/src/app/index.tsx +++ b/packages/app-harness/src/app/index.tsx @@ -52,7 +52,7 @@ const AppContent = () => { ReNative Harness diff --git a/packages/app-harness/test/specs/e2e.cjs b/packages/app-harness/test/specs/e2e.cjs index d1fa07c02b..04d4e695ab 100644 --- a/packages/app-harness/test/specs/e2e.cjs +++ b/packages/app-harness/test/specs/e2e.cjs @@ -5,7 +5,7 @@ describe('Test App Harness', () => { FlexnRunner.launchApp(); }); - it('--> check if element has correct text in Home Page', async () => { - await FlexnRunner.expectToHaveTextById('app-harness-home-screen-intro-text', 'ReNative Harness'); + it('--> check if ReNative logo is displayed in Home Page', async () => { + await FlexnRunner.expectToBeDisplayedById('app-harness-home-screen-renative-image'); }); }); From a0c746d83768525b27fde53e320506ae55845e10 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 14:34:10 +0100 Subject: [PATCH 045/175] fix errors --- .../tasks/global/new/questions/projectName.ts | 2 +- .../engine-core/src/tasks/global/new/utils.ts | 2 +- .../tasks/telemetry/taskTelemetryDisable.ts | 2 +- .../tasks/telemetry/taskTelemetryEnable.ts | 2 +- packages/sdk-android/src/deviceManager.ts | 7 ++- packages/sdk-android/src/installer.ts | 50 ++++++++++--------- packages/sdk-tizen/src/installer.ts | 19 ++++--- 7 files changed, 47 insertions(+), 37 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index a6abcbfdc2..c30ca23245 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -21,7 +21,7 @@ export const inquiryProjectName = async (data: NewProjectData) => { data.projectName = data.inputProjectName?.replace?.(/(\s+)/g, '_'); data.packageName = data.inputProjectName?.replace(/\s+/g, '-').toLowerCase(); - c.paths.project.dir = path.join(c.paths.CURRENT_DIR, data.projectName || ''); + c.paths.project.dir = path.join(c.paths.user.currentDir, data.projectName || ''); c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); diff --git a/packages/engine-core/src/tasks/global/new/utils.ts b/packages/engine-core/src/tasks/global/new/utils.ts index 366a53433d..59027d0904 100644 --- a/packages/engine-core/src/tasks/global/new/utils.ts +++ b/packages/engine-core/src/tasks/global/new/utils.ts @@ -4,7 +4,7 @@ export const processChdirToProject = async () => { const c = getContext(); // In order to execute rnv from new origin (sub folder we need to reset paths to new cwd()) process.chdir(c.paths.project.dir); - populateContextPaths(c); + populateContextPaths(c, c.paths.rnv.dir); return true; }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index b8ced57ee3..6b3bbeeab2 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -12,7 +12,7 @@ import { const taskTelemetryDisable: RnvTaskFn = async (c) => { logTask('taskTelemetryDisable'); - const { config } = c.files.defaultWorkspace; + const { config } = c.files.dotRnv; if (config) { config.disableTelemetry = true; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index 50f1387744..a2912b32fa 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -12,7 +12,7 @@ import { const taskTelemetryEnable: RnvTaskFn = async (c) => { logTask('taskTelemetryEnable'); - const { config } = c.files.defaultWorkspace; + const { config } = c.files.dotRnv; if (config) { config.disableTelemetry = false; diff --git a/packages/sdk-android/src/deviceManager.ts b/packages/sdk-android/src/deviceManager.ts index 9f0d04f0fa..6e508fd232 100644 --- a/packages/sdk-android/src/deviceManager.ts +++ b/packages/sdk-android/src/deviceManager.ts @@ -17,7 +17,6 @@ import { logDebug, logSuccess, logRaw, - USER_HOME_DIR, RnvContext, waitForExecCLI, inquirerPrompt, @@ -390,7 +389,11 @@ const getAvdDetails = (c: RnvContext, deviceName: string) => { const { ANDROID_SDK_HOME, ANDROID_AVD_HOME } = process.env; // .avd dir might be in other place than homedir. (https://developer.android.com/studio/command-line/variables) - const avdConfigPaths = [`${ANDROID_AVD_HOME}`, `${ANDROID_SDK_HOME}/.android/avd`, `${USER_HOME_DIR}/.android/avd`]; + const avdConfigPaths = [ + `${ANDROID_AVD_HOME}`, + `${ANDROID_SDK_HOME}/.android/avd`, + `${c.paths.user.homeDir}/.android/avd`, + ]; const results: { avdConfig?: Record } = {}; diff --git a/packages/sdk-android/src/installer.ts b/packages/sdk-android/src/installer.ts index 3d88a0365f..510157ce40 100644 --- a/packages/sdk-android/src/installer.ts +++ b/packages/sdk-android/src/installer.ts @@ -1,6 +1,5 @@ import path from 'path'; import { - USER_HOME_DIR, isSystemWin, getRealPath, writeFileSync, @@ -24,26 +23,31 @@ import { CLI_ANDROID_EMULATOR, CLI_ANDROID_ADB, CLI_ANDROID_AVDMANAGER, CLI_ANDR type SDKKey = keyof Required['sdks']; -const SDK_LOCATIONS: Record> = { - android: [ - path.join('/usr/local/android-sdk'), - path.join(USER_HOME_DIR, 'Library/Android/sdk'), - path.join(USER_HOME_DIR, 'AppData/Local/Android/android-sdk'), - path.join(USER_HOME_DIR, 'AppData/Local/Android/sdk'), - path.join('Program Files (x86)/Android/android-sdk'), - ], - 'android-ndk': [ - path.join('/usr/local/android-sdk/ndk'), - path.join(USER_HOME_DIR, 'Library/Android/sdk/ndk'), - path.join(USER_HOME_DIR, 'AppData/Local/Android/android-sdk/ndk'), - path.join(USER_HOME_DIR, 'AppData/Local/Android/sdk/ndk'), - path.join('Program Files (x86)/Android/android-sdk/ndk'), - path.join('/usr/local/android-sdk/ndk-bundle'), - path.join(USER_HOME_DIR, 'Library/Android/sdk/ndk-bundle'), - path.join(USER_HOME_DIR, 'AppData/Local/Android/android-sdk/ndk-bundle'), - path.join(USER_HOME_DIR, 'AppData/Local/Android/sdk/ndk-bundle'), - path.join('Program Files (x86)/Android/android-sdk/ndk-bundle'), - ], +const getSdkLocations = () => { + const ctx = getContext(); + const { homeDir } = ctx.paths.user; + const SDK_LOCATIONS: Record> = { + android: [ + path.join('/usr/local/android-sdk'), + path.join(homeDir, 'Library/Android/sdk'), + path.join(homeDir, 'AppData/Local/Android/android-sdk'), + path.join(homeDir, 'AppData/Local/Android/sdk'), + path.join('Program Files (x86)/Android/android-sdk'), + ], + 'android-ndk': [ + path.join('/usr/local/android-sdk/ndk'), + path.join(homeDir, 'Library/Android/sdk/ndk'), + path.join(homeDir, 'AppData/Local/Android/android-sdk/ndk'), + path.join(homeDir, 'AppData/Local/Android/sdk/ndk'), + path.join('Program Files (x86)/Android/android-sdk/ndk'), + path.join('/usr/local/android-sdk/ndk-bundle'), + path.join(homeDir, 'Library/Android/sdk/ndk-bundle'), + path.join(homeDir, 'AppData/Local/Android/android-sdk/ndk-bundle'), + path.join(homeDir, 'AppData/Local/Android/sdk/ndk-bundle'), + path.join('Program Files (x86)/Android/android-sdk/ndk-bundle'), + ], + }; + return SDK_LOCATIONS; }; const _logSdkWarning = (c: RnvContext) => { @@ -113,7 +117,7 @@ const _attemptAutoFix = async (c: RnvContext, sdkPlatform: string, sdkKey: SDKKe return true; } - let locations: Array = SDK_LOCATIONS[sdkPlatform]; + let locations: Array = getSdkLocations()[sdkPlatform]; // try common Android SDK env variables if (sdkKey === 'ANDROID_SDK') { @@ -164,7 +168,7 @@ const _attemptAutoFix = async (c: RnvContext, sdkPlatform: string, sdkKey: SDKKe } } - logDefault(`_attemptAutoFix: no sdks found. searched at: ${SDK_LOCATIONS[sdkPlatform].join(', ')}`); + logDefault(`_attemptAutoFix: no sdks found. searched at: ${getSdkLocations()[sdkPlatform].join(', ')}`); // const setupInstance = PlatformSetup(c); // await setupInstance.askToInstallSDK(sdkPlatform); diff --git a/packages/sdk-tizen/src/installer.ts b/packages/sdk-tizen/src/installer.ts index c4e014cef2..e8aeb614d8 100644 --- a/packages/sdk-tizen/src/installer.ts +++ b/packages/sdk-tizen/src/installer.ts @@ -1,6 +1,5 @@ import path from 'path'; import { - USER_HOME_DIR, isSystemWin, getRealPath, writeFileSync, @@ -18,11 +17,15 @@ import { } from '@rnv/core'; import { CLI_SDB_TIZEN, CLI_TIZEN, CLI_TIZEN_EMULATOR } from './constants'; -const SDK_LOCATIONS = [ - path.join('usr/local/tizen-studio'), - path.join(USER_HOME_DIR, 'tizen-studio'), - path.join('C:\\tizen-studio'), -]; +const getSdkLocations = () => { + const ctx = getContext(); + const sdkLocations = [ + path.join('usr/local/tizen-studio'), + path.join(ctx.paths.user.homeDir, 'tizen-studio'), + path.join('C:\\tizen-studio'), + ]; + return sdkLocations; +}; const _logSdkWarning = (c: RnvContext) => { logWarning(`Your ${c.paths.workspace.config} is missing SDK configuration object`); @@ -65,7 +68,7 @@ const _attemptAutoFix = async (c: RnvContext) => { return true; } - const result = SDK_LOCATIONS.find((v) => fsExistsSync(v)); + const result = getSdkLocations().find((v) => fsExistsSync(v)); if (result) { logSuccess(`Found existing ${c.platform} SDK location at ${chalk().bold(result)}`); @@ -95,7 +98,7 @@ const _attemptAutoFix = async (c: RnvContext) => { } } - logDefault(`_attemptAutoFix: no sdks found. searched at: ${SDK_LOCATIONS.join(', ')}`); + logDefault(`_attemptAutoFix: no sdks found. searched at: ${getSdkLocations().join(', ')}`); // const setupInstance = PlatformSetup(c); // await setupInstance.askToInstallSDK(sdkPlatform); From 222572fc1a84104721c91d63b640affd87e3f805 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 19:21:51 +0100 Subject: [PATCH 046/175] update plugin templates --- buildHooks/src/prePublish.ts | 1 + packages/plugins/package.json | 2 +- .../cli-platform-ios/overrides.json | 0 .../cli-platform-ios/overrides@11.3.7.json | 0 .../pluginTemplates/renative.plugins.json | 514 ++++++++++-------- .../overrides.json | 10 - .../rnv/pluginTemplates/renative.plugins.json | 37 -- 7 files changed, 289 insertions(+), 275 deletions(-) rename packages/{rnv => plugins}/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json (100%) rename packages/{rnv => plugins}/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json (100%) delete mode 100644 packages/rnv/pluginTemplates/react-native-gesture-handler/overrides.json delete mode 100644 packages/rnv/pluginTemplates/renative.plugins.json diff --git a/buildHooks/src/prePublish.ts b/buildHooks/src/prePublish.ts index c1d627eb07..fd771c93db 100644 --- a/buildHooks/src/prePublish.ts +++ b/buildHooks/src/prePublish.ts @@ -29,6 +29,7 @@ const VERSIONED_PACKAGES = [ 'sdk-webos', 'sdk-utils', 'renative', + 'plugins', 'integration-docker', 'adapter', ]; diff --git a/packages/plugins/package.json b/packages/plugins/package.json index f59d8af767..fd3b5ccddd 100644 --- a/packages/plugins/package.json +++ b/packages/plugins/package.json @@ -1,6 +1,6 @@ { "name": "@rnv/plugins", - "version": "1.0.0-rc.11", + "version": "1.0.0-rc.12", "description": "ReNative Plugins", "keywords": [], "homepage": "https://github.com/flexn-io/renative#readme", diff --git a/packages/rnv/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json b/packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json similarity index 100% rename from packages/rnv/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json rename to packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json diff --git a/packages/rnv/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json b/packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json similarity index 100% rename from packages/rnv/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json rename to packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json diff --git a/packages/plugins/pluginTemplates/renative.plugins.json b/packages/plugins/pluginTemplates/renative.plugins.json index 9ee3f77911..e234ae40d7 100644 --- a/packages/plugins/pluginTemplates/renative.plugins.json +++ b/packages/plugins/pluginTemplates/renative.plugins.json @@ -1,5 +1,5 @@ { - "$schema": "../../../.rnv/schema/rnv.plugins.json", + "disableRnvDefaultOverrides": true, "pluginTemplates": { "@bam.tech/react-native-image-resizer": { "android": { @@ -89,11 +89,9 @@ "@flexn/recyclerlistview": { "version": "4.2.7", "webpack": { - "moduleAliases": true, "modulePaths": true, - "nextTranspileModules": [ - "@flexn/recyclerlistview" - ] + "moduleAliases": true, + "nextTranspileModules": ["@flexn/recyclerlistview"] } }, "@flexn/sdk": { @@ -127,20 +125,18 @@ "ios": { "podName": "RNFlashList" }, - "macos": { + "tvos": { "podName": "RNFlashList" }, - "tvos": { + "macos": { "podName": "RNFlashList" }, - "version": "1.4.8", "webpack": { - "moduleAliases": true, "modulePaths": true, - "nextTranspileModules": [ - "@flexn/shopify-flash-list" - ] - } + "moduleAliases": true, + "nextTranspileModules": ["@flexn/shopify-flash-list"] + }, + "version": "1.4.8" }, "@flexn/typescript": { "version": "0.2.4" @@ -148,12 +144,12 @@ "@lightningjs/cli": { "version": "2.11.0" }, - "@lightningjs/core": { - "version": "2.8.0" - }, "@lightningjs/sdk": { "version": "5.2.0" }, + "@lightningjs/core": { + "version": "2.8.0" + }, "@lightningjs/ui": { "version": "1.3.1" }, @@ -362,13 +358,22 @@ "version": "0.5.9" }, "@react-native-community/cli": { - "version": "^11.3.0" + "version": "^6.0.0" }, "@react-native-community/cli-platform-android": { - "version": "^11.3.0" + "version": "^6.0.0" }, "@react-native-community/cli-platform-ios": { - "version": "^11.3.0" + "version": "11.3.7", + "disablePluginTemplateOverrides": false, + "disableNpm": true, + "overrides": { + "^11.3.7": { + "build/tools/listIOSDevices.js": { + "rawOutput.filter(device => !device.platform.includes('appletv') && !device.platform.includes('macos')).sort(device => device.simulator ? 1 : -1).map(device => {": "rawOutput.sort(device => device.simulator ? 1 : -1).map(device => { // <= PATCHED BY RENATIVE" + } + } + } }, "@react-native-community/clipboard": { "android": { @@ -472,6 +477,7 @@ "didFailToRegisterForRemoteNotificationsWithError": [ "RNCPushNotificationIOS.didFailToRegisterForRemoteNotificationsWithError(error)" ], + "didReceive": null, "didReceive": [ "RNCPushNotificationIOS.didReceive(notification)" ], @@ -558,7 +564,7 @@ "pluginDependencies": { "@react-native-firebase/app": "source:rnv" }, - "version": "18.6.1" + "version": "16.7.0" }, "@react-native-firebase/app": { "android": { @@ -643,7 +649,7 @@ ] } }, - "version": "18.6.1" + "version": "16.7.0" }, "@react-native-firebase/auth": { "android": { @@ -676,7 +682,7 @@ "pluginDependencies": { "@react-native-firebase/app": "source:rnv" }, - "version": "18.6.1" + "version": "16.7.0" }, "@react-native-firebase/crashlytics": { "android": { @@ -754,7 +760,7 @@ "pluginDependencies": { "@react-native-firebase/analytics": "source:rnv" }, - "version": "18.6.1" + "version": "16.7.0" }, "@react-native-firebase/messaging": { "android": { @@ -779,7 +785,7 @@ "pluginDependencies": { "@react-native-firebase/app": "source:rnv" }, - "version": "18.6.1" + "version": "16.7.0" }, "@react-native-firebase/storage": { "android": { @@ -812,7 +818,7 @@ "pluginDependencies": { "@react-native-firebase/app": "source:rnv" }, - "version": "18.6.1" + "version": "16.7.0" }, "@react-native-masked-view/masked-view": { "android": { @@ -882,7 +888,6 @@ "@react-navigation/bottom-tabs": "5.1.1", "@react-navigation/core": "6.1.0", "@react-navigation/drawer": "6.1.8", - "@react-navigation/elements": "1.3.17", "@react-navigation/material-bottom-tabs": "6.0.9", "@react-navigation/material-top-tabs": "5.3.10", "@react-navigation/native": "6.0.6", @@ -890,15 +895,12 @@ "@react-navigation/routers": "5.1.0", "@react-navigation/stack": "6.0.11", "@react-navigation/web": "1.0.0-alpha.9", + "@react-navigation/elements": "1.3.17", "@reduxjs/toolkit": { "version": "^1.8.1" }, "@rnv/renative": { - "version": "0.37.0-canary.7", - "webpackConfig": { - "moduleAliases": true, - "modulePaths": true - } + "version": "1.0.0-rc.12" }, "@sentry/react": { "version": "6.13.3" @@ -969,17 +971,17 @@ "ios": { "podName": "RNFlashList" }, - "macos": { + "tvos": { "podName": "RNFlashList" }, - "tvos": { + "macos": { "podName": "RNFlashList" }, - "version": "1.4.1", "webpack": { - "moduleAliases": true, - "modulePaths": true - } + "modulePaths": true, + "moduleAliases": true + }, + "version": "1.4.1" }, "amazon-cognito-identity-js": { "android": { @@ -992,7 +994,7 @@ }, "aws-amplify": "4.3.13", "axios": "0.24.0", - "Crashlytics": { + "crashlytics": { "android": { "mainActivity": { "createMethods": [ @@ -1007,7 +1009,18 @@ }, "skipImplementation": true }, - "androidtv": { + "deprecated": "crashlytics plugin is deprecated use Crashlytics (uppercase) in combination with Firebase", + "ios": { + "appDelegateImports": [ + "Crashlytics" + ], + "podName": "Crashlytics", + "version": "3.13.4" + }, + "no-npm": true + }, + "Crashlytics": { + "android": { "mainActivity": { "createMethods": [ "val core = CrashlyticsCore.Builder().listener {}.build()", @@ -1021,7 +1034,7 @@ }, "skipImplementation": true }, - "firetv": { + "androidtv": { "mainActivity": { "createMethods": [ "val core = CrashlyticsCore.Builder().listener {}.build()", @@ -1035,22 +1048,7 @@ }, "skipImplementation": true }, - "ios": { - "podName": "Crashlytics", - "version": "3.13.4", - "xcodeproj": { - "buildPhases": [ - { - "shellPath": "/bin/sh", - "shellScript": "\"${PODS_ROOT}/Fabric/upload-symbols\" -gsp \"${PROJECT_DIR}/RNVApp/GoogleService-Info.plist\" -p ios \"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}\"" - } - ] - } - }, - "no-npm": true - }, - "crashlytics": { - "android": { + "firetv": { "mainActivity": { "createMethods": [ "val core = CrashlyticsCore.Builder().listener {}.build()", @@ -1064,13 +1062,17 @@ }, "skipImplementation": true }, - "deprecated": "crashlytics plugin is deprecated use Crashlytics (uppercase) in combination with Firebase", "ios": { - "appDelegateImports": [ - "Crashlytics" - ], "podName": "Crashlytics", - "version": "3.13.4" + "version": "3.13.4", + "xcodeproj": { + "buildPhases": [ + { + "shellPath": "/bin/sh", + "shellScript": "\"${PODS_ROOT}/Fabric/upload-symbols\" -gsp \"${PROJECT_DIR}/RNVApp/GoogleService-Info.plist\" -p ios \"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}\"" + } + ] + } }, "no-npm": true }, @@ -1092,7 +1094,7 @@ "implementation": "androidTestImplementation('com.wix:detox:+') { transitive = true }\nandroidTestImplementation 'junit:junit:4.12'", "version": "19.5.3" }, - "Fabric": { + "fabric": { "android": { "app/build.gradle": { "apply": [ @@ -1162,29 +1164,10 @@ } } }, - "implementation": "implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {\n transitive = true\n }", - "mainActivity": { - "imports": [ - "io.fabric.sdk.android.Fabric" - ] - } - }, - "ios": { - "podName": "Fabric", - "version": "1.10.2", - "xcodeproj": { - "buildPhases": [ - { - "shellPath": "/bin/sh", - "shellScript": "\"${PODS_ROOT}/Fabric/run\"" - } - ] - } + "skipImplementation": true }, - "no-npm": true - }, - "fabric": { - "android": { + "deprecated": "fabric plugin is deprecated use Fabric (uppercase) in combination with Firebase", + "firetv": { "app/build.gradle": { "apply": [ "plugin: 'io.fabric'" @@ -1215,14 +1198,37 @@ } } }, - "implementation": "implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {\n transitive = true\n }", - "mainActivity": { - "imports": [ - "io.fabric.sdk.android.Fabric" - ] - } + "skipImplementation": true }, - "androidtv": { + "ios": { + "appDelegateImports": [ + "Fabric" + ], + "appDelegateMethods": { + "application": { + "didFinishLaunchingWithOptions": [ + "Fabric.with([Crashlytics.self])" + ] + } + }, + "plist": { + "Fabric": { + "APIKey": "", + "Kits": [ + { + "KitInfo": {}, + "KitName": "Crashlytics" + } + ] + } + }, + "podName": "Fabric", + "version": "1.10.2" + }, + "no-npm": true + }, + "Fabric": { + "android": { "app/build.gradle": { "apply": [ "plugin: 'io.fabric'" @@ -1253,10 +1259,14 @@ } } }, - "skipImplementation": true + "implementation": "implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {\n transitive = true\n }", + "mainActivity": { + "imports": [ + "io.fabric.sdk.android.Fabric" + ] + } }, - "deprecated": "fabric plugin is deprecated use Fabric (uppercase) in combination with Firebase", - "firetv": { + "androidtv": { "app/build.gradle": { "apply": [ "plugin: 'io.fabric'" @@ -1287,32 +1297,24 @@ } } }, - "skipImplementation": true + "implementation": "implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {\n transitive = true\n }", + "mainActivity": { + "imports": [ + "io.fabric.sdk.android.Fabric" + ] + } }, "ios": { - "appDelegateImports": [ - "Fabric" - ], - "appDelegateMethods": { - "application": { - "didFinishLaunchingWithOptions": [ - "Fabric.with([Crashlytics.self])" - ] - } - }, - "plist": { - "Fabric": { - "APIKey": "", - "Kits": [ - { - "KitInfo": {}, - "KitName": "Crashlytics" - } - ] - } - }, "podName": "Fabric", - "version": "1.10.2" + "version": "1.10.2", + "xcodeproj": { + "buildPhases": [ + { + "shellPath": "/bin/sh", + "shellScript": "\"${PODS_ROOT}/Fabric/run\"" + } + ] + } }, "no-npm": true }, @@ -1600,15 +1602,19 @@ } ] }, + "implementation": "implementation ('com.facebook.react:react-native:+') {\n exclude group: 'com.android.support' \n exclude group: 'javax.inject' \n }", "path": "react-native" }, "androidtv": { + "implementation": "implementation ('com.facebook.react:react-native:+') {\n exclude group: 'com.android.support' \n exclude group: 'javax.inject' \n exclude group: 'com.squareup.okhttp3', module: 'okhttp' \n exclude group: 'com.squareup.okio' \n }", "path": "react-native" }, "androidwear": { + "implementation": "implementation ('com.facebook.react:react-native:+') {\n exclude group: 'com.android.support' \n exclude group: 'javax.inject' \n exclude group: 'com.squareup.okhttp3', module: 'okhttp' \n exclude group: 'com.squareup.okio' \n }", "path": "react-native" }, "firetv": { + "implementation": "implementation ('com.facebook.react:react-native:+') {\n exclude group: 'com.android.support' \n exclude group: 'javax.inject' \n exclude group: 'com.squareup.okhttp3', module: 'okhttp' \n exclude group: 'com.squareup.okio' \n }", "path": "react-native" }, "ios": { @@ -1644,7 +1650,7 @@ "URL_NAME": "", "URL_SCHEME": "" }, - "version": "0.73.4" + "version": "0.73.6" }, "react-native-actionsheet": { "version": "2.4.2" @@ -1859,35 +1865,27 @@ }, "react-native-carplay": { "ios": { - "templateXcode": { - "AppDelegate_h": { - "appDelegateImports": [ - "CarPlay/CarPlay.h" + "appDelegateExtensions": [ + "CPApplicationDelegate" + ], + "appDelegateImports": [ + "CarPlay", + "react_native_carplay" + ], + "appDelegateMethods": { + "application": { + "didConnectCarInterfaceController": [ + "RNCarPlay.connect(with: interfaceController, window: window)" ], - "appDelegateExtensions": [ - "UIApplicationDelegate", - "CPApplicationDelegate" + "didDisconnectCarInterfaceController": [ + "RNCarPlay.disconnect()" ] - }, - "AppDelegate_mm": { - "appDelegateImports": [ - "RNCarPlay.h" - ], - "appDelegateMethods": { - "application": { - "didConnectCarInterfaceController": [ - "[RNCarPlay connectWithInterfaceController:interfaceController window:window];" - ], - "didDisconnectCarInterfaceController": [ - "[RNCarPlay disconnect];" - ] - } - } } }, + "path": "{{PLUGIN_ROOT}}", "podName": "react-native-carplay" }, - "version": "2.3.0" + "version": "2.0.0" }, "react-native-circular-progress": { "version": "1.3.0", @@ -2111,52 +2109,49 @@ }, "react-native-fbsdk": { "android": { - "templateAndroid": { - "AndroidManifest_xml": { - "children": [ - { - "android:name": ".MainApplication", - "children": [ - { - "android:name": "com.facebook.sdk.ApplicationId", - "android:value": "@string/facebook_app_id", - "tag": "meta-data" - } - ], - "tag": "application" - } - ] - }, - "MainActivity_java": { - "createMethods": [], - "resultMethods": [ - "MainApplication.getCallbackManager().onActivityResult(requestCode, resultCode, data)" - ] - }, - "MainApplication_java": { - "methods": [ - " companion object {\n @JvmStatic \n private val mCallbackManager = CallbackManager.Factory.create() \n fun getCallbackManager(): CallbackManager = mCallbackManager \n}" - ], - "imports": [ - "com.facebook.CallbackManager" - ] - }, - "strings_xml": { - "children": [ - { - "child_value": "{{props.APP_ID}}", - "name": "facebook_app_id", - "tag": "string" - } - ] - }, - "app_build_gradle": { - "implementations": [ - "'com.facebook.android:facebook-android-sdk:[4,5)'" - ] - } + "AndroidManifest": { + "children": [ + { + "android:name": ".MainApplication", + "children": [ + { + "android:name": "com.facebook.sdk.ApplicationId", + "android:value": "@string/facebook_app_id", + "tag": "meta-data" + } + ], + "tag": "application" + } + ] }, - "package": "com.facebook.reactnative.androidsdk.FBSDKPackage" + "implementations": [ + "'com.facebook.android:facebook-android-sdk:[4,5)'" + ], + "imports": [ + "com.facebook.CallbackManager" + ], + "mainActivity": { + "createMethods": [], + "imports": [], + "resultMethods": [ + "MainApplication.getCallbackManager().onActivityResult(requestCode, resultCode, data)" + ] + }, + "mainApplication": { + "methods": [ + " companion object {\n @JvmStatic \n private val mCallbackManager = CallbackManager.Factory.create() \n fun getCallbackManager(): CallbackManager = mCallbackManager \n}" + ] + }, + "package": "com.facebook.reactnative.androidsdk.FBSDKPackage", + "ResourceStrings": { + "children": [ + { + "child_value": "{{props.APP_ID}}", + "name": "facebook_app_id", + "tag": "string" + } + ] + } }, "androidtv": { "implementations": [ @@ -2624,10 +2619,11 @@ } }, "react-native-gesture-handler": { + "version": "2.14.1", "android": { - "mainActivity": null, "package": "com.swmansion.gesturehandler.RNGestureHandlerPackage", - "path": "{{PLUGIN_ROOT}}/android" + "path": "{{PLUGIN_ROOT}}/android", + "mainActivity": null }, "androidtv": { "package": "com.swmansion.gesturehandler.RNGestureHandlerPackage", @@ -2647,11 +2643,9 @@ "macos": { "podName": "RNGestureHandler" }, - "source": "", "tvos": { "podName": "RNGestureHandler" }, - "version": "2.9.0", "webpack": { "moduleAliases": true, "modulePaths": true @@ -3214,28 +3208,92 @@ "version": "1.0.2" }, "react-native-permissions": { - "version": "4.1.4" + "android": { + "package": "com.zoontek.rnpermissions.RNPermissionsPackage" + }, + "androidtv": { + "package": "com.zoontek.rnpermissions.RNPermissionsPackage" + }, + "ios": { + "isStatic": true, + "podName": "RNPermissions", + "staticPods": [ + "::startsWith::Permission-" + ] + }, + "macos": { + "isStatic": true, + "podName": "RNPermissions", + "staticPods": [ + "::startsWith::Permission-" + ] + }, + "tvos": { + "isStatic": true, + "podName": "RNPermissions", + "staticPods": [ + "::startsWith::Permission-" + ] + }, + "version": "3.6.1" + }, + "react-native-permissions-pods": { + "ios": { + "podNames": [ + "Permission-BluetoothPeripheral', :path => '{{PLUGIN_ROOT}}/ios/BluetoothPeripheral", + "Permission-Calendars', :path => '{{PLUGIN_ROOT}}/ios/Calendars", + "Permission-Camera', :path => '{{PLUGIN_ROOT}}/ios/Camera", + "Permission-Contacts', :path => '{{PLUGIN_ROOT}}/ios/Contacts", + "Permission-FaceID', :path => '{{PLUGIN_ROOT}}/ios/FaceID", + "Permission-LocationAlways', :path => '{{PLUGIN_ROOT}}/ios/LocationAlways", + "Permission-LocationWhenInUse', :path => '{{PLUGIN_ROOT}}/ios/LocationWhenInUse", + "Permission-MediaLibrary', :path => '{{PLUGIN_ROOT}}/ios/MediaLibrary", + "Permission-Microphone', :path => '{{PLUGIN_ROOT}}/ios/Microphone", + "Permission-Motion', :path => '{{PLUGIN_ROOT}}/ios/Motion", + "Permission-Notifications', :path => '{{PLUGIN_ROOT}}/ios/Notifications", + "Permission-PhotoLibrary', :path => '{{PLUGIN_ROOT}}/ios/PhotoLibrary", + "Permission-Reminders', :path => '{{PLUGIN_ROOT}}/ios/Reminders", + "Permission-SpeechRecognition', :path => '{{PLUGIN_ROOT}}/ios/SpeechRecognition", + "Permission-StoreKit', :path => '{{PLUGIN_ROOT}}/ios/StoreKit" + ] + }, + "macos": { + "podNames": [ + "Permission-BluetoothPeripheral', :path => '{{PLUGIN_ROOT}}/ios/BluetoothPeripheral", + "Permission-Calendars', :path => '{{PLUGIN_ROOT}}/ios/Calendars", + "Permission-Camera', :path => '{{PLUGIN_ROOT}}/ios/Camera", + "Permission-Contacts', :path => '{{PLUGIN_ROOT}}/ios/Contacts", + "Permission-FaceID', :path => '{{PLUGIN_ROOT}}/ios/FaceID", + "Permission-LocationAlways', :path => '{{PLUGIN_ROOT}}/ios/LocationAlways", + "Permission-LocationWhenInUse', :path => '{{PLUGIN_ROOT}}/ios/LocationWhenInUse", + "Permission-MediaLibrary', :path => '{{PLUGIN_ROOT}}/ios/MediaLibrary", + "Permission-Microphone', :path => '{{PLUGIN_ROOT}}/ios/Microphone", + "Permission-Motion', :path => '{{PLUGIN_ROOT}}/ios/Motion", + "Permission-Notifications', :path => '{{PLUGIN_ROOT}}/ios/Notifications", + "Permission-PhotoLibrary', :path => '{{PLUGIN_ROOT}}/ios/PhotoLibrary", + "Permission-Reminders', :path => '{{PLUGIN_ROOT}}/ios/Reminders", + "Permission-SpeechRecognition', :path => '{{PLUGIN_ROOT}}/ios/SpeechRecognition", + "Permission-StoreKit', :path => '{{PLUGIN_ROOT}}/ios/StoreKit" + ] + }, + "no-npm": true, + "packageName": "react-native-permissions" }, "react-native-photo-editor": { "android": { - "templateAndroid": { - "AndroidManifest_xml": { - "tag": "manifest", - "android:name": "", - "children": [ - { - "tag": "application", - "android:name": ".MainApplication", - "children": [ - { - "tag": "activity", - "android:name": "com.ahmedadeltito.photoeditor.PhotoEditorActivity", - "children": [] - } - ] - } - ] - } + "AndroidManifest": { + "children": [ + { + "android:name": ".MainApplication", + "children": [ + { + "android:name": "com.ahmedadeltito.photoeditor.PhotoEditorActivity", + "tag": "activity" + } + ], + "tag": "application" + } + ] }, "package": "ui.photoeditor.RNPhotoEditorPackage" }, @@ -3246,12 +3304,13 @@ "package": "ui.photoeditor.RNPhotoEditorPackage" }, "ios": { - "podName": "iOSPhotoEditor", - "git": "https://github.com/prscX/photo-editor", - "commit": "4924e9ec984d25d03644e58aa148282642171de9", - "buildType": "dynamic" + "path": "{{PLUGIN_ROOT}}/ios", + "podName": "RNPhotoEditor" + }, + "pluginDependencies": { + "iOSPhotoEditor": "source:rnv" }, - "version": "1.0.13" + "version": "1.0.5" }, "react-native-picker": { "android": { @@ -3487,15 +3546,13 @@ }, "react-native-splash-screen": { "android": { - "templateAndroid": { - "MainActivity_java": { - "createMethods": [ - "SplashScreen.show(this)" - ], - "imports": [ - "org.devio.rn.splashscreen.SplashScreen" - ] - } + "mainActivity": { + "createMethods": [ + "SplashScreen.show(this)" + ], + "imports": [ + "org.devio.rn.splashscreen.SplashScreen" + ] }, "package": "org.devio.rn.splashscreen.SplashScreenReactPackage" }, @@ -3522,10 +3579,10 @@ "package": "org.devio.rn.splashscreen.SplashScreenReactPackage" }, "ios": { - "appDelegateMmImports": [ + "appDelegateImports": [ "react_native_splash_screen" ], - "appDelegateMmMethods": { + "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ "RNSplashScreen.show()" @@ -3629,7 +3686,7 @@ } }, "react-native-tvos": { - "version": "0.66.3-1" + "version": "0.73.6-0" }, "react-native-tvos-controller": { "ios": { @@ -3768,10 +3825,13 @@ "version": "0.2.13" }, "react-native-web": { + "version": "0.19.9", "pluginDependencies": { "react": "source:rnv" }, - "version": "0.18.9" + "webpackConfig": { + "modulePaths": true + } }, "react-native-web-image-loader": { "version": "0.0.5" diff --git a/packages/rnv/pluginTemplates/react-native-gesture-handler/overrides.json b/packages/rnv/pluginTemplates/react-native-gesture-handler/overrides.json deleted file mode 100644 index e298c25541..0000000000 --- a/packages/rnv/pluginTemplates/react-native-gesture-handler/overrides.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "overrides": { - "ios/Handlers/RNHoverHandler.m": { - "__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4\n": "__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_4 && !TARGET_OS_TV\n" - }, - "ios/RNGestureHandlerButtonComponentView.mm": { - "_buttonView.userEnabled = newProps.enabled;\n _buttonView.exclusiveTouch = newProps.exclusive;": "_buttonView.userEnabled = newProps.enabled;\n#if !TARGET_OS_TV \n_buttonView.exclusiveTouch = newProps.exclusive; \n#endif" - } - } -} \ No newline at end of file diff --git a/packages/rnv/pluginTemplates/renative.plugins.json b/packages/rnv/pluginTemplates/renative.plugins.json deleted file mode 100644 index 3c6fe6ed6e..0000000000 --- a/packages/rnv/pluginTemplates/renative.plugins.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "../../../.rnv/schema/rnv.plugins.json", - "comments": [ - "This is the main configuration file for RNV plugins. It allows you to define which plugins you want to use and their versions.", - "It also acts as override against @flexn/plugins" - ], - "pluginTemplates": { - "@rnv/renative": { - "version": "1.0.0-rc.12" - }, - "react-native-tvos": { - "version": "0.73.6-0" - }, - "react-native-web": { - "version": "0.19.9", - "webpackConfig": { - "modulePaths": true - } - }, - "next": { - "version": "14.1.0", - "disablePluginTemplateOverrides": true - }, - "react-native": { - "version": "0.73.6" - }, - "@react-native-community/cli-platform-ios": { - "version": "11.3.7", - "disablePluginTemplateOverrides": false, - "disableNpm": true - }, - "react-native-gesture-handler": { - "version": "2.14.1", - "disablePluginTemplateOverrides": true - } - } -} From 896297be1c23a5e2496cb48761879e946101d1e4 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 19:42:14 +0100 Subject: [PATCH 047/175] migrate templates --- .../{plugins => config-templates}/LICENSE | 0 .../{plugins => config-templates}/README.md | 0 .../package.json | 4 +- .../cli-platform-ios/overrides.json | 0 .../cli-platform-ios/overrides@11.3.7.json | 0 .../renative.templates.json} | 638 +++++++----------- packages/core/renative.templates.json | 109 --- 7 files changed, 243 insertions(+), 508 deletions(-) rename packages/{plugins => config-templates}/LICENSE (100%) rename packages/{plugins => config-templates}/README.md (100%) rename packages/{plugins => config-templates}/package.json (83%) rename packages/{plugins => config-templates}/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json (100%) rename packages/{plugins => config-templates}/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json (100%) rename packages/{plugins/pluginTemplates/renative.plugins.json => config-templates/renative.templates.json} (89%) delete mode 100644 packages/core/renative.templates.json diff --git a/packages/plugins/LICENSE b/packages/config-templates/LICENSE similarity index 100% rename from packages/plugins/LICENSE rename to packages/config-templates/LICENSE diff --git a/packages/plugins/README.md b/packages/config-templates/README.md similarity index 100% rename from packages/plugins/README.md rename to packages/config-templates/README.md diff --git a/packages/plugins/package.json b/packages/config-templates/package.json similarity index 83% rename from packages/plugins/package.json rename to packages/config-templates/package.json index fd3b5ccddd..a58405d09f 100644 --- a/packages/plugins/package.json +++ b/packages/config-templates/package.json @@ -1,7 +1,7 @@ { - "name": "@rnv/plugins", + "name": "@rnv/config-templates", "version": "1.0.0-rc.12", - "description": "ReNative Plugins", + "description": "ReNative configuration templates for plugins, platforms, engines and project template endpoints", "keywords": [], "homepage": "https://github.com/flexn-io/renative#readme", "bugs": { diff --git a/packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json b/packages/config-templates/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json similarity index 100% rename from packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json rename to packages/config-templates/pluginTemplates/@react-native-community/cli-platform-ios/overrides.json diff --git a/packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json b/packages/config-templates/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json similarity index 100% rename from packages/plugins/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json rename to packages/config-templates/pluginTemplates/@react-native-community/cli-platform-ios/overrides@11.3.7.json diff --git a/packages/plugins/pluginTemplates/renative.plugins.json b/packages/config-templates/renative.templates.json similarity index 89% rename from packages/plugins/pluginTemplates/renative.plugins.json rename to packages/config-templates/renative.templates.json index e234ae40d7..da9aa96e06 100644 --- a/packages/plugins/pluginTemplates/renative.plugins.json +++ b/packages/config-templates/renative.templates.json @@ -1,5 +1,111 @@ { - "disableRnvDefaultOverrides": true, + "$schema": "../../.rnv/schema/rnv.plugins.json", + "projectTemplates": { + "@rnv/template-starter": { + "description": "Multiplatform 'hello world' template" + }, + "@flexn/create-template-starter": { + "description": "Advanced multiplatform template using flexn Create SDK" + } + }, + "engineTemplates": { + "@rnv/engine-rn": { + "version": "1.0.0-rc.12", + "id": "engine-rn" + }, + "@rnv/engine-rn-tvos": { + "version": "1.0.0-rc.12", + "id": "engine-rn-tvos" + }, + "@rnv/engine-rn-web": { + "version": "1.0.0-rc.12", + "id": "engine-rn-web" + }, + "@rnv/engine-rn-next": { + "version": "1.0.0-rc.12", + "id": "engine-rn-next" + }, + "@rnv/engine-rn-electron": { + "version": "1.0.0-rc.12", + "id": "engine-rn-electron" + }, + "@rnv/engine-lightning": { + "version": "1.0.0-rc.12", + "id": "engine-lightning" + }, + "@rnv/engine-rn-macos": { + "version": "1.0.0-rc.12", + "id": "engine-rn-macos" + }, + "@rnv/engine-rn-windows": { + "version": "1.0.0-rc.12", + "id": "engine-rn-windows" + } + }, + "integrationTemplates": { + "@rnv/integration-vercel": { + "version": "0.2.0-alpha.0" + }, + "@rnv/integration-docker": { + "version": "0.1.0-alpha.0" + } + }, + "platformTemplates": { + "ios": { + "engine": "engine-rn" + }, + "android": { + "engine": "engine-rn" + }, + "androidwear": { + "engine": "engine-rn" + }, + "androidtv": { + "engine": "engine-rn" + }, + "firetv": { + "engine": "engine-rn" + }, + "tvos": { + "engine": "engine-rn-tvos" + }, + "macos": { + "engine": "engine-rn" + }, + "windows": { + "engine": "engine-rn-electron" + }, + "linux": { + "engine": "engine-rn-electron" + }, + "xbox": { + "engine": "engine-rn-windows" + }, + "tizen": { + "engine": "engine-rn-web" + }, + "tizenmobile": { + "engine": "engine-rn-web" + }, + "tizenwatch": { + "engine": "engine-rn-web" + }, + "webos": { + "engine": "engine-rn-web" + }, + "chromecast": { + "engine": "engine-rn-web" + }, + "kaios": { + "engine": "engine-rn-web" + }, + "web": { + "engine": "engine-rn-next" + }, + "webtv": { + "engine": "engine-rn-web" + } + }, "pluginTemplates": { "@bam.tech/react-native-image-resizer": { "android": { @@ -24,10 +130,7 @@ }, "@flexn/create": { "androidtv": { - "activityImports": [ - "io.flexn.create.TvRemoteHandlerModule", - "android.view.KeyEvent;" - ], + "activityImports": ["io.flexn.create.TvRemoteHandlerModule", "android.view.KeyEvent;"], "activityMethods": [ "override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {", "TvRemoteHandlerModule.getInstance().onKeyEvent(event, \"up\");", @@ -51,10 +154,7 @@ "projectName": "flexn-io-create" }, "firetv": { - "activityImports": [ - "io.flexn.create.TvRemoteHandlerModule", - "android.view.KeyEvent;" - ], + "activityImports": ["io.flexn.create.TvRemoteHandlerModule", "android.view.KeyEvent;"], "activityMethods": [ "override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {", "TvRemoteHandlerModule.getInstance().onKeyEvent(event, \"up\");", @@ -367,11 +467,14 @@ "version": "11.3.7", "disablePluginTemplateOverrides": false, "disableNpm": true, - "overrides": { + "pluginTemplates": { "^11.3.7": { - "build/tools/listIOSDevices.js": { - "rawOutput.filter(device => !device.platform.includes('appletv') && !device.platform.includes('macos')).sort(device => device.simulator ? 1 : -1).map(device => {": "rawOutput.sort(device => device.simulator ? 1 : -1).map(device => { // <= PATCHED BY RENATIVE" - } + "overrides": { + "build/tools/listIOSDevices.js": { + "rawOutput.filter(device => !device.platform.includes('appletv') && !device.platform.includes('macos')).sort(device => device.simulator ? 1 : -1).map(device => {": "rawOutput.sort(device => device.simulator ? 1 : -1).map(device => { // <= PATCHED BY RENATIVE" + } + }, + "overridesFolderName": "overrides@11.3.7" } } }, @@ -469,32 +572,24 @@ }, "@react-native-community/push-notification-ios": { "ios": { - "appDelegateImports": [ - "RNCPushNotificationIOS" - ], + "appDelegateImports": ["RNCPushNotificationIOS"], "appDelegateMethods": { "application": { "didFailToRegisterForRemoteNotificationsWithError": [ "RNCPushNotificationIOS.didFailToRegisterForRemoteNotificationsWithError(error)" ], "didReceive": null, - "didReceive": [ - "RNCPushNotificationIOS.didReceive(notification)" - ], + "didReceive": ["RNCPushNotificationIOS.didReceive(notification)"], "didReceiveRemoteNotification": [ "RNCPushNotificationIOS.didReceiveRemoteNotification(userInfo, fetchCompletionHandler: completionHandler)" ], - "didRegister": [ - "RNCPushNotificationIOS.didRegister(notificationSettings)" - ], + "didRegister": ["RNCPushNotificationIOS.didRegister(notificationSettings)"], "didRegisterForRemoteNotificationsWithDeviceToken": [ "RNCPushNotificationIOS.didRegisterForRemoteNotifications(withDeviceToken: deviceToken)" ] }, "userNotificationCenter": { - "willPresent": [ - "completionHandler([.alert, .badge, .sound])" - ] + "willPresent": ["completionHandler([.alert, .badge, .sound])"] } }, "path": "{{PLUGIN_ROOT}}", @@ -539,9 +634,7 @@ "projectName": "@react-native-firebase_analytics" }, "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -556,9 +649,7 @@ "isStatic": true, "podName": "RNFBAnalytics", "xcodeproj": { - "resourceFiles": [ - "RNVApp/GoogleService-Info.plist" - ] + "resourceFiles": ["RNVApp/GoogleService-Info.plist"] } }, "pluginDependencies": { @@ -584,15 +675,11 @@ ] }, "app/build.gradle": { - "apply": [ - "plugin: 'com.google.gms.google-services'" - ] + "apply": ["plugin: 'com.google.gms.google-services'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'com.google.gms:google-services:4.3.14'" - ] + "dependencies": ["classpath 'com.google.gms:google-services:4.3.14'"] } }, "package": "io.invertase.firebase.app.ReactNativeFirebaseAppPackage", @@ -600,15 +687,11 @@ }, "androidtv": { "app/build.gradle": { - "apply": [ - "plugin: 'com.google.gms.google-services'" - ] + "apply": ["plugin: 'com.google.gms.google-services'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'com.google.gms:google-services:4.2.0'" - ] + "dependencies": ["classpath 'com.google.gms:google-services:4.2.0'"] } }, "package": "io.invertase.firebase.app.ReactNativeFirebaseAppPackage", @@ -616,37 +699,27 @@ }, "firetv": { "app/build.gradle": { - "apply": [ - "plugin: 'com.google.gms.google-services'" - ] + "apply": ["plugin: 'com.google.gms.google-services'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'com.google.gms:google-services:4.2.0'" - ] + "dependencies": ["classpath 'com.google.gms:google-services:4.2.0'"] } }, "package": "io.invertase.firebase.app.ReactNativeFirebaseAppPackage", "projectName": "@react-native-firebase_app" }, "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { - "didFinishLaunchingWithOptions": [ - "FirebaseApp.configure()" - ] + "didFinishLaunchingWithOptions": ["FirebaseApp.configure()"] } }, "isStatic": true, "podName": "RNFBApp", "xcodeproj": { - "resourceFiles": [ - "RNVApp/GoogleService-Info.plist" - ] + "resourceFiles": ["RNVApp/GoogleService-Info.plist"] } }, "version": "16.7.0" @@ -657,9 +730,7 @@ "projectName": "@react-native-firebase_auth" }, "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -674,9 +745,7 @@ "isStatic": true, "podName": "RNFBAuth", "xcodeproj": { - "resourceFiles": [ - "RNVApp/GoogleService-Info.plist" - ] + "resourceFiles": ["RNVApp/GoogleService-Info.plist"] } }, "pluginDependencies": { @@ -687,9 +756,7 @@ "@react-native-firebase/crashlytics": { "android": { "app/build.gradle": { - "apply": [ - "plugin: 'io.fabric'" - ] + "apply": ["plugin: 'io.fabric'"] }, "BuildGradle": { "buildscript": { @@ -698,17 +765,13 @@ } } }, - "implementations": [ - "'com.google.android.material:material:1.2.1'" - ], + "implementations": ["'com.google.android.material:material:1.2.1'"], "package": "io.invertase.firebase.crashlytics.ReactNativeFirebaseCrashlyticsPackage", "projectName": "@react-native-firebase_crashlytics" }, "androidtv": { "app/build.gradle": { - "apply": [ - "plugin: 'io.fabric'" - ] + "apply": ["plugin: 'io.fabric'"] }, "BuildGradle": { "allprojects": { @@ -729,9 +792,7 @@ "projectName": "@react-native-firebase_crashlytics" }, "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -752,9 +813,7 @@ "shellScript": "\"${PODS_ROOT}/Fabric/run\"" } ], - "resourceFiles": [ - "RNVApp/GoogleService-Info.plist" - ] + "resourceFiles": ["RNVApp/GoogleService-Info.plist"] } }, "pluginDependencies": { @@ -771,9 +830,7 @@ "package": "io.invertase.firebase.messaging.ReactNativeFirebaseMessagingPackage", "projectName": "@react-native-firebase_messaging" }, - "dependsOn": [ - "@react-native-firebase/app" - ], + "dependsOn": ["@react-native-firebase/app"], "firetv": { "package": "io.invertase.firebase.messaging.ReactNativeFirebaseMessagingPackage", "projectName": "@react-native-firebase_messaging" @@ -793,9 +850,7 @@ "projectName": "@react-native-firebase_storage" }, "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -810,9 +865,7 @@ "isStatic": true, "podName": "RNFBStorage", "xcodeproj": { - "resourceFiles": [ - "RNVApp/GoogleService-Info.plist" - ] + "resourceFiles": ["RNVApp/GoogleService-Info.plist"] } }, "pluginDependencies": { @@ -908,9 +961,7 @@ "@sentry/react-native": { "android": { "app/build.gradle": { - "apply": [ - "from: \"{{PLUGIN_ROOT}}/sentry.gradle\"" - ] + "apply": ["from: \"{{PLUGIN_ROOT}}/sentry.gradle\""] }, "implementation": "implementation project(':@sentry_react-native')", "package": "io.sentry.react.RNSentryPackage", @@ -919,9 +970,7 @@ }, "androidtv": { "app/build.gradle": { - "apply": [ - "from: \"{{PLUGIN_ROOT}}/sentry.gradle\"" - ] + "apply": ["from: \"{{PLUGIN_ROOT}}/sentry.gradle\""] }, "implementation": "implementation project(':@sentry_react-native')", "package": "io.sentry.react.RNSentryPackage", @@ -930,9 +979,7 @@ }, "firetv": { "app/build.gradle": { - "apply": [ - "from: \"{{PLUGIN_ROOT}}/sentry.gradle\"" - ] + "apply": ["from: \"{{PLUGIN_ROOT}}/sentry.gradle\""] }, "implementation": "implementation project(':@sentry_react-native')", "package": "io.sentry.react.RNSentryPackage", @@ -1002,18 +1049,13 @@ "val crashlyticsKit = Crashlytics.Builder().core(core).build()", "Fabric.with(this, crashlyticsKit)" ], - "imports": [ - "com.crashlytics.android.Crashlytics", - "com.crashlytics.android.core.CrashlyticsCore" - ] + "imports": ["com.crashlytics.android.Crashlytics", "com.crashlytics.android.core.CrashlyticsCore"] }, "skipImplementation": true }, "deprecated": "crashlytics plugin is deprecated use Crashlytics (uppercase) in combination with Firebase", "ios": { - "appDelegateImports": [ - "Crashlytics" - ], + "appDelegateImports": ["Crashlytics"], "podName": "Crashlytics", "version": "3.13.4" }, @@ -1027,10 +1069,7 @@ "val crashlyticsKit = Crashlytics.Builder().core(core).build()", "Fabric.with(this, crashlyticsKit)" ], - "imports": [ - "com.crashlytics.android.Crashlytics", - "com.crashlytics.android.core.CrashlyticsCore" - ] + "imports": ["com.crashlytics.android.Crashlytics", "com.crashlytics.android.core.CrashlyticsCore"] }, "skipImplementation": true }, @@ -1041,10 +1080,7 @@ "val crashlyticsKit = Crashlytics.Builder().core(core).build()", "Fabric.with(this, crashlyticsKit)" ], - "imports": [ - "com.crashlytics.android.Crashlytics", - "com.crashlytics.android.core.CrashlyticsCore" - ] + "imports": ["com.crashlytics.android.Crashlytics", "com.crashlytics.android.core.CrashlyticsCore"] }, "skipImplementation": true }, @@ -1055,10 +1091,7 @@ "val crashlyticsKit = Crashlytics.Builder().core(core).build()", "Fabric.with(this, crashlyticsKit)" ], - "imports": [ - "com.crashlytics.android.Crashlytics", - "com.crashlytics.android.core.CrashlyticsCore" - ] + "imports": ["com.crashlytics.android.Crashlytics", "com.crashlytics.android.core.CrashlyticsCore"] }, "skipImplementation": true }, @@ -1097,19 +1130,13 @@ "fabric": { "android": { "app/build.gradle": { - "apply": [ - "plugin: 'io.fabric'" - ] + "apply": ["plugin: 'io.fabric'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'io.fabric.tools:gradle:1.25.4'" - ] + "dependencies": ["classpath 'io.fabric.tools:gradle:1.25.4'"] }, - "repositories": [ - "maven { url 'https://maven.fabric.io/public' }" - ] + "repositories": ["maven { url 'https://maven.fabric.io/public' }"] }, "BuildGradle": { "allprojects": { @@ -1128,26 +1155,18 @@ }, "implementation": "implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {\n transitive = true\n }", "mainActivity": { - "imports": [ - "io.fabric.sdk.android.Fabric" - ] + "imports": ["io.fabric.sdk.android.Fabric"] } }, "androidtv": { "app/build.gradle": { - "apply": [ - "plugin: 'io.fabric'" - ] + "apply": ["plugin: 'io.fabric'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'io.fabric.tools:gradle:1.25.4'" - ] + "dependencies": ["classpath 'io.fabric.tools:gradle:1.25.4'"] }, - "repositories": [ - "maven { url 'https://maven.fabric.io/public' }" - ] + "repositories": ["maven { url 'https://maven.fabric.io/public' }"] }, "BuildGradle": { "allprojects": { @@ -1169,19 +1188,13 @@ "deprecated": "fabric plugin is deprecated use Fabric (uppercase) in combination with Firebase", "firetv": { "app/build.gradle": { - "apply": [ - "plugin: 'io.fabric'" - ] + "apply": ["plugin: 'io.fabric'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'io.fabric.tools:gradle:1.25.4'" - ] + "dependencies": ["classpath 'io.fabric.tools:gradle:1.25.4'"] }, - "repositories": [ - "maven { url 'https://maven.fabric.io/public' }" - ] + "repositories": ["maven { url 'https://maven.fabric.io/public' }"] }, "BuildGradle": { "allprojects": { @@ -1201,14 +1214,10 @@ "skipImplementation": true }, "ios": { - "appDelegateImports": [ - "Fabric" - ], + "appDelegateImports": ["Fabric"], "appDelegateMethods": { "application": { - "didFinishLaunchingWithOptions": [ - "Fabric.with([Crashlytics.self])" - ] + "didFinishLaunchingWithOptions": ["Fabric.with([Crashlytics.self])"] } }, "plist": { @@ -1230,19 +1239,13 @@ "Fabric": { "android": { "app/build.gradle": { - "apply": [ - "plugin: 'io.fabric'" - ] + "apply": ["plugin: 'io.fabric'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'io.fabric.tools:gradle:1.25.4'" - ] + "dependencies": ["classpath 'io.fabric.tools:gradle:1.25.4'"] }, - "repositories": [ - "maven { url 'https://maven.fabric.io/public' }" - ] + "repositories": ["maven { url 'https://maven.fabric.io/public' }"] }, "BuildGradle": { "allprojects": { @@ -1261,26 +1264,18 @@ }, "implementation": "implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {\n transitive = true\n }", "mainActivity": { - "imports": [ - "io.fabric.sdk.android.Fabric" - ] + "imports": ["io.fabric.sdk.android.Fabric"] } }, "androidtv": { "app/build.gradle": { - "apply": [ - "plugin: 'io.fabric'" - ] + "apply": ["plugin: 'io.fabric'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'io.fabric.tools:gradle:1.25.4'" - ] + "dependencies": ["classpath 'io.fabric.tools:gradle:1.25.4'"] }, - "repositories": [ - "maven { url 'https://maven.fabric.io/public' }" - ] + "repositories": ["maven { url 'https://maven.fabric.io/public' }"] }, "BuildGradle": { "allprojects": { @@ -1299,9 +1294,7 @@ }, "implementation": "implementation('com.crashlytics.sdk.android:crashlytics:2.8.0@aar') {\n transitive = true\n }", "mainActivity": { - "imports": [ - "io.fabric.sdk.android.Fabric" - ] + "imports": ["io.fabric.sdk.android.Fabric"] } }, "ios": { @@ -1321,9 +1314,7 @@ "firebase-core": { "deprecated": "firebase-core plugin is deprecated use Firebase/ instead", "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -1359,20 +1350,14 @@ }, "Firebase/Analytics": { "ios": { - "appDelegateImports": [ - "Firebase" - ], - "podNames": [ - "Firebase/Analytics', '~> 6.3.0" - ] + "appDelegateImports": ["Firebase"], + "podNames": ["Firebase/Analytics', '~> 6.3.0"] }, "no-npm": true }, "Firebase/Core": { "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -1393,33 +1378,23 @@ ] } }, - "podNames": [ - "Firebase/Core', '~> 6.3.0" - ] + "podNames": ["Firebase/Core', '~> 6.3.0"] }, "no-npm": true }, "Firebase/Messaging": { "ios": { - "appDelegateImports": [ - "Firebase" - ], - "podNames": [ - "Firebase/Messaging', '~> 6.3.0" - ] + "appDelegateImports": ["Firebase"], + "podNames": ["Firebase/Messaging', '~> 6.3.0"] }, "no-npm": true }, "google-maps": { "ios": { - "appDelegateImports": [ - "GoogleMaps" - ], + "appDelegateImports": ["GoogleMaps"], "appDelegateMethods": { "application": { - "didFinishLaunchingWithOptions": [ - "GMSServices.provideAPIKey(\"{{props.API_KEY}}\")" - ] + "didFinishLaunchingWithOptions": ["GMSServices.provideAPIKey(\"{{props.API_KEY}}\")"] } }, "podName": "GoogleMaps", @@ -1436,13 +1411,9 @@ "implementation": "implementation('com.google.android.gms:play-services-tagmanager:18.0.1')" }, "ios": { - "podNames": [ - "GoogleTagManager', '~> 7.4.1" - ], + "podNames": ["GoogleTagManager', '~> 7.4.1"], "xcodeproj": { - "resourceFiles": [ - "RNVApp/container" - ] + "resourceFiles": ["RNVApp/container"] } }, "no-npm": true @@ -1520,9 +1491,7 @@ "ios": { "appDelegateMethods": { "application": { - "open": [ - "RCTLinkingManager.application(app, open: url, options: options)" - ] + "open": ["RCTLinkingManager.application(app, open: url, options: options)"] } } }, @@ -1536,23 +1505,17 @@ "didFailToRegisterForRemoteNotificationsWithError": [ "RCTPushNotificationManager.didFailToRegisterForRemoteNotificationsWithError(error)" ], - "didReceive": [ - "RCTPushNotificationManager.didReceive(notification)" - ], + "didReceive": ["RCTPushNotificationManager.didReceive(notification)"], "didReceiveRemoteNotification": [ "RCTPushNotificationManager.didReceiveRemoteNotification(userInfo, fetchCompletionHandler: completionHandler)" ], - "didRegister": [ - "RCTPushNotificationManager.didRegister(notificationSettings)" - ], + "didRegister": ["RCTPushNotificationManager.didRegister(notificationSettings)"], "didRegisterForRemoteNotificationsWithDeviceToken": [ "RCTPushNotificationManager.didRegisterForRemoteNotifications(withDeviceToken: deviceToken)" ] }, "userNotificationCenter": { - "willPresent": [ - "completionHandler([.alert, .badge, .sound])" - ] + "willPresent": ["completionHandler([.alert, .badge, .sound])"] } } }, @@ -1622,16 +1585,12 @@ "CFBundleURLTypes": [ { "CFBundleURLName": "{{props.URL_NAME}}", - "CFBundleURLSchemes": [ - "{{props.URL_SCHEME}}" - ] + "CFBundleURLSchemes": ["{{props.URL_SCHEME}}"] } ] }, "Podfile": { - "sources": [ - "https://github.com/CocoaPods/Specs.git" - ] + "sources": ["https://github.com/CocoaPods/Specs.git"] } }, "macos": { @@ -1639,9 +1598,7 @@ "CFBundleURLTypes": [ { "CFBundleURLName": "{{props.URL_NAME}}", - "CFBundleURLSchemes": [ - "{{props.URL_SCHEME}}" - ] + "CFBundleURLSchemes": ["{{props.URL_SCHEME}}"] } ] } @@ -1681,9 +1638,7 @@ "react-native-animatable": { "version": "1.3.3", "webpack": { - "nextTranspileModules": [ - "react-native-animatable" - ] + "nextTranspileModules": ["react-native-animatable"] } }, "react-native-audio": { @@ -1746,9 +1701,7 @@ { "CFBundleTypeRole": "None", "CFBundleURLName": "auth0", - "CFBundleURLSchemes": [ - "$(PRODUCT_BUNDLE_IDENTIFIER)" - ] + "CFBundleURLSchemes": ["$(PRODUCT_BUNDLE_IDENTIFIER)"] } ] }, @@ -1830,25 +1783,19 @@ "react-native-camera": { "android": { "app/build.gradle": { - "defaultConfig": [ - "missingDimensionStrategy 'react-native-camera', 'general'" - ] + "defaultConfig": ["missingDimensionStrategy 'react-native-camera', 'general'"] }, "package": "org.reactnative.camera.RNCameraPackage" }, "androidtv": { "app/build.gradle": { - "defaultConfig": [ - "missingDimensionStrategy 'react-native-camera', 'general'" - ] + "defaultConfig": ["missingDimensionStrategy 'react-native-camera', 'general'"] }, "package": "org.reactnative.camera.RNCameraPackage" }, "firetv": { "app/build.gradle": { - "defaultConfig": [ - "missingDimensionStrategy 'react-native-camera', 'general'" - ] + "defaultConfig": ["missingDimensionStrategy 'react-native-camera', 'general'"] }, "package": "org.reactnative.camera.RNCameraPackage" }, @@ -1865,21 +1812,14 @@ }, "react-native-carplay": { "ios": { - "appDelegateExtensions": [ - "CPApplicationDelegate" - ], - "appDelegateImports": [ - "CarPlay", - "react_native_carplay" - ], + "appDelegateExtensions": ["CPApplicationDelegate"], + "appDelegateImports": ["CarPlay", "react_native_carplay"], "appDelegateMethods": { "application": { "didConnectCarInterfaceController": [ "RNCarPlay.connect(with: interfaceController, window: window)" ], - "didDisconnectCarInterfaceController": [ - "RNCarPlay.disconnect()" - ] + "didDisconnectCarInterfaceController": ["RNCarPlay.disconnect()"] } }, "path": "{{PLUGIN_ROOT}}", @@ -2124,12 +2064,8 @@ } ] }, - "implementations": [ - "'com.facebook.android:facebook-android-sdk:[4,5)'" - ], - "imports": [ - "com.facebook.CallbackManager" - ], + "implementations": ["'com.facebook.android:facebook-android-sdk:[4,5)'"], + "imports": ["com.facebook.CallbackManager"], "mainActivity": { "createMethods": [], "imports": [], @@ -2154,12 +2090,8 @@ } }, "androidtv": { - "implementations": [ - "'com.facebook.android:facebook-android-sdk:[4,5)'" - ], - "imports": [ - "com.facebook.CallbackManager" - ], + "implementations": ["'com.facebook.android:facebook-android-sdk:[4,5)'"], + "imports": ["com.facebook.CallbackManager"], "mainActivity": { "createMethods": [], "imports": [], @@ -2175,12 +2107,8 @@ "package": "com.facebook.reactnative.androidsdk.FBSDKPackage" }, "firetv": { - "implementations": [ - "'com.facebook.android:facebook-android-sdk:[4,5)'" - ], - "imports": [ - "com.facebook.CallbackManager" - ], + "implementations": ["'com.facebook.android:facebook-android-sdk:[4,5)'"], + "imports": ["com.facebook.CallbackManager"], "mainActivity": { "createMethods": [], "imports": [], @@ -2196,36 +2124,25 @@ "package": "com.facebook.reactnative.androidsdk.FBSDKPackage" }, "ios": { - "appDelegateImports": [ - "FBSDKCoreKit" - ], + "appDelegateImports": ["FBSDKCoreKit"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ "ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)" ], - "open": [ - "ApplicationDelegate.shared.application(app, open: url, options: options)" - ] + "open": ["ApplicationDelegate.shared.application(app, open: url, options: options)"] } }, "plist": { "CFBundleURLTypes": [ { "CFBundleTypeRole": "Editor", - "CFBundleURLSchemes": [ - "fb{{props.APP_ID}}" - ] + "CFBundleURLSchemes": ["fb{{props.APP_ID}}"] } ], "FacebookAppID": "{{props.APP_ID}}", "FacebookDisplayName": "{{props.APP_NAME}}", - "LSApplicationQueriesSchemes": [ - "fbapi", - "fb-messenger-share-api", - "fbauth2", - "fbshareextension" - ] + "LSApplicationQueriesSchemes": ["fbapi", "fb-messenger-share-api", "fbauth2", "fbshareextension"] }, "podName": "react-native-fbsdk" }, @@ -2379,15 +2296,11 @@ ] }, "app/build.gradle": { - "apply": [ - "plugin: 'com.google.gms.google-services'" - ] + "apply": ["plugin: 'com.google.gms.google-services'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'com.google.gms:google-services:4.2.0'" - ] + "dependencies": ["classpath 'com.google.gms:google-services:4.2.0'"] } }, "implementations": [ @@ -2511,15 +2424,11 @@ ] }, "app/build.gradle": { - "apply": [ - "plugin: 'com.google.gms.google-services'" - ] + "apply": ["plugin: 'com.google.gms.google-services'"] }, "build.gradle": { "buildscript": { - "dependencies": [ - "classpath 'com.google.gms:google-services:4.2.0'" - ] + "dependencies": ["classpath 'com.google.gms:google-services:4.2.0'"] } }, "implementations": [ @@ -2535,9 +2444,7 @@ } }, "ios": { - "appDelegateImports": [ - "Firebase" - ], + "appDelegateImports": ["Firebase"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -2554,9 +2461,7 @@ "CFBundleURLTypes": [ { "CFBundleURLName": "{{props.URL_NAME}}", - "CFBundleURLSchemes": [ - "{{props.URL_SCHEME}}" - ] + "CFBundleURLSchemes": ["{{props.URL_SCHEME}}"] } ] }, @@ -2570,9 +2475,7 @@ }, "podName": "RNFirebase", "xcodeproj": { - "resourceFiles": [ - "RNVApp/GoogleService-Info.plist" - ] + "resourceFiles": ["RNVApp/GoogleService-Info.plist"] } }, "props": { @@ -2714,23 +2617,15 @@ "'com.google.guava:guava:28.0-android'" ], "mainActivity": { - "createMethods": [ - "CastContext.getSharedInstance(this)" - ], - "imports": [ - "com.google.android.gms.cast.framework.CastContext" - ] + "createMethods": ["CastContext.getSharedInstance(this)"], + "imports": ["com.google.android.gms.cast.framework.CastContext"] }, "MainApplication": { - "packages": [ - "com.reactnative.googlecast.GoogleCastPackage" - ] + "packages": ["com.reactnative.googlecast.GoogleCastPackage"] } }, "ios": { - "appDelegateImports": [ - "GoogleCast" - ], + "appDelegateImports": ["GoogleCast"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -2750,10 +2645,7 @@ "plist": { "NSBluetoothAlwaysUsageDescription": "${PRODUCT_NAME} uses Bluetooth to discover nearby Cast devices.", "NSBluetoothPeripheralUsageDescription": "${PRODUCT_NAME} uses Bluetooth to discover nearby Cast devices.", - "NSBonjourServices": [ - "_googlecast._tcp", - "_{{props.APPLICATION_ID}}._googlecast._tcp" - ], + "NSBonjourServices": ["_googlecast._tcp", "_{{props.APPLICATION_ID}}._googlecast._tcp"], "NSLocalNetworkUsageDescription": "${PRODUCT_NAME} uses the local network to discover Cast-enabled devices on your WiFi network.", "NSMicrophoneUsageDescription": "${PRODUCT_NAME} uses microphone access to listen for ultrasonic tokens when pairing with nearby Cast devices." }, @@ -2766,9 +2658,7 @@ }, "react-native-home-indicator": { "ios": { - "appDelegateImports": [ - "react_native_home_indicator" - ], + "appDelegateImports": ["react_native_home_indicator"], "appDelegateMethods": { "application": { "didFinishLaunchingWithOptions": [ @@ -2786,9 +2676,7 @@ "react-native-iap": { "android": { "app/build.gradle": { - "defaultConfig": [ - "missingDimensionStrategy 'store', 'play'" - ] + "defaultConfig": ["missingDimensionStrategy 'store', 'play'"] }, "package": "com.dooboolab.RNIap.RNIapPackage" }, @@ -2827,17 +2715,13 @@ }, "ios": { "Podfile": { - "sources": [ - "https://github.com/TimOliver/TOCropViewController.git" - ] + "sources": ["https://github.com/TimOliver/TOCropViewController.git"] }, "podName": "RNImageCropPicker" }, "macos": { "Podfile": { - "sources": [ - "https://github.com/TimOliver/TOCropViewController.git" - ] + "sources": ["https://github.com/TimOliver/TOCropViewController.git"] }, "podName": "RNImageCropPicker" }, @@ -2967,10 +2851,7 @@ "moduleAliases": { "react-native-linear-gradient": "react-native-web-linear-gradient" }, - "modulePaths": [ - "react-native-web-linear-gradient", - "react-native-linear-gradient" - ] + "modulePaths": ["react-native-web-linear-gradient", "react-native-linear-gradient"] } }, "react-native-local-mongodb": { @@ -3130,9 +3011,7 @@ "react-native-orientation-locker": { "android": { "mainActivity": { - "imports": [ - "android.content.res.Configuration" - ], + "imports": ["android.content.res.Configuration"], "methods": [ "override fun onConfigurationChanged(newConfig:Configuration) {", " super.onConfigurationChanged(newConfig)", @@ -3145,14 +3024,10 @@ "package": "org.wonday.orientation.OrientationPackage" }, "ios": { - "appDelegateImports": [ - "react_native_orientation_locker" - ], + "appDelegateImports": ["react_native_orientation_locker"], "appDelegateMethods": { "application": { - "supportedInterfaceOrientationsFor": [ - "Orientation.getOrientation();" - ] + "supportedInterfaceOrientationsFor": ["Orientation.getOrientation();"] } }, "podName": "react-native-orientation-locker" @@ -3217,23 +3092,17 @@ "ios": { "isStatic": true, "podName": "RNPermissions", - "staticPods": [ - "::startsWith::Permission-" - ] + "staticPods": ["::startsWith::Permission-"] }, "macos": { "isStatic": true, "podName": "RNPermissions", - "staticPods": [ - "::startsWith::Permission-" - ] + "staticPods": ["::startsWith::Permission-"] }, "tvos": { "isStatic": true, "podName": "RNPermissions", - "staticPods": [ - "::startsWith::Permission-" - ] + "staticPods": ["::startsWith::Permission-"] }, "version": "3.6.1" }, @@ -3388,10 +3257,7 @@ "react-native-root-toast": { "version": "3.2.1", "webpack": { - "nextTranspileModules": [ - "react-native-root-siblings", - "static-container" - ] + "nextTranspileModules": ["react-native-root-siblings", "static-container"] } }, "react-native-safe-area-context": { @@ -3547,46 +3413,30 @@ "react-native-splash-screen": { "android": { "mainActivity": { - "createMethods": [ - "SplashScreen.show(this)" - ], - "imports": [ - "org.devio.rn.splashscreen.SplashScreen" - ] + "createMethods": ["SplashScreen.show(this)"], + "imports": ["org.devio.rn.splashscreen.SplashScreen"] }, "package": "org.devio.rn.splashscreen.SplashScreenReactPackage" }, "androidtv": { "mainActivity": { - "createMethods": [ - "SplashScreen.show(this)" - ], - "imports": [ - "org.devio.rn.splashscreen.SplashScreen" - ] + "createMethods": ["SplashScreen.show(this)"], + "imports": ["org.devio.rn.splashscreen.SplashScreen"] }, "package": "org.devio.rn.splashscreen.SplashScreenReactPackage" }, "firetv": { "mainActivity": { - "createMethods": [ - "SplashScreen.show(this)" - ], - "imports": [ - "org.devio.rn.splashscreen.SplashScreen" - ] + "createMethods": ["SplashScreen.show(this)"], + "imports": ["org.devio.rn.splashscreen.SplashScreen"] }, "package": "org.devio.rn.splashscreen.SplashScreenReactPackage" }, "ios": { - "appDelegateImports": [ - "react_native_splash_screen" - ], + "appDelegateImports": ["react_native_splash_screen"], "appDelegateMethods": { "application": { - "didFinishLaunchingWithOptions": [ - "RNSplashScreen.show()" - ] + "didFinishLaunchingWithOptions": ["RNSplashScreen.show()"] } }, "podName": "react-native-splash-screen" @@ -3974,9 +3824,7 @@ "webpack": { "moduleAliases": true, "modulePaths": true, - "nextTranspileModules": [ - "recyclerlistview" - ] + "nextTranspileModules": ["recyclerlistview"] } }, "renative": { @@ -4007,9 +3855,7 @@ "rnv-platform-info": { "version": "1.0.8", "webpack": { - "nextTranspileModules": [ - "rnv-platform-info" - ] + "nextTranspileModules": ["rnv-platform-info"] } }, "Sentry": { @@ -4041,9 +3887,7 @@ "afterEvaluate": [ "com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true" ], - "implementations": [ - "'com.google.android.gms:play-services-wallet:16.0.0'" - ], + "implementations": ["'com.google.android.gms:play-services-wallet:16.0.0'"], "package": "com.gettipsi.stripe.StripeReactPackage" }, "ios": { @@ -4053,4 +3897,4 @@ }, "tslib": "2.3.1" } -} \ No newline at end of file +} diff --git a/packages/core/renative.templates.json b/packages/core/renative.templates.json deleted file mode 100644 index ac842e3bf7..0000000000 --- a/packages/core/renative.templates.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "$schema": "../../.rnv/schema/rnv.templates.json", - "projectTemplates": { - "@rnv/template-starter": { - "description": "Multiplatform 'hello world' template" - }, - "@flexn/create-template-starter": { - "description": "Advanced multiplatform template using flexn Create SDK" - } - }, - "engineTemplates": { - "@rnv/engine-rn": { - "version": "1.0.0-rc.12", - "id": "engine-rn" - }, - "@rnv/engine-rn-tvos": { - "version": "1.0.0-rc.12", - "id": "engine-rn-tvos" - }, - "@rnv/engine-rn-web": { - "version": "1.0.0-rc.12", - "id": "engine-rn-web" - }, - "@rnv/engine-rn-next": { - "version": "1.0.0-rc.12", - "id": "engine-rn-next" - }, - "@rnv/engine-rn-electron": { - "version": "1.0.0-rc.12", - "id": "engine-rn-electron" - }, - "@rnv/engine-lightning": { - "version": "1.0.0-rc.12", - "id": "engine-lightning" - }, - "@rnv/engine-rn-macos": { - "version": "1.0.0-rc.12", - "id": "engine-rn-macos" - }, - "@rnv/engine-rn-windows": { - "version": "1.0.0-rc.12", - "id": "engine-rn-windows" - } - }, - "integrationTemplates": { - "@rnv/integration-vercel": { - "version": "0.2.0-alpha.0" - }, - "@rnv/integration-docker": { - "version": "0.1.0-alpha.0" - } - }, - "platformTemplates": { - "ios": { - "engine": "engine-rn" - }, - "android": { - "engine": "engine-rn" - }, - "androidwear": { - "engine": "engine-rn" - }, - "androidtv": { - "engine": "engine-rn" - }, - "firetv": { - "engine": "engine-rn" - }, - "tvos": { - "engine": "engine-rn-tvos" - }, - "macos": { - "engine": "engine-rn" - }, - "windows": { - "engine": "engine-rn-electron" - }, - "linux": { - "engine": "engine-rn-electron" - }, - "xbox": { - "engine": "engine-rn-windows" - }, - "tizen": { - "engine": "engine-rn-web" - }, - "tizenmobile": { - "engine": "engine-rn-web" - }, - "tizenwatch": { - "engine": "engine-rn-web" - }, - "webos": { - "engine": "engine-rn-web" - }, - "chromecast": { - "engine": "engine-rn-web" - }, - "kaios": { - "engine": "engine-rn-web" - }, - "web": { - "engine": "engine-rn-next" - }, - "webtv": { - "engine": "engine-rn-web" - } - } -} From b0a2694f1de37585b80a5d781a396a459cbb65f5 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 19:50:25 +0100 Subject: [PATCH 048/175] move from support files to templateFiles --- .eslintignore | 2 +- packages/core/src/context/index.ts | 2 +- .../androidtv/app/src/main/AndroidManifest.xml | 2 +- .../firetv/app/src/main/AndroidManifest.xml | 2 +- packages/engine-rn-windows/package.json | 2 +- .../android/app/src/main/AndroidManifest.xml | 2 +- .../androidwear/app/src/main/AndroidManifest.xml | 2 +- packages/sdk-android/package.json | 2 +- packages/sdk-android/src/manifestParser.ts | 2 +- .../AndroidManifest_android.json | 0 .../AndroidManifest_androidtv.json | 0 .../AndroidManifest_androidwear.json | 0 .../AndroidManifest_firetv.json | 0 .../app.build.gradle.json | 0 .../build.gradle.json | 0 packages/sdk-apple/package.json | 2 +- packages/sdk-apple/src/plistParser.ts | 4 ++-- .../{supportFiles => templateFiles}/AppleWWDRCA.cer | Bin .../entitlements.json | 0 .../info.plist.ios.json | 0 .../info.plist.macos.json | 0 .../info.plist.tvos.json | 0 packages/sdk-kaios/package.json | 2 +- spec/xml/AndroidManifest.xml | 2 +- 24 files changed, 14 insertions(+), 14 deletions(-) rename packages/sdk-android/{supportFiles => templateFiles}/AndroidManifest_android.json (100%) rename packages/sdk-android/{supportFiles => templateFiles}/AndroidManifest_androidtv.json (100%) rename packages/sdk-android/{supportFiles => templateFiles}/AndroidManifest_androidwear.json (100%) rename packages/sdk-android/{supportFiles => templateFiles}/AndroidManifest_firetv.json (100%) rename packages/sdk-android/{supportFiles => templateFiles}/app.build.gradle.json (100%) rename packages/sdk-android/{supportFiles => templateFiles}/build.gradle.json (100%) rename packages/sdk-apple/{supportFiles => templateFiles}/AppleWWDRCA.cer (100%) rename packages/sdk-apple/{supportFiles => templateFiles}/entitlements.json (100%) rename packages/sdk-apple/{supportFiles => templateFiles}/info.plist.ios.json (100%) rename packages/sdk-apple/{supportFiles => templateFiles}/info.plist.macos.json (100%) rename packages/sdk-apple/{supportFiles => templateFiles}/info.plist.tvos.json (100%) diff --git a/.eslintignore b/.eslintignore index fb29af8ccd..865e65f76d 100755 --- a/.eslintignore +++ b/.eslintignore @@ -16,7 +16,7 @@ test/examples/*.js **/projectTemplates **/pluginTemplates **/nodeModuleOverrides -**/supportFiles +**/templateFiles **/templateFiles packages/rnv/tests jest.config.*.js diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 4466dd46e5..62bb3f7013 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -123,7 +123,7 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef c.paths.buildHooks.src.indexTs = path.join(c.paths.buildHooks.src.dir, 'index.ts'); c.paths.buildHooks.dist.index = path.join(c.paths.buildHooks.dist.dir, 'index.js'); c.paths.buildHooks.tsconfig = path.join(c.paths.buildHooks.dir, 'tsconfig.json'); - // c.paths.buildHooks.tsconfig = path.join(__dirname, '../../supportFiles/tsconfig.hooks.json'); + // c.paths.buildHooks.tsconfig = path.join(__dirname, '../../templateFiles/tsconfig.hooks.json'); c.paths.project.nodeModulesDir = path.join(c.paths.project.dir, 'node_modules'); c.paths.project.srcDir = path.join(c.paths.project.dir, 'src'); c.paths.project.appConfigsDir = path.join(c.paths.project.dir, 'appConfigs'); diff --git a/packages/engine-rn-tvos/templates/platforms/androidtv/app/src/main/AndroidManifest.xml b/packages/engine-rn-tvos/templates/platforms/androidtv/app/src/main/AndroidManifest.xml index 9055065933..c94b6e04a9 100755 --- a/packages/engine-rn-tvos/templates/platforms/androidtv/app/src/main/AndroidManifest.xml +++ b/packages/engine-rn-tvos/templates/platforms/androidtv/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ {{PLUGIN_MANIFEST_FILE}} \ No newline at end of file diff --git a/packages/engine-rn-tvos/templates/platforms/firetv/app/src/main/AndroidManifest.xml b/packages/engine-rn-tvos/templates/platforms/firetv/app/src/main/AndroidManifest.xml index 82101e040e..926050047d 100755 --- a/packages/engine-rn-tvos/templates/platforms/firetv/app/src/main/AndroidManifest.xml +++ b/packages/engine-rn-tvos/templates/platforms/firetv/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ {{PLUGIN_MANIFEST_FILE}} diff --git a/packages/engine-rn-windows/package.json b/packages/engine-rn-windows/package.json index d995d37617..7e430748ad 100644 --- a/packages/engine-rn-windows/package.json +++ b/packages/engine-rn-windows/package.json @@ -18,7 +18,7 @@ "lib", "pluginTemplates", "renative.engine.json", - "supportFiles" + "templateFiles" ], "main": "lib/index.js", "repository": { diff --git a/packages/engine-rn/templates/platforms/android/app/src/main/AndroidManifest.xml b/packages/engine-rn/templates/platforms/android/app/src/main/AndroidManifest.xml index de39d3d501..62d079c778 100755 --- a/packages/engine-rn/templates/platforms/android/app/src/main/AndroidManifest.xml +++ b/packages/engine-rn/templates/platforms/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ {{PLUGIN_MANIFEST_FILE}} \ No newline at end of file diff --git a/packages/engine-rn/templates/platforms/androidwear/app/src/main/AndroidManifest.xml b/packages/engine-rn/templates/platforms/androidwear/app/src/main/AndroidManifest.xml index 43d72d41ee..69def7d3ae 100755 --- a/packages/engine-rn/templates/platforms/androidwear/app/src/main/AndroidManifest.xml +++ b/packages/engine-rn/templates/platforms/androidwear/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ {{PLUGIN_MANIFEST_FILE}} \ No newline at end of file diff --git a/packages/sdk-android/package.json b/packages/sdk-android/package.json index 3b8f3fd1dd..d1410cf629 100644 --- a/packages/sdk-android/package.json +++ b/packages/sdk-android/package.json @@ -12,7 +12,7 @@ "files": [ "LICENSE", "lib", - "supportFiles", + "templateFiles", "templates", "types.d.ts" ], diff --git a/packages/sdk-android/src/manifestParser.ts b/packages/sdk-android/src/manifestParser.ts index 2cae715ca5..2fe4d1af84 100644 --- a/packages/sdk-android/src/manifestParser.ts +++ b/packages/sdk-android/src/manifestParser.ts @@ -221,7 +221,7 @@ export const parseAndroidManifestSync = () => { if (!platform) return; try { - const baseManifestFilePath = path.join(__dirname, `../supportFiles/AndroidManifest_${platform}.json`); + const baseManifestFilePath = path.join(__dirname, `../templateFiles/AndroidManifest_${platform}.json`); const baseManifestFile = readObjectSync(baseManifestFilePath); if (!baseManifestFile) { diff --git a/packages/sdk-android/supportFiles/AndroidManifest_android.json b/packages/sdk-android/templateFiles/AndroidManifest_android.json similarity index 100% rename from packages/sdk-android/supportFiles/AndroidManifest_android.json rename to packages/sdk-android/templateFiles/AndroidManifest_android.json diff --git a/packages/sdk-android/supportFiles/AndroidManifest_androidtv.json b/packages/sdk-android/templateFiles/AndroidManifest_androidtv.json similarity index 100% rename from packages/sdk-android/supportFiles/AndroidManifest_androidtv.json rename to packages/sdk-android/templateFiles/AndroidManifest_androidtv.json diff --git a/packages/sdk-android/supportFiles/AndroidManifest_androidwear.json b/packages/sdk-android/templateFiles/AndroidManifest_androidwear.json similarity index 100% rename from packages/sdk-android/supportFiles/AndroidManifest_androidwear.json rename to packages/sdk-android/templateFiles/AndroidManifest_androidwear.json diff --git a/packages/sdk-android/supportFiles/AndroidManifest_firetv.json b/packages/sdk-android/templateFiles/AndroidManifest_firetv.json similarity index 100% rename from packages/sdk-android/supportFiles/AndroidManifest_firetv.json rename to packages/sdk-android/templateFiles/AndroidManifest_firetv.json diff --git a/packages/sdk-android/supportFiles/app.build.gradle.json b/packages/sdk-android/templateFiles/app.build.gradle.json similarity index 100% rename from packages/sdk-android/supportFiles/app.build.gradle.json rename to packages/sdk-android/templateFiles/app.build.gradle.json diff --git a/packages/sdk-android/supportFiles/build.gradle.json b/packages/sdk-android/templateFiles/build.gradle.json similarity index 100% rename from packages/sdk-android/supportFiles/build.gradle.json rename to packages/sdk-android/templateFiles/build.gradle.json diff --git a/packages/sdk-apple/package.json b/packages/sdk-apple/package.json index 9d2ca36757..e7a9d0efb6 100644 --- a/packages/sdk-apple/package.json +++ b/packages/sdk-apple/package.json @@ -12,7 +12,7 @@ "files": [ "LICENSE", "lib", - "supportFiles", + "templateFiles", "types.d.ts" ], "main": "lib/index.js", diff --git a/packages/sdk-apple/src/plistParser.ts b/packages/sdk-apple/src/plistParser.ts index c0aaabce4f..8228d1415b 100644 --- a/packages/sdk-apple/src/plistParser.ts +++ b/packages/sdk-apple/src/plistParser.ts @@ -70,7 +70,7 @@ export const parseEntitlementsPlist = () => let pluginsEntitlementsObj = getConfigProp('entitlements'); if (!pluginsEntitlementsObj) { pluginsEntitlementsObj = - readObjectSync(path.join(__dirname, '../supportFiles/entitlements.json')) || undefined; + readObjectSync(path.join(__dirname, '../templateFiles/entitlements.json')) || undefined; } saveObjToPlistSync(c, entitlementsPath, pluginsEntitlementsObj); @@ -93,7 +93,7 @@ export const parseInfoPlist = () => // PLIST let plistObj = - readObjectSync(path.join(__dirname, `../supportFiles/info.plist.${platform}.json`)) || {}; + readObjectSync(path.join(__dirname, `../templateFiles/info.plist.${platform}.json`)) || {}; plistObj.CFBundleDisplayName = getAppTitle(); plistObj.CFBundleShortVersionString = getAppVersion(); plistObj.CFBundleVersion = getAppVersionCode(); diff --git a/packages/sdk-apple/supportFiles/AppleWWDRCA.cer b/packages/sdk-apple/templateFiles/AppleWWDRCA.cer similarity index 100% rename from packages/sdk-apple/supportFiles/AppleWWDRCA.cer rename to packages/sdk-apple/templateFiles/AppleWWDRCA.cer diff --git a/packages/sdk-apple/supportFiles/entitlements.json b/packages/sdk-apple/templateFiles/entitlements.json similarity index 100% rename from packages/sdk-apple/supportFiles/entitlements.json rename to packages/sdk-apple/templateFiles/entitlements.json diff --git a/packages/sdk-apple/supportFiles/info.plist.ios.json b/packages/sdk-apple/templateFiles/info.plist.ios.json similarity index 100% rename from packages/sdk-apple/supportFiles/info.plist.ios.json rename to packages/sdk-apple/templateFiles/info.plist.ios.json diff --git a/packages/sdk-apple/supportFiles/info.plist.macos.json b/packages/sdk-apple/templateFiles/info.plist.macos.json similarity index 100% rename from packages/sdk-apple/supportFiles/info.plist.macos.json rename to packages/sdk-apple/templateFiles/info.plist.macos.json diff --git a/packages/sdk-apple/supportFiles/info.plist.tvos.json b/packages/sdk-apple/templateFiles/info.plist.tvos.json similarity index 100% rename from packages/sdk-apple/supportFiles/info.plist.tvos.json rename to packages/sdk-apple/templateFiles/info.plist.tvos.json diff --git a/packages/sdk-kaios/package.json b/packages/sdk-kaios/package.json index f7f958db5d..cbf7c2840c 100644 --- a/packages/sdk-kaios/package.json +++ b/packages/sdk-kaios/package.json @@ -12,7 +12,7 @@ "files": [ "LICENSE", "lib", - "supportFiles", + "templateFiles", "types.d.ts" ], "main": "lib/index.js", diff --git a/spec/xml/AndroidManifest.xml b/spec/xml/AndroidManifest.xml index 4098f64aac..9aa8170dc6 100644 --- a/spec/xml/AndroidManifest.xml +++ b/spec/xml/AndroidManifest.xml @@ -1,5 +1,5 @@ {{PLUGIN_MANIFEST_FILE}} From c783d0fdaced382ab2620eabef32be3e1221e761 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 19:54:03 +0100 Subject: [PATCH 049/175] move gradleProject to templateFiles --- packages/sdk-android/src/gradleWrapperParser.ts | 2 +- .../gradleProject/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 .../gradleProject/gradlew | 0 .../gradleProject/gradlew.bat | 0 5 files changed, 1 insertion(+), 1 deletion(-) rename packages/sdk-android/{templates => templateFiles}/gradleProject/gradle/wrapper/gradle-wrapper.jar (100%) rename packages/sdk-android/{templates => templateFiles}/gradleProject/gradle/wrapper/gradle-wrapper.properties (100%) rename packages/sdk-android/{templates => templateFiles}/gradleProject/gradlew (100%) rename packages/sdk-android/{templates => templateFiles}/gradleProject/gradlew.bat (100%) diff --git a/packages/sdk-android/src/gradleWrapperParser.ts b/packages/sdk-android/src/gradleWrapperParser.ts index 6c39dbb265..639c9e2957 100644 --- a/packages/sdk-android/src/gradleWrapperParser.ts +++ b/packages/sdk-android/src/gradleWrapperParser.ts @@ -11,7 +11,7 @@ import { } from '@rnv/core'; import { addSystemInjects, getBuildFilePath } from '@rnv/sdk-utils'; -const GRADLE_SOURCE_PATH = path.join(__dirname, '../templates/gradleProject'); +const GRADLE_SOURCE_PATH = path.join(__dirname, '../templateFiles/gradleProject'); const copyGradleProjectTemplate = async () => { logDefault('copyGradleProjectTemplate'); diff --git a/packages/sdk-android/templates/gradleProject/gradle/wrapper/gradle-wrapper.jar b/packages/sdk-android/templateFiles/gradleProject/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from packages/sdk-android/templates/gradleProject/gradle/wrapper/gradle-wrapper.jar rename to packages/sdk-android/templateFiles/gradleProject/gradle/wrapper/gradle-wrapper.jar diff --git a/packages/sdk-android/templates/gradleProject/gradle/wrapper/gradle-wrapper.properties b/packages/sdk-android/templateFiles/gradleProject/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from packages/sdk-android/templates/gradleProject/gradle/wrapper/gradle-wrapper.properties rename to packages/sdk-android/templateFiles/gradleProject/gradle/wrapper/gradle-wrapper.properties diff --git a/packages/sdk-android/templates/gradleProject/gradlew b/packages/sdk-android/templateFiles/gradleProject/gradlew similarity index 100% rename from packages/sdk-android/templates/gradleProject/gradlew rename to packages/sdk-android/templateFiles/gradleProject/gradlew diff --git a/packages/sdk-android/templates/gradleProject/gradlew.bat b/packages/sdk-android/templateFiles/gradleProject/gradlew.bat similarity index 100% rename from packages/sdk-android/templates/gradleProject/gradlew.bat rename to packages/sdk-android/templateFiles/gradleProject/gradlew.bat From d85d8e768b6e46004d0745953048eedd41e78555 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 20:14:40 +0100 Subject: [PATCH 050/175] cleanup ignore files --- .gitignore | 45 +++++++++++--- packages/adapter/.gitignore | 3 - packages/app-harness/.gitignore | 62 ------------------- packages/cli/.gitignore | 3 - packages/core/.gitignore | 52 ---------------- packages/core/.npmignore | 58 ----------------- packages/engine-core/.gitignore | 3 - packages/engine-lightning/.gitignore | 51 --------------- packages/engine-lightning/.npmignore | 54 ---------------- packages/engine-rn-electron/.gitignore | 51 --------------- packages/engine-rn-electron/.npmignore | 54 ---------------- packages/engine-rn-macos/.gitignore | 51 --------------- packages/engine-rn-macos/.npmignore | 54 ---------------- .../templates/platforms/macos/.gitignore | 2 - packages/engine-rn-next/.gitignore | 51 --------------- packages/engine-rn-next/.npmignore | 54 ---------------- packages/engine-rn-tvos/.gitignore | 51 --------------- packages/engine-rn-tvos/.npmignore | 54 ---------------- packages/engine-rn-web/.gitignore | 51 --------------- packages/engine-rn-web/.npmignore | 54 ---------------- packages/engine-rn-windows/.gitignore | 51 --------------- packages/engine-rn-windows/.npmignore | 54 ---------------- packages/engine-rn/.gitignore | 51 --------------- packages/engine-rn/.npmignore | 54 ---------------- packages/engine-roku/.gitignore | 51 --------------- packages/engine-roku/.npmignore | 54 ---------------- packages/rnv/.gitignore | 52 ---------------- packages/rnv/.npmignore | 58 ----------------- packages/sdk-android/.gitignore | 3 - packages/sdk-android/package.json | 1 - packages/sdk-apple/.gitignore | 3 - packages/sdk-kaios/.gitignore | 3 - packages/sdk-react-native/.gitignore | 3 - packages/sdk-telemetry/.gitignore | 3 - packages/sdk-tizen/.gitignore | 3 - packages/sdk-utils/.gitignore | 3 - packages/sdk-webos/.gitignore | 3 - packages/sdk-webpack/.gitignore | 3 - packages/template-starter/.gitignore | 45 +------------- packages/template-starter/.npmignore | 4 -- 40 files changed, 37 insertions(+), 1323 deletions(-) delete mode 100644 packages/adapter/.gitignore delete mode 100644 packages/app-harness/.gitignore delete mode 100644 packages/cli/.gitignore delete mode 100644 packages/core/.gitignore delete mode 100644 packages/core/.npmignore delete mode 100644 packages/engine-core/.gitignore delete mode 100644 packages/engine-lightning/.gitignore delete mode 100644 packages/engine-lightning/.npmignore delete mode 100644 packages/engine-rn-electron/.gitignore delete mode 100644 packages/engine-rn-electron/.npmignore delete mode 100644 packages/engine-rn-macos/.gitignore delete mode 100644 packages/engine-rn-macos/.npmignore delete mode 100644 packages/engine-rn-macos/templates/platforms/macos/.gitignore delete mode 100644 packages/engine-rn-next/.gitignore delete mode 100644 packages/engine-rn-next/.npmignore delete mode 100644 packages/engine-rn-tvos/.gitignore delete mode 100644 packages/engine-rn-tvos/.npmignore delete mode 100644 packages/engine-rn-web/.gitignore delete mode 100644 packages/engine-rn-web/.npmignore delete mode 100644 packages/engine-rn-windows/.gitignore delete mode 100644 packages/engine-rn-windows/.npmignore delete mode 100644 packages/engine-rn/.gitignore delete mode 100644 packages/engine-rn/.npmignore delete mode 100644 packages/engine-roku/.gitignore delete mode 100644 packages/engine-roku/.npmignore delete mode 100644 packages/rnv/.gitignore delete mode 100644 packages/rnv/.npmignore delete mode 100644 packages/sdk-android/.gitignore delete mode 100644 packages/sdk-apple/.gitignore delete mode 100644 packages/sdk-kaios/.gitignore delete mode 100644 packages/sdk-react-native/.gitignore delete mode 100644 packages/sdk-telemetry/.gitignore delete mode 100644 packages/sdk-tizen/.gitignore delete mode 100644 packages/sdk-utils/.gitignore delete mode 100644 packages/sdk-webos/.gitignore delete mode 100644 packages/sdk-webpack/.gitignore delete mode 100644 packages/template-starter/.npmignore diff --git a/.gitignore b/.gitignore index 199bad3c82..fa702293d8 100755 --- a/.gitignore +++ b/.gitignore @@ -28,10 +28,16 @@ project.xcworkspace # node.js # node_modules/ +dist +lib + +# NPM npm-debug.log -yarn-error.log +# Yarn +yarn-error.log +# Lerna lerna-debug.log index/ @@ -55,21 +61,40 @@ buck-out/ /packages/**/dist /packages/**/lib +# Expo .expo coverage -# IMPORTANT. in rnv .next should NOT be at the root level but in platformBuilds. if you see it in root level you should delete it -# .next - # RN Windows Engine .binlog packages/**/*.binlog -dist -lib -lerna-debug.log -yarn-error.log -.rnv coverage-ts -.watchman-cookie-* \ No newline at end of file +.watchman-cookie-* + +# Next +.next + +# ReNative +.rnv +/packages/**/platformBuilds +/packages/**/platformAssets +renative.private.json +renative.local.json +renative.local.json +renative.build.json +renative.runtime.json +rnv-config.local.json +metro.config.local.js +/packages/**/.bundle +/packages/**/vendor/ +/packages/**/reporting/ + + + + + + + + diff --git a/packages/adapter/.gitignore b/packages/adapter/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/adapter/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/app-harness/.gitignore b/packages/app-harness/.gitignore deleted file mode 100644 index 696d533dda..0000000000 --- a/packages/app-harness/.gitignore +++ /dev/null @@ -1,62 +0,0 @@ -# -------------------------------- -# Generated by ReNative -# -------------------------------- - -.DS_Store -node_modules/ -npm-debug.log -yarn-error.log -.env -.next -.expo - -#------------------------------- -# Visual Studio -#------------------------------- -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -#------------------------------- -# RENATIVE -#------------------------------- - -platformBuilds/ -platformAssets/ -buildHooks/dist -renative.local.json -renative.private.json -renative.build.json -renative.runtime.json -rnv-config.local.json -metro.config.local.js -.rnv - - -vendor/ -appConfigs/base/assets/ios -appConfigs/base/assets/android -appConfigs/base/assets/web -appConfigs/base/assets/androidtv -appConfigs/base/assets/tvos -appConfigs/base/assets/webos -appConfigs/base/assets/tizen -appConfigs/base/assets/tizenwatch -appConfigs/base/assets/tizenwear -appConfigs/base/assets/kaios -appConfigs/base/assets/firetv -appConfigs/base/assets/androidwear -appConfigs/base/assets/xbox -appConfigs/base/assets/linux -appConfigs/base/assets/macos - -public/ - -# Does not work -# !appConfigs/base/assets/runtime - -reporting - -.bundle/ diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/cli/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/core/.gitignore b/packages/core/.gitignore deleted file mode 100644 index b1df6575cc..0000000000 --- a/packages/core/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -lib/ -!pluginTemplates/**/dist diff --git a/packages/core/.npmignore b/packages/core/.npmignore deleted file mode 100644 index 59f1496369..0000000000 --- a/packages/core/.npmignore +++ /dev/null @@ -1,58 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ - -**/__tests__/ - -*.map \ No newline at end of file diff --git a/packages/engine-core/.gitignore b/packages/engine-core/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/engine-core/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/engine-lightning/.gitignore b/packages/engine-lightning/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-lightning/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-lightning/.npmignore b/packages/engine-lightning/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-lightning/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-rn-electron/.gitignore b/packages/engine-rn-electron/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-rn-electron/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-rn-electron/.npmignore b/packages/engine-rn-electron/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-rn-electron/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-rn-macos/.gitignore b/packages/engine-rn-macos/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-rn-macos/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-rn-macos/.npmignore b/packages/engine-rn-macos/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-rn-macos/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-rn-macos/templates/platforms/macos/.gitignore b/packages/engine-rn-macos/templates/platforms/macos/.gitignore deleted file mode 100644 index 3e8cc2aec8..0000000000 --- a/packages/engine-rn-macos/templates/platforms/macos/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# CocoaPods -Pods/ diff --git a/packages/engine-rn-next/.gitignore b/packages/engine-rn-next/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-rn-next/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-rn-next/.npmignore b/packages/engine-rn-next/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-rn-next/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-rn-tvos/.gitignore b/packages/engine-rn-tvos/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-rn-tvos/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-rn-tvos/.npmignore b/packages/engine-rn-tvos/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-rn-tvos/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-rn-web/.gitignore b/packages/engine-rn-web/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-rn-web/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-rn-web/.npmignore b/packages/engine-rn-web/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-rn-web/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-rn-windows/.gitignore b/packages/engine-rn-windows/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-rn-windows/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-rn-windows/.npmignore b/packages/engine-rn-windows/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-rn-windows/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-rn/.gitignore b/packages/engine-rn/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-rn/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-rn/.npmignore b/packages/engine-rn/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-rn/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/engine-roku/.gitignore b/packages/engine-roku/.gitignore deleted file mode 100644 index 4b15278a7a..0000000000 --- a/packages/engine-roku/.gitignore +++ /dev/null @@ -1,51 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -!pluginTemplates/**/dist diff --git a/packages/engine-roku/.npmignore b/packages/engine-roku/.npmignore deleted file mode 100644 index d9ddfacb67..0000000000 --- a/packages/engine-roku/.npmignore +++ /dev/null @@ -1,54 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ diff --git a/packages/rnv/.gitignore b/packages/rnv/.gitignore deleted file mode 100644 index b1df6575cc..0000000000 --- a/packages/rnv/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -package-lock.json - -dist/ -lib/ -!pluginTemplates/**/dist diff --git a/packages/rnv/.npmignore b/packages/rnv/.npmignore deleted file mode 100644 index 59f1496369..0000000000 --- a/packages/rnv/.npmignore +++ /dev/null @@ -1,58 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - -# Android Studio -# -*.iml - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -index/ - -# BUCK -buck-out/ -\.buckd/ - -# Visual Studio -# -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -platformBuilds/ -platformAssets/ - -package-lock.json - -Dockerfile -coverage/ - -**/__tests__/ - -*.map \ No newline at end of file diff --git a/packages/sdk-android/.gitignore b/packages/sdk-android/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-android/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-android/package.json b/packages/sdk-android/package.json index d1410cf629..de2ccb266e 100644 --- a/packages/sdk-android/package.json +++ b/packages/sdk-android/package.json @@ -13,7 +13,6 @@ "LICENSE", "lib", "templateFiles", - "templates", "types.d.ts" ], "main": "lib/index.js", diff --git a/packages/sdk-apple/.gitignore b/packages/sdk-apple/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-apple/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-kaios/.gitignore b/packages/sdk-kaios/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-kaios/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-react-native/.gitignore b/packages/sdk-react-native/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-react-native/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-telemetry/.gitignore b/packages/sdk-telemetry/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-telemetry/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-tizen/.gitignore b/packages/sdk-tizen/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-tizen/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-utils/.gitignore b/packages/sdk-utils/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-utils/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-webos/.gitignore b/packages/sdk-webos/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-webos/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/sdk-webpack/.gitignore b/packages/sdk-webpack/.gitignore deleted file mode 100644 index 0498e17dcb..0000000000 --- a/packages/sdk-webpack/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -dist -node_modules -coverage \ No newline at end of file diff --git a/packages/template-starter/.gitignore b/packages/template-starter/.gitignore index 86a5dca07d..e8e92c8b24 100644 --- a/packages/template-starter/.gitignore +++ b/packages/template-starter/.gitignore @@ -1,44 +1,3 @@ -# -------------------------------- -# Generated by ReNative -# -------------------------------- -.DS_Store -node_modules/ -npm-debug.log -yarn-error.log -.env -.next -.expo - -#------------------------------- -# Visual Studio -#------------------------------- -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -#------------------------------- -# RENATIVE -#------------------------------- - -platformBuilds/ -platformAssets/ -buildHooks/dist -renative.local.json -renative.private.json -renative.build.json -renative.runtime.json -rnv-config.local.json -metro.config.local.js - -vendor/ - -public/ - -reporting - -.bundle/ - -.rnv/ +# Special case for rnv template. public folder is generated we don't want to commit it +public/ \ No newline at end of file diff --git a/packages/template-starter/.npmignore b/packages/template-starter/.npmignore deleted file mode 100644 index c22cc87873..0000000000 --- a/packages/template-starter/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -buildHooks/dist -.env -.npmrc -docs/ \ No newline at end of file From 8766e3ebb40f0724a4262458df8c23d5f4531016 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 21:59:54 +0100 Subject: [PATCH 051/175] migrate config structure --- buildHooks/src/prePublish.ts | 2 +- package.json | 1 - packages/app-harness/package.json | 1 + packages/build-hooks-schema/src/schema.ts | 8 +- .../config-templates/renative.templates.json | 12 +- packages/core/jsonSchema/rnv.global.json | 83 -- packages/core/jsonSchema/rnv.plugins.json | 896 ------------------ packages/core/package.json | 4 +- packages/core/src/configs/buildConfig.ts | 11 +- packages/core/src/configs/engines.ts | 2 +- packages/core/src/configs/index.ts | 4 +- packages/core/src/configs/templates.ts | 2 +- packages/core/src/context/defaults.ts | 4 +- packages/core/src/context/index.ts | 11 +- packages/core/src/context/types.ts | 23 +- packages/core/src/engines/index.ts | 14 +- packages/core/src/plugins/index.ts | 77 +- packages/core/src/projects/bootstrap.ts | 4 +- .../src/schema/configFiles/buildConfig.ts | 3 +- .../core/src/schema/configFiles/plugins.ts | 23 - .../core/src/schema/configFiles/templates.ts | 60 +- packages/core/src/schema/configFiles/types.ts | 4 - packages/core/src/schema/index.ts | 3 +- packages/engine-core/src/plugins.ts | 5 +- .../src/tasks/global/new/projectGenerator.ts | 5 +- packages/rnv/package.json | 1 + packages/sdk-android/src/manifestParser.ts | 2 +- packages/template-starter/package.json | 1 + .../template-starter/renative.template.json | 3 +- 29 files changed, 139 insertions(+), 1130 deletions(-) delete mode 100644 packages/core/jsonSchema/rnv.global.json delete mode 100644 packages/core/jsonSchema/rnv.plugins.json delete mode 100644 packages/core/src/schema/configFiles/plugins.ts diff --git a/buildHooks/src/prePublish.ts b/buildHooks/src/prePublish.ts index fd771c93db..97d8f640e8 100644 --- a/buildHooks/src/prePublish.ts +++ b/buildHooks/src/prePublish.ts @@ -29,7 +29,7 @@ const VERSIONED_PACKAGES = [ 'sdk-webos', 'sdk-utils', 'renative', - 'plugins', + 'config-templates', 'integration-docker', 'adapter', ]; diff --git a/package.json b/package.json index 0c5c36edc4..46423e363d 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,6 @@ "webpack", "mini-css-extract-plugin", "execa", - "**/@flexn/plugins", "**/@flexn/graybox", "**/appium-*", "**/@wdio/*", diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index 013022fbf3..887e7694c8 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -67,6 +67,7 @@ "@flexn/graybox": "1.0.0-feat.12", "@rnv/core": "1.0.0-rc.12", "@rnv/cli": "1.0.0-rc.12", + "@rnv/config-templates": "1.0.0-rc.12", "@rnv/engine-lightning": "1.0.0-rc.12", "@rnv/engine-rn": "1.0.0-rc.12", "@rnv/engine-rn-electron": "1.0.0-rc.12", diff --git a/packages/build-hooks-schema/src/schema.ts b/packages/build-hooks-schema/src/schema.ts index d12d76f051..ad139ac3d0 100644 --- a/packages/build-hooks-schema/src/schema.ts +++ b/packages/build-hooks-schema/src/schema.ts @@ -1,15 +1,14 @@ import { RootAppSchema, RootEngineSchema, - RootGlobalSchema, RootIntegrationSchema, RootLocalSchema, RootPluginSchema, - RootPluginsSchema, RootPrivateSchema, RootProjectSchema, RootTemplateSchema, RootTemplatesSchema, + RootWorkspaceSchema, getContext, logSuccess, } from '@rnv/core'; @@ -23,8 +22,7 @@ export const generateSchema = async () => { _generateSchemaFile({ schema: RootAppSchema, schemaId: 'rnv.app' }); _generateSchemaFile({ schema: RootLocalSchema, schemaId: 'rnv.local' }); _generateSchemaFile({ schema: RootEngineSchema, schemaId: 'rnv.engine' }); - _generateSchemaFile({ schema: RootGlobalSchema, schemaId: 'rnv.global' }); - _generateSchemaFile({ schema: RootPluginsSchema, schemaId: 'rnv.plugins' }); + _generateSchemaFile({ schema: RootWorkspaceSchema, schemaId: 'rnv.workspace' }); _generateSchemaFile({ schema: RootTemplateSchema, schemaId: 'rnv.template' }); _generateSchemaFile({ schema: RootPrivateSchema, schemaId: 'rnv.private' }); _generateSchemaFile({ schema: RootPluginSchema, schemaId: 'rnv.plugin' }); @@ -42,7 +40,7 @@ const _generateSchemaFile = (opts: { schema: z.ZodObject; schemaId: string jsonSchema.definitions[schemaId].properties['$schema'] = { type: 'string', - description: 'schema definition', + description: 'schema definition', }; const destFolder = path.join(ctx.paths.project.dir, `packages/core/jsonSchema`); diff --git a/packages/config-templates/renative.templates.json b/packages/config-templates/renative.templates.json index da9aa96e06..e5deb155fd 100644 --- a/packages/config-templates/renative.templates.json +++ b/packages/config-templates/renative.templates.json @@ -1,5 +1,5 @@ { - "$schema": "../../.rnv/schema/rnv.plugins.json", + "$schema": "../../.rnv/schema/rnv.templates.json", "projectTemplates": { "@rnv/template-starter": { "description": "Multiplatform 'hello world' template" @@ -8,6 +8,16 @@ "description": "Advanced multiplatform template using flexn Create SDK" } }, + "engineIdMap": { + "engine-lightning": "@rnv/engine-lightning", + "engine-rn": "@rnv/engine-rn", + "engine-rn-electron": "@rnv/engine-rn-electron", + "engine-rn-macos": "@rnv/engine-rn-macos", + "engine-rn-next": "@rnv/engine-rn-next", + "engine-rn-tvos": "@rnv/engine-rn-tvos", + "engine-rn-web": "@rnv/engine-rn-web", + "engine-rn-windows": "@rnv/engine-rn-windows" + }, "engineTemplates": { "@rnv/engine-rn": { "version": "1.0.0-rc.12", diff --git a/packages/core/jsonSchema/rnv.global.json b/packages/core/jsonSchema/rnv.global.json deleted file mode 100644 index 5fc5ce4f61..0000000000 --- a/packages/core/jsonSchema/rnv.global.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "$ref": "#/definitions/rnv.global", - "definitions": { - "rnv.global": { - "type": "object", - "properties": { - "defaultTargets": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Define targets to be used when -t is not set on any project run" - }, - "sdks": { - "type": "object", - "properties": { - "ANDROID_SDK": { - "type": "string" - }, - "ANDROID_NDK": { - "type": "string" - }, - "TIZEN_SDK": { - "type": "string" - }, - "WEBOS_SDK": { - "type": "string" - }, - "KAIOS_SDK": { - "type": "string" - } - }, - "additionalProperties": false, - "description": "Define your sdk configurations" - }, - "projectTemplates": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "disableTelemetry": { - "type": "boolean", - "description": "Opt-out from renative telemetry program. More info at https://renative.org/telemetry" - }, - "appConfigsPath": { - "type": "string", - "description": "Enables you to define custom global appConfigs location that every project will automatically use" - }, - "$schema": { - "type": "string", - "description": "schema definition" - } - }, - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-04/schema#" -} \ No newline at end of file diff --git a/packages/core/jsonSchema/rnv.plugins.json b/packages/core/jsonSchema/rnv.plugins.json deleted file mode 100644 index d24805e272..0000000000 --- a/packages/core/jsonSchema/rnv.plugins.json +++ /dev/null @@ -1,896 +0,0 @@ -{ - "$ref": "#/definitions/rnv.plugins", - "definitions": { - "rnv.plugins": { - "type": "object", - "properties": { - "custom": { - "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" - }, - "pluginTemplates": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "supportedPlatforms": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Array list of all supported platforms in current project" - }, - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin disabled" - }, - "props": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Custom props passed to plugin" - }, - "version": { - "type": "string", - "description": "Version of plugin. Typically package version" - }, - "deprecated": { - "type": "string", - "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" - }, - "source": { - "type": "string", - "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" - }, - "disableNpm": { - "type": "boolean", - "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" - }, - "skipMerge": { - "type": "boolean", - "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" - }, - "npm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Object of npm dependencies of this plugin. These will be injected into package.json" - }, - "pluginDependencies": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "List of other Renative plugins this plugin depends on" - }, - "webpackConfig": { - "type": "object", - "properties": { - "modulePaths": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "moduleAliases": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "projectPath": { - "type": "string" - } - }, - "required": [ - "projectPath" - ], - "additionalProperties": false - } - ] - } - } - ] - }, - "nextTranspileModules": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "description": "Allows you to configure webpack bahaviour per each individual plugin" - }, - "disablePluginTemplateOverrides": { - "type": "boolean", - "description": "Disables plugin overrides for selected plugin" - }, - "fontSources": { - "type": "array", - "items": { - "type": "string" - } - }, - "android": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin platform disabled" - }, - "forceLinking": { - "type": "boolean", - "default": false, - "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" - }, - "path": { - "type": "string", - "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." - }, - "projectName": { - "type": "string" - }, - "skipLinking": { - "type": "boolean" - }, - "skipImplementation": { - "type": "boolean" - }, - "implementation": { - "type": "string" - }, - "package": { - "type": "string" - }, - "templateAndroid": { - "type": "object", - "properties": { - "gradle_properties": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "description": "Overrides values in `gradle.properties` file of generated android based project" - }, - "build_gradle": { - "type": "object", - "properties": { - "allprojects": { - "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - }, - "description": "Customize repositories section of build.gradle" - } - }, - "required": [ - "repositories" - ], - "additionalProperties": false - }, - "plugins": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildscript": { - "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - } - }, - "required": [ - "repositories", - "dependencies" - ], - "additionalProperties": false - }, - "dexOptions": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - }, - "injectAfterAll": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "allprojects", - "plugins", - "buildscript", - "dexOptions", - "injectAfterAll" - ], - "additionalProperties": false, - "description": "Overrides values in `build.gradle` file of generated android based project" - }, - "app_build_gradle": { - "type": "object", - "properties": { - "apply": { - "type": "array", - "items": { - "type": "string" - } - }, - "defaultConfig": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildTypes": { - "type": "object", - "properties": { - "debug": { - "type": "array", - "items": { - "type": "string" - } - }, - "release": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "afterEvaluate": { - "type": "array", - "items": { - "type": "string" - } - }, - "implementations": { - "type": "array", - "items": { - "type": "string" - } - }, - "implementation": { - "type": "string" - } - }, - "required": [ - "apply", - "defaultConfig" - ], - "additionalProperties": false, - "description": "Overrides values in `app/build.gradle` file of generated android based project" - }, - "AndroidManifest_xml": { - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "android:name": { - "type": "string" - }, - "android:required": { - "type": "boolean" - }, - "package": { - "type": "string" - }, - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/tag" - }, - "android:name": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:name" - }, - "android:required": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:required" - }, - "children": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/children/items" - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false, - "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " - }, - "strings_xml": { - "type": "object", - "properties": { - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "name": { - "type": "string" - }, - "child_value": { - "type": "string" - } - }, - "required": [ - "tag", - "name", - "child_value" - ], - "additionalProperties": false - } - } - }, - "additionalProperties": false - }, - "MainActivity_kt": { - "type": "object", - "properties": { - "onCreate": { - "type": "string", - "default": "super.onCreate(savedInstanceState)", - "description": "Overrides super.onCreate method handler of MainActivity.java" - }, - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { - "type": "string" - } - }, - "resultMethods": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "MainApplication_kt": { - "type": "object", - "properties": { - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { - "type": "string" - } - }, - "packages": { - "type": "array", - "items": { - "type": "string" - } - }, - "packageParams": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "description": "Allows you to configure behaviour of MainActivity" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "androidtv": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android" - }, - "androidwear": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android" - }, - "firetv": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android" - }, - "ios": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/path" - }, - "git": { - "type": "string", - "description": "Alternative git url for pod instead of version" - }, - "commit": { - "type": "string", - "description": "Alternative git commit reference string" - }, - "version": { - "type": "string", - "description": "Version of pod" - }, - "podNames": { - "type": "array", - "items": { - "type": "string" - } - }, - "podName": { - "type": "string" - }, - "staticFrameworks": { - "type": "array", - "items": { - "type": "string" - } - }, - "templateXcode": { - "type": "object", - "properties": { - "Podfile": { - "type": "object", - "properties": { - "injectLines": { - "type": "array", - "items": { - "type": "string" - } - }, - "post_install": { - "type": "array", - "items": { - "type": "string" - } - }, - "sources": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of URLs that will be injected on top of the Podfile as sources" - }, - "podDependencies": { - "type": "array", - "items": { - "type": "string" - } - }, - "staticPods": { - "type": "array", - "items": { - "type": "string" - } - }, - "header": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of strings that will be injected on top of the Podfile" - } - }, - "additionalProperties": false, - "description": "Allows to manipulate Podfile" - }, - "project_pbxproj": { - "type": "object", - "properties": { - "sourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "resourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "headerFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildPhases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "shellPath": { - "type": "string" - }, - "shellScript": { - "type": "string" - }, - "inputPaths": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "shellPath", - "shellScript", - "inputPaths" - ], - "additionalProperties": false - } - }, - "frameworks": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildSettings": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "AppDelegate_mm": { - "type": "object", - "properties": { - "appDelegateMethods": { - "type": "object", - "properties": { - "application": { - "type": "object", - "properties": { - "didFinishLaunchingWithOptions": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "order": { - "type": "number" - }, - "value": { - "type": "string" - }, - "weight": { - "type": "number" - } - }, - "required": [ - "order", - "value", - "weight" - ], - "additionalProperties": false - } - ] - } - }, - "applicationDidBecomeActive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "open": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "supportedInterfaceOrientationsFor": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveRemoteNotification": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didFailToRegisterForRemoteNotificationsWithError": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegister": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegisterForRemoteNotificationsWithDeviceToken": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "continue": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didConnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didDisconnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false - }, - "userNotificationCenter": { - "type": "object", - "properties": { - "willPresent": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveNotificationResponse": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "AppDelegate_h": { - "type": "object", - "properties": { - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" - } - }, - "appDelegateExtensions": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "Info_plist": { - "type": "object", - "properties": {}, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "isStatic": { - "type": "boolean" - }, - "buildType": { - "type": "string", - "enum": [ - "dynamic", - "static" - ], - "description": "Build type of the pod" - } - }, - "additionalProperties": false - }, - "tvos": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/ios" - }, - "tizen": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/android/properties/path" - } - }, - "additionalProperties": false - }, - "tizenmobile": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "tizenwatch": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "webos": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "web": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "webtv": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "chromecast": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "kaios": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "macos": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "linux": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "windows": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "xbox": { - "$ref": "#/definitions/rnv.plugins/properties/pluginTemplates/additionalProperties/properties/tizen" - } - }, - "additionalProperties": false - }, - "description": "Define all plugins available to be merged with project plugins" - }, - "disableRnvDefaultOverrides": { - "type": "boolean", - "description": "Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list" - }, - "$schema": { - "type": "string", - "description": "schema definition" - } - }, - "required": [ - "pluginTemplates" - ], - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-04/schema#" -} \ No newline at end of file diff --git a/packages/core/package.json b/packages/core/package.json index a9a308306d..92351f2136 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -30,7 +30,6 @@ "watch": "tsc --watch --preserveWatchOutput" }, "dependencies": { - "@flexn/plugins": "1.0.9", "ajv": "7.0.0-beta.0", "deepmerge": "3.2.0", "esbuild": "^0.12.1", @@ -47,6 +46,9 @@ "tslib": "2.5.2", "zod": "3.22.4" }, + "peerDependencies": { + "@rnv/config-templates": "^1.0.0-rc.12" + }, "private": false, "publishConfig": { "access": "public" diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 3d068b0449..25b346c8ad 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -53,8 +53,7 @@ export const generateBuildConfig = () => { const mergeOrder = [ // TODO: do we need to merge .rnv/renative.json with .customWorkspace/reantive.json ? // c.paths.dotRnv.config, - c.paths.rnvPlugins.configProjectTemplates, - c.paths.rnvPlugins.configPluginTemplates, + c.paths.rnvConfigTemplates.config, c.paths.workspace.config, c.paths.workspace.configPrivate, c.paths.workspace.configLocal, @@ -83,9 +82,9 @@ export const generateBuildConfig = () => { }); const pluginTemplates: Record = {}; - if (c.files.scopedPluginTemplates.configs) { - Object.keys(c.files.scopedPluginTemplates.configs).forEach((v) => { - const plgs = c.files.scopedPluginTemplates.configs[v]; + if (c.files.scopedPluginTemplates) { + Object.keys(c.files.scopedPluginTemplates).forEach((v) => { + const plgs = c.files.scopedPluginTemplates[v]; pluginTemplates[v] = plgs; }); } @@ -95,7 +94,7 @@ export const generateBuildConfig = () => { const mergeFiles = [ // TODO: do we need to merge .rnv/renative.json with .customWorkspace/reantive.json ? // c.files.dotRnv.config, - c.files.rnvPlugins.configProjectTemplates, + c.files.rnvConfigTemplates.config, { plugins: extraPlugins }, // { pluginTemplates }, c.files.workspace.config, diff --git a/packages/core/src/configs/engines.ts b/packages/core/src/configs/engines.ts index 2656446f41..469e2d9272 100644 --- a/packages/core/src/configs/engines.ts +++ b/packages/core/src/configs/engines.ts @@ -42,7 +42,7 @@ export const getEngineTemplateByPlatform = (platform: RnvPlatform): RnvEngineTem c.program.engine || getConfigProp('engine') || //Adding this as default engines moved from platforms into platformTemplates - c.files.rnvPlugins.configProjectTemplates?.platformTemplates?.[platform]?.engine; + c.files.rnvConfigTemplates.configProjectTemplates?.platformTemplates?.[platform]?.engine; let selectedEngineConfig: RnvEngineTemplate | null = null; Object.values(mergedEngineConfigs).forEach((engineConfig) => { diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 27b43998b2..28b3e2ac5f 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -214,8 +214,8 @@ export const parseRenativeConfigs = async () => { // _loadConfigFiles(c, c.files.defaultWorkspace, c.paths.defaultWorkspace); // LOAD PROJECT TEMPLATES - c.files.rnvPlugins.configProjectTemplates = - readObjectSync(c.paths.rnvPlugins.configProjectTemplates) || undefined; + c.files.rnvConfigTemplates.configProjectTemplates = + readObjectSync(c.paths.rnvConfigTemplates.configProjectTemplates) || undefined; // // LOAD PLUGIN TEMPLATES // await loadPluginTemplates(c); diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts index 9c8e02ace8..1691c74377 100644 --- a/packages/core/src/configs/templates.ts +++ b/packages/core/src/configs/templates.ts @@ -43,7 +43,7 @@ export const getTemplateOptions = (isGlobalScope?: boolean) => { const c = getContext(); let defaultProjectTemplates; if (isGlobalScope) { - defaultProjectTemplates = c.files.rnvPlugins.configProjectTemplates?.projectTemplates; + defaultProjectTemplates = c.files.rnvConfigTemplates.configProjectTemplates?.projectTemplates; } else { defaultProjectTemplates = c.buildConfig.projectTemplates || {}; } diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 09c44d1ab0..6a01a9b021 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -120,7 +120,7 @@ export const generateContextDefaults = (): RnvContext => ({ templateFilesDir: '', package: '', }, - rnvPlugins: { + rnvConfigTemplates: { configPluginTemplates: '', dir: '', package: '', @@ -217,7 +217,7 @@ export const generateContextDefaults = (): RnvContext => ({ rnvCore: { package: {}, }, - rnvPlugins: { + rnvConfigTemplates: { configPluginTemplates: { pluginTemplates: {}, }, diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 62bb3f7013..6fc739bb42 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -144,12 +144,15 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef // @rnv/plugins ------------------ // TODO: not populated - c.paths.rnvPlugins.pluginTemplatesDir = '????'; - c.paths.rnvPlugins.configPluginTemplates = path.join( - c.paths.rnvPlugins.pluginTemplatesDir, + c.paths.rnvConfigTemplates.pluginTemplatesDir = '????'; + c.paths.rnvConfigTemplates.configPluginTemplates = path.join( + c.paths.rnvConfigTemplates.pluginTemplatesDir, ConfigName.renativePlugins ); - c.paths.rnvPlugins.configProjectTemplates = path.join(c.paths.rnvPlugins.dir, ConfigName.renativeTemplates); + c.paths.rnvConfigTemplates.configProjectTemplates = path.join( + c.paths.rnvConfigTemplates.dir, + ConfigName.renativeTemplates + ); // runtime c.platform = c.program.platform; diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index e3ff9502d9..1ffd1e0424 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -6,7 +6,6 @@ import { ConfigFileApp, ConfigFileLocal, ConfigFilePlugin, - ConfigFilePlugins, ConfigFilePrivate, ConfigFileProject, ConfigFileRuntime, @@ -155,14 +154,11 @@ export type RnvContextFiles = { rnvCore: { package: NpmPackageFile; }; - rnvPlugins: { + rnvConfigTemplates: { package?: NpmPackageFile; - configProjectTemplates?: ConfigFileTemplates; - configPluginTemplates?: ConfigFilePlugins; - }; - scopedPluginTemplates: { - configs: Record; + config?: ConfigFileTemplates; }; + scopedPluginTemplates: Record; workspace: RnvContextFileObj & { project: RnvContextFileObj; appConfig: RnvContextFileObj; @@ -210,19 +206,14 @@ export type RnvContextPaths = { config: string; configWorkspaces: string; }; - rnvPlugins: { + rnvConfigTemplates: { dir: string; package: string; - configProjectTemplates: string; - configPluginTemplates: string; + config: string; pluginTemplatesDir: string; - // pluginTemplatesDir: { - // config?: string; - // dirs: Record; - // }; }; - scopedPluginTemplates: { - dirs: Record; + scopedConfigTemplates: { + pluginTemplatesDirs: Record; configs: Record; }; rnvCore: { diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 8c8650c8f1..be3c5728b5 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -301,27 +301,17 @@ export const loadEnginePackageDeps = async (engineConfigs: Array = { - 'engine-lightning': '@rnv/engine-lightning', - 'engine-rn': '@rnv/engine-rn', - 'engine-rn-electron': '@rnv/engine-rn-electron', - 'engine-rn-macos': '@rnv/engine-rn-macos', - 'engine-rn-next': '@rnv/engine-rn-next', - 'engine-rn-tvos': '@rnv/engine-rn-tvos', - 'engine-rn-web': '@rnv/engine-rn-web', - 'engine-rn-windows': '@rnv/engine-rn-windows', -}; - const _getFilteredEngines = (c: RnvContext) => { const engines = c.buildConfig?.engines; if (!engines) { logError('Engine configs missing in your renative.json. FIXING...DONE'); return {}; } - const rnvPlatforms = c.files.rnvPlugins.configProjectTemplates?.platformTemplates; + const rnvPlatforms = c.files.rnvConfigTemplates.config?.platformTemplates; const supportedPlatforms = c.files.project.config?.defaults?.supportedPlatforms || []; const filteredEngines: Record = {}; + const ENGINE_ID_MAP = c.files.rnvConfigTemplates.config?.engineIdMap || {}; supportedPlatforms.forEach((v) => { const platforms = c.files.project.config?.platforms || {}; const engineKey = platforms[v]?.engine || rnvPlatforms?.[v]?.engine; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 5f3f81cd9e..03dab904f3 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -21,7 +21,7 @@ import { inquirerPrompt } from '../api'; import { writeRenativeConfigFile } from '../configs/utils'; import { installPackageDependencies } from '../projects/npm'; import { OverridesOptions, ResolveOptions } from '../system/types'; -import { ConfigFileOverrides, ConfigFilePlugin, ConfigFilePlugins } from '../schema/configFiles/types'; +import { ConfigFileOverrides, ConfigFilePlugin, ConfigFileTemplates } from '../schema/configFiles/types'; import { NpmPackageFile } from '../configs/types'; import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; @@ -84,14 +84,14 @@ const _getMergedPlugin = ( if ( scope !== '' && !!scope && - !c.buildConfig.pluginTemplates?.[scope]?.pluginTemplates && + !c.buildConfig.scopedPluginTemplates?.[scope] && !c.runtime._skipPluginScopeWarnings ) { logWarning(`Plugin ${pluginKey} is not recognized plugin in ${scope} scope`); } else if (scope && scopes) { let skipScope = false; if (parentScope) { - const skipRnvOverrides = c.buildConfig.pluginTemplates?.[parentScope]?.disableRnvDefaultOverrides; + const skipRnvOverrides = c.buildConfig.disableRnvDefaultOverrides; if (skipRnvOverrides && scope === 'rnv') { // Merges down to RNV defaults will be skipped @@ -104,7 +104,7 @@ const _getMergedPlugin = ( const parentPlugin = _getMergedPlugin( c, - c.buildConfig.pluginTemplates?.[scope]?.pluginTemplates?.[pluginKey], + c.buildConfig.scopedPluginTemplates?.[scope]?.[pluginKey], pluginKey, scope, scopes, @@ -333,13 +333,13 @@ const _resolvePluginDependencies = async ( return true; } - const { pluginTemplates } = c.buildConfig; + const { scopedPluginTemplates } = c.buildConfig; const plugin = getMergedPlugin(c, key); const { scope } = _getPluginScope(keyScope); if (!plugin) { - const depPlugin = pluginTemplates?.[scope]?.pluginTemplates?.[key]; + const depPlugin = scopedPluginTemplates?.[scope]?.[key]; if (depPlugin) { // console.log('INSTALL PLUGIN???', key, depPlugin.source); const { confirm } = await inquirerPrompt({ @@ -479,45 +479,46 @@ export const loadPluginTemplates = async () => { const c = getContext(); //This comes from project dependency - let flexnPluginsPath = doResolve('@flexn/plugins'); + let configTemplatesPath = doResolve('@rnv/config-templates'); - if (!fsExistsSync(flexnPluginsPath)) { + if (!fsExistsSync(configTemplatesPath)) { //This comes from rnv built-in dependency (installed via npm) - flexnPluginsPath = path.resolve(__dirname, '../../node_modules/@flexn/plugins'); - if (!fsExistsSync(flexnPluginsPath)) { + configTemplatesPath = path.resolve(__dirname, '../../node_modules/@flexn/plugins'); + if (!fsExistsSync(configTemplatesPath)) { //This comes from rnv built-in dependency (installed via yarn might install it one level up) - flexnPluginsPath = path.resolve(__dirname, '../../../@flexn/plugins'); - if (!fsExistsSync(flexnPluginsPath)) { + configTemplatesPath = path.resolve(__dirname, '../../../@flexn/plugins'); + if (!fsExistsSync(configTemplatesPath)) { // This comes from rnv built-in dependency (installed via yarn might install it 2 level up but scoped to @rnv) - flexnPluginsPath = path.resolve(__dirname, '../../../../@flexn/plugins'); - if (!fsExistsSync(flexnPluginsPath)) { - return Promise.reject(`RNV Cannot find package: ${chalk().bold(flexnPluginsPath)}`); + configTemplatesPath = path.resolve(__dirname, '../../../../@flexn/plugins'); + if (!fsExistsSync(configTemplatesPath)) { + return Promise.reject(`RNV Cannot find package: ${chalk().bold(configTemplatesPath)}`); } } } } - if (!flexnPluginsPath) return Promise.reject(`flexnPluginsPath missing`); + if (!configTemplatesPath) return Promise.reject(`@rnv/config-templates missing`); - const flexnPluginTemplatesPath = path.join(flexnPluginsPath, 'pluginTemplates'); - - const flexnPluginTemplates = readObjectSync( - path.join(flexnPluginTemplatesPath, 'renative.plugins.json') + const rnvConfigTemplates = readObjectSync( + path.join(configTemplatesPath, 'renative.templates.json') ); - const rnvPluginTemplates = readObjectSync(c.paths.rnvPlugins.configPluginTemplates); - - const cnf = merge(flexnPluginTemplates || {}, rnvPluginTemplates || {}); - if (cnf) { - c.files.rnvPlugins.configPluginTemplates = cnf; - c.files.scopedPluginTemplates.configs = { - rnv: cnf, + if (rnvConfigTemplates) { + c.files.rnvConfigTemplates.config = rnvConfigTemplates; + c.files.scopedPluginTemplates = { + rnv: rnvConfigTemplates.pluginTemplates, }; } //Override default rnv path with flexn one and add it rnv as overrider - c.paths.scopedPluginTemplates.dirs = { - rnv: flexnPluginTemplatesPath, + + c.paths.scopedConfigTemplates = { + configs: { + rnv: c.paths.rnvConfigTemplates.config, + }, + pluginTemplatesDirs: { + rnv: c.paths.rnvConfigTemplates.pluginTemplatesDir, + }, }; const customPluginTemplates = c.files.project.config?.paths?.pluginTemplates; @@ -579,17 +580,17 @@ const _parsePluginTemplateDependencies = ( } const ptConfig = path.join(ptPath, ConfigName.renativePlugins); - c.paths.scopedPluginTemplates.dirs[k] = ptPath; + c.paths.scopedConfigTemplates.pluginTemplatesDirs[k] = ptPath; if (fsExistsSync(ptConfig)) { - const ptConfigs = c.files.scopedPluginTemplates.configs; - const ptConfigFile = readObjectSync(ptConfig); - if (ptConfigFile) { - ptConfigs[k] = ptConfigFile; + const ptConfigs = c.files.scopedPluginTemplates; + const ptConfigFile = readObjectSync(ptConfig); + if (ptConfigFile?.pluginTemplates) { + ptConfigs[k] = ptConfigFile?.pluginTemplates; } // _parsePluginTemplateDependencies( // c, - // c.files.scopedPluginTemplates.configs[k].pluginTemplateDependencies, + // c.files.scopedPluginTemplates[k].pluginTemplateDependencies, // k // ); } else { @@ -836,7 +837,7 @@ export const overrideTemplatePlugins = async () => { const c = getContext(); - const rnvPluginsDirs = c.paths.scopedPluginTemplates.dirs; + const rnvPluginsDirs = c.paths.scopedConfigTemplates.pluginTemplatesDirs; const appPluginDirs = c.paths.appConfig.pluginDirs; parsePlugins((plugin, pluginPlat, key) => { @@ -908,10 +909,10 @@ export const copyTemplatePluginsSync = (c: RnvContext) => { copyFolderContentsRecursiveSync(sourcePath2sec, destPath, true, undefined, false, objectInject); // FOLDER MERGES FROM SCOPED PLUGIN TEMPLATES - Object.keys(c.paths.scopedPluginTemplates.dirs).forEach((pathKey) => { + Object.keys(c.paths.scopedConfigTemplates.pluginTemplatesDirs).forEach((pathKey) => { // TODO: required for external rnv scoped templates to take effect. need to test full implications // if (pathKey !== 'rnv') { - const pluginTemplatePath = c.paths.scopedPluginTemplates.dirs[pathKey]; + const pluginTemplatePath = c.paths.scopedConfigTemplates.pluginTemplatesDirs[pathKey]; const sourcePath4sec = getAppConfigBuildsFolder(path.join(pluginTemplatePath, key)); copyFolderContentsRecursiveSync(sourcePath4sec, destPath, true, undefined, false, objectInject); diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts index e1c7ed6cf0..82d3230024 100644 --- a/packages/core/src/projects/bootstrap.ts +++ b/packages/core/src/projects/bootstrap.ts @@ -32,8 +32,8 @@ export const checkAndBootstrapIfRequired = async () => { const appConfigObj = readObjectSync(appConfigPath); const supportedPlatforms = appConfigObj?.defaults?.supportedPlatforms || []; //========= - const engineTemplates = c.files.rnvPlugins.configProjectTemplates?.engineTemplates; - const rnvPlatforms = c.files.rnvPlugins.configProjectTemplates?.platformTemplates || {}; + const engineTemplates = c.files.rnvConfigTemplates.config?.engineTemplates; + const rnvPlatforms = c.files.rnvConfigTemplates.config?.platformTemplates || {}; const activeEngineKeys: Array = []; if (engineTemplates) { diff --git a/packages/core/src/schema/configFiles/buildConfig.ts b/packages/core/src/schema/configFiles/buildConfig.ts index e0e529c1b1..f6311fa5fc 100644 --- a/packages/core/src/schema/configFiles/buildConfig.ts +++ b/packages/core/src/schema/configFiles/buildConfig.ts @@ -3,7 +3,6 @@ import { _PlatformsSchemaType } from '../platforms'; import { _PluginType } from '../plugins'; import { _RootAppBaseSchemalType } from './app'; import { _RootLocalSchemaType } from './local'; -import { _RootPluginsSchemaType } from './plugins'; import { _RootProjectBaseSchemaType } from './project'; import { _RootTemplatesSchemaType } from './templates'; import { _RootWorkspaceSchemaType } from './workspace'; @@ -14,7 +13,7 @@ import { _RootWorkspaceSchemaType } from './workspace'; // When all reantive json get merged into one file this happens conceptually anyway type RootPluginsMerged = { - pluginTemplates: Record; + scopedPluginTemplates: Record; }; type Common = { diff --git a/packages/core/src/schema/configFiles/plugins.ts b/packages/core/src/schema/configFiles/plugins.ts deleted file mode 100644 index feb7710961..0000000000 --- a/packages/core/src/schema/configFiles/plugins.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { z } from 'zod'; -import { Ext } from '../shared'; -import { PluginSchema } from '../plugins'; - -export const PluginTemplates = z - .record(z.string(), PluginSchema) - .describe('Define all plugins available to be merged with project plugins'); - -export const DisableRnvDefaultOverrides = z - .boolean() - .describe( - 'Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list' - ); - -//LEVEl 0 (ROOT) - -export const RootPluginsSchema = z.object({ - custom: z.optional(Ext), - pluginTemplates: PluginTemplates, - disableRnvDefaultOverrides: z.optional(DisableRnvDefaultOverrides), -}); - -export type _RootPluginsSchemaType = z.infer; diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index 9c72025df0..1821448437 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -1,5 +1,16 @@ import { z } from 'zod'; import { PlatformsKeys } from '../shared'; +import { PluginSchema } from '../plugins'; + +export const PluginTemplates = z + .record(z.string(), PluginSchema) + .describe('Define all plugins available to be merged with project plugins'); + +export const DisableRnvDefaultOverrides = z + .boolean() + .describe( + 'Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list' + ); export const RootTemplatesSchema = z.object({ projectTemplates: z.record( @@ -8,26 +19,35 @@ export const RootTemplatesSchema = z.object({ description: z.string(), }) ), - engineTemplates: z.record( - z.string(), - z.object({ - version: z.string(), - id: z.string(), - key: z.string().optional(), - }) - ), - integrationTemplates: z.record( - z.string(), - z.object({ - version: z.string(), - }) - ), - platformTemplates: z.record( - PlatformsKeys, - z.object({ - engine: z.string(), - }) - ), + engineIdMap: z.record(z.string(), z.string()).optional(), + engineTemplates: z + .record( + z.string(), + z.object({ + version: z.string(), + id: z.string(), + key: z.string().optional(), + }) + ) + .optional(), + integrationTemplates: z + .record( + z.string(), + z.object({ + version: z.string(), + }) + ) + .optional(), + platformTemplates: z + .record( + PlatformsKeys, + z.object({ + engine: z.string(), + }) + ) + .optional(), + pluginTemplates: PluginTemplates.optional(), + disableRnvDefaultOverrides: z.optional(DisableRnvDefaultOverrides), }); export type _RootTemplatesSchemaType = z.infer; diff --git a/packages/core/src/schema/configFiles/types.ts b/packages/core/src/schema/configFiles/types.ts index 480869c4c2..ceb0373a9f 100644 --- a/packages/core/src/schema/configFiles/types.ts +++ b/packages/core/src/schema/configFiles/types.ts @@ -4,7 +4,6 @@ import { _RootWorkspaceSchemaType } from './workspace'; import { _RootIntegrationSchemaType } from './integration'; import { _RootLocalSchemaType } from './local'; import { _RootPluginSchemaType } from './plugin'; -import { _RootPluginsSchemaType } from './plugins'; import { _RootPrivateSchemaType } from './private'; import { _RootProjectSchemaType } from './project'; import { _RootTemplateSchemaType } from './template'; @@ -25,9 +24,6 @@ export type ConfigFileEngine = _ConfigRootEngineType; // renative.plugin.json export type ConfigFilePlugin = _RootPluginSchemaType; -// renative.plugins.json -export type ConfigFilePlugins = _RootPluginsSchemaType; - // renative.local.json export type ConfigFileLocal = _RootLocalSchemaType; diff --git a/packages/core/src/schema/index.ts b/packages/core/src/schema/index.ts index dbba19390d..8e9cd40947 100644 --- a/packages/core/src/schema/index.ts +++ b/packages/core/src/schema/index.ts @@ -1,10 +1,9 @@ export { RootAppSchema } from './configFiles/app'; export { RootProjectSchema } from './configFiles/project'; export { RootEngineSchema } from './configFiles/engine'; -export { RootWorkspaceSchema as RootGlobalSchema } from './configFiles/workspace'; +export { RootWorkspaceSchema } from './configFiles/workspace'; export { RootLocalSchema } from './configFiles/local'; export { RootPluginSchema } from './configFiles/plugin'; -export { RootPluginsSchema } from './configFiles/plugins'; export { RootPrivateSchema } from './configFiles/private'; export { RootTemplateSchema } from './configFiles/template'; export { RootTemplatesSchema } from './configFiles/templates'; diff --git a/packages/engine-core/src/plugins.ts b/packages/engine-core/src/plugins.ts index bf6eb11644..a6a4ad285e 100644 --- a/packages/engine-core/src/plugins.ts +++ b/packages/engine-core/src/plugins.ts @@ -37,8 +37,9 @@ export const getPluginList = (isUpdate = false) => { let i = 1; - Object.keys(c.files.scopedPluginTemplates.configs).forEach((pk) => { - const plugins = c.files.scopedPluginTemplates.configs[pk].pluginTemplates; + Object.keys(c.files.scopedPluginTemplates).forEach((pk) => { + const plugins = c.files.scopedPluginTemplates[pk]; + if (!plugins) return; Object.keys(plugins).forEach((k) => { const plugin = plugins[k]; diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index 88ba8adb02..311b1efa88 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -99,8 +99,7 @@ export const generateNewProject = async (data: NewProjectData) => { // Remove unused engines based on selected platforms supPlats.forEach((k) => { const selectedEngineId = - loadedConf?.platforms?.[k]?.engine || - c.files.rnvPlugins.configProjectTemplates?.platformTemplates?.[k]?.engine; + loadedConf?.platforms?.[k]?.engine || c.files.rnvConfigTemplates.config?.platformTemplates?.[k]?.engine; if (selectedEngineId) { const selectedEngine = findEngineKeyById(selectedEngineId); @@ -148,7 +147,7 @@ export const telemetryNewProject = async (data: NewProjectData) => { const findEngineKeyById = (id: string) => { const c = getContext(); - const engineTemplates = c.files.rnvPlugins.configProjectTemplates?.engineTemplates; + const engineTemplates = c.files.rnvConfigTemplates.config?.engineTemplates; if (engineTemplates) { const etk = Object.keys(engineTemplates); for (let i = 0; i < etk.length; i++) { diff --git a/packages/rnv/package.json b/packages/rnv/package.json index 6f5640e636..6deb4db5de 100644 --- a/packages/rnv/package.json +++ b/packages/rnv/package.json @@ -70,6 +70,7 @@ }, "dependencies": { "@rnv/cli": "1.0.0-rc.12", + "@rnv/config-templates": "1.0.0-rc.12", "tslib": "2.5.2" }, "private": false, diff --git a/packages/sdk-android/src/manifestParser.ts b/packages/sdk-android/src/manifestParser.ts index 2fe4d1af84..a7b6c716f7 100644 --- a/packages/sdk-android/src/manifestParser.ts +++ b/packages/sdk-android/src/manifestParser.ts @@ -181,7 +181,7 @@ const getConfigPropArray = (c: RnvContext, platform: Rn const result: Array = []; const configArr = [ c.files.dotRnv.config, - c.files.rnvPlugins.configProjectTemplates, + c.files.rnvConfigTemplates.config, // { plugins: extraPlugins }, // { pluginTemplates }, c.files.workspace.config, diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index 467713531d..9d15332b74 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -99,6 +99,7 @@ "@lightningjs/sdk": "^5.4.1", "@rnv/core": "1.0.0-rc.12", "@rnv/cli": "1.0.0-rc.12", + "@rnv/config-templates": "1.0.0-rc.12", "@rnv/adapter": "1.0.0-rc.12", "@rnv/engine-lightning": "1.0.0-rc.12", "@rnv/engine-rn": "1.0.0-rc.12", diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index ecc7c2e459..6d32550e11 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -33,7 +33,8 @@ "@flexn/assets-renative-outline": "0.3.3", "@rnv/core": "1.0.0-rc.12", "@rnv/cli": "1.0.0-rc.12", - "@rnv/adapter": "1.0.0-rc.12" + "@rnv/adapter": "1.0.0-rc.12", + "@rnv/config-templates": "1.0.0-rc.12" }, "browserslist": { "production": [">0.2%", "not dead", "not op_mini all"], From 77939a11a5d383d13bd2b8407cc0de5bd8dbe3ae Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 22:36:12 +0100 Subject: [PATCH 052/175] update config structures --- packages/core/src/configs/engines.ts | 2 +- packages/core/src/configs/index.ts | 6 +++--- packages/core/src/configs/templates.ts | 2 +- packages/core/src/context/defaults.ts | 12 +++++------- packages/core/src/context/index.ts | 18 +++++++----------- packages/core/src/enums/configName.ts | 1 - packages/core/src/plugins/index.ts | 2 +- .../core/src/schema/configFiles/templates.ts | 9 ++------- .../core/src/schema/configFiles/workspace.ts | 4 ++-- packages/core/src/schema/shared/index.ts | 7 +++++++ .../global/new/questions/bookmarkTemplate.ts | 11 ++++++++++- yarn.lock | 5 ----- 12 files changed, 39 insertions(+), 40 deletions(-) diff --git a/packages/core/src/configs/engines.ts b/packages/core/src/configs/engines.ts index 469e2d9272..bab69f6ae9 100644 --- a/packages/core/src/configs/engines.ts +++ b/packages/core/src/configs/engines.ts @@ -42,7 +42,7 @@ export const getEngineTemplateByPlatform = (platform: RnvPlatform): RnvEngineTem c.program.engine || getConfigProp('engine') || //Adding this as default engines moved from platforms into platformTemplates - c.files.rnvConfigTemplates.configProjectTemplates?.platformTemplates?.[platform]?.engine; + c.files.rnvConfigTemplates.config?.platformTemplates?.[platform]?.engine; let selectedEngineConfig: RnvEngineTemplate | null = null; Object.values(mergedEngineConfigs).forEach((engineConfig) => { diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 28b3e2ac5f..12cff2c129 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -213,9 +213,9 @@ export const parseRenativeConfigs = async () => { // generateContextPaths(c.paths.defaultWorkspace, c.paths.GLOBAL_RNV_DIR); // _loadConfigFiles(c, c.files.defaultWorkspace, c.paths.defaultWorkspace); - // LOAD PROJECT TEMPLATES - c.files.rnvConfigTemplates.configProjectTemplates = - readObjectSync(c.paths.rnvConfigTemplates.configProjectTemplates) || undefined; + // LOAD CONFIG TEMPLATES + c.files.rnvConfigTemplates.config = + readObjectSync(c.paths.rnvConfigTemplates.config) || undefined; // // LOAD PLUGIN TEMPLATES // await loadPluginTemplates(c); diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts index 1691c74377..b9c5de3c6d 100644 --- a/packages/core/src/configs/templates.ts +++ b/packages/core/src/configs/templates.ts @@ -43,7 +43,7 @@ export const getTemplateOptions = (isGlobalScope?: boolean) => { const c = getContext(); let defaultProjectTemplates; if (isGlobalScope) { - defaultProjectTemplates = c.files.rnvConfigTemplates.configProjectTemplates?.projectTemplates; + defaultProjectTemplates = c.files.rnvConfigTemplates.config?.projectTemplates; } else { defaultProjectTemplates = c.buildConfig.projectTemplates || {}; } diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 6a01a9b021..b63192fd84 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -111,9 +111,9 @@ export const generateContextDefaults = (): RnvContext => ({ dir: '', package: '', }, - scopedPluginTemplates: { + scopedConfigTemplates: { configs: {}, - dirs: {}, + pluginTemplatesDirs: {}, }, rnvCore: { dir: '', @@ -121,11 +121,10 @@ export const generateContextDefaults = (): RnvContext => ({ package: '', }, rnvConfigTemplates: { - configPluginTemplates: '', + config: '', dir: '', package: '', pluginTemplatesDir: '', - configProjectTemplates: '', }, workspace: { ...generateRnvConfigPathObj(), @@ -218,9 +217,8 @@ export const generateContextDefaults = (): RnvContext => ({ package: {}, }, rnvConfigTemplates: { - configPluginTemplates: { - pluginTemplates: {}, - }, + config: {}, + package: {}, }, scopedPluginTemplates: { configs: {}, diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 6fc739bb42..328018829d 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -142,17 +142,13 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef c.paths.project.assets.config = path.join(c.paths.project.assets.dir, ConfigName.renativeRuntime); c.paths.project.builds.dir = path.join(c.paths.project.dir, 'platformBuilds'); - // @rnv/plugins ------------------ - // TODO: not populated - c.paths.rnvConfigTemplates.pluginTemplatesDir = '????'; - c.paths.rnvConfigTemplates.configPluginTemplates = path.join( - c.paths.rnvConfigTemplates.pluginTemplatesDir, - ConfigName.renativePlugins - ); - c.paths.rnvConfigTemplates.configProjectTemplates = path.join( - c.paths.rnvConfigTemplates.dir, - ConfigName.renativeTemplates - ); + // @rnv/config-templates ------------------ + // NOTE: this is generated after @rnv/config-templates is loaded dynamically + // c.paths.rnvConfigTemplates.pluginTemplatesDir = '????'; + // c.paths.rnvConfigTemplates.config = path.join( + // c.paths.rnvConfigTemplates.pluginTemplatesDir, + // ConfigName.renativeTemplates + // ); // runtime c.platform = c.program.platform; diff --git a/packages/core/src/enums/configName.ts b/packages/core/src/enums/configName.ts index fb6394c3b0..f4729f3a67 100644 --- a/packages/core/src/enums/configName.ts +++ b/packages/core/src/enums/configName.ts @@ -6,7 +6,6 @@ export const ConfigName = { renativeBuild: 'renative.build.json', renativeRuntime: 'renative.runtime.json', renativeWorkspaces: 'renative.workspaces.json', - renativePlugins: 'renative.plugins.json', renativeTemplates: 'renative.templates.json', renativePlatforms: 'renative.platforms.json', renativeEngine: 'renative.engine.json', diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 03dab904f3..5f4f1d61fb 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -579,7 +579,7 @@ const _parsePluginTemplateDependencies = ( ptPath = `${doResolve(val.npm)}/${val.path}`; } - const ptConfig = path.join(ptPath, ConfigName.renativePlugins); + const ptConfig = path.join(ptPath, ConfigName.renativeTemplates); c.paths.scopedConfigTemplates.pluginTemplatesDirs[k] = ptPath; if (fsExistsSync(ptConfig)) { const ptConfigs = c.files.scopedPluginTemplates; diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index 1821448437..d1ba5d99c5 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { PlatformsKeys } from '../shared'; +import { PlatformsKeys, ProjectTemplates } from '../shared'; import { PluginSchema } from '../plugins'; export const PluginTemplates = z @@ -13,12 +13,7 @@ export const DisableRnvDefaultOverrides = z ); export const RootTemplatesSchema = z.object({ - projectTemplates: z.record( - z.string(), - z.object({ - description: z.string(), - }) - ), + projectTemplates: ProjectTemplates.optional(), engineIdMap: z.record(z.string(), z.string()).optional(), engineTemplates: z .record( diff --git a/packages/core/src/schema/configFiles/workspace.ts b/packages/core/src/schema/configFiles/workspace.ts index ee2aceb350..ab42b56d1b 100644 --- a/packages/core/src/schema/configFiles/workspace.ts +++ b/packages/core/src/schema/configFiles/workspace.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { DefaultTargets } from '../shared'; +import { DefaultTargets, ProjectTemplates } from '../shared'; const SDKsSchema = z .object({ @@ -21,7 +21,7 @@ const SDKsSchema = z export const RootWorkspaceSchema = z.object({ defaultTargets: z.optional(DefaultTargets), sdks: z.optional(SDKsSchema), - projectTemplates: z.record(z.string(), z.object({})).optional(), + projectTemplates: ProjectTemplates.optional(), disableTelemetry: z .boolean() .optional() diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index 6c4aad18e5..775cd3335d 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -85,3 +85,10 @@ export const TemplateConfig = z export const SupportedPlatforms = z .array(PlatformsKeys) .describe('Array list of all supported platforms in current project'); + +export const ProjectTemplates = z.record( + z.string(), + z.object({ + description: z.string(), + }) +); diff --git a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts index 1a5f4dad78..decbb14c12 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts @@ -17,6 +17,13 @@ export const inquiryBookmarkTemplate = async (data: NewProjectData) => { } workspace template list?`, }); + const { templateDescription } = await inquirerPrompt({ + name: 'templateDescription', + type: 'input', + default: 'Custom template added by user', + message: 'Add short description', + }); + const configFile = c.files.workspace.config; if (configFile) { @@ -24,7 +31,9 @@ export const inquiryBookmarkTemplate = async (data: NewProjectData) => { if (!configFile.projectTemplates) { configFile.projectTemplates = {}; } - configFile.projectTemplates[data.optionTemplates.selectedOption] = {}; + configFile.projectTemplates[data.optionTemplates.selectedOption] = { + description: templateDescription, + }; writeFileSync(c.paths.workspace.config, configFile); await updateRenativeConfigs(); diff --git a/yarn.lock b/yarn.lock index 72ee65ec78..08d265c50a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1940,11 +1940,6 @@ wdio-image-comparison-service "5.0.3" wdio-native-app-compare-service "2.1.0" -"@flexn/plugins@1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@flexn/plugins/-/plugins-1.0.9.tgz#34b0c24b58729cad3efdd2ce0952645c0f23fcb5" - integrity sha512-a0a7VCZBdcuyXxWSbA7cY0/ybmxaF6rqMt8p2SNJ1Trkkv2My4XB4sS2o0by1SiMLEs9axCNPOIFcdDsepRJxg== - "@flexn/prettier-config@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@flexn/prettier-config/-/prettier-config-1.0.0.tgz#f4e4668aa880d9396831cf19f819d5dba386a38d" From d7d8241962bd585cf09e0810fcb71ba0229bc532 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 22:52:37 +0100 Subject: [PATCH 053/175] fix bootstrap linking (need to link after build as rnv builds bin exec) --- package.json | 2 +- packages/app-harness/.watchmanconfig | 20 +++++++++----- packages/template-starter/.watchmanconfig | 33 +++++++++++++++++++++-- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 46423e363d..aeaff9ea15 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "url": "git://github.com/flexn-io/renative.git" }, "scripts": { - "bootstrap": "yarn run link:rnv && npx lerna bootstrap && yarn build", + "bootstrap": "npx lerna bootstrap && yarn build && yarn link:rnv", "bootstrap-clean": "rimraf -I ./node_modules; npx lerna clean --yes && yarn bootstrap", "build": "lerna run build", "compile": "npx lerna run compile", diff --git a/packages/app-harness/.watchmanconfig b/packages/app-harness/.watchmanconfig index a7b537e8bb..57f3651ec4 100644 --- a/packages/app-harness/.watchmanconfig +++ b/packages/app-harness/.watchmanconfig @@ -2,7 +2,12 @@ "ignore_dirs": [ "platformBuilds", "buildHooks/dist", - "../rnv", + "../adapter", + "../build-hooks-git", + "../build-hooks-schema", + "../cli", + "../config-templates", + "../core", "../engine-core", "../engine-lightning", "../engine-rn", @@ -14,14 +19,17 @@ "../engine-rn-windows", "../engine-roku", "../integration-docker", - "../integration-ftp", - "../integration-terraform", - "../integration-vercel", + "../integration-starter", + "../rnv", "../sdk-android", "../sdk-apple", "../sdk-kaios", + "../sdk-react-native", + "../sdk-telemetry", "../sdk-tizen", + "../sdk-utils", "../sdk-webos", - "../sdk-webpack" + "../sdk-webpack", + "../template-starter" ] -} \ No newline at end of file +} diff --git a/packages/template-starter/.watchmanconfig b/packages/template-starter/.watchmanconfig index 59a7131334..ad64dceb7e 100644 --- a/packages/template-starter/.watchmanconfig +++ b/packages/template-starter/.watchmanconfig @@ -1,6 +1,35 @@ { "ignore_dirs": [ "platformBuilds", - "buildHooks/dist" + "buildHooks/dist", + "../adapter", + "../app-harness", + "../build-hooks-git", + "../build-hooks-schema", + "../cli", + "../config-templates", + "../core", + "../engine-core", + "../engine-lightning", + "../engine-rn", + "../engine-rn-electron", + "../engine-rn-macos", + "../engine-rn-next", + "../engine-rn-tvos", + "../engine-rn-web", + "../engine-rn-windows", + "../engine-roku", + "../integration-docker", + "../integration-starter", + "../rnv", + "../sdk-android", + "../sdk-apple", + "../sdk-kaios", + "../sdk-react-native", + "../sdk-telemetry", + "../sdk-tizen", + "../sdk-utils", + "../sdk-webos", + "../sdk-webpack" ] -} \ No newline at end of file +} From b9b81be7102513b6e04bc4dc6cf5e15b81b1b082 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 23:27:27 +0100 Subject: [PATCH 054/175] reuse rnvFileName enum --- buildHooks/src/prePublish.ts | 14 ++++++++-- packages/core/src/configs/appConfigs.ts | 4 +-- packages/core/src/configs/index.ts | 20 ++++++------- packages/core/src/context/defaults.ts | 5 ---- packages/core/src/context/index.ts | 28 +++++++++---------- packages/core/src/context/types.ts | 6 ---- packages/core/src/engines/index.ts | 2 +- .../enums/{configName.ts => rnvFileName.ts} | 3 +- packages/core/src/index.ts | 2 +- packages/core/src/plugins/index.ts | 19 ++----------- packages/core/src/projects/bootstrap.ts | 4 +-- packages/core/src/projects/npm.ts | 9 +----- packages/core/src/projects/package.ts | 6 ++-- packages/core/src/system/fs.ts | 2 ++ packages/core/src/templates/index.ts | 8 +++--- .../src/tasks/global/new/projectGenerator.ts | 6 ++-- .../global/new/questions/applyTemplate.ts | 8 +++--- .../global/new/questions/installTemplate.ts | 3 +- .../tasks/global/new/questions/projectName.ts | 6 ++-- .../engine-core/src/tasks/linking/linker.ts | 11 +++++--- .../src/tasks/project/taskProjectUpgrade.ts | 5 ++-- .../tasks/workspace/taskWorkspaceConfigure.ts | 6 ++-- packages/engine-rn-electron/src/sdk.ts | 11 ++++---- packages/sdk-android/src/ejector.ts | 3 +- packages/sdk-apple/src/ejector.ts | 3 +- packages/sdk-tizen/src/deviceManager.ts | 4 +-- 26 files changed, 93 insertions(+), 105 deletions(-) rename packages/core/src/enums/{configName.ts => rnvFileName.ts} (89%) diff --git a/buildHooks/src/prePublish.ts b/buildHooks/src/prePublish.ts index 97d8f640e8..99e60395d1 100644 --- a/buildHooks/src/prePublish.ts +++ b/buildHooks/src/prePublish.ts @@ -1,5 +1,13 @@ import path from 'path'; -import { RnvContext, copyFileSync, fixPackageObject, fsExistsSync, readObjectSync, writeFileSync } from '@rnv/core'; +import { + RnvContext, + RnvFileName, + copyFileSync, + fixPackageObject, + fsExistsSync, + readObjectSync, + writeFileSync, +} from '@rnv/core'; import fs from 'fs'; const merge = require('deepmerge'); @@ -51,7 +59,7 @@ const setPackageVersions = (c: RnvContext, version: string | undefined, versione const pkgFolder = path.join(c.paths.project.dir, 'packages'); _updateJson(c.paths.project.package, v); versionedPackages.forEach(function (pkgName) { - _updateJson(path.join(pkgFolder, pkgName, 'package.json'), v); + _updateJson(path.join(pkgFolder, pkgName, RnvFileName.package), v); }); }; @@ -144,7 +152,7 @@ export const prePublish = async (c: RnvContext) => { let pkgFile; if (fs.statSync(dirPath).isDirectory()) { - _pkgPath = path.join(dirPath, 'package.json'); + _pkgPath = path.join(dirPath, RnvFileName.package); if (fsExistsSync(_pkgPath)) { pkgFile = readObjectSync(_pkgPath); pkgName = pkgFile?.name; diff --git a/packages/core/src/configs/appConfigs.ts b/packages/core/src/configs/appConfigs.ts index 1456cfc136..da420e636c 100644 --- a/packages/core/src/configs/appConfigs.ts +++ b/packages/core/src/configs/appConfigs.ts @@ -3,7 +3,7 @@ import path from 'path'; import { fsExistsSync, fsReaddirSync, fsLstatSync, readObjectSync } from '../system/fs'; import { logDefault, logWarning } from '../logger'; import { ConfigFileApp } from '../schema/configFiles/types'; -import { ConfigName } from '../enums/configName'; +import { RnvFileName } from '../enums/rnvFileName'; import { getContext } from '../context/provider'; const IGNORE_FOLDERS = ['.git']; @@ -22,7 +22,7 @@ export const listAppConfigsFoldersSync = (ignoreHiddenConfigs: boolean, appConfi const appConfigDir = path.join(dirPath, dir); if (!IGNORE_FOLDERS.includes(dir) && fsLstatSync(appConfigDir).isDirectory()) { if (ignoreHiddenConfigs) { - const appConfig = path.join(appConfigDir, ConfigName.renative); + const appConfig = path.join(appConfigDir, RnvFileName.renative); if (fsExistsSync(appConfig)) { try { const config = readObjectSync(appConfig); diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 12cff2c129..fc74a351f5 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -11,7 +11,7 @@ import { generateLocalConfig } from './configLocal'; import { getWorkspaceDirPath } from './workspaces'; import { generatePlatformTemplatePaths } from './configProject'; import { ConfigFileTemplates } from '../schema/configFiles/types'; -import { ConfigName } from '../enums/configName'; +import { RnvFileName } from '../enums/rnvFileName'; import { getContext } from '../context/provider'; export const loadFileExtended = (fileObj: Record, pathObj: RnvContextPathObj, key: RnvContextFileKey) => { @@ -111,9 +111,9 @@ const _loadConfigFiles = ( const pathObj1: RnvContextPathObj = { ...generateRnvConfigPathObj(), - config: path.join(path1, ConfigName.renative), - configLocal: path.join(path1, ConfigName.renativeLocal), - configPrivate: path.join(path1, ConfigName.renativePrivate), + config: path.join(path1, RnvFileName.renative), + configLocal: path.join(path1, RnvFileName.renativeLocal), + configPrivate: path.join(path1, RnvFileName.renativePrivate), }; pathObj.dirs.push(path1); pathObj.fontsDirs.push(path.join(path1, 'fonts')); @@ -135,9 +135,9 @@ const _loadConfigFiles = ( const path2 = path.join(pathObj.appConfigsDir, extendAppId); const pathObj2: RnvContextPathObj = { ...generateRnvConfigPathObj(), - config: path.join(path2, ConfigName.renative), - configLocal: path.join(path2, ConfigName.renativeLocal), - configPrivate: path.join(path2, ConfigName.renativePrivate), + config: path.join(path2, RnvFileName.renative), + configLocal: path.join(path2, RnvFileName.renativeLocal), + configPrivate: path.join(path2, RnvFileName.renativePrivate), }; const fileObj2: RnvContextFileObj = { configs: [], @@ -167,9 +167,9 @@ const _loadConfigFiles = ( pathObj.dirs.push(path3); pathObj.fontsDirs.push(path.join(path3, 'fonts')); pathObj.pluginDirs.push(path.join(path3, 'plugins')); - pathObj.configs.push(path.join(path3, ConfigName.renative)); - pathObj.configsLocal.push(path.join(path3, ConfigName.renativeLocal)); - pathObj.configsPrivate.push(path.join(path3, ConfigName.renativePrivate)); + pathObj.configs.push(path.join(path3, RnvFileName.renative)); + pathObj.configsLocal.push(path.join(path3, RnvFileName.renativeLocal)); + pathObj.configsPrivate.push(path.join(path3, RnvFileName.renativePrivate)); // FILE3: appConfigs/ loadFileExtended(fileObj, pathObj, 'config'); loadFileExtended(fileObj, pathObj, 'configPrivate'); diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index b63192fd84..f31d9033c7 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -95,14 +95,9 @@ export const generateContextDefaults = (): RnvContext => ({ injectableConfigProps: {}, runtime, paths: { - // RNV_CORE_HOME_DIR: path.join(__dirname, '../..'), - // CURRENT_DIR: '', IS_LINKED: false, IS_NPX_MODE: false, - // RNV_HOME_DIR: '', - // RNV_NODE_MODULES_DIR: '', appConfigBase: '', - // GLOBAL_RNV_CONFIG: '', user: { currentDir: '', homeDir: '', diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 328018829d..4a50e8fbad 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -4,14 +4,14 @@ import { generateContextDefaults } from './defaults'; import path from 'path'; import { mkdirSync } from 'fs'; import { isSystemWin } from '../system/is'; -import { ConfigName } from '../enums/configName'; +import { RnvFileName } from '../enums/rnvFileName'; import { homedir } from 'os'; export const generateContextPaths = (pathObj: RnvContextPathObj, dir: string, configName?: string) => { pathObj.dir = dir; - pathObj.config = path.join(dir, configName || ConfigName.renative); - pathObj.configLocal = path.join(dir, ConfigName.renativeLocal); - pathObj.configPrivate = path.join(dir, ConfigName.renativePrivate); + pathObj.config = path.join(dir, configName || RnvFileName.renative); + pathObj.configLocal = path.join(dir, RnvFileName.renativeLocal); + pathObj.configPrivate = path.join(dir, RnvFileName.renativePrivate); pathObj.appConfigsDir = path.join(dir, '..'); }; @@ -86,17 +86,17 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef c.paths.user.currentDir = path.resolve('.'); // @rnv/core ------------------ - c.paths.rnvCore.dir = path.join(__dirname, '../..'); //path.join(c.paths.RNV_CORE_HOME_DIR); + c.paths.rnvCore.dir = path.join(__dirname, '../..'); c.paths.rnvCore.templateFilesDir = path.join(c.paths.rnvCore.dir, 'templateFiles'); - c.paths.rnv.package = path.join(c.paths.rnv.dir, 'package.json'); + c.paths.rnvCore.package = path.join(c.paths.rnvCore.dir, RnvFileName.package); + //TODO: move out. this is only for paths c.files.rnvCore.package = JSON.parse(fsReadFileSync(c.paths.rnvCore.package).toString()); // rnv ------------------ if (RNV_HOME_DIR) { c.paths.rnv.dir = RNV_HOME_DIR; - // c.paths.rnv.nodeModulesDir = path.join(c.paths.rnv.dir, 'node_modules'); - c.paths.rnv.package = path.join(c.paths.rnv.dir, 'package.json'); - + c.paths.rnv.package = path.join(c.paths.rnv.dir, RnvFileName.package); + //TODO: move out. this is only for paths c.files.rnv.package = JSON.parse(fsReadFileSync(c.paths.rnv.package).toString()); } @@ -105,8 +105,8 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef if (!fsExistsSync(c.paths.dotRnv.dir)) { mkdirSync(c.paths.dotRnv.dir); } - // c.paths.dotRnv.config = path.join(c.paths.dotRnv.dir, ConfigName.renative); - c.paths.dotRnv.configWorkspaces = path.join(c.paths.dotRnv.dir, ConfigName.renativeWorkspaces); + c.paths.dotRnv.config = path.join(c.paths.dotRnv.dir, RnvFileName.renative); + c.paths.dotRnv.configWorkspaces = path.join(c.paths.dotRnv.dir, RnvFileName.renativeWorkspaces); // workspace ------------------ generateContextPaths(c.paths.workspace, c.paths.dotRnv.dir); @@ -127,7 +127,7 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef c.paths.project.nodeModulesDir = path.join(c.paths.project.dir, 'node_modules'); c.paths.project.srcDir = path.join(c.paths.project.dir, 'src'); c.paths.project.appConfigsDir = path.join(c.paths.project.dir, 'appConfigs'); - c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); + c.paths.project.package = path.join(c.paths.project.dir, RnvFileName.package); c.paths.project.dotRnvDir = path.join(c.paths.project.dir, '.rnv'); // c.paths.project.npmLinkPolyfill = path.join( // c.paths.project.dir, @@ -139,7 +139,7 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef c.paths.project.appConfigBase.fontsDirs = [c.paths.project.appConfigBase.fontsDir]; c.paths.project.assets.dir = path.join(c.paths.project.dir, 'platformAssets'); c.paths.project.assets.runtimeDir = path.join(c.paths.project.assets.dir, 'runtime'); - c.paths.project.assets.config = path.join(c.paths.project.assets.dir, ConfigName.renativeRuntime); + c.paths.project.assets.config = path.join(c.paths.project.assets.dir, RnvFileName.renativeRuntime); c.paths.project.builds.dir = path.join(c.paths.project.dir, 'platformBuilds'); // @rnv/config-templates ------------------ @@ -147,7 +147,7 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef // c.paths.rnvConfigTemplates.pluginTemplatesDir = '????'; // c.paths.rnvConfigTemplates.config = path.join( // c.paths.rnvConfigTemplates.pluginTemplatesDir, - // ConfigName.renativeTemplates + // RnvFileName.renativeTemplates // ); // runtime diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 1ffd1e0424..95b8271ba2 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -188,14 +188,8 @@ export type RnvContextFileObj = { }; export type RnvContextPaths = { - // GLOBAL_RNV_CONFIG: string; - // GLOBAL_RNV_DIR: string; - // RNV_HOME_DIR: string; IS_LINKED: boolean; IS_NPX_MODE: boolean; - // CURRENT_DIR: string; - // RNV_CORE_HOME_DIR: string; - // RNV_NODE_MODULES_DIR: string; //======= user: { homeDir: string; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index be3c5728b5..fb49397b57 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -443,7 +443,7 @@ ${enginesToInstall.map((v) => `> ${v.key}@${v.version}`).join('\n')} }; const _resolvePkgPath = (c: RnvContext, packageName: string) => { - if (c.paths.IS_LINKED && !c.program.unlinked) { + if (c.paths.IS_LINKED && !c.program.unlinked && c.paths.rnv.dir !== '') { // In the instances of running linked rnv instead of installed one load local packages try { let pkgPathLocal = require.resolve(packageName, { paths: [path.join(c.paths.rnv.dir, '..')] }); diff --git a/packages/core/src/enums/configName.ts b/packages/core/src/enums/rnvFileName.ts similarity index 89% rename from packages/core/src/enums/configName.ts rename to packages/core/src/enums/rnvFileName.ts index f4729f3a67..1c0ee2ee5a 100644 --- a/packages/core/src/enums/configName.ts +++ b/packages/core/src/enums/rnvFileName.ts @@ -1,4 +1,4 @@ -export const ConfigName = { +export const RnvFileName = { renative: 'renative.json', renativeLocal: 'renative.local.json', renativePrivate: 'renative.private.json', @@ -9,5 +9,6 @@ export const ConfigName = { renativeTemplates: 'renative.templates.json', renativePlatforms: 'renative.platforms.json', renativeEngine: 'renative.engine.json', + package: 'package.json', // renativeProject: 'renative.project.json', }; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 88bd499387..a7c6e3670d 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -60,7 +60,7 @@ export * from './buildHooks'; export * from './migrator'; export * from './enums/taskName'; -export * from './enums/configName'; +export * from './enums/rnvFileName'; //TYPES export * from './engines/types'; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 5f4f1d61fb..42d956b928 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -25,7 +25,7 @@ import { ConfigFileOverrides, ConfigFilePlugin, ConfigFileTemplates } from '../s import { NpmPackageFile } from '../configs/types'; import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; -import { ConfigName } from '../enums/configName'; +import { RnvFileName } from '../enums/rnvFileName'; import { AsyncCallback } from '../projects/types'; const _getPluginScope = (plugin: RenativeConfigPlugin | string): RnvPluginScope => { @@ -579,7 +579,7 @@ const _parsePluginTemplateDependencies = ( ptPath = `${doResolve(val.npm)}/${val.path}`; } - const ptConfig = path.join(ptPath, ConfigName.renativeTemplates); + const ptConfig = path.join(ptPath, RnvFileName.renativeTemplates); c.paths.scopedConfigTemplates.pluginTemplatesDirs[k] = ptPath; if (fsExistsSync(ptConfig)) { const ptConfigs = c.files.scopedPluginTemplates; @@ -846,12 +846,7 @@ export const overrideTemplatePlugins = async () => { plugin._scopes.forEach((pluginScope) => { const pluginOverridePath = rnvPluginsDirs[pluginScope]; if (pluginOverridePath) { - // const rnvOverridePath = path.join(c.paths.rnv.pluginTemplates.overrideDir!, key); - // if (fsExistsSync(rnvOverridePath)) { - // _overridePlugin(c, c.paths.rnv.pluginTemplates.overrideDir!, key); - // } else { _overridePlugin(c, pluginOverridePath, key); - // } } }); } @@ -884,11 +879,6 @@ export const copyTemplatePluginsSync = (c: RnvContext) => { }); }); } - // FOLDER MERGES FROM PROJECT CONFIG PLUGIN - // if (c.paths.rnv.pluginTemplates.dir) { - // const sourcePathRnvPlugin = getAppConfigBuildsFolder(c, platform, path.join(c.paths.rnv.pluginTemplates.dir, key)); - // copyFolderContentsRecursiveSync(sourcePathRnvPlugin, destPath, true, undefined, false, objectInject); - // } // FOLDER MERGES FROM PROJECT CONFIG PLUGIN const sourcePath3 = getAppConfigBuildsFolder(path.join(c.paths.project.appConfigBase.dir, `plugins/${key}`)); @@ -909,14 +899,11 @@ export const copyTemplatePluginsSync = (c: RnvContext) => { copyFolderContentsRecursiveSync(sourcePath2sec, destPath, true, undefined, false, objectInject); // FOLDER MERGES FROM SCOPED PLUGIN TEMPLATES + // NOTE: default 'rnv' scope (@rnv/config-templates) is included in pluginTemplatesDirs Object.keys(c.paths.scopedConfigTemplates.pluginTemplatesDirs).forEach((pathKey) => { - // TODO: required for external rnv scoped templates to take effect. need to test full implications - // if (pathKey !== 'rnv') { const pluginTemplatePath = c.paths.scopedConfigTemplates.pluginTemplatesDirs[pathKey]; - const sourcePath4sec = getAppConfigBuildsFolder(path.join(pluginTemplatePath, key)); copyFolderContentsRecursiveSync(sourcePath4sec, destPath, true, undefined, false, objectInject); - // } }); }); }; diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts index 82d3230024..9d7c12ac6b 100644 --- a/packages/core/src/projects/bootstrap.ts +++ b/packages/core/src/projects/bootstrap.ts @@ -6,7 +6,7 @@ import { logDefault, logInfo } from '../logger'; import { configureTemplateFiles, configureEntryPoint } from '../templates'; import { parseRenativeConfigs } from '../configs'; import { ConfigFileApp, ConfigFileEngine, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -import { ConfigName } from '../enums/configName'; +import { RnvFileName } from '../enums/rnvFileName'; import { getContext } from '../context/provider'; export const checkAndBootstrapIfRequired = async () => { @@ -24,7 +24,7 @@ export const checkAndBootstrapIfRequired = async () => { const templatePath = path.join(c.paths.project.dir, 'node_modules', templateDir); c.paths.template.dir = templatePath; - c.paths.template.configTemplate = path.join(templatePath, ConfigName.renativeTemplate); + c.paths.template.configTemplate = path.join(templatePath, RnvFileName.renativeTemplate); const templateObj = readObjectSync(c.paths.template.configTemplate); const appConfigPath = path.join(c.paths.project.appConfigsDir, c.program.appConfigID, 'renative.json'); diff --git a/packages/core/src/projects/npm.ts b/packages/core/src/projects/npm.ts index 0829136265..eb8efb5522 100644 --- a/packages/core/src/projects/npm.ts +++ b/packages/core/src/projects/npm.ts @@ -179,6 +179,7 @@ export const installPackageDependencies = async (failOnError = false) => { `${e}\n Seems like your node_modules is corrupted by other libs. ReNative will try to fix it for you` ); try { + // TODO: evalauate if this is still needed await cleanNodeModules(); await installPackageDependencies(true); } catch (npmErr) { @@ -238,12 +239,4 @@ export const cleanNodeModules = () => removeDirs(dirs) .then(() => resolve()) .catch((e) => reject(e)); - // removeDirs([ - // path.join(c.paths.project.nodeModulesDir, 'react-native-safe-area-view/.git'), - // path.join(c.paths.project.nodeModulesDir, '@react-navigation/native/node_modules/react-native-safe-area-view/.git'), - // path.join(c.paths.project.nodeModulesDir, 'react-navigation/node_modules/react-native-safe-area-view/.git'), - // path.join(c.paths.rnv.nodeModulesDir, 'react-native-safe-area-view/.git'), - // path.join(c.paths.rnv.nodeModulesDir, '@react-navigation/native/node_modules/react-native-safe-area-view/.git'), - // path.join(c.paths.rnv.nodeModulesDir, 'react-navigation/node_modules/react-native-safe-area-view/.git') - // ]).then(() => resolve()).catch(e => reject(e)); }); diff --git a/packages/core/src/projects/package.ts b/packages/core/src/projects/package.ts index e0d9b01012..a031d1485b 100644 --- a/packages/core/src/projects/package.ts +++ b/packages/core/src/projects/package.ts @@ -2,7 +2,7 @@ import path from 'path'; import { fsExistsSync, fsWriteFileSync, loadFile, readObjectSync } from '../system/fs'; import { logDefault, logWarning, logInfo } from '../logger'; import { ConfigFileTemplate } from '../schema/configFiles/types'; -import { ConfigName } from '../enums/configName'; +import { RnvFileName } from '../enums/rnvFileName'; import { getContext } from '../context/provider'; const packageJsonIsValid = () => { @@ -29,14 +29,14 @@ export const checkAndCreateProjectPackage = async () => { if (!templateName) { logWarning('You are missing currentTemplate in your renative.json'); } - const rnvVersion = c.files.rnv.package.version; + const rnvVersion = c.files.rnvCore.package.version; if (templateName) { c.paths.template.configTemplate = path.join( c.paths.project.dir, 'node_modules', templateName, - ConfigName.renativeTemplate + RnvFileName.renativeTemplate ); } diff --git a/packages/core/src/system/fs.ts b/packages/core/src/system/fs.ts index db30f921b4..a2a3373652 100755 --- a/packages/core/src/system/fs.ts +++ b/packages/core/src/system/fs.ts @@ -550,11 +550,13 @@ export const getRealPath = (p: string | undefined, key = 'undefined', original?: return path.join(c.paths.project.dir, p); } const output = p + // TODO: deprecate this path .replace(/\$RNV_HOME/g, c.paths.rnv.dir) .replace(/~/g, c.paths.user.homeDir) .replace(/\$USER_HOME/g, c.paths.user.homeDir) .replace(/\$PROJECT_HOME/g, c.paths.project.dir) .replace(/\$WORKSPACE_HOME/g, c.paths.workspace.dir) + // TODO: deprecate this path .replace(/RNV_HOME/g, c.paths.rnv.dir) .replace(/USER_HOME/g, c.paths.user.homeDir) .replace(/PROJECT_HOME/g, c.paths.project.dir); diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index b351cff0e3..b9fefec094 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -24,7 +24,7 @@ import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; -import { ConfigName } from '../enums/configName'; +import { RnvFileName } from '../enums/rnvFileName'; import { getContext } from '../context/provider'; const _cleanProjectTemplateSync = (c: RnvContext) => { @@ -52,9 +52,9 @@ const _applyTemplate = async (c: RnvContext) => { } if (c.paths.template.dir) { - c.paths.template.configTemplate = path.join(c.paths.template.dir, ConfigName.renativeTemplate); + c.paths.template.configTemplate = path.join(c.paths.template.dir, RnvFileName.renativeTemplate); - c.paths.template.config = path.join(c.paths.template.dir, ConfigName.renative); + c.paths.template.config = path.join(c.paths.template.dir, RnvFileName.renative); } if (!fsExistsSync(c.paths.template.configTemplate)) { @@ -119,7 +119,7 @@ const _configureAppConfigs = async (c: RnvContext) => { try { const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; appConfigIds.forEach((v) => { - const appConfigPath = path.join(c.paths.project.appConfigsDir, v, ConfigName.renative); + const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); const appConfig = readObjectSync(appConfigPath); if (appConfig) { if (appConfig.skipBootstrapCopy) { diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index 311b1efa88..ded1fd66c9 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -1,7 +1,7 @@ import { // ConfigFileProject, - ConfigName, PlatformKey, + RnvFileName, // PlatformKey, applyTemplate, chalk, @@ -28,8 +28,8 @@ export const saveProgressIntoProjectConfig = async (data: NewProjectData) => { export const initNewProject = async () => { const c = getContext(); - c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); - c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); + c.paths.project.package = path.join(c.paths.project.dir, RnvFileName.package); + c.paths.project.config = path.join(c.paths.project.dir, RnvFileName.renative); const data: NewProjectData = { defaultVersion: '0.1.0', diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index dc6044884f..761578420b 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -1,7 +1,7 @@ import { ConfigFileProject, ConfigFileTemplate, - ConfigName, + RnvFileName, getContext, inquirerPrompt, mergeObjects, @@ -20,12 +20,12 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { const templateDir = path.join(c.paths.project.dir, 'node_modules', tplName); const renativeTemplateConfig = - readObjectSync(path.join(templateDir, ConfigName.renativeTemplate)) || {}; + readObjectSync(path.join(templateDir, RnvFileName.renativeTemplate)) || {}; if (renativeTemplateConfig) { data.files.template.renativeTemplateConfig = renativeTemplateConfig; } - const renativeConfig = readObjectSync(path.join(templateDir, ConfigName.renative)); + const renativeConfig = readObjectSync(path.join(templateDir, RnvFileName.renative)); if (renativeConfig) { data.files.template.renativeConfig = renativeConfig; } @@ -34,7 +34,7 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { // if(fsExistsSync(templateAppConfigDir)) { // read // } - // const renativeAppConfig = readObjectSync(path.join(templateDir, ConfigName.renative)); + // const renativeAppConfig = readObjectSync(path.join(templateDir, RnvFileName.renative)); // if (renativeConfig) { // data.files.template.renativeConfig = renativeConfig; // } diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 32d127ad43..8e76dcb273 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -1,5 +1,6 @@ import { NpmPackageFile, + RnvFileName, chalk, copyFileSync, copyFolderRecursiveSync, @@ -103,7 +104,7 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { // await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add file:${localTemplatePath} --dev`, { // cwd: c.paths.project.dir, // }); - const localTemplatePkgPath = path.join(localTemplatePath, 'package.json'); + const localTemplatePkgPath = path.join(localTemplatePath, RnvFileName.package); if (!fsExistsSync(localTemplatePath)) { return Promise.reject(`Local template package ${localTemplatePkgPath} does not exist`); } diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index c30ca23245..e468b5b584 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -1,4 +1,4 @@ -import { ConfigName, cleanFolder, fsExistsSync, getContext, inquirerPrompt, logWarning, mkdirSync } from '@rnv/core'; +import { RnvFileName, cleanFolder, fsExistsSync, getContext, inquirerPrompt, logWarning, mkdirSync } from '@rnv/core'; import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; @@ -22,8 +22,8 @@ export const inquiryProjectName = async (data: NewProjectData) => { data.projectName = data.inputProjectName?.replace?.(/(\s+)/g, '_'); data.packageName = data.inputProjectName?.replace(/\s+/g, '-').toLowerCase(); c.paths.project.dir = path.join(c.paths.user.currentDir, data.projectName || ''); - c.paths.project.package = path.join(c.paths.project.dir, 'package.json'); - c.paths.project.config = path.join(c.paths.project.dir, ConfigName.renative); + c.paths.project.package = path.join(c.paths.project.dir, RnvFileName.package); + c.paths.project.config = path.join(c.paths.project.dir, RnvFileName.renative); data.files.project.renativeConfig.projectName = data.projectName; data.files.project.packageJson.name = data.packageName; diff --git a/packages/engine-core/src/tasks/linking/linker.ts b/packages/engine-core/src/tasks/linking/linker.ts index c93643ee0a..68fa41e380 100644 --- a/packages/engine-core/src/tasks/linking/linker.ts +++ b/packages/engine-core/src/tasks/linking/linker.ts @@ -1,5 +1,6 @@ import { NpmPackageFile, + RnvFileName, chalk, fsExistsSync, fsLstatSync, @@ -71,12 +72,14 @@ export const traverseTargetProject = (sourceDir: string) => { export const getSourceDir = () => { const ctx = getContext(); + const dirOption = ctx.program.dir; - if (ctx.program.dir) { - logInfo(`Using custom source directory: ${chalk().bold(ctx.program.dir)}`); + if (dirOption) { + logInfo(`Using custom source directory: ${chalk().bold(dirOption)}`); } - const sourceDir = ctx.program.dir || path.join(ctx.paths.rnv.dir, '../../'); + // As default we'll use the development source directory which is a monorepo + const sourceDir = ctx.program.dir || path.join(ctx.paths.rnvCore.dir, '../../'); if (!fsExistsSync(sourceDir)) { throw new Error(`Source directory ${sourceDir} does not exist!`); } @@ -84,7 +87,7 @@ export const getSourceDir = () => { }; const captureSourcePackage = (baseDir: string, sourcePackages: SourcePackage[]) => { - const pkgPath = path.join(baseDir, 'package.json'); + const pkgPath = path.join(baseDir, RnvFileName.package); if (fsExistsSync(pkgPath)) { const pkgFile = readObjectSync(pkgPath); if (pkgFile?.name) { diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index 98d4fdac2c..fe99d02518 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -16,6 +16,7 @@ import { RnvTaskName, NpmPackageFile, ConfigFileProject, + RnvFileName, } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; @@ -50,8 +51,8 @@ const taskProjectUpgrade: RnvTaskFn = async (c, _parentTask, originTask) => { dirs.forEach((dir) => { const dirPath = path.join(packagesPath, dir); if (fs.statSync(dirPath).isDirectory()) { - const pkgPath = path.join(dirPath, 'package.json'); - const rnvPath = path.join(dirPath, 'renative.json'); + const pkgPath = path.join(dirPath, RnvFileName.package); + const rnvPath = path.join(dirPath, RnvFileName.renative); let pkgFile; let rnvFile; if (fsExistsSync(pkgPath)) { diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index c862bbbc60..5b812e84ea 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -14,7 +14,7 @@ import { RnvTaskFn, RnvTask, RnvTaskName, - ConfigName, + RnvFileName, } from '@rnv/core'; import { writeFileSync } from 'fs'; @@ -31,14 +31,14 @@ const taskWorkspaceConfigure: RnvTaskFn = async (c) => { // Check globalConfig if (fsExistsSync(c.paths.workspace.config)) { - logDebug(`${c.paths.workspace.dir}/${ConfigName.renative} file exists!`); + logDebug(`${c.paths.workspace.dir}/${RnvFileName.renative} file exists!`); } else { const oldGlobalConfigPath = path.join(c.paths.workspace.dir, 'config.json'); if (fsExistsSync(oldGlobalConfigPath)) { logWarning('Found old version of your config. will copy it to new renative.json config'); copyFileSync(oldGlobalConfigPath, c.paths.workspace.config); } else { - logInfo(`${c.paths.workspace.dir}/${ConfigName.renative} file missing! Creating one for you...`); + logInfo(`${c.paths.workspace.dir}/${RnvFileName.renative} file missing! Creating one for you...`); writeFileSync(c.paths.workspace.config, '{}'); } } diff --git a/packages/engine-rn-electron/src/sdk.ts b/packages/engine-rn-electron/src/sdk.ts index a558c88571..a0fa124700 100644 --- a/packages/engine-rn-electron/src/sdk.ts +++ b/packages/engine-rn-electron/src/sdk.ts @@ -29,6 +29,7 @@ import { RnvTaskName, getContext, NpmPackageFile, + RnvFileName, } from '@rnv/core'; import { FileElectronPackage } from './types'; import { @@ -84,7 +85,7 @@ const configureProject = (exitOnFail?: boolean) => const platformBuildDir = getAppFolder()!; const bundleAssets = getConfigProp('bundleAssets') === true; const electronConfigPath = path.join(platformBuildDir, 'electronConfig.json'); - const packagePath = path.join(platformBuildDir, 'package.json'); + const packagePath = path.join(platformBuildDir, RnvFileName.package); // If path does not exist for png, try iconset const pngIconPath = path.join(c.paths.appConfig.dir, `assets/${platform}/resources/icon.png`); const appId = getAppId(); @@ -101,7 +102,7 @@ const configureProject = (exitOnFail?: boolean) => reject(`${packagePath} does not exist!`); return; } - const pkgJson = path.join(engine.originalTemplatePlatformsDir!, platform, 'package.json'); + const pkgJson = path.join(engine.originalTemplatePlatformsDir!, platform, RnvFileName.package); const packageJson = readObjectSync(pkgJson) || {}; packageJson.name = `${c.runtime.appId}-${platform}`; @@ -228,7 +229,7 @@ const configureProject = (exitOnFail?: boolean) => // Fix `Cannot compute electron version from installed node modules - none of the possible electron modules are installed.` // See https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-505307933 - const enginePkgJson = path.join(engine.rootPath!, 'package.json'); + const enginePkgJson = path.join(engine.rootPath!, RnvFileName.package); const enginePackageJson = readObjectSync(enginePkgJson); let electronConfig = merge( @@ -266,8 +267,8 @@ const buildElectron = async () => { // workaround: electron-builder fails export in npx mode due to trying install node_modules. we trick it not to do that mkdirSync(path.join(platformBuildDir, 'build', 'node_modules')); - const packagePathSrc = path.join(platformBuildDir, 'package.json'); - const packagePathDest = path.join(platformBuildDir, 'build', 'package.json'); + const packagePathSrc = path.join(platformBuildDir, RnvFileName.package); + const packagePathDest = path.join(platformBuildDir, 'build', RnvFileName.package); copyFileSync(packagePathSrc, packagePathDest); const mainPathSrc = path.join(platformBuildDir, 'main.js'); diff --git a/packages/sdk-android/src/ejector.ts b/packages/sdk-android/src/ejector.ts index 8caab11081..6411981c42 100644 --- a/packages/sdk-android/src/ejector.ts +++ b/packages/sdk-android/src/ejector.ts @@ -10,6 +10,7 @@ import { doResolvePath, parsePlugins, getContext, + RnvFileName, } from '@rnv/core'; export const ejectGradleProject = async () => { @@ -155,7 +156,7 @@ export const ejectGradleProject = async () => { c, extensionsFilter ); - copyFileSync(path.join(pluginPath, 'package.json'), path.join(destPath, 'package.json')); + copyFileSync(path.join(pluginPath, RnvFileName.package), path.join(destPath, RnvFileName.package)); }); //= ========== diff --git a/packages/sdk-apple/src/ejector.ts b/packages/sdk-apple/src/ejector.ts index f0671c69f2..623f674461 100644 --- a/packages/sdk-apple/src/ejector.ts +++ b/packages/sdk-apple/src/ejector.ts @@ -12,6 +12,7 @@ import { parseFonts, parsePlugins, getContext, + RnvFileName, } from '@rnv/core'; import { getAppFolderName } from './common'; @@ -98,7 +99,7 @@ export const ejectXcodeProject = async () => { c, extensionsFilter ); - copyFileSync(path.join(podPath, 'package.json'), path.join(destPath, 'package.json')); + copyFileSync(path.join(podPath, RnvFileName.package), path.join(destPath, RnvFileName.package)); } }); diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index de42626865..36adabadbd 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -18,7 +18,7 @@ import { DEFAULTS, executeAsync, ExecOptionsPresets, - ConfigName, + RnvFileName, getContext, } from '@rnv/core'; import { CLI_SDB_TIZEN, CLI_TIZEN, CLI_TIZEN_EMULATOR } from './constants'; @@ -350,7 +350,7 @@ export const runTizenSimOrDevice = async () => { logDebug(err); logError( `Could not find the specified target and could not create the emulator automatically. -Please create one and then edit the default target from ${c.paths.workspace.dir}/${ConfigName.renative}` +Please create one and then edit the default target from ${c.paths.workspace.dir}/${RnvFileName.renative}` ); } } From 07c22efb8dcaa2050ca934c3fd8a9476a8735441 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 18 Mar 2024 23:28:08 +0100 Subject: [PATCH 055/175] update schema --- packages/core/jsonSchema/rnv.templates.json | 886 +++++++++++++++++++- packages/core/jsonSchema/rnv.workspace.json | 90 ++ 2 files changed, 970 insertions(+), 6 deletions(-) create mode 100644 packages/core/jsonSchema/rnv.workspace.json diff --git a/packages/core/jsonSchema/rnv.templates.json b/packages/core/jsonSchema/rnv.templates.json index de81c160a7..73823e4487 100644 --- a/packages/core/jsonSchema/rnv.templates.json +++ b/packages/core/jsonSchema/rnv.templates.json @@ -19,6 +19,12 @@ "additionalProperties": false } }, + "engineIdMap": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "engineTemplates": { "type": "object", "additionalProperties": { @@ -93,17 +99,885 @@ ] } }, + "pluginTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "supportedPlatforms": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "allprojects", + "plugins", + "buildscript", + "dexOptions", + "injectAfterAll" + ], + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "required": [ + "apply", + "defaultConfig" + ], + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/children/items" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag", + "name", + "child_value" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android" + }, + "firetv": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/path" + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "webos": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "web": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "webtv": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "chromecast": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "kaios": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "macos": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "linux": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "windows": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + }, + "xbox": { + "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + } + }, + "additionalProperties": false + }, + "description": "Define all plugins available to be merged with project plugins" + }, + "disableRnvDefaultOverrides": { + "type": "boolean", + "description": "Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list" + }, "$schema": { "type": "string", "description": "schema definition" } }, - "required": [ - "projectTemplates", - "engineTemplates", - "integrationTemplates", - "platformTemplates" - ], "additionalProperties": false } }, diff --git a/packages/core/jsonSchema/rnv.workspace.json b/packages/core/jsonSchema/rnv.workspace.json new file mode 100644 index 0000000000..a66e2c7547 --- /dev/null +++ b/packages/core/jsonSchema/rnv.workspace.json @@ -0,0 +1,90 @@ +{ + "$ref": "#/definitions/rnv.workspace", + "definitions": { + "rnv.workspace": { + "type": "object", + "properties": { + "defaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "sdks": { + "type": "object", + "properties": { + "ANDROID_SDK": { + "type": "string" + }, + "ANDROID_NDK": { + "type": "string" + }, + "TIZEN_SDK": { + "type": "string" + }, + "WEBOS_SDK": { + "type": "string" + }, + "KAIOS_SDK": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Define your sdk configurations" + }, + "projectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "description": { + "type": "string" + } + }, + "required": [ + "description" + ], + "additionalProperties": false + } + }, + "disableTelemetry": { + "type": "boolean", + "description": "Opt-out from renative telemetry program. More info at https://renative.org/telemetry" + }, + "appConfigsPath": { + "type": "string", + "description": "Enables you to define custom global appConfigs location that every project will automatically use" + }, + "$schema": { + "type": "string", + "description": "schema definition" + } + }, + "additionalProperties": false + } + }, + "$schema": "http://json-schema.org/draft-04/schema#" +} \ No newline at end of file From c24eec38977ed252d75d5234355e3ae42a321310 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 19 Mar 2024 00:00:38 +0100 Subject: [PATCH 056/175] fixes --- packages/core/src/configs/buildConfig.ts | 7 ++-- packages/core/src/configs/index.ts | 52 ++++++++++++++++++++++-- packages/core/src/engines/index.ts | 1 + packages/core/src/plugins/index.ts | 43 -------------------- packages/core/src/runner.ts | 2 + 5 files changed, 56 insertions(+), 49 deletions(-) diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 25b346c8ad..0ec9895d3b 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -81,11 +81,11 @@ export const generateBuildConfig = () => { return exists; }); - const pluginTemplates: Record = {}; + const scopedPluginTemplates: Record = {}; if (c.files.scopedPluginTemplates) { Object.keys(c.files.scopedPluginTemplates).forEach((v) => { const plgs = c.files.scopedPluginTemplates[v]; - pluginTemplates[v] = plgs; + scopedPluginTemplates[v] = plgs; }); } @@ -141,7 +141,8 @@ export const generateBuildConfig = () => { arrayMerge: _arrayMergeOverride, }); out = merge({}, out); - out.pluginTemplates = pluginTemplates; + // out.pluginTemplates = pluginTemplates; + out.scopedPluginTemplates = scopedPluginTemplates; c.buildConfig = sanitizeDynamicRefs(c, out); const propConfig: FileUtilsPropConfig = { diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index fc74a351f5..82dee2d994 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -1,7 +1,7 @@ import path from 'path'; import { mergeObjects, fsExistsSync, fsReaddirSync, getRealPath, readObjectSync, loadFile } from '../system/fs'; -import { logWarning, logDebug, logDefault } from '../logger'; +import { logWarning, logDebug, logDefault, chalk } from '../logger'; import { doResolve } from '../system/resolve'; import { RnvContextFileObj, RnvContextPathObj, RnvContext, RnvContextFileKey } from '../context/types'; import { generateRnvConfigPathObj } from '../context/defaults'; @@ -183,6 +183,51 @@ const _loadConfigFiles = ( // return result; }; +export const loadDefaultConfigTemplates = async () => { + const ctx = getContext(); + //This comes from project dependency + const pkgName = '@rnv/config-templates'; + let configTemplatesPath = doResolve('@rnv/config-templates'); + + if (!fsExistsSync(configTemplatesPath)) { + //This comes from rnv built-in dependency (installed via npm) + configTemplatesPath = path.resolve(__dirname, '../../node_modules', pkgName); + if (!fsExistsSync(configTemplatesPath)) { + //This comes from rnv built-in dependency (installed via yarn might install it one level up) + configTemplatesPath = path.resolve(__dirname, '../../..', pkgName); + if (!fsExistsSync(configTemplatesPath)) { + // This comes from rnv built-in dependency (installed via yarn might install it 2 level up but scoped to @rnv) + configTemplatesPath = path.resolve(__dirname, '../../../../', pkgName); + if (!fsExistsSync(configTemplatesPath)) { + return Promise.reject(`RNV Cannot find package: ${chalk().bold(configTemplatesPath)}`); + } + } + } + } + + if (!configTemplatesPath) return Promise.reject(`@rnv/config-templates missing`); + + const rnvConfigTemplates = readObjectSync( + path.join(configTemplatesPath, 'renative.templates.json') + ); + + if (rnvConfigTemplates) { + ctx.files.rnvConfigTemplates.config = rnvConfigTemplates; + ctx.files.scopedPluginTemplates = { + rnv: rnvConfigTemplates.pluginTemplates, + }; + } + + ctx.paths.scopedConfigTemplates = { + configs: { + rnv: ctx.paths.rnvConfigTemplates.config, + }, + pluginTemplatesDirs: { + rnv: ctx.paths.rnvConfigTemplates.pluginTemplatesDir, + }, + }; +}; + export const parseRenativeConfigs = async () => { logDefault('parseRenativeConfigs'); const c = getContext(); @@ -214,8 +259,9 @@ export const parseRenativeConfigs = async () => { // _loadConfigFiles(c, c.files.defaultWorkspace, c.paths.defaultWorkspace); // LOAD CONFIG TEMPLATES - c.files.rnvConfigTemplates.config = - readObjectSync(c.paths.rnvConfigTemplates.config) || undefined; + //NOTE: loaded in loadDefaultConfigTemplates + // c.files.rnvConfigTemplates.config = + // readObjectSync(c.paths.rnvConfigTemplates.config) || undefined; // // LOAD PLUGIN TEMPLATES // await loadPluginTemplates(c); diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index fb49397b57..3d5d707bc6 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -312,6 +312,7 @@ const _getFilteredEngines = (c: RnvContext) => { const filteredEngines: Record = {}; const ENGINE_ID_MAP = c.files.rnvConfigTemplates.config?.engineIdMap || {}; + supportedPlatforms.forEach((v) => { const platforms = c.files.project.config?.platforms || {}; const engineKey = platforms[v]?.engine || rnvPlatforms?.[v]?.engine; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 42d956b928..125ba5c482 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -478,49 +478,6 @@ export const loadPluginTemplates = async () => { const c = getContext(); - //This comes from project dependency - let configTemplatesPath = doResolve('@rnv/config-templates'); - - if (!fsExistsSync(configTemplatesPath)) { - //This comes from rnv built-in dependency (installed via npm) - configTemplatesPath = path.resolve(__dirname, '../../node_modules/@flexn/plugins'); - if (!fsExistsSync(configTemplatesPath)) { - //This comes from rnv built-in dependency (installed via yarn might install it one level up) - configTemplatesPath = path.resolve(__dirname, '../../../@flexn/plugins'); - if (!fsExistsSync(configTemplatesPath)) { - // This comes from rnv built-in dependency (installed via yarn might install it 2 level up but scoped to @rnv) - configTemplatesPath = path.resolve(__dirname, '../../../../@flexn/plugins'); - if (!fsExistsSync(configTemplatesPath)) { - return Promise.reject(`RNV Cannot find package: ${chalk().bold(configTemplatesPath)}`); - } - } - } - } - - if (!configTemplatesPath) return Promise.reject(`@rnv/config-templates missing`); - - const rnvConfigTemplates = readObjectSync( - path.join(configTemplatesPath, 'renative.templates.json') - ); - - if (rnvConfigTemplates) { - c.files.rnvConfigTemplates.config = rnvConfigTemplates; - c.files.scopedPluginTemplates = { - rnv: rnvConfigTemplates.pluginTemplates, - }; - } - - //Override default rnv path with flexn one and add it rnv as overrider - - c.paths.scopedConfigTemplates = { - configs: { - rnv: c.paths.rnvConfigTemplates.config, - }, - pluginTemplatesDirs: { - rnv: c.paths.rnvConfigTemplates.pluginTemplatesDir, - }, - }; - const customPluginTemplates = c.files.project.config?.paths?.pluginTemplates; if (customPluginTemplates) { const missingDeps = _parsePluginTemplateDependencies(c, customPluginTemplates); diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index d9f6268775..f7fc6c9dfb 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -6,10 +6,12 @@ import { configureRuntimeDefaults } from './context/runtime'; import { findSuitableGlobalTask, findSuitableTask, initializeTask } from './tasks'; import { updateRenativeConfigs } from './plugins'; import { checkAndBootstrapIfRequired } from './projects/bootstrap'; +import { loadDefaultConfigTemplates } from './configs'; export const executeRnvCore = async () => { const c = getContext(); + await loadDefaultConfigTemplates(); await configureRuntimeDefaults(); await checkAndMigrateProject(); await updateRenativeConfigs(); From 459206594068023de64e86a9f92534e95bd1de08 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 19 Mar 2024 01:13:33 +0100 Subject: [PATCH 057/175] fix scopedConfigTemplates, strongly typed c.program --- packages/app-harness/renative.json | 3 +++ packages/core/src/configs/buildConfig.ts | 6 +++--- packages/core/src/configs/index.ts | 4 ++-- packages/core/src/context/defaults.ts | 10 +++++++--- packages/core/src/context/provider.ts | 5 +++-- packages/core/src/context/types.ts | 13 ++++++++----- packages/core/src/plugins/index.ts | 6 +++--- packages/core/src/tasks/constants.ts | 13 +++++++++---- packages/engine-core/src/plugins.ts | 4 ++-- packages/engine-core/src/tasks/linking/linker.ts | 2 +- .../src/tasks/taskSingleCommand.ts | 2 +- .../src/tasks/taskStarterHello.ts | 2 +- 12 files changed, 43 insertions(+), 27 deletions(-) diff --git a/packages/app-harness/renative.json b/packages/app-harness/renative.json index d0f0055006..e69605d8e3 100644 --- a/packages/app-harness/renative.json +++ b/packages/app-harness/renative.json @@ -9,6 +9,9 @@ "integrations": { "@rnv/integration-starter": {} }, + "defaults": { + "portOffset": 10 + }, "plugins": { "react-native-safe-area-context": "4.9.0", "react-native-splash-screen": { diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 0ec9895d3b..4936eb46d9 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -82,9 +82,9 @@ export const generateBuildConfig = () => { }); const scopedPluginTemplates: Record = {}; - if (c.files.scopedPluginTemplates) { - Object.keys(c.files.scopedPluginTemplates).forEach((v) => { - const plgs = c.files.scopedPluginTemplates[v]; + if (c.files.scopedConfigTemplates) { + Object.keys(c.files.scopedConfigTemplates).forEach((v) => { + const plgs = c.files.scopedConfigTemplates[v].pluginTemplates; scopedPluginTemplates[v] = plgs; }); } diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 82dee2d994..c02ceff5e8 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -213,8 +213,8 @@ export const loadDefaultConfigTemplates = async () => { if (rnvConfigTemplates) { ctx.files.rnvConfigTemplates.config = rnvConfigTemplates; - ctx.files.scopedPluginTemplates = { - rnv: rnvConfigTemplates.pluginTemplates, + ctx.files.scopedConfigTemplates = { + rnv: rnvConfigTemplates, }; } diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index f31d9033c7..714b047c29 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -81,6 +81,12 @@ export const generateContextDefaults = (): RnvContext => ({ parse: () => { //NOOP }, + outputHelp: () => { + //NOOP + }, + allowUnknownOption() { + //NOOP + }, }, buildConfig: {}, command: '', @@ -215,9 +221,7 @@ export const generateContextDefaults = (): RnvContext => ({ config: {}, package: {}, }, - scopedPluginTemplates: { - configs: {}, - }, + scopedConfigTemplates: {}, workspace: { ...generateRnvConfigFileObj(), project: { diff --git a/packages/core/src/context/provider.ts b/packages/core/src/context/provider.ts index f9dfe12752..a3c1a811e7 100644 --- a/packages/core/src/context/provider.ts +++ b/packages/core/src/context/provider.ts @@ -1,6 +1,7 @@ +import type { ProgramOptionsKey } from '../tasks/constants'; import type { RnvContext } from './types'; // We separate this context access from the rest to avoid circular reference issues -export const getContext = (): RnvContext => { - return global.RNV_CONTEXT; +export const getContext = (): RnvContext => { + return global.RNV_CONTEXT as RnvContext; }; diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 95b8271ba2..efa5bc1d78 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -15,7 +15,7 @@ import { } from '../schema/configFiles/types'; import { NpmPackageFile } from '../configs/types'; import { ConfigFileBuildConfig } from '../schema/configFiles/buildConfig'; -import type { ParamKeys } from '../tasks/constants'; +import type { ParamKeys, ProgramOptionsKey } from '../tasks/constants'; import { ExecaChildProcess } from 'execa'; import { RnvPlugin } from '../plugins/types'; @@ -27,15 +27,18 @@ export type CreateContextOptions = { RNV_HOME_DIR?: string; }; -export type RnvContextProgram = ParamKeys & { +export type RnvContextProgram = ParamKeys & { args?: string[]; rawArgs?: string[]; option?: (cmd: string, desc: string) => void; parse?: (arg: string[]) => void; + allowUnknownOption: (p: boolean) => void; + outputHelp: () => void; + isHelpInvoked?: boolean; }; -export type RnvContext = { - program: RnvContextProgram; +export type RnvContext = { + program: RnvContextProgram; /** * Extra payload object used by 3rd party (ie @rnv/sdk-apple) to decorate context with extra typed information */ @@ -158,7 +161,7 @@ export type RnvContextFiles = { package?: NpmPackageFile; config?: ConfigFileTemplates; }; - scopedPluginTemplates: Record; + scopedConfigTemplates: Record; workspace: RnvContextFileObj & { project: RnvContextFileObj; appConfig: RnvContextFileObj; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 125ba5c482..8f381c87b0 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -539,10 +539,10 @@ const _parsePluginTemplateDependencies = ( const ptConfig = path.join(ptPath, RnvFileName.renativeTemplates); c.paths.scopedConfigTemplates.pluginTemplatesDirs[k] = ptPath; if (fsExistsSync(ptConfig)) { - const ptConfigs = c.files.scopedPluginTemplates; + const ptConfigs = c.files.scopedConfigTemplates; const ptConfigFile = readObjectSync(ptConfig); - if (ptConfigFile?.pluginTemplates) { - ptConfigs[k] = ptConfigFile?.pluginTemplates; + if (ptConfigFile) { + ptConfigs[k] = ptConfigFile; } // _parsePluginTemplateDependencies( diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 8285f6530e..d349499e86 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -10,7 +10,7 @@ export const DEFAULT_TASK_DESCRIPTIONS: Record = { [RnvTaskName.export]: 'Export the app into deployable binary', }; -export const RnvTaskOptions: Record = { +const _RnvTaskOptions = { help: { shortcut: 'h', description: 'Displays help info for particular command', @@ -291,14 +291,18 @@ export const RnvTaskOptions: Record = { }, }; -type ParamKeysType = typeof RnvTaskOptions; +type ParamKeysType = typeof _RnvTaskOptions; -type ProgramOptionsKey = keyof ParamKeysType; +export type ProgramOptionsKey = keyof ParamKeysType; + +export const RnvTaskOptions = _RnvTaskOptions as Record; //TODO: make this properly typed. Pass integration type to getContext? type ParamType = any; //boolean | string | undefined -export type ParamKeys = Partial>; +export type ParamKeys = Partial< + Record +>; (Object.keys(RnvTaskOptions) as ProgramOptionsKey[]).forEach((k) => { RnvTaskOptions[k].key = k; @@ -315,6 +319,7 @@ export const RnvTaskCoreOptionPresets = { // platform is necessary to be accepted as base for the `rnv` command to work with enginie plugins RnvTaskOptions.platform, RnvTaskOptions.help, + RnvTaskOptions.printExec, ].concat(arr || []), }; diff --git a/packages/engine-core/src/plugins.ts b/packages/engine-core/src/plugins.ts index a6a4ad285e..e87f11e8b9 100644 --- a/packages/engine-core/src/plugins.ts +++ b/packages/engine-core/src/plugins.ts @@ -37,8 +37,8 @@ export const getPluginList = (isUpdate = false) => { let i = 1; - Object.keys(c.files.scopedPluginTemplates).forEach((pk) => { - const plugins = c.files.scopedPluginTemplates[pk]; + Object.keys(c.files.scopedConfigTemplates).forEach((pk) => { + const plugins = c.files.scopedConfigTemplates[pk]?.pluginTemplates; if (!plugins) return; Object.keys(plugins).forEach((k) => { const plugin = plugins[k]; diff --git a/packages/engine-core/src/tasks/linking/linker.ts b/packages/engine-core/src/tasks/linking/linker.ts index 68fa41e380..a84244e216 100644 --- a/packages/engine-core/src/tasks/linking/linker.ts +++ b/packages/engine-core/src/tasks/linking/linker.ts @@ -71,7 +71,7 @@ export const traverseTargetProject = (sourceDir: string) => { }; export const getSourceDir = () => { - const ctx = getContext(); + const ctx = getContext(); const dirOption = ctx.program.dir; if (dirOption) { diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index 95988e8caa..51ec4b8f03 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -1,6 +1,6 @@ import { RnvContext, RnvTaskOptionPresets, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; -const task: RnvTaskFn = async (c: RnvContext) => { +const task: RnvTaskFn = async (c: RnvContext) => { logSuccess(`Hello from Integration Starter single command! --my-opt: "${c.program.myOpt}"`); }; diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index 14193740e5..7ff3728b7b 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -1,6 +1,6 @@ import { RnvContext, RnvTaskOptionPresets, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; -const task: RnvTaskFn = async (c: RnvContext) => { +const task: RnvTaskFn = async (c: RnvContext) => { logSuccess(`Hello from Integration Starter! --my-opt: "${c.program.myOpt}"`); }; From 5c484b9f269e26da973776f9a6c0c701a905e8d0 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 19 Mar 2024 01:18:31 +0100 Subject: [PATCH 058/175] fix UTs --- packages/app-harness/.gitignore | 2 ++ .../src/projects/__tests__/{index.test.ts => assets.test.ts} | 2 +- packages/core/src/tasks/__tests__/index.test.ts | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 packages/app-harness/.gitignore rename packages/core/src/projects/__tests__/{index.test.ts => assets.test.ts} (97%) diff --git a/packages/app-harness/.gitignore b/packages/app-harness/.gitignore new file mode 100644 index 0000000000..5a1cde4990 --- /dev/null +++ b/packages/app-harness/.gitignore @@ -0,0 +1,2 @@ + +# Inherit from root \ No newline at end of file diff --git a/packages/core/src/projects/__tests__/index.test.ts b/packages/core/src/projects/__tests__/assets.test.ts similarity index 97% rename from packages/core/src/projects/__tests__/index.test.ts rename to packages/core/src/projects/__tests__/assets.test.ts index fd4870694b..ef97df62e8 100644 --- a/packages/core/src/projects/__tests__/index.test.ts +++ b/packages/core/src/projects/__tests__/assets.test.ts @@ -1,4 +1,4 @@ -import { copyAssetsFolder } from '..'; +import { copyAssetsFolder } from '../assets'; import { logWarning } from '../../logger'; import path from 'path'; import { isPlatformActive } from '../../platforms'; diff --git a/packages/core/src/tasks/__tests__/index.test.ts b/packages/core/src/tasks/__tests__/index.test.ts index a765ae4834..cf0db9725f 100644 --- a/packages/core/src/tasks/__tests__/index.test.ts +++ b/packages/core/src/tasks/__tests__/index.test.ts @@ -4,7 +4,7 @@ import { RnvEngine } from '../../engines/types'; import { DEFAULT_TASK_DESCRIPTIONS } from '../constants'; import { getContext } from '../../context/provider'; import { generateContextDefaults } from '../../context/defaults'; -import { checkIfProjectAndNodeModulesExists } from '../../projects/dependencyManager'; +import { checkIfProjectAndNodeModulesExists } from '../../projects/dependencies'; jest.mock('../../engines'); jest.mock('chalk'); @@ -12,7 +12,7 @@ jest.mock('../../logger'); jest.mock('../../api'); jest.mock('../../context/provider'); jest.mock('../constants', () => ({ DEFAULT_TASK_DESCRIPTIONS: {} })); -jest.mock('../../projects/dependencyManager'); +jest.mock('../../projects/dependencies'); beforeEach(() => { // NOTE: do not call createRnvContext() in core library itself From fa493aefbcaa2c03c96b0af1657fc1f0c76f1791 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 19 Mar 2024 12:51:59 +0100 Subject: [PATCH 059/175] logging refactor --- .../app-harness/buildHooks/src/setup/apple.ts | 4 +- packages/cli/src/index.ts | 11 +-- packages/cli/src/logger/index.ts | 70 +++++++++---------- packages/core/src/api/defaults.ts | 2 - packages/core/src/api/types.ts | 6 +- packages/core/src/context/defaults.ts | 7 +- packages/core/src/context/types.ts | 7 +- packages/core/src/logger/index.ts | 7 +- packages/core/src/platforms/index.ts | 6 +- packages/core/src/runner.ts | 12 ++++ packages/core/src/system/fs.ts | 3 +- packages/core/src/templates/index.ts | 2 +- .../src/tasks/template/taskTemplateApply.ts | 2 +- packages/engine-rn-macos/src/tasks/taskRun.ts | 2 +- .../engine-rn-macos/src/tasks/taskStart.ts | 3 +- packages/engine-rn-next/src/sdk.ts | 4 +- .../engine-rn-next/src/tasks/taskStart.ts | 2 +- packages/engine-rn-tvos/src/tasks/taskRun.ts | 4 +- .../engine-rn-tvos/src/tasks/taskStart.ts | 3 +- packages/engine-rn-web/src/tasks/taskStart.ts | 3 +- .../engine-rn-windows/src/tasks/taskStart.ts | 3 +- packages/engine-rn/src/tasks/taskRun.ts | 4 +- packages/engine-rn/src/tasks/taskStart.ts | 3 +- packages/sdk-android/src/deviceManager.ts | 7 +- packages/sdk-android/src/runner.ts | 4 +- packages/sdk-react-native/src/metroRunner.ts | 2 +- packages/sdk-webos/src/deviceManager.ts | 8 +-- packages/sdk-webpack/src/index.ts | 4 +- 28 files changed, 94 insertions(+), 101 deletions(-) diff --git a/packages/app-harness/buildHooks/src/setup/apple.ts b/packages/app-harness/buildHooks/src/setup/apple.ts index a324865728..cc6cb36619 100644 --- a/packages/app-harness/buildHooks/src/setup/apple.ts +++ b/packages/app-harness/buildHooks/src/setup/apple.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { executeAsync, logInfo, logError, RnvContext } from '@rnv/core'; +import { executeAsync, logInfo, RnvContext } from '@rnv/core'; export default async (c: RnvContext) => { // TODO: This is a temporary solution. We need to find a better way to handle untyped values @@ -7,7 +7,7 @@ export default async (c: RnvContext) => { const certRelativePath = cfPrivate?.apple?.p12?.path; if (!certRelativePath) { - return logError('No configPrivate found. You sure you decrypted?', true); + return Promise.reject('No configPrivate found. You sure you decrypted?'); } const certPass = cfPrivate?.apple?.p12?.password; const certPath = path.resolve(c.paths.workspace.project.dir, certRelativePath); diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 923b0b0060..b08cf2591b 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -2,7 +2,6 @@ import program from 'commander'; import fs from 'fs'; import path from 'path'; import { - logComplete, logError, getContext, generateStringFromTaskOption, @@ -19,13 +18,14 @@ import { executeRnvCore, getConfigProp, doResolve, + exitRnvCore, } from '@rnv/core'; import { Telemetry } from '@rnv/sdk-telemetry'; import EngineCore from '@rnv/engine-core'; import Spinner from './ora'; import Prompt from './prompt'; -import Logger from './logger'; +import Logger, { logSummary } from './logger'; const terminateProcesses = (): void => { const { runningProcesses } = getContext(); @@ -93,11 +93,14 @@ export const run = ({ RNV_HOME_DIR }: { RNV_HOME_DIR?: string }) => { RNV_HOME_DIR, }) .then(() => { - logComplete(!getContext().runtime.keepSessionActive); + logSummary(); + exitRnvCore(0); }) .catch((e: unknown) => { terminateProcesses(); - logError(e, true); + logError(e); + logSummary(); + exitRnvCore(1); }); }; diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index 76ac883922..86a1734384 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -26,7 +26,6 @@ let chalkBlue: any = _chalk.rgb(colorBlue.r, colorBlue.g, colorBlue.b); // const RNV = 'ReNative'; const PRIVATE_PARAMS = ['-k', '--key']; -let _currentProcess: NodeJS.Process; let _isInfoEnabled = false; let _infoFilter: Array = []; // let _c: RnvContext; @@ -42,7 +41,6 @@ export const logInitialize = () => { // cnf(); const ctx = getContext(); - _currentProcess = ctx.process; _isInfoEnabled = !!ctx.program.info; _jsonOnly = !!ctx.program.json; _infoFilter = ctx.program.info?.split?.(','); @@ -128,7 +126,7 @@ export function stripAnsi(string: string) { // }; // const _configureLogger = (c: RnvContext, analytics: AnalyticsApi) => { -// // ctx.logMessages = []; +// // ctx.logging.logMessages = []; // // _c = c; // // if (!ctx.timeStart) ctx.timeStart = new Date(); @@ -153,7 +151,7 @@ _updateDefaultColors(); export const logAndSave = (msg: string, skipLog?: boolean) => { const ctx = getContext(); - if (ctx.logMessages && !ctx.logMessages.includes(msg)) ctx.logMessages.push(msg); + if (ctx.logging.logMessages && !ctx.logging.logMessages.includes(msg)) ctx.logging.logMessages.push(msg); if (!skipLog) console.log(`${msg}`); }; @@ -192,7 +190,7 @@ export const logToSummary = (v: string, sanitizePaths?: () => string) => { const ctx = getContext(); if (ctx.program?.isHelpInvoked) return; const _v = sanitizePaths ? _sanitizePaths(v) : v; - ctx.logMessages.push(`\n${_v}`); + ctx.logging.logMessages.push(`\n${_v}`); }; export const logRaw = (...args: Array) => { @@ -206,7 +204,7 @@ export const logRaw = (...args: Array) => { console.log.apply(null, args); }; -export const logSummary = (header = '✔ SUMMARY') => { +export const logSummary = (opts?: { header?: string; headerStyle?: 'success' | 'warning' | 'error' | 'none' }) => { const ctx = getContext(); if (ctx.program?.isHelpInvoked) return; @@ -220,9 +218,9 @@ export const logSummary = (header = '✔ SUMMARY') => { } let logContent = ''; //= printIntoBox(`All good as ${ICN_UNICORN} `); - if (ctx.logMessages && ctx.logMessages.length) { + if (ctx.logging.logMessages && ctx.logging.logMessages.length) { logContent = ''; - ctx.logMessages.forEach((m) => { + ctx.logging.logMessages.forEach((m) => { logContent += `│ ${m}\n`; }); } @@ -235,9 +233,26 @@ export const logSummary = (header = '✔ SUMMARY') => { // if (ctx.process) { // envString = `${ctx.process.platform} | ${ctx.process.arch} | node v${ctx.process.versions?.node}`; // } - + const defaultHeaderStyle = ctx.logging.containsError + ? 'error' + : ctx.logging.containsWarning + ? 'warning' + : 'success'; + const headerStyle = opts?.headerStyle || defaultHeaderStyle; + + const headerPrefix = + headerStyle === 'success' ? '✔ ' : headerStyle === 'warning' ? '⚠ ' : headerStyle === 'error' ? '⨯ ' : ''; + const headerTextPlain = `${headerPrefix}${opts?.header || 'SUMMARY'}`; + const headerChalk = + headerStyle === 'success' + ? currentChalk.green.bold + : headerStyle === 'warning' + ? currentChalk.yellow.bold + : headerStyle === 'error' + ? currentChalk.green.red + : (v: string) => v; let str = printBoxStart( - `${currentChalk.green.bold(header)} ${timeString} | rnv@${ctx.rnvVersion}`, + `${headerChalk(headerTextPlain)} ${timeString} | rnv@${ctx.rnvVersion}`, getCurrentCommand() ); @@ -496,6 +511,7 @@ export const logHook = (hook = '', msg = '') => { }; export const logWarning = (msg: string | boolean | unknown) => { + const ctx = getContext(); const msgSn = typeof msg === 'string' ? _sanitizePaths(msg) : String(msg); if (_jsonOnly) { return _printJson({ @@ -505,6 +521,7 @@ export const logWarning = (msg: string | boolean | unknown) => { message: stripAnsi(msgSn), }); } + ctx.logging.containsWarning = true; logAndSave(currentChalk.yellow(`warn:${_getCurrentTask()} ${msgSn}`)); }; @@ -546,12 +563,6 @@ export const logDebug = (...args: Array) => { export const isInfoEnabled = () => _isInfoEnabled; -export const logComplete = (isEnd = false) => { - if (_jsonOnly) return; - // console.log(currentChalk.green.bold(`✔ Done`)); - if (isEnd) logEnd(0); -}; - export const logSuccess = (msg: string) => { if (_jsonOnly) { return _printJson({ @@ -563,7 +574,7 @@ export const logSuccess = (msg: string) => { logAndSave(`${currentChalk.magenta(`info: ✔`)} ${_sanitizePaths(msg)}`); }; -export const logError = (e: Error | string | unknown, isEnd = false, skipAnalytics = false) => { +export const logError = (e: Error | string | unknown, opts?: { skipAnalytics: boolean }) => { let err = ''; if (typeof e === 'string') { err = e; @@ -572,7 +583,7 @@ export const logError = (e: Error | string | unknown, isEnd = false, skipAnalyti } const ctx = getContext(); const api = getApi(); - if (!skipAnalytics) { + if (!opts?.skipAnalytics) { const extra = { command: getCurrentCommand(), version: ctx.rnvVersion, @@ -585,6 +596,7 @@ export const logError = (e: Error | string | unknown, isEnd = false, skipAnalyti }; api.analytics.captureException(err, { extra }); } + ctx.logging.containsError = true; if (_jsonOnly) { _printJson({ @@ -594,25 +606,9 @@ export const logError = (e: Error | string | unknown, isEnd = false, skipAnalyti message: stripAnsi(_sanitizePaths(err)), }); } else if (e && e instanceof Error) { - logAndSave(currentChalk.red(`error: ⨯ ${_getCurrentTask()} ${e.stack || e}\n`), isEnd); + logAndSave(currentChalk.red(`error: ⨯ ${_getCurrentTask()} ${e.stack || e}\n`)); } else { - logAndSave(currentChalk.red(`error: ⨯ ${_getCurrentTask()} ${e}`), isEnd); - } - - ctx.runtime.keepSessionActive = false; - if (isEnd) logEnd(1); -}; - -export const logEnd = (code: number) => { - const api = getApi(); - if (!_jsonOnly) { - logSummary(); - } - - if (_currentProcess) { - api.analytics.teardown().then(() => { - _currentProcess.exit(code); - }); + logAndSave(currentChalk.red(`error: ⨯ ${_getCurrentTask()} ${e}`)); } }; @@ -682,7 +678,6 @@ export const printBoxEnd = () => _defaultColor('└───────── const Logger: RnvApiLogger = { logHook, - logEnd, logInfo, logTask, logError, @@ -692,7 +687,6 @@ const Logger: RnvApiLogger = { logWarning, logSuccess, logWelcome, - logComplete, logInitialize, logAndSave, getCurrentCommand, diff --git a/packages/core/src/api/defaults.ts b/packages/core/src/api/defaults.ts index 2660978183..0ed0bdac46 100644 --- a/packages/core/src/api/defaults.ts +++ b/packages/core/src/api/defaults.ts @@ -35,9 +35,7 @@ export const generateApiDefaults = (): RnvApi => ({ logAndSave: defaultLog, chalk: defaultLog, logAppInfo: defaultLog, - logComplete: defaultLog, logDebug: defaultLog, - logEnd: defaultLog, logError: defaultLog, logExitTask: defaultLog, logHook: defaultLog, diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index 23ab631557..fb4d3a289b 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -68,7 +68,7 @@ export type RnvApiLogger = { getCurrentCommand: (excludeDollar: boolean) => void; logToSummary: (v: string, sanitizePaths?: () => string) => void; logRaw: (...args: Array) => void; - logSummary: (header: string) => void; + logSummary: (opts?: { header: string }) => void; logTask: (task: string, customChalk?: any) => void; logInitTask: (task: string, customChalk?: string | ((s: string) => string)) => void; logExitTask: (task: string, customChalk?: (s: string) => string) => void; @@ -78,10 +78,8 @@ export type RnvApiLogger = { logDefault: (task: string, customChalk?: any) => void; logDebug: (...args: Array) => void; isInfoEnabled: () => boolean; - logComplete: (isEnd?: boolean) => void; logSuccess: (msg: string) => void; - logError: (e: Error | string | unknown, isEnd?: boolean, skipAnalytics?: boolean) => void; - logEnd: (code: number) => void; + logError: (e: Error | string | unknown, opts?: { skipAnalytics: boolean }) => void; logInitialize: () => void; logAppInfo: (c: RnvContext) => void; printIntoBox: (str: string) => string; diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 714b047c29..d50ba24d5c 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -51,7 +51,6 @@ const runtime: RnvContext['runtime'] = { versionCheckCompleted: false, requiresForcedTemplateApply: false, forceBuildHookRebuild: false, - keepSessionActive: false, requiresBootstrap: false, port: 3000, runtimeExtraProps: {}, @@ -60,7 +59,11 @@ const runtime: RnvContext['runtime'] = { export const generateContextDefaults = (): RnvContext => ({ isDefault: true, isSystemWin: false, - logMessages: [], + logging: { + logMessages: [], + containsError: false, + containsWarning: false, + }, timeEnd: new Date(), timeStart: new Date(), payload: {}, diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index efa5bc1d78..bc1e485425 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -76,7 +76,11 @@ export type RnvContext; + logging: { + logMessages: Array; + containsError: boolean; + containsWarning: boolean; + }; timeStart: Date; timeEnd: Date; isDefault: boolean; @@ -101,7 +105,6 @@ export type RnvContextRuntime = { platform: RnvPlatform; isTargetTrue: boolean; bundleAssets: boolean; - keepSessionActive: boolean; hasAllEnginesRegistered: boolean; requiresBootstrap: boolean; forceBuildHookRebuild: boolean; diff --git a/packages/core/src/logger/index.ts b/packages/core/src/logger/index.ts index bf4b32238a..b447f2e9ab 100644 --- a/packages/core/src/logger/index.ts +++ b/packages/core/src/logger/index.ts @@ -39,14 +39,9 @@ export const logDebug: RnvApiLogger['logDebug'] = (...args) => { export const isInfoEnabled: RnvApiLogger['isInfoEnabled'] = () => getApi().logger.isInfoEnabled(); -export const logComplete: RnvApiLogger['logComplete'] = (isEnd) => getApi().logger.logComplete(isEnd); - export const logSuccess: RnvApiLogger['logSuccess'] = (msg) => getApi().logger.logSuccess(msg); -export const logError: RnvApiLogger['logError'] = (e, isEnd, skipAnalytics) => - getApi().logger.logError(e, isEnd, skipAnalytics); - -export const logEnd: RnvApiLogger['logEnd'] = (code) => getApi().logger.logEnd(code); +export const logError: RnvApiLogger['logError'] = (e, skipAnalytics) => getApi().logger.logError(e, skipAnalytics); export const logInitialize: RnvApiLogger['logInitialize'] = () => { getApi().logger.logInitialize(); diff --git a/packages/core/src/platforms/index.ts b/packages/core/src/platforms/index.ts index dbd5fb15ae..e6f22cf387 100644 --- a/packages/core/src/platforms/index.ts +++ b/packages/core/src/platforms/index.ts @@ -12,11 +12,7 @@ import { getContext } from '../context/provider'; export const logErrorPlatform = () => { const c = getContext(); - logError( - `Platform: ${chalk().bold(c.platform)} doesn't support command: ${chalk().bold(c.command)}`, - true // kill it if we're not supporting this - ); - return false; + return Promise.reject(`Platform: ${chalk().bold(c.platform)} doesn't support command: ${chalk().bold(c.command)}`); }; export const generatePlatformChoices = () => { diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index f7fc6c9dfb..57dea7c977 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -7,6 +7,18 @@ import { findSuitableGlobalTask, findSuitableTask, initializeTask } from './task import { updateRenativeConfigs } from './plugins'; import { checkAndBootstrapIfRequired } from './projects/bootstrap'; import { loadDefaultConfigTemplates } from './configs'; +import { getApi } from './api/provider'; + +export const exitRnvCore = async (code: number) => { + const ctx = getContext(); + const api = getApi(); + + if (ctx.process) { + api.analytics.teardown().then(() => { + ctx.process.exit(code); + }); + } +}; export const executeRnvCore = async () => { const c = getContext(); diff --git a/packages/core/src/system/fs.ts b/packages/core/src/system/fs.ts index a2a3373652..5217867da1 100755 --- a/packages/core/src/system/fs.ts +++ b/packages/core/src/system/fs.ts @@ -777,8 +777,7 @@ export const loadFile = >( return fileObj[key]; } catch (e) { - logError(`loadFile: ${pathObj[key]} :: ${e}`, true); // crash if there's an error in the config file - return false; + throw new Error(`loadFile: ${pathObj[key]} :: ${e}`); // crash if there's an error in the config file } }; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index b9fefec094..d5a8d42ece 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -307,7 +307,7 @@ export const getInstalledTemplateOptions = (): PromptOptions | null => { if (c.buildConfig.templates) { return generateOptions(c.buildConfig.templates); } - logError("You don't have any local templates installed", false, true); + logError("You don't have any local templates installed", { skipAnalytics: true }); return null; }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 1dfd34019d..ed0a232b28 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -27,7 +27,7 @@ const taskTemplateApply: RnvTaskFn = async (c, _parentTask, originTask) => { return true; } - const opts = getInstalledTemplateOptions(); + const opts = await getInstalledTemplateOptions(); const { template } = await inquirerPrompt({ type: 'list', diff --git a/packages/engine-rn-macos/src/tasks/taskRun.ts b/packages/engine-rn-macos/src/tasks/taskRun.ts index 4a28888851..5002f9201d 100644 --- a/packages/engine-rn-macos/src/tasks/taskRun.ts +++ b/packages/engine-rn-macos/src/tasks/taskRun.ts @@ -33,7 +33,7 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { await startBundlerIfRequired(RnvTaskName.run, originTask); await runXcodeProject(); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } return waitForBundlerIfRequired(); } diff --git a/packages/engine-rn-macos/src/tasks/taskStart.ts b/packages/engine-rn-macos/src/tasks/taskStart.ts index 309aba751b..6e63335013 100644 --- a/packages/engine-rn-macos/src/tasks/taskStart.ts +++ b/packages/engine-rn-macos/src/tasks/taskStart.ts @@ -4,7 +4,6 @@ import { executeTask, shouldSkipTask, logTask, - logError, RnvTaskOptionPresets, RnvTaskFn, RnvTask, @@ -24,7 +23,7 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); if (hosted) { - return logError('This platform does not support hosted mode', true); + return Promise.reject('This platform does not support hosted mode'); } // Disable reset for other commands (ie. cleaning platforms) c.runtime.disableReset = true; diff --git a/packages/engine-rn-next/src/sdk.ts b/packages/engine-rn-next/src/sdk.ts index cc847685e9..16fe411ba7 100644 --- a/packages/engine-rn-next/src/sdk.ts +++ b/packages/engine-rn-next/src/sdk.ts @@ -65,7 +65,7 @@ export const runWebNext = async () => { await _runWebBrowser(devServerHost, port, false); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } await runWebDevServer(c); } else { @@ -74,7 +74,7 @@ export const runWebNext = async () => { if (resetCompleted) { await _runWebBrowser(devServerHost, port, false); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } await runWebDevServer(c); } else { diff --git a/packages/engine-rn-next/src/tasks/taskStart.ts b/packages/engine-rn-next/src/tasks/taskStart.ts index a04d81fdd6..732d12bc6e 100644 --- a/packages/engine-rn-next/src/tasks/taskStart.ts +++ b/packages/engine-rn-next/src/tasks/taskStart.ts @@ -32,7 +32,7 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { if (shouldSkipTask(RnvTaskName.start, originTask)) return true; if (hosted) { - return logError('This platform does not support hosted mode', true); + return Promise.reject('This platform does not support hosted mode'); } switch (platform) { case 'web': diff --git a/packages/engine-rn-tvos/src/tasks/taskRun.ts b/packages/engine-rn-tvos/src/tasks/taskRun.ts index 7279f66c36..b661637032 100644 --- a/packages/engine-rn-tvos/src/tasks/taskRun.ts +++ b/packages/engine-rn-tvos/src/tasks/taskRun.ts @@ -40,7 +40,7 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { } await runAndroid(runDevice!); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } return waitForBundlerIfRequired(); } @@ -52,7 +52,7 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { await startBundlerIfRequired(RnvTaskName.run, originTask); await runXcodeProject(runDeviceArgs); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } return waitForBundlerIfRequired(); } diff --git a/packages/engine-rn-tvos/src/tasks/taskStart.ts b/packages/engine-rn-tvos/src/tasks/taskStart.ts index a00d47fb10..d094608f3b 100644 --- a/packages/engine-rn-tvos/src/tasks/taskStart.ts +++ b/packages/engine-rn-tvos/src/tasks/taskStart.ts @@ -4,7 +4,6 @@ import { executeTask, shouldSkipTask, logTask, - logError, RnvTaskOptionPresets, RnvTaskFn, RnvTask, @@ -26,7 +25,7 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); if (hosted) { - return logError('This platform does not support hosted mode', true); + return Promise.reject('This platform does not support hosted mode'); } // Disable reset for other commands (ie. cleaning platforms) c.runtime.disableReset = true; diff --git a/packages/engine-rn-web/src/tasks/taskStart.ts b/packages/engine-rn-web/src/tasks/taskStart.ts index f50bdf875f..e04e7029e2 100644 --- a/packages/engine-rn-web/src/tasks/taskStart.ts +++ b/packages/engine-rn-web/src/tasks/taskStart.ts @@ -43,11 +43,10 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { case 'webos': case 'tizenmobile': case 'tizenwatch': - // c.runtime.keepSessionActive = true; return runWebpackServer(isWeinreEnabled); default: if (hosted) { - return logError('This platform does not support hosted mode', true); + return Promise.reject('This platform does not support hosted mode'); } return logErrorPlatform(); } diff --git a/packages/engine-rn-windows/src/tasks/taskStart.ts b/packages/engine-rn-windows/src/tasks/taskStart.ts index c100a6b4b9..fb8a3b1fdf 100644 --- a/packages/engine-rn-windows/src/tasks/taskStart.ts +++ b/packages/engine-rn-windows/src/tasks/taskStart.ts @@ -6,7 +6,6 @@ import { executeTask, shouldSkipTask, doResolve, - logError, RnvTask, PlatformKey, RnvTaskName, @@ -25,7 +24,7 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); if (hosted) { - return logError('This platform does not support hosted mode', true); + return Promise.reject('This platform does not support hosted mode'); } // Disable reset for other commands (ie. cleaning platforms) c.runtime.disableReset = true; diff --git a/packages/engine-rn/src/tasks/taskRun.ts b/packages/engine-rn/src/tasks/taskRun.ts index 5b82196228..735a443c7f 100644 --- a/packages/engine-rn/src/tasks/taskRun.ts +++ b/packages/engine-rn/src/tasks/taskRun.ts @@ -36,7 +36,7 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { await startBundlerIfRequired(RnvTaskName.run, originTask); await runXcodeProject(runDeviceArgs); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } return waitForBundlerIfRequired(); } @@ -57,7 +57,7 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { } await runAndroid(runDevice!); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } return waitForBundlerIfRequired(); } diff --git a/packages/engine-rn/src/tasks/taskStart.ts b/packages/engine-rn/src/tasks/taskStart.ts index 2840748c69..04df3c6410 100644 --- a/packages/engine-rn/src/tasks/taskStart.ts +++ b/packages/engine-rn/src/tasks/taskStart.ts @@ -4,7 +4,6 @@ import { RnvTaskFn, executeTask, shouldSkipTask, - logError, RnvTask, RnvTaskName, RnvTaskOptionPresets, @@ -18,7 +17,7 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); if (hosted) { - return logError('This platform does not support hosted mode', true); + return Promise.reject('This platform does not support hosted mode'); } // Disable reset for other commands (ie. cleaning platforms) c.runtime.disableReset = true; diff --git a/packages/sdk-android/src/deviceManager.ts b/packages/sdk-android/src/deviceManager.ts index 6e508fd232..50e784b924 100644 --- a/packages/sdk-android/src/deviceManager.ts +++ b/packages/sdk-android/src/deviceManager.ts @@ -94,8 +94,7 @@ export const launchAndroidSimulator = async ( if (err.includes && err.includes('WHPX')) { logWarning(err); logError( - 'It seems you do not have the Windows Hypervisor Platform virtualization enabled. Enter windows features in the Windows search box and select Turn Windows features on or off in the search results. In the Windows Features dialog, enable both Hyper-V and Windows Hypervisor Platform.', - true + 'It seems you do not have the Windows Hypervisor Platform virtualization enabled. Enter windows features in the Windows search box and select Turn Windows features on or off in the search results. In the Windows Features dialog, enable both Hyper-V and Windows Hypervisor Platform.' ); return false; } @@ -448,7 +447,7 @@ export const connectToWifiDevice = async (target: string) => { const deviceResponse = await execCLI(CLI_ANDROID_ADB, connect_str); if (deviceResponse.includes('connected')) return true; - logError(`Failed to ${connect_str}`, false, true); + logError(`Failed to ${connect_str}`, { skipAnalytics: true }); return false; }; @@ -647,7 +646,7 @@ const _createEmulator = (c: RnvContext, apiVersion: string, emuPlatform: string, ExecOptionsPresets.INHERIT_OUTPUT_NO_SPINNER ) ) - .catch((e) => logError(e, true)); + .catch((e) => logError(e)); }; const waitForEmulatorToBeReady = (emulator: string) => diff --git a/packages/sdk-android/src/runner.ts b/packages/sdk-android/src/runner.ts index 4b6e6cb87d..984351dfe6 100644 --- a/packages/sdk-android/src/runner.ts +++ b/packages/sdk-android/src/runner.ts @@ -99,7 +99,7 @@ export const getAndroidDeviceToRunOn = async () => { if (activeDevices.length || inactiveDevices.length) { // No device active and device param is passed, exiting if (c.program.device && !activeDevices.length) { - return logError('No active devices found, please connect one or remove the device argument', true); + return Promise.reject('No active devices found, please connect one or remove the device argument'); } if (!foundDevice && (_isString(target) || _isString(device))) { logInfo( @@ -142,7 +142,7 @@ export const getAndroidDeviceToRunOn = async () => { } } else { if (c.program.device) { - return logError('No active devices found, please connect one or remove the device argument', true); + return Promise.reject('No active devices found, please connect one or remove the device argument'); } await askForNewEmulator(); const device = await checkForActiveEmulator(); diff --git a/packages/sdk-react-native/src/metroRunner.ts b/packages/sdk-react-native/src/metroRunner.ts index a745fc61f4..d23b8ea0ff 100644 --- a/packages/sdk-react-native/src/metroRunner.ts +++ b/packages/sdk-react-native/src/metroRunner.ts @@ -114,6 +114,6 @@ Dev server running at: ${url} ...EnvVars.RNV_APP_ID(), ...CoreEnvVars.RNV_EXTENSIONS(), }, - }).catch((e) => logError(e, true)); + }).catch((e) => logError(e)); return true; }; diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index eb65f0d2b9..b8ce77ba74 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -20,7 +20,6 @@ import { ExecOptionsPresets, isSystemLinux, isSystemMac, - logError, logSuccess, getConfigProp, getAppFolder, @@ -138,11 +137,10 @@ const launchAppOnSimulator = async (c: RnvContext, appPath: string) => { const webOS_cli_version_number = semver.coerce(webOS_cli_version); if (!webOS_cli_version_number) { - return logError(`Couldn't find webOS TV CLI. WebOS TV simulator requires webOS TV CLI 1.12 or higher.`, true); + return Promise.reject(`Couldn't find webOS TV CLI. WebOS TV simulator requires webOS TV CLI 1.12 or higher.`); } else if (semver.lt(webOS_cli_version_number, '1.12.0')) { - return logError( - `WebOS TV simulator requires webOS TV CLI 1.12 or higher. You are using webOS TV CLI ${webOS_cli_version_number}.`, - true + return Promise.reject( + `WebOS TV simulator requires webOS TV CLI 1.12 or higher. You are using webOS TV CLI ${webOS_cli_version_number}.` ); } diff --git a/packages/sdk-webpack/src/index.ts b/packages/sdk-webpack/src/index.ts index 6fb617c717..02fbaf5662 100644 --- a/packages/sdk-webpack/src/index.ts +++ b/packages/sdk-webpack/src/index.ts @@ -247,7 +247,7 @@ export const runWebpackServer = async (enableRemoteDebugger?: boolean) => { ); await _runWebBrowser(devServerHost, port, false); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } await _runWebDevServer(c, enableRemoteDebugger); } else { @@ -256,7 +256,7 @@ export const runWebpackServer = async (enableRemoteDebugger?: boolean) => { if (resetCompleted) { await _runWebBrowser(devServerHost, port, false); if (!bundleAssets) { - logSummary('BUNDLER STARTED'); + logSummary({ header: 'BUNDLER STARTED' }); } await _runWebDevServer(c, enableRemoteDebugger); } else { From 8bc33a3e53793256edf4d055dffa896adff4c995 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Tue, 19 Mar 2024 16:45:44 +0200 Subject: [PATCH 060/175] make flipper usage configurable --- packages/core/src/schema/platforms/fragments/android.ts | 1 + packages/sdk-react-native/src/env.ts | 7 +++++++ packages/sdk-react-native/src/iosRunner.ts | 1 + 3 files changed, 9 insertions(+) diff --git a/packages/core/src/schema/platforms/fragments/android.ts b/packages/core/src/schema/platforms/fragments/android.ts index 44c73f0e8a..825219105e 100644 --- a/packages/core/src/schema/platforms/fragments/android.ts +++ b/packages/core/src/schema/platforms/fragments/android.ts @@ -87,4 +87,5 @@ export const PlatformAndroidFragment = { storeFile: z.string().describe('Name of the store file in android project').optional(), keyAlias: z.string().describe('Key alias of the store file in android project').optional(), newArchEnabled: z.boolean().optional().describe('Enables new arch for android. Default: false'), + flipperEnabled: z.boolean().optional().describe('Enables flipper for ios. Default: true'), }; diff --git a/packages/sdk-react-native/src/env.ts b/packages/sdk-react-native/src/env.ts index eaa544a605..841badac77 100644 --- a/packages/sdk-react-native/src/env.ts +++ b/packages/sdk-react-native/src/env.ts @@ -31,6 +31,13 @@ export const EnvVars = { } return {}; }, + RNV_FLIPPER_ENABLED: () => { + const enableFlipper = getConfigProp('flipperEnabled', true); + if (!enableFlipper) { + return { NO_FLIPPER: '1' }; + } + return {}; + }, RNV_SKIP_LINKING: () => { const skipPlugins: string[] = []; parsePlugins( diff --git a/packages/sdk-react-native/src/iosRunner.ts b/packages/sdk-react-native/src/iosRunner.ts index 09314c940e..062859d098 100644 --- a/packages/sdk-react-native/src/iosRunner.ts +++ b/packages/sdk-react-native/src/iosRunner.ts @@ -198,6 +198,7 @@ export const runCocoaPods = async () => { ...EnvVars.RNV_REACT_NATIVE_PATH(), ...EnvVars.RCT_NEW_ARCH_ENABLED(), ...EnvVars.RNV_SKIP_LINKING(), + ...EnvVars.RNV_FLIPPER_ENABLED(), }; if (c.program.updatePods) { From 6e20734ac77655942abb3d46dc9a74d845c920ac Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 19 Mar 2024 16:35:32 +0100 Subject: [PATCH 061/175] fix overrides --- packages/app-harness/package.json | 1 - packages/core/src/configs/index.ts | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index 887e7694c8..5604ab61f2 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -58,7 +58,6 @@ "react-native-tvos": "0.73.6-0", "react-native-web": "0.19.9", "react-native-safe-area-context": "4.9.0", - "@react-native-community/cli-platform-ios": "11.3.7", "react-native-fs": "2.20.0", "rn-fetch-blob": "0.12.0" }, diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index c02ceff5e8..03959d2043 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -207,9 +207,10 @@ export const loadDefaultConfigTemplates = async () => { if (!configTemplatesPath) return Promise.reject(`@rnv/config-templates missing`); - const rnvConfigTemplates = readObjectSync( - path.join(configTemplatesPath, 'renative.templates.json') - ); + ctx.paths.rnvConfigTemplates.pluginTemplatesDir = path.join(configTemplatesPath, 'pluginTemplates'); + ctx.paths.rnvConfigTemplates.config = path.join(configTemplatesPath, 'renative.templates.json'); + + const rnvConfigTemplates = readObjectSync(ctx.paths.rnvConfigTemplates.config); if (rnvConfigTemplates) { ctx.files.rnvConfigTemplates.config = rnvConfigTemplates; From 7839bcbe2022ab29f0770268deceb1232d918f19 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 19 Mar 2024 16:47:29 +0100 Subject: [PATCH 062/175] fix UTs --- packages/core/src/context/__tests__/index.test.ts | 12 ++++++------ .../engine-rn-tvos/src/tasks/__tests__/start.test.ts | 8 +++----- packages/sdk-android/src/__tests__/runner.test.ts | 8 ++++++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/core/src/context/__tests__/index.test.ts b/packages/core/src/context/__tests__/index.test.ts index b60b18375d..979d433058 100644 --- a/packages/core/src/context/__tests__/index.test.ts +++ b/packages/core/src/context/__tests__/index.test.ts @@ -6,18 +6,18 @@ jest.mock('process'); jest.mock('../../logger'); describe('Context tests', () => { - beforeAll(() => { + it('test getContext returns object with keys', async () => { + // GIVEN createRnvContext({ - program: {}, + program: {} as any, //Not important for this test process: process, cmd: 'command', subCmd: 'subcommand', RNV_HOME_DIR: '', }); - }); - - it('test getContext returns object with keys', async () => { + // WHEN const cKeys = Object.keys(getContext()).sort(); + // THEN const expectKeys = [ '_renativePluginCache', 'assetConfig', @@ -32,7 +32,7 @@ describe('Context tests', () => { 'isBuildHooksReady', 'isDefault', 'isSystemWin', - 'logMessages', + 'logging', 'paths', 'payload', 'platform', diff --git a/packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts b/packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts index 20513fbd7f..cd60d886ff 100644 --- a/packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts +++ b/packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts @@ -1,4 +1,4 @@ -import { createRnvContext, getContext, logError, doResolve, executeTask } from '@rnv/core'; +import { createRnvContext, getContext, doResolve, executeTask } from '@rnv/core'; import taskStart from '../taskStart'; import { startReactNative } from '@rnv/sdk-react-native'; @@ -49,8 +49,6 @@ test('Execute task.rnv.start in hosted mode', async () => { const ctx = getContext(); ctx.platform = 'tvos'; ctx.program.hosted = true; - // WHEN - await taskStart.fn?.(ctx, 'parent', undefined); - // THEN - expect(logError).toHaveBeenCalledWith('This platform does not support hosted mode', true); + // WHEN // THEN + await expect(taskStart.fn?.(ctx, 'parent', undefined)).rejects.toBe('This platform does not support hosted mode'); }); diff --git a/packages/sdk-android/src/__tests__/runner.test.ts b/packages/sdk-android/src/__tests__/runner.test.ts index a8e3766363..032677f207 100644 --- a/packages/sdk-android/src/__tests__/runner.test.ts +++ b/packages/sdk-android/src/__tests__/runner.test.ts @@ -28,7 +28,9 @@ describe('getAndroidDeviceToRunOn', () => { jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); //WHEN - await expect(getAndroidDeviceToRunOn()).resolves.toBe(undefined); + await expect(getAndroidDeviceToRunOn()).rejects.toBe( + 'No active devices found, please connect one or remove the device argument' + ); //THEN }); @@ -47,7 +49,9 @@ describe('getAndroidDeviceToRunOn', () => { jest.mocked(getAndroidTargets).mockResolvedValue([mockFoundDevice]); //WHEN - await expect(getAndroidDeviceToRunOn()).resolves.toBe(undefined); + await expect(getAndroidDeviceToRunOn()).rejects.toBe( + 'No active devices found, please connect one or remove the device argument' + ); //THEN expect(connectToWifiDevice).not.toHaveBeenCalled(); From e47b3c3ab102e8637d680f6c777c961f8e16ec4b Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 19 Mar 2024 23:35:47 +0100 Subject: [PATCH 063/175] reverting to RN 0.73.3. 0.73.6 contains bug where non node_module folders are ignored by metro bundler thus packages/** linked libs do not work --- packages/app-harness/package.json | 2 +- .../config-templates/renative.templates.json | 2 +- packages/template-starter/package.json | 2 +- yarn.lock | 216 +++++++++++++++++- 4 files changed, 209 insertions(+), 13 deletions(-) diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index 5604ab61f2..b657cf3bdf 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -48,7 +48,7 @@ "react": "18.2.0", "react-art": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.6", + "react-native": "0.73.3", "react-native-carplay": "2.3.0", "react-native-gesture-handler": "2.14.1", "react-native-orientation-locker": "1.5.0", diff --git a/packages/config-templates/renative.templates.json b/packages/config-templates/renative.templates.json index e5deb155fd..7ace2d20b1 100644 --- a/packages/config-templates/renative.templates.json +++ b/packages/config-templates/renative.templates.json @@ -1617,7 +1617,7 @@ "URL_NAME": "", "URL_SCHEME": "" }, - "version": "0.73.6" + "version": "0.73.3" }, "react-native-actionsheet": { "version": "2.4.2" diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index 9d15332b74..bf141e4a1f 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -119,7 +119,7 @@ "react": "18.2.0", "react-art": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.6", + "react-native": "0.73.3", "react-native-gesture-handler": "2.14.1", "react-native-tvos": "0.73.6-0", "react-native-web": "0.19.9" diff --git a/yarn.lock b/yarn.lock index 08d265c50a..c60f1a797f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3226,6 +3226,15 @@ execa "^5.0.0" prompts "^2.4.0" +"@react-native-community/cli-clean@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.2.tgz#d4f1730c3d22d816b4d513d330d5f3896a3f5921" + integrity sha512-90k2hCX0ddSFPT7EN7h5SZj0XZPXP0+y/++v262hssoey3nhurwF57NGWN0XAR0o9BSW7+mBfeInfabzDraO6A== + dependencies: + "@react-native-community/cli-tools" "12.3.2" + chalk "^4.1.2" + execa "^5.0.0" + "@react-native-community/cli-clean@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz#e8a7910bebc97266fd5068649013a03958021fc4" @@ -3247,6 +3256,18 @@ glob "^7.1.3" joi "^17.2.1" +"@react-native-community/cli-config@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.2.tgz#1a5de302de4d597ff2fc9932a032134b6ec4325f" + integrity sha512-UUCzDjQgvAVL/57rL7eOuFUhd+d+6qfM7V8uOegQFeFEmSmvUUDLYoXpBa5vAK9JgQtSqMBJ1Shmwao+/oElxQ== + dependencies: + "@react-native-community/cli-tools" "12.3.2" + chalk "^4.1.2" + cosmiconfig "^5.1.0" + deepmerge "^4.3.0" + glob "^7.1.3" + joi "^17.2.1" + "@react-native-community/cli-config@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-12.3.6.tgz#5f0be68270217908a739c32e3155a0e354773251" @@ -3266,6 +3287,13 @@ dependencies: serve-static "^1.13.1" +"@react-native-community/cli-debugger-ui@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.2.tgz#b2743876b03e560fbf5ef516e95387fcb6d91630" + integrity sha512-nSWQUL+51J682DlfcC1bjkUbQbGvHCC25jpqTwHIjmmVjYCX1uHuhPSqQKgPNdvtfOkrkACxczd7kVMmetxY2Q== + dependencies: + serve-static "^1.13.1" + "@react-native-community/cli-debugger-ui@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz#418027a1ae76850079684d309a732eb378c7f690" @@ -3297,6 +3325,29 @@ wcwidth "^1.0.1" yaml "^2.2.1" +"@react-native-community/cli-doctor@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.2.tgz#9e82b49f04ee03872b2975f26c8799cecac021ce" + integrity sha512-GrAabdY4qtBX49knHFvEAdLtCjkmndjTeqhYO6BhsbAeKOtspcLT/0WRgdLIaKODRa61ADNB3K5Zm4dU0QrZOg== + dependencies: + "@react-native-community/cli-config" "12.3.2" + "@react-native-community/cli-platform-android" "12.3.2" + "@react-native-community/cli-platform-ios" "12.3.2" + "@react-native-community/cli-tools" "12.3.2" + chalk "^4.1.2" + command-exists "^1.2.8" + deepmerge "^4.3.0" + envinfo "^7.10.0" + execa "^5.0.0" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" + node-stream-zip "^1.9.1" + ora "^5.4.1" + semver "^7.5.2" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + yaml "^2.2.1" + "@react-native-community/cli-doctor@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz#f68b51bbc6554ff4837269d98e9e405044e6f1b9" @@ -3330,6 +3381,17 @@ hermes-profile-transformer "^0.0.6" ip "^1.1.5" +"@react-native-community/cli-hermes@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.2.tgz#5f266985fe32a37e9020e881460e9017870be2e5" + integrity sha512-SL6F9O8ghp4ESBFH2YAPLtIN39jdnvGBKnK4FGKpDCjtB3DnUmDsGFlH46S+GGt5M6VzfG2eeKEOKf3pZ6jUzA== + dependencies: + "@react-native-community/cli-platform-android" "12.3.2" + "@react-native-community/cli-tools" "12.3.2" + chalk "^4.1.2" + hermes-profile-transformer "^0.0.6" + ip "^1.1.5" + "@react-native-community/cli-hermes@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz#5ac2c9ee26c69e1ce6b5047ba0f399984a6dea16" @@ -3351,6 +3413,18 @@ glob "^7.1.3" logkitty "^0.7.1" +"@react-native-community/cli-platform-android@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.2.tgz#de54d89712f8ea95046d798ec274fd6caea70c34" + integrity sha512-MZ5nO8yi/N+Fj2i9BJcJ9C/ez+9/Ir7lQt49DWRo9YDmzye66mYLr/P2l/qxsixllbbDi7BXrlLpxaEhMrDopg== + dependencies: + "@react-native-community/cli-tools" "12.3.2" + chalk "^4.1.2" + execa "^5.0.0" + fast-xml-parser "^4.2.4" + glob "^7.1.3" + logkitty "^0.7.1" + "@react-native-community/cli-platform-android@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz#e1103692c659ff0b72ee6f00b7c72578db7376ec" @@ -3375,6 +3449,18 @@ glob "^7.1.3" ora "^5.4.1" +"@react-native-community/cli-platform-ios@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.2.tgz#07e298f69761424da85909790a43ec60ebfe6097" + integrity sha512-OcWEAbkev1IL6SUiQnM6DQdsvfsKZhRZtoBNSj9MfdmwotVZSOEZJ+IjZ1FR9ChvMWayO9ns/o8LgoQxr1ZXeg== + dependencies: + "@react-native-community/cli-tools" "12.3.2" + chalk "^4.1.2" + execa "^5.0.0" + fast-xml-parser "^4.0.12" + glob "^7.1.3" + ora "^5.4.1" + "@react-native-community/cli-platform-ios@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz#e7decb5ee764f5fdc7a6ad1ba5e15de8929d54a5" @@ -3404,6 +3490,11 @@ metro-runtime "0.76.8" readline "^1.3.0" +"@react-native-community/cli-plugin-metro@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.2.tgz#7db7dc8939b821b9aeebdd5ee3293f3a0201a2ea" + integrity sha512-FpFBwu+d2E7KRhYPTkKvQsWb2/JKsJv+t1tcqgQkn+oByhp+qGyXBobFB8/R3yYvRRDCSDhS+atWTJzk9TjM8g== + "@react-native-community/cli-plugin-metro@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.6.tgz#ae62de18e998478db60a3fe10dc746162c272dbd" @@ -3424,6 +3515,21 @@ serve-static "^1.13.1" ws "^7.5.1" +"@react-native-community/cli-server-api@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.2.tgz#11df4e20ed72d59cf22adf77bd30aff3d6e70dc9" + integrity sha512-iwa7EO9XFA/OjI5pPLLpI/6mFVqv8L73kNck3CNOJIUCCveGXBKK0VMyOkXaf/BYnihgQrXh+x5cxbDbggr7+Q== + dependencies: + "@react-native-community/cli-debugger-ui" "12.3.2" + "@react-native-community/cli-tools" "12.3.2" + compression "^1.7.1" + connect "^3.6.5" + errorhandler "^1.5.1" + nocache "^3.0.1" + pretty-format "^26.6.2" + serve-static "^1.13.1" + ws "^7.5.1" + "@react-native-community/cli-server-api@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz#cd78122954a02d22c7821c365938635b51ddd1bd" @@ -3454,6 +3560,22 @@ semver "^7.5.2" shell-quote "^1.7.3" +"@react-native-community/cli-tools@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.2.tgz#d3362b04fba3f73ec82c5a493696b575acfb420c" + integrity sha512-nDH7vuEicHI2TI0jac/DjT3fr977iWXRdgVAqPZFFczlbs7A8GQvEdGnZ1G8dqRUmg+kptw0e4hwczAOG89JzQ== + dependencies: + appdirsjs "^1.2.4" + chalk "^4.1.2" + find-up "^5.0.0" + mime "^2.4.1" + node-fetch "^2.6.0" + open "^6.2.0" + ora "^5.4.1" + semver "^7.5.2" + shell-quote "^1.7.3" + sudo-prompt "^9.0.0" + "@react-native-community/cli-tools@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz#c39965982347635dfaf1daa7b3c0133b3bd45e64" @@ -3477,6 +3599,13 @@ dependencies: joi "^17.2.1" +"@react-native-community/cli-types@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.2.tgz#0551c553c87701faae580097d7786dfff8ec2ef4" + integrity sha512-9D0UEFqLW8JmS16mjHJxUJWX8E+zJddrHILSH8AJHZ0NNHv4u2DXKdb0wFLMobFxGNxPT+VSOjc60fGvXzWHog== + dependencies: + joi "^17.2.1" + "@react-native-community/cli-types@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-12.3.6.tgz#239de348800fe1ffba3eb1fe0edbeb9306981e57" @@ -3507,6 +3636,30 @@ prompts "^2.4.0" semver "^7.5.2" +"@react-native-community/cli@12.3.2": + version "12.3.2" + resolved "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.2.tgz#002ae3683b9fe6b0a83a837f41d9db541ea7667f" + integrity sha512-WgoUWwLDcf/G1Su2COUUVs3RzAwnV/vUTdISSpAUGgSc57mPabaAoUctKTnfYEhCnE3j02k3VtaVPwCAFRO3TQ== + dependencies: + "@react-native-community/cli-clean" "12.3.2" + "@react-native-community/cli-config" "12.3.2" + "@react-native-community/cli-debugger-ui" "12.3.2" + "@react-native-community/cli-doctor" "12.3.2" + "@react-native-community/cli-hermes" "12.3.2" + "@react-native-community/cli-plugin-metro" "12.3.2" + "@react-native-community/cli-server-api" "12.3.2" + "@react-native-community/cli-tools" "12.3.2" + "@react-native-community/cli-types" "12.3.2" + chalk "^4.1.2" + commander "^9.4.1" + deepmerge "^4.3.0" + execa "^5.0.0" + find-up "^4.1.0" + fs-extra "^8.1.0" + graceful-fs "^4.1.3" + prompts "^2.4.2" + semver "^7.5.2" + "@react-native-community/cli@12.3.6": version "12.3.6" resolved "https://registry.npmjs.org/@react-native-community/cli/-/cli-12.3.6.tgz#7a323b78725b959bb8a31cca1145918263ff3c8d" @@ -3661,7 +3814,7 @@ dependencies: "@react-native/codegen" "0.73.3" -"@react-native/babel-preset@*": +"@react-native/babel-preset@*", "@react-native/babel-preset@0.73.20": version "0.73.20" resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.73.20.tgz#65ab68cce16bb222bb1faece498abb6f7b1d5db0" integrity sha512-fU9NqkusbfFq71l4BWQfqqD/lLcLC0MZ++UYgieA3j8lIEppJTLVauv2RwtD2yltBkjebgYEC5Rwvt1l0MUBXw== @@ -3796,6 +3949,23 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" +"@react-native/community-cli-plugin@0.73.14": + version "0.73.14" + resolved "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.14.tgz#e7767df11a8f54fd84ebff36d8962ef733c8143d" + integrity sha512-KzIwsTvAJrXPtwhGOSm+OcJH1B8TpY8cS4xxzu/e2qv3a2n4VLePHTPAfco1tmvekV8OHWvvD9JSIX7i2fB1gg== + dependencies: + "@react-native-community/cli-server-api" "12.3.2" + "@react-native-community/cli-tools" "12.3.2" + "@react-native/dev-middleware" "0.73.7" + "@react-native/metro-babel-transformer" "0.73.14" + chalk "^4.0.0" + execa "^5.1.1" + metro "^0.80.3" + metro-config "^0.80.3" + metro-core "^0.80.3" + node-fetch "^2.2.0" + readline "^1.3.0" + "@react-native/community-cli-plugin@0.73.17": version "0.73.17" resolved "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz#37b381a8b503a3296eaa6727e0c52ea8835add28" @@ -3818,6 +3988,22 @@ resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz#033757614d2ada994c68a1deae78c1dd2ad33c2b" integrity sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw== +"@react-native/dev-middleware@0.73.7": + version "0.73.7" + resolved "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.7.tgz#61d2bf08973d9a537fa3f2a42deeb13530d721ae" + integrity sha512-BZXpn+qKp/dNdr4+TkZxXDttfx8YobDh8MFHsMk9usouLm22pKgFIPkGBV0X8Do4LBkFNPGtrnsKkWk/yuUXKg== + dependencies: + "@isaacs/ttlcache" "^1.4.1" + "@react-native/debugger-frontend" "0.73.3" + chrome-launcher "^0.15.2" + chromium-edge-launcher "^1.0.0" + connect "^3.6.5" + debug "^2.2.0" + node-fetch "^2.2.0" + open "^7.0.3" + serve-static "^1.13.1" + temp-dir "^2.0.0" + "@react-native/dev-middleware@0.73.8": version "0.73.8" resolved "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz#2e43722a00c7b8db753f747f40267cbad6caba4d" @@ -3855,6 +4041,16 @@ resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.72.1.tgz#905343ef0c51256f128256330fccbdb35b922291" integrity sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA== +"@react-native/metro-babel-transformer@0.73.14": + version "0.73.14" + resolved "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.14.tgz#a4ee02c729216e4ab5b7c7aa28abbfe8e0a943a8" + integrity sha512-5wLeYw/lormpSqYfI9H/geZ/EtPmi+x5qLkEit15Q/70hkzYo/M+aWztUtbOITfgTEOP8d6ybROzoGsqgyZLcw== + dependencies: + "@babel/core" "^7.20.0" + "@react-native/babel-preset" "0.73.20" + hermes-parser "0.15.0" + nullthrows "^1.1.1" + "@react-native/metro-babel-transformer@0.73.15": version "0.73.15" resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz#c516584dde62d65a46668074084359c03e6a50f1" @@ -17917,18 +18113,18 @@ react-native-windows@0.72.10: ws "^6.2.2" yargs "^17.6.2" -react-native@0.73.6: - version "0.73.6" - resolved "https://registry.npmjs.org/react-native/-/react-native-0.73.6.tgz#ed4c675e205a34bd62c4ce8b9bd1ca5c85126d5b" - integrity sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA== +react-native@0.73.3: + version "0.73.3" + resolved "https://registry.npmjs.org/react-native/-/react-native-0.73.3.tgz#aae18b4c6da84294c1f8e1d6446b46c887bf087c" + integrity sha512-RSQDtT2DNUcmB4IgmW9NhRb5wqvXFl6DI2NEJmt0ps2OrVHpoA8Tkq+lkFOA/fvPscJKtFKEHFBDSR5UHR3PUw== dependencies: "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "12.3.6" - "@react-native-community/cli-platform-android" "12.3.6" - "@react-native-community/cli-platform-ios" "12.3.6" + "@react-native-community/cli" "12.3.2" + "@react-native-community/cli-platform-android" "12.3.2" + "@react-native-community/cli-platform-ios" "12.3.2" "@react-native/assets-registry" "0.73.1" - "@react-native/codegen" "0.73.3" - "@react-native/community-cli-plugin" "0.73.17" + "@react-native/codegen" "0.73.2" + "@react-native/community-cli-plugin" "0.73.14" "@react-native/gradle-plugin" "0.73.4" "@react-native/js-polyfills" "0.73.1" "@react-native/normalize-colors" "0.73.2" From 67a0297380c831b0a7d862e29009e17104ed2aac Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 20 Mar 2024 09:38:43 +0100 Subject: [PATCH 064/175] add photo editor overrides to config templates --- .../app/src/main/res/drawable/arrow1.png | Bin 0 -> 8410 bytes .../app/src/main/res/drawable/arrow2.png | Bin 0 -> 5740 bytes .../app/src/main/res/drawable/arrow3.png | Bin 0 -> 5759 bytes .../app/src/main/res/drawable/arrow4.png | Bin 0 -> 5769 bytes .../app/src/main/res/drawable/arrow5.png | Bin 0 -> 5768 bytes .../ios/RNVApp/RNPhotoEditor/RNPhotoEditor.h | 8 + .../ios/RNVApp/RNPhotoEditor/RNPhotoEditor.m | 147 ++++ .../builds/ios/Resources/arrow1.png | Bin 0 -> 8410 bytes .../builds/ios/Resources/arrow2.png | Bin 0 -> 5740 bytes .../builds/ios/Resources/arrow3.png | Bin 0 -> 5759 bytes .../builds/ios/Resources/arrow4.png | Bin 0 -> 5769 bytes .../builds/ios/Resources/arrow5.png | Bin 0 -> 5768 bytes .../overrides/android/build.gradle | 46 ++ .../photoeditor/PhotoEditorActivity.java | 695 ++++++++++++++++++ 14 files changed, 896 insertions(+) create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow1.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow2.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow3.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow4.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow5.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.h create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.m create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow1.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow2.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow3.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow4.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow5.png create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/build.gradle create mode 100644 packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/src/main/java/com/ahmedadeltito/photoeditor/PhotoEditorActivity.java diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow1.png b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow1.png new file mode 100644 index 0000000000000000000000000000000000000000..de46111c6f86d52f34ec73bc51eabe817e0db07b GIT binary patch literal 8410 zcmcIqdpy(o|KDaYmD-4s(u|psOO|5IOm3UY=!PN`wQ`RgrX-_-x!*6bQSIcATvEz$ zNg74YRuf7nORcGsmP)$*-s|Z5J>T>FouY`xb!D=m5%gR|w>&J_M3*5(4=M zmJ*&rAU~NxAXEMj2%!W5SsqdT+cqKu0$X%=rx(M^)rAlc9%{TVFns?3V`gXs(11XQ zOak~d^Z;WYni(1r7DZrMVZI{>;CK152?qTg!U(p)c)7ZxZNnoEpv{dp8k=HB3(;sa zF*5KVVY{8fygK+~g*n7vL=a3&Vq#*9WAMh|k#v&{mX?+#re-E)W<~&E6croB*vB*q zi_-m*O3t^KKG8y*@Fc_1nZsF60ztNeBC z?|8S!!v{coax?$J|8?!}c=to$jBt?a$io5DFvfvMU~FFdhlBr&nCBvz$kX+g^!-_z z@2j9Vq=iJ2e-)avaH;*edGqtL&V)06SC-x4>zY1@ zXahlKnA4u)$Bu2mPa+{&ok=yaS4(;wW*@3_5Tq$5J~trA5Gefr{YT|W)`@DQ)LOUa z#LiS*I1Djr>z^L_?J7OEwa($OpQoW$I|BV$i>3PL^SdkI$5~_r7;gYllY>}Hsk9UD z@%~R7oJ$!FFG}K2ha4;I4v7!n^qfSK2|d7hlA3``NfxIso~?mXs@Bo2BTEv=>~*R1 zG>>P7iHtYz>>Ln*Xm^aVxc3gbHxkY1U0JgVzE0HumCjrTQ}6qBEEW#&_JqAh9xi5`RxY^3 zWhRGBeCf>>e6h-b!gNsvx$9*a_ZkCR@@N;6DM~CTqTp68Q}NKwo@G>Afal~%ay$&X zU61?uxKpu?lo!lCiCmFPX1lQICDBhQ1&qkIHX4Wwr%F39A0IRucB_mLmJsF)*VlDF zqb)A2t-jEw!|@30w)Z!JVf(P$%SXR@T;|PaY+9<5(774z6z52Mlpq_dfKw!H8u7Le z)(g1PNi_Gxs;W#fVW8P#A7a#@k}u##X?-2l%BQ{hdTR-5n{olAoayj~?~OKUm5$G8 zlvg>K{gF+V>3rBjlEz`h;c(=yAb3-8HI?z&i-%__{F2=Xfjdo7hzc8P9MgCMNf)h< zH1)iG6Oss4l%>iz!NAc;Yud|*Rhnjn2?Ota``zn4=at`XXRI1CWm z5yv8~jHNP0-l(sJ!l#f1sAT3;L!0?R>1f)cX9#oz=+k3t3A`cWN*=AJ?v^qXu8lG{ z!eVOQ)qH$Rq*+PbZUL zJCFvl&9XRF-WNAf@3_t!=mk6sYpg27Z|$wi{oaUBI1OwSxU9SRMH|JW?(#&w-)3vm^6!FjlfzHVzvujhUb_7$Z)DAra zof`zhUex6-F~V?`^ZNOkKKBaXk@+SZrTu*UTSiIKUe~*4;s%P4!r+ zyVcyz4&~Bx8@fOa@4%e`-H0lCC2T1fWVx;qwyEs z4%9h!K!9bb?n1f!GL%Qd=5(PGI`6@qb~+N(_qY($(F=hG&VT?b^9eDR`oNzbfg`=r z$m}4tWb19J1V+pT7W06DD>1y8%NU1CHUPjWGJA?G$wZ+!n=51C;EYGWuq1v|4hqA*(%~+zq(~N^i&3D|YH+7fXQEp|u0YMgSO-vtgKk_bBSIVrOFKWT1SD6< zmHa0Dj0#yargVuln2sGQm&(Mg>?P>%y>NV-s!B;f;Gi+99w;O$-6RV)s^g%u7Mc@l;ukAc_6j90Ys^?Dh}0*(r>bZiTPqCe&cqIwP#MDAr8n zdnBt71@{9qWjVAI_QeJA41qoS!Z|gC;p>ukTW$dd!@e)|CGrLip9%p78e$dNUCgcS zwk0T?>y&4U><9p-Jc!?hP`nGsTMm!2DTi(s6~rM+N)t{<`$zX)ZpSoytLl9-r9X@! zS878=)i<~EHYg*7CCBsMRl+IsJ3Z9abx?72+745=wi=pqGsI_iIz(1G7(O^|mmqKY zhXwFd+yQSrb2X@_w7M*)+9rV+yrihus_!5Y0mBUj9I2YKK#QE4i zPJ+nda$c*k76Eq9ea4P}J-8(?7|2KLy305aS^xOHcjkcIRko0{77C91#=ao81jY!y z`9?WBl`iP0so4M(9bWA9p&A5w?~h$Ri@=4SSW{w%LURj$yD)ScP@8RqB0oI*X8kEq z0fuPPCll&5TNGHj@XzTI1a@{k;44}Kg{)IWbJI+JK9vuV_CN64H3pn{6%a0gB60)} z*F13qFn6_xdKJVbwI3m!2mFJCx^Y{;kJR6+^I8Kcj$KriauCqtV?0AO5lFXW<6Al^ zP!V-tA=||zfvF!>ClY{d6xBAG+1UzDmF$h=mZd?YE`zjgJsg?XtEJce9z1zi1#CgT z2APdJH!=GZSdTRFjDW%T`IXAsucko$yj_slnqGMj>G}uJ_Bb6fk-AbRGajg}3Eraf zdNou$mz6es4x~+fODh0RS*Ngr!NAj%)^57)pyc;3YiU6+UjA=ZdEOZi+4`Z^>bJ2R z_13y){h)+VF_Y1y5UG!Y0R%RvjCA{n2Ro=kChR8YEQQBo$;4}KUJvVme#&!L7vKcr z;}3Wb8>cabUR|4-QA2Y-TjfnC!+24!B5%}HHbgcGA8&rAoI^W)4uiRq2$5Z?Tz4=A z6lryf3W`|BY4_^9E`Z30-B0#AfM6O8Bey=bfQl^zeH>*#n5a*IveE$|hMYaCOD25r zdZ^4Qf~Qtt_cns^ae@pMY<(OJ<3}A^r1u)s;rr1Q0J7Ei@v=`dugT}OdK&~P-d)*y zwunMF8%-NW5J8!Qb61ao?a`v#7K(aKPGAzq&E1wD-mKzQ)QU{7A%+@zXRw@Jty&@+ zgu5bXBb+y2VdKMv$BerZa50wX#6Gz@8BpTML|L`H?e z{(MNB1jgo$Z46E3;X{MflRJU>%(CqC3m`PZi(*Vp1w=MEeV3t`Ctw)uLc*#LNa0$a zunwmLMxE+gBJ2sMh3uGx%K{$W<-A_n59@0{8zh|shaQ=Du+kFjovizc;2ug~CI<~O zd-DWLtNabH3!v)3U5jqwII(5luFVvkySN18O<_{~3Yrt!`qg^d$eNj=s`73;7ZR=#U1JfFXs&0#F(!2FImsfV!xA2=hgu$N9#LH}BjckTSFtebwJB2y) z;@IzL>?-}=yZ7e`_N#nzZ1MiA$2C9ZcRom5Z6Dca!E5rmVO`kTJl z={)b3mZIIY6K;KD;*~NYbW-FDs-T*yMY*{+PQRgh4S%LI^^p)99Zh_V)(YU~2Ug^j zt0~MS36ZyL0Th|Jh!>#Pq1(`1%%54U`Dis@b)*_auaSaHr}i}Lh>5Hm@@(i4C|)=v z&W3RCu_nvt`_ookJLvU#gi$m{&Z_k^3|xe5P=W3@Ju>l|-NbU>sv{!gh?;Db&Qq=< zXmeC)cL$Esy)ypvs1X;-T?DcEn8aLseW_>zoDP6^S-H-$@p=F>%2j8;#t)$z?2+PXo5-;he0=OQmHtNYk^8vD zF;$_;W86p{Q$Oh0@OFyC5OresugJpyDeBQT2u@!G?jBu58jGnIHh%UVRf5ud^dHFG z0C_Q4e?2|DJQcSuK+%cKR16wAzmqCa*BK5*-p3$h_s}h2i^Zk9SstFMt7H(6zKTsx zaKO@XnW~#5hk|%f1qGji{({tO14yQVlFNzoayGrQ2kTVIR5gDRvW^#3RPyPsoSK&a z^3W4~%CYp7sq{pLaW9x`6!C5B0#$wsoVW2$NAq_iP5!namEJI(FYs3>GaWMu!f=(f z9yaQUrHD^c9=xc+O38n4%KfCA)u2SBuVm9%4x88KGFNt8P(Q^8%3W5a$TCVqx~b&7 z=s|NQ+i{#pl|82IMnU@A1zLWMf#PaJQ?!Ao+I45!N_aD3E76=%rGnWJz!ifGpENH<~?ddG}+KHp$x7{Sk*B0`$cLFXiqYOa(p%`%0@?z ziCS8q&DO5|>9|zM#!XA(z#gdZfBUtNaa8S!p9;(yuESlaH=Jn$9@DwspIC0gn^Vce z;tj^D6PRI#tfixnv7$l1$!69}_?RJOjIb?IhGJOj6u?o4gN?@OIZQ%x8H3Q(ybBNW zw$tYxWELY_h@24@0*CzYoF&UB8qIxHQZ){a_DjVKaJ<`ZhIxPg4(8T^0uS$o@`v}h z7_demjy1Yn){$)t!AUosG<+KhZ@yp347*|7-NPUFHS>GguBhF|D2Q9yRcyg=t}^0j zOZYa1Hqk--`j?tlMNS7(B-d8G?Awc~(+7n^xw)Qs(T(AzS=H-stT;xbCGTlneH8z6 zUO&A@kddz@+c~w%NcvJ5B0JI$qw3)R^VT~+!bcx0FHf!7S|8*@ccZ6gC$;A{n5o{! zteq)s#6Ov|BQ8I-%bReF;2pQ>CFf*eZl?ydRG7ih#Nos(cg|~w9t=DXKk=W|tIdEn zQ~Kf#zU;TKLV3MFxb=jn|3WuMTOQ^I^&>*-Au z0?FX)ZIZ2r84UZTW#oQg1&-6K@Etu}d_1`}5KK;@E;pVhxe@+Ic@Rga@O)(QY4Pq} z@I_S;6yO=hWqe$GagIT%@9=xCc`*-+l!Svlb?=GNw_5vWq;bB-uf4=Gs2SKcL@oa;UT;d1|%x&F}_JFn_O_iGBCwqA;g0gUpVr+Z6q?geu`) zH~+hb4}gcCl86583O%07c(vN=?>0H_Vnr<{y#9;4M?%HjtUTo=nVI@@;NMvZ0a@Yd z{FlvAE{@})5G2pxU$fFgbR+a8<3$_(?xQBa2PVyBGy4A?)LUTpfqT5u&Aj1e znJi{_R0wm09z~;Cpi9?CAXyFSUQvPko7oR8OldNm^@GVOV~>HE48RD@Mhx{`d*~0AtP* zpfwUqdx^)rnD+xe!vYQ}#F%j&NTQxK75~yaFUUVY4wA_5n!(a?oVz%8BuZy|kIQ_> z!VINckc*KrX+NO?&uytS|6{&~Y87U}e69006bU}ToroV_tzs@|J+Anp@m!SN(#<+V zEnsN)1pj;0o{zIp^Ofz7TtUG-h}cD;pPMUxTAt}~bH3v>LvuQA&(h86MAf#Hb|upv z|JdS_CFq=&T8?zq&VF&}*-3bZC_ohc^lH-FA^eB6TS}?G$(>Ib4)THxt#6s0cXFFj z1`zB>VmNSx+k}H5u|EVTrA#2$ewN|D5u$|mYAt^V?kZ*h!L}O=hjQUv!NAM8SMyZ4 zieM(C;{Jr;P$tY3h}O0I5NuP-0Rp!ahQlf0Ho@JX*dGFvqC9o9DuzR;5GA-%WBEhy zQh^G3^;`f!x1augrs-(>{4U1L_=D*$OIl8QKi3}@J^6k%=HYz!y@X0$eu!5X1ve9S z&}#FWkMB6m^V`#G$vV&s1!baMLWQOxS#W9KDdBpFowj6r_YePWpz~=LuT%19MRWZT z4wJ9PTZ87SI%;(X_-CN{Oa4C6G-=KIYwxp0=+7^_s}Hw&dfF4-e03t*b8|~prz^NM zhvUZKC-OqS9nT}2Gdyc&AM*vb?whDIth{D9LlQUslkv-AUpQ}vr}7Q_cfn#-hlr|2 zdJZRznOFFJ9rpVgW2#qfZb;3mBW>x^t-_% z>f__eZv!1I^4k=S0{+rKuP}qNH{;&N9T|CHbsZ&8NvVHYbYbZx>7|$BpBue}I8+-h z(RUO<7vaa>00TVRfyUaRnFlYP9))Gg0Sd6{)#4~U@UY}w2o4}wU&kJ}a>HPtPj z6TH5ne%azaZ^kIdufwLYJMKM`HS(nVK0=atW5XNW%fLnkQDrW&-m2nc1PyT^7Dem8 z4`a`s0>S-uDWuvpNI-v4{OgCCzc^SpuYU3<{Q?L>64Tt#LaQ8#%j-I__EMm|#judS z3>74gWdE}58ruR$-W`-~lK#dnYHZsp=c%dd`kYTkuXG7KCHX6|*r(NTUArd=I<`G2 zOmZcJLuPNSg?T<}8oa%8bl6O{d`CdX`0vx&;G12z$E#mIjLqq#3`ZWio*MDW0;}+9 zP5{WDT2_bpru*sX%WF!6_6`U`uHCO2-mRaz3#@SWHVo^+vY+Lzk1w`Y(LXtJNcFg1VP_0TbPY!1 zC5$!wtf^;_M}}Xwy~Xn6duJueaaQ+vQQXtG5!44l#Yx$D)4Dh4^5`bRH)^m7P&Xp< zsmKUU5=sV(YbD7Kn8!Q7ceW`i^m6}oy&+atkD zR0oXAPcgFqKXHZN5Yqj)m^$eyPs ze+-&G_a;P~TM=vzrjG|<*gReC8fye@rl3y+3O|Q&KXaV z@m-8Q6cFpVpQ$P2194X486egJ;=MLNEZW(p4#fKIXMQV{YiHMsf!Gd+xpHms#y(9b zya?@nrmqxeJ7-+LpveA#KwKf$ezU9(ya6c!wnuV-wsYqB{Xnb;!=|l}Yu|WV4FzIg zdn#A1omG7Xi1mS3Q?5O5uNn-Zi-7Hq{bHT+UvBP@fswf`OV$3svZWLK7NJ2~!MGR< zX5I8<$gD;?@IfEvex_qF0QV}n#>(fqN-WiDqieOh=AO%kC<&by@NO?Qg^8f&LU-uP z=eppffyvRdl!%V#&PQ^%j}UF(cq@ z`jUc+@*%hD4L#TK3j(f)aaUCPW zHP`&+oZp;luC>>~xO7R1-}BR+r%)(>eSEemSq^jZwiA32d-Bj*W3A`y=-9mv>IyFW#1Gs@H$Z#kw_m1v|`@;g8?gu`}K07+66t2LNb z3-ycV2t1QZU94fnH415}62~-vz$LB{$8&@pNV-M=UObcIcCH9TB`#p5QURO*47ngl z8cc#?DEwfGFA#D0(OiCPh9C-w5+PBsbNP`7pHD*5R5C?D*`Gn9qmjtyr=Y+|Cc!2D zD_AB)3RIe62@p~gOXL_&t(0@v-qJ$}ic}g14D2HRIG>u7v{a)iP!xeeyFBG}c4~4` zj6f6o*q5%uTs`(w zk36;TWNfXf056qju=#SR-1u4KZd%t?V<#oK&K?o_uW1sgLh0InuZ|Oxu9GO`7#xH= z4)6b*(Z9C7B-Q`#jCig?kX$a_e_u(r?hgkh6u>GW zao#|u>|ih{5g~s7)SqDz)1EZmI78Pl`&qR&W|ZbVW9v^rEDL|Jb@1Mo2Qb+TRs;vJ z%veyRuQAezFBlF7YNnPKqPjSvlaeUph#ThN700(s@}~tc`{P5ptd%Hjq#j^wfPG~k z)D*iYo1K)>=?v4k0Osxw z0QHRB=gTP!(;Xwd=Nki2l!jL*7gWhto2hsdN4z?axx0no=-cX~G=k?Wl;%{Tx??jD z%kuzw!Axz1+_uj_EQ>%?fLH+HEX1-I#8eQWAlpL_OE-wGf(W+T!Ilo9ubDaswm$_i z*Uky)>fPz2bWCNKj-j+4?FQl~P(HMvs+no`c_)S={>(sc?_f9-NqEH^pgI|)={7SQ zCmWrVbXb_?o86FpyBt&q(R)5_F3 z0Id)4_uJ;AT$bLbbO6yuTg2gFuxa~*_F)Q6xf}b-$Ap1C&p*U}5}+Ok4wr$^?j4_e zWF0!*!J{Z2Yzr+JPPWvHd_qtE%{KPi##&1))^# z?{BN3EeS=4ct>T8fj(A8SbS01)!AY--(ETF>mR%j?;oh5(K!eq=%UgBm?LqHO6Y{9 z5HWu~-ak}DTLZ?^9F?ya=%<$G`fE_ytx5jn?>jAGN2PxtGj0=Mp&97GDZ2hSC~fO3 zF+sOiUibAs1;)W$)I>I-W;rTV271FAy8gLl>Oc@{q|s@KuA*@e^(=?uK1w?@ODx{$ zwESA7KNrY6p(luiX6i75#Y(~Z*K}F;8t9kPb-EYrm8>d#N&wTDr2En2oX6|3evi@~ zGFZoEAw4xj`z(89XO;erf&O5&xF{Llo#>EEH&Y7(SjX5%JKZ5E1A)QXJ{xIgIV7t< z2xM&!McN}A5)lYNtnD16J;5QFYNoy$z}gNr{*FEI_R7F_R0YUOBsR?i@U5`0KB0) z(crWk@%7&k$egEh9fC$e&9M9Y&K5&&SG4*1Lu>c1?y@RSdES%K;b+^U9FCXFN80jg z#;)J3UaRP`I#9XlWrt)dq5iAAFE3eF7a|T`fSdMk#1|MW`b@;OjKPAX=|u-tg>_kj z9g@vXak?9JYB6p);D)W?Aht|5tZ6o4%OXb{B%?|%>ayyMbR)q}*Np_&9sce}#0s-S`Q#ITv*r|1@Pkn$Wi z69c_zxhts6YNR*0iP%0c(%bgCoDA$i_1T#&CPVYg)-7&J)&jiF12fQ5NZ3qNzt{;fX0&2PLM0-DW_N*dN2Kp6p%HV8&-|cm005i+Ir0KwHk=yIZdT0Aiw^A93wC;D6 z*|f_*Z#n3$-*aYbHwmkAwtwk{MT8=QyWOyA1HFT+-(SquC2p7qyzO$s;CvV)y}=RD zL3(>81s&Mvuk(vbaucMz#zCG0Rj1{>JoHVlL)5b@@pRVbKR(D5Gy#VXf=3IHm%U1h z{mdu3^FRN&B|o7)L|k)mCgw&7ss>{mSz9ew=wRh*Rlye zn;p8}i=C76E2a*cysIPzSw+rU)$zU*;b<5@}GIc5wB_D+vl?X5azYJ z4_o{uOgFvuB%#r3I%c`D(YX3-esA{Ka$$|!7@UZ6k{FzbbAS-fM2u(m9f!5K zD0Gx98n0->tgfNIdn2%mGh_ z9QEDi96R7?fnJW-Je2KeyM{~f{k_)W!CjulvX6f5S^kT~4o2hg%Ha5>O6j2q1aBk4HXePDEMJgdcUdAK-kG&-D}xD>zW34Chb-^K=7 zW`rXH2gwp7Gz&$MW^E_w^@cQzc44zKXD^vSS>DavQyGo7Gsv1GW{K1>=)jvErg@ok zldt{c8gje*va8$o2pbtDH>s_;r6G!H);5uT%MW%NZENtmnPevED@3F9)fXR=r5SoP z>=kjL{pUSo(9-Oa&Z*T)W{^=%wse1J%fi=_D{H%w5wT&Pxi_7RdDpD59(k$JMEcQ| z)b29vaX#<_X*qa#WDspWPBO?zyLn4K8+l9?Y#=Pm&s6Jd-SgermHmD%5B24K`b}hD zV@bx&7yZWOoh^SSQ}Lh(m2+zsSgF_c*V&X|-bu4E=Kfp8TofNI+wB<}`ZH z*rEJ{ds&KyFQW3?+I>mS3Ytm}Ms*IGj~rWc-SLn6VYi0fs=YOwgMXi`NRWx&JX^lz z)5Dh2lN;kRCQpfB!MSM5T6Kd}eK8@d`bFlp3_+9pKsc^Smh);q+_df7fjZmX%*h?i z8#^BTB`)Xj?{_v{E@Kdz9zMRb@oE`k*Z%Oy4WXkq&+p)s=1~Vm-u+vis`EMBc>{4_ zfB2LJ6o(t-B-`Au>gVR%FGMWwg}pGt6nh|igAJY&E3o@X4_>eJyITuyik2dEovHQk zH}UXh_@H~X{=a;~reB#3uZ#Uf_zBkE5BJ40n7eDb3-p6k-J6EtmaYt&&N|kV(f5F5 zp!Y1pdXt8!Vbjl)g2ln2@{!IxhezL?%-nsX`<9-_4)fQw!ILDr?+O3V;1d>nSK2pq zcj`6Rwc+33m5{Zp@1FY5;IQc`JU$kMJqrG=_Pwj;;Re#av-_dG1baM81Oh5!)o{aO~>(~yA4tSJw^sQVUf zheT-Ybww6pwVk_OyUhU?VDYM(*BPT1 zhHv`8IQQm&VD#%@2Nj+LkN2M%zBUpHPnEQrk4}s^uL(07=T-M4uXMexn z-rsNUZ-3{UkJ2S^QIjT2pMW69r09jBWe7sq55HaG--40F`};qJi<5fcDlLLcoMQb^ zkm?$D1bOSPiiDNe%GkxIRFxYb$y8;?0(7}*U?YfNu1+nHX3H?I44GV^j9}ewy~y%X zWJa)(f@3+cYN2ecV&MjjZ25+`1nGusX?P}UZlsq$heCi{87A@4<>n~0s4jwKi;Kd& zbvTgaWusu(5v+OE3B6XvF7XnoG%~N?fDpEn8x-sn8Xmw6;Rl6>`+M;?+^|4SSRj|r z=7yj_9F)iNvj4GQHce(0x=ggdJ{MRKthE@XMgs%$^Ya7p`2i}8Jdhh69v;Zy1@d@o zV6e3XN=%|-E4AKZ5kxYrRHIO13YF5!8c~v=T8~ArK&dSSOp)~}u2O5S6I3kFiUe{4 zIM$@dY;)BP1+Ou667_4uOsRvXUa!fq>CBV{%5r46G9{)3F4qxMy;g;(v};xWLud#5 z+61r)v9XRh{!mM9u44)=7 zOsj?ZMXy>MgdXmgJXWy8FJQJiHS-DXaX|i zf(kV<2__T44~970a5g8H%?VB52BAUWXi(^E4j<)kNNTJqQ;}8hN7UdDlpFjS6*Of^ zFv$2IZI#eyr52MYrLt&I1Pew26pBogCk>OxLM1_Lt~6N64w7W@*bHLxnM-z7P}k7`ww2@yjI9KlxzsCBu|#fvJWc$pc?;a=~?N~8*i>5}f!2p0xmLb*qrW?UFDLfHSw_J}w0h6h zXOG@WmmhwzJ8@IoIO?A?l4ZR|XR2{X0VS?Wnn?moFaO+%j{to6+?~%E8^w3Leg=yzCjc`Lnfi zuTolkwxn(v|MNVoNTdrZC6JfbSptv6Sdl8%l}YzOP30})ooTL&0d{hUo@$_5YT0e= zT_W1Z*KW8Z%1C|I0oPeZsvx7xa*}GMFi(kf?%>7;H>!xHyXJ=DVk7k&z?L`6lr;eB zb`yv|3UK~m3L|}Ha!FkcKNZmi3c-hCq*|KUZQAi>iteTxegk~Zsmd((76Bb%7)bjFKm2Kv1y-M};v?a@qug<>v# z?&J*HVZgnOs&Zk3?XsAhMYLT2O)?k%%gK4;3{*|Wiw*ReXx*6zbFtRR`Lr*pj>K`; z1r0LH&V|#Imfs%hbBYHL3#qPZ~P z(f1xp0Es{IeZ0(-`Q>2=o>R#MlvASbZtI)WV6==?sL0j5RXTj3<+hGt77tc^6>D z+2ozC8IK_ErkHVW@{VD~lgLTaMEa{LRb=^?W}p|6G+&Yaye+JjYHY8yO|`0qICx-t4wCGZL z5=onHY_A|`5bYF6W1-j*TQWW(eE8;V+VdfC zWfjRX&~K4L27>c}Eo!w3BWtNOYCPn**cSC{CBfNe0|R`}&Lg%w%MA49W7a%}-Y~Xz z+Gycb1gF(Ti}OK`e`2HUG0^MD`i(QTFCuA`#K~$K4PKwe$!H${jf{pAiiWo2jkv2z zY?Qo~DD1@?w|y7k#559573$9e96~2<-9QJhL<`w=Sn-V)`K`o{=jQI69xTB`TEvH^7 z>R&f_yKcEdLuktLkIy7JTxm&BvjAIR)2G4=aggQ-TbgND=__M+>i&Ob^dv)ycOK!x zZVuxbKJ4x=TJYiN4r4Dq?BOu-@L{IISb$jHuvR>ZeFkEXTRsP6f#B7ysbr_dR_3VjOnrPBrdXnX{oD zR&lXw?Hut~c@>_ut*;D5?VJS;Fvo-f~nX}*zW7m@X@z^L6Z=H%IU;UM8rM-mHS zXO5O9-Cl+5N+e|o>Ud#%qxKxh{)t<`$P!~+OG$9!@ur>~hOPp8KBp7&Y9^V(lgMd) zJ>SvApMeh9OBq@3!I@~(?j!@9YweiF_d7Lj@3x;w&Z1pkvFGQ{h~MlI>W|gvRN}gi$*?K0gFhAeq4pXK`T0%ji!l!$CF97G z&JxV+acSfv;q@I`AID)ENO|2i5&|yBjXm}fbs4V?tSRmC@SC*l&Hkm_1Gf^Z`@GFn zQHQ>{VtU8#PILXDgN5Fx_Gr*_=E%HD8}pVc^5RAE$cilCxZ6i6y94|t-QP-d9=)or z94Om9dT#Zh;Ru)g1&P)4ssG%#=IGUtAIiG={C4WgZq`?JHz!u7Y0Xt>hekhKmp%1C z!QPH>y{oZnORCbZpEsxkdBl8f?d}`|cQwhG)Bb9X-k&jnY z-K&1F`61ZXFH_mh}!^e;{8f3bdWhTGCAe>nRbKeqeXreEG3hCMftv@?rjSMQ%lJHi_chA)jp72kLoXC3ob zpMVp`YFV*<_zSviCl8E%zSEWM5>@ zK;H|kc+;~b{+R!UNdO#aB7~1A6<6`*tiZ9($Cif9{5z?obWU@J!1RxN=*^S!iO{81YR$DfMCt};{Af$Y^lY0zx^Q`d+`jP*q0_mvp`y8OI{ znewx-X^Y3Mk;)jTYni*-Jee`D%das?`qL&A9QRs}2|UY_ z`fUe7dBs=WzjmG;WB@yLu$No#(@pESawN>p^Z8u(#6}JzZr*h{`Q=Uu9CQ)~vokL| z&(Hhy>Gw2b?cv?eo)3EFJ-S&Jf1n|fiiF~Iy-3)%FR5Ql_}XuN^v~C<|00eS$B7!| Hr@#MSO;e>K literal 0 HcmV?d00001 diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow4.png b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow4.png new file mode 100644 index 0000000000000000000000000000000000000000..2f029f512140afeb90fd9e95629c3b975466bffe GIT binary patch literal 5769 zcmcgwYgAL$woaN;1GXdtPSLg|#PB)?4M`wCvJF^eBhvCv0f7SQCIpN^63JGA=n*V6 zJgnZ<5nlzAbO;s&Y-t4*B`3MoBc+7MX{nDYITi^m)zk;R%bj@;>K(n~o^gL%$H>_G zTl1T9eRHn4)@E6~EGf=o<{L8!1cFEWQgj7@K&*$~F1Hyll2CtrA3WR@OEZ-O!Ykgk zACYjdZZ?51W1TcL1J6iIK*aK*5G+rgD+y5*DS%BNh!(08n0UPeXXZ)@q_Qa1oijZw zrZg{#l^&kRO;p54)=HOdE|#QhPD&MTUN08ru@*)%MJfaW6iIN5sVXXzDG^l^%N`ej zciS+B#k5oK^--)vwh5UTiOZNV@?r@yJS2iG=JCUsk-`vOL>ONvoX-s9@&p{NfWr%8 z^CA#F7YPkzI{&d?w&J{eWCgm!ITxTP)><4_ARJCfNl8daScts1fWs3Cg&b}uCp44| z47RdVhGQzWOzAfj0hK7l#Zm<>mCKm6h*++CBOb*9rS=qXY5sIvnbKJ&s2Im);qXGZ zwxk@{7Aaf`USO&)#S6qdv5TkJSX^k=nJ4B*3MEAn8Lk8_&lOa$R*uV+Yvun#XqWkg z31Afx6J2xsp_ZZ|*Az-Tb`xamtlb~7m8qo)31@{wDc@Kumc(uXnSLy$tpZ4lyhu?j zQ7WN+Q7oQwaG6atta!0h952Hq#lXNZTZyAsp-xJ2u@s^>2dDgOGZb#L5z}N+&;(@2 z1&Jw^V7LT@9}IDMLN+&?&5cau@e#fd;YZHnh9O+8gPJJMljfKH5j8vl3Fo~)1x`=e10BVkk1ve zL;1O3T%I^0lFt)QMT1p={f-s>KB`Ss9z@KK2p41Gyj<9fp<*^aJT#Y`E9P?9{Jc;x zAC@IDG$PNos~mYPl`3(0ajA2krbsq8-wLHnd&41^*wGM5Y?CC9t&LVr$+O`@qCdPL52$_FL#KcmWZU6msN}zZx zCM%G@LC9fo{?8fxd+Y0v`v08~$94!hmW%V>SJH0#-GK=Oun)m0Y5Z4l2`Kb!jlT{G5jBfIQxkMEDA5Qbl!-1LA*=%Sj4!+b4C zCq>ESgH;qlGmTD2@f# zp8ayCed}jy7hWQs^zT`{)$R5oyc|^tsx5?VS6HGs33z#X5sg9dM|2NQx>3nA`Y=1I zQcbF&SR2@SLqAG>^ba317N;dW>w{;ImL$rpwVoiEh>R~|RkOh@4BSX4S@oTd*&M4S zb%WXZl8Lwq%&Lzp1V1n*d(zkZ6U>XWq;U+)1QT)M^H|j*cX)mQ&vFZ)>?%vt9fOzq z719{jnTT#VxZMCTOF>L~6-Ds{h?%7&)q%UGiP+x}tCA(-KLy&b~jzGzlHMQ1j+bx8gLR!N}HD%zUk2&+8h42GF2|yD- z5S#-}BUO}v%K&S@3Q$r-;l9V#cl^mj%>OJ_)f9y25>C1q|A~_Kf8%35u-8HegIcC| z(bufZsw_aXq`tyhYeFnuei@vlRg@Fk+4``TO~jSpe8ro-CLpV_IUFElaRr=W0fOq4 zP_ZjC`Wgwq*8p|`^rR0{PP!$(q9t8B54qJ@2qlnPNC2X6@f%#h>v#=h_ zCu3DfHZ#l&O;c{QbxSl9SM5zN?*X5fYKpEC#A7IV*yii0C0S2GZVOCA)eRr>WsQZf z1=Np&+uvmHT#OSKpmPVf-2^u%zN+8HTzbGl5Xoz;-6&321?Gl8gwPJNB-7~SJcx>E zNnG$2fq4Rw{@dH|1X{E|LU;s0; zk(M-YVefeZ?3}ZOnF3MIs;z{s0eSpSKgHKqgwF4B|8o^;hAs}8nDbfD;jpQ+-IH{<(ii%wig z-o!+#0&@lQx{=114M1eBm{m>bUZNU)Sxaj7X27n{%{EsARZ(^V_z#ONx{}ObA}4&! z6^A_O-|w^P$S8RtNMxm$D#UKo?nU^pKu?0rAlPfwrK99sV0z!86IPO0h$7HzoZ@M#t{qmzJ6h5ZjRAXL_+7oBwThCRtm^VGRWK^mS)O!Dj4GqS@)k#L zxP+3Q&=`9Ikbync6aJ=(bCqgn{riEU`LX!ng=Xw^ElKIg*vmw?R5P|20FBWUh;V() z*t-C{7)|~Nmt)4DrW}t`t$hbylc4S5vOlS`~jaRXn9JLi`X#vfdB?gm+Ye zdW-I?JGI%1{+7yi09IQSUMAvi{-QZaaEiH8)n4@BGQ9yq3vwpApAZrfRf0;(@t=45 z_vCDKYYG&NC*j|%q%pp7qn`1qe~?zG=IISGbd(XSH_SF;v$RUz*UZ>XD>nhZeS{_2 zNn`A&>VKYUr+tl%HrQ$A0IhPhoo3~mPIcB;xl2^48p|?!SgJSO%Z$}o;fOLPJ4h*7 z!;r%}BW>m@v8BVSWNGSZtr6){DMtg+1HQAcOQ<@` zP74#7%!PJZLIU39h_=Uz-sYfHqUw1L+Uq9sItLBKEr;zYK^o_ zpSH_w=9wBlaSVCUPuml1o@;9Ca17Dtr;pi^YNna68TP3Bxk#VZ9u@LDV2`TgnXm}E zF?%V#f4Mz@Su}cnnmx~#fo4~x3^ie!?6kV2c*Y_-Er>>6=_s>1s@6E7aZOmboi+z( zj%e@!UFnEMoT%!bylv$TyV)t@g}W`!lIKTkP3sF1R~E#TJ-`3%`P{+u^IJlfs5X5* z+CG-*GLp+Cmu#;&-_&07IB%!*RpehK?P)HfZh4R7bna(k$8w`z_Y-lDyT)nH(U;>U z%>yn^(b&%RrOQ71{(c(o5OhjV-2;gt*yrPO!MFDC^!E;j^-N4lU??VLJv*LJ_@rfj zGW1e%_OEG8^IY7DW52C?&lR`(W^Ye&vrB`#>j`JWF_&ve+pZ+Awc7Qq9`mgK&)mT* zdz$AgUen;xJf!-3QzxX@_lseW?En;uf^ZzQY)xEq6~ft&Gd7igjy*G&V8v1S^07+a>ntH$1G@QU%LX)x1B*Y3$E+pNhxDrrhvoY!g-SKF%SW2V*1r@AhL3e9`ex!_7E@QS8*U+evlJ5!6F?Zq%X&Tz)Nb>CXm zZ=4E|+rrCE{-mp$v1&NAF+ z85enLmFFB1e(dNab}*5lqxRg5XO7L`leEfuhq3!uZ^gq^cw3r7dr6A$QA2J21Ba%2 zA;Ce{)|w7Juvpe}LbUuA*FbBFfP`N1ByHI}}{OKUQQ>95_poO9%2 zlvjOe>cLk%x*Kz&&$RGQM{2|Nz5R)~;!bK`L8K=CA&TEhkw&0aP0izR?Ir7~s{XoQ z54HQbqx+4=(hgoHnGU2M8C$lfZ&VZfLHk)tU+X1RSJ&B^$D*twkHcrxKTbPHeZ3Rf zzTndYMQdz3<4~WC02P3UkQTyEh!M3MQo7X4beW|C3lzk+0?BREu)C12BR#Oy5dVi#vywiNT zR%%Jvt)J@*_t$7*+di}q=&3%XM;V7dANZ0+KU~|pm^xIS>T@PgOTt%Vj?Z0i`19c} zJ?V!(?%htk8kFX9b_N(yGw(M(E$`L0=iudS!LKaba$|Ysv+!EVK&IqZwKY9BQq>Bq z^vp>tJ99ET5UvLl%|_o|&BoPN;g9D1v68cDrR40;{kd>8S&=z9Hz#xSOA%b^E~nnw zmXUsIn+FG6mS{?SuV_k*(O}3-yH%!2zqR0A8@Ojm8q_LDLkD9Cc%(g9*f;OFQ8g3p z9?Qm_E^EIZb#)9SXT%=4VK{r~PQpI8ssw1FsgK`2)bYh!M7J(@XyN#Rx<=d8CH2(p z#%&{`wmVr`TK~33tA7KdeZ&iZWh!f6i^@pe-vqc$q~D>e+rX@)-G-96U{x2~MDhTRwD-7&yl z!Cf7_H)*A}uHK~pyY241{i3@?D!52)nWNeLn{P5)FpR+qzZz+s{0eTHkKP$+|Hqc+ zcgBAlIz}Z7Bm_LZ`Srr_@qNjMqI0&+AjtH|?L@`FNpj|u3!$8o#67nEERK&&LfaOv G+5TUGL6E`# literal 0 HcmV?d00001 diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow5.png b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/android/app/src/main/res/drawable/arrow5.png new file mode 100644 index 0000000000000000000000000000000000000000..b83a5d7e35ae13313311f0dbc4ea8de0b00d4250 GIT binary patch literal 5768 zcmcgwYgAL$whlM92E-;jDxxKTfno(i5(0tj22k06AP*lrePIY2%oUQDY$c#rs0S6eb z^CB6UVae=dSq!#8yrfi)tt?GR6P0ch@$(qbQN98t0t7`EF7#Cv6-pF{GLk{?BJge* zW-)vT2);3rvB)x^Z&va$-x#SJ^9>8;F-4rvFyC-~Fo(wt@%UOut{jkC=KRwQEsj>`}htGKv0xR@I(l^3u$d_JGW4q=6aFag0- zlt^%)k||O6O){XELL?WfQ$2|cqIy3ouFbYi-*MtW?Pc7 zW?Lk)D|iK|6v|!!=85b$*=Bhmp)*g!!V0k>OoA%_%dwNnHb`-)VuSR5ptieTnE+NH zIoUqPpK2*8vQMGFW4A!Yw%YwET9H;F!&oaYg>VSWm@W~6CICY&NQ@j4 z;us1a7-DnyOm-NP9iGMsMMC*VXm}8ti?G>NXtFdC90vAd|SOOZ!fRSLaI1dS9=jMjx3VBR6o6BW}hVwa0VQ4Owi3wq6 zMC9d%M+n0w<58(-v!!h;@z%|jClvw5l)U^rUId%V=P|jVY$21)3l%Yi5yCts2gAaJ z+z4TQcz(nr8>|ZKcVXclSuLvafRQJP2+L*j@|gT^UbsaSkD1E}!AY#u+KE5br@ zMV4J<&1;ERflK8jwtc!1+hlty6#EhlhX_U1hENE%V0jGNp!iR!@h{D5i!a`QS$gc1 z9(iTqt#d1+`FOEVjx8#H%1xd{MAKTfnr}>uzTU*MryP zzCsd-_GJRPC{5Y)>-Dey=AS9AGWdi#>aQ=D??z@UbJ(}st;_Md%0YQJW9PKUTFH!O z%hQ`1!@ajln?%!sJikfb%+*Jp*`6_R|L(wHl5Y0PUw#3VOKgS z#SbAh#o?rgznDm}IR=N3&_4p6Zhk->e?BpBKRV&%R#gY-$`SvbwPlXC??3K2{isj- zVhLq%_xSdQbGs-82REb9UrQbr*P3N)gTtB6VwDkpHIZ&yV+g!Zyu7o})tl;z=(c|5 zNPEYfKH|5!Qbn((nz`_7R#VMtroNYoQk36$7=;jaX^+~0c` zjR{)vPH+nr;pNN0O{u0HSAm<1QU<>U_dIwGz>};c-z%y$o2dqeUB_dU${i+B{8ffv zTRdLwSLEt_hJok|ASOpml~pnIF(@VCl85nRq`{&8lUSuB887cBa&5WhMjx5Jy7JCm zl+twp+;oFOyTu)gm$zBmF7&_eVCoglS~7kjR=IZ`vT)w&$^tQ%9bmqNEQ|*e1mmBA z>4z*V0CPT=onX#IbTdA4yyS*b8u~npjV&e;7xb-kr?2M$YL%9JaYL;+DFH9fhMDfF zsq7A>o;%avkPpF!Ab2_izkyP+AXuD=mum`LTP}n7Utli9%V$CmsLq0li6LbTm>FPR z2QvmQe+LT4gv@6_ZgMSo=se{1pC(cCe(QU=LnYRTpkOnt|j5Oxxt z&ISkNMGxcb0EAQr4Fbg<;lorIz`B|GF*k5S8YTNoq;5&ASrChp&O&yoYO1aa+%5)( z!E+wQr}NFq1@;JN z6p-p(bh1PVbFWz~@$!bz8+-Rx#p9&*6F*g1+`kl_%(l2!t(Lq2?yljz`zyg+Iw;>^ zR#O-HtoESQnMe;l#*F6i(uWQsi+kQW+D3CI{xKdIx;pxF{B+`ozqa?f6Rl|pzEEk| zSqI>KAwI&=lPT`>CwtAh3Y4l&z=Puq#z-_Oj zY+sD8&(V{8T6QO}w&;Zm8JkMC)WAvPh$mhf+#iyd{h9ztfDu5-s_( zBWvs_)&6Ql7baL+gLD-+cTHL&eKV6{enq zJ$m=}mWOj2_L+~rW5`||tMv2}+)KnSXS#Zyb)=ngZQgpsktV8CtyTAzrB$jp`d+r- zWPOd99jEkUAdgoPFqV7s)>Z;m53qCsHh|t44%GL08jbU{F$Aq3313pF+NAG|K~>RK zP--bhldYEpNKfc#Jj9)?r!vUD=ZIHwOL`VhWB?6Dg)*s_;NzgzoV)YqPpS~ z+;oVLdlpsgvJNHUCTpTqsH)#O6o;GI2~-@anoZMxq!S6u0$2tCI}b2InSx;uzDB^BP&~_8=6Npk3@h6gsOozwo3B9_OTgd@ zG|S3H8T3OYI(yHR`w@_ij!5lT&xyeY>6`iL$QLo278 z_g=i|6zH-4OyKQ396i^hzHvIk?sSNMvG;CG-=SkQPxE$~yG>t3AD)Vw<@G`p6Eqn) z_96ESV^Lr3KxW^zkT_+F>~j4VN3#l_wKk-}n(ycz|6xi(iSBBSxg+<)-L~AQ*?xlP zO?{b-?RG4s{aM@Vc12^mf+nJxr!*LU?)mZ`_Rt$A5v02BP$!{p+rb#ztu|Ror1@04 zbjnCLX7cygKWs^{la|^!Wl&SkO&PDJUYRmxq~4h_oKqi98PhM#FeEJCold_vPb6_~ z$=2@4DlBb-G=~@hZtOfLUIvssJ4(oZZ6{bW9l`0&cwB6D;VMG6DrbsNEAF zXqz$^f*?C}W0at6%0L7`cIrl+pl!+s5d_((8-oRHQ%0bmSe*hD{Rb=tH(B|cTl1H> z1FK;b^J~mQ^C!!j^xQnev>U&ehd6fQnt3S9ZhUPX;@gc==AlTt(Pmcn7uedcfoF7W z?nzs~E3;H_6?}i5Nw;;~Nr6B+_JM7|FCGM3XSxj+>|AH+K4x2dMS>E&BbwwJ==DRQ zGi?<7Fra9dq!0texk-u?r#h41@Fay2C`u+NVu0eW{UqQN^?>FGv zG#RuOf}S6-_3k|gx|(VW%CCo@Gn0MX3qda?MO5kikaLqkPVC9 zSnOeyb(S@2fBJCi0;J3;;ZAGdyy4Y`y9cebnJf8ETWV6Gt>rmcbK$keEAY}*E6>&R z;LlZBI3S2aqQ6ycJnh~*Y*nD(X=+CsO%H5K*l{GZD^tr=CGHSb6sKJ*DAoi#UV`6V zE)EGbSJgbd*ZQq#Slz!S@Gn)AGb=d4@Hc=9B0K-Fb5-kMX}j|A?SLGMiC9Ed-fgcrpYFg4Xxb=QtITsoZ|aOzOc zx-!z1%$(tucQmT<;_vD^dvZ$Dv1tL$DGa2o)&Jc!+omZ~%SwU-$J&xS;dsw@bnbgf zISqjNvF;1?BjYcm2ihagJCE<9$}|@~ys^4x8FqhT0HV_b?ukZI)3QfaRa0f3UidfK zz>ai}lW}lYSeAY3{nGLai?77t<-vi@k!y-qWZ&DTrhb!volxB?zwq9b#dx_S&^fB` zKw9>LIpA218C1WK1D$)e7#u!tT`+Dgi^qPyvH-3hnm!+W&e5TfPiv^(ti@iaHeoNW zG{E(YpLV(I?aa$%Mew6}y@%$ZcfaQ0x&akjO%kwX6^=Duxeu4R{FRLp!nKVPVcifi zJNQ1E=6l zmXXe%FuvP&r>Vw73TkVbRl$wE@(DoJ{`ADN>39BKxLMNEcGc?t=ChR#_mx;|BEsu; zPCeAMIqgyHmn}ZOzz@}~{TGxA9zF5w^aphMy1KJpJs*Z!S8;ktl=rc28vF_#=?|=n zztt%H8h#~row{&IbpNYPqXXPZHl;;9dsmQvlcL(jJ?lGPz6rO@5tgQhG4`;hV^7Yp zDAGc%=2jhR;&?|+RM|89;cQZuQ}pR+I`K=Vh_hdj$!95hEdMJ`h)qG;7q5TspXxk_ A0RR91 literal 0 HcmV?d00001 diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.h b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.h new file mode 100644 index 0000000000..855f3ed793 --- /dev/null +++ b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.h @@ -0,0 +1,8 @@ +#import +#import +#import + +@interface RNPhotoEditor : NSObject + +@end + diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.m b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.m new file mode 100644 index 0000000000..84b47a435f --- /dev/null +++ b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/RNVApp/RNPhotoEditor/RNPhotoEditor.m @@ -0,0 +1,147 @@ + +#import "RNPhotoEditor.h" + +@implementation RNPhotoEditor + +- (dispatch_queue_t)methodQueue +{ + return dispatch_get_main_queue(); +} +RCT_EXPORT_MODULE() + +NSString *_editImagePath = nil; + +RCTResponseSenderBlock _onDoneEditing = nil; +RCTResponseSenderBlock _onCancelEditing = nil; + +- (void)doneEditingWithImage:(UIImage *)image { + if (_onDoneEditing == nil) return; + + // Save image. + NSString *newImagePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject]; + NSString *fileName = [[_editImagePath componentsSeparatedByString:@"/"].lastObject componentsSeparatedByString:@"."].firstObject; + fileName = [fileName stringByAppendingString:@".png"]; + newImagePath = [newImagePath stringByAppendingPathComponent:fileName]; + [UIImagePNGRepresentation(image) writeToFile:newImagePath atomically:YES]; + + _onDoneEditing(@[newImagePath]); +} + +- (void)canceledEditing { + if (_onCancelEditing == nil) return; + + _onCancelEditing(@[]); +} + +RCT_EXPORT_METHOD(Edit:(nonnull NSDictionary *)props onDone:(RCTResponseSenderBlock)onDone onCancel:(RCTResponseSenderBlock)onCancel) { + + dispatch_async(dispatch_get_main_queue(), ^{ + _editImagePath = [props objectForKey: @"path"]; + + _onDoneEditing = onDone; + _onCancelEditing = onCancel; + + PhotoEditorViewController *photoEditor = [[PhotoEditorViewController alloc] initWithNibName:@"PhotoEditorViewController" bundle: [NSBundle bundleForClass:[PhotoEditorViewController class]]]; + + // Process Image for Editing + UIImage *image = [UIImage imageWithContentsOfFile:_editImagePath]; + if (image == nil) { + NSURL *url = [NSURL URLWithString:_editImagePath]; + NSData *data = [NSData dataWithContentsOfURL:url]; + + image = [UIImage imageWithData:data]; + } + + photoEditor.image = image; + + // Process Stickers + NSArray *stickers = [props objectForKey: @"stickers"]; + NSMutableArray *imageStickers = [[NSMutableArray alloc] initWithCapacity:stickers.count]; + + for (NSString *sticker in stickers) { + NSString *stickerFile = [sticker stringByAppendingString:@".png"]; + UIImage *image = [UIImage imageNamed: stickerFile]; + if(image){ + [imageStickers addObject: image]; + } + } + + photoEditor.stickers = imageStickers; + + //Process Controls + NSArray *hiddenControls = [props objectForKey: @"hiddenControls"]; + NSMutableArray *passHiddenControls = [[NSMutableArray alloc] initWithCapacity:hiddenControls.count]; + + for (NSString *hiddenControl in hiddenControls) { + [passHiddenControls addObject: [[NSString alloc] initWithString: hiddenControl]]; + } + + photoEditor.hiddenControls = passHiddenControls; + + //Process Colors + NSArray *colors = [props objectForKey: @"colors"]; + NSMutableArray *passColors = [[NSMutableArray alloc] initWithCapacity:colors.count]; + + for (NSString *color in colors) { + [passColors addObject: [self colorWithHexString: color]]; + } + + photoEditor.colors = passColors; + + if (@available(iOS 13, *)) { + [photoEditor setModalPresentationStyle: UIModalPresentationFullScreen]; + } + + // Invoke Editor + photoEditor.photoEditorDelegate = self; + + id app = [[UIApplication sharedApplication] delegate]; + [((UINavigationController*) app.window.rootViewController) presentViewController:photoEditor animated:YES completion:nil]; + }); +} + + +- (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length { + NSString *substring = [string substringWithRange: NSMakeRange(start, length)]; + NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring]; + unsigned hexComponent; + [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent]; + return hexComponent / 255.0; +} + +- (UIColor *) colorWithHexString: (NSString *) hexString { + NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString]; + CGFloat alpha, red, blue, green; + switch ([colorString length]) { + case 3: // #RGB + alpha = 1.0f; + red = [self colorComponentFrom: colorString start: 0 length: 1]; + green = [self colorComponentFrom: colorString start: 1 length: 1]; + blue = [self colorComponentFrom: colorString start: 2 length: 1]; + break; + case 4: // #ARGB + alpha = [self colorComponentFrom: colorString start: 0 length: 1]; + red = [self colorComponentFrom: colorString start: 1 length: 1]; + green = [self colorComponentFrom: colorString start: 2 length: 1]; + blue = [self colorComponentFrom: colorString start: 3 length: 1]; + break; + case 6: // #RRGGBB + alpha = 1.0f; + red = [self colorComponentFrom: colorString start: 0 length: 2]; + green = [self colorComponentFrom: colorString start: 2 length: 2]; + blue = [self colorComponentFrom: colorString start: 4 length: 2]; + break; + case 8: // #AARRGGBB + alpha = [self colorComponentFrom: colorString start: 0 length: 2]; + red = [self colorComponentFrom: colorString start: 2 length: 2]; + green = [self colorComponentFrom: colorString start: 4 length: 2]; + blue = [self colorComponentFrom: colorString start: 6 length: 2]; + break; + default: + return nil; + } + return [UIColor colorWithRed: red green: green blue: blue alpha: alpha]; +} + + +@end diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow1.png b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow1.png new file mode 100644 index 0000000000000000000000000000000000000000..de46111c6f86d52f34ec73bc51eabe817e0db07b GIT binary patch literal 8410 zcmcIqdpy(o|KDaYmD-4s(u|psOO|5IOm3UY=!PN`wQ`RgrX-_-x!*6bQSIcATvEz$ zNg74YRuf7nORcGsmP)$*-s|Z5J>T>FouY`xb!D=m5%gR|w>&J_M3*5(4=M zmJ*&rAU~NxAXEMj2%!W5SsqdT+cqKu0$X%=rx(M^)rAlc9%{TVFns?3V`gXs(11XQ zOak~d^Z;WYni(1r7DZrMVZI{>;CK152?qTg!U(p)c)7ZxZNnoEpv{dp8k=HB3(;sa zF*5KVVY{8fygK+~g*n7vL=a3&Vq#*9WAMh|k#v&{mX?+#re-E)W<~&E6croB*vB*q zi_-m*O3t^KKG8y*@Fc_1nZsF60ztNeBC z?|8S!!v{coax?$J|8?!}c=to$jBt?a$io5DFvfvMU~FFdhlBr&nCBvz$kX+g^!-_z z@2j9Vq=iJ2e-)avaH;*edGqtL&V)06SC-x4>zY1@ zXahlKnA4u)$Bu2mPa+{&ok=yaS4(;wW*@3_5Tq$5J~trA5Gefr{YT|W)`@DQ)LOUa z#LiS*I1Djr>z^L_?J7OEwa($OpQoW$I|BV$i>3PL^SdkI$5~_r7;gYllY>}Hsk9UD z@%~R7oJ$!FFG}K2ha4;I4v7!n^qfSK2|d7hlA3``NfxIso~?mXs@Bo2BTEv=>~*R1 zG>>P7iHtYz>>Ln*Xm^aVxc3gbHxkY1U0JgVzE0HumCjrTQ}6qBEEW#&_JqAh9xi5`RxY^3 zWhRGBeCf>>e6h-b!gNsvx$9*a_ZkCR@@N;6DM~CTqTp68Q}NKwo@G>Afal~%ay$&X zU61?uxKpu?lo!lCiCmFPX1lQICDBhQ1&qkIHX4Wwr%F39A0IRucB_mLmJsF)*VlDF zqb)A2t-jEw!|@30w)Z!JVf(P$%SXR@T;|PaY+9<5(774z6z52Mlpq_dfKw!H8u7Le z)(g1PNi_Gxs;W#fVW8P#A7a#@k}u##X?-2l%BQ{hdTR-5n{olAoayj~?~OKUm5$G8 zlvg>K{gF+V>3rBjlEz`h;c(=yAb3-8HI?z&i-%__{F2=Xfjdo7hzc8P9MgCMNf)h< zH1)iG6Oss4l%>iz!NAc;Yud|*Rhnjn2?Ota``zn4=at`XXRI1CWm z5yv8~jHNP0-l(sJ!l#f1sAT3;L!0?R>1f)cX9#oz=+k3t3A`cWN*=AJ?v^qXu8lG{ z!eVOQ)qH$Rq*+PbZUL zJCFvl&9XRF-WNAf@3_t!=mk6sYpg27Z|$wi{oaUBI1OwSxU9SRMH|JW?(#&w-)3vm^6!FjlfzHVzvujhUb_7$Z)DAra zof`zhUex6-F~V?`^ZNOkKKBaXk@+SZrTu*UTSiIKUe~*4;s%P4!r+ zyVcyz4&~Bx8@fOa@4%e`-H0lCC2T1fWVx;qwyEs z4%9h!K!9bb?n1f!GL%Qd=5(PGI`6@qb~+N(_qY($(F=hG&VT?b^9eDR`oNzbfg`=r z$m}4tWb19J1V+pT7W06DD>1y8%NU1CHUPjWGJA?G$wZ+!n=51C;EYGWuq1v|4hqA*(%~+zq(~N^i&3D|YH+7fXQEp|u0YMgSO-vtgKk_bBSIVrOFKWT1SD6< zmHa0Dj0#yargVuln2sGQm&(Mg>?P>%y>NV-s!B;f;Gi+99w;O$-6RV)s^g%u7Mc@l;ukAc_6j90Ys^?Dh}0*(r>bZiTPqCe&cqIwP#MDAr8n zdnBt71@{9qWjVAI_QeJA41qoS!Z|gC;p>ukTW$dd!@e)|CGrLip9%p78e$dNUCgcS zwk0T?>y&4U><9p-Jc!?hP`nGsTMm!2DTi(s6~rM+N)t{<`$zX)ZpSoytLl9-r9X@! zS878=)i<~EHYg*7CCBsMRl+IsJ3Z9abx?72+745=wi=pqGsI_iIz(1G7(O^|mmqKY zhXwFd+yQSrb2X@_w7M*)+9rV+yrihus_!5Y0mBUj9I2YKK#QE4i zPJ+nda$c*k76Eq9ea4P}J-8(?7|2KLy305aS^xOHcjkcIRko0{77C91#=ao81jY!y z`9?WBl`iP0so4M(9bWA9p&A5w?~h$Ri@=4SSW{w%LURj$yD)ScP@8RqB0oI*X8kEq z0fuPPCll&5TNGHj@XzTI1a@{k;44}Kg{)IWbJI+JK9vuV_CN64H3pn{6%a0gB60)} z*F13qFn6_xdKJVbwI3m!2mFJCx^Y{;kJR6+^I8Kcj$KriauCqtV?0AO5lFXW<6Al^ zP!V-tA=||zfvF!>ClY{d6xBAG+1UzDmF$h=mZd?YE`zjgJsg?XtEJce9z1zi1#CgT z2APdJH!=GZSdTRFjDW%T`IXAsucko$yj_slnqGMj>G}uJ_Bb6fk-AbRGajg}3Eraf zdNou$mz6es4x~+fODh0RS*Ngr!NAj%)^57)pyc;3YiU6+UjA=ZdEOZi+4`Z^>bJ2R z_13y){h)+VF_Y1y5UG!Y0R%RvjCA{n2Ro=kChR8YEQQBo$;4}KUJvVme#&!L7vKcr z;}3Wb8>cabUR|4-QA2Y-TjfnC!+24!B5%}HHbgcGA8&rAoI^W)4uiRq2$5Z?Tz4=A z6lryf3W`|BY4_^9E`Z30-B0#AfM6O8Bey=bfQl^zeH>*#n5a*IveE$|hMYaCOD25r zdZ^4Qf~Qtt_cns^ae@pMY<(OJ<3}A^r1u)s;rr1Q0J7Ei@v=`dugT}OdK&~P-d)*y zwunMF8%-NW5J8!Qb61ao?a`v#7K(aKPGAzq&E1wD-mKzQ)QU{7A%+@zXRw@Jty&@+ zgu5bXBb+y2VdKMv$BerZa50wX#6Gz@8BpTML|L`H?e z{(MNB1jgo$Z46E3;X{MflRJU>%(CqC3m`PZi(*Vp1w=MEeV3t`Ctw)uLc*#LNa0$a zunwmLMxE+gBJ2sMh3uGx%K{$W<-A_n59@0{8zh|shaQ=Du+kFjovizc;2ug~CI<~O zd-DWLtNabH3!v)3U5jqwII(5luFVvkySN18O<_{~3Yrt!`qg^d$eNj=s`73;7ZR=#U1JfFXs&0#F(!2FImsfV!xA2=hgu$N9#LH}BjckTSFtebwJB2y) z;@IzL>?-}=yZ7e`_N#nzZ1MiA$2C9ZcRom5Z6Dca!E5rmVO`kTJl z={)b3mZIIY6K;KD;*~NYbW-FDs-T*yMY*{+PQRgh4S%LI^^p)99Zh_V)(YU~2Ug^j zt0~MS36ZyL0Th|Jh!>#Pq1(`1%%54U`Dis@b)*_auaSaHr}i}Lh>5Hm@@(i4C|)=v z&W3RCu_nvt`_ookJLvU#gi$m{&Z_k^3|xe5P=W3@Ju>l|-NbU>sv{!gh?;Db&Qq=< zXmeC)cL$Esy)ypvs1X;-T?DcEn8aLseW_>zoDP6^S-H-$@p=F>%2j8;#t)$z?2+PXo5-;he0=OQmHtNYk^8vD zF;$_;W86p{Q$Oh0@OFyC5OresugJpyDeBQT2u@!G?jBu58jGnIHh%UVRf5ud^dHFG z0C_Q4e?2|DJQcSuK+%cKR16wAzmqCa*BK5*-p3$h_s}h2i^Zk9SstFMt7H(6zKTsx zaKO@XnW~#5hk|%f1qGji{({tO14yQVlFNzoayGrQ2kTVIR5gDRvW^#3RPyPsoSK&a z^3W4~%CYp7sq{pLaW9x`6!C5B0#$wsoVW2$NAq_iP5!namEJI(FYs3>GaWMu!f=(f z9yaQUrHD^c9=xc+O38n4%KfCA)u2SBuVm9%4x88KGFNt8P(Q^8%3W5a$TCVqx~b&7 z=s|NQ+i{#pl|82IMnU@A1zLWMf#PaJQ?!Ao+I45!N_aD3E76=%rGnWJz!ifGpENH<~?ddG}+KHp$x7{Sk*B0`$cLFXiqYOa(p%`%0@?z ziCS8q&DO5|>9|zM#!XA(z#gdZfBUtNaa8S!p9;(yuESlaH=Jn$9@DwspIC0gn^Vce z;tj^D6PRI#tfixnv7$l1$!69}_?RJOjIb?IhGJOj6u?o4gN?@OIZQ%x8H3Q(ybBNW zw$tYxWELY_h@24@0*CzYoF&UB8qIxHQZ){a_DjVKaJ<`ZhIxPg4(8T^0uS$o@`v}h z7_demjy1Yn){$)t!AUosG<+KhZ@yp347*|7-NPUFHS>GguBhF|D2Q9yRcyg=t}^0j zOZYa1Hqk--`j?tlMNS7(B-d8G?Awc~(+7n^xw)Qs(T(AzS=H-stT;xbCGTlneH8z6 zUO&A@kddz@+c~w%NcvJ5B0JI$qw3)R^VT~+!bcx0FHf!7S|8*@ccZ6gC$;A{n5o{! zteq)s#6Ov|BQ8I-%bReF;2pQ>CFf*eZl?ydRG7ih#Nos(cg|~w9t=DXKk=W|tIdEn zQ~Kf#zU;TKLV3MFxb=jn|3WuMTOQ^I^&>*-Au z0?FX)ZIZ2r84UZTW#oQg1&-6K@Etu}d_1`}5KK;@E;pVhxe@+Ic@Rga@O)(QY4Pq} z@I_S;6yO=hWqe$GagIT%@9=xCc`*-+l!Svlb?=GNw_5vWq;bB-uf4=Gs2SKcL@oa;UT;d1|%x&F}_JFn_O_iGBCwqA;g0gUpVr+Z6q?geu`) zH~+hb4}gcCl86583O%07c(vN=?>0H_Vnr<{y#9;4M?%HjtUTo=nVI@@;NMvZ0a@Yd z{FlvAE{@})5G2pxU$fFgbR+a8<3$_(?xQBa2PVyBGy4A?)LUTpfqT5u&Aj1e znJi{_R0wm09z~;Cpi9?CAXyFSUQvPko7oR8OldNm^@GVOV~>HE48RD@Mhx{`d*~0AtP* zpfwUqdx^)rnD+xe!vYQ}#F%j&NTQxK75~yaFUUVY4wA_5n!(a?oVz%8BuZy|kIQ_> z!VINckc*KrX+NO?&uytS|6{&~Y87U}e69006bU}ToroV_tzs@|J+Anp@m!SN(#<+V zEnsN)1pj;0o{zIp^Ofz7TtUG-h}cD;pPMUxTAt}~bH3v>LvuQA&(h86MAf#Hb|upv z|JdS_CFq=&T8?zq&VF&}*-3bZC_ohc^lH-FA^eB6TS}?G$(>Ib4)THxt#6s0cXFFj z1`zB>VmNSx+k}H5u|EVTrA#2$ewN|D5u$|mYAt^V?kZ*h!L}O=hjQUv!NAM8SMyZ4 zieM(C;{Jr;P$tY3h}O0I5NuP-0Rp!ahQlf0Ho@JX*dGFvqC9o9DuzR;5GA-%WBEhy zQh^G3^;`f!x1augrs-(>{4U1L_=D*$OIl8QKi3}@J^6k%=HYz!y@X0$eu!5X1ve9S z&}#FWkMB6m^V`#G$vV&s1!baMLWQOxS#W9KDdBpFowj6r_YePWpz~=LuT%19MRWZT z4wJ9PTZ87SI%;(X_-CN{Oa4C6G-=KIYwxp0=+7^_s}Hw&dfF4-e03t*b8|~prz^NM zhvUZKC-OqS9nT}2Gdyc&AM*vb?whDIth{D9LlQUslkv-AUpQ}vr}7Q_cfn#-hlr|2 zdJZRznOFFJ9rpVgW2#qfZb;3mBW>x^t-_% z>f__eZv!1I^4k=S0{+rKuP}qNH{;&N9T|CHbsZ&8NvVHYbYbZx>7|$BpBue}I8+-h z(RUO<7vaa>00TVRfyUaRnFlYP9))Gg0Sd6{)#4~U@UY}w2o4}wU&kJ}a>HPtPj z6TH5ne%azaZ^kIdufwLYJMKM`HS(nVK0=atW5XNW%fLnkQDrW&-m2nc1PyT^7Dem8 z4`a`s0>S-uDWuvpNI-v4{OgCCzc^SpuYU3<{Q?L>64Tt#LaQ8#%j-I__EMm|#judS z3>74gWdE}58ruR$-W`-~lK#dnYHZsp=c%dd`kYTkuXG7KCHX6|*r(NTUArd=I<`G2 zOmZcJLuPNSg?T<}8oa%8bl6O{d`CdX`0vx&;G12z$E#mIjLqq#3`ZWio*MDW0;}+9 zP5{WDT2_bpru*sX%WF!6_6`U`uHCO2-mRaz3#@SWHVo^+vY+Lzk1w`Y(LXtJNcFg1VP_0TbPY!1 zC5$!wtf^;_M}}Xwy~Xn6duJueaaQ+vQQXtG5!44l#Yx$D)4Dh4^5`bRH)^m7P&Xp< zsmKUU5=sV(YbD7Kn8!Q7ceW`i^m6}oy&+atkD zR0oXAPcgFqKXHZN5Yqj)m^$eyPs ze+-&G_a;P~TM=vzrjG|<*gReC8fye@rl3y+3O|Q&KXaV z@m-8Q6cFpVpQ$P2194X486egJ;=MLNEZW(p4#fKIXMQV{YiHMsf!Gd+xpHms#y(9b zya?@nrmqxeJ7-+LpveA#KwKf$ezU9(ya6c!wnuV-wsYqB{Xnb;!=|l}Yu|WV4FzIg zdn#A1omG7Xi1mS3Q?5O5uNn-Zi-7Hq{bHT+UvBP@fswf`OV$3svZWLK7NJ2~!MGR< zX5I8<$gD;?@IfEvex_qF0QV}n#>(fqN-WiDqieOh=AO%kC<&by@NO?Qg^8f&LU-uP z=eppffyvRdl!%V#&PQ^%j}UF(cq@ z`jUc+@*%hD4L#TK3j(f)aaUCPW zHP`&+oZp;luC>>~xO7R1-}BR+r%)(>eSEemSq^jZwiA32d-Bj*W3A`y=-9mv>IyFW#1Gs@H$Z#kw_m1v|`@;g8?gu`}K07+66t2LNb z3-ycV2t1QZU94fnH415}62~-vz$LB{$8&@pNV-M=UObcIcCH9TB`#p5QURO*47ngl z8cc#?DEwfGFA#D0(OiCPh9C-w5+PBsbNP`7pHD*5R5C?D*`Gn9qmjtyr=Y+|Cc!2D zD_AB)3RIe62@p~gOXL_&t(0@v-qJ$}ic}g14D2HRIG>u7v{a)iP!xeeyFBG}c4~4` zj6f6o*q5%uTs`(w zk36;TWNfXf056qju=#SR-1u4KZd%t?V<#oK&K?o_uW1sgLh0InuZ|Oxu9GO`7#xH= z4)6b*(Z9C7B-Q`#jCig?kX$a_e_u(r?hgkh6u>GW zao#|u>|ih{5g~s7)SqDz)1EZmI78Pl`&qR&W|ZbVW9v^rEDL|Jb@1Mo2Qb+TRs;vJ z%veyRuQAezFBlF7YNnPKqPjSvlaeUph#ThN700(s@}~tc`{P5ptd%Hjq#j^wfPG~k z)D*iYo1K)>=?v4k0Osxw z0QHRB=gTP!(;Xwd=Nki2l!jL*7gWhto2hsdN4z?axx0no=-cX~G=k?Wl;%{Tx??jD z%kuzw!Axz1+_uj_EQ>%?fLH+HEX1-I#8eQWAlpL_OE-wGf(W+T!Ilo9ubDaswm$_i z*Uky)>fPz2bWCNKj-j+4?FQl~P(HMvs+no`c_)S={>(sc?_f9-NqEH^pgI|)={7SQ zCmWrVbXb_?o86FpyBt&q(R)5_F3 z0Id)4_uJ;AT$bLbbO6yuTg2gFuxa~*_F)Q6xf}b-$Ap1C&p*U}5}+Ok4wr$^?j4_e zWF0!*!J{Z2Yzr+JPPWvHd_qtE%{KPi##&1))^# z?{BN3EeS=4ct>T8fj(A8SbS01)!AY--(ETF>mR%j?;oh5(K!eq=%UgBm?LqHO6Y{9 z5HWu~-ak}DTLZ?^9F?ya=%<$G`fE_ytx5jn?>jAGN2PxtGj0=Mp&97GDZ2hSC~fO3 zF+sOiUibAs1;)W$)I>I-W;rTV271FAy8gLl>Oc@{q|s@KuA*@e^(=?uK1w?@ODx{$ zwESA7KNrY6p(luiX6i75#Y(~Z*K}F;8t9kPb-EYrm8>d#N&wTDr2En2oX6|3evi@~ zGFZoEAw4xj`z(89XO;erf&O5&xF{Llo#>EEH&Y7(SjX5%JKZ5E1A)QXJ{xIgIV7t< z2xM&!McN}A5)lYNtnD16J;5QFYNoy$z}gNr{*FEI_R7F_R0YUOBsR?i@U5`0KB0) z(crWk@%7&k$egEh9fC$e&9M9Y&K5&&SG4*1Lu>c1?y@RSdES%K;b+^U9FCXFN80jg z#;)J3UaRP`I#9XlWrt)dq5iAAFE3eF7a|T`fSdMk#1|MW`b@;OjKPAX=|u-tg>_kj z9g@vXak?9JYB6p);D)W?Aht|5tZ6o4%OXb{B%?|%>ayyMbR)q}*Np_&9sce}#0s-S`Q#ITv*r|1@Pkn$Wi z69c_zxhts6YNR*0iP%0c(%bgCoDA$i_1T#&CPVYg)-7&J)&jiF12fQ5NZ3qNzt{;fX0&2PLM0-DW_N*dN2Kp6p%HV8&-|cm005i+Ir0KwHk=yIZdT0Aiw^A93wC;D6 z*|f_*Z#n3$-*aYbHwmkAwtwk{MT8=QyWOyA1HFT+-(SquC2p7qyzO$s;CvV)y}=RD zL3(>81s&Mvuk(vbaucMz#zCG0Rj1{>JoHVlL)5b@@pRVbKR(D5Gy#VXf=3IHm%U1h z{mdu3^FRN&B|o7)L|k)mCgw&7ss>{mSz9ew=wRh*Rlye zn;p8}i=C76E2a*cysIPzSw+rU)$zU*;b<5@}GIc5wB_D+vl?X5azYJ z4_o{uOgFvuB%#r3I%c`D(YX3-esA{Ka$$|!7@UZ6k{FzbbAS-fM2u(m9f!5K zD0Gx98n0->tgfNIdn2%mGh_ z9QEDi96R7?fnJW-Je2KeyM{~f{k_)W!CjulvX6f5S^kT~4o2hg%Ha5>O6j2q1aBk4HXePDEMJgdcUdAK-kG&-D}xD>zW34Chb-^K=7 zW`rXH2gwp7Gz&$MW^E_w^@cQzc44zKXD^vSS>DavQyGo7Gsv1GW{K1>=)jvErg@ok zldt{c8gje*va8$o2pbtDH>s_;r6G!H);5uT%MW%NZENtmnPevED@3F9)fXR=r5SoP z>=kjL{pUSo(9-Oa&Z*T)W{^=%wse1J%fi=_D{H%w5wT&Pxi_7RdDpD59(k$JMEcQ| z)b29vaX#<_X*qa#WDspWPBO?zyLn4K8+l9?Y#=Pm&s6Jd-SgermHmD%5B24K`b}hD zV@bx&7yZWOoh^SSQ}Lh(m2+zsSgF_c*V&X|-bu4E=Kfp8TofNI+wB<}`ZH z*rEJ{ds&KyFQW3?+I>mS3Ytm}Ms*IGj~rWc-SLn6VYi0fs=YOwgMXi`NRWx&JX^lz z)5Dh2lN;kRCQpfB!MSM5T6Kd}eK8@d`bFlp3_+9pKsc^Smh);q+_df7fjZmX%*h?i z8#^BTB`)Xj?{_v{E@Kdz9zMRb@oE`k*Z%Oy4WXkq&+p)s=1~Vm-u+vis`EMBc>{4_ zfB2LJ6o(t-B-`Au>gVR%FGMWwg}pGt6nh|igAJY&E3o@X4_>eJyITuyik2dEovHQk zH}UXh_@H~X{=a;~reB#3uZ#Uf_zBkE5BJ40n7eDb3-p6k-J6EtmaYt&&N|kV(f5F5 zp!Y1pdXt8!Vbjl)g2ln2@{!IxhezL?%-nsX`<9-_4)fQw!ILDr?+O3V;1d>nSK2pq zcj`6Rwc+33m5{Zp@1FY5;IQc`JU$kMJqrG=_Pwj;;Re#av-_dG1baM81Oh5!)o{aO~>(~yA4tSJw^sQVUf zheT-Ybww6pwVk_OyUhU?VDYM(*BPT1 zhHv`8IQQm&VD#%@2Nj+LkN2M%zBUpHPnEQrk4}s^uL(07=T-M4uXMexn z-rsNUZ-3{UkJ2S^QIjT2pMW69r09jBWe7sq55HaG--40F`};qJi<5fcDlLLcoMQb^ zkm?$D1bOSPiiDNe%GkxIRFxYb$y8;?0(7}*U?YfNu1+nHX3H?I44GV^j9}ewy~y%X zWJa)(f@3+cYN2ecV&MjjZ25+`1nGusX?P}UZlsq$heCi{87A@4<>n~0s4jwKi;Kd& zbvTgaWusu(5v+OE3B6XvF7XnoG%~N?fDpEn8x-sn8Xmw6;Rl6>`+M;?+^|4SSRj|r z=7yj_9F)iNvj4GQHce(0x=ggdJ{MRKthE@XMgs%$^Ya7p`2i}8Jdhh69v;Zy1@d@o zV6e3XN=%|-E4AKZ5kxYrRHIO13YF5!8c~v=T8~ArK&dSSOp)~}u2O5S6I3kFiUe{4 zIM$@dY;)BP1+Ou667_4uOsRvXUa!fq>CBV{%5r46G9{)3F4qxMy;g;(v};xWLud#5 z+61r)v9XRh{!mM9u44)=7 zOsj?ZMXy>MgdXmgJXWy8FJQJiHS-DXaX|i zf(kV<2__T44~970a5g8H%?VB52BAUWXi(^E4j<)kNNTJqQ;}8hN7UdDlpFjS6*Of^ zFv$2IZI#eyr52MYrLt&I1Pew26pBogCk>OxLM1_Lt~6N64w7W@*bHLxnM-z7P}k7`ww2@yjI9KlxzsCBu|#fvJWc$pc?;a=~?N~8*i>5}f!2p0xmLb*qrW?UFDLfHSw_J}w0h6h zXOG@WmmhwzJ8@IoIO?A?l4ZR|XR2{X0VS?Wnn?moFaO+%j{to6+?~%E8^w3Leg=yzCjc`Lnfi zuTolkwxn(v|MNVoNTdrZC6JfbSptv6Sdl8%l}YzOP30})ooTL&0d{hUo@$_5YT0e= zT_W1Z*KW8Z%1C|I0oPeZsvx7xa*}GMFi(kf?%>7;H>!xHyXJ=DVk7k&z?L`6lr;eB zb`yv|3UK~m3L|}Ha!FkcKNZmi3c-hCq*|KUZQAi>iteTxegk~Zsmd((76Bb%7)bjFKm2Kv1y-M};v?a@qug<>v# z?&J*HVZgnOs&Zk3?XsAhMYLT2O)?k%%gK4;3{*|Wiw*ReXx*6zbFtRR`Lr*pj>K`; z1r0LH&V|#Imfs%hbBYHL3#qPZ~P z(f1xp0Es{IeZ0(-`Q>2=o>R#MlvASbZtI)WV6==?sL0j5RXTj3<+hGt77tc^6>D z+2ozC8IK_ErkHVW@{VD~lgLTaMEa{LRb=^?W}p|6G+&Yaye+JjYHY8yO|`0qICx-t4wCGZL z5=onHY_A|`5bYF6W1-j*TQWW(eE8;V+VdfC zWfjRX&~K4L27>c}Eo!w3BWtNOYCPn**cSC{CBfNe0|R`}&Lg%w%MA49W7a%}-Y~Xz z+Gycb1gF(Ti}OK`e`2HUG0^MD`i(QTFCuA`#K~$K4PKwe$!H${jf{pAiiWo2jkv2z zY?Qo~DD1@?w|y7k#559573$9e96~2<-9QJhL<`w=Sn-V)`K`o{=jQI69xTB`TEvH^7 z>R&f_yKcEdLuktLkIy7JTxm&BvjAIR)2G4=aggQ-TbgND=__M+>i&Ob^dv)ycOK!x zZVuxbKJ4x=TJYiN4r4Dq?BOu-@L{IISb$jHuvR>ZeFkEXTRsP6f#B7ysbr_dR_3VjOnrPBrdXnX{oD zR&lXw?Hut~c@>_ut*;D5?VJS;Fvo-f~nX}*zW7m@X@z^L6Z=H%IU;UM8rM-mHS zXO5O9-Cl+5N+e|o>Ud#%qxKxh{)t<`$P!~+OG$9!@ur>~hOPp8KBp7&Y9^V(lgMd) zJ>SvApMeh9OBq@3!I@~(?j!@9YweiF_d7Lj@3x;w&Z1pkvFGQ{h~MlI>W|gvRN}gi$*?K0gFhAeq4pXK`T0%ji!l!$CF97G z&JxV+acSfv;q@I`AID)ENO|2i5&|yBjXm}fbs4V?tSRmC@SC*l&Hkm_1Gf^Z`@GFn zQHQ>{VtU8#PILXDgN5Fx_Gr*_=E%HD8}pVc^5RAE$cilCxZ6i6y94|t-QP-d9=)or z94Om9dT#Zh;Ru)g1&P)4ssG%#=IGUtAIiG={C4WgZq`?JHz!u7Y0Xt>hekhKmp%1C z!QPH>y{oZnORCbZpEsxkdBl8f?d}`|cQwhG)Bb9X-k&jnY z-K&1F`61ZXFH_mh}!^e;{8f3bdWhTGCAe>nRbKeqeXreEG3hCMftv@?rjSMQ%lJHi_chA)jp72kLoXC3ob zpMVp`YFV*<_zSviCl8E%zSEWM5>@ zK;H|kc+;~b{+R!UNdO#aB7~1A6<6`*tiZ9($Cif9{5z?obWU@J!1RxN=*^S!iO{81YR$DfMCt};{Af$Y^lY0zx^Q`d+`jP*q0_mvp`y8OI{ znewx-X^Y3Mk;)jTYni*-Jee`D%das?`qL&A9QRs}2|UY_ z`fUe7dBs=WzjmG;WB@yLu$No#(@pESawN>p^Z8u(#6}JzZr*h{`Q=Uu9CQ)~vokL| z&(Hhy>Gw2b?cv?eo)3EFJ-S&Jf1n|fiiF~Iy-3)%FR5Ql_}XuN^v~C<|00eS$B7!| Hr@#MSO;e>K literal 0 HcmV?d00001 diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow4.png b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow4.png new file mode 100644 index 0000000000000000000000000000000000000000..2f029f512140afeb90fd9e95629c3b975466bffe GIT binary patch literal 5769 zcmcgwYgAL$woaN;1GXdtPSLg|#PB)?4M`wCvJF^eBhvCv0f7SQCIpN^63JGA=n*V6 zJgnZ<5nlzAbO;s&Y-t4*B`3MoBc+7MX{nDYITi^m)zk;R%bj@;>K(n~o^gL%$H>_G zTl1T9eRHn4)@E6~EGf=o<{L8!1cFEWQgj7@K&*$~F1Hyll2CtrA3WR@OEZ-O!Ykgk zACYjdZZ?51W1TcL1J6iIK*aK*5G+rgD+y5*DS%BNh!(08n0UPeXXZ)@q_Qa1oijZw zrZg{#l^&kRO;p54)=HOdE|#QhPD&MTUN08ru@*)%MJfaW6iIN5sVXXzDG^l^%N`ej zciS+B#k5oK^--)vwh5UTiOZNV@?r@yJS2iG=JCUsk-`vOL>ONvoX-s9@&p{NfWr%8 z^CA#F7YPkzI{&d?w&J{eWCgm!ITxTP)><4_ARJCfNl8daScts1fWs3Cg&b}uCp44| z47RdVhGQzWOzAfj0hK7l#Zm<>mCKm6h*++CBOb*9rS=qXY5sIvnbKJ&s2Im);qXGZ zwxk@{7Aaf`USO&)#S6qdv5TkJSX^k=nJ4B*3MEAn8Lk8_&lOa$R*uV+Yvun#XqWkg z31Afx6J2xsp_ZZ|*Az-Tb`xamtlb~7m8qo)31@{wDc@Kumc(uXnSLy$tpZ4lyhu?j zQ7WN+Q7oQwaG6atta!0h952Hq#lXNZTZyAsp-xJ2u@s^>2dDgOGZb#L5z}N+&;(@2 z1&Jw^V7LT@9}IDMLN+&?&5cau@e#fd;YZHnh9O+8gPJJMljfKH5j8vl3Fo~)1x`=e10BVkk1ve zL;1O3T%I^0lFt)QMT1p={f-s>KB`Ss9z@KK2p41Gyj<9fp<*^aJT#Y`E9P?9{Jc;x zAC@IDG$PNos~mYPl`3(0ajA2krbsq8-wLHnd&41^*wGM5Y?CC9t&LVr$+O`@qCdPL52$_FL#KcmWZU6msN}zZx zCM%G@LC9fo{?8fxd+Y0v`v08~$94!hmW%V>SJH0#-GK=Oun)m0Y5Z4l2`Kb!jlT{G5jBfIQxkMEDA5Qbl!-1LA*=%Sj4!+b4C zCq>ESgH;qlGmTD2@f# zp8ayCed}jy7hWQs^zT`{)$R5oyc|^tsx5?VS6HGs33z#X5sg9dM|2NQx>3nA`Y=1I zQcbF&SR2@SLqAG>^ba317N;dW>w{;ImL$rpwVoiEh>R~|RkOh@4BSX4S@oTd*&M4S zb%WXZl8Lwq%&Lzp1V1n*d(zkZ6U>XWq;U+)1QT)M^H|j*cX)mQ&vFZ)>?%vt9fOzq z719{jnTT#VxZMCTOF>L~6-Ds{h?%7&)q%UGiP+x}tCA(-KLy&b~jzGzlHMQ1j+bx8gLR!N}HD%zUk2&+8h42GF2|yD- z5S#-}BUO}v%K&S@3Q$r-;l9V#cl^mj%>OJ_)f9y25>C1q|A~_Kf8%35u-8HegIcC| z(bufZsw_aXq`tyhYeFnuei@vlRg@Fk+4``TO~jSpe8ro-CLpV_IUFElaRr=W0fOq4 zP_ZjC`Wgwq*8p|`^rR0{PP!$(q9t8B54qJ@2qlnPNC2X6@f%#h>v#=h_ zCu3DfHZ#l&O;c{QbxSl9SM5zN?*X5fYKpEC#A7IV*yii0C0S2GZVOCA)eRr>WsQZf z1=Np&+uvmHT#OSKpmPVf-2^u%zN+8HTzbGl5Xoz;-6&321?Gl8gwPJNB-7~SJcx>E zNnG$2fq4Rw{@dH|1X{E|LU;s0; zk(M-YVefeZ?3}ZOnF3MIs;z{s0eSpSKgHKqgwF4B|8o^;hAs}8nDbfD;jpQ+-IH{<(ii%wig z-o!+#0&@lQx{=114M1eBm{m>bUZNU)Sxaj7X27n{%{EsARZ(^V_z#ONx{}ObA}4&! z6^A_O-|w^P$S8RtNMxm$D#UKo?nU^pKu?0rAlPfwrK99sV0z!86IPO0h$7HzoZ@M#t{qmzJ6h5ZjRAXL_+7oBwThCRtm^VGRWK^mS)O!Dj4GqS@)k#L zxP+3Q&=`9Ikbync6aJ=(bCqgn{riEU`LX!ng=Xw^ElKIg*vmw?R5P|20FBWUh;V() z*t-C{7)|~Nmt)4DrW}t`t$hbylc4S5vOlS`~jaRXn9JLi`X#vfdB?gm+Ye zdW-I?JGI%1{+7yi09IQSUMAvi{-QZaaEiH8)n4@BGQ9yq3vwpApAZrfRf0;(@t=45 z_vCDKYYG&NC*j|%q%pp7qn`1qe~?zG=IISGbd(XSH_SF;v$RUz*UZ>XD>nhZeS{_2 zNn`A&>VKYUr+tl%HrQ$A0IhPhoo3~mPIcB;xl2^48p|?!SgJSO%Z$}o;fOLPJ4h*7 z!;r%}BW>m@v8BVSWNGSZtr6){DMtg+1HQAcOQ<@` zP74#7%!PJZLIU39h_=Uz-sYfHqUw1L+Uq9sItLBKEr;zYK^o_ zpSH_w=9wBlaSVCUPuml1o@;9Ca17Dtr;pi^YNna68TP3Bxk#VZ9u@LDV2`TgnXm}E zF?%V#f4Mz@Su}cnnmx~#fo4~x3^ie!?6kV2c*Y_-Er>>6=_s>1s@6E7aZOmboi+z( zj%e@!UFnEMoT%!bylv$TyV)t@g}W`!lIKTkP3sF1R~E#TJ-`3%`P{+u^IJlfs5X5* z+CG-*GLp+Cmu#;&-_&07IB%!*RpehK?P)HfZh4R7bna(k$8w`z_Y-lDyT)nH(U;>U z%>yn^(b&%RrOQ71{(c(o5OhjV-2;gt*yrPO!MFDC^!E;j^-N4lU??VLJv*LJ_@rfj zGW1e%_OEG8^IY7DW52C?&lR`(W^Ye&vrB`#>j`JWF_&ve+pZ+Awc7Qq9`mgK&)mT* zdz$AgUen;xJf!-3QzxX@_lseW?En;uf^ZzQY)xEq6~ft&Gd7igjy*G&V8v1S^07+a>ntH$1G@QU%LX)x1B*Y3$E+pNhxDrrhvoY!g-SKF%SW2V*1r@AhL3e9`ex!_7E@QS8*U+evlJ5!6F?Zq%X&Tz)Nb>CXm zZ=4E|+rrCE{-mp$v1&NAF+ z85enLmFFB1e(dNab}*5lqxRg5XO7L`leEfuhq3!uZ^gq^cw3r7dr6A$QA2J21Ba%2 zA;Ce{)|w7Juvpe}LbUuA*FbBFfP`N1ByHI}}{OKUQQ>95_poO9%2 zlvjOe>cLk%x*Kz&&$RGQM{2|Nz5R)~;!bK`L8K=CA&TEhkw&0aP0izR?Ir7~s{XoQ z54HQbqx+4=(hgoHnGU2M8C$lfZ&VZfLHk)tU+X1RSJ&B^$D*twkHcrxKTbPHeZ3Rf zzTndYMQdz3<4~WC02P3UkQTyEh!M3MQo7X4beW|C3lzk+0?BREu)C12BR#Oy5dVi#vywiNT zR%%Jvt)J@*_t$7*+di}q=&3%XM;V7dANZ0+KU~|pm^xIS>T@PgOTt%Vj?Z0i`19c} zJ?V!(?%htk8kFX9b_N(yGw(M(E$`L0=iudS!LKaba$|Ysv+!EVK&IqZwKY9BQq>Bq z^vp>tJ99ET5UvLl%|_o|&BoPN;g9D1v68cDrR40;{kd>8S&=z9Hz#xSOA%b^E~nnw zmXUsIn+FG6mS{?SuV_k*(O}3-yH%!2zqR0A8@Ojm8q_LDLkD9Cc%(g9*f;OFQ8g3p z9?Qm_E^EIZb#)9SXT%=4VK{r~PQpI8ssw1FsgK`2)bYh!M7J(@XyN#Rx<=d8CH2(p z#%&{`wmVr`TK~33tA7KdeZ&iZWh!f6i^@pe-vqc$q~D>e+rX@)-G-96U{x2~MDhTRwD-7&yl z!Cf7_H)*A}uHK~pyY241{i3@?D!52)nWNeLn{P5)FpR+qzZz+s{0eTHkKP$+|Hqc+ zcgBAlIz}Z7Bm_LZ`Srr_@qNjMqI0&+AjtH|?L@`FNpj|u3!$8o#67nEERK&&LfaOv G+5TUGL6E`# literal 0 HcmV?d00001 diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow5.png b/packages/config-templates/pluginTemplates/react-native-photo-editor/builds/ios/Resources/arrow5.png new file mode 100644 index 0000000000000000000000000000000000000000..b83a5d7e35ae13313311f0dbc4ea8de0b00d4250 GIT binary patch literal 5768 zcmcgwYgAL$whlM92E-;jDxxKTfno(i5(0tj22k06AP*lrePIY2%oUQDY$c#rs0S6eb z^CB6UVae=dSq!#8yrfi)tt?GR6P0ch@$(qbQN98t0t7`EF7#Cv6-pF{GLk{?BJge* zW-)vT2);3rvB)x^Z&va$-x#SJ^9>8;F-4rvFyC-~Fo(wt@%UOut{jkC=KRwQEsj>`}htGKv0xR@I(l^3u$d_JGW4q=6aFag0- zlt^%)k||O6O){XELL?WfQ$2|cqIy3ouFbYi-*MtW?Pc7 zW?Lk)D|iK|6v|!!=85b$*=Bhmp)*g!!V0k>OoA%_%dwNnHb`-)VuSR5ptieTnE+NH zIoUqPpK2*8vQMGFW4A!Yw%YwET9H;F!&oaYg>VSWm@W~6CICY&NQ@j4 z;us1a7-DnyOm-NP9iGMsMMC*VXm}8ti?G>NXtFdC90vAd|SOOZ!fRSLaI1dS9=jMjx3VBR6o6BW}hVwa0VQ4Owi3wq6 zMC9d%M+n0w<58(-v!!h;@z%|jClvw5l)U^rUId%V=P|jVY$21)3l%Yi5yCts2gAaJ z+z4TQcz(nr8>|ZKcVXclSuLvafRQJP2+L*j@|gT^UbsaSkD1E}!AY#u+KE5br@ zMV4J<&1;ERflK8jwtc!1+hlty6#EhlhX_U1hENE%V0jGNp!iR!@h{D5i!a`QS$gc1 z9(iTqt#d1+`FOEVjx8#H%1xd{MAKTfnr}>uzTU*MryP zzCsd-_GJRPC{5Y)>-Dey=AS9AGWdi#>aQ=D??z@UbJ(}st;_Md%0YQJW9PKUTFH!O z%hQ`1!@ajln?%!sJikfb%+*Jp*`6_R|L(wHl5Y0PUw#3VOKgS z#SbAh#o?rgznDm}IR=N3&_4p6Zhk->e?BpBKRV&%R#gY-$`SvbwPlXC??3K2{isj- zVhLq%_xSdQbGs-82REb9UrQbr*P3N)gTtB6VwDkpHIZ&yV+g!Zyu7o})tl;z=(c|5 zNPEYfKH|5!Qbn((nz`_7R#VMtroNYoQk36$7=;jaX^+~0c` zjR{)vPH+nr;pNN0O{u0HSAm<1QU<>U_dIwGz>};c-z%y$o2dqeUB_dU${i+B{8ffv zTRdLwSLEt_hJok|ASOpml~pnIF(@VCl85nRq`{&8lUSuB887cBa&5WhMjx5Jy7JCm zl+twp+;oFOyTu)gm$zBmF7&_eVCoglS~7kjR=IZ`vT)w&$^tQ%9bmqNEQ|*e1mmBA z>4z*V0CPT=onX#IbTdA4yyS*b8u~npjV&e;7xb-kr?2M$YL%9JaYL;+DFH9fhMDfF zsq7A>o;%avkPpF!Ab2_izkyP+AXuD=mum`LTP}n7Utli9%V$CmsLq0li6LbTm>FPR z2QvmQe+LT4gv@6_ZgMSo=se{1pC(cCe(QU=LnYRTpkOnt|j5Oxxt z&ISkNMGxcb0EAQr4Fbg<;lorIz`B|GF*k5S8YTNoq;5&ASrChp&O&yoYO1aa+%5)( z!E+wQr}NFq1@;JN z6p-p(bh1PVbFWz~@$!bz8+-Rx#p9&*6F*g1+`kl_%(l2!t(Lq2?yljz`zyg+Iw;>^ zR#O-HtoESQnMe;l#*F6i(uWQsi+kQW+D3CI{xKdIx;pxF{B+`ozqa?f6Rl|pzEEk| zSqI>KAwI&=lPT`>CwtAh3Y4l&z=Puq#z-_Oj zY+sD8&(V{8T6QO}w&;Zm8JkMC)WAvPh$mhf+#iyd{h9ztfDu5-s_( zBWvs_)&6Ql7baL+gLD-+cTHL&eKV6{enq zJ$m=}mWOj2_L+~rW5`||tMv2}+)KnSXS#Zyb)=ngZQgpsktV8CtyTAzrB$jp`d+r- zWPOd99jEkUAdgoPFqV7s)>Z;m53qCsHh|t44%GL08jbU{F$Aq3313pF+NAG|K~>RK zP--bhldYEpNKfc#Jj9)?r!vUD=ZIHwOL`VhWB?6Dg)*s_;NzgzoV)YqPpS~ z+;oVLdlpsgvJNHUCTpTqsH)#O6o;GI2~-@anoZMxq!S6u0$2tCI}b2InSx;uzDB^BP&~_8=6Npk3@h6gsOozwo3B9_OTgd@ zG|S3H8T3OYI(yHR`w@_ij!5lT&xyeY>6`iL$QLo278 z_g=i|6zH-4OyKQ396i^hzHvIk?sSNMvG;CG-=SkQPxE$~yG>t3AD)Vw<@G`p6Eqn) z_96ESV^Lr3KxW^zkT_+F>~j4VN3#l_wKk-}n(ycz|6xi(iSBBSxg+<)-L~AQ*?xlP zO?{b-?RG4s{aM@Vc12^mf+nJxr!*LU?)mZ`_Rt$A5v02BP$!{p+rb#ztu|Ror1@04 zbjnCLX7cygKWs^{la|^!Wl&SkO&PDJUYRmxq~4h_oKqi98PhM#FeEJCold_vPb6_~ z$=2@4DlBb-G=~@hZtOfLUIvssJ4(oZZ6{bW9l`0&cwB6D;VMG6DrbsNEAF zXqz$^f*?C}W0at6%0L7`cIrl+pl!+s5d_((8-oRHQ%0bmSe*hD{Rb=tH(B|cTl1H> z1FK;b^J~mQ^C!!j^xQnev>U&ehd6fQnt3S9ZhUPX;@gc==AlTt(Pmcn7uedcfoF7W z?nzs~E3;H_6?}i5Nw;;~Nr6B+_JM7|FCGM3XSxj+>|AH+K4x2dMS>E&BbwwJ==DRQ zGi?<7Fra9dq!0texk-u?r#h41@Fay2C`u+NVu0eW{UqQN^?>FGv zG#RuOf}S6-_3k|gx|(VW%CCo@Gn0MX3qda?MO5kikaLqkPVC9 zSnOeyb(S@2fBJCi0;J3;;ZAGdyy4Y`y9cebnJf8ETWV6Gt>rmcbK$keEAY}*E6>&R z;LlZBI3S2aqQ6ycJnh~*Y*nD(X=+CsO%H5K*l{GZD^tr=CGHSb6sKJ*DAoi#UV`6V zE)EGbSJgbd*ZQq#Slz!S@Gn)AGb=d4@Hc=9B0K-Fb5-kMX}j|A?SLGMiC9Ed-fgcrpYFg4Xxb=QtITsoZ|aOzOc zx-!z1%$(tucQmT<;_vD^dvZ$Dv1tL$DGa2o)&Jc!+omZ~%SwU-$J&xS;dsw@bnbgf zISqjNvF;1?BjYcm2ihagJCE<9$}|@~ys^4x8FqhT0HV_b?ukZI)3QfaRa0f3UidfK zz>ai}lW}lYSeAY3{nGLai?77t<-vi@k!y-qWZ&DTrhb!volxB?zwq9b#dx_S&^fB` zKw9>LIpA218C1WK1D$)e7#u!tT`+Dgi^qPyvH-3hnm!+W&e5TfPiv^(ti@iaHeoNW zG{E(YpLV(I?aa$%Mew6}y@%$ZcfaQ0x&akjO%kwX6^=Duxeu4R{FRLp!nKVPVcifi zJNQ1E=6l zmXXe%FuvP&r>Vw73TkVbRl$wE@(DoJ{`ADN>39BKxLMNEcGc?t=ChR#_mx;|BEsu; zPCeAMIqgyHmn}ZOzz@}~{TGxA9zF5w^aphMy1KJpJs*Z!S8;ktl=rc28vF_#=?|=n zztt%H8h#~row{&IbpNYPqXXPZHl;;9dsmQvlcL(jJ?lGPz6rO@5tgQhG4`;hV^7Yp zDAGc%=2jhR;&?|+RM|89;cQZuQ}pR+I`K=Vh_hdj$!95hEdMJ`h)qG;7q5TspXxk_ A0RR91 literal 0 HcmV?d00001 diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/build.gradle b/packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/build.gradle new file mode 100644 index 0000000000..39e601e048 --- /dev/null +++ b/packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/build.gradle @@ -0,0 +1,46 @@ +// NOTE: adding exif interface +buildscript { + repositories { + maven { url 'https://jitpack.io' } + maven { url "https://maven.google.com" } + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.1.3' + } +} + +apply plugin: 'com.android.library' + +android { + compileSdkVersion 28 + buildToolsVersion '28.0.2' + + defaultConfig { + minSdkVersion 16 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + } + lintOptions { + abortOnError false + } +} + +repositories { + mavenCentral() + maven { url 'https://jitpack.io' } + maven { url "https://maven.google.com" } +} + +dependencies { + implementation 'com.facebook.react:react-native:+' + implementation 'com.github.prscX:photo-editor-android:master' + implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1@aar' + implementation 'com.nineoldandroids:library:2.4.0' + implementation 'com.android.support:design:27.1.1' + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'com.android.support.constraint:constraint-layout:1.0.2' + implementation 'com.android.support:exifinterface:28.0.0' +} diff --git a/packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/src/main/java/com/ahmedadeltito/photoeditor/PhotoEditorActivity.java b/packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/src/main/java/com/ahmedadeltito/photoeditor/PhotoEditorActivity.java new file mode 100644 index 0000000000..48b0abdbd2 --- /dev/null +++ b/packages/config-templates/pluginTemplates/react-native-photo-editor/overrides/android/src/main/java/com/ahmedadeltito/photoeditor/PhotoEditorActivity.java @@ -0,0 +1,695 @@ +// NOTE: adding exif interface +package com.ahmedadeltito.photoeditor; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Typeface; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.provider.MediaStore; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.ViewPager; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.net.Uri; +import android.view.WindowManager; + +import com.ahmedadeltito.photoeditor.widget.SlidingUpPanelLayout; +import com.ahmedadeltito.photoeditorsdk.BrushDrawingView; +import com.ahmedadeltito.photoeditorsdk.OnPhotoEditorSDKListener; +import com.ahmedadeltito.photoeditorsdk.PhotoEditorSDK; +import com.ahmedadeltito.photoeditorsdk.ViewType; +import com.viewpagerindicator.PageIndicator; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import ui.photoeditor.R; + +import android.graphics.Matrix; +import androidx.exifinterface.media.ExifInterface; + +public class PhotoEditorActivity extends AppCompatActivity implements View.OnClickListener, OnPhotoEditorSDKListener { + + public static Typeface emojiFont = null; + + private final String TAG = "PhotoEditorActivity"; + private RelativeLayout parentImageRelativeLayout; + private RecyclerView drawingViewColorPickerRecyclerView; + private TextView undoTextView, undoTextTextView, doneDrawingTextView, eraseDrawingTextView; + private SlidingUpPanelLayout mLayout; + private View topShadow; + private RelativeLayout topShadowRelativeLayout; + private View bottomShadow; + private RelativeLayout bottomShadowRelativeLayout; + private ArrayList colorPickerColors; + private int colorCodeTextView = -1; + private PhotoEditorSDK photoEditorSDK; + + private int imageOrientation; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_photo_editor); + + getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + + String selectedImagePath = getIntent().getExtras().getString("selectedImagePath"); + + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inSampleSize = 1; + + + Typeface newFont = getFontFromRes(R.raw.eventtusicons); + emojiFont = getFontFromRes(R.raw.emojioneandroid); + + BrushDrawingView brushDrawingView = (BrushDrawingView) findViewById(R.id.drawing_view); + drawingViewColorPickerRecyclerView = (RecyclerView) findViewById(R.id.drawing_view_color_picker_recycler_view); + parentImageRelativeLayout = (RelativeLayout) findViewById(R.id.parent_image_rl); + TextView closeTextView = (TextView) findViewById(R.id.close_tv); + TextView addTextView = (TextView) findViewById(R.id.add_text_tv); + TextView addPencil = (TextView) findViewById(R.id.add_pencil_tv); + RelativeLayout deleteRelativeLayout = (RelativeLayout) findViewById(R.id.delete_rl); + TextView deleteTextView = (TextView) findViewById(R.id.delete_tv); + TextView addImageEmojiTextView = (TextView) findViewById(R.id.add_image_emoji_tv); + TextView saveTextView = (TextView) findViewById(R.id.save_tv); + TextView saveTextTextView = (TextView) findViewById(R.id.save_text_tv); + undoTextView = (TextView) findViewById(R.id.undo_tv); + undoTextTextView = (TextView) findViewById(R.id.undo_text_tv); + doneDrawingTextView = (TextView) findViewById(R.id.done_drawing_tv); + eraseDrawingTextView = (TextView) findViewById(R.id.erase_drawing_tv); + TextView clearAllTextView = (TextView) findViewById(R.id.clear_all_tv); + TextView clearAllTextTextView = (TextView) findViewById(R.id.clear_all_text_tv); + TextView goToNextTextView = (TextView) findViewById(R.id.go_to_next_screen_tv); + ImageView photoEditImageView = (ImageView) findViewById(R.id.photo_edit_iv); + mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout); + topShadow = findViewById(R.id.top_shadow); + topShadowRelativeLayout = (RelativeLayout) findViewById(R.id.top_parent_rl); + bottomShadow = findViewById(R.id.bottom_shadow); + bottomShadowRelativeLayout = (RelativeLayout) findViewById(R.id.bottom_parent_rl); + + ViewPager pager = (ViewPager) findViewById(R.id.image_emoji_view_pager); + PageIndicator indicator = (PageIndicator) findViewById(R.id.image_emoji_indicator); + + Bitmap rotatedBitmap; + Uri path; + String parsedPath; + String uriString; + Bitmap bitmap = null; + try { + path = Uri.parse(selectedImagePath); + parsedPath = UtilFunctions.getPath(this, path); + uriString = null != parsedPath ? parsedPath : path.toString(); + bitmap = BitmapFactory.decodeFile(uriString, options); + + ExifInterface exif = new ExifInterface(parsedPath); + imageOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); + rotatedBitmap = rotateBitmap(bitmap, imageOrientation, false); + + photoEditImageView.setImageBitmap(rotatedBitmap); + } catch (Exception e) { + Log.e("Error parsing Bitmap", e.getMessage()); + + if (bitmap != null) { + photoEditImageView.setImageBitmap(bitmap); + } + } + + closeTextView.setTypeface(newFont); + addTextView.setTypeface(newFont); + addPencil.setTypeface(newFont); + addImageEmojiTextView.setTypeface(newFont); + saveTextView.setTypeface(newFont); + undoTextView.setTypeface(newFont); + clearAllTextView.setTypeface(newFont); + goToNextTextView.setTypeface(newFont); + deleteTextView.setTypeface(newFont); + + final List fragmentsList = new ArrayList<>(); + + ImageFragment imageFragment = new ImageFragment(); + ArrayList stickers = (ArrayList) getIntent().getExtras().getSerializable("stickers"); + if (stickers != null && stickers.size() > 0) { + Bundle bundle = new Bundle(); + bundle.putSerializable("stickers", stickers); + + imageFragment.setArguments(bundle); + } + + fragmentsList.add(imageFragment); + + EmojiFragment emojiFragment = new EmojiFragment(); + fragmentsList.add(emojiFragment); + + PreviewSlidePagerAdapter adapter = new PreviewSlidePagerAdapter(getSupportFragmentManager(), fragmentsList); + pager.setAdapter(adapter); + pager.setOffscreenPageLimit(5); + indicator.setViewPager(pager); + + photoEditorSDK = new PhotoEditorSDK.PhotoEditorSDKBuilder(PhotoEditorActivity.this) + .parentView(parentImageRelativeLayout) // add parent image view + .childView(photoEditImageView) // add the desired image view + .deleteView(deleteRelativeLayout) // add the deleted view that will appear during the movement of the views + .brushDrawingView(brushDrawingView) // add the brush drawing view that is responsible for drawing on the image view + .buildPhotoEditorSDK(); // build photo editor sdk + photoEditorSDK.setOnPhotoEditorSDKListener(this); + + pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int position) { + if (position == 0) + mLayout.setScrollableView(((ImageFragment) fragmentsList.get(position)).imageRecyclerView); + else if (position == 1) + mLayout.setScrollableView(((EmojiFragment) fragmentsList.get(position)).emojiRecyclerView); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }); + + closeTextView.setOnClickListener(this); + addImageEmojiTextView.setOnClickListener(this); + addTextView.setOnClickListener(this); + addPencil.setOnClickListener(this); + saveTextView.setOnClickListener(this); + saveTextTextView.setOnClickListener(this); + undoTextView.setOnClickListener(this); + undoTextTextView.setOnClickListener(this); + doneDrawingTextView.setOnClickListener(this); + eraseDrawingTextView.setOnClickListener(this); + clearAllTextView.setOnClickListener(this); + clearAllTextTextView.setOnClickListener(this); + goToNextTextView.setOnClickListener(this); + + ArrayList intentColors = (ArrayList) getIntent().getExtras().getSerializable("colorPickerColors"); + + colorPickerColors = new ArrayList<>(); + if (intentColors != null) { + colorPickerColors = intentColors; + } else { + colorPickerColors.add(getResources().getColor(R.color.black)); + colorPickerColors.add(getResources().getColor(R.color.blue_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.brown_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.green_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.orange_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.red_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.red_orange_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.sky_blue_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.violet_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.white)); + colorPickerColors.add(getResources().getColor(R.color.yellow_color_picker)); + colorPickerColors.add(getResources().getColor(R.color.yellow_green_color_picker)); + } + + + new CountDownTimer(500, 100) { + + public void onTick(long millisUntilFinished) { + } + + public void onFinish() { + mLayout.setScrollableView(((ImageFragment) fragmentsList.get(0)).imageRecyclerView); + } + + }.start(); + + ArrayList hiddenControls = (ArrayList) getIntent().getExtras().getSerializable("hiddenControls"); + for (int i = 0;i < hiddenControls.size();i++) { + if (hiddenControls.get(i).toString().equalsIgnoreCase("text")) { + addTextView.setVisibility(View.INVISIBLE); + } + if (hiddenControls.get(i).toString().equalsIgnoreCase("clear")) { + clearAllTextView.setVisibility(View.INVISIBLE); + clearAllTextTextView.setVisibility(View.INVISIBLE); + } + if (hiddenControls.get(i).toString().equalsIgnoreCase("crop")) { + + } + if (hiddenControls.get(i).toString().equalsIgnoreCase("draw")) { + addPencil.setVisibility(View.INVISIBLE); + } + if (hiddenControls.get(i).toString().equalsIgnoreCase("save")) { + saveTextTextView.setVisibility(View.INVISIBLE); + saveTextView.setVisibility(View.INVISIBLE); + } + if (hiddenControls.get(i).toString().equalsIgnoreCase("share")) { + + } + if (hiddenControls.get(i).toString().equalsIgnoreCase("sticker")) { + addImageEmojiTextView.setVisibility(View.INVISIBLE); + } + } + } + + private boolean stringIsNotEmpty(String string) { + if (string != null && !string.equals("null")) { + if (!string.trim().equals("")) { + return true; + } + } + return false; + } + + public void addEmoji(String emojiName) { + photoEditorSDK.addEmoji(emojiName, emojiFont); + if (mLayout != null) + mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); + } + + public void addImage(Bitmap image) { + photoEditorSDK.addImage(image); + if (mLayout != null) + mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); + } + + private void addText(String text, int colorCodeTextView) { + photoEditorSDK.addText(text, colorCodeTextView); + } + + private void clearAllViews() { + photoEditorSDK.clearAllViews(); + } + + private void undoViews() { + photoEditorSDK.viewUndo(); + } + + private void eraseDrawing() { + photoEditorSDK.brushEraser(); + } + + private void openAddTextPopupWindow(String text, int colorCode) { + colorCodeTextView = colorCode; + LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View addTextPopupWindowRootView = inflater.inflate(R.layout.add_text_popup_window, null); + final EditText addTextEditText = (EditText) addTextPopupWindowRootView.findViewById(R.id.add_text_edit_text); + TextView addTextDoneTextView = (TextView) addTextPopupWindowRootView.findViewById(R.id.add_text_done_tv); + RecyclerView addTextColorPickerRecyclerView = (RecyclerView) addTextPopupWindowRootView.findViewById(R.id.add_text_color_picker_recycler_view); + LinearLayoutManager layoutManager = new LinearLayoutManager(PhotoEditorActivity.this, LinearLayoutManager.HORIZONTAL, false); + addTextColorPickerRecyclerView.setLayoutManager(layoutManager); + addTextColorPickerRecyclerView.setHasFixedSize(true); + ColorPickerAdapter colorPickerAdapter = new ColorPickerAdapter(PhotoEditorActivity.this, colorPickerColors); + colorPickerAdapter.setOnColorPickerClickListener(new ColorPickerAdapter.OnColorPickerClickListener() { + @Override + public void onColorPickerClickListener(int colorCode) { + addTextEditText.setTextColor(colorCode); + colorCodeTextView = colorCode; + } + }); + addTextColorPickerRecyclerView.setAdapter(colorPickerAdapter); + if (stringIsNotEmpty(text)) { + addTextEditText.setText(text); + addTextEditText.setTextColor(colorCode == -1 ? getResources().getColor(R.color.white) : colorCode); + } + final PopupWindow pop = new PopupWindow(PhotoEditorActivity.this); + pop.setContentView(addTextPopupWindowRootView); + pop.setWidth(LinearLayout.LayoutParams.MATCH_PARENT); + pop.setHeight(LinearLayout.LayoutParams.MATCH_PARENT); + pop.setFocusable(true); + pop.setBackgroundDrawable(null); + pop.showAtLocation(addTextPopupWindowRootView, Gravity.TOP, 0, 0); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); + addTextDoneTextView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + addText(addTextEditText.getText().toString(), colorCodeTextView); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(view.getWindowToken(), 0); + pop.dismiss(); + } + }); + } + + private void updateView(int visibility) { + topShadow.setVisibility(visibility); + topShadowRelativeLayout.setVisibility(visibility); + bottomShadow.setVisibility(visibility); + bottomShadowRelativeLayout.setVisibility(visibility); + } + + private void updateBrushDrawingView(boolean brushDrawingMode) { + photoEditorSDK.setBrushDrawingMode(brushDrawingMode); + if (brushDrawingMode) { + updateView(View.GONE); + drawingViewColorPickerRecyclerView.setVisibility(View.VISIBLE); + doneDrawingTextView.setVisibility(View.VISIBLE); + eraseDrawingTextView.setVisibility(View.VISIBLE); + LinearLayoutManager layoutManager = new LinearLayoutManager(PhotoEditorActivity.this, LinearLayoutManager.HORIZONTAL, false); + drawingViewColorPickerRecyclerView.setLayoutManager(layoutManager); + drawingViewColorPickerRecyclerView.setHasFixedSize(true); + ColorPickerAdapter colorPickerAdapter = new ColorPickerAdapter(PhotoEditorActivity.this, colorPickerColors); + colorPickerAdapter.setOnColorPickerClickListener(new ColorPickerAdapter.OnColorPickerClickListener() { + @Override + public void onColorPickerClickListener(int colorCode) { + photoEditorSDK.setBrushColor(colorCode); + } + }); + drawingViewColorPickerRecyclerView.setAdapter(colorPickerAdapter); + } else { + updateView(View.VISIBLE); + drawingViewColorPickerRecyclerView.setVisibility(View.GONE); + doneDrawingTextView.setVisibility(View.GONE); + eraseDrawingTextView.setVisibility(View.GONE); + } + } + + private void returnBackWithSavedImage() { + updateView(View.GONE); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); + parentImageRelativeLayout.setLayoutParams(layoutParams); + new CountDownTimer(1000, 500) { + public void onTick(long millisUntilFinished) { + + } + + public void onFinish() { + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + String imageName = "IMG_" + timeStamp + ".jpg"; + Intent returnIntent = new Intent(); + returnIntent.putExtra("imagePath", photoEditorSDK.saveImage("PhotoEditorSDK", imageName)); + setResult(Activity.RESULT_OK, returnIntent); + finish(); + } + }.start(); + } + + + private void returnBackWithUpdateImage() { + updateView(View.GONE); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); + parentImageRelativeLayout.setLayoutParams(layoutParams); + new CountDownTimer(1000, 500) { + public void onTick(long millisUntilFinished) { + + } + + public void onFinish() { + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + String imageName = "IMG_" + timeStamp + ".jpg"; + + String selectedImagePath = getIntent().getExtras().getString("selectedImagePath"); + String parsedPath = UtilFunctions.getPath(PhotoEditorActivity.this, Uri.parse(selectedImagePath)); + String uriString = null != parsedPath ? parsedPath : selectedImagePath; + File file = new File(uriString); + + try { + FileOutputStream out = new FileOutputStream(file); + if (parentImageRelativeLayout != null) { + parentImageRelativeLayout.setDrawingCacheEnabled(true); + + Bitmap bitmap = parentImageRelativeLayout.getDrawingCache(); + Bitmap rotatedBitmap = rotateBitmap(bitmap, imageOrientation, true); + rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out); + } + + out.flush(); + out.close(); + + try { + ExifInterface exifDest = new ExifInterface(file.getAbsolutePath()); + exifDest.setAttribute(ExifInterface.TAG_ORIENTATION, Integer.toString(imageOrientation)); + exifDest.saveAttributes(); + } catch (IOException e) { + e.printStackTrace(); + } + + } catch (Exception var7) { + Log.e("onFinish URI", var7.getMessage()); + var7.printStackTrace(); + } + + Intent returnIntent = new Intent(); + returnIntent.putExtra("imagePath", uriString); + setResult(Activity.RESULT_OK, returnIntent); + + finish(); + } + }.start(); + } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.close_tv) { + onBackPressed(); + } else if (v.getId() == R.id.add_image_emoji_tv) { + mLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED); + } else if (v.getId() == R.id.add_text_tv) { + openAddTextPopupWindow("", -1); + } else if (v.getId() == R.id.add_pencil_tv) { + updateBrushDrawingView(true); + } else if (v.getId() == R.id.done_drawing_tv) { + updateBrushDrawingView(false); + } else if (v.getId() == R.id.save_tv || v.getId() == R.id.save_text_tv) { + returnBackWithSavedImage(); + } else if (v.getId() == R.id.clear_all_tv || v.getId() == R.id.clear_all_text_tv) { + clearAllViews(); + } else if (v.getId() == R.id.undo_text_tv || v.getId() == R.id.undo_tv) { + undoViews(); + } else if (v.getId() == R.id.erase_drawing_tv) { + eraseDrawing(); + } else if (v.getId() == R.id.go_to_next_screen_tv) { + returnBackWithUpdateImage(); + } + } + + @Override + public void onEditTextChangeListener(String text, int colorCode) { + openAddTextPopupWindow(text, colorCode); + } + + @Override + public void onAddViewListener(ViewType viewType, int numberOfAddedViews) { + if (numberOfAddedViews > 0) { + undoTextView.setVisibility(View.VISIBLE); + undoTextTextView.setVisibility(View.VISIBLE); + } + switch (viewType) { + case BRUSH_DRAWING: + Log.i("BRUSH_DRAWING", "onAddViewListener"); + break; + case EMOJI: + Log.i("EMOJI", "onAddViewListener"); + break; + case IMAGE: + Log.i("IMAGE", "onAddViewListener"); + break; + case TEXT: + Log.i("TEXT", "onAddViewListener"); + break; + } + } + + @Override + public void onRemoveViewListener(int numberOfAddedViews) { + Log.i(TAG, "onRemoveViewListener"); + if (numberOfAddedViews == 0) { + undoTextView.setVisibility(View.GONE); + undoTextTextView.setVisibility(View.GONE); + } + } + + @Override + public void onStartViewChangeListener(ViewType viewType) { + switch (viewType) { + case BRUSH_DRAWING: + Log.i("BRUSH_DRAWING", "onStartViewChangeListener"); + break; + case EMOJI: + Log.i("EMOJI", "onStartViewChangeListener"); + break; + case IMAGE: + Log.i("IMAGE", "onStartViewChangeListener"); + break; + case TEXT: + Log.i("TEXT", "onStartViewChangeListener"); + break; + } + } + + @Override + public void onStopViewChangeListener(ViewType viewType) { + switch (viewType) { + case BRUSH_DRAWING: + Log.i("BRUSH_DRAWING", "onStopViewChangeListener"); + break; + case EMOJI: + Log.i("EMOJI", "onStopViewChangeListener"); + break; + case IMAGE: + Log.i("IMAGE", "onStopViewChangeListener"); + break; + case TEXT: + Log.i("TEXT", "onStopViewChangeListener"); + break; + } + } + + private class PreviewSlidePagerAdapter extends FragmentStatePagerAdapter { + private List mFragments; + + PreviewSlidePagerAdapter(FragmentManager fm, List fragments) { + super(fm); + mFragments = fragments; + } + + @Override + public Fragment getItem(int position) { + if (mFragments == null) { + return (null); + } + return mFragments.get(position); + } + + @Override + public int getCount() { + return 2; + } + } + + private Typeface getFontFromRes(int resource) + { + Typeface tf = null; + InputStream is = null; + try { + is = getResources().openRawResource(resource); + } + catch(Resources.NotFoundException e) { + Log.e(TAG, "Could not find font in resources!"); + } + + String outPath = getCacheDir() + "/tmp" + System.currentTimeMillis() + ".raw"; + + try + { + byte[] buffer = new byte[is.available()]; + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outPath)); + + int l = 0; + while((l = is.read(buffer)) > 0) + bos.write(buffer, 0, l); + + bos.close(); + + tf = Typeface.createFromFile(outPath); + + // clean up + new File(outPath).delete(); + } + catch (IOException e) + { + Log.e(TAG, "Error reading in font!"); + return null; + } + + Log.d(TAG, "Successfully loaded font."); + + return tf; + } + + private static Bitmap rotateBitmap(Bitmap bitmap, int orientation, boolean reverse) { + Matrix matrix = new Matrix(); + + switch (orientation) { + case ExifInterface.ORIENTATION_NORMAL: + return bitmap; + case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: + matrix.setScale(-1, 1); + + break; + case ExifInterface.ORIENTATION_ROTATE_180: + matrix.setRotate(180); + + break; + case ExifInterface.ORIENTATION_FLIP_VERTICAL: + matrix.setRotate(180); + matrix.postScale(-1, 1); + + break; + case ExifInterface.ORIENTATION_TRANSPOSE: + if (!reverse) { + matrix.setRotate(90); + } else { + matrix.setRotate(-90); + } + + matrix.postScale(-1, 1); + break; + case ExifInterface.ORIENTATION_ROTATE_90: + if (!reverse) { + matrix.setRotate(90); + } else { + matrix.setRotate(-90); + } + + break; + case ExifInterface.ORIENTATION_TRANSVERSE: + if (!reverse) { + matrix.setRotate(-90); + } else { + matrix.setRotate(90); + } + + matrix.postScale(-1, 1); + break; + case ExifInterface.ORIENTATION_ROTATE_270: + if (!reverse) { + matrix.setRotate(-90); + } else { + matrix.setRotate(90); + } + + break; + default: + return bitmap; + } + + try { + Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); + bitmap.recycle(); + + return bmRotated; + } catch (OutOfMemoryError e) { + e.printStackTrace(); + return null; + } + } +} From faeac41cfb67e03bfc8dc684176a8c51558eff16 Mon Sep 17 00:00:00 2001 From: ElenaDiachenko Date: Wed, 20 Mar 2024 10:45:53 +0200 Subject: [PATCH 065/175] upgrate o RN 0.73.4 --- packages/app-harness/package.json | 2 +- .../config-templates/renative.templates.json | 2 +- packages/template-starter/package.json | 2 +- yarn.lock | 34 +++++++------------ 4 files changed, 15 insertions(+), 25 deletions(-) diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index b657cf3bdf..b497b4f606 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -48,7 +48,7 @@ "react": "18.2.0", "react-art": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.3", + "react-native": "0.73.4", "react-native-carplay": "2.3.0", "react-native-gesture-handler": "2.14.1", "react-native-orientation-locker": "1.5.0", diff --git a/packages/config-templates/renative.templates.json b/packages/config-templates/renative.templates.json index 7ace2d20b1..35743376cb 100644 --- a/packages/config-templates/renative.templates.json +++ b/packages/config-templates/renative.templates.json @@ -1617,7 +1617,7 @@ "URL_NAME": "", "URL_SCHEME": "" }, - "version": "0.73.3" + "version": "0.73.4" }, "react-native-actionsheet": { "version": "2.4.2" diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index bf141e4a1f..5b584bde93 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -119,7 +119,7 @@ "react": "18.2.0", "react-art": "18.2.0", "react-dom": "18.2.0", - "react-native": "0.73.3", + "react-native": "0.73.4", "react-native-gesture-handler": "2.14.1", "react-native-tvos": "0.73.6-0", "react-native-web": "0.19.9" diff --git a/yarn.lock b/yarn.lock index c60f1a797f..41b5326ae2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3814,7 +3814,7 @@ dependencies: "@react-native/codegen" "0.73.3" -"@react-native/babel-preset@*", "@react-native/babel-preset@0.73.20": +"@react-native/babel-preset@*": version "0.73.20" resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.73.20.tgz#65ab68cce16bb222bb1faece498abb6f7b1d5db0" integrity sha512-fU9NqkusbfFq71l4BWQfqqD/lLcLC0MZ++UYgieA3j8lIEppJTLVauv2RwtD2yltBkjebgYEC5Rwvt1l0MUBXw== @@ -3949,15 +3949,15 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.73.14": - version "0.73.14" - resolved "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.14.tgz#e7767df11a8f54fd84ebff36d8962ef733c8143d" - integrity sha512-KzIwsTvAJrXPtwhGOSm+OcJH1B8TpY8cS4xxzu/e2qv3a2n4VLePHTPAfco1tmvekV8OHWvvD9JSIX7i2fB1gg== +"@react-native/community-cli-plugin@0.73.16": + version "0.73.16" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.16.tgz#29dca91aa3e24c8cd534dbf3db5766509da92ea3" + integrity sha512-eNH3v3qJJF6f0n/Dck90qfC9gVOR4coAXMTdYECO33GfgjTi+73vf/SBqlXw9HICH/RNZYGPM3wca4FRF7TYeQ== dependencies: "@react-native-community/cli-server-api" "12.3.2" "@react-native-community/cli-tools" "12.3.2" "@react-native/dev-middleware" "0.73.7" - "@react-native/metro-babel-transformer" "0.73.14" + "@react-native/metro-babel-transformer" "0.73.15" chalk "^4.0.0" execa "^5.1.1" metro "^0.80.3" @@ -4041,16 +4041,6 @@ resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.72.1.tgz#905343ef0c51256f128256330fccbdb35b922291" integrity sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA== -"@react-native/metro-babel-transformer@0.73.14": - version "0.73.14" - resolved "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.14.tgz#a4ee02c729216e4ab5b7c7aa28abbfe8e0a943a8" - integrity sha512-5wLeYw/lormpSqYfI9H/geZ/EtPmi+x5qLkEit15Q/70hkzYo/M+aWztUtbOITfgTEOP8d6ybROzoGsqgyZLcw== - dependencies: - "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.73.20" - hermes-parser "0.15.0" - nullthrows "^1.1.1" - "@react-native/metro-babel-transformer@0.73.15": version "0.73.15" resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz#c516584dde62d65a46668074084359c03e6a50f1" @@ -18113,18 +18103,18 @@ react-native-windows@0.72.10: ws "^6.2.2" yargs "^17.6.2" -react-native@0.73.3: - version "0.73.3" - resolved "https://registry.npmjs.org/react-native/-/react-native-0.73.3.tgz#aae18b4c6da84294c1f8e1d6446b46c887bf087c" - integrity sha512-RSQDtT2DNUcmB4IgmW9NhRb5wqvXFl6DI2NEJmt0ps2OrVHpoA8Tkq+lkFOA/fvPscJKtFKEHFBDSR5UHR3PUw== +react-native@0.73.4: + version "0.73.4" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.4.tgz#81e07d4e7b6308c4649d5fa24038c0e87b17f2e1" + integrity sha512-VtS+Yr6OOTIuJGDECIYWzNU8QpJjASQYvMtfa/Hvm/2/h5GdB6W9H9TOmh13x07Lj4AOhNMx3XSsz6TdrO4jIg== dependencies: "@jest/create-cache-key-function" "^29.6.3" "@react-native-community/cli" "12.3.2" "@react-native-community/cli-platform-android" "12.3.2" "@react-native-community/cli-platform-ios" "12.3.2" "@react-native/assets-registry" "0.73.1" - "@react-native/codegen" "0.73.2" - "@react-native/community-cli-plugin" "0.73.14" + "@react-native/codegen" "0.73.3" + "@react-native/community-cli-plugin" "0.73.16" "@react-native/gradle-plugin" "0.73.4" "@react-native/js-polyfills" "0.73.1" "@react-native/normalize-colors" "0.73.2" From 46dfa29e9440ecf9c08c2af65f2b2b1f86b785fe Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 20 Mar 2024 20:05:09 +0100 Subject: [PATCH 066/175] fix rnv new unresolved @rnv/config-templates error --- packages/core/src/configs/index.ts | 30 ++++++++++++++---------- packages/core/src/enums/rnvFolderName.ts | 6 +++++ 2 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 packages/core/src/enums/rnvFolderName.ts diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 03959d2043..030e9425d1 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -13,6 +13,7 @@ import { generatePlatformTemplatePaths } from './configProject'; import { ConfigFileTemplates } from '../schema/configFiles/types'; import { RnvFileName } from '../enums/rnvFileName'; import { getContext } from '../context/provider'; +import { RnvFolderName } from '../enums/rnvFolderName'; export const loadFileExtended = (fileObj: Record, pathObj: RnvContextPathObj, key: RnvContextFileKey) => { const c = getContext(); @@ -183,25 +184,30 @@ const _loadConfigFiles = ( // return result; }; +const generateLookupPaths = (pkgName: string) => { + const pathLookups: string[] = [ + path.join(__dirname, '../..', RnvFolderName.nodeModules, pkgName), + path.resolve(__dirname, '../../..', RnvFolderName.nodeModules, pkgName), + path.resolve(__dirname, '../../../..', RnvFolderName.nodeModules, pkgName), + ]; + return pathLookups; +}; + export const loadDefaultConfigTemplates = async () => { const ctx = getContext(); //This comes from project dependency const pkgName = '@rnv/config-templates'; + let configTemplatesPath = doResolve('@rnv/config-templates'); if (!fsExistsSync(configTemplatesPath)) { - //This comes from rnv built-in dependency (installed via npm) - configTemplatesPath = path.resolve(__dirname, '../../node_modules', pkgName); - if (!fsExistsSync(configTemplatesPath)) { - //This comes from rnv built-in dependency (installed via yarn might install it one level up) - configTemplatesPath = path.resolve(__dirname, '../../..', pkgName); - if (!fsExistsSync(configTemplatesPath)) { - // This comes from rnv built-in dependency (installed via yarn might install it 2 level up but scoped to @rnv) - configTemplatesPath = path.resolve(__dirname, '../../../../', pkgName); - if (!fsExistsSync(configTemplatesPath)) { - return Promise.reject(`RNV Cannot find package: ${chalk().bold(configTemplatesPath)}`); - } - } + const pathLookups = generateLookupPaths(pkgName); + configTemplatesPath = pathLookups.find((v) => fsExistsSync(v)); + + if (!configTemplatesPath) { + return Promise.reject( + `RNV Cannot find package: ${chalk().bold(pkgName)}. Looked in: ${chalk().gray(pathLookups.join(', '))}` + ); } } diff --git a/packages/core/src/enums/rnvFolderName.ts b/packages/core/src/enums/rnvFolderName.ts new file mode 100644 index 0000000000..3ba99fa4a6 --- /dev/null +++ b/packages/core/src/enums/rnvFolderName.ts @@ -0,0 +1,6 @@ +export const RnvFolderName = { + templateFiles: 'templateFiles', + nodeModules: 'node_modules', + platformBuilds: 'platformBuilds', + platformAssets: 'platformAssets', +} as const; From c0dee78190124e2fd045d6ef203abb1633560ea3 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 20 Mar 2024 20:11:27 +0100 Subject: [PATCH 067/175] rename rnv enums --- packages/core/src/configs/appConfigs.ts | 2 +- packages/core/src/configs/index.ts | 4 +- packages/core/src/constants.ts | 38 +++++++++---------- packages/core/src/context/index.ts | 2 +- .../src/enums/{rnvFileName.ts => fileName.ts} | 2 +- .../enums/{rnvFolderName.ts => folderName.ts} | 0 packages/core/src/enums/platformName.ts | 2 +- packages/core/src/index.ts | 2 +- packages/core/src/plugins/index.ts | 2 +- packages/core/src/projects/bootstrap.ts | 2 +- packages/core/src/projects/package.ts | 2 +- packages/core/src/templates/index.ts | 2 +- 12 files changed, 30 insertions(+), 30 deletions(-) rename packages/core/src/enums/{rnvFileName.ts => fileName.ts} (97%) rename packages/core/src/enums/{rnvFolderName.ts => folderName.ts} (100%) diff --git a/packages/core/src/configs/appConfigs.ts b/packages/core/src/configs/appConfigs.ts index da420e636c..86c1e55f1f 100644 --- a/packages/core/src/configs/appConfigs.ts +++ b/packages/core/src/configs/appConfigs.ts @@ -3,7 +3,7 @@ import path from 'path'; import { fsExistsSync, fsReaddirSync, fsLstatSync, readObjectSync } from '../system/fs'; import { logDefault, logWarning } from '../logger'; import { ConfigFileApp } from '../schema/configFiles/types'; -import { RnvFileName } from '../enums/rnvFileName'; +import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; const IGNORE_FOLDERS = ['.git']; diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 030e9425d1..cc78ed994c 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -11,9 +11,9 @@ import { generateLocalConfig } from './configLocal'; import { getWorkspaceDirPath } from './workspaces'; import { generatePlatformTemplatePaths } from './configProject'; import { ConfigFileTemplates } from '../schema/configFiles/types'; -import { RnvFileName } from '../enums/rnvFileName'; +import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; -import { RnvFolderName } from '../enums/rnvFolderName'; +import { RnvFolderName } from '../enums/folderName'; export const loadFileExtended = (fileObj: Record, pathObj: RnvContextPathObj, key: RnvContextFileKey) => { const c = getContext(); diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 75f55530a8..233e28bb87 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -1,23 +1,23 @@ -import { PlatformName } from './enums/platformName'; +import { RnvPlatformName } from './enums/platformName'; // DEPRECATED export const SUPPORTED_PLATFORMS = [ - PlatformName.web, - PlatformName.ios, - PlatformName.android, - PlatformName.androidtv, - PlatformName.firetv, - PlatformName.tvos, - PlatformName.macos, - PlatformName.linux, - PlatformName.windows, - PlatformName.tizen, - PlatformName.webos, - PlatformName.chromecast, - PlatformName.kaios, - PlatformName.webtv, - PlatformName.androidwear, - PlatformName.tizenwatch, - PlatformName.tizenmobile, - PlatformName.xbox, + RnvPlatformName.web, + RnvPlatformName.ios, + RnvPlatformName.android, + RnvPlatformName.androidtv, + RnvPlatformName.firetv, + RnvPlatformName.tvos, + RnvPlatformName.macos, + RnvPlatformName.linux, + RnvPlatformName.windows, + RnvPlatformName.tizen, + RnvPlatformName.webos, + RnvPlatformName.chromecast, + RnvPlatformName.kaios, + RnvPlatformName.webtv, + RnvPlatformName.androidwear, + RnvPlatformName.tizenwatch, + RnvPlatformName.tizenmobile, + RnvPlatformName.xbox, ] as const; diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 4a50e8fbad..01765a4f26 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -4,7 +4,7 @@ import { generateContextDefaults } from './defaults'; import path from 'path'; import { mkdirSync } from 'fs'; import { isSystemWin } from '../system/is'; -import { RnvFileName } from '../enums/rnvFileName'; +import { RnvFileName } from '../enums/fileName'; import { homedir } from 'os'; export const generateContextPaths = (pathObj: RnvContextPathObj, dir: string, configName?: string) => { diff --git a/packages/core/src/enums/rnvFileName.ts b/packages/core/src/enums/fileName.ts similarity index 97% rename from packages/core/src/enums/rnvFileName.ts rename to packages/core/src/enums/fileName.ts index 1c0ee2ee5a..e9d4360368 100644 --- a/packages/core/src/enums/rnvFileName.ts +++ b/packages/core/src/enums/fileName.ts @@ -11,4 +11,4 @@ export const RnvFileName = { renativeEngine: 'renative.engine.json', package: 'package.json', // renativeProject: 'renative.project.json', -}; +} as const; diff --git a/packages/core/src/enums/rnvFolderName.ts b/packages/core/src/enums/folderName.ts similarity index 100% rename from packages/core/src/enums/rnvFolderName.ts rename to packages/core/src/enums/folderName.ts diff --git a/packages/core/src/enums/platformName.ts b/packages/core/src/enums/platformName.ts index 7fa67b1444..d35e24ea94 100644 --- a/packages/core/src/enums/platformName.ts +++ b/packages/core/src/enums/platformName.ts @@ -1,4 +1,4 @@ -export const PlatformName = { +export const RnvPlatformName = { android: 'android', androidtv: 'androidtv', androidwear: 'androidwear', diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index a7c6e3670d..5b567c40f0 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -60,7 +60,7 @@ export * from './buildHooks'; export * from './migrator'; export * from './enums/taskName'; -export * from './enums/rnvFileName'; +export * from './enums/fileName'; //TYPES export * from './engines/types'; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 8f381c87b0..df5a6bde12 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -25,7 +25,7 @@ import { ConfigFileOverrides, ConfigFilePlugin, ConfigFileTemplates } from '../s import { NpmPackageFile } from '../configs/types'; import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; -import { RnvFileName } from '../enums/rnvFileName'; +import { RnvFileName } from '../enums/fileName'; import { AsyncCallback } from '../projects/types'; const _getPluginScope = (plugin: RenativeConfigPlugin | string): RnvPluginScope => { diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts index 9d7c12ac6b..3184374630 100644 --- a/packages/core/src/projects/bootstrap.ts +++ b/packages/core/src/projects/bootstrap.ts @@ -6,7 +6,7 @@ import { logDefault, logInfo } from '../logger'; import { configureTemplateFiles, configureEntryPoint } from '../templates'; import { parseRenativeConfigs } from '../configs'; import { ConfigFileApp, ConfigFileEngine, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -import { RnvFileName } from '../enums/rnvFileName'; +import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; export const checkAndBootstrapIfRequired = async () => { diff --git a/packages/core/src/projects/package.ts b/packages/core/src/projects/package.ts index a031d1485b..ea46808cf6 100644 --- a/packages/core/src/projects/package.ts +++ b/packages/core/src/projects/package.ts @@ -2,7 +2,7 @@ import path from 'path'; import { fsExistsSync, fsWriteFileSync, loadFile, readObjectSync } from '../system/fs'; import { logDefault, logWarning, logInfo } from '../logger'; import { ConfigFileTemplate } from '../schema/configFiles/types'; -import { RnvFileName } from '../enums/rnvFileName'; +import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; const packageJsonIsValid = () => { diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index d5a8d42ece..e4399235c6 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -24,7 +24,7 @@ import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; -import { RnvFileName } from '../enums/rnvFileName'; +import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; const _cleanProjectTemplateSync = (c: RnvContext) => { From 1762e41743745cc4ba4b22243ff5b41e4210b669 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 20 Mar 2024 20:24:48 +0100 Subject: [PATCH 068/175] publish @rnv/config-templates 1.0.0-rc.12 --- packages/config-templates/README.md | 2 +- packages/config-templates/package.json | 3 ++- .../src/tasks/global/new/questions/projectName.ts | 13 ++++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/config-templates/README.md b/packages/config-templates/README.md index 8835da8b1a..21ae14c067 100644 --- a/packages/config-templates/README.md +++ b/packages/config-templates/README.md @@ -1,2 +1,2 @@ -# @rnv/plugins +# @rnv/config-templates diff --git a/packages/config-templates/package.json b/packages/config-templates/package.json index a58405d09f..ebb26e5edf 100644 --- a/packages/config-templates/package.json +++ b/packages/config-templates/package.json @@ -11,7 +11,8 @@ "author": "Pavel Jacko (https://github.com/pavjacko)", "files": [ "LICENSE", - "pluginTemplates" + "pluginTemplates", + "renative.templates.json" ], "repository": { "type": "git", diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index e468b5b584..84f4c98536 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -1,4 +1,13 @@ -import { RnvFileName, cleanFolder, fsExistsSync, getContext, inquirerPrompt, logWarning, mkdirSync } from '@rnv/core'; +import { + RnvFileName, + cleanFolder, + fsExistsSync, + getContext, + inquirerPrompt, + logInfo, + logWarning, + mkdirSync, +} from '@rnv/core'; import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; @@ -38,6 +47,8 @@ export const inquiryProjectName = async (data: NewProjectData) => { if (!confirm) { return Promise.reject('Cancelled by user'); + } else { + logInfo('Cleaning up existing folder...'); } await cleanFolder(c.paths.project.dir); } From c861ccb3208a20c8435395297ab3ca580ccbfc16 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 20 Mar 2024 22:03:44 +0100 Subject: [PATCH 069/175] fix platform selector --- packages/core/src/enums/folderName.ts | 3 + packages/core/src/index.ts | 2 + packages/core/src/tasks/index.ts | 29 ++++- .../global/new/questions/installTemplate.ts | 18 +-- .../src/tasks/linking/constants.ts | 107 ------------------ 5 files changed, 40 insertions(+), 119 deletions(-) delete mode 100644 packages/engine-core/src/tasks/linking/constants.ts diff --git a/packages/core/src/enums/folderName.ts b/packages/core/src/enums/folderName.ts index 3ba99fa4a6..0f9cb6c607 100644 --- a/packages/core/src/enums/folderName.ts +++ b/packages/core/src/enums/folderName.ts @@ -3,4 +3,7 @@ export const RnvFolderName = { nodeModules: 'node_modules', platformBuilds: 'platformBuilds', platformAssets: 'platformAssets', + dotRnv: '.rnv', + npmCache: 'npm_cache', + secrets: 'secrets', } as const; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 5b567c40f0..e04af0750d 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -61,6 +61,8 @@ export * from './migrator'; export * from './enums/taskName'; export * from './enums/fileName'; +export * from './enums/folderName'; +export * from './enums/platformName'; //TYPES export * from './engines/types'; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 469432f39b..2bc0651e84 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -386,15 +386,33 @@ const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { }; const _selectPlatform = async (c: RnvContext, suitableEngines: Array, task: string) => { - const supportedPlatforms: Partial> = {}; + let platforms: string[] = []; + const supportedEngPlatforms: string[] = []; suitableEngines.forEach((engine) => { getEngineTask(task, engine.tasks)?.platforms.forEach((plat) => { - supportedPlatforms[plat] = true; + supportedEngPlatforms.push(plat); }); }); - const platforms = Object.keys(supportedPlatforms); - if (platforms.length) { + const supProjPlatforms = c.buildConfig?.defaults?.supportedPlatforms; + + if (supProjPlatforms) { + supProjPlatforms.forEach((plat) => { + if (supportedEngPlatforms.includes(plat)) { + platforms.push(plat); + } + }); + } else { + platforms = supportedEngPlatforms; + } + + if (platforms?.length === 1) { + logInfo(`Only one platform available for task: ${task}. Using ${chalk().bold(platforms[0])}`); + c.platform = platforms[0] as PlatformKey; + return; + } + + if (platforms) { const { platform } = await inquirerPrompt({ type: 'list', name: 'platform', @@ -403,6 +421,9 @@ const _selectPlatform = async (c: RnvContext, suitableEngines: Array, }); c.platform = platform; } + // else if (platforms.length === 1) { + // c.platform = platforms[0] as PlatformKey; + // } }; const _executePipe = async (c: RnvContext, task: string, phase: string) => diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 8e76dcb273..c11aadfdcb 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -1,6 +1,7 @@ import { NpmPackageFile, RnvFileName, + RnvFolderName, chalk, copyFileSync, copyFolderRecursiveSync, @@ -95,7 +96,7 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { } } - const nmDir = path.join(c.paths.project.dir, '.rnv/npm_cache'); + const nmDir = path.join(c.paths.project.dir, RnvFolderName.dotRnv, RnvFolderName.npmCache); if (localTemplatePath) { if (!fsExistsSync(localTemplatePath)) { @@ -124,14 +125,14 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { // TODO: read .npmignore and .gitignore and apply those rules const ignorePaths = [ - 'node_modules', + RnvFolderName.nodeModules, 'package-lock.json', 'yarn.lock', - 'platformBuilds', + RnvFolderName.platformBuilds, 'builds', - 'platformAssets', - 'secrets', - '.rnv', + RnvFolderName.platformAssets, + RnvFolderName.secrets, + RnvFolderName.dotRnv, ]; fsReaddirSync(localTemplatePath).forEach((file) => { if (!ignorePaths.includes(file) && localTemplatePath) { @@ -146,15 +147,16 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { }); // NOTE: this is a workaround for npm/yarn bug where manually added packages are overriden on next install + const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${data.optionTemplates.selectedOption}`; data.files.project.packageJson = merge(data.files.project.packageJson, { devDependencies: { - [data.optionTemplates.selectedOption]: `file:.rnv/npm_cache/${data.optionTemplates.selectedOption}`, + [data.optionTemplates.selectedOption]: filePath, }, }); data.files.project.renativeConfig = merge(data.files.project.renativeConfig, { templates: { [data.optionTemplates.selectedOption]: { - version: `file:.rnv/npm_cache/${data.optionTemplates.selectedOption}`, + version: filePath, }, }, }); diff --git a/packages/engine-core/src/tasks/linking/constants.ts b/packages/engine-core/src/tasks/linking/constants.ts deleted file mode 100644 index b69304a138..0000000000 --- a/packages/engine-core/src/tasks/linking/constants.ts +++ /dev/null @@ -1,107 +0,0 @@ -// import type { RnvPackage } from './types'; - -// export const RNV_PACKAGES: RnvPackage[] = [ -// { -// packageName: '@rnv/renative', -// folderName: 'renative', -// skipLinking: true, -// }, -// { -// packageName: '@rnv/core', -// folderName: 'core', -// }, -// { -// packageName: '@rnv/engine-core', -// folderName: 'engine-core', -// }, -// { -// packageName: '@rnv/cli', -// folderName: 'cli', -// }, -// { -// packageName: '@rnv/template-starter', -// folderName: 'template-starter', -// }, -// { -// packageName: 'rnv', -// folderName: 'rnv', -// }, -// { -// packageName: '@rnv/engine-lightning', -// folderName: 'engine-lightning', -// }, -// { -// packageName: '@rnv/engine-rn', -// folderName: 'engine-rn', -// }, -// { -// packageName: '@rnv/engine-rn-electron', -// folderName: 'engine-rn-electron', -// }, -// { -// packageName: '@rnv/engine-rn-windows', -// folderName: 'engine-rn-windows', -// }, -// { -// packageName: '@rnv/engine-rn-next', -// folderName: 'engine-rn-next', -// }, -// { -// packageName: '@rnv/engine-rn-tvos', -// folderName: 'engine-rn-tvos', -// }, -// { -// packageName: '@rnv/engine-rn-web', -// folderName: 'engine-rn-web', -// }, -// { -// packageName: '@rnv/engine-roku', -// folderName: 'engine-roku', -// }, -// { -// packageName: '@rnv/integration-docker', -// folderName: 'integration-docker', -// }, -// { -// packageName: '@rnv/integration-ftp', -// folderName: 'integration-ftp', -// }, -// { -// packageName: '@rnv/integration-vercel', -// folderName: 'integration-vercel', -// }, -// { -// packageName: '@rnv/build-hooks-git', -// folderName: 'build-hooks-git', -// }, -// { -// packageName: '@rnv/sdk-apple', -// folderName: 'sdk-apple', -// }, -// { -// packageName: '@rnv/sdk-android', -// folderName: 'sdk-android', -// }, -// { -// packageName: '@rnv/sdk-tizen', -// folderName: 'sdk-tizen', -// }, -// { -// packageName: '@rnv/sdk-kaios', -// folderName: 'sdk-kaios', -// }, -// { -// packageName: '@rnv/sdk-react-native', -// folderName: 'sdk-react-native', -// }, -// { -// packageName: '@rnv/sdk-webpack', -// folderName: 'sdk-webpack', -// }, -// { -// packageName: '@rnv/sdk-webos', -// folderName: 'sdk-webos', -// }, -// ]; - -export default {}; From 0f4f126fa7fc219cffd10fc4586aa0f0ccc87952 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 20 Mar 2024 22:38:54 +0100 Subject: [PATCH 070/175] templateOverrides folder support --- .gitignore | 46 ++++----- packages/core/src/enums/folderName.ts | 11 +++ packages/core/src/templates/index.ts | 6 +- packages/template-starter/index.js | 2 +- .../templateOverrides/.gitignore | 94 +++++++++++++++++++ .../renative.spec.json | 0 .../renative.template.spec.json | 0 7 files changed, 131 insertions(+), 28 deletions(-) create mode 100755 packages/template-starter/templateOverrides/.gitignore rename {packages/template-starter => spec}/renative.spec.json (100%) rename {packages/template-starter => spec}/renative.template.spec.json (100%) diff --git a/.gitignore b/.gitignore index fa702293d8..caf17fb4b8 100755 --- a/.gitignore +++ b/.gitignore @@ -32,17 +32,19 @@ dist lib # NPM +# npm-debug.log # Yarn +# yarn-error.log # Lerna +# lerna-debug.log -index/ - # BUCK +# buck-out/ \.buckd/ @@ -57,29 +59,22 @@ buck-out/ # Testing -/packages/**/coverage -/packages/**/dist -/packages/**/lib +# +coverage +reporting +coverage-ts # Expo +# .expo -coverage - -# RN Windows Engine -.binlog -packages/**/*.binlog - - -coverage-ts -.watchman-cookie-* # Next +# .next # ReNative +# .rnv -/packages/**/platformBuilds -/packages/**/platformAssets renative.private.json renative.local.json renative.local.json @@ -87,14 +82,13 @@ renative.build.json renative.runtime.json rnv-config.local.json metro.config.local.js -/packages/**/.bundle -/packages/**/vendor/ -/packages/**/reporting/ - - - - - - - +platformBuilds +platformAssets +# Other +# +.binlog +*.binlog +.bundle +vendor +.watchman-cookie-* diff --git a/packages/core/src/enums/folderName.ts b/packages/core/src/enums/folderName.ts index 0f9cb6c607..1d92ab0e2e 100644 --- a/packages/core/src/enums/folderName.ts +++ b/packages/core/src/enums/folderName.ts @@ -1,9 +1,20 @@ export const RnvFolderName = { + // non compiled static iles used by rnv modules templateFiles: 'templateFiles', + // special folder for overriding source during copy of includedPaths. + // it mimics the same structure as the root folder of template + templateOverrides: 'templateOverrides', + // Standard node_modules folder nodeModules: 'node_modules', + // RNV generates all actual projects (xcode, android, webpack...) in this folder platformBuilds: 'platformBuilds', + // RNV generates all assets (images, fonts...) in this folder from selected appConfig platformAssets: 'platformAssets', + // Special RNV foled where local (excluded from git) files are stored and generated dotRnv: '.rnv', + // Special folder for storing npm package snapshots before replacing with symlink + // Allows reversing back to snapshot if needed (rnv link / rnv unlink) npmCache: 'npm_cache', + // Convention folder for storing secrets per projects managed by rnv crypto secrets: 'secrets', } as const; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index e4399235c6..dd88a3df26 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -26,6 +26,7 @@ import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; +import { RnvFolderName } from '../enums/folderName'; const _cleanProjectTemplateSync = (c: RnvContext) => { logDefault('_cleanProjectTemplateSync'); @@ -217,8 +218,11 @@ const getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | nul }; const _copyIncludedPath = (c: RnvContext, name: string) => { - const sourcePath = path.join(c.paths.template.dir, name); + const sourcePathOriginal = path.join(c.paths.template.dir, name); + const sourceOverridePath = path.join(c.paths.template.dir, RnvFolderName.templateOverrides, name); const destPath = path.join(c.paths.project.dir, name); + // If override exists use it, otherwise use original and continue with rest of the logic + const sourcePath = fsExistsSync(sourceOverridePath) ? sourceOverridePath : sourcePathOriginal; if (!fsExistsSync(destPath) && fsExistsSync(sourcePath)) { try { if (fsLstatSync(sourcePath).isDirectory()) { diff --git a/packages/template-starter/index.js b/packages/template-starter/index.js index 1a9d0877aa..68fe9ffb59 100644 --- a/packages/template-starter/index.js +++ b/packages/template-starter/index.js @@ -1 +1 @@ -import './src/entry/'; //eslint-disable-line +import './src/entry/'; diff --git a/packages/template-starter/templateOverrides/.gitignore b/packages/template-starter/templateOverrides/.gitignore new file mode 100755 index 0000000000..caf17fb4b8 --- /dev/null +++ b/packages/template-starter/templateOverrides/.gitignore @@ -0,0 +1,94 @@ +# OSX +# +.DS_Store + +# Xcode +# +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace + +# Android Studio +# +*.iml + +# node.js +# +node_modules/ +dist +lib + +# NPM +# +npm-debug.log + +# Yarn +# +yarn-error.log + +# Lerna +# +lerna-debug.log + +# BUCK +# +buck-out/ +\.buckd/ + +# Visual Studio +# +.vscode/* +.vscode +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + + +# Testing +# +coverage +reporting +coverage-ts + +# Expo +# +.expo + +# Next +# +.next + +# ReNative +# +.rnv +renative.private.json +renative.local.json +renative.local.json +renative.build.json +renative.runtime.json +rnv-config.local.json +metro.config.local.js +platformBuilds +platformAssets + +# Other +# +.binlog +*.binlog +.bundle +vendor +.watchman-cookie-* diff --git a/packages/template-starter/renative.spec.json b/spec/renative.spec.json similarity index 100% rename from packages/template-starter/renative.spec.json rename to spec/renative.spec.json diff --git a/packages/template-starter/renative.template.spec.json b/spec/renative.template.spec.json similarity index 100% rename from packages/template-starter/renative.template.spec.json rename to spec/renative.template.spec.json From 8d8dcee1c3c2f1d46422da456627aac1bfe90ed6 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 21 Mar 2024 00:14:58 +0100 Subject: [PATCH 071/175] update multi instance rnv handler --- packages/cli/src/logger/index.ts | 6 ++++-- packages/core/src/context/index.ts | 16 +++++++++++----- packages/sdk-telemetry/src/index.ts | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index 86a1734384..0493cac757 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -151,7 +151,7 @@ _updateDefaultColors(); export const logAndSave = (msg: string, skipLog?: boolean) => { const ctx = getContext(); - if (ctx.logging.logMessages && !ctx.logging.logMessages.includes(msg)) ctx.logging.logMessages.push(msg); + if (ctx.logging?.logMessages && !ctx.logging?.logMessages.includes(msg)) ctx.logging?.logMessages.push(msg); if (!skipLog) console.log(`${msg}`); }; @@ -596,7 +596,9 @@ export const logError = (e: Error | string | unknown, opts?: { skipAnalytics: bo }; api.analytics.captureException(err, { extra }); } - ctx.logging.containsError = true; + if (ctx.logging) { + ctx.logging.containsError = true; + } if (_jsonOnly) { _printJson({ diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 01765a4f26..73388a559e 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -29,13 +29,19 @@ const populateLinkingInfo = (ctx: RnvContext) => { }; export const createRnvContext = (ctxOpts?: CreateContextOptions) => { - // console.trace('CREATE_RNV_CONTEXT', !!ctx, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); + // console.trace('CREATE_RNV_CONTEXT', !!ctxOpts, !!global.RNV_CONTEXT, global.RNV_CONTEXT?.isDefault); + const isJestMode = process.env.JEST_WORKER_ID !== undefined; let haltExecution = false; - // Handle new imports of @rnv/core - if (!ctxOpts) { + if (!!ctxOpts && !!global.RNV_CONTEXT && global.RNV_CONTEXT?.isDefault) { + // Handle direct initialize of context + if (!isJestMode) { + haltExecution = true; + } + } else if (!ctxOpts) { + // Handle new imports of @rnv/core if (!global.RNV_CONTEXT) { - if (process.env.JEST_WORKER_ID === undefined) { + if (!isJestMode) { // Initial empty context to be initialized global.RNV_CONTEXT = generateContextDefaults(); return; @@ -57,7 +63,7 @@ export const createRnvContext = (ctxOpts?: CreateContextOptions) => { FATAL: Multiple instances of @rnv/core detected: 1 (${global.RNV_CONTEXT.timeStart.toISOString()}) - ${global.RNV_CONTEXT.paths.rnvCore.dir} + ${global.RNV_CONTEXT.paths?.rnvCore?.dir || 'UNKNOWN (can happen if running older versions of RNV)'} 2 (${new Date().toISOString()}) ${path.join(__dirname, '../..')} diff --git a/packages/sdk-telemetry/src/index.ts b/packages/sdk-telemetry/src/index.ts index 314facc1d5..7b6db664ea 100644 --- a/packages/sdk-telemetry/src/index.ts +++ b/packages/sdk-telemetry/src/index.ts @@ -56,7 +56,7 @@ export class AnalyticsCls { get isAnalyticsEnabled() { const c = getContext(); - return !c.files.dotRnv.config?.disableTelemetry && c.process.env.RNV_TELEMETRY_DISABLED !== '1'; + return !c.files.dotRnv?.config?.disableTelemetry && c.process.env.RNV_TELEMETRY_DISABLED !== '1'; } initialize() { From 6c154d72c191548fa9074dbaa3c176ca232bb668 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 21 Mar 2024 10:31:07 +0100 Subject: [PATCH 072/175] additional fixes for bootstrap and multi-instance handling --- package.json | 4 ++-- packages/core/src/context/index.ts | 13 ++++++++++--- packages/core/src/plugins/index.ts | 8 +++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index aeaff9ea15..739cd6ef88 100644 --- a/package.json +++ b/package.json @@ -56,8 +56,8 @@ "url": "git://github.com/flexn-io/renative.git" }, "scripts": { - "bootstrap": "npx lerna bootstrap && yarn build && yarn link:rnv", - "bootstrap-clean": "rimraf -I ./node_modules; npx lerna clean --yes && yarn bootstrap", + "bootstrap": "npx lerna@6 bootstrap && yarn build && yarn link:rnv", + "bootstrap-clean": "rimraf -I ./node_modules; npx lerna@6 clean --yes && yarn bootstrap", "build": "lerna run build", "compile": "npx lerna run compile", "deploy:canary": "yarn pre-publish && npx lerna publish from-package --dist-tag canary && git push --tags origin HEAD", diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 73388a559e..51df2733d2 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -33,10 +33,15 @@ export const createRnvContext = (ctxOpts?: CreateContextOptions) => { const isJestMode = process.env.JEST_WORKER_ID !== undefined; let haltExecution = false; - if (!!ctxOpts && !!global.RNV_CONTEXT && global.RNV_CONTEXT?.isDefault) { + if (!!ctxOpts && !!global.RNV_CONTEXT) { // Handle direct initialize of context - if (!isJestMode) { - haltExecution = true; + if (!global.RNV_CONTEXT?.isDefault) { + if (!isJestMode) { + haltExecution = true; + } + } else { + // if isDefault=true, we can safely reinitialize + // as it means we are not fully initialized yet } } else if (!ctxOpts) { // Handle new imports of @rnv/core @@ -84,6 +89,8 @@ ${msg} global.RNV_CONTEXT = c; populateContextPaths(c, ctxOpts?.RNV_HOME_DIR); + + c.isDefault = false; }; export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undefined) => { diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index df5a6bde12..1d714fbade 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -436,11 +436,13 @@ export const parsePlugins = ( if (ignorePlatformObjectCheck || includeDisabledOrExcludedPlugins) { if (isPluginDisabled) { - logInfo(`Plugin ${key} is marked disabled. skipping.`); + logDefault(`Plugin ${key} is marked disabled. skipping.`); } else if (isPluginPlatDisabled) { - logInfo(`Plugin ${key} is marked disabled for platform ${platform} skipping.`); + logDefault(`Plugin ${key} is marked disabled for platform ${platform}. skipping.`); } else if (!isPluginPlatSupported) { - logInfo(`Plugin ${key} supportedPlatforms does not include ${platform} skipping.`); + logDefault( + `Plugin ${key}'s supportedPlatforms does not include ${platform}. skipping.` + ); } handleActivePlugin(plugin, pluginPlat, key); } else if (!isPluginPlatDisabled && !isPluginDisabled && isPluginPlatSupported) { From fedabc88be81d8bc2818c0105df060fe25e18e05 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 21 Mar 2024 11:19:40 +0100 Subject: [PATCH 073/175] selective linking options --- .../engine-core/src/tasks/linking/taskLink.ts | 30 +++++++++++++++++-- .../src/tasks/linking/taskUnlink.ts | 4 ++- packages/sdk-apple/src/plistParser.ts | 9 ++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index 4de9529a89..c0103fb830 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -12,6 +12,7 @@ import { chalk, fsUnlinkSync, removeDirSync, + inquirerPrompt, } from '@rnv/core'; import { LinkablePackage } from './types'; import { getSourceDir, traverseTargetProject } from './linker'; @@ -36,7 +37,7 @@ const _linkPackage = (pkg: LinkablePackage) => { mkdirSync(pkg.unlinkedPath); fsRenameSync(pkg.nmPath, pkg.unlinkedPath); fsSymlinkSync(pkg.sourcePath, pkg.nmPath); - logInfo(`${pkg.name} => link => ${chalk().green('SUCCESS')} (${chalk().gray(pkg.nmPath)})`); + logInfo(`${chalk().green('✔')} ${pkg.name} (${chalk().gray(pkg.nmPath)})`); } else if (pkg.unlinkedPathExists) { logInfo(`${pkg.name} found in unlinked cache. Attempting to relink...`); fsSymlinkSync(pkg.sourcePath, pkg.nmPath); @@ -44,6 +45,8 @@ const _linkPackage = (pkg: LinkablePackage) => { } }; +const runtimeLibs = ['@rnv/renative']; + const taskLink: RnvTaskFn = async () => { logTask('taskLink'); @@ -51,15 +54,36 @@ const taskLink: RnvTaskFn = async () => { let msg = 'Found following source packages:\n\n'; + const choices: { name: string; value: LinkablePackage }[] = []; + linkablePackages.forEach((pkg) => { - msg += `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ + const title = `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ pkg.isBrokenLink ? chalk().red('(broken)') : pkg.isLinked ? chalk().green('(linked)') : '(unlinked)' }\n`; + + msg += title; + const addon = runtimeLibs.includes(pkg.name) + ? chalk().yellow(' (Runtime lib. will not work with react-native)') + : ''; + + choices.push({ name: `${pkg.name}${addon}`, value: pkg }); }); logInfo(msg); - linkablePackages.forEach((pkg) => { + const slpDefaults = linkablePackages.filter((pkg) => !runtimeLibs.includes(pkg.name)); + + const { selectedLinkableProjects } = await inquirerPrompt({ + name: 'selectedLinkableProjects', + type: 'checkbox', + message: `Found following packages to link?`, + default: slpDefaults, + loop: false, + choices, + }); + + logInfo('Linking packages...'); + selectedLinkableProjects.forEach((pkg: LinkablePackage) => { _linkPackage(pkg); }); diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index b7ec16f92f..9961201389 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -19,7 +19,7 @@ const _unlinkPackage = (pkg: LinkablePackage) => { } else if (pkg.isLinked && pkg.unlinkedPathExists) { fsUnlinkSync(pkg.nmPath); fsRenameSync(pkg.unlinkedPath, pkg.nmPath); - logInfo(`${pkg.name} => unlink => ${chalk().green('SUCCESS')} (${chalk().gray(pkg.nmPath)})`); + logInfo(`${chalk().green('✔')} ${pkg.name} (${chalk().gray(pkg.nmPath)})`); } else if (!pkg.isLinked) { logInfo(`${pkg.name} is not linked. SKIPPING`); } else if (pkg.skipLinking) { @@ -42,6 +42,8 @@ const taskUnlink: RnvTaskFn = async () => { logInfo(msg); + logInfo('Unlinking packages...'); + linkablePackages.forEach((pkg) => { _unlinkPackage(pkg); }); diff --git a/packages/sdk-apple/src/plistParser.ts b/packages/sdk-apple/src/plistParser.ts index 8228d1415b..e753562438 100644 --- a/packages/sdk-apple/src/plistParser.ts +++ b/packages/sdk-apple/src/plistParser.ts @@ -12,6 +12,7 @@ import { writeCleanFile, fsWriteFileSync, getContext, + chalk, } from '@rnv/core'; import { getAppFolderName } from './common'; import { Context, FilePlistJSON } from './types'; @@ -95,6 +96,14 @@ export const parseInfoPlist = () => let plistObj = readObjectSync(path.join(__dirname, `../templateFiles/info.plist.${platform}.json`)) || {}; plistObj.CFBundleDisplayName = getAppTitle(); + + if (!plistObj.CFBundleDisplayName) { + throw new Error( + `CFBundleDisplayName is required!. set it by adding ${chalk().bold( + '"common": { "title": "" }' + )} prop in ${chalk().bold(c.paths.appConfig.config)}` + ); + } plistObj.CFBundleShortVersionString = getAppVersion(); plistObj.CFBundleVersion = getAppVersionCode(); // FONTS From 1349d5073f69ab1122dd6d911006a8008dffb8a2 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 21 Mar 2024 13:38:25 +0100 Subject: [PATCH 074/175] support --yes as core option --- packages/core/src/tasks/constants.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index d349499e86..026a16577a 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -316,6 +316,7 @@ export const RnvTaskCoreOptionPresets = { RnvTaskOptions.mono, RnvTaskOptions.maxErrorLength, RnvTaskOptions.only, + RnvTaskOptions.yes, // platform is necessary to be accepted as base for the `rnv` command to work with enginie plugins RnvTaskOptions.platform, RnvTaskOptions.help, From fa7fe5730e84c43a46dadb03ba547600e58e38b9 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 11:26:22 +0100 Subject: [PATCH 075/175] fix template key --- .../src/tasks/global/new/questions/installTemplate.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index c11aadfdcb..717931ada7 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -51,8 +51,6 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { }); } - const getTemplateKey = (val: string) => data.optionTemplates.valuesAsArray?.find((v) => v.title === val)?.key; - // data.optionTemplates.keysAsArray.push(customTemplate); options.push(inquirerSeparator('Advanced:----------------')); options.push(customTemplate); @@ -92,7 +90,7 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { } else if (inputTemplate.path) { localTemplatePath = inputTemplate.path; } else { - selectedInputTemplate = getTemplateKey(inputTemplate); + selectedInputTemplate = inputTemplate.key; } } From d743deb3b4b849a394ab9de96b89b3262f7dde2f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 12:48:52 +0100 Subject: [PATCH 076/175] refactor platforms defs --- packages/core/src/constants.ts | 2 +- packages/core/src/enums/platformName.ts | 99 ++++++++++--------- packages/core/src/schema/types.ts | 4 +- .../core/src/tasks/__tests__/index.test.ts | 6 +- packages/core/src/tasks/index.ts | 13 ++- packages/core/src/tasks/types.ts | 2 +- .../src/tasks/app/taskAppConfigure.ts | 2 +- .../src/tasks/app/taskAppCreate.ts | 2 +- .../src/tasks/app/taskAppSwitch.ts | 2 +- .../src/tasks/crypto/taskCryptoDecrypt.ts | 2 +- .../src/tasks/crypto/taskCryptoEncrypt.ts | 2 +- .../src/tasks/global/new/taskNew.ts | 2 +- .../engine-core/src/tasks/global/taskClean.ts | 2 +- .../src/tasks/global/taskConfigureSoft.ts | 2 +- .../src/tasks/global/taskDoctor.ts | 2 +- .../engine-core/src/tasks/global/taskHelp.ts | 2 +- .../src/tasks/global/taskInstall.ts | 2 +- .../engine-core/src/tasks/global/taskKill.ts | 2 +- .../src/tasks/global/taskStatus.ts | 2 +- .../src/tasks/hooks/taskHooksList.ts | 2 +- .../src/tasks/hooks/taskHooksPipes.ts | 2 +- .../src/tasks/hooks/taskHooksRun.ts | 2 +- .../engine-core/src/tasks/linking/taskLink.ts | 2 +- .../src/tasks/linking/taskUnlink.ts | 2 +- .../tasks/platform/taskPlatformConfigure.ts | 2 +- .../src/tasks/platform/taskPlatformConnect.ts | 2 +- .../src/tasks/platform/taskPlatformEject.ts | 2 +- .../src/tasks/platform/taskPlatformList.ts | 2 +- .../src/tasks/platform/taskPlatformSetup.ts | 2 +- .../src/tasks/plugin/taskPluginAdd.ts | 2 +- .../src/tasks/plugin/taskPluginList.ts | 2 +- .../src/tasks/plugin/taskPluginUpdate.ts | 2 +- .../src/tasks/project/taskProjectConfigure.ts | 2 +- .../src/tasks/project/taskProjectUpgrade.ts | 2 +- .../src/tasks/target/taskTargetLaunch.ts | 2 +- .../src/tasks/target/taskTargetList.ts | 2 +- .../tasks/telemetry/taskTelemetryDisable.ts | 2 +- .../tasks/telemetry/taskTelemetryEnable.ts | 2 +- .../tasks/telemetry/taskTelemetryStatus.ts | 2 +- .../src/tasks/template/taskTemplateAdd.ts | 2 +- .../src/tasks/template/taskTemplateApply.ts | 2 +- .../src/tasks/template/taskTemplateList.ts | 2 +- .../src/tasks/workspace/taskWorkspaceAdd.ts | 2 +- .../tasks/workspace/taskWorkspaceConfigure.ts | 2 +- .../tasks/workspace/taskWorkspaceConnect.ts | 2 +- .../src/tasks/workspace/taskWorkspaceList.ts | 2 +- .../tasks/workspace/taskWorkspaceUpdate.ts | 2 +- .../src/tasks/taskCryptoInstallCerts.ts | 2 +- .../src/tasks/taskCryptoInstallProfiles.ts | 2 +- .../src/tasks/taskCryptoInstallCerts.ts | 2 +- .../src/tasks/taskCryptoInstallProfiles.ts | 2 +- .../src/tasks/taskSingleCommand.ts | 2 +- .../src/tasks/taskStarterHello.ts | 2 +- 53 files changed, 114 insertions(+), 106 deletions(-) diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts index 233e28bb87..32d81df5b7 100644 --- a/packages/core/src/constants.ts +++ b/packages/core/src/constants.ts @@ -1,6 +1,6 @@ import { RnvPlatformName } from './enums/platformName'; -// DEPRECATED +// IMPORTANT: this must match RnvPlatformName export const SUPPORTED_PLATFORMS = [ RnvPlatformName.web, RnvPlatformName.ios, diff --git a/packages/core/src/enums/platformName.ts b/packages/core/src/enums/platformName.ts index d35e24ea94..007ad3527e 100644 --- a/packages/core/src/enums/platformName.ts +++ b/packages/core/src/enums/platformName.ts @@ -1,58 +1,61 @@ export const RnvPlatformName = { + web: 'web', + ios: 'ios', android: 'android', androidtv: 'androidtv', - androidwear: 'androidwear', - chromecast: 'chromecast', firetv: 'firetv', - ios: 'ios', - kaios: 'kaios', + tvos: 'tvos', macos: 'macos', + linux: 'linux', + windows: 'windows', tizen: 'tizen', + webos: 'webos', + chromecast: 'chromecast', + kaios: 'kaios', + webtv: 'webtv', + androidwear: 'androidwear', tizenwatch: 'tizenwatch', tizenmobile: 'tizenmobile', - tvos: 'tvos', - web: 'web', - webtv: 'webtv', - webos: 'webos', - windows: 'windows', - linux: 'linux', xbox: 'xbox', - androidauto: 'androidauto', - alexa: 'alexa', - appleauto: 'appleauto', - astian: 'astian', - blackberry: 'blackberry', - chromeos: 'chromeos', - fireos: 'fireos', - hbbtv: 'hbbtv', - meego: 'meego', - netcast: 'netcast', - occulus: 'occulus', - orsay: 'orsay', - ps4: 'ps4', - roku: 'roku', - sailfish: 'sailfish', - tivo: 'tivo', - ubuntu: 'ubuntu', - ubuntutouch: 'ubuntutouch', - unity: 'unity', - vewd: 'vewd', - vidaa: 'vidaa', - vieraconnect: 'vieraconnect', - vizio: 'vizio', - watchos: 'watchos', - webian: 'webian', - wii: 'wii', - wp10: 'wp10', - wp8: 'wp8', - xbox360: 'xbox360', - kodi: 'kodi', - boxee: 'boxee', - horizontv: 'horizontv', - mediaroom: 'mediaroom', - yahoosmarttv: 'yahoosmarttv', - slingbox: 'slingbox', - hololens: 'hololens', - webvr: 'webvr', - saphi: 'saphi', + // androidauto: 'androidauto', + // alexa: 'alexa', + // appleauto: 'appleauto', + // astian: 'astian', + // blackberry: 'blackberry', + // chromeos: 'chromeos', + // fireos: 'fireos', + // hbbtv: 'hbbtv', + // meego: 'meego', + // netcast: 'netcast', + // occulus: 'occulus', + // orsay: 'orsay', + // ps4: 'ps4', + // roku: 'roku', + // sailfish: 'sailfish', + // tivo: 'tivo', + // ubuntu: 'ubuntu', + // ubuntutouch: 'ubuntutouch', + // unity: 'unity', + // vewd: 'vewd', + // vidaa: 'vidaa', + // vieraconnect: 'vieraconnect', + // vizio: 'vizio', + // watchos: 'watchos', + // webian: 'webian', + // wii: 'wii', + // wp10: 'wp10', + // wp8: 'wp8', + // xbox360: 'xbox360', + // kodi: 'kodi', + // boxee: 'boxee', + // horizontv: 'horizontv', + // mediaroom: 'mediaroom', + // yahoosmarttv: 'yahoosmarttv', + // slingbox: 'slingbox', + // hololens: 'hololens', + // webvr: 'webvr', + // saphi: 'saphi', } as const; + +type RnvPlatformName = typeof RnvPlatformName; +export type RnvPlatformNameKey = keyof RnvPlatformName; diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index e4028f68bc..685555cc04 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -1,6 +1,5 @@ import type { _PluginPlatformMergedSchemaType } from './plugins'; import type { _AppDelegateMethodType } from './platforms/fragments/templateXcodeBase'; -import type { _PlatformsKeysType } from './shared'; import type { _MergedPlatformObjectType } from './platforms'; import type { _RootAppBaseSchemalType } from './configFiles/app'; @@ -8,6 +7,7 @@ import type { _RootProjectBaseSchemaType } from './configFiles/project'; import type { _AndroidManifestType, _ManifestChildWithChildrenType } from './platforms/fragments/templateAndroidBase'; import type { _MergedPlatformPrivateObjectType } from './configFiles/private'; import type { ConfigFileBuildConfig } from './configFiles/buildConfig'; +import { type RnvPlatformNameKey } from '../enums/platformName'; //=============================== // NORMALIZED (MERGED+NORMALIZED) @@ -32,7 +32,7 @@ export type RenativeConfigPluginPlatform = _PluginPlatformMergedSchemaType; export type RenativeWebpackConfig = RenativeConfigPlugin['webpackConfig']; -export type PlatformKey = _PlatformsKeysType; +export type PlatformKey = RnvPlatformNameKey; export type RenativeConfigRnvTaskName = keyof Required['tasks']>; diff --git a/packages/core/src/tasks/__tests__/index.test.ts b/packages/core/src/tasks/__tests__/index.test.ts index cf0db9725f..d1dca779b5 100644 --- a/packages/core/src/tasks/__tests__/index.test.ts +++ b/packages/core/src/tasks/__tests__/index.test.ts @@ -41,7 +41,7 @@ const rnvEngineMock1: RnvEngine = { description: 'mock task 1', task: 'mock-task', options: [], - platforms: [], + platforms: null, }, }, }; @@ -54,13 +54,13 @@ const rnvEngineMock2: RnvEngine = { description: 'mock task 2', task: 'mock-task-2', options: [], - platforms: [], + platforms: null, }, ['mock-task']: { description: 'mock task 1', task: 'mock-task', options: [], - platforms: [], + platforms: null, }, }, }; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 2bc0651e84..6ca2b93a27 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -17,6 +17,7 @@ import type { PlatformKey, RenativeConfigRnvTaskName } from '../schema/types'; import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { DEFAULT_TASK_DESCRIPTIONS } from './constants'; import { getContext } from '../context/provider'; +import { SUPPORTED_PLATFORMS } from '../constants'; let executedTasks: Record = {}; @@ -338,7 +339,8 @@ export const findSuitableTask = async (specificTask?: string): Promise, let platforms: string[] = []; const supportedEngPlatforms: string[] = []; suitableEngines.forEach((engine) => { - getEngineTask(task, engine.tasks)?.platforms.forEach((plat) => { - supportedEngPlatforms.push(plat); - }); + const enPlats = getEngineTask(task, engine.tasks)?.platforms; + if (enPlats) { + enPlats.forEach((plat) => { + supportedEngPlatforms.push(plat); + }); + } }); const supProjPlatforms = c.buildConfig?.defaults?.supportedPlatforms; diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index 892d830973..a22499e7f1 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -5,7 +5,7 @@ export type RnvTask = { task: string; options: Array; isGlobalScope?: boolean; - platforms: Array; + platforms: Array | null; description: string; forceBuildHookRebuild?: boolean; fn?: RnvTaskFn; diff --git a/packages/engine-core/src/tasks/app/taskAppConfigure.ts b/packages/engine-core/src/tasks/app/taskAppConfigure.ts index 8ced25d6d4..238a23214c 100644 --- a/packages/engine-core/src/tasks/app/taskAppConfigure.ts +++ b/packages/engine-core/src/tasks/app/taskAppConfigure.ts @@ -210,7 +210,7 @@ const Task: RnvTask = { fn: taskAppConfigure, task: RnvTaskName.appConfigure, options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index bc15e52a5c..a3c0527160 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -169,7 +169,7 @@ const Task: RnvTask = { fn: taskAppCreate, task: RnvTaskName.appCreate, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index 63a07d6f74..aaa9316b5e 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -29,7 +29,7 @@ const Task: RnvTask = { fn: taskSwitch, task: RnvTaskName.appSwitch, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index bd2f4e9e16..7b83e363c8 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -211,7 +211,7 @@ const Task: RnvTask = { fn: taskCryptoDecrypt, task: RnvTaskName.cryptoDecrypt, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index 481e709084..8e165b8ca8 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -240,7 +240,7 @@ const Task: RnvTask = { fn: taskCryptoEncrypt, task: RnvTaskName.cryptoEncrypt, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 6423384c5a..03ade61f32 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -64,7 +64,7 @@ const Task: RnvTask = { fn: taskNew, task: RnvTaskName.new, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/engine-core/src/tasks/global/taskClean.ts b/packages/engine-core/src/tasks/global/taskClean.ts index b7590d42ca..d72fbff1ef 100644 --- a/packages/engine-core/src/tasks/global/taskClean.ts +++ b/packages/engine-core/src/tasks/global/taskClean.ts @@ -213,7 +213,7 @@ const Task: RnvTask = { fn: taskClean, task: RnvTaskName.clean, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts index a1799465c5..c8205b5b3e 100644 --- a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts @@ -29,7 +29,7 @@ const Task: RnvTask = { fn: taskConfigureSoft, task: RnvTaskName.configureSoft, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isPrivate: true, }; diff --git a/packages/engine-core/src/tasks/global/taskDoctor.ts b/packages/engine-core/src/tasks/global/taskDoctor.ts index 2a0d4d08ee..48443e7ff4 100644 --- a/packages/engine-core/src/tasks/global/taskDoctor.ts +++ b/packages/engine-core/src/tasks/global/taskDoctor.ts @@ -92,7 +92,7 @@ const Task: RnvTask = { fn: taskDoctor, task: RnvTaskName.doctor, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskHelp.ts b/packages/engine-core/src/tasks/global/taskHelp.ts index fe83e4d93a..3620750d36 100644 --- a/packages/engine-core/src/tasks/global/taskHelp.ts +++ b/packages/engine-core/src/tasks/global/taskHelp.ts @@ -47,7 +47,7 @@ const Task: RnvTask = { fn: taskHelp, task: RnvTaskName.help, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 03bf33f04c..1a78b8fece 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -35,7 +35,7 @@ const Task: RnvTask = { fn: taskInstall, task: RnvTaskName.install, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/global/taskKill.ts b/packages/engine-core/src/tasks/global/taskKill.ts index 1ce87abc36..a081df284f 100644 --- a/packages/engine-core/src/tasks/global/taskKill.ts +++ b/packages/engine-core/src/tasks/global/taskKill.ts @@ -70,7 +70,7 @@ const Task: RnvTask = { fn: taskKill, task: RnvTaskName.kill, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskStatus.ts b/packages/engine-core/src/tasks/global/taskStatus.ts index bd7b2e772f..06af38b212 100644 --- a/packages/engine-core/src/tasks/global/taskStatus.ts +++ b/packages/engine-core/src/tasks/global/taskStatus.ts @@ -7,7 +7,7 @@ const Task: RnvTask = { fn: taskStatus, task: RnvTaskName.status, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksList.ts b/packages/engine-core/src/tasks/hooks/taskHooksList.ts index d8589e9068..47ac8ad228 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksList.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksList.ts @@ -35,7 +35,7 @@ const Task: RnvTask = { fn: taskHooksList, task: RnvTaskName.hooksList, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, forceBuildHookRebuild: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts index 3de65ec7a1..bd5f7a6bfe 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts @@ -26,7 +26,7 @@ const Task: RnvTask = { fn: taskHooksPipes, task: RnvTaskName.hooksPipes, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index 81a350c4c3..7c1be3edee 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -61,7 +61,7 @@ const Task: RnvTask = { fn: taskHooksRun, task: RnvTaskName.hooksRun, options: RnvTaskOptionPresets.withBase([RnvTaskOptions.exeMethod]), - platforms: [], + platforms: null, forceBuildHookRebuild: true, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index c0103fb830..6a409432a0 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -97,7 +97,7 @@ const Task: RnvTask = { options: RnvTaskOptionPresets.withBase([ { key: 'dir', description: 'Source folder to be linked into project', isValueType: true }, ]), - platforms: [], + platforms: null, isGlobalScope: true, ignoreEngines: true, }; diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index 9961201389..ff7210eecd 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -56,7 +56,7 @@ const Task: RnvTask = { fn: taskUnlink, task: RnvTaskName.unlink, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, ignoreEngines: true, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 3c38403975..f024402359 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -73,7 +73,7 @@ const Task: RnvTask = { fn: taskPlatformConfigure, task: RnvTaskName.platformConfigure, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts index 6b18a2017f..748f93ad1e 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts @@ -92,7 +92,7 @@ const Task: RnvTask = { fn: taskPlatformConnect, task: RnvTaskName.platformConnect, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts index 225975e0f1..b2b09c98d7 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts @@ -75,7 +75,7 @@ const Task: RnvTask = { fn: taskPlatformEject, task: RnvTaskName.platformEject, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformList.ts b/packages/engine-core/src/tasks/platform/taskPlatformList.ts index 7880926255..85e6600634 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformList.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformList.ts @@ -25,7 +25,7 @@ const Task: RnvTask = { fn: taskPlatformList, task: RnvTaskName.platformList, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts index 902b07a646..a86d99e684 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts @@ -34,7 +34,7 @@ const Task: RnvTask = { fn: taskPlatformSetup, task: RnvTaskName.platformSetup, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index 1b98f0e4f5..12d6b22d04 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -105,7 +105,7 @@ const Task: RnvTask = { fn: taskPluginAdd, task: RnvTaskName.pluginAdd, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginList.ts b/packages/engine-core/src/tasks/plugin/taskPluginList.ts index e8e46ee907..3bc21eb65b 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginList.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginList.ts @@ -19,7 +19,7 @@ const Task: RnvTask = { fn: taskPluginList, task: RnvTaskName.pluginList, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts index f56635f62a..35f094a82c 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts @@ -53,7 +53,7 @@ const Task: RnvTask = { fn: taskPluginUpdate, task: RnvTaskName.pluginUpdate, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 9f590907af..20549a9a6f 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -145,7 +145,7 @@ const Task: RnvTask = { fn: taskProjectConfigure, task: RnvTaskName.projectConfigure, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index fe99d02518..8ce4b92f8e 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -80,7 +80,7 @@ const Task: RnvTask = { fn: taskProjectUpgrade, task: RnvTaskName.projectUpgrade, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/target/taskTargetLaunch.ts b/packages/engine-core/src/tasks/target/taskTargetLaunch.ts index 4152d88db0..c423d4695c 100644 --- a/packages/engine-core/src/tasks/target/taskTargetLaunch.ts +++ b/packages/engine-core/src/tasks/target/taskTargetLaunch.ts @@ -82,7 +82,7 @@ const Task: RnvTask = { fn: taskTargetLaunch, task: RnvTaskName.targetLaunch, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/target/taskTargetList.ts b/packages/engine-core/src/tasks/target/taskTargetList.ts index d993f57eb1..0def880728 100644 --- a/packages/engine-core/src/tasks/target/taskTargetList.ts +++ b/packages/engine-core/src/tasks/target/taskTargetList.ts @@ -50,7 +50,7 @@ const Task: RnvTask = { fn: taskTargetList, task: RnvTaskName.targetList, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index 6b3bbeeab2..677d5bcbb1 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -32,7 +32,7 @@ const Task: RnvTask = { fn: taskTelemetryDisable, task: RnvTaskName.telemetryDisable, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index a2912b32fa..fa0c886d5b 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -32,7 +32,7 @@ const Task: RnvTask = { fn: taskTelemetryEnable, task: RnvTaskName.telemetryEnable, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts index bf3b4c3898..fdf3b8a022 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts @@ -30,7 +30,7 @@ const Task: RnvTask = { fn: taskTelemetryStatus, task: RnvTaskName.telemetryStatus, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts index 6784443103..f48ad9e54f 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts @@ -58,7 +58,7 @@ const Task: RnvTask = { fn: taskTemplateAdd, task: RnvTaskName.templateAdd, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index ed0a232b28..1d759db6d7 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -48,7 +48,7 @@ const Task: RnvTask = { fn: taskTemplateApply, task: RnvTaskName.templateApply, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts index 5226044c4c..13a9ac21c2 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateList.ts @@ -25,7 +25,7 @@ const Task: RnvTask = { fn: taskTemplateList, task: RnvTaskName.templateList, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts index 4ad6facfc1..032c02d6c1 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts @@ -53,7 +53,7 @@ const Task: RnvTask = { fn: taskWorkspaceAdd, task: RnvTaskName.workspaceAdd, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index 5b812e84ea..479c48f5aa 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -87,7 +87,7 @@ const Task: RnvTask = { fn: taskWorkspaceConfigure, task: RnvTaskName.workspaceConfigure, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts index a171812803..e9a8059caa 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts @@ -38,7 +38,7 @@ const Task: RnvTask = { fn: taskWorkspaceConnect, task: RnvTaskName.workspaceConnect, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts index ad0399c024..56f49577c4 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts @@ -35,7 +35,7 @@ const Task: RnvTask = { fn: taskWorkspaceList, task: RnvTaskName.workspaceList, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts index b0e7c55e2d..a926540e4c 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts @@ -14,7 +14,7 @@ const Task: RnvTask = { fn: taskWorkspaceUpdate, task: RnvTaskName.workspaceUpdate, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, isGlobalScope: true, isPrivate: true, }; diff --git a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts b/packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts index bfb9a51ec3..1441474f8b 100644 --- a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts +++ b/packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts @@ -41,7 +41,7 @@ const Task: RnvTask = { fn: taskCryptoInstallCerts, task: RnvTaskName.cryptoInstallCerts, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, // skipPlatforms: true, }; diff --git a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts b/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts index 7c89c671c6..314233863a 100644 --- a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts @@ -55,7 +55,7 @@ const Task: RnvTask = { fn: taskCryptoInstallProfiles, task: RnvTaskName.cryptoInstallProfiles, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, // skipPlatforms: true, }; diff --git a/packages/engine-rn/src/tasks/taskCryptoInstallCerts.ts b/packages/engine-rn/src/tasks/taskCryptoInstallCerts.ts index 6f96a86740..e1e5891b94 100644 --- a/packages/engine-rn/src/tasks/taskCryptoInstallCerts.ts +++ b/packages/engine-rn/src/tasks/taskCryptoInstallCerts.ts @@ -41,7 +41,7 @@ const Task: RnvTask = { fn: taskCryptoInstallCerts, task: RnvTaskName.cryptoInstallCerts, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, // skipPlatforms: true, }; diff --git a/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts b/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts index f5e6e0247b..c1eff0a7c9 100644 --- a/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts @@ -54,7 +54,7 @@ const Task: RnvTask = { fn: taskCryptoInstallProfiles, task: RnvTaskName.cryptoInstallProfiles, options: RnvTaskOptionPresets.withBase(), - platforms: [], + platforms: null, // skipPlatforms: true, }; diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index 51ec4b8f03..00c7a52cd5 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -10,7 +10,7 @@ const Task: RnvTask = { fn: task, task: 'starter-single-command', options: RnvTaskOptionPresets.withBase([{ key: 'my-opt', description: 'Hello', isValueType: true }]), - platforms: [], + platforms: null, }; export default Task; diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index 7ff3728b7b..a15f5737aa 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -10,7 +10,7 @@ const Task: RnvTask = { fn: task, task: 'starter hello', options: RnvTaskOptionPresets.withBase([{ key: 'my-opt', description: 'Hello', isValueType: true }]), - platforms: [], + platforms: null, }; export default Task; From b5a9cbbaa947fb5114217c10faab80eafc94bf3c Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 13:21:28 +0100 Subject: [PATCH 077/175] rename SUPPORTED_PLATFORMS to RnvPlatforms --- packages/core/src/constants.ts | 23 ------------------- packages/core/src/enums/platformName.ts | 22 ++++++++++++++++++ packages/core/src/index.ts | 1 - packages/core/src/platforms/index.ts | 4 ++-- packages/core/src/schema/shared/index.ts | 4 ++-- packages/core/src/tasks/index.ts | 5 ++-- .../new/questions/supportedPlatforms.ts | 4 ++-- .../src/tasks/global/taskConfig.ts | 12 ++-------- .../src/tasks/global/taskDeploy.ts | 4 ++-- 9 files changed, 34 insertions(+), 45 deletions(-) delete mode 100644 packages/core/src/constants.ts diff --git a/packages/core/src/constants.ts b/packages/core/src/constants.ts deleted file mode 100644 index 32d81df5b7..0000000000 --- a/packages/core/src/constants.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { RnvPlatformName } from './enums/platformName'; - -// IMPORTANT: this must match RnvPlatformName -export const SUPPORTED_PLATFORMS = [ - RnvPlatformName.web, - RnvPlatformName.ios, - RnvPlatformName.android, - RnvPlatformName.androidtv, - RnvPlatformName.firetv, - RnvPlatformName.tvos, - RnvPlatformName.macos, - RnvPlatformName.linux, - RnvPlatformName.windows, - RnvPlatformName.tizen, - RnvPlatformName.webos, - RnvPlatformName.chromecast, - RnvPlatformName.kaios, - RnvPlatformName.webtv, - RnvPlatformName.androidwear, - RnvPlatformName.tizenwatch, - RnvPlatformName.tizenmobile, - RnvPlatformName.xbox, -] as const; diff --git a/packages/core/src/enums/platformName.ts b/packages/core/src/enums/platformName.ts index 007ad3527e..3f5ab97808 100644 --- a/packages/core/src/enums/platformName.ts +++ b/packages/core/src/enums/platformName.ts @@ -57,5 +57,27 @@ export const RnvPlatformName = { // saphi: 'saphi', } as const; +// IMPORTANT: this must match RnvPlatformName size and key order +export const RnvPlatforms = [ + RnvPlatformName.web, + RnvPlatformName.ios, + RnvPlatformName.android, + RnvPlatformName.androidtv, + RnvPlatformName.firetv, + RnvPlatformName.tvos, + RnvPlatformName.macos, + RnvPlatformName.linux, + RnvPlatformName.windows, + RnvPlatformName.tizen, + RnvPlatformName.webos, + RnvPlatformName.chromecast, + RnvPlatformName.kaios, + RnvPlatformName.webtv, + RnvPlatformName.androidwear, + RnvPlatformName.tizenwatch, + RnvPlatformName.tizenmobile, + RnvPlatformName.xbox, +] as const; + type RnvPlatformName = typeof RnvPlatformName; export type RnvPlatformNameKey = keyof RnvPlatformName; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index e04af0750d..04e8bfc001 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -47,7 +47,6 @@ export * from './logger/defaults'; export * from './api'; export * from './api/provider'; -export * from './constants'; export * from './env'; export * from './formatter'; export * from './templates'; diff --git a/packages/core/src/platforms/index.ts b/packages/core/src/platforms/index.ts index e6f22cf387..c0c03c74e9 100644 --- a/packages/core/src/platforms/index.ts +++ b/packages/core/src/platforms/index.ts @@ -2,12 +2,12 @@ import path from 'path'; import { chalk, logDefault, logError, logWarning, logDebug } from '../logger'; import { cleanFolder, copyFolderContentsRecursiveSync } from '../system/fs'; import { getTimestampPathsConfig, getAppFolder } from '../context/contextProps'; -import { SUPPORTED_PLATFORMS } from '../constants'; import { generateOptions, inquirerPrompt } from '../api'; import type { RnvPlatform, RnvPlatformWithAll } from '../types'; import { updateProjectPlatforms } from '../configs/configProject'; import { doResolve } from '../system/resolve'; import { getContext } from '../context/provider'; +import { RnvPlatforms } from '../enums/platformName'; export const logErrorPlatform = () => { const c = getContext(); @@ -97,7 +97,7 @@ export const isPlatformSupported = async (isGlobalScope = false) => { let platformsAsObj; if (isGlobalScope) { - platformsAsObj = SUPPORTED_PLATFORMS; + platformsAsObj = RnvPlatforms; } else { platformsAsObj = c.buildConfig ? c.buildConfig.platforms : c.supportedPlatforms; } diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index 775cd3335d..1d995c472e 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { SUPPORTED_PLATFORMS } from '../../constants'; +import { RnvPlatforms } from '../../enums/platformName'; export const Runtime = z .any() @@ -7,7 +7,7 @@ export const Runtime = z 'This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code' ); -export const PlatformsKeys = z.enum(SUPPORTED_PLATFORMS); +export const PlatformsKeys = z.enum(RnvPlatforms); export type _PlatformsKeysType = z.infer; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 6ca2b93a27..51716dc11d 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -17,7 +17,7 @@ import type { PlatformKey, RenativeConfigRnvTaskName } from '../schema/types'; import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { DEFAULT_TASK_DESCRIPTIONS } from './constants'; import { getContext } from '../context/provider'; -import { SUPPORTED_PLATFORMS } from '../constants'; +import { RnvPlatforms } from '../enums/platformName'; let executedTasks: Record = {}; @@ -339,8 +339,7 @@ export const findSuitableTask = async (specificTask?: string): Promise { data.files.template.renativeConfig?.defaults?.supportedPlatforms || []; - supportedPlatforms.sort((a, b) => SUPPORTED_PLATFORMS.indexOf(a) - SUPPORTED_PLATFORMS.indexOf(b)); + supportedPlatforms.sort((a, b) => RnvPlatforms.indexOf(a) - RnvPlatforms.indexOf(b)); const selectedPlatforms = data.files.template.renativeTemplateConfig?.bootstrapConfig?.defaultSelectedPlatforms || supportedPlatforms; diff --git a/packages/engine-core/src/tasks/global/taskConfig.ts b/packages/engine-core/src/tasks/global/taskConfig.ts index 6b34bae0b8..18b8b0e2a6 100644 --- a/packages/engine-core/src/tasks/global/taskConfig.ts +++ b/packages/engine-core/src/tasks/global/taskConfig.ts @@ -1,12 +1,4 @@ -import { - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - executeTask, - SUPPORTED_PLATFORMS, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { logTask, RnvTaskOptionPresets, RnvTaskFn, executeTask, RnvPlatforms, RnvTask, RnvTaskName } from '@rnv/core'; const taskConfig: RnvTaskFn = async (c, _, originTask) => { logTask('taskConfig'); @@ -23,7 +15,7 @@ const Task: RnvTask = { fn: taskConfig, task: RnvTaskName.config, options: RnvTaskOptionPresets.withBase(), - platforms: [...SUPPORTED_PLATFORMS], + platforms: [...RnvPlatforms], }; export default Task; diff --git a/packages/engine-core/src/tasks/global/taskDeploy.ts b/packages/engine-core/src/tasks/global/taskDeploy.ts index 68d69c7b11..7d32e69f35 100644 --- a/packages/engine-core/src/tasks/global/taskDeploy.ts +++ b/packages/engine-core/src/tasks/global/taskDeploy.ts @@ -6,7 +6,7 @@ import { shouldSkipTask, RnvTask, RnvTaskName, - SUPPORTED_PLATFORMS, + RnvPlatforms, } from '@rnv/core'; const taskDeploy: RnvTaskFn = async (_c, parentTask, originTask) => { @@ -25,7 +25,7 @@ const Task: RnvTask = { fn: taskDeploy, task: RnvTaskName.deploy, options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: [...SUPPORTED_PLATFORMS], + platforms: [...RnvPlatforms], }; export default Task; From 900196730d1144325584fa79f3b503e8e2b04cf5 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 13:41:55 +0100 Subject: [PATCH 078/175] fix support for platform Independent Tasks --- packages/core/src/tasks/index.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 51716dc11d..8da552dfd6 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -389,15 +389,27 @@ const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { const _selectPlatform = async (c: RnvContext, suitableEngines: Array, task: string) => { let platforms: string[] = []; const supportedEngPlatforms: string[] = []; + let isPlatformIndependentTask = false; suitableEngines.forEach((engine) => { const enPlats = getEngineTask(task, engine.tasks)?.platforms; + if (enPlats) { enPlats.forEach((plat) => { supportedEngPlatforms.push(plat); }); + } else if (enPlats === null) { + // enPlats=null means task can be executed without platform + isPlatformIndependentTask = true; } }); + if (supportedEngPlatforms.length === 0 && isPlatformIndependentTask) { + // If there are no tasks declaring supported platforms + // BUT there are tasks that can be executed without platform + // then we can skip platform selection + return; + } + const supProjPlatforms = c.buildConfig?.defaults?.supportedPlatforms; if (supProjPlatforms) { From 2f676c35a588e0625ae6a2e08d4602b9699af9bd Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 13:53:06 +0100 Subject: [PATCH 079/175] fix tvos metro runner --- packages/core/src/platforms/index.ts | 10 ++++++++-- packages/sdk-react-native/src/metroRunner.ts | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/core/src/platforms/index.ts b/packages/core/src/platforms/index.ts index c0c03c74e9..03825f1654 100644 --- a/packages/core/src/platforms/index.ts +++ b/packages/core/src/platforms/index.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { chalk, logDefault, logError, logWarning, logDebug } from '../logger'; +import { chalk, logDefault, logError, logWarning, logDebug, logInfo } from '../logger'; import { cleanFolder, copyFolderContentsRecursiveSync } from '../system/fs'; import { getTimestampPathsConfig, getAppFolder } from '../context/contextProps'; import { generateOptions, inquirerPrompt } from '../api'; @@ -88,10 +88,16 @@ export const createPlatformBuild = (platform: RnvPlatform) => resolve(); }); +const printCurrentPlatform = (platform: RnvPlatform) => { + const msg = `Current platform: ${chalk().white.bold(platform)}`; + logInfo(msg); +}; + export const isPlatformSupported = async (isGlobalScope = false) => { const c = getContext(); if (c.platform && c.program.platform !== true && isGlobalScope) { + printCurrentPlatform(c.platform); return c.platform; } @@ -135,7 +141,7 @@ export const isPlatformSupported = async (isGlobalScope = false) => { throw new Error('User canceled'); } } - + printCurrentPlatform(c.platform); return c.platform; }; diff --git a/packages/sdk-react-native/src/metroRunner.ts b/packages/sdk-react-native/src/metroRunner.ts index d23b8ea0ff..ae8d09623d 100644 --- a/packages/sdk-react-native/src/metroRunner.ts +++ b/packages/sdk-react-native/src/metroRunner.ts @@ -17,6 +17,7 @@ import { confirmActiveBundler, getEntryFile } from '@rnv/sdk-utils'; const BUNDLER_PLATFORMS: Partial> = {}; BUNDLER_PLATFORMS['ios'] = 'ios'; +BUNDLER_PLATFORMS['tvos'] = 'ios'; BUNDLER_PLATFORMS['macos'] = 'ios'; BUNDLER_PLATFORMS['android'] = 'android'; BUNDLER_PLATFORMS['androidtv'] = 'android'; @@ -62,6 +63,7 @@ export const startReactNative = async (opts: { logInfo(`You passed ${chalk().bold('-r')} argument. --reset-cache will be applied to react-native`); } // logSummary('BUNDLER STARTED'); + const url = chalk().cyan( `http://${c.runtime.localhost}:${c.runtime.port}/${getEntryFile()}.bundle?platform=${ BUNDLER_PLATFORMS[c.platform] From 795b3e52041600936c412fb1afebbf2e789bdfb0 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 13:53:32 +0100 Subject: [PATCH 080/175] fix macos bootstrap --- packages/template-starter/renative.template.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index 6d32550e11..6d0c5dedf3 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -16,7 +16,7 @@ }, { "paths": ["webpack.config.js"], - "engines": ["engine-web"] + "engines": ["engine-web", "engine-rn-electron"] } ], "renative_json": { From 44e65845a624d775a2d97d4b63aa14a565c72713 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 18:07:10 +0100 Subject: [PATCH 081/175] fix @rnv/adapter withRNVWebpack, add metro-react-native-babel-preset to rn-electron and rn-web engines so they can be used standalone --- packages/adapter/src/adapters.ts | 4 ++-- packages/engine-rn-electron/package.json | 3 ++- packages/engine-rn-electron/src/adapter.ts | 1 + packages/engine-rn-web/package.json | 3 ++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/adapter/src/adapters.ts b/packages/adapter/src/adapters.ts index 1ca052b445..c3f96eb06b 100644 --- a/packages/adapter/src/adapters.ts +++ b/packages/adapter/src/adapters.ts @@ -73,8 +73,8 @@ export const withRNVNext = (cnf: unknown) => { export const withRNVWebpack = (cnf: unknown) => { if (process.env.RNV_ENGINE_PATH) { const engine = require(process.env.RNV_ENGINE_PATH); - if (engine.withRNVNext) { - return engine.withRNVNext(cnf); + if (engine.withRNVWebpack) { + return engine.withRNVWebpack(cnf); } } diff --git a/packages/engine-rn-electron/package.json b/packages/engine-rn-electron/package.json index ef9a01107a..157d0bf8f9 100644 --- a/packages/engine-rn-electron/package.json +++ b/packages/engine-rn-electron/package.json @@ -40,7 +40,8 @@ "@rnv/adapter": "1.0.0-rc.12", "electron": "26.3.0", "electron-builder": "24.6.4", - "electron-notarize": "1.2.2" + "electron-notarize": "1.2.2", + "metro-react-native-babel-preset": "0.76.8" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" diff --git a/packages/engine-rn-electron/src/adapter.ts b/packages/engine-rn-electron/src/adapter.ts index 07df22b3bc..a14664bdb5 100644 --- a/packages/engine-rn-electron/src/adapter.ts +++ b/packages/engine-rn-electron/src/adapter.ts @@ -4,6 +4,7 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { const plugins = cnf?.plugins || []; return { retainLines: true, + // TODO: determine if this is the best preset for rn-electron as we do not use metro/hermes features in this engine presets: [['module:metro-react-native-babel-preset', { useTransformReactJSXExperimental: true }]], ...cnf, plugins: [withBabelPluginModuleResolver(), ...plugins], diff --git a/packages/engine-rn-web/package.json b/packages/engine-rn-web/package.json index 043ba268b7..0ffe5e2308 100644 --- a/packages/engine-rn-web/package.json +++ b/packages/engine-rn-web/package.json @@ -37,7 +37,8 @@ "@rnv/sdk-utils": "1.0.0-rc.12", "@rnv/sdk-webos": "1.0.0-rc.12", "@rnv/sdk-webpack": "1.0.0-rc.12", - "@rnv/adapter": "1.0.0-rc.12" + "@rnv/adapter": "1.0.0-rc.12", + "metro-react-native-babel-preset": "0.76.8" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" From 0cbfadfebcd8b4fd85417bd65735b1ecc2a8e86f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 21:08:56 +0100 Subject: [PATCH 082/175] load babel preset directly instead of string to work correctly in linked mode, fix macos, make src/pages dir excluded from non next projects --- packages/engine-rn-electron/src/adapter.ts | 3 ++- packages/engine-rn-web/src/adapter.ts | 2 +- packages/sdk-webpack/src/config/webpack.config.js | 2 ++ packages/sdk-webpack/src/scripts/start.js | 8 ++++---- packages/template-starter/renative.json | 2 +- packages/template-starter/renative.template.json | 14 ++++++++++++-- 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/packages/engine-rn-electron/src/adapter.ts b/packages/engine-rn-electron/src/adapter.ts index a14664bdb5..c9264b4c9a 100644 --- a/packages/engine-rn-electron/src/adapter.ts +++ b/packages/engine-rn-electron/src/adapter.ts @@ -5,7 +5,8 @@ export const withRNVBabel = (cnf: BabelConfig): BabelConfig => { return { retainLines: true, // TODO: determine if this is the best preset for rn-electron as we do not use metro/hermes features in this engine - presets: [['module:metro-react-native-babel-preset', { useTransformReactJSXExperimental: true }]], + // presets: [['module:metro-react-native-babel-preset', { useTransformReactJSXExperimental: true }]], + presets: [[require.resolve('metro-react-native-babel-preset'), { useTransformReactJSXExperimental: true }]], ...cnf, plugins: [withBabelPluginModuleResolver(), ...plugins], }; diff --git a/packages/engine-rn-web/src/adapter.ts b/packages/engine-rn-web/src/adapter.ts index 2904ee8991..6136b2005e 100644 --- a/packages/engine-rn-web/src/adapter.ts +++ b/packages/engine-rn-web/src/adapter.ts @@ -6,7 +6,7 @@ const withRNVBabel = (cnf: BabelConfig): BabelConfig => { return { retainLines: true, - presets: [['module:metro-react-native-babel-preset', { useTransformReactJSXExperimental: true }]], + presets: [[require.resolve('metro-react-native-babel-preset'), { useTransformReactJSXExperimental: true }]], ...cnf, plugins: [withBabelPluginModuleResolver(), ...plugins], }; diff --git a/packages/sdk-webpack/src/config/webpack.config.js b/packages/sdk-webpack/src/config/webpack.config.js index 1f24f6b453..2831a24402 100644 --- a/packages/sdk-webpack/src/config/webpack.config.js +++ b/packages/sdk-webpack/src/config/webpack.config.js @@ -431,6 +431,7 @@ module.exports = function (webpackEnv) { babelrc: false, configFile: false, compact: false, + // RNV-UPDATE ------------------------------------------ // presets: [[require.resolve('babel-preset-react-app/dependencies'), { helpers: true }]], presets: [ [ @@ -440,6 +441,7 @@ module.exports = function (webpackEnv) { }, ], ], + // RNV-UPDATE ------------------------------------------ cacheDirectory: true, // See #6846 for context on why cacheCompression is disabled cacheCompression: false, diff --git a/packages/sdk-webpack/src/scripts/start.js b/packages/sdk-webpack/src/scripts/start.js index 7f0c372178..fa200dab9c 100644 --- a/packages/sdk-webpack/src/scripts/start.js +++ b/packages/sdk-webpack/src/scripts/start.js @@ -1,6 +1,6 @@ -// RNV-ADDITION +// RNV-UPDATE ------------------------------------------ import { getMergedConfig } from '../adapter'; -// RNV-ADDITION +// RNV-UPDATE ------------------------------------------ // Do this as the first thing so that any code reading it knows the right env. process.env.BABEL_ENV = 'development'; process.env.NODE_ENV = 'development'; @@ -23,11 +23,11 @@ const checkRequiredFiles = require('react-dev-utils/checkRequiredFiles'); const { createCompiler, prepareProxy, prepareUrls } = require('react-dev-utils/WebpackDevServerUtils'); // const openBrowser = require('react-dev-utils/openBrowser'); const semver = require('semver'); -// const { Logger } = require('rnv'); const paths = require('../config/paths'); +// RNV-UPDATE ------------------------------------------ // const configFactory = require('../config/webpack.config'); -// const configFactory = require('react-scripts/config/webpack.config.js'); const config = getMergedConfig(require('../config/webpack.config')('development'), paths.appPath); +// RNV-UPDATE ------------------------------------------ const createDevServerConfig = require('../config/webpackDevServer.config'); const getClientEnvironment = require('../config/env'); diff --git a/packages/template-starter/renative.json b/packages/template-starter/renative.json index 9f8e3501da..12e791525d 100644 --- a/packages/template-starter/renative.json +++ b/packages/template-starter/renative.json @@ -121,7 +121,7 @@ "supportedPlatforms": ["web"] }, "react-native-web": { - "supportedPlatforms": ["web", "tizen", "webos"] + "supportedPlatforms": ["web", "tizen", "webos", "macos"] }, "react-native-tvos": { "supportedPlatforms": ["tvos", "firetv", "androidtv"] diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index 6d0c5dedf3..9fe26de59d 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -4,14 +4,24 @@ "disabled": false, "includedPaths": [ { - "paths": ["buildHooks", "src", "index.js", "tsconfig.json", "babel.config.js", "typings", ".gitignore"] + "paths": [ + "buildHooks", + "src/app", + "src/entry", + "src/config.tsx", + "index.js", + "tsconfig.json", + "babel.config.js", + "typings", + ".gitignore" + ] }, { "paths": ["Gemfile", "metro.config.js", ".bundle", "react-native.config.js"], "engines": ["engine-rn", "engine-rn-tvos"] }, { - "paths": ["next.config.js", "next-env.d.ts"], + "paths": ["next.config.js", "next-env.d.ts", "src/pages"], "engines": ["engine-rn-next"] }, { From b66e30398f408661b1be91b009c0023b4375660e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 22:21:35 +0100 Subject: [PATCH 083/175] split and migrate target tasks into respective sdks and reuse them in engines --- .../config-templates/renative.templates.json | 16 +++- packages/core/src/enums/taskName.ts | 1 + packages/core/src/tasks/index.ts | 20 +++-- packages/engine-core/package.json | 5 -- packages/engine-core/src/common.ts | 47 ---------- packages/engine-core/src/index.ts | 4 - .../src/tasks/global/taskConfigureSoft.ts | 8 +- .../tasks/platform/taskPlatformConfigure.ts | 6 +- .../src/tasks/target/taskTargetLaunch.ts | 89 ------------------- .../src/tasks/target/taskTargetList.ts | 57 ------------ packages/engine-rn/src/index.ts | 3 +- packages/sdk-android/src/deviceManager.ts | 3 +- packages/sdk-android/src/index.ts | 3 + .../sdk-android/src/tasks/taskSdkConfigure.ts | 20 +++++ .../sdk-android/src/tasks/taskTargetLaunch.ts | 36 ++++++++ .../sdk-android/src/tasks/taskTargetList.ts | 33 +++++++ packages/sdk-apple/src/index.ts | 2 + .../sdk-apple/src/tasks/taskTargetLaunch.ts | 33 +++++++ .../sdk-apple/src/tasks/taskTargetList.ts | 29 ++++++ packages/sdk-kaios/src/index.ts | 1 + .../sdk-kaios/src/tasks/taskTargetLaunch.ts | 33 +++++++ packages/sdk-tizen/src/index.ts | 3 + .../sdk-tizen/src/tasks/taskSdkConfigure.ts | 20 +++++ .../sdk-tizen/src/tasks/taskTargetLaunch.ts | 36 ++++++++ .../sdk-tizen/src/tasks/taskTargetList.ts | 33 +++++++ packages/sdk-utils/src/index.ts | 1 + packages/sdk-utils/src/target.ts | 33 +++++++ packages/sdk-webos/src/deviceManager.ts | 3 +- packages/sdk-webos/src/index.ts | 3 + .../sdk-webos/src/tasks/taskSdkConfigure.ts | 20 +++++ .../sdk-webos/src/tasks/taskTargetLaunch.ts | 36 ++++++++ .../sdk-webos/src/tasks/taskTargetList.ts | 33 +++++++ spec/renative.engine2.json | 43 +++++++++ 33 files changed, 490 insertions(+), 223 deletions(-) delete mode 100644 packages/engine-core/src/common.ts delete mode 100644 packages/engine-core/src/tasks/target/taskTargetLaunch.ts delete mode 100644 packages/engine-core/src/tasks/target/taskTargetList.ts create mode 100644 packages/sdk-android/src/tasks/taskSdkConfigure.ts create mode 100644 packages/sdk-android/src/tasks/taskTargetLaunch.ts create mode 100644 packages/sdk-android/src/tasks/taskTargetList.ts create mode 100644 packages/sdk-apple/src/tasks/taskTargetLaunch.ts create mode 100644 packages/sdk-apple/src/tasks/taskTargetList.ts create mode 100644 packages/sdk-kaios/src/tasks/taskTargetLaunch.ts create mode 100644 packages/sdk-tizen/src/tasks/taskSdkConfigure.ts create mode 100644 packages/sdk-tizen/src/tasks/taskTargetLaunch.ts create mode 100644 packages/sdk-tizen/src/tasks/taskTargetList.ts create mode 100644 packages/sdk-utils/src/target.ts create mode 100644 packages/sdk-webos/src/tasks/taskSdkConfigure.ts create mode 100644 packages/sdk-webos/src/tasks/taskTargetLaunch.ts create mode 100644 packages/sdk-webos/src/tasks/taskTargetList.ts create mode 100644 spec/renative.engine2.json diff --git a/packages/config-templates/renative.templates.json b/packages/config-templates/renative.templates.json index 35743376cb..144dd35e47 100644 --- a/packages/config-templates/renative.templates.json +++ b/packages/config-templates/renative.templates.json @@ -117,6 +117,18 @@ } }, "pluginTemplates": { + "react-dev-utils": { + "disableNpm": true, + "nodeModuleOverrides": { + "^12.0.0": { + "fileOverrides": { + "clearConsole.js": { + "input_line_xxx": "output_line_xxxx" + } + } + } + } + }, "@bam.tech/react-native-image-resizer": { "android": { "package": "com.reactnativeimageresizer.ImageResizerPackage" @@ -477,9 +489,9 @@ "version": "11.3.7", "disablePluginTemplateOverrides": false, "disableNpm": true, - "pluginTemplates": { + "nodeModuleOverrides": { "^11.3.7": { - "overrides": { + "fileOverrides": { "build/tools/listIOSDevices.js": { "rawOutput.filter(device => !device.platform.includes('appletv') && !device.platform.includes('macos')).sort(device => device.simulator ? 1 : -1).map(device => {": "rawOutput.sort(device => device.simulator ? 1 : -1).map(device => { // <= PATCHED BY RENATIVE" } diff --git a/packages/core/src/enums/taskName.ts b/packages/core/src/enums/taskName.ts index 303f826663..a6cb59c48c 100644 --- a/packages/core/src/enums/taskName.ts +++ b/packages/core/src/enums/taskName.ts @@ -34,6 +34,7 @@ export const RnvTaskName = { platformEject: 'platform eject', platformList: 'platform list', platformSetup: 'platform setup', + sdkConfigure: 'sdk configure', projectConfigure: 'project configure', projectUpgrade: 'project upgrade', pluginAdd: 'plugin add', diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 8da552dfd6..7d8768e8e9 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -589,11 +589,13 @@ export const executeEngineTask = async ( const c = getContext(); const needsHelp = Object.prototype.hasOwnProperty.call(c.program, 'help'); - const t = getEngineTask(task, tasks, CUSTOM_TASKS); + const taskInstance = getEngineTask(task, tasks, CUSTOM_TASKS); - if (needsHelp && !parentTask && t) { + if (!taskInstance) return; + + if (needsHelp && !parentTask && taskInstance) { logRaw(` -Description: ${t.description} +Description: ${taskInstance.description} `); c.program.outputHelp(); @@ -603,23 +605,23 @@ Description: ${t.description} // return ` ${option}--${v.key} ${v.description}`; // }) // .join('\n')} - if (t.fnHelp) { - await t.fnHelp(c, parentTask, originTask); + if (taskInstance.fnHelp) { + await taskInstance.fnHelp(c, parentTask, originTask); } return; } - if (t && !t.isGlobalScope && isFirstTask) { + if (!taskInstance.isGlobalScope && isFirstTask) { if (c.files.project.package) { // This has to happen in order for hooks to be able to run await checkIfProjectAndNodeModulesExists(); } } if (isFirstTask) { - c.runtime.forceBuildHookRebuild = !!t?.forceBuildHookRebuild; + c.runtime.forceBuildHookRebuild = !!taskInstance?.forceBuildHookRebuild; } const inOnlyMode = c.program.only; - const doPipe = t && !t.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); + const doPipe = !taskInstance.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); if (doPipe) await _executePipe(c, task, 'before'); - if (t && t.fn) await t.fn(c, parentTask, originTask); + if (taskInstance.fn) await taskInstance.fn(c, parentTask, originTask); if (doPipe) await _executePipe(c, task, 'after'); }; diff --git a/packages/engine-core/package.json b/packages/engine-core/package.json index 14f22077db..a22f3b4f9a 100644 --- a/packages/engine-core/package.json +++ b/packages/engine-core/package.json @@ -29,12 +29,7 @@ "watch": "tsc --watch --preserveWatchOutput" }, "dependencies": { - "@rnv/sdk-android": "1.0.0-rc.12", - "@rnv/sdk-apple": "1.0.0-rc.12", - "@rnv/sdk-kaios": "1.0.0-rc.12", - "@rnv/sdk-tizen": "1.0.0-rc.12", "@rnv/sdk-utils": "1.0.0-rc.12", - "@rnv/sdk-webos": "1.0.0-rc.12", "iocane": "4.0.0", "kill-port": "1.6.1", "lodash": "4.17.21", diff --git a/packages/engine-core/src/common.ts b/packages/engine-core/src/common.ts deleted file mode 100644 index 4aebfcc1ec..0000000000 --- a/packages/engine-core/src/common.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { getContext, logDefault } from '@rnv/core'; -import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '@rnv/sdk-android'; -import { checkAndConfigureTizenSdks, checkTizenSdk } from '@rnv/sdk-tizen'; -import { checkAndConfigureWebosSdks, checkWebosSdk } from '@rnv/sdk-webos'; - -export const checkAndConfigureSdks = async () => { - logDefault('checkAndConfigureSdks'); - - const c = getContext(); - - switch (c.platform) { - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - return checkAndConfigureAndroidSdks(); - case 'tizen': - case 'tizenmobile': - case 'tizenwatch': - return checkAndConfigureTizenSdks(); - case 'webos': - return checkAndConfigureWebosSdks(); - default: - return true; - } -}; - -export const checkSdk = async () => { - logDefault('checkSdk'); - const c = getContext(); - - switch (c.platform) { - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - return checkAndroidSdk(); - case 'tizen': - case 'tizenmobile': - case 'tizenwatch': - return checkTizenSdk(); - case 'webos': - return checkWebosSdk(); - default: - return true; - } -}; diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index ee5e6a3a81..a63344171e 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -34,8 +34,6 @@ import taskWorkspaceConfigure from './tasks/workspace/taskWorkspaceConfigure'; import taskConfigureSoft from './tasks/global/taskConfigureSoft'; import taskRvnKill from './tasks/global/taskKill'; import taskRvnDoctor from './tasks/global/taskDoctor'; -import taskTargetList from './tasks/target/taskTargetList'; -import taskTargetLaunch from './tasks/target/taskTargetLaunch'; import taskLink from './tasks/linking/taskLink'; import taskUnlink from './tasks/linking/taskUnlink'; import taskTelemetryStatus from './tasks/telemetry/taskTelemetryStatus'; @@ -82,8 +80,6 @@ const Engine: RnvEngine = { taskConfigureSoft, taskRvnKill, taskRvnDoctor, - taskTargetList, - taskTargetLaunch, taskLink, taskUnlink, taskTelemetryStatus, diff --git a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts index c8205b5b3e..90cef4270e 100644 --- a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts @@ -8,18 +8,18 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { checkAndConfigureSdks, checkSdk } from '../../common'; import { isBuildSchemeSupported } from '../../buildSchemes'; const taskConfigureSoft: RnvTaskFn = async (_c, parentTask, originTask) => { logTask('taskConfigureSoft'); await configureRuntimeDefaults(); - await executeTask(RnvTaskName.appConfigure, parentTask, originTask); + await executeTask(RnvTaskName.appConfigure, RnvTaskName.configureSoft, originTask); await isPlatformSupported(); await isBuildSchemeSupported(); - await checkAndConfigureSdks(); - await checkSdk(); + + await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.configureSoft, originTask); + await configureRuntimeDefaults(); return true; }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index f024402359..a505cee612 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -18,7 +18,6 @@ import { installPackageDependencies, overrideTemplatePlugins, } from '@rnv/core'; -import { checkAndConfigureSdks, checkSdk } from '../../common'; import { isBuildSchemeSupported } from '../../buildSchemes'; import { configureFonts } from '@rnv/sdk-utils'; @@ -31,8 +30,9 @@ const taskPlatformConfigure: RnvTaskFn = async (c, parentTask, originTask) => { await isPlatformSupported(); await isBuildSchemeSupported(); - await checkAndConfigureSdks(); - await checkSdk(); + + await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.platformConfigure, originTask); + await configureRuntimeDefaults(); if (c.program.only && !!parentTask) return true; diff --git a/packages/engine-core/src/tasks/target/taskTargetLaunch.ts b/packages/engine-core/src/tasks/target/taskTargetLaunch.ts deleted file mode 100644 index c423d4695c..0000000000 --- a/packages/engine-core/src/tasks/target/taskTargetLaunch.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { - isPlatformSupported, - chalk, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - inquirerPrompt, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { checkAndConfigureSdks, checkSdk } from '../../common'; -import { launchAndroidSimulator } from '@rnv/sdk-android'; -import { launchAppleSimulator } from '@rnv/sdk-apple'; -import { launchTizenSimulator } from '@rnv/sdk-tizen'; -import { launchWebOSimulator } from '@rnv/sdk-webos'; -import { launchKaiOSSimulator } from '@rnv/sdk-kaios'; - -const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetLaunch'); - - await isPlatformSupported(true); - await checkAndConfigureSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); - - const { platform, program } = c; - let target = program?.target; - const options = []; - - if (platform && !target) { - const projectTarget = c.files.project.configLocal?.defaultTargets?.[platform]; - if (projectTarget) { - options.push({ name: `${projectTarget} (project default)`, value: projectTarget }); - } - const workspaceTarget = c.files.workspace.config?.defaultTargets?.[platform]; - if (workspaceTarget) { - options.push({ name: `${workspaceTarget} (global default)`, value: workspaceTarget }); - } - - options.push({ name: 'Pick from available targets...', value: true }); - - const { selectedOption } = await inquirerPrompt({ - name: 'selectedOption', - type: 'list', - message: 'Which target to use?', - choices: options, - }); - - if (selectedOption) { - target = selectedOption; - } - } - - await checkSdk(); - - switch (platform) { - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - return launchAndroidSimulator(target); - case 'ios': - case 'tvos': - return launchAppleSimulator(target); - case 'tizen': - return launchTizenSimulator(target); - case 'webos': - return launchWebOSimulator(target); - case 'kaios': - return launchKaiOSSimulator(target); - default: - return Promise.reject( - `"target launch" command does not support ${chalk().white.bold( - platform - )} platform yet. You will have to launch the target manually. Working on it!` - ); - } -}; - -const Task: RnvTask = { - description: 'Launch specific target', - fn: taskTargetLaunch, - task: RnvTaskName.targetLaunch, - options: RnvTaskOptionPresets.withBase(), - platforms: null, - isGlobalScope: true, -}; - -export default Task; diff --git a/packages/engine-core/src/tasks/target/taskTargetList.ts b/packages/engine-core/src/tasks/target/taskTargetList.ts deleted file mode 100644 index 0def880728..0000000000 --- a/packages/engine-core/src/tasks/target/taskTargetList.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - isPlatformSupported, - chalk, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { listAndroidTargets } from '@rnv/sdk-android'; -import { listAppleDevices } from '@rnv/sdk-apple'; -import { listTizenTargets } from '@rnv/sdk-tizen'; -import { listWebOSTargets } from '@rnv/sdk-webos'; -import { checkAndConfigureSdks, checkSdk } from '../../common'; - -const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetList'); - - await isPlatformSupported(true); - await checkAndConfigureSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); - - const { platform } = c; - - await checkSdk(); - - switch (platform) { - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - return listAndroidTargets(c); - case 'ios': - case 'tvos': - return listAppleDevices(c); - case 'tizen': - return listTizenTargets(); - case 'webos': - return listWebOSTargets(c); - default: - return Promise.reject( - `"target list" command does not support ${chalk().white.bold(platform)} platform yet. Working on it!` - ); - } -}; - -const Task: RnvTask = { - description: 'List all available targets for specific platform', - fn: taskTargetList, - task: RnvTaskName.targetList, - options: RnvTaskOptionPresets.withBase(), - platforms: null, - isGlobalScope: true, -}; - -export default Task; diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index d8f65c5cd1..1bc152718d 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -17,7 +17,7 @@ import taskLog from './tasks/taskLog'; import taskEject from './tasks/taskEject'; import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; - +import { taskTargetLaunch } from '@rnv/sdk-android'; const Engine: RnvEngine = { tasks: generateEngineTasks([ taskRun, @@ -32,6 +32,7 @@ const Engine: RnvEngine = { taskCryptoUpdateProfiles, taskCryptoInstallProfiles, taskLog, + taskTargetLaunch, ]), config: CNF, runtimeExtraProps: { diff --git a/packages/sdk-android/src/deviceManager.ts b/packages/sdk-android/src/deviceManager.ts index 50e784b924..9d3afc3d94 100644 --- a/packages/sdk-android/src/deviceManager.ts +++ b/packages/sdk-android/src/deviceManager.ts @@ -130,7 +130,8 @@ export const launchAndroidSimulator = async ( return Promise.reject('No simulator -t target name specified!'); }; -export const listAndroidTargets = async (c: RnvContext) => { +export const listAndroidTargets = async () => { + const c = getContext(); logDefault('listAndroidTargets'); const { program: { device }, diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index cfa25c58e9..47d4ee197c 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -3,3 +3,6 @@ export * from './deviceManager'; export * from './constants'; export * from './installer'; export * from './jetifier'; +export * from './tasks/taskTargetLaunch'; +export * from './tasks/taskTargetList'; +export * from './tasks/taskSdkConfigure'; diff --git a/packages/sdk-android/src/tasks/taskSdkConfigure.ts b/packages/sdk-android/src/tasks/taskSdkConfigure.ts new file mode 100644 index 0000000000..bf7448acac --- /dev/null +++ b/packages/sdk-android/src/tasks/taskSdkConfigure.ts @@ -0,0 +1,20 @@ +import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; + +const fn: RnvTaskFn = async () => { + logTask('taskSdkConfigure'); + + await checkAndConfigureAndroidSdks(); + await checkAndroidSdk(); +}; + +const Task: RnvTask = { + description: 'Configures sdks', + isPrivate: true, + fn, + task: RnvTaskName.sdkConfigure, + options: [], + platforms: null, +}; + +export default Task; diff --git a/packages/sdk-android/src/tasks/taskTargetLaunch.ts b/packages/sdk-android/src/tasks/taskTargetLaunch.ts new file mode 100644 index 0000000000..a17598cc4b --- /dev/null +++ b/packages/sdk-android/src/tasks/taskTargetLaunch.ts @@ -0,0 +1,36 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; +import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; +import { launchAndroidSimulator } from '../deviceManager'; + +const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetLaunch'); + + await isPlatformSupported(true); + await checkAndConfigureAndroidSdks(); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); + + const target = await getTargetWithOptionalPrompt(); + + await checkAndroidSdk(); + return launchAndroidSimulator(target); +}; + +const Task: RnvTask = { + description: 'Launch specific target', + fn: taskTargetLaunch, + task: RnvTaskName.targetLaunch, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-android/src/tasks/taskTargetList.ts b/packages/sdk-android/src/tasks/taskTargetList.ts new file mode 100644 index 0000000000..7a1a691541 --- /dev/null +++ b/packages/sdk-android/src/tasks/taskTargetList.ts @@ -0,0 +1,33 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { listAndroidTargets } from '../deviceManager'; +import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; + +const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetList'); + + await isPlatformSupported(true); + await checkAndConfigureAndroidSdks(); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); + await checkAndroidSdk(); + + return listAndroidTargets(); +}; + +const Task: RnvTask = { + description: 'List all available targets for specific platform', + fn: taskTargetList, + task: RnvTaskName.targetList, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index f0cddc1948..27a8fd67bd 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -2,3 +2,5 @@ export * from './deviceManager'; export * from './runner'; export * from './ejector'; export * from './fastlane'; +export * from './tasks/taskTargetLaunch'; +export * from './tasks/taskTargetList'; diff --git a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts new file mode 100644 index 0000000000..a6b9535984 --- /dev/null +++ b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts @@ -0,0 +1,33 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; +import { launchAppleSimulator } from '../deviceManager'; + +const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetLaunch'); + + await isPlatformSupported(true); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); + + const target = await getTargetWithOptionalPrompt(); + + return launchAppleSimulator(target); +}; + +const Task: RnvTask = { + description: 'Launch specific ios target', + fn: taskTargetLaunch, + task: RnvTaskName.targetLaunch, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-apple/src/tasks/taskTargetList.ts b/packages/sdk-apple/src/tasks/taskTargetList.ts new file mode 100644 index 0000000000..d850a29ff4 --- /dev/null +++ b/packages/sdk-apple/src/tasks/taskTargetList.ts @@ -0,0 +1,29 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { listAppleDevices } from '../deviceManager'; + +const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetList'); + + await isPlatformSupported(true); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); + return listAppleDevices(c); +}; + +const Task: RnvTask = { + description: 'List all available targets for specific platform', + fn: taskTargetList, + task: RnvTaskName.targetList, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, //TODO: evaluate this after moving to SDK +}; + +export default Task; diff --git a/packages/sdk-kaios/src/index.ts b/packages/sdk-kaios/src/index.ts index e0b9ec084d..99149d9380 100644 --- a/packages/sdk-kaios/src/index.ts +++ b/packages/sdk-kaios/src/index.ts @@ -1,3 +1,4 @@ export * from './deviceManager'; export * from './runner'; export * from './constants'; +export * from './tasks/taskTargetLaunch'; diff --git a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts new file mode 100644 index 0000000000..aaced239b6 --- /dev/null +++ b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts @@ -0,0 +1,33 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; +import { launchKaiOSSimulator } from '../deviceManager'; + +const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetLaunch'); + + await isPlatformSupported(true); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); + + const target = await getTargetWithOptionalPrompt(); + + return launchKaiOSSimulator(target); +}; + +const Task: RnvTask = { + description: 'Launch specific target', + fn: taskTargetLaunch, + task: RnvTaskName.targetLaunch, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-tizen/src/index.ts b/packages/sdk-tizen/src/index.ts index df58857356..9ac27174e9 100644 --- a/packages/sdk-tizen/src/index.ts +++ b/packages/sdk-tizen/src/index.ts @@ -2,3 +2,6 @@ export * from './deviceManager'; export * from './installer'; export * from './runner'; export * from './constants'; +export * from './tasks/taskTargetLaunch'; +export * from './tasks/taskTargetList'; +export * from './tasks/taskSdkConfigure'; diff --git a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts new file mode 100644 index 0000000000..6a19c5fd6b --- /dev/null +++ b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts @@ -0,0 +1,20 @@ +import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; + +const fn: RnvTaskFn = async () => { + logTask('taskSdkConfigure'); + + await checkAndConfigureTizenSdks(); + await checkTizenSdk(); +}; + +const Task: RnvTask = { + description: 'Configures sdks', + isPrivate: true, + fn, + task: RnvTaskName.sdkConfigure, + options: [], + platforms: null, +}; + +export default Task; diff --git a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts new file mode 100644 index 0000000000..e1414d2614 --- /dev/null +++ b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts @@ -0,0 +1,36 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; +import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; +import { launchTizenSimulator } from '../deviceManager'; + +const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetLaunch'); + + await isPlatformSupported(true); + await checkAndConfigureTizenSdks(); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); + + const target = await getTargetWithOptionalPrompt(); + + await checkTizenSdk(); + return launchTizenSimulator(target); +}; + +const Task: RnvTask = { + description: 'Launch specific target', + fn: taskTargetLaunch, + task: RnvTaskName.targetLaunch, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-tizen/src/tasks/taskTargetList.ts b/packages/sdk-tizen/src/tasks/taskTargetList.ts new file mode 100644 index 0000000000..fab16a7321 --- /dev/null +++ b/packages/sdk-tizen/src/tasks/taskTargetList.ts @@ -0,0 +1,33 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; +import { listTizenTargets } from '../deviceManager'; + +const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetList'); + + await isPlatformSupported(true); + await checkAndConfigureTizenSdks(); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); + await checkTizenSdk(); + + return listTizenTargets(); +}; + +const Task: RnvTask = { + description: 'List all available targets for specific platform', + fn: taskTargetList, + task: RnvTaskName.targetList, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-utils/src/index.ts b/packages/sdk-utils/src/index.ts index 6ec6d2cdfa..4b78d20dce 100644 --- a/packages/sdk-utils/src/index.ts +++ b/packages/sdk-utils/src/index.ts @@ -3,3 +3,4 @@ export * from './fonts'; export * from './getConfigProps'; export * from './ipUtils'; export * from './utils'; +export * from './target'; diff --git a/packages/sdk-utils/src/target.ts b/packages/sdk-utils/src/target.ts new file mode 100644 index 0000000000..42bab099a8 --- /dev/null +++ b/packages/sdk-utils/src/target.ts @@ -0,0 +1,33 @@ +import { getContext, inquirerPrompt } from '@rnv/core'; + +export const getTargetWithOptionalPrompt = async () => { + const ctx = getContext(); + const { platform, program } = ctx; + let target = program?.target; + const options = []; + + if (platform && !target) { + const projectTarget = ctx.files.project.configLocal?.defaultTargets?.[platform]; + if (projectTarget) { + options.push({ name: `${projectTarget} (project default)`, value: projectTarget }); + } + const workspaceTarget = ctx.files.workspace.config?.defaultTargets?.[platform]; + if (workspaceTarget) { + options.push({ name: `${workspaceTarget} (global default)`, value: workspaceTarget }); + } + + options.push({ name: 'Pick from available targets...', value: true }); + + const { selectedOption } = await inquirerPrompt({ + name: 'selectedOption', + type: 'list', + message: 'Which target to use?', + choices: options, + }); + + if (selectedOption) { + target = selectedOption; + } + } + return target; +}; diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index b8ce77ba74..f656f368b2 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -205,7 +205,8 @@ const buildDeviceChoices = (devices: Array) => value: device.name, })); -export const listWebOSTargets = async (c: RnvContext) => { +export const listWebOSTargets = async () => { + const c = getContext(); const devicesResponse = await execCLI(CLI_WEBOS_ARES_DEVICE_INFO, '-D'); const devices = await parseDevices(c, devicesResponse); diff --git a/packages/sdk-webos/src/index.ts b/packages/sdk-webos/src/index.ts index df58857356..9ac27174e9 100644 --- a/packages/sdk-webos/src/index.ts +++ b/packages/sdk-webos/src/index.ts @@ -2,3 +2,6 @@ export * from './deviceManager'; export * from './installer'; export * from './runner'; export * from './constants'; +export * from './tasks/taskTargetLaunch'; +export * from './tasks/taskTargetList'; +export * from './tasks/taskSdkConfigure'; diff --git a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts new file mode 100644 index 0000000000..b6dea4e438 --- /dev/null +++ b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts @@ -0,0 +1,20 @@ +import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; + +const fn: RnvTaskFn = async () => { + logTask('taskSdkConfigure'); + + await checkAndConfigureWebosSdks(); + await checkWebosSdk(); +}; + +const Task: RnvTask = { + description: 'Configures sdks', + isPrivate: true, + fn, + task: RnvTaskName.sdkConfigure, + options: [], + platforms: null, +}; + +export default Task; diff --git a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts new file mode 100644 index 0000000000..ba14b56b93 --- /dev/null +++ b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts @@ -0,0 +1,36 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; +import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; +import { launchWebOSimulator } from '../deviceManager'; + +const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetLaunch'); + + await isPlatformSupported(true); + await checkAndConfigureWebosSdks(); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); + + const target = await getTargetWithOptionalPrompt(); + + await checkWebosSdk(); + return launchWebOSimulator(target); +}; + +const Task: RnvTask = { + description: 'Launch specific target', + fn: taskTargetLaunch, + task: RnvTaskName.targetLaunch, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-webos/src/tasks/taskTargetList.ts b/packages/sdk-webos/src/tasks/taskTargetList.ts new file mode 100644 index 0000000000..3f43680c68 --- /dev/null +++ b/packages/sdk-webos/src/tasks/taskTargetList.ts @@ -0,0 +1,33 @@ +import { + isPlatformSupported, + logTask, + RnvTaskOptionPresets, + executeTask, + RnvTaskFn, + RnvTask, + RnvTaskName, +} from '@rnv/core'; +import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; +import { listWebOSTargets } from '../deviceManager'; + +const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskTargetList'); + + await isPlatformSupported(true); + await checkAndConfigureWebosSdks(); + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); + await checkWebosSdk(); + + return listWebOSTargets(); +}; + +const Task: RnvTask = { + description: 'List all available targets for specific platform', + fn: taskTargetList, + task: RnvTaskName.targetList, + options: RnvTaskOptionPresets.withBase(), + platforms: null, + isGlobalScope: true, +}; + +export default Task; diff --git a/spec/renative.engine2.json b/spec/renative.engine2.json new file mode 100644 index 0000000000..f4774861c6 --- /dev/null +++ b/spec/renative.engine2.json @@ -0,0 +1,43 @@ +{ + "$schema": "../../.rnv/schema/rnv.engine.json", + "engineConfig": { + "id": "engine-rn-electron", + "engineExtension": "rne", + "overview": "React native based engine with web transpiler provided by react-native-web and native desktop wrapper provided by electron", + "pluginDependencies": [ + "react", + "react-art", + "react-dom", + "react-native", + "react-native-web", + "react-dev-utils" + ], + "npm": { + "devDependencies": {} + }, + "platforms": { + "macos": { + "npm": { + "devDependencies": {} + } + }, + "windows": { + "npm": { + "devDependencies": {} + } + }, + "linux": { + "npm": { + "devDependencies": {} + } + } + } + }, + "plugins": { + "react": "source:rnv", + "react-art": "source:rnv", + "react-dom": "source:rnv", + "react-native": "source:rnv", + "react-native-web": "source:rnv" + } +} From 03777e4b3ec14ea8a0e52e8d99e2198232af1923 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 22 Mar 2024 22:54:04 +0100 Subject: [PATCH 084/175] expose sdk tasks to engines --- packages/engine-lightning/src/index.ts | 14 +++++++++++++- packages/engine-rn-tvos/src/index.ts | 7 +++++++ packages/engine-rn-web/src/index.ts | 16 +++++++++++++++- packages/engine-rn/src/index.ts | 10 ++++++++-- packages/sdk-android/src/index.ts | 6 +++--- .../sdk-android/src/tasks/taskTargetLaunch.ts | 18 +++++------------- .../sdk-android/src/tasks/taskTargetList.ts | 14 +++----------- packages/sdk-apple/src/index.ts | 4 ++-- .../sdk-apple/src/tasks/taskTargetLaunch.ts | 18 +++++------------- packages/sdk-apple/src/tasks/taskTargetList.ts | 18 +++++------------- packages/sdk-kaios/src/index.ts | 2 +- .../sdk-kaios/src/tasks/taskTargetLaunch.ts | 14 +++----------- packages/sdk-tizen/src/index.ts | 6 +++--- .../sdk-tizen/src/tasks/taskSdkConfigure.ts | 2 +- .../sdk-tizen/src/tasks/taskTargetLaunch.ts | 14 +++----------- packages/sdk-tizen/src/tasks/taskTargetList.ts | 14 +++----------- packages/sdk-webos/src/index.ts | 6 +++--- .../sdk-webos/src/tasks/taskSdkConfigure.ts | 2 +- .../sdk-webos/src/tasks/taskTargetLaunch.ts | 18 +++++------------- packages/sdk-webos/src/tasks/taskTargetList.ts | 18 +++++------------- 20 files changed, 94 insertions(+), 127 deletions(-) diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index 74f8030e34..3513601680 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -1,4 +1,6 @@ import { RnvEngine, generateEngineTasks, generateEngineExtensions } from '@rnv/core'; +import { taskTargetLaunchWebOS, taskTargetListWebOS, taskSdkConfigureWebOS } from '@rnv/sdk-webos'; +import { taskSdkConfigureTizen, taskTargetLaunchTizen, taskTargetListTizen } from '@rnv/sdk-tizen'; //@ts-ignore import CNF from '../renative.engine.json'; import taskBuild from './tasks/taskBuild'; @@ -6,7 +8,17 @@ import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure]), + tasks: generateEngineTasks([ + taskRun, + taskBuild, + taskConfigure, + taskTargetLaunchTizen, + taskTargetListTizen, + taskSdkConfigureTizen, + taskTargetLaunchWebOS, + taskTargetListWebOS, + taskSdkConfigureWebOS, + ]), config: CNF, projectDirName: 'project', serverDirName: 'server', diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 3ab04fa7ed..5af4ce6704 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,4 +1,6 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { taskTargetLaunchAndroid, taskSdkConfigureAndroid, taskTargetListAndroid } from '@rnv/sdk-android'; +import { taskTargetLaunchApple, taskTargetListApple } from '@rnv/sdk-apple'; import taskRun from './tasks/taskRun'; import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; @@ -29,6 +31,11 @@ const Engine: RnvEngine = { taskCryptoUpdateProfiles, taskCryptoInstallProfiles, taskLog, + taskTargetLaunchAndroid, + taskTargetLaunchApple, + taskTargetListAndroid, + taskTargetListApple, + taskSdkConfigureAndroid, ]), config: CNF, runtimeExtraProps: { diff --git a/packages/engine-rn-web/src/index.ts b/packages/engine-rn-web/src/index.ts index 62e06c5b11..139972c1bd 100644 --- a/packages/engine-rn-web/src/index.ts +++ b/packages/engine-rn-web/src/index.ts @@ -1,4 +1,6 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { taskTargetLaunchWebOS, taskTargetListWebOS, taskSdkConfigureWebOS } from '@rnv/sdk-webos'; +import { taskSdkConfigureTizen, taskTargetLaunchTizen, taskTargetListTizen } from '@rnv/sdk-tizen'; import { withRNVBabel, withRNVWebpack } from './adapter'; //@ts-ignore import CNF from '../renative.engine.json'; @@ -9,7 +11,19 @@ import taskStart from './tasks/taskStart'; import taskDebug from './tasks/taskDebug'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskDebug]), + tasks: generateEngineTasks([ + taskRun, + taskBuild, + taskConfigure, + taskStart, + taskDebug, + taskTargetLaunchTizen, + taskTargetListTizen, + taskSdkConfigureTizen, + taskTargetLaunchWebOS, + taskTargetListWebOS, + taskSdkConfigureWebOS, + ]), config: CNF, projectDirName: '', serverDirName: '', diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index 1bc152718d..a4f8e047a8 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -17,7 +17,9 @@ import taskLog from './tasks/taskLog'; import taskEject from './tasks/taskEject'; import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; -import { taskTargetLaunch } from '@rnv/sdk-android'; +import { taskTargetLaunchAndroid, taskSdkConfigureAndroid, taskTargetListAndroid } from '@rnv/sdk-android'; +import { taskTargetLaunchApple, taskTargetListApple } from '@rnv/sdk-apple'; + const Engine: RnvEngine = { tasks: generateEngineTasks([ taskRun, @@ -32,7 +34,11 @@ const Engine: RnvEngine = { taskCryptoUpdateProfiles, taskCryptoInstallProfiles, taskLog, - taskTargetLaunch, + taskTargetLaunchAndroid, + taskTargetLaunchApple, + taskTargetListAndroid, + taskTargetListApple, + taskSdkConfigureAndroid, ]), config: CNF, runtimeExtraProps: { diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index 47d4ee197c..afab2b1225 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -3,6 +3,6 @@ export * from './deviceManager'; export * from './constants'; export * from './installer'; export * from './jetifier'; -export * from './tasks/taskTargetLaunch'; -export * from './tasks/taskTargetList'; -export * from './tasks/taskSdkConfigure'; +export { default as taskTargetLaunchAndroid } from './tasks/taskTargetLaunch'; +export { default as taskTargetListAndroid } from './tasks/taskTargetList'; +export { default as taskSdkConfigureAndroid } from './tasks/taskSdkConfigure'; diff --git a/packages/sdk-android/src/tasks/taskTargetLaunch.ts b/packages/sdk-android/src/tasks/taskTargetLaunch.ts index a17598cc4b..56d08ab9eb 100644 --- a/packages/sdk-android/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-android/src/tasks/taskTargetLaunch.ts @@ -1,17 +1,9 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { launchAndroidSimulator } from '../deviceManager'; -const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); await isPlatformSupported(true); @@ -26,10 +18,10 @@ const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Launch specific target', - fn: taskTargetLaunch, + fn, task: RnvTaskName.targetLaunch, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['android', 'androidtv', 'androidwear', 'firetv'], isGlobalScope: true, }; diff --git a/packages/sdk-android/src/tasks/taskTargetList.ts b/packages/sdk-android/src/tasks/taskTargetList.ts index 7a1a691541..ad245f074d 100644 --- a/packages/sdk-android/src/tasks/taskTargetList.ts +++ b/packages/sdk-android/src/tasks/taskTargetList.ts @@ -1,12 +1,4 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAndroidTargets } from '../deviceManager'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; @@ -25,8 +17,8 @@ const Task: RnvTask = { description: 'List all available targets for specific platform', fn: taskTargetList, task: RnvTaskName.targetList, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['android', 'androidtv', 'androidwear', 'firetv'], isGlobalScope: true, }; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index 27a8fd67bd..a8d0f8b6a4 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -2,5 +2,5 @@ export * from './deviceManager'; export * from './runner'; export * from './ejector'; export * from './fastlane'; -export * from './tasks/taskTargetLaunch'; -export * from './tasks/taskTargetList'; +export { default as taskTargetLaunchApple } from './tasks/taskTargetLaunch'; +export { default as taskTargetListApple } from './tasks/taskTargetList'; diff --git a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts index a6b9535984..d873b3d2a2 100644 --- a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts @@ -1,16 +1,8 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchAppleSimulator } from '../deviceManager'; -const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); await isPlatformSupported(true); @@ -23,10 +15,10 @@ const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Launch specific ios target', - fn: taskTargetLaunch, + fn, task: RnvTaskName.targetLaunch, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['ios', 'macos', 'tvos'], isGlobalScope: true, }; diff --git a/packages/sdk-apple/src/tasks/taskTargetList.ts b/packages/sdk-apple/src/tasks/taskTargetList.ts index d850a29ff4..0e6498683a 100644 --- a/packages/sdk-apple/src/tasks/taskTargetList.ts +++ b/packages/sdk-apple/src/tasks/taskTargetList.ts @@ -1,15 +1,7 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAppleDevices } from '../deviceManager'; -const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetList'); await isPlatformSupported(true); @@ -19,10 +11,10 @@ const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'List all available targets for specific platform', - fn: taskTargetList, + fn, task: RnvTaskName.targetList, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['ios', 'macos', 'tvos'], isGlobalScope: true, //TODO: evaluate this after moving to SDK }; diff --git a/packages/sdk-kaios/src/index.ts b/packages/sdk-kaios/src/index.ts index 99149d9380..fd78242f8a 100644 --- a/packages/sdk-kaios/src/index.ts +++ b/packages/sdk-kaios/src/index.ts @@ -1,4 +1,4 @@ export * from './deviceManager'; export * from './runner'; export * from './constants'; -export * from './tasks/taskTargetLaunch'; +export { default as taskTargetLaunchKaiOS } from './tasks/taskTargetLaunch'; diff --git a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts index aaced239b6..df7cc6373e 100644 --- a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts @@ -1,12 +1,4 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchKaiOSSimulator } from '../deviceManager'; @@ -25,8 +17,8 @@ const Task: RnvTask = { description: 'Launch specific target', fn: taskTargetLaunch, task: RnvTaskName.targetLaunch, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['kaios'], isGlobalScope: true, }; diff --git a/packages/sdk-tizen/src/index.ts b/packages/sdk-tizen/src/index.ts index 9ac27174e9..72fafc6325 100644 --- a/packages/sdk-tizen/src/index.ts +++ b/packages/sdk-tizen/src/index.ts @@ -2,6 +2,6 @@ export * from './deviceManager'; export * from './installer'; export * from './runner'; export * from './constants'; -export * from './tasks/taskTargetLaunch'; -export * from './tasks/taskTargetList'; -export * from './tasks/taskSdkConfigure'; +export { default as taskTargetLaunchTizen } from './tasks/taskTargetLaunch'; +export { default as taskTargetListTizen } from './tasks/taskTargetList'; +export { default as taskSdkConfigureTizen } from './tasks/taskSdkConfigure'; diff --git a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts index 6a19c5fd6b..a357d1be5c 100644 --- a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts @@ -14,7 +14,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.sdkConfigure, options: [], - platforms: null, + platforms: ['tizen', 'tizenwatch', 'tizenmobile'], }; export default Task; diff --git a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts index e1414d2614..91b0574d5e 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts @@ -1,12 +1,4 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { launchTizenSimulator } from '../deviceManager'; @@ -28,8 +20,8 @@ const Task: RnvTask = { description: 'Launch specific target', fn: taskTargetLaunch, task: RnvTaskName.targetLaunch, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['tizen', 'tizenwatch', 'tizenmobile'], isGlobalScope: true, }; diff --git a/packages/sdk-tizen/src/tasks/taskTargetList.ts b/packages/sdk-tizen/src/tasks/taskTargetList.ts index fab16a7321..b7a622162e 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetList.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetList.ts @@ -1,12 +1,4 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { listTizenTargets } from '../deviceManager'; @@ -25,8 +17,8 @@ const Task: RnvTask = { description: 'List all available targets for specific platform', fn: taskTargetList, task: RnvTaskName.targetList, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['tizen', 'tizenwatch', 'tizenmobile'], isGlobalScope: true, }; diff --git a/packages/sdk-webos/src/index.ts b/packages/sdk-webos/src/index.ts index 9ac27174e9..75392446bb 100644 --- a/packages/sdk-webos/src/index.ts +++ b/packages/sdk-webos/src/index.ts @@ -2,6 +2,6 @@ export * from './deviceManager'; export * from './installer'; export * from './runner'; export * from './constants'; -export * from './tasks/taskTargetLaunch'; -export * from './tasks/taskTargetList'; -export * from './tasks/taskSdkConfigure'; +export { default as taskTargetLaunchWebOS } from './tasks/taskTargetLaunch'; +export { default as taskTargetListWebOS } from './tasks/taskTargetList'; +export { default as taskSdkConfigureWebOS } from './tasks/taskSdkConfigure'; diff --git a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts index b6dea4e438..36cd35f0a5 100644 --- a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts @@ -14,7 +14,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.sdkConfigure, options: [], - platforms: null, + platforms: ['webos'], }; export default Task; diff --git a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts index ba14b56b93..1228b611ae 100644 --- a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts @@ -1,17 +1,9 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { launchWebOSimulator } from '../deviceManager'; -const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); await isPlatformSupported(true); @@ -26,10 +18,10 @@ const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Launch specific target', - fn: taskTargetLaunch, + fn, task: RnvTaskName.targetLaunch, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['webos'], isGlobalScope: true, }; diff --git a/packages/sdk-webos/src/tasks/taskTargetList.ts b/packages/sdk-webos/src/tasks/taskTargetList.ts index 3f43680c68..60030d4f7e 100644 --- a/packages/sdk-webos/src/tasks/taskTargetList.ts +++ b/packages/sdk-webos/src/tasks/taskTargetList.ts @@ -1,16 +1,8 @@ -import { - isPlatformSupported, - logTask, - RnvTaskOptionPresets, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { listWebOSTargets } from '../deviceManager'; -const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetList'); await isPlatformSupported(true); @@ -23,10 +15,10 @@ const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'List all available targets for specific platform', - fn: taskTargetList, + fn, task: RnvTaskName.targetList, - options: RnvTaskOptionPresets.withBase(), - platforms: null, + options: [RnvTaskOptions.target], + platforms: ['webos'], isGlobalScope: true, }; From 42e5f239760ce609480fdb896fa3671dfd3c28e2 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 23 Mar 2024 10:27:40 +0100 Subject: [PATCH 085/175] migrate ios profile tasks to sdk-apple --- packages/engine-lightning/src/index.ts | 16 +---- packages/engine-rn-tvos/src/index.ts | 20 ++---- .../src/tasks/taskCryptoInstallCerts.ts | 48 --------------- packages/engine-rn-web/src/index.ts | 18 +----- packages/engine-rn/src/index.ts | 24 ++------ .../src/tasks/taskCryptoInstallProfiles.ts | 61 ------------------- .../src/tasks/taskCryptoUpdateProfile.ts | 23 ------- .../src/tasks/taskCryptoUpdateProfiles.ts | 56 ----------------- packages/sdk-android/src/index.ts | 8 ++- packages/sdk-apple/src/index.ts | 17 +++++- .../src/tasks/taskCryptoInstallCerts.ts | 22 +++---- .../src/tasks/taskCryptoInstallProfiles.ts | 11 +--- .../src/tasks/taskCryptoUpdateProfile.ts | 9 ++- .../src/tasks/taskCryptoUpdateProfiles.ts | 20 +++--- packages/sdk-kaios/src/index.ts | 5 +- packages/sdk-tizen/src/index.ts | 9 ++- packages/sdk-webos/src/index.ts | 8 ++- 17 files changed, 74 insertions(+), 301 deletions(-) delete mode 100644 packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts delete mode 100644 packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts delete mode 100644 packages/engine-rn/src/tasks/taskCryptoUpdateProfile.ts delete mode 100644 packages/engine-rn/src/tasks/taskCryptoUpdateProfiles.ts rename packages/{engine-rn => sdk-apple}/src/tasks/taskCryptoInstallCerts.ts (76%) rename packages/{engine-rn-tvos => sdk-apple}/src/tasks/taskCryptoInstallProfiles.ts (82%) rename packages/{engine-rn-tvos => sdk-apple}/src/tasks/taskCryptoUpdateProfile.ts (72%) rename packages/{engine-rn-tvos => sdk-apple}/src/tasks/taskCryptoUpdateProfiles.ts (71%) diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index 3513601680..22c618a4d2 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -1,6 +1,6 @@ import { RnvEngine, generateEngineTasks, generateEngineExtensions } from '@rnv/core'; -import { taskTargetLaunchWebOS, taskTargetListWebOS, taskSdkConfigureWebOS } from '@rnv/sdk-webos'; -import { taskSdkConfigureTizen, taskTargetLaunchTizen, taskTargetListTizen } from '@rnv/sdk-tizen'; +import { Tasks as TasksWebOS } from '@rnv/sdk-webos'; +import { Tasks as TasksTizen } from '@rnv/sdk-tizen'; //@ts-ignore import CNF from '../renative.engine.json'; import taskBuild from './tasks/taskBuild'; @@ -8,17 +8,7 @@ import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; const Engine: RnvEngine = { - tasks: generateEngineTasks([ - taskRun, - taskBuild, - taskConfigure, - taskTargetLaunchTizen, - taskTargetListTizen, - taskSdkConfigureTizen, - taskTargetLaunchWebOS, - taskTargetListWebOS, - taskSdkConfigureWebOS, - ]), + tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, ...TasksWebOS, ...TasksTizen]), config: CNF, projectDirName: 'project', serverDirName: 'server', diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 5af4ce6704..1878cfe9ad 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,16 +1,13 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; -import { taskTargetLaunchAndroid, taskSdkConfigureAndroid, taskTargetListAndroid } from '@rnv/sdk-android'; -import { taskTargetLaunchApple, taskTargetListApple } from '@rnv/sdk-apple'; +import { Tasks as TasksAndroid } from '@rnv/sdk-android'; +import { Tasks as TasksApple } from '@rnv/sdk-apple'; import taskRun from './tasks/taskRun'; import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskExport from './tasks/taskExport'; -import taskCryptoInstallCerts from './tasks/taskCryptoInstallCerts'; -import taskCryptoUpdateProfile from './tasks/taskCryptoUpdateProfile'; -import taskCryptoUpdateProfiles from './tasks/taskCryptoUpdateProfiles'; -import taskCryptoInstallProfiles from './tasks/taskCryptoInstallProfiles'; + import taskLog from './tasks/taskLog'; //@ts-ignore import CNF from '../renative.engine.json'; @@ -26,16 +23,9 @@ const Engine: RnvEngine = { taskConfigure, taskStart, taskExport, - taskCryptoInstallCerts, - taskCryptoUpdateProfile, - taskCryptoUpdateProfiles, - taskCryptoInstallProfiles, taskLog, - taskTargetLaunchAndroid, - taskTargetLaunchApple, - taskTargetListAndroid, - taskTargetListApple, - taskSdkConfigureAndroid, + ...TasksAndroid, + ...TasksApple, ]), config: CNF, runtimeExtraProps: { diff --git a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts b/packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts deleted file mode 100644 index 1441474f8b..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallCerts.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - RnvTaskFn, - logWarning, - logError, - logTask, - getFileListSync, - executeAsync, - executeTask, - shouldSkipTask, - RnvTaskOptionPresets, - RnvTask, - RnvTaskName, -} from '@rnv/core'; - -const taskCryptoInstallCerts: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoInstallCerts'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoInstallCerts, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoInstallCerts, originTask)) return true; - - if (c.platform !== 'tvos') { - logError(`_installTempCerts: platform ${c.platform} not supported`); - return true; - } - const kChain = c.program.keychain || 'ios-build.keychain'; - - const list = getFileListSync(c.paths.workspace.project.dir); - const cerArr = list.filter((v) => v.endsWith('.cer')); - - try { - Promise.all(cerArr.map((v) => executeAsync(`security import ${v} -k ${kChain} -A`))); - } catch (e) { - logWarning(e); - return true; - } -}; - -const Task: RnvTask = { - description: 'Installs certificates into keychain (mac only)', - fn: taskCryptoInstallCerts, - task: RnvTaskName.cryptoInstallCerts, - options: RnvTaskOptionPresets.withBase(), - platforms: null, - // skipPlatforms: true, -}; - -export default Task; diff --git a/packages/engine-rn-web/src/index.ts b/packages/engine-rn-web/src/index.ts index 139972c1bd..b01b4dcd6e 100644 --- a/packages/engine-rn-web/src/index.ts +++ b/packages/engine-rn-web/src/index.ts @@ -1,6 +1,6 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; -import { taskTargetLaunchWebOS, taskTargetListWebOS, taskSdkConfigureWebOS } from '@rnv/sdk-webos'; -import { taskSdkConfigureTizen, taskTargetLaunchTizen, taskTargetListTizen } from '@rnv/sdk-tizen'; +import { Tasks as TasksWebOS } from '@rnv/sdk-webos'; +import { Tasks as TasksTizen } from '@rnv/sdk-tizen'; import { withRNVBabel, withRNVWebpack } from './adapter'; //@ts-ignore import CNF from '../renative.engine.json'; @@ -11,19 +11,7 @@ import taskStart from './tasks/taskStart'; import taskDebug from './tasks/taskDebug'; const Engine: RnvEngine = { - tasks: generateEngineTasks([ - taskRun, - taskBuild, - taskConfigure, - taskStart, - taskDebug, - taskTargetLaunchTizen, - taskTargetListTizen, - taskSdkConfigureTizen, - taskTargetLaunchWebOS, - taskTargetListWebOS, - taskSdkConfigureWebOS, - ]), + tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskDebug, ...TasksWebOS, ...TasksTizen]), config: CNF, projectDirName: '', serverDirName: '', diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index a4f8e047a8..1e3726dacf 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -1,6 +1,9 @@ +import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { withRNVRNConfig } from '@rnv/sdk-react-native'; +import { Tasks as TasksAndroid } from '@rnv/sdk-android'; +import { Tasks as TasksApple } from '@rnv/sdk-apple'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; - //@ts-ignore import CNF from '../renative.engine.json'; import taskRun from './tasks/taskRun'; @@ -9,16 +12,8 @@ import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskExport from './tasks/taskExport'; -import taskCryptoInstallCerts from './tasks/taskCryptoInstallCerts'; -import taskCryptoUpdateProfile from './tasks/taskCryptoUpdateProfile'; -import taskCryptoUpdateProfiles from './tasks/taskCryptoUpdateProfiles'; -import taskCryptoInstallProfiles from './tasks/taskCryptoInstallProfiles'; import taskLog from './tasks/taskLog'; import taskEject from './tasks/taskEject'; -import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; -import { withRNVRNConfig } from '@rnv/sdk-react-native'; -import { taskTargetLaunchAndroid, taskSdkConfigureAndroid, taskTargetListAndroid } from '@rnv/sdk-android'; -import { taskTargetLaunchApple, taskTargetListApple } from '@rnv/sdk-apple'; const Engine: RnvEngine = { tasks: generateEngineTasks([ @@ -29,16 +24,9 @@ const Engine: RnvEngine = { taskStart, taskExport, taskEject, - taskCryptoInstallCerts, - taskCryptoUpdateProfile, - taskCryptoUpdateProfiles, - taskCryptoInstallProfiles, taskLog, - taskTargetLaunchAndroid, - taskTargetLaunchApple, - taskTargetListAndroid, - taskTargetListApple, - taskSdkConfigureAndroid, + ...TasksAndroid, + ...TasksApple, ]), config: CNF, runtimeExtraProps: { diff --git a/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts b/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts deleted file mode 100644 index c1eff0a7c9..0000000000 --- a/packages/engine-rn/src/tasks/taskCryptoInstallProfiles.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { copyFileSync, mkdirSync } from 'fs'; -import path from 'path'; -import { - logTask, - RnvTaskFn, - executeTask, - shouldSkipTask, - logError, - fsExistsSync, - logWarning, - getFileListSync, - logDebug, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; - -const taskCryptoInstallProfiles: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoInstallProfiles'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoInstallProfiles, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoInstallProfiles, originTask)) return true; - - if (c.platform !== 'ios') { - logError(`taskCryptoInstallProfiles: platform ${c.platform} not supported`); - return true; - } - - const ppFolder = path.join(c.paths.user.homeDir, 'Library/MobileDevice/Provisioning Profiles'); - - if (!fsExistsSync(ppFolder)) { - logWarning(`folder ${ppFolder} does not exist!`); - mkdirSync(ppFolder); - } - - const list = getFileListSync(c.paths.workspace.project.dir); - const mobileprovisionArr = list.filter((v) => v.endsWith('.mobileprovision')); - - try { - mobileprovisionArr.forEach((v) => { - logDebug(`taskCryptoInstallProfiles: Installing: ${v}`); - copyFileSync(v, ppFolder); - }); - } catch (e) { - logError(e); - } - - return true; -}; - -const Task: RnvTask = { - description: 'Installs provisioning certificates found in your workspace (mac only)', - fn: taskCryptoInstallProfiles, - task: RnvTaskName.cryptoInstallProfiles, - options: RnvTaskOptionPresets.withBase(), - platforms: null, - // skipPlatforms: true, -}; - -export default Task; diff --git a/packages/engine-rn/src/tasks/taskCryptoUpdateProfile.ts b/packages/engine-rn/src/tasks/taskCryptoUpdateProfile.ts deleted file mode 100644 index 2903e14182..0000000000 --- a/packages/engine-rn/src/tasks/taskCryptoUpdateProfile.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { logTask, RnvTaskFn, executeTask, shouldSkipTask, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; -import { updateProfile } from '@rnv/sdk-apple'; - -const taskCryptoUpdateProfile: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoUpdateProfile'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoUpdateProfile, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoUpdateProfile, originTask)) return true; - - await updateProfile(); -}; - -const Task: RnvTask = { - description: 'Update provisioning profile (mac only)', - fn: taskCryptoUpdateProfile, - task: RnvTaskName.cryptoUpdateProfile, - options: RnvTaskOptionPresets.withBase(), - platforms: ['ios'], - // skipPlatforms: true, -}; - -export default Task; diff --git a/packages/engine-rn/src/tasks/taskCryptoUpdateProfiles.ts b/packages/engine-rn/src/tasks/taskCryptoUpdateProfiles.ts deleted file mode 100644 index 7e49fb907a..0000000000 --- a/packages/engine-rn/src/tasks/taskCryptoUpdateProfiles.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - logTask, - RnvTaskFn, - executeTask, - shouldSkipTask, - chalk, - RnvContext, - listAppConfigsFoldersSync, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { updateProfile } from '@rnv/sdk-apple'; - -const _updateProfile = (c: RnvContext, v: string) => - new Promise((resolve, reject) => { - logTask(`_updateProfile:${v}`, chalk().grey); - updateProfile() - .then(() => resolve()) - .catch((e) => reject(e)); - }); - -const _updateProfiles = (c: RnvContext) => { - logTask('_updateProfiles', chalk().grey); - const acList = listAppConfigsFoldersSync(true); - - return acList.reduce((previousPromise, v) => previousPromise.then(() => _updateProfile(c, v)), Promise.resolve()); -}; - -const taskCryptoUpdateProfiles: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoUpdateProfiles'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoUpdateProfiles, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoUpdateProfiles, originTask)) return true; - - switch (c.platform) { - case 'ios': - await _updateProfiles(c); - break; - default: - return true; - } - return Promise.reject(`updateProfiles: Platform ${c.platform} not supported`); -}; - -const Task: RnvTask = { - description: 'Will attempt to update all provisioning profiles (mac only)', - fn: taskCryptoUpdateProfiles, - task: RnvTaskName.cryptoUpdateProfiles, - options: RnvTaskOptionPresets.withBase(), - platforms: ['ios'], - // skipPlatforms: true, -}; - -export default Task; diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index afab2b1225..9aead6476b 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -3,6 +3,8 @@ export * from './deviceManager'; export * from './constants'; export * from './installer'; export * from './jetifier'; -export { default as taskTargetLaunchAndroid } from './tasks/taskTargetLaunch'; -export { default as taskTargetListAndroid } from './tasks/taskTargetList'; -export { default as taskSdkConfigureAndroid } from './tasks/taskSdkConfigure'; +import taskTargetLaunch from './tasks/taskTargetLaunch'; +import taskTargetList from './tasks/taskTargetList'; +import taskSdkConfigure from './tasks/taskSdkConfigure'; + +export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure]; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index a8d0f8b6a4..9189356b12 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -2,5 +2,18 @@ export * from './deviceManager'; export * from './runner'; export * from './ejector'; export * from './fastlane'; -export { default as taskTargetLaunchApple } from './tasks/taskTargetLaunch'; -export { default as taskTargetListApple } from './tasks/taskTargetList'; +import taskTargetLaunch from './tasks/taskTargetLaunch'; +import taskTargetList from './tasks/taskTargetList'; +import taskCryptoInstallCerts from './tasks/taskCryptoInstallCerts'; +import taskCryptoUpdateProfile from './tasks/taskCryptoUpdateProfile'; +import taskCryptoUpdateProfiles from './tasks/taskCryptoUpdateProfiles'; +import taskCryptoInstallProfiles from './tasks/taskCryptoInstallProfiles'; + +export const Tasks = [ + taskTargetLaunch, + taskTargetList, + taskCryptoInstallCerts, + taskCryptoUpdateProfile, + taskCryptoUpdateProfiles, + taskCryptoInstallProfiles, +]; diff --git a/packages/engine-rn/src/tasks/taskCryptoInstallCerts.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts similarity index 76% rename from packages/engine-rn/src/tasks/taskCryptoInstallCerts.ts rename to packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts index e1e5891b94..2eb1b3a276 100644 --- a/packages/engine-rn/src/tasks/taskCryptoInstallCerts.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts @@ -1,28 +1,23 @@ import { - logTask, RnvTaskFn, + logWarning, + logTask, + getFileListSync, + executeAsync, executeTask, shouldSkipTask, - executeAsync, - logError, - getFileListSync, - logWarning, + RnvTaskOptionPresets, RnvTask, RnvTaskName, - RnvTaskOptionPresets, } from '@rnv/core'; -const taskCryptoInstallCerts: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskCryptoInstallCerts'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoInstallCerts, originTask); if (shouldSkipTask(RnvTaskName.cryptoInstallCerts, originTask)) return true; - if (c.platform !== 'ios') { - logError(`_installTempCerts: platform ${c.platform} not supported`); - return true; - } const kChain = c.program.keychain || 'ios-build.keychain'; const list = getFileListSync(c.paths.workspace.project.dir); @@ -38,11 +33,10 @@ const taskCryptoInstallCerts: RnvTaskFn = async (c, _parentTask, originTask) => const Task: RnvTask = { description: 'Installs certificates into keychain (mac only)', - fn: taskCryptoInstallCerts, + fn, task: RnvTaskName.cryptoInstallCerts, options: RnvTaskOptionPresets.withBase(), - platforms: null, - // skipPlatforms: true, + platforms: ['ios', 'macos', 'tvos'], }; export default Task; diff --git a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts similarity index 82% rename from packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts rename to packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts index 314233863a..7b650dd72b 100644 --- a/packages/engine-rn-tvos/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts @@ -16,18 +16,13 @@ import { RnvTaskName, } from '@rnv/core'; -const taskCryptoInstallProfiles: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskCryptoInstallProfiles'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoInstallProfiles, originTask); if (shouldSkipTask(RnvTaskName.cryptoInstallProfiles, originTask)) return true; - if (c.platform !== 'tvos') { - logError(`taskCryptoInstallProfiles: platform ${c.platform} not supported`); - return true; - } - const ppFolder = path.join(c.paths.user.homeDir, 'Library/MobileDevice/Provisioning Profiles'); if (!fsExistsSync(ppFolder)) { @@ -52,10 +47,10 @@ const taskCryptoInstallProfiles: RnvTaskFn = async (c, _parentTask, originTask) const Task: RnvTask = { description: 'Installs provisioning certificates found in your workspace (mac only)', - fn: taskCryptoInstallProfiles, + fn, task: RnvTaskName.cryptoInstallProfiles, options: RnvTaskOptionPresets.withBase(), - platforms: null, + platforms: ['ios', 'macos', 'tvos'], // skipPlatforms: true, }; diff --git a/packages/engine-rn-tvos/src/tasks/taskCryptoUpdateProfile.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts similarity index 72% rename from packages/engine-rn-tvos/src/tasks/taskCryptoUpdateProfile.ts rename to packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts index 58afdc544a..f0db627577 100644 --- a/packages/engine-rn-tvos/src/tasks/taskCryptoUpdateProfile.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts @@ -1,7 +1,7 @@ import { RnvTaskFn, executeTask, shouldSkipTask, logTask, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; -import { updateProfile } from '@rnv/sdk-apple'; +import { updateProfile } from '../fastlane'; -const taskCryptoUpdateProfile: RnvTaskFn = async (_c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { logTask('taskCryptoUpdateProfile'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoUpdateProfile, originTask); @@ -13,11 +13,10 @@ const taskCryptoUpdateProfile: RnvTaskFn = async (_c, _parentTask, originTask) = const Task: RnvTask = { description: 'Update provisioning profile (mac only)', - fn: taskCryptoUpdateProfile, + fn, task: RnvTaskName.cryptoUpdateProfile, options: RnvTaskOptionPresets.withBase(), - platforms: ['tvos'], - // skipPlatforms: true, + platforms: ['ios', 'macos', 'tvos'], }; export default Task; diff --git a/packages/engine-rn-tvos/src/tasks/taskCryptoUpdateProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts similarity index 71% rename from packages/engine-rn-tvos/src/tasks/taskCryptoUpdateProfiles.ts rename to packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts index d0186ff767..c865b4aad1 100644 --- a/packages/engine-rn-tvos/src/tasks/taskCryptoUpdateProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts @@ -9,7 +9,7 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { updateProfile } from '@rnv/sdk-apple'; +import { updateProfile } from '../fastlane'; const _updateProfile = (v: string) => new Promise((resolve, reject) => { @@ -26,30 +26,24 @@ const _updateProfiles = () => { return acList.reduce((previousPromise, v) => previousPromise.then(() => _updateProfile(v)), Promise.resolve()); }; -const taskCryptoUpdateProfiles: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskCryptoUpdateProfiles'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoUpdateProfiles, originTask); if (shouldSkipTask(RnvTaskName.cryptoUpdateProfiles, originTask)) return true; - switch (c.platform) { - case 'tvos': - await _updateProfiles(); - break; - default: - return true; - } - return Promise.reject(`updateProfiles: Platform ${c.platform} not supported`); + _updateProfiles(); + + return true; }; const Task: RnvTask = { description: 'Will attempt to update all provisioning profiles (mac only)', - fn: taskCryptoUpdateProfiles, + fn, task: RnvTaskName.cryptoUpdateProfiles, options: RnvTaskOptionPresets.withBase(), - platforms: ['tvos'], - // skipPlatforms: true, + platforms: ['ios', 'macos', 'tvos'], }; export default Task; diff --git a/packages/sdk-kaios/src/index.ts b/packages/sdk-kaios/src/index.ts index fd78242f8a..9fe276c2a3 100644 --- a/packages/sdk-kaios/src/index.ts +++ b/packages/sdk-kaios/src/index.ts @@ -1,4 +1,7 @@ export * from './deviceManager'; export * from './runner'; export * from './constants'; -export { default as taskTargetLaunchKaiOS } from './tasks/taskTargetLaunch'; + +import taskTargetLaunch from './tasks/taskTargetLaunch'; + +export const Tasks = [taskTargetLaunch]; diff --git a/packages/sdk-tizen/src/index.ts b/packages/sdk-tizen/src/index.ts index 72fafc6325..10cdc562c2 100644 --- a/packages/sdk-tizen/src/index.ts +++ b/packages/sdk-tizen/src/index.ts @@ -2,6 +2,9 @@ export * from './deviceManager'; export * from './installer'; export * from './runner'; export * from './constants'; -export { default as taskTargetLaunchTizen } from './tasks/taskTargetLaunch'; -export { default as taskTargetListTizen } from './tasks/taskTargetList'; -export { default as taskSdkConfigureTizen } from './tasks/taskSdkConfigure'; + +import taskTargetLaunch from './tasks/taskTargetLaunch'; +import taskTargetList from './tasks/taskTargetList'; +import taskSdkConfigure from './tasks/taskSdkConfigure'; + +export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure]; diff --git a/packages/sdk-webos/src/index.ts b/packages/sdk-webos/src/index.ts index 75392446bb..8f27474a5a 100644 --- a/packages/sdk-webos/src/index.ts +++ b/packages/sdk-webos/src/index.ts @@ -2,6 +2,8 @@ export * from './deviceManager'; export * from './installer'; export * from './runner'; export * from './constants'; -export { default as taskTargetLaunchWebOS } from './tasks/taskTargetLaunch'; -export { default as taskTargetListWebOS } from './tasks/taskTargetList'; -export { default as taskSdkConfigureWebOS } from './tasks/taskSdkConfigure'; +import taskTargetLaunch from './tasks/taskTargetLaunch'; +import taskTargetList from './tasks/taskTargetList'; +import taskSdkConfigure from './tasks/taskSdkConfigure'; + +export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure]; From 27493df7f2a77d547bcda1612783fe54083a56f9 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 23 Mar 2024 10:45:46 +0100 Subject: [PATCH 086/175] categorize task options --- packages/core/src/tasks/constants.ts | 184 ++++++++++++++------------- 1 file changed, 96 insertions(+), 88 deletions(-) diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 026a16577a..f8981f3d27 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -11,6 +11,7 @@ export const DEFAULT_TASK_DESCRIPTIONS: Record = { }; const _RnvTaskOptions = { + // CORE -------------------------------- help: { shortcut: 'h', description: 'Displays help info for particular command', @@ -23,25 +24,111 @@ const _RnvTaskOptions = { printExec: { description: 'Print exec commands in full', }, - updatePods: { - shortcut: 'u', - description: 'Force update dependencies (iOS only)', - }, platform: { shortcut: 'p', isValueType: true, description: 'select specific Platform', }, + skipTasks: { + isValueType: true, + isRequired: true, + description: 'List tasks which you want to skip during rnv execution', + examples: ['--skipTasks "configure,export"', '--skipTasks deploy'], + }, + only: { + shortcut: 'o', + description: 'run Only top command (Skip dependencies)', + }, + ci: { + description: 'CI/CD flag so it wont ask questions', + }, + mono: { + description: 'Monochrome console output without chalk', + }, + maxErrorLength: { + isValueType: true, + isRequired: true, + description: 'Specify how many characters each error should display. Default 200', + }, + json: { + description: 'Outputs the result as json', + }, + yes: { + description: 'Default all prompts to yes', + }, + telemetryDebug: { + description: 'If you have telemetry enabled, will print out exactly what is being collected into the console', + }, + // OTHERS 1st -------------------------------- appConfigID: { shortcut: 'c', isValueType: true, description: 'select specific app Config id', }, + skipRnvCheck: { + description: 'Skips auto update of rnv dependencies if mismatch found', + }, + updatePods: { + shortcut: 'u', + description: 'Force update dependencies (iOS only)', + }, + scheme: { + shortcut: 's', + isValueType: true, + description: 'select build Scheme', + }, + engine: { + shortcut: 'e', + isValueType: true, + isRequired: true, + description: 'engine to be used ie "engine-rn"', + }, + exeMethod: { + shortcut: 'x', + isValueType: true, + description: 'eXecutable method in buildHooks', + }, + reset: { + shortcut: 'r', + description: 'also perform reset of platform build', + }, + resetHard: { + shortcut: 'R', + description: 'also perform reset of platform platform and platform assets', + }, + resetAssets: { + shortcut: 'a', + description: 'also perform reset of platform assets', + }, target: { shortcut: 't', isValueType: true, description: 'select specific Target device/simulator', }, + host: { + shortcut: 'H', + isValueType: true, + isRequired: true, + description: 'custom Host ip', + }, + port: { + shortcut: 'P', + isValueType: true, + isRequired: true, + description: 'custom Port', + }, + device: { + shortcut: 'd', + isValueType: true, + description: 'select connected Device', + }, + hosted: { + description: 'Run in a hosted environment (skip budleAssets)', + }, + hooks: { + description: 'Force rebuild hooks', + }, + // OTHERS 2nd -------------------------------- projectName: { isValueType: true, description: 'select the name of the new project', @@ -76,16 +163,6 @@ const _RnvTaskOptions = { isRequired: true, description: 'select specific template', }, - device: { - shortcut: 'd', - isValueType: true, - description: 'select connected Device', - }, - scheme: { - shortcut: 's', - isValueType: true, - description: 'select build Scheme', - }, filter: { shortcut: 'f', isValueType: true, @@ -96,22 +173,7 @@ const _RnvTaskOptions = { shortcut: 'l', description: 'return List of items related to command', }, - only: { - shortcut: 'o', - description: 'run Only top command (Skip dependencies)', - }, - reset: { - shortcut: 'r', - description: 'also perform reset of platform build', - }, - resetHard: { - shortcut: 'R', - description: 'also perform reset of platform platform and platform assets', - }, - resetAssets: { - shortcut: 'a', - description: 'also perform reset of platform assets', - }, + key: { shortcut: 'k', isValueType: true, @@ -123,23 +185,6 @@ const _RnvTaskOptions = { isValueType: true, description: 'Blueprint for targets', }, - host: { - shortcut: 'H', - isValueType: true, - isRequired: true, - description: 'custom Host ip', - }, - exeMethod: { - shortcut: 'x', - isValueType: true, - description: 'eXecutable method in buildHooks', - }, - port: { - shortcut: 'P', - isValueType: true, - isRequired: true, - description: 'custom Port', - }, debug: { shortcut: 'D', isValueType: true, @@ -155,23 +200,11 @@ const _RnvTaskOptions = { shortcut: 'G', description: 'Flag for setting a config value for all RNV projects', }, - engine: { - shortcut: 'e', - isValueType: true, - isRequired: true, - description: 'engine to be used ie "engine-rn"', - }, debugIp: { isValueType: true, isRequired: true, description: '(optional) overwrite the ip to which the remote debugger will connect', }, - ci: { - description: 'CI/CD flag so it wont ask questions', - }, - mono: { - description: 'Monochrome console output without chalk', - }, skipNotifications: { description: 'Skip sending any integrated notifications', }, @@ -195,17 +228,7 @@ const _RnvTaskOptions = { isRequired: true, description: 'Name of provisionProfile', }, - hosted: { - description: 'Run in a hosted environment (skip budleAssets)', - }, - hooks: { - description: 'Force rebuild hooks', - }, - maxErrorLength: { - isValueType: true, - isRequired: true, - description: 'Specify how many characters each error should display. Default 200', - }, + skipTargetCheck: { description: 'Skip Android target check, just display the raw adb devices to choose from', }, @@ -230,9 +253,7 @@ const _RnvTaskOptions = { skipDependencyCheck: { description: 'Skips auto update of npm dependencies if mismatch found', }, - skipRnvCheck: { - description: 'Skips auto update of rnv dependencies if mismatch found', - }, + configName: { isValueType: true, isRequired: true, @@ -251,9 +272,7 @@ const _RnvTaskOptions = { unlinked: { description: 'Force engines to be loaded from node_modules rather than locally', }, - yes: { - description: 'Default all prompts to yes', - }, + gitEnabled: { description: 'Enable git in your newly created project', isValueType: true, @@ -261,9 +280,7 @@ const _RnvTaskOptions = { npxMode: { description: 'Ensures you can use local npx rnv version after the command is done', }, - json: { - description: 'Outputs the result as json', - }, + packageManager: { isValueType: true, isRequired: true, @@ -271,12 +288,6 @@ const _RnvTaskOptions = { description: 'Set specific package manager to use', examples: ['--packageManager yarn', '--packageManager npm'], }, - skipTasks: { - isValueType: true, - isRequired: true, - description: 'List tasks which you want to skip during rnv execution', - examples: ['--skipTasks "configure,export"', '--skipTasks deploy'], - }, answer: { isValueType: true, isVariadic: true, @@ -286,9 +297,6 @@ const _RnvTaskOptions = { resetAdb: { description: 'Forces to reset android adb', }, - telemetryDebug: { - description: 'If you have telemetry enabled, will print out exactly what is being collected into the console', - }, }; type ParamKeysType = typeof _RnvTaskOptions; From 566f6ca2ae0f36ca5590729cf7f15e144464425e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 23 Mar 2024 11:21:36 +0100 Subject: [PATCH 087/175] cleanup task options --- packages/core/src/tasks/constants.ts | 196 ++++++++++++++------------- 1 file changed, 101 insertions(+), 95 deletions(-) diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index f8981f3d27..d6c766d4f9 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -60,6 +60,33 @@ const _RnvTaskOptions = { description: 'If you have telemetry enabled, will print out exactly what is being collected into the console', }, // OTHERS 1st -------------------------------- + // Still present in core + packageManager: { + isValueType: true, + isRequired: true, + options: ['yarn', 'npm'], + description: 'Set specific package manager to use', + examples: ['--packageManager yarn', '--packageManager npm'], + }, + npxMode: { + description: 'Ensures you can use local npx rnv version after the command is done', + }, + unlinked: { + description: 'Force engines to be loaded from node_modules rather than locally', + }, + sourceAppConfigID: { + isValueType: true, + isRequired: true, + description: 'name of source appConfig folder to copy from', + }, + configName: { + isValueType: true, + isRequired: true, + description: 'Use custom name for ./renative.json. (applies only at root level)', + }, + skipDependencyCheck: { + description: 'Skips auto update of npm dependencies if mismatch found', + }, appConfigID: { shortcut: 'c', isValueType: true, @@ -68,10 +95,6 @@ const _RnvTaskOptions = { skipRnvCheck: { description: 'Skips auto update of rnv dependencies if mismatch found', }, - updatePods: { - shortcut: 'u', - description: 'Force update dependencies (iOS only)', - }, scheme: { shortcut: 's', isValueType: true, @@ -100,6 +123,16 @@ const _RnvTaskOptions = { shortcut: 'a', description: 'also perform reset of platform assets', }, + hooks: { + description: 'Force rebuild hooks', + }, + // OTHERS 2nd -------------------------------- + // Still present in core but ONLY in runtime defaults + hostIp: { + isValueType: true, + isRequired: true, + description: 'Custom IP override', + }, target: { shortcut: 't', isValueType: true, @@ -117,18 +150,30 @@ const _RnvTaskOptions = { isRequired: true, description: 'custom Port', }, - device: { - shortcut: 'd', - isValueType: true, - description: 'select connected Device', - }, hosted: { description: 'Run in a hosted environment (skip budleAssets)', }, - hooks: { - description: 'Force rebuild hooks', + // ENGINE-CORE -------------------------------- + gitEnabled: { + description: 'Enable git in your newly created project', + isValueType: true, + }, + answer: { + isValueType: true, + isVariadic: true, + description: 'Pass in answers to prompts', + examples: ['--answer question=response question2=response2', '--answer question=\'{"some": "json"}\''], + }, + workspace: { + isValueType: true, + description: 'select the workspace for the new project', + }, + template: { + shortcut: 'T', + isValueType: true, + isRequired: true, + description: 'select specific template', }, - // OTHERS 2nd -------------------------------- projectName: { isValueType: true, description: 'select the name of the new project', @@ -145,45 +190,26 @@ const _RnvTaskOptions = { isValueType: true, description: 'select the title of the app', }, - id: { - isValueType: true, - description: 'select the id of the app', - }, appVersion: { isValueType: true, description: 'select the version of the app', }, - workspace: { - isValueType: true, - description: 'select the workspace for the new project', - }, - template: { - shortcut: 'T', - isValueType: true, - isRequired: true, - description: 'select specific template', - }, - filter: { - shortcut: 'f', + id: { isValueType: true, - isRequired: true, - description: 'Filter value', - }, - list: { - shortcut: 'l', - description: 'return List of items related to command', + description: 'select the id of the app', }, - + // ENGINE-CORE + SDK-APPLE -------------------------------- key: { shortcut: 'k', isValueType: true, isRequired: true, description: 'Pass the key/password', }, - blueprint: { - shortcut: 'b', + // SDK-WEBPACK -------------------------------- + debugIp: { isValueType: true, - description: 'Blueprint for targets', + isRequired: true, + description: '(optional) overwrite the ip to which the remote debugger will connect', }, debug: { shortcut: 'D', @@ -196,17 +222,10 @@ const _RnvTaskOptions = { '--debug //run remote debug with default preference (chii)', ], }, - global: { - shortcut: 'G', - description: 'Flag for setting a config value for all RNV projects', - }, - debugIp: { - isValueType: true, - isRequired: true, - description: '(optional) overwrite the ip to which the remote debugger will connect', - }, - skipNotifications: { - description: 'Skip sending any integrated notifications', + // SDK-APPLE -------------------------------- + updatePods: { + shortcut: 'u', + description: 'Force update dependencies (iOS only)', }, keychain: { isValueType: true, @@ -228,13 +247,6 @@ const _RnvTaskOptions = { isRequired: true, description: 'Name of provisionProfile', }, - - skipTargetCheck: { - description: 'Skip Android target check, just display the raw adb devices to choose from', - }, - analyzer: { - description: 'Enable real-time bundle analyzer', - }, xcodebuildArgs: { isValueType: true, isRequired: true, @@ -250,53 +262,47 @@ const _RnvTaskOptions = { isRequired: true, description: 'pass down custom xcodebuild arguments', }, - skipDependencyCheck: { - description: 'Skips auto update of npm dependencies if mismatch found', - }, - - configName: { - isValueType: true, - isRequired: true, - description: 'Use custom name for ./renative.json. (applies only at root level)', - }, - sourceAppConfigID: { - isValueType: true, - isRequired: true, - description: 'name of source appConfig folder to copy from', - }, - hostIp: { - isValueType: true, - isRequired: true, - description: 'Custom IP override', - }, - unlinked: { - description: 'Force engines to be loaded from node_modules rather than locally', - }, - - gitEnabled: { - description: 'Enable git in your newly created project', - isValueType: true, - }, - npxMode: { - description: 'Ensures you can use local npx rnv version after the command is done', + // SDK-APPLE + SDK-ANDROID -------------------------------- + skipTargetCheck: { + description: 'Skip Android target check, just display the raw adb devices to choose from', }, - - packageManager: { + filter: { + shortcut: 'f', isValueType: true, isRequired: true, - options: ['yarn', 'npm'], - description: 'Set specific package manager to use', - examples: ['--packageManager yarn', '--packageManager npm'], + description: 'Filter value', }, - answer: { + device: { + shortcut: 'd', isValueType: true, - isVariadic: true, - description: 'Pass in answers to prompts', - examples: ['--answer question=response question2=response2', '--answer question=\'{"some": "json"}\''], + description: 'select connected Device', }, + // SDK-ANDROID -------------------------------- resetAdb: { description: 'Forces to reset android adb', }, + + // DEPRECATED -------------------------------- + + // global: { + // shortcut: 'G', + // description: 'Flag for setting a config value for all RNV projects', + // }, + // skipNotifications: { + // description: 'Skip sending any integrated notifications', + // }, + // analyzer: { + // description: 'Enable real-time bundle analyzer', + // }, + // blueprint: { + // shortcut: 'b', + // isValueType: true, + // description: 'Blueprint for targets', + // }, + // list: { + // shortcut: 'l', + // description: 'return List of items related to command', + // }, }; type ParamKeysType = typeof _RnvTaskOptions; @@ -358,7 +364,7 @@ export const RnvTaskOptionPresets = { RnvTaskOptions.device, RnvTaskOptions.hosted, RnvTaskOptions.port, - RnvTaskOptions.debug, + // RnvTaskOptions.debug, RnvTaskOptions.debugIp, RnvTaskOptions.skipTargetCheck, RnvTaskOptions.host, From 2d147b4d8a3e05333d653b748a20ee8aae0c54e1 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 23 Mar 2024 11:30:56 +0100 Subject: [PATCH 088/175] make platforms optional in task def --- packages/core/src/tasks/__tests__/index.test.ts | 3 --- packages/core/src/tasks/types.ts | 2 +- packages/engine-core/src/tasks/app/taskAppConfigure.ts | 1 - packages/engine-core/src/tasks/app/taskAppCreate.ts | 1 - packages/engine-core/src/tasks/app/taskAppSwitch.ts | 1 - packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts | 1 - packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts | 1 - packages/engine-core/src/tasks/global/new/taskNew.ts | 1 - packages/engine-core/src/tasks/global/taskClean.ts | 1 - packages/engine-core/src/tasks/global/taskConfigureSoft.ts | 1 - packages/engine-core/src/tasks/global/taskDoctor.ts | 1 - packages/engine-core/src/tasks/global/taskHelp.ts | 1 - packages/engine-core/src/tasks/global/taskInstall.ts | 1 - packages/engine-core/src/tasks/global/taskKill.ts | 1 - packages/engine-core/src/tasks/global/taskStatus.ts | 1 - packages/engine-core/src/tasks/hooks/taskHooksList.ts | 1 - packages/engine-core/src/tasks/hooks/taskHooksPipes.ts | 1 - packages/engine-core/src/tasks/hooks/taskHooksRun.ts | 1 - packages/engine-core/src/tasks/linking/taskLink.ts | 1 - packages/engine-core/src/tasks/linking/taskUnlink.ts | 1 - .../engine-core/src/tasks/platform/taskPlatformConfigure.ts | 1 - packages/engine-core/src/tasks/platform/taskPlatformConnect.ts | 1 - packages/engine-core/src/tasks/platform/taskPlatformEject.ts | 1 - packages/engine-core/src/tasks/platform/taskPlatformList.ts | 1 - packages/engine-core/src/tasks/platform/taskPlatformSetup.ts | 1 - packages/engine-core/src/tasks/plugin/taskPluginAdd.ts | 1 - packages/engine-core/src/tasks/plugin/taskPluginList.ts | 1 - packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts | 1 - packages/engine-core/src/tasks/project/taskProjectConfigure.ts | 1 - packages/engine-core/src/tasks/project/taskProjectUpgrade.ts | 1 - .../engine-core/src/tasks/telemetry/taskTelemetryDisable.ts | 1 - .../engine-core/src/tasks/telemetry/taskTelemetryEnable.ts | 1 - .../engine-core/src/tasks/telemetry/taskTelemetryStatus.ts | 1 - packages/engine-core/src/tasks/template/taskTemplateAdd.ts | 1 - packages/engine-core/src/tasks/template/taskTemplateApply.ts | 1 - packages/engine-core/src/tasks/template/taskTemplateList.ts | 1 - packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts | 1 - .../engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts | 1 - .../engine-core/src/tasks/workspace/taskWorkspaceConnect.ts | 1 - packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts | 1 - .../engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts | 1 - packages/integration-starter/src/tasks/taskSingleCommand.ts | 1 - packages/integration-starter/src/tasks/taskStarterHello.ts | 1 - packages/sdk-android/src/tasks/taskSdkConfigure.ts | 1 - 44 files changed, 1 insertion(+), 46 deletions(-) diff --git a/packages/core/src/tasks/__tests__/index.test.ts b/packages/core/src/tasks/__tests__/index.test.ts index d1dca779b5..81555652dd 100644 --- a/packages/core/src/tasks/__tests__/index.test.ts +++ b/packages/core/src/tasks/__tests__/index.test.ts @@ -41,7 +41,6 @@ const rnvEngineMock1: RnvEngine = { description: 'mock task 1', task: 'mock-task', options: [], - platforms: null, }, }, }; @@ -54,13 +53,11 @@ const rnvEngineMock2: RnvEngine = { description: 'mock task 2', task: 'mock-task-2', options: [], - platforms: null, }, ['mock-task']: { description: 'mock task 1', task: 'mock-task', options: [], - platforms: null, }, }, }; diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index a22499e7f1..fb080ebe8a 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -5,7 +5,7 @@ export type RnvTask = { task: string; options: Array; isGlobalScope?: boolean; - platforms: Array | null; + platforms?: Array; description: string; forceBuildHookRebuild?: boolean; fn?: RnvTaskFn; diff --git a/packages/engine-core/src/tasks/app/taskAppConfigure.ts b/packages/engine-core/src/tasks/app/taskAppConfigure.ts index 238a23214c..26d4cc567b 100644 --- a/packages/engine-core/src/tasks/app/taskAppConfigure.ts +++ b/packages/engine-core/src/tasks/app/taskAppConfigure.ts @@ -210,7 +210,6 @@ const Task: RnvTask = { fn: taskAppConfigure, task: RnvTaskName.appConfigure, options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index a3c0527160..0ed3ba08ef 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -169,7 +169,6 @@ const Task: RnvTask = { fn: taskAppCreate, task: RnvTaskName.appCreate, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index aaa9316b5e..dbbfa7d765 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -29,7 +29,6 @@ const Task: RnvTask = { fn: taskSwitch, task: RnvTaskName.appSwitch, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index 7b83e363c8..7954350f31 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -211,7 +211,6 @@ const Task: RnvTask = { fn: taskCryptoDecrypt, task: RnvTaskName.cryptoDecrypt, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index 8e165b8ca8..3574e7c8b0 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -240,7 +240,6 @@ const Task: RnvTask = { fn: taskCryptoEncrypt, task: RnvTaskName.cryptoEncrypt, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 03ade61f32..84912873fd 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -64,7 +64,6 @@ const Task: RnvTask = { fn: taskNew, task: RnvTaskName.new, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/engine-core/src/tasks/global/taskClean.ts b/packages/engine-core/src/tasks/global/taskClean.ts index d72fbff1ef..6f88071b0c 100644 --- a/packages/engine-core/src/tasks/global/taskClean.ts +++ b/packages/engine-core/src/tasks/global/taskClean.ts @@ -213,7 +213,6 @@ const Task: RnvTask = { fn: taskClean, task: RnvTaskName.clean, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts index 90cef4270e..99c3d9fdf8 100644 --- a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts @@ -29,7 +29,6 @@ const Task: RnvTask = { fn: taskConfigureSoft, task: RnvTaskName.configureSoft, options: RnvTaskOptionPresets.withBase(), - platforms: null, isPrivate: true, }; diff --git a/packages/engine-core/src/tasks/global/taskDoctor.ts b/packages/engine-core/src/tasks/global/taskDoctor.ts index 48443e7ff4..da314ed148 100644 --- a/packages/engine-core/src/tasks/global/taskDoctor.ts +++ b/packages/engine-core/src/tasks/global/taskDoctor.ts @@ -92,7 +92,6 @@ const Task: RnvTask = { fn: taskDoctor, task: RnvTaskName.doctor, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskHelp.ts b/packages/engine-core/src/tasks/global/taskHelp.ts index 3620750d36..21e09aaac2 100644 --- a/packages/engine-core/src/tasks/global/taskHelp.ts +++ b/packages/engine-core/src/tasks/global/taskHelp.ts @@ -47,7 +47,6 @@ const Task: RnvTask = { fn: taskHelp, task: RnvTaskName.help, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 1a78b8fece..1edca91dbf 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -35,7 +35,6 @@ const Task: RnvTask = { fn: taskInstall, task: RnvTaskName.install, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/global/taskKill.ts b/packages/engine-core/src/tasks/global/taskKill.ts index a081df284f..9fbd5e65fb 100644 --- a/packages/engine-core/src/tasks/global/taskKill.ts +++ b/packages/engine-core/src/tasks/global/taskKill.ts @@ -70,7 +70,6 @@ const Task: RnvTask = { fn: taskKill, task: RnvTaskName.kill, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskStatus.ts b/packages/engine-core/src/tasks/global/taskStatus.ts index 06af38b212..d688e0fdc4 100644 --- a/packages/engine-core/src/tasks/global/taskStatus.ts +++ b/packages/engine-core/src/tasks/global/taskStatus.ts @@ -7,7 +7,6 @@ const Task: RnvTask = { fn: taskStatus, task: RnvTaskName.status, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksList.ts b/packages/engine-core/src/tasks/hooks/taskHooksList.ts index 47ac8ad228..68daaa4855 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksList.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksList.ts @@ -35,7 +35,6 @@ const Task: RnvTask = { fn: taskHooksList, task: RnvTaskName.hooksList, options: RnvTaskOptionPresets.withBase(), - platforms: null, forceBuildHookRebuild: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts index bd5f7a6bfe..921bf8e91d 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts @@ -26,7 +26,6 @@ const Task: RnvTask = { fn: taskHooksPipes, task: RnvTaskName.hooksPipes, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index 7c1be3edee..95d01ea8fb 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -61,7 +61,6 @@ const Task: RnvTask = { fn: taskHooksRun, task: RnvTaskName.hooksRun, options: RnvTaskOptionPresets.withBase([RnvTaskOptions.exeMethod]), - platforms: null, forceBuildHookRebuild: true, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index 6a409432a0..63eba300fa 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -97,7 +97,6 @@ const Task: RnvTask = { options: RnvTaskOptionPresets.withBase([ { key: 'dir', description: 'Source folder to be linked into project', isValueType: true }, ]), - platforms: null, isGlobalScope: true, ignoreEngines: true, }; diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index ff7210eecd..1af1d4b2b5 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -56,7 +56,6 @@ const Task: RnvTask = { fn: taskUnlink, task: RnvTaskName.unlink, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, ignoreEngines: true, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index a505cee612..608151694b 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -73,7 +73,6 @@ const Task: RnvTask = { fn: taskPlatformConfigure, task: RnvTaskName.platformConfigure, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts index 748f93ad1e..a7acfdc2fa 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts @@ -92,7 +92,6 @@ const Task: RnvTask = { fn: taskPlatformConnect, task: RnvTaskName.platformConnect, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts index b2b09c98d7..0894fa75a0 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts @@ -75,7 +75,6 @@ const Task: RnvTask = { fn: taskPlatformEject, task: RnvTaskName.platformEject, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformList.ts b/packages/engine-core/src/tasks/platform/taskPlatformList.ts index 85e6600634..f701bfb314 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformList.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformList.ts @@ -25,7 +25,6 @@ const Task: RnvTask = { fn: taskPlatformList, task: RnvTaskName.platformList, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts index a86d99e684..4c2da84319 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts @@ -34,7 +34,6 @@ const Task: RnvTask = { fn: taskPlatformSetup, task: RnvTaskName.platformSetup, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index 12d6b22d04..e8ec0ca527 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -105,7 +105,6 @@ const Task: RnvTask = { fn: taskPluginAdd, task: RnvTaskName.pluginAdd, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginList.ts b/packages/engine-core/src/tasks/plugin/taskPluginList.ts index 3bc21eb65b..d8200601c5 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginList.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginList.ts @@ -19,7 +19,6 @@ const Task: RnvTask = { fn: taskPluginList, task: RnvTaskName.pluginList, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts index 35f094a82c..cfd8d533d4 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts @@ -53,7 +53,6 @@ const Task: RnvTask = { fn: taskPluginUpdate, task: RnvTaskName.pluginUpdate, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 20549a9a6f..ab71bebf9a 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -145,7 +145,6 @@ const Task: RnvTask = { fn: taskProjectConfigure, task: RnvTaskName.projectConfigure, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index 8ce4b92f8e..aafafe4091 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -80,7 +80,6 @@ const Task: RnvTask = { fn: taskProjectUpgrade, task: RnvTaskName.projectUpgrade, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index 677d5bcbb1..dff7af2f37 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -32,7 +32,6 @@ const Task: RnvTask = { fn: taskTelemetryDisable, task: RnvTaskName.telemetryDisable, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index fa0c886d5b..874c58abf4 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -32,7 +32,6 @@ const Task: RnvTask = { fn: taskTelemetryEnable, task: RnvTaskName.telemetryEnable, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts index fdf3b8a022..42d880a808 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts @@ -30,7 +30,6 @@ const Task: RnvTask = { fn: taskTelemetryStatus, task: RnvTaskName.telemetryStatus, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts index f48ad9e54f..7942c5ac4c 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts @@ -58,7 +58,6 @@ const Task: RnvTask = { fn: taskTemplateAdd, task: RnvTaskName.templateAdd, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 1d759db6d7..10fc00dfad 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -48,7 +48,6 @@ const Task: RnvTask = { fn: taskTemplateApply, task: RnvTaskName.templateApply, options: RnvTaskOptionPresets.withBase(), - platforms: null, }; export default Task; diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts index 13a9ac21c2..da5f298496 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateList.ts @@ -25,7 +25,6 @@ const Task: RnvTask = { fn: taskTemplateList, task: RnvTaskName.templateList, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts index 032c02d6c1..b352b14a52 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts @@ -53,7 +53,6 @@ const Task: RnvTask = { fn: taskWorkspaceAdd, task: RnvTaskName.workspaceAdd, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index 479c48f5aa..31dd8c1b04 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -87,7 +87,6 @@ const Task: RnvTask = { fn: taskWorkspaceConfigure, task: RnvTaskName.workspaceConfigure, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts index e9a8059caa..6229ee37e7 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts @@ -38,7 +38,6 @@ const Task: RnvTask = { fn: taskWorkspaceConnect, task: RnvTaskName.workspaceConnect, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts index 56f49577c4..a93468a471 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts @@ -35,7 +35,6 @@ const Task: RnvTask = { fn: taskWorkspaceList, task: RnvTaskName.workspaceList, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts index a926540e4c..976b06207f 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts @@ -14,7 +14,6 @@ const Task: RnvTask = { fn: taskWorkspaceUpdate, task: RnvTaskName.workspaceUpdate, options: RnvTaskOptionPresets.withBase(), - platforms: null, isGlobalScope: true, isPrivate: true, }; diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index 00c7a52cd5..759117dc6a 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -10,7 +10,6 @@ const Task: RnvTask = { fn: task, task: 'starter-single-command', options: RnvTaskOptionPresets.withBase([{ key: 'my-opt', description: 'Hello', isValueType: true }]), - platforms: null, }; export default Task; diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index a15f5737aa..911dd35d22 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -10,7 +10,6 @@ const Task: RnvTask = { fn: task, task: 'starter hello', options: RnvTaskOptionPresets.withBase([{ key: 'my-opt', description: 'Hello', isValueType: true }]), - platforms: null, }; export default Task; diff --git a/packages/sdk-android/src/tasks/taskSdkConfigure.ts b/packages/sdk-android/src/tasks/taskSdkConfigure.ts index bf7448acac..25c34e0724 100644 --- a/packages/sdk-android/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-android/src/tasks/taskSdkConfigure.ts @@ -14,7 +14,6 @@ const Task: RnvTask = { fn, task: RnvTaskName.sdkConfigure, options: [], - platforms: null, }; export default Task; From da144292b5d32511f33dbb1e0c89eceb3434b051 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 23 Mar 2024 13:05:33 +0100 Subject: [PATCH 089/175] fix task execution --- packages/core/src/tasks/index.ts | 8 ++++---- .../engine-core/src/tasks/global/taskConfigureSoft.ts | 2 +- .../src/tasks/platform/taskPlatformConfigure.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 7d8768e8e9..0d6003105f 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -48,7 +48,7 @@ export const initializeTask = async (taskInstance: RnvTask) => { platform: c.platform, }); - await executeTask(task, undefined, task, true); + await executeTask(task, undefined, task); return true; }; @@ -397,7 +397,7 @@ const _selectPlatform = async (c: RnvContext, suitableEngines: Array, enPlats.forEach((plat) => { supportedEngPlatforms.push(plat); }); - } else if (enPlats === null) { + } else { // enPlats=null means task can be executed without platform isPlatformIndependentTask = true; } @@ -447,7 +447,7 @@ const _executePipe = async (c: RnvContext, task: string, phase: string) => const TASK_LIMIT = 20; -export const executeTask = async (task: string, parentTask?: string, originTask?: string, isFirstTask?: boolean) => { +export const executeTask = async (task: string, parentTask?: string, originTask?: string, isOptional?: boolean) => { const c = getContext(); // const pt = parentTask ? `=> [${parentTask}] ` : ''; c._currentTask = task; @@ -463,7 +463,7 @@ but issue migh not be necessarily with this task To avoid that test your task code against parentTask and avoid executing same task X from within task X`); } - await executeEngineTask(task, parentTask, originTask, getEngineRunner(task, CUSTOM_TASKS)?.tasks, isFirstTask); + await executeEngineTask(task, parentTask, originTask, getEngineRunner(task, CUSTOM_TASKS, !isOptional)?.tasks); // await getEngineRunner(task, CUSTOM_TASKS).executeTask(task, parentTask, originTask, isFirstTask); executedTasks[task]++; diff --git a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts index 99c3d9fdf8..a3d2c245e5 100644 --- a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/global/taskConfigureSoft.ts @@ -18,7 +18,7 @@ const taskConfigureSoft: RnvTaskFn = async (_c, parentTask, originTask) => { await isPlatformSupported(); await isBuildSchemeSupported(); - await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.configureSoft, originTask); + await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.configureSoft, originTask, true); await configureRuntimeDefaults(); return true; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 608151694b..537d2e64e2 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -31,7 +31,7 @@ const taskPlatformConfigure: RnvTaskFn = async (c, parentTask, originTask) => { await isPlatformSupported(); await isBuildSchemeSupported(); - await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.platformConfigure, originTask); + await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.platformConfigure, originTask, true); await configureRuntimeDefaults(); From a37a70969bd24c938b1e02cc36e7828aa92d1e49 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 23 Mar 2024 13:07:05 +0100 Subject: [PATCH 090/175] fix ut --- .../src/tasks/platform/__tests__/taskPlatformConfigure.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts index 1afd83046c..448c6476d3 100644 --- a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts +++ b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts @@ -1,7 +1,6 @@ import { createRnvContext, executeTask, getContext } from '@rnv/core'; import taskPlatformConfigure from '../taskPlatformConfigure'; -jest.mock('../../../common'); jest.mock('../../../buildSchemes'); jest.mock('@rnv/core'); From 883d6fc87d097e9cf7cc4b063569f8055f27062d Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 23 Mar 2024 22:28:08 +0100 Subject: [PATCH 091/175] refactor bootstrap logic --- packages/core/src/configs/templates.ts | 17 ---- packages/core/src/schema/shared/index.ts | 4 +- .../src/tasks/global/new/projectGenerator.ts | 34 ++++---- .../tasks/global/new/questions/appTitle.ts | 4 +- .../global/new/questions/applyTemplate.ts | 3 +- .../global/new/questions/bookmarkTemplate.ts | 30 ++++--- .../global/new/questions/confirmOverview.ts | 2 +- .../global/new/questions/installTemplate.ts | 79 ++++++++++--------- .../global/new/questions/projectVersion.ts | 4 +- .../tasks/global/new/questions/workspace.ts | 4 +- .../src/tasks/global/new/taskNew.ts | 4 +- .../engine-core/src/tasks/global/new/types.ts | 40 ++++------ .../src/tasks/template/taskTemplateAdd.ts | 2 +- .../src/tasks/template/taskTemplateList.ts | 12 +-- packages/engine-core/src/templates.ts | 17 ++++ 15 files changed, 128 insertions(+), 128 deletions(-) create mode 100644 packages/engine-core/src/templates.ts diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts index b9c5de3c6d..7ce172ed97 100644 --- a/packages/core/src/configs/templates.ts +++ b/packages/core/src/configs/templates.ts @@ -1,4 +1,3 @@ -import { generateOptions } from '../api'; import { getContext } from '../context/provider'; import { chalk, logInfo, logDefault, logWarning } from '../logger'; import { doResolve } from '../system/resolve'; @@ -38,19 +37,3 @@ export const checkIfTemplateConfigured = async () => { return true; }; - -export const getTemplateOptions = (isGlobalScope?: boolean) => { - const c = getContext(); - let defaultProjectTemplates; - if (isGlobalScope) { - defaultProjectTemplates = c.files.rnvConfigTemplates.config?.projectTemplates; - } else { - defaultProjectTemplates = c.buildConfig.projectTemplates || {}; - } - - return generateOptions(defaultProjectTemplates, false, null, (i, obj, mapping, defaultVal) => { - const exists = c.buildConfig.templates?.[defaultVal]; - const installed = exists ? chalk().yellow(' (installed)') : ''; - return ` [${chalk().grey(i + 1)}]> ${chalk().bold(defaultVal)}${installed} \n`; - }); -}; diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index 1d995c472e..62dbec5fdf 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -89,6 +89,8 @@ export const SupportedPlatforms = z export const ProjectTemplates = z.record( z.string(), z.object({ - description: z.string(), + packageName: z.string().optional(), + description: z.string().optional(), + localPath: z.string().optional(), }) ); diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index ded1fd66c9..8589eb9c15 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -1,17 +1,13 @@ import { - // ConfigFileProject, PlatformKey, RnvFileName, - // PlatformKey, applyTemplate, - chalk, configureTemplateFiles, generateLocalJsonSchemas, getApi, getContext, getWorkspaceOptions, logDebug, - logTask, updateRenativeConfigs, writeFileSync, } from '@rnv/core'; @@ -32,15 +28,21 @@ export const initNewProject = async () => { c.paths.project.config = path.join(c.paths.project.dir, RnvFileName.renative); const data: NewProjectData = { - defaultVersion: '0.1.0', - defaultTemplate: '@rnv/template-starter', - defaultProjectName: 'helloRenative', - defaultAppTitle: 'Hello Renative', - defaultWorkspace: 'rnv', teamID: '', optionPlatforms: {}, - optionTemplates: {}, optionWorkspaces: getWorkspaceOptions(), + defaults: { + appVersion: '0.1.0', + templateName: '@rnv/template-starter', + projectName: 'helloRenative', + appTitle: 'Hello Renative', + workspaceID: 'rnv', + }, + inputs: { + tepmplate: { + name: '', + }, + }, files: { project: { renativeConfig: {}, @@ -59,18 +61,18 @@ export const initNewProject = async () => { }; export const generateNewProject = async (data: NewProjectData) => { - logTask( - `generateNewProject:${data.optionTemplates.selectedOption}:${data.optionTemplates.selectedVersion}`, - chalk().grey - ); + // logTask( + // `generateNewProject:${data.optionTemplates.selectedOption}:${data.optionTemplates.selectedVersion}`, + // chalk().grey + // ); - if (!data.optionTemplates.selectedVersion) { + if (!data.inputs.tepmplate.version) { return Promise.reject('No template version selected'); } if (!data.files.template.renativeTemplateConfig) { return Promise.reject('No renativeTemplateConfig found'); } - if (!data.optionTemplates.selectedOption) { + if (!data.inputs.tepmplate.name) { return Promise.reject('Current template not selected!'); } diff --git a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts index 74559523a4..f2b143c887 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts +++ b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts @@ -12,7 +12,7 @@ export const inquiryAppTitle = async (data: NewProjectData) => { value: title, validFn: validator, name: 'inputAppTitle', - defaultVal: data.defaultAppTitle, + defaultVal: data.defaults.appTitle, message: "What's your project Title?", warning: 'Title was not provided', }, @@ -20,5 +20,5 @@ export const inquiryAppTitle = async (data: NewProjectData) => { ); data.inputAppTitle = result; - data.appTitle = data.inputAppTitle || data.defaultAppTitle; + data.appTitle = data.inputAppTitle || data.defaults.appTitle; }; diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index 761578420b..8babc91cfc 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -13,7 +13,7 @@ import path from 'path'; export const inquiryApplyTemplate = async (data: NewProjectData) => { const c = getContext(); - const tplName = data.optionTemplates.selectedOption; + const tplName = data.inputs.tepmplate.name; if (!tplName) { return Promise.reject('Template not selected'); } @@ -46,7 +46,6 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { name: 'configOption', type: 'list', message: 'How to create config renative.json?', - default: data.defaultTemplate, choices: options, }); diff --git a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts index decbb14c12..7e3fde53d1 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts @@ -4,35 +4,43 @@ import type { NewProjectData } from '../types'; export const inquiryBookmarkTemplate = async (data: NewProjectData) => { const c = getContext(); - if (!data.optionTemplates.selectedOption) { + if (!data.inputs.tepmplate.name) { return Promise.reject('Template not selected'); } - if (!data.optionTemplates.keysAsArray?.includes(data.optionTemplates.selectedOption)) { + const configFile = c.files.workspace.config || {}; + + const defProjTemplates = c.files.rnvConfigTemplates.config?.projectTemplates || {}; + const wsProjTemplates = configFile.projectTemplates || {}; + + const allKeys = Object.keys(defProjTemplates).concat(Object.keys(wsProjTemplates)); + + if (!Object.keys(defProjTemplates).includes(data.inputs.tepmplate.name) || !!data.inputs.tepmplate.path) { const { confirmAddTemplate } = await inquirerPrompt({ name: 'confirmAddTemplate', type: 'confirm', - message: `Would you like to add ${chalk().bold(data.optionTemplates.selectedOption)} to your ${ - c.runtime.selectedWorkspace + message: `Would you like to add ${chalk().bold(data.inputs.tepmplate.name)} to your ${ + data.optionWorkspaces.selectedOption } workspace template list?`, }); - const { templateDescription } = await inquirerPrompt({ - name: 'templateDescription', + const { templateName } = await inquirerPrompt({ + name: 'templateName', type: 'input', - default: 'Custom template added by user', + default: `${data.inputs.tepmplate.name} (local)`, + validate: (v) => !allKeys.includes(v) || 'Name already exists', message: 'Add short description', }); - const configFile = c.files.workspace.config; - if (configFile) { if (confirmAddTemplate) { if (!configFile.projectTemplates) { configFile.projectTemplates = {}; } - configFile.projectTemplates[data.optionTemplates.selectedOption] = { - description: templateDescription, + configFile.projectTemplates[templateName] = { + packageName: data.inputs.tepmplate.name, + localPath: data.inputs.tepmplate.path, + description: data.inputs.tepmplate.description, }; writeFileSync(c.paths.workspace.config, configFile); await updateRenativeConfigs(); diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts index c44a0921d7..e02d931b24 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts @@ -28,7 +28,7 @@ export const inquiryConfirm = async (data: NewProjectData) => { }; const _prepareProjectOverview = (data: NewProjectData) => { - const tempString = `${data.optionTemplates.selectedOption}@${data.optionTemplates.selectedVersion}`; + const tempString = `${data.inputs.tepmplate.name}@${data.inputs.tepmplate.version}`; const highlight = chalk().green; diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 717931ada7..d618b55264 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -1,4 +1,5 @@ import { + ConfigFileBuildConfig, NpmPackageFile, RnvFileName, RnvFolderName, @@ -10,7 +11,6 @@ import { fsLstatSync, fsReaddirSync, getContext, - getTemplateOptions, inquirerPrompt, inquirerSeparator, isYarnInstalled, @@ -25,31 +25,31 @@ import { checkInputValue } from '../utils'; import { saveProgressIntoProjectConfig } from '../projectGenerator'; import { merge } from 'lodash'; +type TemplateOption = { + name: string; + value: { + key: 'existing' | 'custom' | 'local' | 'none'; + } & Required['projectTemplates'][string]; +}; + export const inquiryInstallTemplate = async (data: NewProjectData) => { - const customTemplate = { name: 'Custom Template (npm)...', value: { key: 'custom' } }; - const localTemplate = { name: 'Local Template...', value: { key: 'local' } }; - const noTemplate = { name: 'No Template (blank project)', value: { key: 'none' } }; + const customTemplate: TemplateOption = { name: 'Custom Template (npm)...', value: { key: 'custom' } }; + const localTemplate: TemplateOption = { name: 'Local Template...', value: { key: 'local' } }; + const noTemplate: TemplateOption = { name: 'No Template (blank project)', value: { key: 'none' } }; const c = getContext(); const { templateVersion, projectTemplate } = c.program; - data.optionTemplates = getTemplateOptions(); - - const options = []; - const values = data.optionTemplates.valuesAsObject; - if (values) { - Object.keys(values).forEach((k) => { - const val = values[k]; - if (val.description || val.path) { - val.title = `${k} ${chalk().grey(`- ${val.path || val.description}`)}`; - } else { - val.title = k; - } + const projectTemplates = c.buildConfig.projectTemplates || {}; // c.files.rnvConfigTemplates.config?.projectTemplates || {}; - val.key = k; - options.push({ name: val.title, value: val }); + const options: TemplateOption[] = []; + Object.keys(projectTemplates).forEach((k) => { + const value = projectTemplates[k]; + options.push({ + name: `${k} ${chalk().grey(`- ${value.localPath || value.description}`)}`, + value: { ...value, key: 'existing' }, }); - } + }); // data.optionTemplates.keysAsArray.push(customTemplate); options.push(inquirerSeparator('Advanced:----------------')); @@ -61,36 +61,39 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { if (checkInputValue(projectTemplate)) { selectedInputTemplate = projectTemplate; } else { - const { inputTemplate } = await inquirerPrompt({ + const iRes = await inquirerPrompt({ name: 'inputTemplate', type: 'list', message: 'What template to use?', - default: data.defaultTemplate, + default: data.defaults.templateName, loop: false, choices: options, }); + const result: TemplateOption['value'] = iRes.inputTemplate; - if (inputTemplate.key === customTemplate.value.key) { + if (result.key === 'custom') { const { inputTemplateCustom } = await inquirerPrompt({ name: 'inputTemplateCustom', type: 'input', message: 'NPM package name:', }); selectedInputTemplate = inputTemplateCustom; - } else if (inputTemplate.key === localTemplate.value.key) { + } else if (result.key === 'local') { const { inputTemplateLocal } = await inquirerPrompt({ name: 'inputTemplateLocal', type: 'input', message: 'Path (absolute):', }); localTemplatePath = inputTemplateLocal; - } else if (inputTemplate.key === noTemplate.value.key) { + } else if (result.key === 'none') { // TODO: add support for no templates return Promise.reject('No templates NOT SUPPORTED YET'); - } else if (inputTemplate.path) { - localTemplatePath = inputTemplate.path; - } else { - selectedInputTemplate = inputTemplate.key; + } else if (result.key === 'existing') { + if (result.localPath) { + localTemplatePath = result.localPath; + } else { + selectedInputTemplate = result.packageName; + } } } @@ -113,11 +116,13 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { if (!pkg?.name) { return Promise.reject(`Invalid package ${localTemplatePkgPath} missing name field`); } - data.optionTemplates.selectedOption = pkg.name; - data.optionTemplates.selectedVersion = pkg.version; + + data.inputs.tepmplate.name = pkg.name; + data.inputs.tepmplate.version = pkg.version; + data.inputs.tepmplate.path = localTemplatePath; const nmTemplatePath = path.join(nmDir, pkg?.name); - logInfo(`Found local template: ${data.optionTemplates.selectedOption}@${pkg.version}`); + logInfo(`Found local template: ${pkg.name}@${pkg.version}`); mkdirSync(nmTemplatePath); @@ -145,15 +150,15 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { }); // NOTE: this is a workaround for npm/yarn bug where manually added packages are overriden on next install - const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${data.optionTemplates.selectedOption}`; + const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${data.inputs.tepmplate.name}`; data.files.project.packageJson = merge(data.files.project.packageJson, { devDependencies: { - [data.optionTemplates.selectedOption]: filePath, + [data.inputs.tepmplate.name]: filePath, }, }); data.files.project.renativeConfig = merge(data.files.project.renativeConfig, { templates: { - [data.optionTemplates.selectedOption]: { + [data.inputs.tepmplate.name]: { version: filePath, }, }, @@ -165,16 +170,16 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { cwd: c.paths.project.dir, }); } else { - data.optionTemplates.selectedOption = selectedInputTemplate; + data.inputs.tepmplate.name = selectedInputTemplate; let inputTemplateVersion; if (checkInputValue(templateVersion)) { inputTemplateVersion = templateVersion; } else { - inputTemplateVersion = await listAndSelectNpmVersion(data.optionTemplates.selectedOption || ''); + inputTemplateVersion = await listAndSelectNpmVersion(data.inputs.tepmplate.name || ''); } - data.optionTemplates.selectedVersion = inputTemplateVersion; + data.inputs.tepmplate.version = inputTemplateVersion; await executeAsync( `${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion} --dev`, diff --git a/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts index 9eef86e00b..36f19b0ccc 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts @@ -16,13 +16,13 @@ export const inquiryAppVersion = async (data: NewProjectData) => { value: appVersion, validFn: validator, name: 'inputVersion', - defaultVal: data.defaultVersion, + defaultVal: data.defaults.appVersion, message: "What's your project version?", warning: `Command contains invalid appVersion. Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.`, }, ci ); - data.inputVersion = result || data.defaultVersion; + data.inputVersion = result || data.defaults.appVersion; data.files.project.packageJson = merge(data.files.project.packageJson, { version: data.inputVersion }); }; diff --git a/packages/engine-core/src/tasks/global/new/questions/workspace.ts b/packages/engine-core/src/tasks/global/new/questions/workspace.ts index e746e41aab..fbe4a44b0d 100644 --- a/packages/engine-core/src/tasks/global/new/questions/workspace.ts +++ b/packages/engine-core/src/tasks/global/new/questions/workspace.ts @@ -9,13 +9,13 @@ export const inquiryWorkspace = async (data: NewProjectData) => { if (checkInputValue(workspace)) { inputWorkspace = workspace; } else if (ci) { - inputWorkspace = data.defaultWorkspace; + inputWorkspace = data.defaults.workspaceID; } else { const answer = await inquirerPrompt({ name: 'inputWorkspace', type: 'list', message: 'What workspace to use?', - default: data.defaultWorkspace, + default: data.defaults.workspaceID, choices: data.optionWorkspaces.keysAsArray, }); diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 84912873fd..4e1571dc04 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -27,23 +27,23 @@ const taskNew = async () => { const payload = await initNewProject(); // Interactive Questions Required await inquiryProjectName(payload); + await inquiryWorkspace(payload); await processChdirToProject(); await inquiryIsRenativeProject(payload); await inquiryHasNodeModules(payload); await inquiryInstallTemplate(payload); await inquiryApplyTemplate(payload); await saveProgressIntoProjectConfig(payload); + await inquiryBookmarkTemplate(payload); // Interactive Questions Optional await inquiryAppTitle(payload); await inquiryAppID(payload); await inquiryAppVersion(payload); await saveProgressIntoProjectConfig(payload); - await inquiryWorkspace(payload); await inquirySupportedPlatforms(payload); await inquiryBootstrapQuestions(payload); await inquiryGit(payload); - await inquiryBookmarkTemplate(payload); await inquiryConfirm(payload); // Generate Project await generateNewProject(payload); diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index a46b41e934..9e46ee8bc7 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -4,32 +4,11 @@ export type NewProjectData = { appTitle?: string; inputAppTitle?: string; packageName?: string; - defaultAppTitle?: string; - defaultTemplate?: string; inputProjectName?: string; teamID?: string; inputAppID?: string; inputVersion?: string; - defaultVersion: string; inputTemplate?: string; - optionTemplates: { - selectedOption?: string; - selectedVersion?: string; - valuesAsObject?: Record< - string, - { - title: string; - key: string; - description: string; - path?: string; - } - >; - valuesAsArray?: Array<{ - title: string; - key: string; - }>; - keysAsArray?: Array; - }; projectName?: string; optionWorkspaces: { selectedOption?: string; @@ -48,15 +27,28 @@ export type NewProjectData = { selectedOptions?: Array; }; confirmString?: string; - defaultProjectName?: string; - defaultWorkspace?: string; inputSupportedPlatforms?: Array; inputWorkspace?: string; - selectedInputTemplate?: string; renativeTemplateConfigExt?: any; confirmDeleteNodeModules?: boolean; confirmInRnvProject?: boolean; + // ------------------------------- + defaults: { + appVersion: string; + templateName: string; + projectName: string; + appTitle: string; + workspaceID: string; + }; + inputs: { + tepmplate: { + name: string; + version?: string; + description?: string; + path?: string; + }; + }; files: { template: { renativeTemplateConfig: ConfigFileTemplate; diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts index 7942c5ac4c..66ee5c9b38 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts @@ -4,13 +4,13 @@ import { generateBuildConfig, executeTask, RnvTaskOptionPresets, - getTemplateOptions, RnvContext, RnvTaskFn, inquirerPrompt, RnvTask, RnvTaskName, } from '@rnv/core'; +import { getTemplateOptions } from '../../templates'; const _writeObjectSync = (p: string, s: object) => { writeFileSync(p, s); diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts index da5f298496..2618906da5 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateList.ts @@ -1,13 +1,5 @@ -import { - logToSummary, - logTask, - getTemplateOptions, - executeTask, - RnvTaskOptionPresets, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { logToSummary, logTask, executeTask, RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { getTemplateOptions } from '../../templates'; const taskTemplateList: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTemplateList'); diff --git a/packages/engine-core/src/templates.ts b/packages/engine-core/src/templates.ts new file mode 100644 index 0000000000..f454ce776a --- /dev/null +++ b/packages/engine-core/src/templates.ts @@ -0,0 +1,17 @@ +import { chalk, generateOptions, getContext } from '@rnv/core'; + +export const getTemplateOptions = (isGlobalScope?: boolean) => { + const c = getContext(); + let defaultProjectTemplates; + if (isGlobalScope) { + defaultProjectTemplates = c.files.rnvConfigTemplates.config?.projectTemplates; + } else { + defaultProjectTemplates = c.buildConfig.projectTemplates || {}; + } + + return generateOptions(defaultProjectTemplates, false, null, (i, obj, mapping, defaultVal) => { + const exists = c.buildConfig.templates?.[defaultVal]; + const installed = exists ? chalk().yellow(' (installed)') : ''; + return ` [${chalk().grey(i + 1)}]> ${chalk().bold(defaultVal)}${installed} \n`; + }); +}; From 8543d0c8d6f9c946f5064e24576e353a02878435 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 14:59:48 +0100 Subject: [PATCH 092/175] refactor bootstrap logic, fixes --- packages/cli/src/logger/index.ts | 4 +- packages/core/src/templates/index.ts | 2 + .../global/new/__tests__/taskNew.test.ts | 48 +++++----- .../src/tasks/global/new/projectGenerator.ts | 64 ++++++++----- .../src/tasks/global/new/questions/appID.ts | 11 ++- .../tasks/global/new/questions/appTitle.ts | 7 +- .../global/new/questions/applyTemplate.ts | 6 +- .../global/new/questions/bookmarkTemplate.ts | 39 ++++---- .../new/questions/bootstrapQuestions.ts | 8 +- .../tasks/global/new/questions/confirmGit.ts | 20 ++-- .../global/new/questions/confirmOverview.ts | 37 +------- .../global/new/questions/hasNodeModules.ts | 6 +- .../global/new/questions/installTemplate.ts | 91 +++++++++---------- .../global/new/questions/isRenativeProject.ts | 6 +- .../tasks/global/new/questions/projectName.ts | 19 ++-- .../global/new/questions/projectVersion.ts | 8 +- .../new/questions/supportedPlatforms.ts | 20 ++-- .../tasks/global/new/questions/workspace.ts | 21 ++--- .../src/tasks/global/new/taskNew.ts | 47 +++++----- .../engine-core/src/tasks/global/new/types.ts | 70 ++++++-------- 20 files changed, 275 insertions(+), 259 deletions(-) diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index 0493cac757..34592a3109 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -186,10 +186,10 @@ export const getCurrentCommand = (excludeDollar = false) => { return `${dollar}${npx}rnv ${output}`; }; -export const logToSummary = (v: string, sanitizePaths?: () => string) => { +export const logToSummary = (v: string) => { const ctx = getContext(); if (ctx.program?.isHelpInvoked) return; - const _v = sanitizePaths ? _sanitizePaths(v) : v; + const _v = _sanitizePaths(v); ctx.logging.logMessages.push(`\n${_v}`); }; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index dd88a3df26..e7a369fe40 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -327,6 +327,8 @@ export const applyTemplate = async (selectedTemplate?: string) => { if (!c.files.project.config) { logError('Project config not loaded. cannot apply template'); + console.trace('DJDJDJD'); + return false; } diff --git a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts index 7cb566e6fb..34acfbd3d4 100644 --- a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts @@ -1,4 +1,4 @@ -import { getContext, createRnvContext, logSuccess } from '@rnv/core'; +import { getContext, createRnvContext } from '@rnv/core'; import taskNew from '../taskNew'; import { generateNewProject, @@ -7,21 +7,22 @@ import { telemetryNewProject, } from '../projectGenerator'; import { NewProjectData } from '../types'; -import { inquiryProjectName } from '../questions/projectName'; import { processChdirToProject } from '../utils'; -import { inquiryIsRenativeProject } from '../questions/isRenativeProject'; -import { inquiryHasNodeModules } from '../questions/hasNodeModules'; -import { inquiryInstallTemplate } from '../questions/installTemplate'; -import { inquiryApplyTemplate } from '../questions/applyTemplate'; -import { inquiryAppTitle } from '../questions/appTitle'; -import { inquiryAppID } from '../questions/appID'; -import { inquiryAppVersion } from '../questions/projectVersion'; -import { inquiryWorkspace } from '../questions/workspace'; -import { inquirySupportedPlatforms } from '../questions/supportedPlatforms'; -import { inquiryBootstrapQuestions } from '../questions/bootstrapQuestions'; -import { inquiryGit } from '../questions/confirmGit'; -import { inquiryBookmarkTemplate } from '../questions/bookmarkTemplate'; -import { inquiryConfirm } from '../questions/confirmOverview'; + +import inquiryBootstrapQuestions from '../questions/bootstrapQuestions'; +import inquiryGit from '../questions/confirmGit'; +import inquiryIsRenativeProject from '../questions/isRenativeProject'; +import inquiryHasNodeModules from '../questions/hasNodeModules'; +import inquiryConfirm from '../questions/confirmOverview'; +import inquiryProjectName from '../questions/projectName'; +import inquiryWorkspace from '../questions/workspace'; +import inquirySupportedPlatforms from '../questions/supportedPlatforms'; +import inquiryAppTitle from '../questions/appTitle'; +import inquiryAppID from '../questions/appID'; +import inquiryAppVersion from '../questions/projectVersion'; +import inquiryInstallTemplate from '../questions/installTemplate'; +import inquiryApplyTemplate from '../questions/applyTemplate'; +import inquiryBookmarkTemplate from '../questions/bookmarkTemplate'; jest.mock('@rnv/core'); jest.mock('lodash/set'); @@ -41,7 +42,6 @@ jest.mock('../questions/confirmOverview'); jest.mock('../questions/isRenativeProject'); jest.mock('../questions/projectName'); jest.mock('../questions/supportedPlatforms'); -jest.mock('../questions/bookmarkTemplate'); jest.mock('../questions/confirmGit'); jest.mock('../projectGenerator'); @@ -57,11 +57,14 @@ test('Execute task.rnv.new', async () => { // GIVEN const ctx = getContext(); const payload: NewProjectData = { - defaultVersion: 'MOCK_VERSION', - defaultTemplate: 'MOCK_TEMPLATE', - optionTemplates: {}, - optionWorkspaces: {}, - optionPlatforms: {}, + defaults: { + appVersion: 'MOCK_VERSION', + templateName: 'MOCK_TEMPLATE', + projectName: 'MOCK_PROJECT_NAME', + appTitle: 'MOCK_APP_TITLE', + workspaceID: 'MOCK_WORKSPACE', + }, + inputs: {}, files: { project: { renativeConfig: {}, @@ -95,9 +98,8 @@ test('Execute task.rnv.new', async () => { expect(inquirySupportedPlatforms).toHaveBeenCalledWith(payload); expect(inquiryBootstrapQuestions).toHaveBeenCalledWith(payload); expect(inquiryGit).toHaveBeenCalledWith(payload); - expect(inquiryBookmarkTemplate).toHaveBeenCalledWith(payload); expect(inquiryConfirm).toHaveBeenCalledWith(payload); + expect(inquiryBookmarkTemplate).toHaveBeenCalledWith(payload); expect(generateNewProject).toHaveBeenCalledWith(payload); expect(telemetryNewProject).toHaveBeenCalledWith(payload); - expect(logSuccess).toHaveBeenCalled(); }); diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index 8589eb9c15..b453f3f7c9 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -2,18 +2,18 @@ import { PlatformKey, RnvFileName, applyTemplate, + chalk, configureTemplateFiles, generateLocalJsonSchemas, getApi, getContext, - getWorkspaceOptions, logDebug, + logToSummary, updateRenativeConfigs, writeFileSync, } from '@rnv/core'; import path from 'path'; import { NewProjectData } from './types'; -import { configureGit } from './questions/confirmGit'; export const saveProgressIntoProjectConfig = async (data: NewProjectData) => { const c = getContext(); @@ -28,9 +28,6 @@ export const initNewProject = async () => { c.paths.project.config = path.join(c.paths.project.dir, RnvFileName.renative); const data: NewProjectData = { - teamID: '', - optionPlatforms: {}, - optionWorkspaces: getWorkspaceOptions(), defaults: { appVersion: '0.1.0', templateName: '@rnv/template-starter', @@ -38,11 +35,7 @@ export const initNewProject = async () => { appTitle: 'Hello Renative', workspaceID: 'rnv', }, - inputs: { - tepmplate: { - name: '', - }, - }, + inputs: {}, files: { project: { renativeConfig: {}, @@ -65,14 +58,15 @@ export const generateNewProject = async (data: NewProjectData) => { // `generateNewProject:${data.optionTemplates.selectedOption}:${data.optionTemplates.selectedVersion}`, // chalk().grey // ); + const { inputs, files } = data; - if (!data.inputs.tepmplate.version) { + if (!inputs.tepmplate?.version) { return Promise.reject('No template version selected'); } - if (!data.files.template.renativeTemplateConfig) { + if (!files.template.renativeTemplateConfig) { return Promise.reject('No renativeTemplateConfig found'); } - if (!data.inputs.tepmplate.name) { + if (!inputs.tepmplate.packageName) { return Promise.reject('Current template not selected!'); } @@ -84,10 +78,10 @@ export const generateNewProject = async (data: NewProjectData) => { // title: data.inputAppTitle || 'My App', // }, - const supPlats = data.optionPlatforms.selectedOptions || []; + const supPlats = inputs.supportedPlatforms || []; // This is project config override only - const cnf = data.files.project.renativeConfig; + const cnf = files.project.renativeConfig; cnf.defaults = cnf.defaults || {}; cnf.defaults.supportedPlatforms = supPlats; cnf.engines = cnf.engines || {}; @@ -130,23 +124,51 @@ export const generateNewProject = async (data: NewProjectData) => { await configureTemplateFiles(); await generateLocalJsonSchemas(); - if (data.gitEnabled) { - await configureGit(); - } + logToSummary(generateProjectOverview(data)); }; export const telemetryNewProject = async (data: NewProjectData) => { + // Do not log telementry when developing rnv + if (getContext().paths.IS_LINKED) return; try { - await getApi().analytics.captureEvent({ + const { inputs } = data; + getApi().analytics.captureEvent({ type: 'newProject', - template: data.selectedInputTemplate, - platforms: data.inputSupportedPlatforms, + template: inputs.tepmplate?.packageName, + platforms: inputs.supportedPlatforms, }); } catch (e) { logDebug(e); } }; +export const generateProjectOverview = (data: NewProjectData) => { + const { inputs } = data; + + // const addon = inputs.tepmplate?.localPath ? ` ${chalk().gray(inputs.tepmplate?.localPath)}` : ''; + const tempString = inputs.tepmplate?.localPath || `${inputs.tepmplate?.packageName}@${inputs.tepmplate?.version}`; + + const highlight = chalk().bold; + + const str = ` Generated Project Summary: + ------------------------- + Project Name (folder): ${highlight(inputs.projectName)} + Workspace: ${highlight(inputs.workspaceID)} + App Title: ${highlight(inputs.appTitle)} + App Version: ${highlight(inputs.appVersion)} + App ID: ${highlight(inputs.appID)} + Project Template: ${highlight(tempString)} + Git Enabled: ${highlight(inputs.confirmEnableGit)} + Enabled Platforms: ${highlight((inputs.supportedPlatforms || []).join(', '))} + ------------------------- + ${chalk().green('✔ Your project is ready!')} Run it with: +${chalk().bold(` + cd ${inputs.projectName} + npx rnv run`)}`; + + return str; +}; + const findEngineKeyById = (id: string) => { const c = getContext(); const engineTemplates = c.files.rnvConfigTemplates.config?.engineTemplates; diff --git a/packages/engine-core/src/tasks/global/new/questions/appID.ts b/packages/engine-core/src/tasks/global/new/questions/appID.ts index c12e9437ed..2fa4fe973a 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appID.ts +++ b/packages/engine-core/src/tasks/global/new/questions/appID.ts @@ -2,9 +2,10 @@ import { getContext } from '@rnv/core'; import type { NewProjectData } from '../types'; import { validateAndAssign } from '../utils'; -export const inquiryAppID = async (data: NewProjectData) => { +const Question = async (data: NewProjectData): Promise => { const c = getContext(); const { id, ci } = c.program; + const { inputs } = data; const validator = (appId: string) => (typeof appId === 'string' && !!appId.match(/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/)) || 'Please enter a valid app ID (com.test.app)'; @@ -15,8 +16,8 @@ export const inquiryAppID = async (data: NewProjectData) => { validFn: validator, name: 'inputAppID', defaultVal: () => { - data.inputAppID = `com.mycompany.${data.inputProjectName?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; - return data.inputAppID; + inputs.appID = `com.mycompany.${inputs.projectName?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()}`; + return inputs.appID; }, message: "What's your App ID?", warning: `Command contains invalid appId : ${id}`, @@ -24,5 +25,7 @@ export const inquiryAppID = async (data: NewProjectData) => { ci ); - data.inputAppID = result ? result.replace(/\s+/g, '-').toLowerCase() : data.inputAppID; + inputs.appID = result ? result.replace(/\s+/g, '-').toLowerCase() : inputs.appID; }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts index f2b143c887..36b6ec0bdd 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts +++ b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts @@ -2,7 +2,7 @@ import { getContext } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue, validateAndAssign } from '../utils'; -export const inquiryAppTitle = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); const { title, ci } = c.program; const validator = (val: string) => checkInputValue(val) || 'Please enter a title'; @@ -19,6 +19,7 @@ export const inquiryAppTitle = async (data: NewProjectData) => { ci ); - data.inputAppTitle = result; - data.appTitle = data.inputAppTitle || data.defaults.appTitle; + data.inputs.appTitle = result || data.defaults.appTitle; }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index 8babc91cfc..302452f9be 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -10,10 +10,10 @@ import { import type { NewProjectData } from '../types'; import path from 'path'; -export const inquiryApplyTemplate = async (data: NewProjectData) => { +const Question = async (data: NewProjectData): Promise => { const c = getContext(); - const tplName = data.inputs.tepmplate.name; + const tplName = data.inputs.tepmplate?.packageName; if (!tplName) { return Promise.reject('Template not selected'); } @@ -78,3 +78,5 @@ export const inquiryApplyTemplate = async (data: NewProjectData) => { // } // } }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts index 7e3fde53d1..a575004880 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts @@ -1,33 +1,37 @@ -import { chalk, getContext, inquirerPrompt, logInfo, updateRenativeConfigs, writeFileSync } from '@rnv/core'; +import { chalk, getContext, inquirerPrompt, logInfo, writeFileSync } from '@rnv/core'; import type { NewProjectData } from '../types'; -export const inquiryBookmarkTemplate = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); - if (!data.inputs.tepmplate.name) { + const { inputs } = data; + + if (!inputs.tepmplate?.packageName) { return Promise.reject('Template not selected'); } const configFile = c.files.workspace.config || {}; - - const defProjTemplates = c.files.rnvConfigTemplates.config?.projectTemplates || {}; - const wsProjTemplates = configFile.projectTemplates || {}; - - const allKeys = Object.keys(defProjTemplates).concat(Object.keys(wsProjTemplates)); - - if (!Object.keys(defProjTemplates).includes(data.inputs.tepmplate.name) || !!data.inputs.tepmplate.path) { + // const defProjTemplates = c.files.rnvConfigTemplates.config?.projectTemplates || {}; + // const wsProjTemplates = configFile.projectTemplates || {}; + const projTemplates = c.buildConfig.projectTemplates || {}; + const allKeys = Object.keys(projTemplates); + + if ( + (!allKeys.includes(inputs.tepmplate.packageName) || !!inputs.tepmplate.localPath) && + inputs.tepmplate.type !== 'existing' + ) { const { confirmAddTemplate } = await inquirerPrompt({ name: 'confirmAddTemplate', type: 'confirm', - message: `Would you like to add ${chalk().bold(data.inputs.tepmplate.name)} to your ${ - data.optionWorkspaces.selectedOption + message: `Would you like to add ${chalk().bold(inputs.tepmplate.packageName)} to your ${ + inputs.workspaceID } workspace template list?`, }); const { templateName } = await inquirerPrompt({ name: 'templateName', type: 'input', - default: `${data.inputs.tepmplate.name} (local)`, + default: `${inputs.tepmplate.packageName} (local)`, validate: (v) => !allKeys.includes(v) || 'Name already exists', message: 'Add short description', }); @@ -38,15 +42,16 @@ export const inquiryBookmarkTemplate = async (data: NewProjectData) => { configFile.projectTemplates = {}; } configFile.projectTemplates[templateName] = { - packageName: data.inputs.tepmplate.name, - localPath: data.inputs.tepmplate.path, - description: data.inputs.tepmplate.description, + packageName: inputs.tepmplate.packageName, + localPath: inputs.tepmplate.localPath, + description: inputs.tepmplate.description, }; writeFileSync(c.paths.workspace.config, configFile); - await updateRenativeConfigs(); logInfo(`Updating ${c.paths.workspace.config}...DONE`); } } } }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts index 65a02113b8..49e7b94a1a 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts @@ -13,9 +13,9 @@ type QuestionResults = Record< } >; -export const inquiryBootstrapQuestions = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); - data.renativeTemplateConfigExt = {}; + data.inputs.bootstrapQuestions = {}; const bootstrapQuestions = data.files.template.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; const results: QuestionResults = {}; const providedAnswers: Record = {}; @@ -45,7 +45,7 @@ export const inquiryBootstrapQuestions = async (data: NewProjectData) => { logDebug('setting', targetKey, objValue); if (targetKey) { - lSet(data.renativeTemplateConfigExt, targetKey, objValue); + lSet(data.inputs.bootstrapQuestions, targetKey, objValue); } }); }; @@ -112,3 +112,5 @@ const interactiveQuestion = async ( } } }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts b/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts index 44a2b657a8..6dd7b6c8d2 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts @@ -11,10 +11,11 @@ import { import type { NewProjectData } from '../types'; import path from 'path'; -export const inquiryGit = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); const { gitEnabled, ci } = c.program; - data.gitEnabled = gitEnabled === 'true' || gitEnabled === true; + const { inputs } = data; + inputs.confirmEnableGit = !!gitEnabled; if (gitEnabled === undefined && !ci) { const response = await inquirerPrompt({ @@ -23,11 +24,15 @@ export const inquiryGit = async (data: NewProjectData) => { message: 'Do you want to set-up git in your new project?', }); - data.gitEnabled = response.gitEnabled; + inputs.confirmEnableGit = response.gitEnabled; + } + + if (inputs.confirmEnableGit) { + await configureGit(); } }; -export const configureGit = async () => { +const configureGit = async () => { const c = getContext(); const projectPath = c.paths.project.dir; logTask(`configureGit:${projectPath}`); @@ -36,10 +41,13 @@ export const configureGit = async () => { logInfo('Your project does not have a git repo. Creating one...DONE'); if (commandExistsSync('git')) { await executeAsync('git init', { cwd: projectPath }); - await executeAsync('git add -A', { cwd: projectPath }); - await executeAsync('git commit -m "Initial"', { cwd: projectPath }); + // NOTE: let user do this manually + // await executeAsync('git add -A', { cwd: projectPath }); + // await executeAsync('git commit -m "Initial"', { cwd: projectPath }); } else { logWarning("We tried to create a git repo inside your project but you don't seem to have git installed"); } } }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts index e02d931b24..8cafd97a4b 100644 --- a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts +++ b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts @@ -1,18 +1,10 @@ -import { - chalk, - // getContext, - // inquirerPrompt, - printArrIntoBox, - printBoxEnd, - printBoxStart, - printIntoBox, -} from '@rnv/core'; import type { NewProjectData } from '../types'; +import { generateProjectOverview } from '../projectGenerator'; -export const inquiryConfirm = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { // const c = getContext(); // const { ci } = c.program; - _prepareProjectOverview(data); + generateProjectOverview(data); // if (!ci) { // const { confirm } = await inquirerPrompt({ // type: 'confirm', @@ -27,25 +19,4 @@ export const inquiryConfirm = async (data: NewProjectData) => { // } }; -const _prepareProjectOverview = (data: NewProjectData) => { - const tempString = `${data.inputs.tepmplate.name}@${data.inputs.tepmplate.version}`; - - const highlight = chalk().green; - - let str = printBoxStart('🚀 ReNative Project Generator'); - str += printIntoBox(''); - str += printIntoBox(`Project Name (folder): ${highlight(data.projectName)}`); - str += printIntoBox(`Workspace: ${highlight(data.optionWorkspaces.selectedOption)}`); - str += printIntoBox(`Project Title: ${highlight(data.appTitle)}`); - str += printIntoBox(`Project Version: ${highlight(data.inputVersion)}`); - str += printIntoBox(`App ID: ${highlight(data.inputAppID)}`); - str += printIntoBox(`Project Template: ${highlight(tempString)}`); - str += printIntoBox(`Git Enabled: ${highlight(data.gitEnabled)}`); - str += printIntoBox(''); - str += printIntoBox('Project Platforms:'); - str += printArrIntoBox(data.optionPlatforms.selectedOptions || []); - str += printBoxEnd(); - str += '\n'; - - data.confirmString = str; -}; +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts index b1ac0d50d7..5a199bf289 100644 --- a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts +++ b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts @@ -1,7 +1,7 @@ import { fsExistsSync, getContext, inquirerPrompt, logWarning, removeDirs } from '@rnv/core'; import { NewProjectData } from '../types'; -export const inquiryHasNodeModules = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); if (fsExistsSync(c.paths.project.nodeModulesDir)) { logWarning( @@ -12,9 +12,11 @@ export const inquiryHasNodeModules = async (data: NewProjectData) => { type: 'confirm', message: 'Are you sure you want to continue?', }); - data.confirmDeleteNodeModules = confirmDeleteNodeModules; + data.inputs.confirmDeleteNodeModules = confirmDeleteNodeModules; if (confirmDeleteNodeModules) { await removeDirs([c.paths.project.nodeModulesDir]); } } }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index d618b55264..447f2da567 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -1,5 +1,4 @@ import { - ConfigFileBuildConfig, NpmPackageFile, RnvFileName, RnvFolderName, @@ -19,23 +18,18 @@ import { mkdirSync, readObjectSync, } from '@rnv/core'; -import type { NewProjectData } from '../types'; +import type { NewProjectData, TemplateOption } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; import { saveProgressIntoProjectConfig } from '../projectGenerator'; import { merge } from 'lodash'; -type TemplateOption = { - name: string; - value: { - key: 'existing' | 'custom' | 'local' | 'none'; - } & Required['projectTemplates'][string]; -}; +const Question = async (data: NewProjectData) => { + const { inputs, defaults, files } = data; -export const inquiryInstallTemplate = async (data: NewProjectData) => { - const customTemplate: TemplateOption = { name: 'Custom Template (npm)...', value: { key: 'custom' } }; - const localTemplate: TemplateOption = { name: 'Local Template...', value: { key: 'local' } }; - const noTemplate: TemplateOption = { name: 'No Template (blank project)', value: { key: 'none' } }; + const customTemplate: TemplateOption = { name: 'Custom Template (npm)...', value: { type: 'custom' } }; + const localTemplate: TemplateOption = { name: 'Local Template...', value: { type: 'local' } }; + const noTemplate: TemplateOption = { name: 'No Template (blank project)', value: { type: 'none' } }; const c = getContext(); const { templateVersion, projectTemplate } = c.program; @@ -47,7 +41,7 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { const value = projectTemplates[k]; options.push({ name: `${k} ${chalk().grey(`- ${value.localPath || value.description}`)}`, - value: { ...value, key: 'existing' }, + value: { ...value, type: 'existing' }, }); }); @@ -56,43 +50,47 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { options.push(customTemplate); options.push(localTemplate); options.push(noTemplate); - let selectedInputTemplate; + // let selectedInputTemplate; let localTemplatePath: string | undefined; + + inputs.tepmplate = {}; + if (checkInputValue(projectTemplate)) { - selectedInputTemplate = projectTemplate; + inputs.tepmplate.packageName = projectTemplate; } else { const iRes = await inquirerPrompt({ name: 'inputTemplate', type: 'list', message: 'What template to use?', - default: data.defaults.templateName, + default: defaults.templateName, loop: false, choices: options, }); const result: TemplateOption['value'] = iRes.inputTemplate; + inputs.tepmplate.type = result.type; - if (result.key === 'custom') { + if (result.type === 'custom') { const { inputTemplateCustom } = await inquirerPrompt({ name: 'inputTemplateCustom', type: 'input', message: 'NPM package name:', }); - selectedInputTemplate = inputTemplateCustom; - } else if (result.key === 'local') { + inputs.tepmplate.packageName = inputTemplateCustom; + } else if (result.type === 'local') { const { inputTemplateLocal } = await inquirerPrompt({ name: 'inputTemplateLocal', type: 'input', message: 'Path (absolute):', }); localTemplatePath = inputTemplateLocal; - } else if (result.key === 'none') { + } else if (result.type === 'none') { // TODO: add support for no templates return Promise.reject('No templates NOT SUPPORTED YET'); - } else if (result.key === 'existing') { + } else if (result.type === 'existing') { if (result.localPath) { localTemplatePath = result.localPath; } else { - selectedInputTemplate = result.packageName; + inputs.tepmplate.packageName = result.packageName; } } } @@ -117,9 +115,12 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { return Promise.reject(`Invalid package ${localTemplatePkgPath} missing name field`); } - data.inputs.tepmplate.name = pkg.name; - data.inputs.tepmplate.version = pkg.version; - data.inputs.tepmplate.path = localTemplatePath; + inputs.tepmplate.packageName = pkg.name; + inputs.tepmplate.version = pkg.version; + inputs.tepmplate.localPath = localTemplatePath; + + if (!inputs.tepmplate) return; + const nmTemplatePath = path.join(nmDir, pkg?.name); logInfo(`Found local template: ${pkg.name}@${pkg.version}`); @@ -149,16 +150,20 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { } }); + if (!inputs.tepmplate.packageName) { + return; + } + // NOTE: this is a workaround for npm/yarn bug where manually added packages are overriden on next install - const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${data.inputs.tepmplate.name}`; - data.files.project.packageJson = merge(data.files.project.packageJson, { + const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${inputs.tepmplate.packageName}`; + files.project.packageJson = merge(files.project.packageJson, { devDependencies: { - [data.inputs.tepmplate.name]: filePath, + [inputs.tepmplate?.packageName]: filePath, }, }); - data.files.project.renativeConfig = merge(data.files.project.renativeConfig, { + files.project.renativeConfig = merge(files.project.renativeConfig, { templates: { - [data.inputs.tepmplate.name]: { + [inputs.tepmplate.packageName]: { version: filePath, }, }, @@ -170,19 +175,16 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { cwd: c.paths.project.dir, }); } else { - data.inputs.tepmplate.name = selectedInputTemplate; - - let inputTemplateVersion; if (checkInputValue(templateVersion)) { - inputTemplateVersion = templateVersion; + inputs.tepmplate.version = templateVersion; } else { - inputTemplateVersion = await listAndSelectNpmVersion(data.inputs.tepmplate.name || ''); + inputs.tepmplate.version = await listAndSelectNpmVersion(inputs.tepmplate.packageName || ''); } - data.inputs.tepmplate.version = inputTemplateVersion; - await executeAsync( - `${isYarnInstalled() ? 'yarn' : 'npm'} add ${selectedInputTemplate}@${inputTemplateVersion} --dev`, + `${isYarnInstalled() ? 'yarn' : 'npm'} add ${inputs.tepmplate.packageName}@${ + inputs.tepmplate.version + } --dev`, { cwd: c.paths.project.dir, } @@ -190,15 +192,12 @@ export const inquiryInstallTemplate = async (data: NewProjectData) => { // Check if node_modules folder exists if (!fsExistsSync(nmDir)) { return Promise.reject( - `${ - isYarnInstalled() ? 'yarn' : 'npm' - } add ${selectedInputTemplate}@${inputTemplateVersion} : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` + `${isYarnInstalled() ? 'yarn' : 'npm'} add ${inputs.tepmplate.packageName}@${ + inputs.tepmplate.version + } : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` ); } } - - // Add rnv to package.json - // await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add rnv@${c.rnvVersion}`, { - // cwd: c.paths.project.dir, - // }); }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts b/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts index 7269e71d07..1dfdffaa39 100644 --- a/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts +++ b/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts @@ -1,7 +1,7 @@ import { fsExistsSync, getContext, inquirerPrompt, logWarning } from '@rnv/core'; import { NewProjectData } from '../types'; -export const inquiryIsRenativeProject = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); if (fsExistsSync(c.paths.project.config)) { logWarning(`You are in ReNative project. Found: ${c.paths.project.config}`); @@ -10,9 +10,11 @@ export const inquiryIsRenativeProject = async (data: NewProjectData) => { type: 'confirm', message: 'Are you sure you want to continue?', }); - data.confirmInRnvProject = confirmInRnvProject; + data.inputs.confirmInRnvProject = confirmInRnvProject; if (!confirmInRnvProject) { return Promise.reject('Cancelled'); } } }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index 84f4c98536..e5c543e57e 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -12,11 +12,12 @@ import type { NewProjectData } from '../types'; import path from 'path'; import { checkInputValue } from '../utils'; -export const inquiryProjectName = async (data: NewProjectData) => { +const Question = async (data: NewProjectData): Promise => { const c = getContext(); const { projectName } = c.program; + let plainProjectName: string | undefined; if (checkInputValue(projectName)) { - data.inputProjectName = projectName; + plainProjectName = projectName; } else { const inputProjectNameObj = await inquirerPrompt({ name: 'inputProjectName', @@ -25,17 +26,17 @@ export const inquiryProjectName = async (data: NewProjectData) => { validate: (value) => checkInputValue(value), message: "What's your project Name? (folder will be created)", }); - data.inputProjectName = inputProjectNameObj?.inputProjectName; + plainProjectName = inputProjectNameObj?.inputProjectName; } - data.projectName = data.inputProjectName?.replace?.(/(\s+)/g, '_'); - data.packageName = data.inputProjectName?.replace(/\s+/g, '-').toLowerCase(); - c.paths.project.dir = path.join(c.paths.user.currentDir, data.projectName || ''); + data.inputs.projectName = plainProjectName?.replace?.(/(\s+)/g, '_'); + data.inputs.packageName = plainProjectName?.replace(/\s+/g, '-').toLowerCase(); + c.paths.project.dir = path.join(c.paths.user.currentDir, data.inputs.projectName || ''); c.paths.project.package = path.join(c.paths.project.dir, RnvFileName.package); c.paths.project.config = path.join(c.paths.project.dir, RnvFileName.renative); - data.files.project.renativeConfig.projectName = data.projectName; - data.files.project.packageJson.name = data.packageName; + data.files.project.renativeConfig.projectName = data.inputs.projectName; + data.files.project.packageJson.name = data.inputs.packageName; if (fsExistsSync(c.paths.project.dir)) { logWarning(`Folder ${c.paths.project.dir} already exists. RNV will override it.`); @@ -55,3 +56,5 @@ export const inquiryProjectName = async (data: NewProjectData) => { mkdirSync(c.paths.project.dir); }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts index 36f19b0ccc..6bbbf94e4f 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts @@ -4,7 +4,7 @@ import { validateAndAssign } from '../utils'; import semver from 'semver'; import { merge } from 'lodash'; -export const inquiryAppVersion = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); const { appVersion, ci } = c.program; @@ -23,6 +23,8 @@ export const inquiryAppVersion = async (data: NewProjectData) => { ci ); - data.inputVersion = result || data.defaults.appVersion; - data.files.project.packageJson = merge(data.files.project.packageJson, { version: data.inputVersion }); + data.inputs.appVersion = result || data.defaults.appVersion; + data.files.project.packageJson = merge(data.files.project.packageJson, { version: data.inputs.appVersion }); }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts index 370674591b..3cc10e0e0d 100644 --- a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -1,10 +1,11 @@ -import { PlatformKey, RnvPlatforms, getContext, inquirerPrompt, logError } from '@rnv/core'; +import { RnvPlatforms, getContext, inquirerPrompt, logError } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue } from '../utils'; -export const inquirySupportedPlatforms = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); const { platform } = c.program; + const { inputs, files } = data; // TODO: grouped platforms // const orderedPlatforms = [ @@ -39,23 +40,23 @@ export const inquirySupportedPlatforms = async (data: NewProjectData) => { // ] const supportedPlatforms = - data.files.template.renativeTemplateConfig?.defaults?.supportedPlatforms || - data.files.template.renativeConfig?.defaults?.supportedPlatforms || + files.template.renativeTemplateConfig?.defaults?.supportedPlatforms || + files.template.renativeConfig?.defaults?.supportedPlatforms || []; supportedPlatforms.sort((a, b) => RnvPlatforms.indexOf(a) - RnvPlatforms.indexOf(b)); const selectedPlatforms = - data.files.template.renativeTemplateConfig?.bootstrapConfig?.defaultSelectedPlatforms || supportedPlatforms; + files.template.renativeTemplateConfig?.bootstrapConfig?.defaultSelectedPlatforms || supportedPlatforms; if (supportedPlatforms.length === 0) { logError( - `Template ${data.selectedInputTemplate} does not seem to export any default platforms to support. contact the author.` + `Template ${inputs.tepmplate?.packageName} does not seem to export any default platforms to support. contact the author.` ); } if (checkInputValue(platform)) { - data.inputSupportedPlatforms = platform.split(','); + inputs.supportedPlatforms = platform.split(','); } else { const answer = await inquirerPrompt({ name: 'inputSupportedPlatforms', @@ -66,7 +67,8 @@ export const inquirySupportedPlatforms = async (data: NewProjectData) => { default: selectedPlatforms, choices: supportedPlatforms, }); - data.inputSupportedPlatforms = answer?.inputSupportedPlatforms; + inputs.supportedPlatforms = answer?.inputSupportedPlatforms || []; } - data.optionPlatforms.selectedOptions = (data.inputSupportedPlatforms || []) as Array; }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/workspace.ts b/packages/engine-core/src/tasks/global/new/questions/workspace.ts index fbe4a44b0d..d5eb7b4a5a 100644 --- a/packages/engine-core/src/tasks/global/new/questions/workspace.ts +++ b/packages/engine-core/src/tasks/global/new/questions/workspace.ts @@ -1,29 +1,28 @@ -import { getContext, inquirerPrompt, updateRenativeConfigs } from '@rnv/core'; +import { getContext, getWorkspaceOptions, inquirerPrompt } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue } from '../utils'; -export const inquiryWorkspace = async (data: NewProjectData) => { +const Question = async (data: NewProjectData) => { const c = getContext(); const { ci, workspace } = c.program; - let inputWorkspace; if (checkInputValue(workspace)) { - inputWorkspace = workspace; + data.inputs.workspaceID = workspace; } else if (ci) { - inputWorkspace = data.defaults.workspaceID; + data.inputs.workspaceID = data.defaults.workspaceID; } else { const answer = await inquirerPrompt({ name: 'inputWorkspace', type: 'list', message: 'What workspace to use?', default: data.defaults.workspaceID, - choices: data.optionWorkspaces.keysAsArray, + choices: getWorkspaceOptions().keysAsArray, }); - inputWorkspace = answer?.inputWorkspace; + data.inputs.workspaceID = answer?.inputWorkspace; } - data.optionWorkspaces.selectedOption = inputWorkspace; - c.runtime.selectedWorkspace = inputWorkspace; - data.files.project.renativeConfig.workspaceID = inputWorkspace; - await updateRenativeConfigs(); + c.runtime.selectedWorkspace = data.inputs.workspaceID; + data.files.project.renativeConfig.workspaceID = data.inputs.workspaceID; }; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 4e1571dc04..331ab70991 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -1,41 +1,45 @@ -import { RnvTaskOptionPresets, chalk, logSuccess, logTask, RnvTask, RnvTaskName } from '@rnv/core'; -import { inquiryBootstrapQuestions } from './questions/bootstrapQuestions'; -import { inquiryGit } from './questions/confirmGit'; -import { inquiryIsRenativeProject } from './questions/isRenativeProject'; -import { inquiryHasNodeModules } from './questions/hasNodeModules'; -import { inquiryConfirm } from './questions/confirmOverview'; -import { inquiryProjectName } from './questions/projectName'; -import { inquiryWorkspace } from './questions/workspace'; -import { inquirySupportedPlatforms } from './questions/supportedPlatforms'; +import { RnvTaskOptionPresets, logTask, RnvTask, RnvTaskName, updateRenativeConfigs } from '@rnv/core'; +import inquiryBootstrapQuestions from './questions/bootstrapQuestions'; +import inquiryGit from './questions/confirmGit'; +import inquiryIsRenativeProject from './questions/isRenativeProject'; +import inquiryHasNodeModules from './questions/hasNodeModules'; +import inquiryConfirm from './questions/confirmOverview'; +import inquiryProjectName from './questions/projectName'; +import inquiryWorkspace from './questions/workspace'; +import inquirySupportedPlatforms from './questions/supportedPlatforms'; import { generateNewProject, initNewProject, saveProgressIntoProjectConfig, telemetryNewProject, } from './projectGenerator'; -import { inquiryAppTitle } from './questions/appTitle'; -import { inquiryAppID } from './questions/appID'; -import { inquiryAppVersion } from './questions/projectVersion'; -import { inquiryInstallTemplate } from './questions/installTemplate'; -import { inquiryApplyTemplate } from './questions/applyTemplate'; -import { inquiryBookmarkTemplate } from './questions/bookmarkTemplate'; +import inquiryAppTitle from './questions/appTitle'; +import inquiryAppID from './questions/appID'; +import inquiryAppVersion from './questions/projectVersion'; +import inquiryInstallTemplate from './questions/installTemplate'; +import inquiryApplyTemplate from './questions/applyTemplate'; +import inquiryBookmarkTemplate from './questions/bookmarkTemplate'; import { processChdirToProject } from './utils'; const taskNew = async () => { logTask('taskNew'); // Initialize Project const payload = await initNewProject(); + // Interactive Questions Required await inquiryProjectName(payload); - await inquiryWorkspace(payload); - await processChdirToProject(); await inquiryIsRenativeProject(payload); await inquiryHasNodeModules(payload); + await inquiryWorkspace(payload); + + await saveProgressIntoProjectConfig(payload); + await processChdirToProject(); + await inquiryInstallTemplate(payload); await inquiryApplyTemplate(payload); await saveProgressIntoProjectConfig(payload); + await inquiryBookmarkTemplate(payload); - // Interactive Questions Optional await inquiryAppTitle(payload); await inquiryAppID(payload); await inquiryAppVersion(payload); @@ -46,16 +50,11 @@ const taskNew = async () => { await inquiryGit(payload); await inquiryConfirm(payload); // Generate Project + await updateRenativeConfigs(); await generateNewProject(payload); // Telementry await telemetryNewProject(payload); - logSuccess( - `Your project is ready! navigate to project ${chalk().bold(`cd ${payload.projectName}`)} and run ${chalk().bold( - 'npx rnv run' - )} to see magic happen!` - ); - return true; }; diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index 9e46ee8bc7..aeafb1d1ae 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -1,39 +1,13 @@ -import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate, NpmPackageFile, PlatformKey } from '@rnv/core'; +import type { + ConfigFileApp, + ConfigFileBuildConfig, + ConfigFileProject, + ConfigFileTemplate, + NpmPackageFile, + PlatformKey, +} from '@rnv/core'; export type NewProjectData = { - appTitle?: string; - inputAppTitle?: string; - packageName?: string; - inputProjectName?: string; - teamID?: string; - inputAppID?: string; - inputVersion?: string; - inputTemplate?: string; - projectName?: string; - optionWorkspaces: { - selectedOption?: string; - valuesAsObject?: Record< - string, - { - title: string; - key: string; - } - >; - valuesAsArray?: Array; - keysAsArray?: Array; - }; - gitEnabled?: boolean; - optionPlatforms: { - selectedOptions?: Array; - }; - confirmString?: string; - inputSupportedPlatforms?: Array; - inputWorkspace?: string; - selectedInputTemplate?: string; - renativeTemplateConfigExt?: any; - confirmDeleteNodeModules?: boolean; - confirmInRnvProject?: boolean; - // ------------------------------- defaults: { appVersion: string; templateName: string; @@ -42,12 +16,18 @@ export type NewProjectData = { workspaceID: string; }; inputs: { - tepmplate: { - name: string; - version?: string; - description?: string; - path?: string; - }; + bootstrapQuestions?: any; + confirmDeleteNodeModules?: boolean; + confirmInRnvProject?: boolean; + confirmEnableGit?: boolean; + appID?: string; + appVersion?: string; + projectName?: string; + appTitle?: string; + workspaceID?: string; + packageName?: string; + tepmplate?: TemplateOptionValue; + supportedPlatforms?: Array; }; files: { template: { @@ -61,3 +41,13 @@ export type NewProjectData = { }; }; }; + +type TemplateOptionValue = { + type?: 'existing' | 'custom' | 'local' | 'none'; + version?: string; +} & Required['projectTemplates'][string]; + +export type TemplateOption = { + name: string; + value: TemplateOptionValue; +}; From bd41e6e8ccca72be4e539270bbf0f0a40a7682d2 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 17:08:49 +0100 Subject: [PATCH 093/175] app config modifier --- .../src/tasks/global/new/projectGenerator.ts | 29 ++++++++++++++++--- .../src/tasks/global/new/taskNew.ts | 12 ++++---- .../appConfigs/app/renative.json | 6 +--- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index b453f3f7c9..7efd38bee8 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -1,4 +1,5 @@ import { + ConfigFileApp, PlatformKey, RnvFileName, applyTemplate, @@ -7,8 +8,11 @@ import { generateLocalJsonSchemas, getApi, getContext, + listAppConfigsFoldersSync, logDebug, + logInfo, logToSummary, + readObjectSync, updateRenativeConfigs, writeFileSync, } from '@rnv/core'; @@ -54,10 +58,6 @@ export const initNewProject = async () => { }; export const generateNewProject = async (data: NewProjectData) => { - // logTask( - // `generateNewProject:${data.optionTemplates.selectedOption}:${data.optionTemplates.selectedVersion}`, - // chalk().grey - // ); const { inputs, files } = data; if (!inputs.tepmplate?.version) { @@ -124,6 +124,27 @@ export const generateNewProject = async (data: NewProjectData) => { await configureTemplateFiles(); await generateLocalJsonSchemas(); + // Update appConfigs with new appTitle and appID + const appConfigs = listAppConfigsFoldersSync(true); + if (appConfigs && appConfigs.length > 0) { + appConfigs.forEach((appConfigID) => { + const appCnfPath = path.join(c.paths.project.appConfigsDir, appConfigID, RnvFileName.renative); + const appConfig = readObjectSync(appCnfPath); + if (appConfig) { + appConfig.common = appConfig.common || {}; + appConfig.common.title = inputs.appTitle; + appConfig.common.id = inputs.appID; + appConfig.common.description = `My awesome ${inputs.appTitle} app!`; + logInfo( + `Updating appConfig ${chalk().bold(appConfigID)} with title: ${chalk().bold( + inputs.appTitle + )} and id: ${chalk().bold(inputs.appID)}` + ); + writeFileSync(appCnfPath, appConfig); + } + }); + } + logToSummary(generateProjectOverview(data)); }; diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 331ab70991..79547bae92 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -7,12 +7,6 @@ import inquiryConfirm from './questions/confirmOverview'; import inquiryProjectName from './questions/projectName'; import inquiryWorkspace from './questions/workspace'; import inquirySupportedPlatforms from './questions/supportedPlatforms'; -import { - generateNewProject, - initNewProject, - saveProgressIntoProjectConfig, - telemetryNewProject, -} from './projectGenerator'; import inquiryAppTitle from './questions/appTitle'; import inquiryAppID from './questions/appID'; import inquiryAppVersion from './questions/projectVersion'; @@ -20,6 +14,12 @@ import inquiryInstallTemplate from './questions/installTemplate'; import inquiryApplyTemplate from './questions/applyTemplate'; import inquiryBookmarkTemplate from './questions/bookmarkTemplate'; import { processChdirToProject } from './utils'; +import { + generateNewProject, + initNewProject, + saveProgressIntoProjectConfig, + telemetryNewProject, +} from './projectGenerator'; const taskNew = async () => { logTask('taskNew'); diff --git a/packages/template-starter/appConfigs/app/renative.json b/packages/template-starter/appConfigs/app/renative.json index 3553458278..4505e275e5 100644 --- a/packages/template-starter/appConfigs/app/renative.json +++ b/packages/template-starter/appConfigs/app/renative.json @@ -3,12 +3,8 @@ "extendsTemplate": "@rnv/template-starter/appConfigs/base/renative.json", "id": "app", "common": { - "id": "com.app", - "description": "ReNative App", - "buildSchemes": {}, "runtime": { "welcomeMessage": "Hello ReNative!" } - }, - "platforms": {} + } } \ No newline at end of file From 73f6392adc2caabd2721926c09fc3987aa1191d5 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 18:08:13 +0100 Subject: [PATCH 094/175] update bootstrap logic --- .../global/new/__tests__/taskNew.test.ts | 14 +-- .../src/tasks/global/new/projectGenerator.ts | 92 ++++--------------- .../tasks/global/new/questions/appConfigs.ts | 39 ++++++++ .../global/new/questions/confirmOverview.ts | 22 ----- .../global/new/questions/installTemplate.ts | 11 ++- .../src/tasks/global/new/taskNew.ts | 40 +++++--- .../engine-core/src/tasks/global/new/types.ts | 3 +- 7 files changed, 98 insertions(+), 123 deletions(-) create mode 100644 packages/engine-core/src/tasks/global/new/questions/appConfigs.ts delete mode 100644 packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts diff --git a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts index 34acfbd3d4..74e2e80e2b 100644 --- a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts @@ -1,19 +1,13 @@ import { getContext, createRnvContext } from '@rnv/core'; import taskNew from '../taskNew'; -import { - generateNewProject, - initNewProject, - saveProgressIntoProjectConfig, - telemetryNewProject, -} from '../projectGenerator'; +import { initNewProject, saveProgressIntoProjectConfig, telemetryNewProject } from '../projectGenerator'; import { NewProjectData } from '../types'; import { processChdirToProject } from '../utils'; - +import inquiryAppConfigs from '../questions/appConfigs'; import inquiryBootstrapQuestions from '../questions/bootstrapQuestions'; import inquiryGit from '../questions/confirmGit'; import inquiryIsRenativeProject from '../questions/isRenativeProject'; import inquiryHasNodeModules from '../questions/hasNodeModules'; -import inquiryConfirm from '../questions/confirmOverview'; import inquiryProjectName from '../questions/projectName'; import inquiryWorkspace from '../questions/workspace'; import inquirySupportedPlatforms from '../questions/supportedPlatforms'; @@ -69,7 +63,6 @@ test('Execute task.rnv.new', async () => { project: { renativeConfig: {}, packageJson: {}, - renativeAppConfig: {}, }, template: { renativeTemplateConfig: {}, @@ -98,8 +91,7 @@ test('Execute task.rnv.new', async () => { expect(inquirySupportedPlatforms).toHaveBeenCalledWith(payload); expect(inquiryBootstrapQuestions).toHaveBeenCalledWith(payload); expect(inquiryGit).toHaveBeenCalledWith(payload); - expect(inquiryConfirm).toHaveBeenCalledWith(payload); expect(inquiryBookmarkTemplate).toHaveBeenCalledWith(payload); - expect(generateNewProject).toHaveBeenCalledWith(payload); + expect(inquiryAppConfigs).toHaveBeenCalledWith(payload); expect(telemetryNewProject).toHaveBeenCalledWith(payload); }); diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/projectGenerator.ts index 7efd38bee8..7b1a52d2cb 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/projectGenerator.ts @@ -1,18 +1,10 @@ import { - ConfigFileApp, PlatformKey, RnvFileName, - applyTemplate, chalk, - configureTemplateFiles, - generateLocalJsonSchemas, getApi, getContext, - listAppConfigsFoldersSync, logDebug, - logInfo, - logToSummary, - readObjectSync, updateRenativeConfigs, writeFileSync, } from '@rnv/core'; @@ -44,7 +36,6 @@ export const initNewProject = async () => { project: { renativeConfig: {}, packageJson: {}, - renativeAppConfig: {}, }, template: { renativeTemplateConfig: {}, @@ -57,40 +48,34 @@ export const initNewProject = async () => { return data; }; -export const generateNewProject = async (data: NewProjectData) => { +export const configureConfigOverrides = async (data: NewProjectData) => { const { inputs, files } = data; - - if (!inputs.tepmplate?.version) { - return Promise.reject('No template version selected'); - } - if (!files.template.renativeTemplateConfig) { - return Promise.reject('No renativeTemplateConfig found'); - } - if (!inputs.tepmplate.packageName) { - return Promise.reject('Current template not selected!'); - } + const { renativeConfig } = files.project; const c = getContext(); - //TODO: TEMPORARY WORKAROUND this neds to use bootstrap_metadata to work properly - // common: { - // id: data.inputAppID || 'com.mycompany.myapp', - // title: data.inputAppTitle || 'My App', - // }, - const supPlats = inputs.supportedPlatforms || []; + // In case of copied config instead of extended we want to cleanup unused platforms + if (renativeConfig.platforms) { + Object.keys(renativeConfig.platforms).forEach((k) => { + const key = k as PlatformKey; + if (!supPlats.includes(key) && renativeConfig.platforms) { + delete renativeConfig.platforms[key]; + } + }); + } + // This is project config override only - const cnf = files.project.renativeConfig; - cnf.defaults = cnf.defaults || {}; - cnf.defaults.supportedPlatforms = supPlats; - cnf.engines = cnf.engines || {}; + renativeConfig.defaults = renativeConfig.defaults || {}; + renativeConfig.defaults.supportedPlatforms = supPlats; + renativeConfig.engines = renativeConfig.engines || {}; // This is merged config result const loadedConf = c.files.project.config; // Configure only required engines based on supportedPlatforms - const engines = loadedConf?.engines; + const engines = data.files.project.renativeConfig?.engines; if (engines) { // Remove unused engines based on selected platforms supPlats.forEach((k) => { @@ -99,53 +84,12 @@ export const generateNewProject = async (data: NewProjectData) => { if (selectedEngineId) { const selectedEngine = findEngineKeyById(selectedEngineId); - if (selectedEngine?.key && cnf.engines) { - cnf.engines[selectedEngine.key] = engines[selectedEngine.key]; + if (selectedEngine?.key && renativeConfig.engines) { + renativeConfig.engines[selectedEngine.key] = engines[selectedEngine.key]; } } }); } - - // In case of copied config instead of extended we want to cleanup unused platforms - if (cnf.platforms) { - Object.keys(cnf.platforms).forEach((k) => { - const key = k as PlatformKey; - if (!supPlats.includes(key) && cnf.platforms) { - delete cnf.platforms[key]; - } - }); - } - - // Save all progress into ./renative.json - await saveProgressIntoProjectConfig(data); - - // Now we can apply template - await applyTemplate(); - await configureTemplateFiles(); - await generateLocalJsonSchemas(); - - // Update appConfigs with new appTitle and appID - const appConfigs = listAppConfigsFoldersSync(true); - if (appConfigs && appConfigs.length > 0) { - appConfigs.forEach((appConfigID) => { - const appCnfPath = path.join(c.paths.project.appConfigsDir, appConfigID, RnvFileName.renative); - const appConfig = readObjectSync(appCnfPath); - if (appConfig) { - appConfig.common = appConfig.common || {}; - appConfig.common.title = inputs.appTitle; - appConfig.common.id = inputs.appID; - appConfig.common.description = `My awesome ${inputs.appTitle} app!`; - logInfo( - `Updating appConfig ${chalk().bold(appConfigID)} with title: ${chalk().bold( - inputs.appTitle - )} and id: ${chalk().bold(inputs.appID)}` - ); - writeFileSync(appCnfPath, appConfig); - } - }); - } - - logToSummary(generateProjectOverview(data)); }; export const telemetryNewProject = async (data: NewProjectData) => { diff --git a/packages/engine-core/src/tasks/global/new/questions/appConfigs.ts b/packages/engine-core/src/tasks/global/new/questions/appConfigs.ts new file mode 100644 index 0000000000..fd3066b34d --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/appConfigs.ts @@ -0,0 +1,39 @@ +import { + type ConfigFileApp, + getContext, + listAppConfigsFoldersSync, + readObjectSync, + logInfo, + chalk, + RnvFileName, + writeFileSync, +} from '@rnv/core'; +import type { NewProjectData } from '../types'; +import path from 'path'; + +const Question = async (data: NewProjectData): Promise => { + const c = getContext(); + const { inputs } = data; + // Update appConfigs with new appTitle and appID + const appConfigs = listAppConfigsFoldersSync(true); + if (appConfigs && appConfigs.length > 0) { + appConfigs.forEach((appConfigID) => { + const appCnfPath = path.join(c.paths.project.appConfigsDir, appConfigID, RnvFileName.renative); + const appConfig = readObjectSync(appCnfPath); + if (appConfig) { + appConfig.common = appConfig.common || {}; + appConfig.common.title = inputs.appTitle; + appConfig.common.id = inputs.appID; + appConfig.common.description = `My awesome ${inputs.appTitle} app!`; + logInfo( + `Updating appConfig ${chalk().bold(appConfigID)} with title: ${chalk().bold( + inputs.appTitle + )} and id: ${chalk().bold(inputs.appID)}` + ); + writeFileSync(appCnfPath, appConfig); + } + }); + } +}; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts b/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts deleted file mode 100644 index 8cafd97a4b..0000000000 --- a/packages/engine-core/src/tasks/global/new/questions/confirmOverview.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { NewProjectData } from '../types'; -import { generateProjectOverview } from '../projectGenerator'; - -const Question = async (data: NewProjectData) => { - // const c = getContext(); - // const { ci } = c.program; - generateProjectOverview(data); - // if (!ci) { - // const { confirm } = await inquirerPrompt({ - // type: 'confirm', - // name: 'confirm', - // message: `\n${data.confirmString}\nIs all this correct?`, - // }); - - // if (!confirm) { - // // TOOD: this should reset the whole process - // return; - // } - // } -}; - -export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index 447f2da567..b579078b86 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -37,12 +37,17 @@ const Question = async (data: NewProjectData) => { const projectTemplates = c.buildConfig.projectTemplates || {}; // c.files.rnvConfigTemplates.config?.projectTemplates || {}; const options: TemplateOption[] = []; + let defaultOverride; Object.keys(projectTemplates).forEach((k) => { const value = projectTemplates[k]; - options.push({ + const option: TemplateOption = { name: `${k} ${chalk().grey(`- ${value.localPath || value.description}`)}`, value: { ...value, type: 'existing' }, - }); + }; + options.push(option); + if (value.localPath) { + defaultOverride = option.value; + } }); // data.optionTemplates.keysAsArray.push(customTemplate); @@ -62,7 +67,7 @@ const Question = async (data: NewProjectData) => { name: 'inputTemplate', type: 'list', message: 'What template to use?', - default: defaults.templateName, + default: defaultOverride || defaults.templateName, loop: false, choices: options, }); diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index 79547bae92..f82014b2bd 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -1,9 +1,18 @@ -import { RnvTaskOptionPresets, logTask, RnvTask, RnvTaskName, updateRenativeConfigs } from '@rnv/core'; +import { + RnvTaskOptionPresets, + logTask, + RnvTask, + RnvTaskName, + updateRenativeConfigs, + logToSummary, + applyTemplate, + configureTemplateFiles, + generateLocalJsonSchemas, +} from '@rnv/core'; import inquiryBootstrapQuestions from './questions/bootstrapQuestions'; import inquiryGit from './questions/confirmGit'; import inquiryIsRenativeProject from './questions/isRenativeProject'; import inquiryHasNodeModules from './questions/hasNodeModules'; -import inquiryConfirm from './questions/confirmOverview'; import inquiryProjectName from './questions/projectName'; import inquiryWorkspace from './questions/workspace'; import inquirySupportedPlatforms from './questions/supportedPlatforms'; @@ -13,9 +22,12 @@ import inquiryAppVersion from './questions/projectVersion'; import inquiryInstallTemplate from './questions/installTemplate'; import inquiryApplyTemplate from './questions/applyTemplate'; import inquiryBookmarkTemplate from './questions/bookmarkTemplate'; +import inquiryAppConfigs from './questions/appConfigs'; + import { processChdirToProject } from './utils'; import { - generateNewProject, + configureConfigOverrides, + generateProjectOverview, initNewProject, saveProgressIntoProjectConfig, telemetryNewProject, @@ -25,20 +37,19 @@ const taskNew = async () => { logTask('taskNew'); // Initialize Project const payload = await initNewProject(); - - // Interactive Questions Required + // Initial questions await inquiryProjectName(payload); await inquiryIsRenativeProject(payload); await inquiryHasNodeModules(payload); await inquiryWorkspace(payload); - await saveProgressIntoProjectConfig(payload); + // Switch execution context to new directory await processChdirToProject(); - + // Install template only (this avoids whole npm project install) await inquiryInstallTemplate(payload); await inquiryApplyTemplate(payload); await saveProgressIntoProjectConfig(payload); - + // Gather project/app info await inquiryBookmarkTemplate(payload); await inquiryAppTitle(payload); await inquiryAppID(payload); @@ -48,13 +59,20 @@ const taskNew = async () => { await inquirySupportedPlatforms(payload); await inquiryBootstrapQuestions(payload); await inquiryGit(payload); - await inquiryConfirm(payload); - // Generate Project + // Configure final config overrides await updateRenativeConfigs(); - await generateNewProject(payload); + await configureConfigOverrides(payload); + await saveProgressIntoProjectConfig(payload); + // Now we can apply template (required for appConfigs to be generated properly) + await applyTemplate(); + await configureTemplateFiles(); + await generateLocalJsonSchemas(); + await inquiryAppConfigs(payload); // Telementry await telemetryNewProject(payload); + logToSummary(generateProjectOverview(payload)); + return true; }; diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index aeafb1d1ae..5412bdb2c8 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -1,5 +1,4 @@ import type { - ConfigFileApp, ConfigFileBuildConfig, ConfigFileProject, ConfigFileTemplate, @@ -37,7 +36,7 @@ export type NewProjectData = { project: { renativeConfig: ConfigFileProject; packageJson: NpmPackageFile; - renativeAppConfig: ConfigFileApp; + // renativeAppConfig: ConfigFileApp; }; }; }; From a0dc259040d62799a5d0d909300ec9451a8ac012 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 18:34:34 +0100 Subject: [PATCH 095/175] refactor helpers --- .../global/new/__tests__/taskNew.test.ts | 11 ++-- ...projectGenerator.ts => questionHelpers.ts} | 54 ++++++++++++++++++- .../src/tasks/global/new/questions/appID.ts | 2 +- .../tasks/global/new/questions/appTitle.ts | 7 +-- .../global/new/questions/applyTemplate.ts | 41 +++++--------- .../new/questions/bootstrapQuestions.ts | 7 +-- .../global/new/questions/hasNodeModules.ts | 3 +- .../global/new/questions/installTemplate.ts | 9 +--- .../global/new/questions/projectFolder.ts | 47 ++++++++++++++++ .../tasks/global/new/questions/projectName.ts | 47 ++-------------- .../global/new/questions/projectVersion.ts | 2 +- .../new/questions/supportedPlatforms.ts | 2 +- .../tasks/global/new/questions/workspace.ts | 2 +- .../src/tasks/global/new/taskNew.ts | 7 +-- .../engine-core/src/tasks/global/new/types.ts | 1 + .../engine-core/src/tasks/global/new/utils.ts | 48 ----------------- 16 files changed, 144 insertions(+), 146 deletions(-) rename packages/engine-core/src/tasks/global/new/{projectGenerator.ts => questionHelpers.ts} (77%) create mode 100644 packages/engine-core/src/tasks/global/new/questions/projectFolder.ts delete mode 100644 packages/engine-core/src/tasks/global/new/utils.ts diff --git a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts index 74e2e80e2b..d186081f1b 100644 --- a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts @@ -1,8 +1,12 @@ import { getContext, createRnvContext } from '@rnv/core'; import taskNew from '../taskNew'; -import { initNewProject, saveProgressIntoProjectConfig, telemetryNewProject } from '../projectGenerator'; +import { + initNewProject, + saveProgressIntoProjectConfig, + telemetryNewProject, + processChdirToProject, +} from '../questionHelpers'; import { NewProjectData } from '../types'; -import { processChdirToProject } from '../utils'; import inquiryAppConfigs from '../questions/appConfigs'; import inquiryBootstrapQuestions from '../questions/bootstrapQuestions'; import inquiryGit from '../questions/confirmGit'; @@ -22,7 +26,6 @@ jest.mock('@rnv/core'); jest.mock('lodash/set'); jest.mock('path'); jest.mock('semver'); -jest.mock('../utils'); jest.mock('../questions/bootstrapQuestions'); jest.mock('../questions/appTitle'); jest.mock('../questions/installTemplate'); @@ -37,7 +40,7 @@ jest.mock('../questions/isRenativeProject'); jest.mock('../questions/projectName'); jest.mock('../questions/supportedPlatforms'); jest.mock('../questions/confirmGit'); -jest.mock('../projectGenerator'); +jest.mock('../questionHelpers'); beforeEach(() => { createRnvContext(); diff --git a/packages/engine-core/src/tasks/global/new/projectGenerator.ts b/packages/engine-core/src/tasks/global/new/questionHelpers.ts similarity index 77% rename from packages/engine-core/src/tasks/global/new/projectGenerator.ts rename to packages/engine-core/src/tasks/global/new/questionHelpers.ts index 7b1a52d2cb..b276708f12 100644 --- a/packages/engine-core/src/tasks/global/new/projectGenerator.ts +++ b/packages/engine-core/src/tasks/global/new/questionHelpers.ts @@ -4,13 +4,62 @@ import { chalk, getApi, getContext, + inquirerPrompt, logDebug, + populateContextPaths, updateRenativeConfigs, writeFileSync, } from '@rnv/core'; import path from 'path'; import { NewProjectData } from './types'; +export const processChdirToProject = async () => { + const c = getContext(); + // In order to execute rnv from new origin (sub folder we need to reset paths to new cwd()) + process.chdir(c.paths.project.dir); + populateContextPaths(c, c.paths.rnv.dir); + return true; +}; + +export const checkInputValue = (value: string | boolean): boolean => { + return value && typeof value === 'string' && value !== '' ? true : false; +}; + +export const validateAndAssign = async ( + { + value, + validFn, + name, + defaultVal, + message, + warning, + }: { + value: string; + validFn: (value: string) => true | string; + name: string; + defaultVal: (() => string) | string | undefined; + message: string; + warning: string; + }, + ci: boolean +): Promise => { + const isValid = validFn(value); + if (value && isValid === true) { + return value; + } else { + const warningMessage = typeof isValid === 'string'; + const answer = await inquirerPrompt({ + name, + type: 'input', + default: defaultVal, + validate: validFn, + message, + warningMessage: ci && warningMessage ? warning : undefined, + }); + return answer[name]; + } +}; + export const saveProgressIntoProjectConfig = async (data: NewProjectData) => { const c = getContext(); writeFileSync(c.paths.project.config, data.files.project.renativeConfig); @@ -117,7 +166,8 @@ export const generateProjectOverview = (data: NewProjectData) => { const str = ` Generated Project Summary: ------------------------- - Project Name (folder): ${highlight(inputs.projectName)} + Project Name: ${highlight(inputs.projectName)} + Package name: ${highlight(inputs.packageName)} Workspace: ${highlight(inputs.workspaceID)} App Title: ${highlight(inputs.appTitle)} App Version: ${highlight(inputs.appVersion)} @@ -128,7 +178,7 @@ export const generateProjectOverview = (data: NewProjectData) => { ------------------------- ${chalk().green('✔ Your project is ready!')} Run it with: ${chalk().bold(` - cd ${inputs.projectName} + cd ${inputs.projectFolderName} npx rnv run`)}`; return str; diff --git a/packages/engine-core/src/tasks/global/new/questions/appID.ts b/packages/engine-core/src/tasks/global/new/questions/appID.ts index 2fa4fe973a..a62131fc5d 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appID.ts +++ b/packages/engine-core/src/tasks/global/new/questions/appID.ts @@ -1,6 +1,6 @@ import { getContext } from '@rnv/core'; import type { NewProjectData } from '../types'; -import { validateAndAssign } from '../utils'; +import { validateAndAssign } from '../questionHelpers'; const Question = async (data: NewProjectData): Promise => { const c = getContext(); diff --git a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts index 36b6ec0bdd..e6128f7963 100644 --- a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts +++ b/packages/engine-core/src/tasks/global/new/questions/appTitle.ts @@ -1,10 +1,11 @@ import { getContext } from '@rnv/core'; import type { NewProjectData } from '../types'; -import { checkInputValue, validateAndAssign } from '../utils'; +import { checkInputValue, validateAndAssign } from '../questionHelpers'; const Question = async (data: NewProjectData) => { const c = getContext(); const { title, ci } = c.program; + const { inputs, defaults } = data; const validator = (val: string) => checkInputValue(val) || 'Please enter a title'; const result = await validateAndAssign( @@ -12,14 +13,14 @@ const Question = async (data: NewProjectData) => { value: title, validFn: validator, name: 'inputAppTitle', - defaultVal: data.defaults.appTitle, + defaultVal: defaults.appTitle, message: "What's your project Title?", warning: 'Title was not provided', }, ci ); - data.inputs.appTitle = result || data.defaults.appTitle; + inputs.appTitle = result || defaults.appTitle; }; export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts index 302452f9be..24b6c3789c 100644 --- a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts @@ -12,8 +12,9 @@ import path from 'path'; const Question = async (data: NewProjectData): Promise => { const c = getContext(); + const { inputs, files } = data; - const tplName = data.inputs.tepmplate?.packageName; + const tplName = inputs.tepmplate?.packageName; if (!tplName) { return Promise.reject('Template not selected'); } @@ -22,23 +23,14 @@ const Question = async (data: NewProjectData): Promise => { const renativeTemplateConfig = readObjectSync(path.join(templateDir, RnvFileName.renativeTemplate)) || {}; if (renativeTemplateConfig) { - data.files.template.renativeTemplateConfig = renativeTemplateConfig; + files.template.renativeTemplateConfig = renativeTemplateConfig; } const renativeConfig = readObjectSync(path.join(templateDir, RnvFileName.renative)); if (renativeConfig) { - data.files.template.renativeConfig = renativeConfig; + files.template.renativeConfig = renativeConfig; } - // const templateAppConfigDir = path.join(templateDir, 'appConfigs'); - // if(fsExistsSync(templateAppConfigDir)) { - // read - // } - // const renativeAppConfig = readObjectSync(path.join(templateDir, RnvFileName.renative)); - // if (renativeConfig) { - // data.files.template.renativeConfig = renativeConfig; - // } - const optExtend = 'Extend template (cleaner, overridable)'; const optCopy = 'Copy from template (full control)'; const options = [optExtend, optCopy]; @@ -46,6 +38,7 @@ const Question = async (data: NewProjectData): Promise => { name: 'configOption', type: 'list', message: 'How to create config renative.json?', + default: optExtend, choices: options, }); @@ -54,29 +47,19 @@ const Question = async (data: NewProjectData): Promise => { } if (configOption === optExtend) { - const rnvConfig = data.files.template.renativeTemplateConfig.templateConfig?.renative_json || { + const rnvConfig = files.template.renativeTemplateConfig.templateConfig?.renative_json || { extendsTemplate: `${tplName}/renative.json`, }; - data.files.project.renativeConfig = { ...rnvConfig, ...data.files.project.renativeConfig }; + files.project.renativeConfig = { ...rnvConfig, ...files.project.renativeConfig }; } else if (configOption === optCopy) { - data.files.project.renativeConfig = { - ...data.files.template.renativeConfig, - ...data.files.project.renativeConfig, + files.project.renativeConfig = { + ...files.template.renativeConfig, + ...files.project.renativeConfig, }; } - const packageJson = data.files.template.renativeTemplateConfig.templateConfig?.package_json || {}; - data.files.project.packageJson = mergeObjects(c, data.files.project.packageJson, packageJson); - - // const rnvNewPatchDependencies = renativeTemplateConfig.bootstrapConfig?.rnvNewPatchDependencies; - - // if (rnvNewPatchDependencies) { - // const patchDeps = Object.entries(rnvNewPatchDependencies); - // for (const [dependency, version] of patchDeps) { - // const command = `${isYarnInstalled() ? 'yarn' : 'npm'} add ${dependency}@${version}`; - // await executeAsync(command, { cwd: c.paths.project.dir }); - // } - // } + const packageJson = files.template.renativeTemplateConfig.templateConfig?.package_json || {}; + files.project.packageJson = mergeObjects(c, files.project.packageJson, packageJson); }; export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts index 49e7b94a1a..f4dcc2c939 100644 --- a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts +++ b/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts @@ -15,8 +15,9 @@ type QuestionResults = Record< const Question = async (data: NewProjectData) => { const c = getContext(); - data.inputs.bootstrapQuestions = {}; - const bootstrapQuestions = data.files.template.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; + const { inputs, files } = data; + inputs.bootstrapQuestions = {}; + const bootstrapQuestions = files.template.renativeTemplateConfig?.bootstrapConfig?.bootstrapQuestions || []; const results: QuestionResults = {}; const providedAnswers: Record = {}; @@ -45,7 +46,7 @@ const Question = async (data: NewProjectData) => { logDebug('setting', targetKey, objValue); if (targetKey) { - lSet(data.inputs.bootstrapQuestions, targetKey, objValue); + lSet(inputs.bootstrapQuestions, targetKey, objValue); } }); }; diff --git a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts index 5a199bf289..25c6d32f01 100644 --- a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts +++ b/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts @@ -4,6 +4,7 @@ import { NewProjectData } from '../types'; const Question = async (data: NewProjectData) => { const c = getContext(); if (fsExistsSync(c.paths.project.nodeModulesDir)) { + const { inputs } = data; logWarning( `Found node_modules directory at your location. If you continue it will be deleted: ${c.paths.project.nodeModulesDir}` ); @@ -12,7 +13,7 @@ const Question = async (data: NewProjectData) => { type: 'confirm', message: 'Are you sure you want to continue?', }); - data.inputs.confirmDeleteNodeModules = confirmDeleteNodeModules; + inputs.confirmDeleteNodeModules = confirmDeleteNodeModules; if (confirmDeleteNodeModules) { await removeDirs([c.paths.project.nodeModulesDir]); } diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts index b579078b86..a44a14392d 100644 --- a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts @@ -20,8 +20,8 @@ import { } from '@rnv/core'; import type { NewProjectData, TemplateOption } from '../types'; import path from 'path'; -import { checkInputValue } from '../utils'; -import { saveProgressIntoProjectConfig } from '../projectGenerator'; +import { checkInputValue } from '../questionHelpers'; +import { saveProgressIntoProjectConfig } from '../questionHelpers'; import { merge } from 'lodash'; const Question = async (data: NewProjectData) => { @@ -50,12 +50,10 @@ const Question = async (data: NewProjectData) => { } }); - // data.optionTemplates.keysAsArray.push(customTemplate); options.push(inquirerSeparator('Advanced:----------------')); options.push(customTemplate); options.push(localTemplate); options.push(noTemplate); - // let selectedInputTemplate; let localTemplatePath: string | undefined; inputs.tepmplate = {}; @@ -106,9 +104,6 @@ const Question = async (data: NewProjectData) => { if (!fsExistsSync(localTemplatePath)) { return Promise.reject(`Local template path ${localTemplatePath} does not exist`); } - // await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add file:${localTemplatePath} --dev`, { - // cwd: c.paths.project.dir, - // }); const localTemplatePkgPath = path.join(localTemplatePath, RnvFileName.package); if (!fsExistsSync(localTemplatePath)) { return Promise.reject(`Local template package ${localTemplatePkgPath} does not exist`); diff --git a/packages/engine-core/src/tasks/global/new/questions/projectFolder.ts b/packages/engine-core/src/tasks/global/new/questions/projectFolder.ts new file mode 100644 index 0000000000..3ee11ede4d --- /dev/null +++ b/packages/engine-core/src/tasks/global/new/questions/projectFolder.ts @@ -0,0 +1,47 @@ +import { + RnvFileName, + cleanFolder, + fsExistsSync, + getContext, + inquirerPrompt, + logInfo, + logWarning, + mkdirSync, +} from '@rnv/core'; +import type { NewProjectData } from '../types'; +import path from 'path'; + +const Question = async (data: NewProjectData): Promise => { + const c = getContext(); + + const { inputs, files } = data; + + inputs.projectFolderName = inputs.projectName?.replace?.(/(\s+)/g, '_'); + inputs.packageName = inputs.projectName?.replace(/\s+/g, '-').toLowerCase(); + c.paths.project.dir = path.join(c.paths.user.currentDir, inputs.projectFolderName || ''); + c.paths.project.package = path.join(c.paths.project.dir, RnvFileName.package); + c.paths.project.config = path.join(c.paths.project.dir, RnvFileName.renative); + + files.project.renativeConfig.projectName = inputs.projectName; + files.project.packageJson.name = inputs.packageName; + + if (fsExistsSync(c.paths.project.dir)) { + logWarning(`Folder ${c.paths.project.dir} already exists. RNV will override it.`); + const { confirm } = await inquirerPrompt({ + type: 'confirm', + name: 'confirm', + message: 'Continue?', + }); + + if (!confirm) { + return Promise.reject('Cancelled by user'); + } else { + logInfo('Cleaning up existing folder...'); + } + await cleanFolder(c.paths.project.dir); + } + + mkdirSync(c.paths.project.dir); +}; + +export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/global/new/questions/projectName.ts index e5c543e57e..6cd6b62b4f 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectName.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectName.ts @@ -1,23 +1,13 @@ -import { - RnvFileName, - cleanFolder, - fsExistsSync, - getContext, - inquirerPrompt, - logInfo, - logWarning, - mkdirSync, -} from '@rnv/core'; +import { getContext, inquirerPrompt } from '@rnv/core'; import type { NewProjectData } from '../types'; -import path from 'path'; -import { checkInputValue } from '../utils'; +import { checkInputValue } from '../questionHelpers'; const Question = async (data: NewProjectData): Promise => { const c = getContext(); const { projectName } = c.program; - let plainProjectName: string | undefined; + const { inputs } = data; if (checkInputValue(projectName)) { - plainProjectName = projectName; + inputs.projectName = projectName; } else { const inputProjectNameObj = await inquirerPrompt({ name: 'inputProjectName', @@ -26,35 +16,8 @@ const Question = async (data: NewProjectData): Promise => { validate: (value) => checkInputValue(value), message: "What's your project Name? (folder will be created)", }); - plainProjectName = inputProjectNameObj?.inputProjectName; + inputs.projectName = inputProjectNameObj?.inputProjectName; } - - data.inputs.projectName = plainProjectName?.replace?.(/(\s+)/g, '_'); - data.inputs.packageName = plainProjectName?.replace(/\s+/g, '-').toLowerCase(); - c.paths.project.dir = path.join(c.paths.user.currentDir, data.inputs.projectName || ''); - c.paths.project.package = path.join(c.paths.project.dir, RnvFileName.package); - c.paths.project.config = path.join(c.paths.project.dir, RnvFileName.renative); - - data.files.project.renativeConfig.projectName = data.inputs.projectName; - data.files.project.packageJson.name = data.inputs.packageName; - - if (fsExistsSync(c.paths.project.dir)) { - logWarning(`Folder ${c.paths.project.dir} already exists. RNV will override it.`); - const { confirm } = await inquirerPrompt({ - type: 'confirm', - name: 'confirm', - message: 'Continue?', - }); - - if (!confirm) { - return Promise.reject('Cancelled by user'); - } else { - logInfo('Cleaning up existing folder...'); - } - await cleanFolder(c.paths.project.dir); - } - - mkdirSync(c.paths.project.dir); }; export default Question; diff --git a/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts index 6bbbf94e4f..d94bbd286d 100644 --- a/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts +++ b/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts @@ -1,6 +1,6 @@ import { getContext } from '@rnv/core'; import type { NewProjectData } from '../types'; -import { validateAndAssign } from '../utils'; +import { validateAndAssign } from '../questionHelpers'; import semver from 'semver'; import { merge } from 'lodash'; diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts index 3cc10e0e0d..172640dc20 100644 --- a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts @@ -1,6 +1,6 @@ import { RnvPlatforms, getContext, inquirerPrompt, logError } from '@rnv/core'; import type { NewProjectData } from '../types'; -import { checkInputValue } from '../utils'; +import { checkInputValue } from '../questionHelpers'; const Question = async (data: NewProjectData) => { const c = getContext(); diff --git a/packages/engine-core/src/tasks/global/new/questions/workspace.ts b/packages/engine-core/src/tasks/global/new/questions/workspace.ts index d5eb7b4a5a..9247be8026 100644 --- a/packages/engine-core/src/tasks/global/new/questions/workspace.ts +++ b/packages/engine-core/src/tasks/global/new/questions/workspace.ts @@ -1,6 +1,6 @@ import { getContext, getWorkspaceOptions, inquirerPrompt } from '@rnv/core'; import type { NewProjectData } from '../types'; -import { checkInputValue } from '../utils'; +import { checkInputValue } from '../questionHelpers'; const Question = async (data: NewProjectData) => { const c = getContext(); diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/global/new/taskNew.ts index f82014b2bd..ab5cbf873e 100644 --- a/packages/engine-core/src/tasks/global/new/taskNew.ts +++ b/packages/engine-core/src/tasks/global/new/taskNew.ts @@ -9,6 +9,7 @@ import { configureTemplateFiles, generateLocalJsonSchemas, } from '@rnv/core'; +import inquiryProjectFolder from './questions/projectFolder'; import inquiryBootstrapQuestions from './questions/bootstrapQuestions'; import inquiryGit from './questions/confirmGit'; import inquiryIsRenativeProject from './questions/isRenativeProject'; @@ -23,15 +24,14 @@ import inquiryInstallTemplate from './questions/installTemplate'; import inquiryApplyTemplate from './questions/applyTemplate'; import inquiryBookmarkTemplate from './questions/bookmarkTemplate'; import inquiryAppConfigs from './questions/appConfigs'; - -import { processChdirToProject } from './utils'; import { configureConfigOverrides, generateProjectOverview, initNewProject, saveProgressIntoProjectConfig, telemetryNewProject, -} from './projectGenerator'; + processChdirToProject, +} from './questionHelpers'; const taskNew = async () => { logTask('taskNew'); @@ -39,6 +39,7 @@ const taskNew = async () => { const payload = await initNewProject(); // Initial questions await inquiryProjectName(payload); + await inquiryProjectFolder(payload); await inquiryIsRenativeProject(payload); await inquiryHasNodeModules(payload); await inquiryWorkspace(payload); diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/global/new/types.ts index 5412bdb2c8..51fcc726a0 100644 --- a/packages/engine-core/src/tasks/global/new/types.ts +++ b/packages/engine-core/src/tasks/global/new/types.ts @@ -22,6 +22,7 @@ export type NewProjectData = { appID?: string; appVersion?: string; projectName?: string; + projectFolderName?: string; appTitle?: string; workspaceID?: string; packageName?: string; diff --git a/packages/engine-core/src/tasks/global/new/utils.ts b/packages/engine-core/src/tasks/global/new/utils.ts deleted file mode 100644 index 59027d0904..0000000000 --- a/packages/engine-core/src/tasks/global/new/utils.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { getContext, inquirerPrompt, populateContextPaths } from '@rnv/core'; - -export const processChdirToProject = async () => { - const c = getContext(); - // In order to execute rnv from new origin (sub folder we need to reset paths to new cwd()) - process.chdir(c.paths.project.dir); - populateContextPaths(c, c.paths.rnv.dir); - return true; -}; - -export const checkInputValue = (value: string | boolean): boolean => { - return value && typeof value === 'string' && value !== '' ? true : false; -}; - -export const validateAndAssign = async ( - { - value, - validFn, - name, - defaultVal, - message, - warning, - }: { - value: string; - validFn: (value: string) => true | string; - name: string; - defaultVal: (() => string) | string | undefined; - message: string; - warning: string; - }, - ci: boolean -): Promise => { - const isValid = validFn(value); - if (value && isValid === true) { - return value; - } else { - const warningMessage = typeof isValid === 'string'; - const answer = await inquirerPrompt({ - name, - type: 'input', - default: defaultVal, - validate: validFn, - message, - warningMessage: ci && warningMessage ? warning : undefined, - }); - return answer[name]; - } -}; From 85b71c2ecbdfd6c765eb909f4daa0b4ff879b317 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 18:58:11 +0100 Subject: [PATCH 096/175] migrate taskNew --- packages/engine-core/src/index.ts | 4 ++-- .../tasks/{global/new => bootstrap}/__tests__/taskNew.test.ts | 0 .../src/tasks/{global/new => bootstrap}/questionHelpers.ts | 0 .../tasks/{global/new => bootstrap}/questions/appConfigs.ts | 0 .../src/tasks/{global/new => bootstrap}/questions/appID.ts | 0 .../src/tasks/{global/new => bootstrap}/questions/appTitle.ts | 0 .../{global/new => bootstrap}/questions/applyTemplate.ts | 0 .../{global/new => bootstrap}/questions/bookmarkTemplate.ts | 0 .../{global/new => bootstrap}/questions/bootstrapQuestions.ts | 0 .../tasks/{global/new => bootstrap}/questions/confirmGit.ts | 0 .../{global/new => bootstrap}/questions/hasNodeModules.ts | 0 .../{global/new => bootstrap}/questions/installTemplate.ts | 0 .../{global/new => bootstrap}/questions/isRenativeProject.ts | 0 .../{global/new => bootstrap}/questions/projectFolder.ts | 0 .../tasks/{global/new => bootstrap}/questions/projectName.ts | 0 .../{global/new => bootstrap}/questions/projectVersion.ts | 0 .../{global/new => bootstrap}/questions/supportedPlatforms.ts | 0 .../tasks/{global/new => bootstrap}/questions/workspace.ts | 0 .../src/tasks/{global/new => bootstrap}/taskNew.ts | 0 .../engine-core/src/tasks/{global/new => bootstrap}/types.ts | 0 .../src/tasks/{global => project}/taskConfigureSoft.ts | 0 21 files changed, 2 insertions(+), 2 deletions(-) rename packages/engine-core/src/tasks/{global/new => bootstrap}/__tests__/taskNew.test.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questionHelpers.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/appConfigs.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/appID.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/appTitle.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/applyTemplate.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/bookmarkTemplate.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/bootstrapQuestions.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/confirmGit.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/hasNodeModules.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/installTemplate.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/isRenativeProject.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/projectFolder.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/projectName.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/projectVersion.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/supportedPlatforms.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/questions/workspace.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/taskNew.ts (100%) rename packages/engine-core/src/tasks/{global/new => bootstrap}/types.ts (100%) rename packages/engine-core/src/tasks/{global => project}/taskConfigureSoft.ts (100%) diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index a63344171e..03d930f322 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -24,14 +24,14 @@ import taskClean from './tasks/global/taskClean'; import taskStatus from './tasks/global/taskStatus'; import taskConfig from './tasks/global/taskConfig'; import taskHelp from './tasks/global/taskHelp'; -import taskNew from './tasks/global/new/taskNew'; +import taskNew from './tasks/bootstrap/taskNew'; import taskInstall from './tasks/global/taskInstall'; import taskProjectConfigure from './tasks/project/taskProjectConfigure'; import taskProjectUpgrade from './tasks/project/taskProjectUpgrade'; import taskAppConfigure from './tasks/app/taskAppConfigure'; import taskAppCreate from './tasks/app/taskAppCreate'; import taskWorkspaceConfigure from './tasks/workspace/taskWorkspaceConfigure'; -import taskConfigureSoft from './tasks/global/taskConfigureSoft'; +import taskConfigureSoft from './tasks/project/taskConfigureSoft'; import taskRvnKill from './tasks/global/taskKill'; import taskRvnDoctor from './tasks/global/taskDoctor'; import taskLink from './tasks/linking/taskLink'; diff --git a/packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/__tests__/taskNew.test.ts rename to packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts diff --git a/packages/engine-core/src/tasks/global/new/questionHelpers.ts b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questionHelpers.ts rename to packages/engine-core/src/tasks/bootstrap/questionHelpers.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/appConfigs.ts b/packages/engine-core/src/tasks/bootstrap/questions/appConfigs.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/appConfigs.ts rename to packages/engine-core/src/tasks/bootstrap/questions/appConfigs.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/appID.ts b/packages/engine-core/src/tasks/bootstrap/questions/appID.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/appID.ts rename to packages/engine-core/src/tasks/bootstrap/questions/appID.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/appTitle.ts b/packages/engine-core/src/tasks/bootstrap/questions/appTitle.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/appTitle.ts rename to packages/engine-core/src/tasks/bootstrap/questions/appTitle.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/applyTemplate.ts rename to packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/bookmarkTemplate.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/bookmarkTemplate.ts rename to packages/engine-core/src/tasks/bootstrap/questions/bookmarkTemplate.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/bootstrap/questions/bootstrapQuestions.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/bootstrapQuestions.ts rename to packages/engine-core/src/tasks/bootstrap/questions/bootstrapQuestions.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/confirmGit.ts b/packages/engine-core/src/tasks/bootstrap/questions/confirmGit.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/confirmGit.ts rename to packages/engine-core/src/tasks/bootstrap/questions/confirmGit.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts b/packages/engine-core/src/tasks/bootstrap/questions/hasNodeModules.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/hasNodeModules.ts rename to packages/engine-core/src/tasks/bootstrap/questions/hasNodeModules.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/installTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/installTemplate.ts rename to packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts b/packages/engine-core/src/tasks/bootstrap/questions/isRenativeProject.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/isRenativeProject.ts rename to packages/engine-core/src/tasks/bootstrap/questions/isRenativeProject.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/projectFolder.ts b/packages/engine-core/src/tasks/bootstrap/questions/projectFolder.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/projectFolder.ts rename to packages/engine-core/src/tasks/bootstrap/questions/projectFolder.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/projectName.ts b/packages/engine-core/src/tasks/bootstrap/questions/projectName.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/projectName.ts rename to packages/engine-core/src/tasks/bootstrap/questions/projectName.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/projectVersion.ts b/packages/engine-core/src/tasks/bootstrap/questions/projectVersion.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/projectVersion.ts rename to packages/engine-core/src/tasks/bootstrap/questions/projectVersion.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/supportedPlatforms.ts rename to packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts diff --git a/packages/engine-core/src/tasks/global/new/questions/workspace.ts b/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/questions/workspace.ts rename to packages/engine-core/src/tasks/bootstrap/questions/workspace.ts diff --git a/packages/engine-core/src/tasks/global/new/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/taskNew.ts rename to packages/engine-core/src/tasks/bootstrap/taskNew.ts diff --git a/packages/engine-core/src/tasks/global/new/types.ts b/packages/engine-core/src/tasks/bootstrap/types.ts similarity index 100% rename from packages/engine-core/src/tasks/global/new/types.ts rename to packages/engine-core/src/tasks/bootstrap/types.ts diff --git a/packages/engine-core/src/tasks/global/taskConfigureSoft.ts b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts similarity index 100% rename from packages/engine-core/src/tasks/global/taskConfigureSoft.ts rename to packages/engine-core/src/tasks/project/taskConfigureSoft.ts From 816fc108dba2291994b8b329ae95c1432f645194 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 19:42:06 +0100 Subject: [PATCH 097/175] tasks migration --- packages/core/src/tasks/types.ts | 2 +- packages/engine-core/src/index.ts | 2 - .../src/tasks/app/taskAppConfigure.ts | 6 +- .../src/tasks/app/taskAppCreate.ts | 6 +- .../src/tasks/app/taskAppSwitch.ts | 6 +- .../src/tasks/bootstrap/taskNew.ts | 6 +- .../src/tasks/crypto/taskCryptoDecrypt.ts | 6 +- .../src/tasks/crypto/taskCryptoEncrypt.ts | 6 +- .../engine-core/src/tasks/global/taskClean.ts | 6 +- .../src/tasks/global/taskConfig.ts | 10 +-- .../src/tasks/global/taskDeploy.ts | 31 ---------- .../src/tasks/global/taskDoctor.ts | 6 +- .../engine-core/src/tasks/global/taskHelp.ts | 5 +- .../src/tasks/global/taskInstall.ts | 15 +---- .../engine-core/src/tasks/global/taskKill.ts | 6 +- .../src/tasks/global/taskStatus.ts | 7 +-- .../src/tasks/hooks/taskHooksList.ts | 6 +- .../src/tasks/hooks/taskHooksPipes.ts | 17 +---- .../src/tasks/hooks/taskHooksRun.ts | 7 +-- .../engine-core/src/tasks/linking/taskLink.ts | 9 +-- .../src/tasks/linking/taskUnlink.ts | 17 +---- .../tasks/platform/taskPlatformConfigure.ts | 6 +- .../src/tasks/platform/taskPlatformConnect.ts | 6 +- .../src/tasks/platform/taskPlatformEject.ts | 6 +- .../src/tasks/platform/taskPlatformList.ts | 6 +- .../src/tasks/platform/taskPlatformSetup.ts | 6 +- .../src/tasks/plugin/taskPluginAdd.ts | 7 +-- .../src/tasks/plugin/taskPluginList.ts | 10 +-- .../src/tasks/plugin/taskPluginUpdate.ts | 6 +- .../src/tasks/project/taskConfigureSoft.ts | 6 +- .../src/tasks/project/taskProjectConfigure.ts | 6 +- .../src/tasks/project/taskProjectUpgrade.ts | 6 +- .../tasks/telemetry/taskTelemetryDisable.ts | 18 ++---- .../tasks/telemetry/taskTelemetryEnable.ts | 16 +---- .../tasks/telemetry/taskTelemetryStatus.ts | 7 +-- .../src/tasks/template/taskTemplateAdd.ts | 6 +- .../src/tasks/template/taskTemplateApply.ts | 6 +- .../src/tasks/template/taskTemplateList.ts | 7 +-- .../src/tasks/workspace/taskWorkspaceAdd.ts | 6 +- .../tasks/workspace/taskWorkspaceConfigure.ts | 6 +- .../tasks/workspace/taskWorkspaceConnect.ts | 6 +- .../src/tasks/workspace/taskWorkspaceList.ts | 17 +---- .../tasks/workspace/taskWorkspaceUpdate.ts | 7 +-- packages/engine-lightning/src/index.ts | 6 +- packages/engine-rn-macos/src/index.ts | 8 +-- packages/engine-rn-tvos/src/index.ts | 15 ++--- packages/engine-rn-tvos/src/tasks/taskLog.ts | 40 ------------ .../engine-rn-tvos/src/tasks/taskPackage.ts | 57 ----------------- packages/engine-rn-web/src/index.ts | 14 ++++- packages/engine-rn/src/index.ts | 12 ++-- packages/engine-rn/src/tasks/taskExport.ts | 43 ------------- packages/engine-rn/src/tasks/taskLog.ts | 43 ------------- packages/engine-rn/src/tasks/taskPackage.ts | 62 ------------------- packages/sdk-android/src/index.ts | 4 +- packages/sdk-android/src/tasks/taskLog.ts | 24 +++++++ packages/sdk-android/src/tasks/taskPackage.ts | 46 ++++++++++++++ packages/sdk-apple/src/index.ts | 6 ++ .../src/tasks/taskExport.ts | 19 ++---- packages/sdk-apple/src/tasks/taskLog.ts | 20 ++++++ .../src/tasks/taskPackage.ts | 30 ++++----- 60 files changed, 241 insertions(+), 563 deletions(-) delete mode 100644 packages/engine-core/src/tasks/global/taskDeploy.ts delete mode 100644 packages/engine-rn-tvos/src/tasks/taskLog.ts delete mode 100644 packages/engine-rn-tvos/src/tasks/taskPackage.ts delete mode 100644 packages/engine-rn/src/tasks/taskExport.ts delete mode 100644 packages/engine-rn/src/tasks/taskLog.ts delete mode 100644 packages/engine-rn/src/tasks/taskPackage.ts create mode 100644 packages/sdk-android/src/tasks/taskLog.ts create mode 100644 packages/sdk-android/src/tasks/taskPackage.ts rename packages/{engine-rn-macos => sdk-apple}/src/tasks/taskExport.ts (52%) create mode 100644 packages/sdk-apple/src/tasks/taskLog.ts rename packages/{engine-rn-macos => sdk-apple}/src/tasks/taskPackage.ts (57%) diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index fb080ebe8a..2f3a031819 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -3,7 +3,7 @@ import type { PlatformKey } from '../schema/types'; export type RnvTask = { task: string; - options: Array; + options?: Array; isGlobalScope?: boolean; platforms?: Array; description: string; diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index 03d930f322..907fea5f43 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -40,7 +40,6 @@ import taskTelemetryStatus from './tasks/telemetry/taskTelemetryStatus'; import taskTelemetryEnable from './tasks/telemetry/taskTelemetryEnable'; import taskTelemetryDisable from './tasks/telemetry/taskTelemetryDisable'; import taskSwitch from './tasks/app/taskAppSwitch'; -import taskDeploy from './tasks/global/taskDeploy'; const Engine: RnvEngine = { runtimeExtraProps: {}, @@ -86,7 +85,6 @@ const Engine: RnvEngine = { taskTelemetryEnable, taskTelemetryDisable, taskSwitch, - taskDeploy, ]), config: { // title: 'Engine Core', diff --git a/packages/engine-core/src/tasks/app/taskAppConfigure.ts b/packages/engine-core/src/tasks/app/taskAppConfigure.ts index 26d4cc567b..eee3f72dce 100644 --- a/packages/engine-core/src/tasks/app/taskAppConfigure.ts +++ b/packages/engine-core/src/tasks/app/taskAppConfigure.ts @@ -146,7 +146,7 @@ const _setAppId = (c: RnvContext, appId: string) => { c.runtime.appDir = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${c.platform}`); }; -const taskAppConfigure = async (c: RnvContext) => { +const fn = async (c: RnvContext) => { logTask('taskAppConfigure'); c.paths.project.appConfigsDirNames = listAppConfigsFoldersSync(true); @@ -207,9 +207,9 @@ const taskAppConfigure = async (c: RnvContext) => { const Task: RnvTask = { description: 'Configure project with specific appConfig', - fn: taskAppConfigure, + fn, task: RnvTaskName.appConfigure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), + options: RnvTaskOptionPresets.withConfigure(), }; export default Task; diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index 0ed3ba08ef..a47f6d123f 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -13,13 +13,12 @@ import { inquirerPrompt, logInfo, logTask, - RnvTaskOptionPresets, RnvTask, ConfigFileApp, RnvTaskName, } from '@rnv/core'; -const taskAppCreate: RnvTaskFn = async (c) => { +const fn: RnvTaskFn = async (c) => { logTask('taskAppCreate'); await configureRuntimeDefaults(); @@ -166,9 +165,8 @@ const taskAppCreate: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Create new app config', - fn: taskAppCreate, + fn, task: RnvTaskName.appCreate, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index dbbfa7d765..7d085720fb 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -2,7 +2,6 @@ import { logTask, copyRuntimeAssets, executeTask, - RnvTaskOptionPresets, RnvTaskFn, generatePlatformAssetsRuntimeConfig, RnvTask, @@ -10,7 +9,7 @@ import { } from '@rnv/core'; import { configureFonts } from '@rnv/sdk-utils'; -const taskSwitch: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskSwitch'); c.program.appConfigID = true; @@ -26,9 +25,8 @@ const taskSwitch: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Switch between different app configs in current project', - fn: taskSwitch, + fn, task: RnvTaskName.appSwitch, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index ab5cbf873e..db3e56330b 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -1,5 +1,4 @@ import { - RnvTaskOptionPresets, logTask, RnvTask, RnvTaskName, @@ -33,7 +32,7 @@ import { processChdirToProject, } from './questionHelpers'; -const taskNew = async () => { +const fn = async () => { logTask('taskNew'); // Initialize Project const payload = await initNewProject(); @@ -79,9 +78,8 @@ const taskNew = async () => { const Task: RnvTask = { description: 'Create new ReNative project', - fn: taskNew, + fn, task: RnvTaskName.new, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index 7954350f31..e37aa0e3a2 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -14,7 +14,6 @@ import { fsReadFileSync, inquirerPrompt, executeTask, - RnvTaskOptionPresets, RnvContext, RnvTaskFn, RnvTask, @@ -48,7 +47,7 @@ const _unzipAndCopy = async ( logSuccess(`Files succesfully extracted into ${destFolder}`); }; -const taskCryptoDecrypt: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskCryptoDecrypt'); if (!parentTask) { @@ -208,9 +207,8 @@ and we will try to help! const Task: RnvTask = { description: 'Decrypt encrypted project files into local `~///..`', - fn: taskCryptoDecrypt, + fn, task: RnvTaskName.cryptoDecrypt, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index 3574e7c8b0..43d3a1f2f9 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -17,7 +17,6 @@ import { fsReaddir, inquirerPrompt, executeTask, - RnvTaskOptionPresets, RnvContext, RnvTaskFn, copyFileSync, @@ -175,7 +174,7 @@ Make sure you take into account special characters that might need to be escaped } }; -const taskCryptoEncrypt: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskCryptoEncrypt'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoEncrypt, originTask); @@ -237,9 +236,8 @@ const taskCryptoEncrypt: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Encrypts secure files from `~///..` to project', - fn: taskCryptoEncrypt, + fn, task: RnvTaskName.cryptoEncrypt, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/global/taskClean.ts b/packages/engine-core/src/tasks/global/taskClean.ts index 6f88071b0c..81ed9b833f 100644 --- a/packages/engine-core/src/tasks/global/taskClean.ts +++ b/packages/engine-core/src/tasks/global/taskClean.ts @@ -9,7 +9,6 @@ import { logToSummary, logDebug, executeAsync, - RnvTaskOptionPresets, isSystemWin, RnvTaskFn, inquirerPrompt, @@ -43,7 +42,7 @@ function clearWindowsCacheFiles() { return true; } -const taskClean: RnvTaskFn = async (c) => { +const fn: RnvTaskFn = async (c) => { logTask('taskClean'); const skipQuestion = c.program.ci; const pathsToRemove = []; @@ -210,9 +209,8 @@ const taskClean: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Automatically removes all node_modules and lock in your project and its dependencies', - fn: taskClean, + fn, task: RnvTaskName.clean, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskConfig.ts b/packages/engine-core/src/tasks/global/taskConfig.ts index 18b8b0e2a6..f47d6a6699 100644 --- a/packages/engine-core/src/tasks/global/taskConfig.ts +++ b/packages/engine-core/src/tasks/global/taskConfig.ts @@ -1,21 +1,17 @@ -import { logTask, RnvTaskOptionPresets, RnvTaskFn, executeTask, RnvPlatforms, RnvTask, RnvTaskName } from '@rnv/core'; +import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; -const taskConfig: RnvTaskFn = async (c, _, originTask) => { +const fn: RnvTaskFn = async (c, _, originTask) => { logTask('taskConfig'); await executeTask(RnvTaskName.configureSoft, RnvTaskName.config, originTask); - console.log(JSON.stringify(c.buildConfig, null, 2)); - return true; }; const Task: RnvTask = { description: 'Display RNV config', - fn: taskConfig, + fn, task: RnvTaskName.config, - options: RnvTaskOptionPresets.withBase(), - platforms: [...RnvPlatforms], }; export default Task; diff --git a/packages/engine-core/src/tasks/global/taskDeploy.ts b/packages/engine-core/src/tasks/global/taskDeploy.ts deleted file mode 100644 index 7d32e69f35..0000000000 --- a/packages/engine-core/src/tasks/global/taskDeploy.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { - RnvTaskFn, - logTask, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvPlatforms, -} from '@rnv/core'; - -const taskDeploy: RnvTaskFn = async (_c, parentTask, originTask) => { - logTask('taskDeploy', `parent:${parentTask}`); - - await executeOrSkipTask(RnvTaskName.export, RnvTaskName.deploy, originTask); - - if (shouldSkipTask(RnvTaskName.deploy, originTask)) return true; - - // Deploy simply trggets hook - return true; -}; - -const Task: RnvTask = { - description: 'Deploy the binary via selected deployment intgeration or buld hook', - fn: taskDeploy, - task: RnvTaskName.deploy, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: [...RnvPlatforms], -}; - -export default Task; diff --git a/packages/engine-core/src/tasks/global/taskDoctor.ts b/packages/engine-core/src/tasks/global/taskDoctor.ts index da314ed148..4cfcf26822 100644 --- a/packages/engine-core/src/tasks/global/taskDoctor.ts +++ b/packages/engine-core/src/tasks/global/taskDoctor.ts @@ -3,7 +3,6 @@ import { chalk, logTask, logToSummary, - RnvTaskOptionPresets, executeTask, configureRuntimeDefaults, readObjectSync, @@ -22,7 +21,7 @@ const configTargets = [ 'appConfig.configs', ]; -const taskDoctor: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskDoctor'); await configureRuntimeDefaults(); @@ -89,9 +88,8 @@ const taskDoctor: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Checks validity and config health of your project', - fn: taskDoctor, + fn, task: RnvTaskName.doctor, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskHelp.ts b/packages/engine-core/src/tasks/global/taskHelp.ts index 21e09aaac2..fc81b85992 100644 --- a/packages/engine-core/src/tasks/global/taskHelp.ts +++ b/packages/engine-core/src/tasks/global/taskHelp.ts @@ -10,7 +10,7 @@ import { generateStringFromTaskOption, } from '@rnv/core'; -const taskHelp: RnvTaskFn = async () => { +const fn: RnvTaskFn = async () => { logTask('taskHelp'); // PARAMS @@ -44,9 +44,8 @@ ${optsString} const Task: RnvTask = { description: 'Display generic help', - fn: taskHelp, + fn, task: RnvTaskName.help, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 1edca91dbf..5bbb5656a5 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -1,15 +1,7 @@ -import { - areNodeModulesInstalled, - RnvTaskOptionPresets, - logTask, - logInfo, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { areNodeModulesInstalled, logTask, logInfo, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; -const taskInstall: RnvTaskFn = async (c, parentTask, _) => { +const fn: RnvTaskFn = async (c, parentTask, _) => { logTask('taskInstall', `requiresInstall:${!!c._requiresNpmInstall}:${!c.runtime.skipPackageUpdate}`); if (c.program.only && !!parentTask) return true; @@ -32,9 +24,8 @@ const taskInstall: RnvTaskFn = async (c, parentTask, _) => { const Task: RnvTask = { description: 'Install package node_modules via yarn or npm', - fn: taskInstall, + fn, task: RnvTaskName.install, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/global/taskKill.ts b/packages/engine-core/src/tasks/global/taskKill.ts index 9fbd5e65fb..8535863e98 100644 --- a/packages/engine-core/src/tasks/global/taskKill.ts +++ b/packages/engine-core/src/tasks/global/taskKill.ts @@ -1,5 +1,4 @@ import { - RnvTaskOptionPresets, PlatformKey, RnvContext, RnvTask, @@ -15,7 +14,7 @@ import { import { checkPortInUse } from '@rnv/sdk-utils'; import killPort from 'kill-port'; -const taskKill: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskKill'); const usedPorts: RnvContext['runtime']['supportedPlatforms'] = []; @@ -67,9 +66,8 @@ ${usedPorts.map((v) => chalk().bold(`> ${v.port} (${v.platform})`)).join('\n')}` const Task: RnvTask = { description: 'Kills all the processes related to this project', - fn: taskKill, + fn, task: RnvTaskName.kill, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskStatus.ts b/packages/engine-core/src/tasks/global/taskStatus.ts index d688e0fdc4..046e3f62bd 100644 --- a/packages/engine-core/src/tasks/global/taskStatus.ts +++ b/packages/engine-core/src/tasks/global/taskStatus.ts @@ -1,12 +1,11 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; -const taskStatus = async () => Promise.resolve(); +const fn = async () => Promise.resolve(); const Task: RnvTask = { description: 'Show current info about the project', - fn: taskStatus, + fn, task: RnvTaskName.status, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksList.ts b/packages/engine-core/src/tasks/hooks/taskHooksList.ts index 68daaa4855..9297294452 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksList.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksList.ts @@ -4,13 +4,12 @@ import { generateOptions, buildHooks, executeTask, - RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName, } from '@rnv/core'; -const taskHooksList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskHooksList'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.hooksList, originTask); @@ -32,9 +31,8 @@ const taskHooksList: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Get list of all available hooks', - fn: taskHooksList, + fn, task: RnvTaskName.hooksList, - options: RnvTaskOptionPresets.withBase(), forceBuildHookRebuild: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts index 921bf8e91d..775c584b72 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts @@ -1,16 +1,6 @@ -import { - logTask, - logRaw, - generateOptions, - buildHooks, - executeTask, - RnvTaskOptionPresets, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { logTask, logRaw, generateOptions, buildHooks, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; -const taskHooksPipes: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskHooksPipes'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.hooksPipes, originTask); @@ -23,9 +13,8 @@ const taskHooksPipes: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Get the list of all available pipes', - fn: taskHooksPipes, + fn, task: RnvTaskName.hooksPipes, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index 95d01ea8fb..c2a65a0fb3 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -4,7 +4,6 @@ import { buildHooks, executeTask, fsExistsSync, - RnvTaskOptionPresets, RnvTaskFn, inquirerPrompt, RnvTask, @@ -12,7 +11,7 @@ import { RnvTaskOptions, } from '@rnv/core'; -const taskHooksRun: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskHooksRun'); if (fsExistsSync(c.paths.project.config)) { @@ -58,9 +57,9 @@ const taskHooksRun: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Run specific build hook', - fn: taskHooksRun, + fn, task: RnvTaskName.hooksRun, - options: RnvTaskOptionPresets.withBase([RnvTaskOptions.exeMethod]), + options: [RnvTaskOptions.exeMethod], forceBuildHookRebuild: true, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index 63eba300fa..d5063d3a16 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -1,7 +1,6 @@ import { logInfo, logTask, - RnvTaskOptionPresets, fsExistsSync, fsRenameSync, fsSymlinkSync, @@ -47,7 +46,7 @@ const _linkPackage = (pkg: LinkablePackage) => { const runtimeLibs = ['@rnv/renative']; -const taskLink: RnvTaskFn = async () => { +const fn: RnvTaskFn = async () => { logTask('taskLink'); const linkablePackages = traverseTargetProject(getSourceDir()); @@ -92,11 +91,9 @@ const taskLink: RnvTaskFn = async () => { const Task: RnvTask = { description: 'Links development version or renative with this project', - fn: taskLink, + fn, task: RnvTaskName.link, - options: RnvTaskOptionPresets.withBase([ - { key: 'dir', description: 'Source folder to be linked into project', isValueType: true }, - ]), + options: [{ key: 'dir', description: 'Source folder to be linked into project', isValueType: true }], isGlobalScope: true, ignoreEngines: true, }; diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index 1af1d4b2b5..bb19567adc 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -1,14 +1,4 @@ -import { - logInfo, - logTask, - RnvTaskOptionPresets, - fsRenameSync, - fsUnlinkSync, - RnvTaskFn, - RnvTask, - RnvTaskName, - chalk, -} from '@rnv/core'; +import { logInfo, logTask, fsRenameSync, fsUnlinkSync, RnvTaskFn, RnvTask, RnvTaskName, chalk } from '@rnv/core'; import { getSourceDir, traverseTargetProject } from './linker'; import { LinkablePackage } from './types'; @@ -27,7 +17,7 @@ const _unlinkPackage = (pkg: LinkablePackage) => { } }; -const taskUnlink: RnvTaskFn = async () => { +const fn: RnvTaskFn = async () => { logTask('taskUnlink'); const linkablePackages = traverseTargetProject(getSourceDir()); @@ -53,9 +43,8 @@ const taskUnlink: RnvTaskFn = async () => { const Task: RnvTask = { description: 'Replaces rnv version in project with original node_modules version', - fn: taskUnlink, + fn, task: RnvTaskName.unlink, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, ignoreEngines: true, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 537d2e64e2..5ab3ff3fdd 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -11,7 +11,6 @@ import { configureRuntimeDefaults, executeTask, shouldSkipTask, - RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName, @@ -21,7 +20,7 @@ import { import { isBuildSchemeSupported } from '../../buildSchemes'; import { configureFonts } from '@rnv/sdk-utils'; -const taskPlatformConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskPlatformConfigure', ''); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformConfigure, originTask); @@ -70,9 +69,8 @@ const taskPlatformConfigure: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Low-level task used by engines to prepare platformBuilds folder', - fn: taskPlatformConfigure, + fn, task: RnvTaskName.platformConfigure, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts index a7acfdc2fa..01eab17523 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts @@ -9,7 +9,6 @@ import { removeDirs, generatePlatformChoices, executeTask, - RnvTaskOptionPresets, RnvTaskFn, inquirerPrompt, PlatformKey, @@ -17,7 +16,7 @@ import { RnvTaskName, } from '@rnv/core'; -const taskPlatformConnect: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskPlatformConnect'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformConnect, originTask); @@ -89,9 +88,8 @@ const taskPlatformConnect: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Connect platform template back to rnv', - fn: taskPlatformConnect, + fn, task: RnvTaskName.platformConnect, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts index 0894fa75a0..40966da840 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts @@ -5,7 +5,6 @@ import { logError, logInfo, writeFileSync, - RnvTaskOptionPresets, generatePlatformChoices, ejectPlatform, executeTask, @@ -16,7 +15,7 @@ import { RnvTaskName, } from '@rnv/core'; -const taskPlatformEject: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskPlatformEject'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformEject, originTask); @@ -72,9 +71,8 @@ TIP: You can select options with ${chalk().bold('SPACE')} key before pressing EN const Task: RnvTask = { description: 'Copy all platform files directly to project', - fn: taskPlatformEject, + fn, task: RnvTaskName.platformEject, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformList.ts b/packages/engine-core/src/tasks/platform/taskPlatformList.ts index f701bfb314..daefa18b1c 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformList.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformList.ts @@ -4,13 +4,12 @@ import { logTask, generatePlatformChoices, executeTask, - RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName, } from '@rnv/core'; -const taskPlatformList: RnvTaskFn = async (_c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { logTask('taskPlatformList'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformList, originTask); @@ -22,9 +21,8 @@ const taskPlatformList: RnvTaskFn = async (_c, _parentTask, originTask) => { const Task: RnvTask = { description: 'List all available platforms', - fn: taskPlatformList, + fn, task: RnvTaskName.platformList, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts index 4c2da84319..5610da7503 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts @@ -1,5 +1,4 @@ import { - RnvTaskOptionPresets, updateProjectPlatforms, logTask, executeTask, @@ -9,7 +8,7 @@ import { RnvTaskName, } from '@rnv/core'; -const taskPlatformSetup: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskPlatformSetup'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformSetup, originTask); @@ -31,9 +30,8 @@ const taskPlatformSetup: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Allows you to change supportedPlatforms for your project', - fn: taskPlatformSetup, + fn, task: RnvTaskName.platformSetup, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index e8ec0ca527..6a9388c9f1 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -1,6 +1,5 @@ import { writeRenativeConfigFile, - RnvTaskOptionPresets, chalk, logSuccess, logTask, @@ -16,8 +15,7 @@ import { } from '@rnv/core'; import { getPluginList } from '../../plugins'; -/* eslint-disable no-await-in-loop */ -const taskPluginAdd: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskPluginAdd'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.pluginAdd, originTask); @@ -102,9 +100,8 @@ const taskPluginAdd: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Add selected plugin to the project', - fn: taskPluginAdd, + fn, task: RnvTaskName.pluginAdd, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginList.ts b/packages/engine-core/src/tasks/plugin/taskPluginList.ts index d8200601c5..4e1277811d 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginList.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginList.ts @@ -1,24 +1,20 @@ -import { logTask, logToSummary, executeTask, RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { logTask, logToSummary, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; import { getPluginList } from '../../plugins'; -const taskPluginList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskPluginList'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.pluginList, originTask); const o = getPluginList(); - - // console.log(o.asString); logToSummary(`Plugins:\n\n${o.asString}`); - return true; }; const Task: RnvTask = { description: 'Show list of all available plugins', - fn: taskPluginList, + fn, task: RnvTaskName.pluginList, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts index cfd8d533d4..5b366045e4 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts @@ -4,14 +4,13 @@ import { logTask, logWarning, executeTask, - RnvTaskOptionPresets, RnvTaskFn, inquirerPrompt, RnvTask, RnvTaskName, } from '@rnv/core'; -const taskPluginUpdate: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskPluginUpdate'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.pluginUpdate, originTask); @@ -50,9 +49,8 @@ const taskPluginUpdate: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Update specific plugin to latest supported version (rnv)', - fn: taskPluginUpdate, + fn, task: RnvTaskName.pluginUpdate, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts index a3d2c245e5..f206af8fdc 100644 --- a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - RnvTaskOptionPresets, executeTask, configureRuntimeDefaults, isPlatformSupported, @@ -10,7 +9,7 @@ import { } from '@rnv/core'; import { isBuildSchemeSupported } from '../../buildSchemes'; -const taskConfigureSoft: RnvTaskFn = async (_c, parentTask, originTask) => { +const fn: RnvTaskFn = async (_c, parentTask, originTask) => { logTask('taskConfigureSoft'); await configureRuntimeDefaults(); @@ -26,9 +25,8 @@ const taskConfigureSoft: RnvTaskFn = async (_c, parentTask, originTask) => { const Task: RnvTask = { description: 'Configure system and project without recreating files (used for --only)', - fn: taskConfigureSoft, + fn, task: RnvTaskName.configureSoft, - options: RnvTaskOptionPresets.withBase(), isPrivate: true, }; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index ab71bebf9a..728a2c654c 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -15,7 +15,6 @@ import { fsExistsSync, fsMkdirSync, checkAndMigrateProject, - RnvTaskOptionPresets, copyRuntimeAssets, cleanPlaformAssets, versionCheck, @@ -54,7 +53,7 @@ const configurePlatformBuilds = async () => { } }; -const taskProjectConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskProjectConfigure'); await configurePlatformBuilds(); @@ -142,9 +141,8 @@ const taskProjectConfigure: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Configure current project', - fn: taskProjectConfigure, + fn, task: RnvTaskName.projectConfigure, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index aafafe4091..f4bead3f9d 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -1,7 +1,6 @@ import path from 'path'; import fs from 'fs'; import { - RnvTaskOptionPresets, logTask, logInfo, logToSummary, @@ -20,7 +19,7 @@ import { } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; -const taskProjectUpgrade: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskProjectUpgrade'); const upgradedPaths = []; if (fsExistsSync(c.paths.project.config)) { @@ -77,9 +76,8 @@ const taskProjectUpgrade: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Upgrade or downgrade RNV dependencies in your ReNative project', - fn: taskProjectUpgrade, + fn, task: RnvTaskName.projectUpgrade, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index dff7af2f37..ccb9855571 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -1,15 +1,6 @@ -import { - chalk, - logTask, - logToSummary, - RnvTaskOptionPresets, - RnvTask, - RnvTaskFn, - RnvTaskName, - writeFileSync, -} from '@rnv/core'; - -const taskTelemetryDisable: RnvTaskFn = async (c) => { +import { chalk, logTask, logToSummary, RnvTask, RnvTaskFn, RnvTaskName, writeFileSync } from '@rnv/core'; + +const fn: RnvTaskFn = async (c) => { logTask('taskTelemetryDisable'); const { config } = c.files.dotRnv; @@ -29,9 +20,8 @@ const taskTelemetryDisable: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Disables rnv telemetry on your machine', - fn: taskTelemetryDisable, + fn, task: RnvTaskName.telemetryDisable, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index 874c58abf4..0a4a3310cc 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -1,15 +1,6 @@ -import { - chalk, - logTask, - logToSummary, - RnvTaskOptionPresets, - RnvTask, - RnvTaskFn, - RnvTaskName, - writeFileSync, -} from '@rnv/core'; +import { chalk, logTask, logToSummary, RnvTask, RnvTaskFn, RnvTaskName, writeFileSync } from '@rnv/core'; -const taskTelemetryEnable: RnvTaskFn = async (c) => { +const fn: RnvTaskFn = async (c) => { logTask('taskTelemetryEnable'); const { config } = c.files.dotRnv; @@ -29,9 +20,8 @@ const taskTelemetryEnable: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Enables rnv telemetry on your machine', - fn: taskTelemetryEnable, + fn, task: RnvTaskName.telemetryEnable, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts index 42d880a808..d1c0f4441b 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts @@ -1,6 +1,6 @@ -import { chalk, logTask, logToSummary, RnvTaskOptionPresets, RnvTask, RnvTaskFn, RnvTaskName } from '@rnv/core'; +import { chalk, logTask, logToSummary, RnvTask, RnvTaskFn, RnvTaskName } from '@rnv/core'; -const taskTelemetryStatus: RnvTaskFn = async (c) => { +const fn: RnvTaskFn = async (c) => { logTask('taskTelemetryStatus'); const disableTelemetry = c.files.dotRnv.config?.disableTelemetry; @@ -27,9 +27,8 @@ const taskTelemetryStatus: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Show current rnv telemetry status on your machine', - fn: taskTelemetryStatus, + fn, task: RnvTaskName.telemetryStatus, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts index 66ee5c9b38..3e00143401 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts @@ -3,7 +3,6 @@ import { logTask, generateBuildConfig, executeTask, - RnvTaskOptionPresets, RnvContext, RnvTaskFn, inquirerPrompt, @@ -34,7 +33,7 @@ export const _addTemplate = (c: RnvContext, template: string) => { _writeObjectSync(c.paths.project.config, cnf); }; -const taskTemplateAdd: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTemplateAdd'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.templateAdd, originTask); @@ -55,9 +54,8 @@ const taskTemplateAdd: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Install additional template to the project', - fn: taskTemplateAdd, + fn, task: RnvTaskName.templateAdd, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 10fc00dfad..25691d0b3d 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -3,14 +3,13 @@ import { applyTemplate, getInstalledTemplateOptions, executeTask, - RnvTaskOptionPresets, RnvTaskFn, inquirerPrompt, RnvTask, RnvTaskName, } from '@rnv/core'; -const taskTemplateApply: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTemplateApply', `template: ${c.program.template}`); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.templateApply, originTask); @@ -45,9 +44,8 @@ const taskTemplateApply: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Reset project to specific template', - fn: taskTemplateApply, + fn, task: RnvTaskName.templateApply, - options: RnvTaskOptionPresets.withBase(), }; export default Task; diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts index 2618906da5..f7ea1a5d5d 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateList.ts @@ -1,7 +1,7 @@ -import { logToSummary, logTask, executeTask, RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { logToSummary, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; import { getTemplateOptions } from '../../templates'; -const taskTemplateList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTemplateList'); if (c.paths.project.configExists) { @@ -14,9 +14,8 @@ const taskTemplateList: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Show list of available templates', - fn: taskTemplateList, + fn, task: RnvTaskName.templateList, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts index b352b14a52..9c5b9b8b3d 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts @@ -5,13 +5,12 @@ import { createWorkspace, fsExistsSync, executeTask, - RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName, } from '@rnv/core'; -const taskWorkspaceAdd: RnvTaskFn = async (_c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { logTask('taskWorkspaceAdd'); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.workspaceAdd, originTask); @@ -50,9 +49,8 @@ const taskWorkspaceAdd: RnvTaskFn = async (_c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Add new workspace', - fn: taskWorkspaceAdd, + fn, task: RnvTaskName.workspaceAdd, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index 31dd8c1b04..80776c599b 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -1,6 +1,5 @@ import path from 'path'; import { - RnvTaskOptionPresets, copyFileSync, mkdirSync, fsWriteFileSync, @@ -18,7 +17,7 @@ import { } from '@rnv/core'; import { writeFileSync } from 'fs'; -const taskWorkspaceConfigure: RnvTaskFn = async (c) => { +const fn: RnvTaskFn = async (c) => { logTask('taskWorkspaceConfigure'); // Check globalConfig Dir @@ -84,9 +83,8 @@ const taskWorkspaceConfigure: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Preconfigures your current workspace defined via "workspaceID" prop in renative config file', - fn: taskWorkspaceConfigure, + fn, task: RnvTaskName.workspaceConfigure, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts index 6229ee37e7..fdde030ac4 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts @@ -4,13 +4,12 @@ import { logRaw, getWorkspaceConnectionString, executeTask, - RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName, } from '@rnv/core'; -const taskWorkspaceConnect: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskWorkspaceConnect'); if (!c.paths.project.configExists) { @@ -35,9 +34,8 @@ const taskWorkspaceConnect: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Connect project with selected workspace', - fn: taskWorkspaceConnect, + fn, task: RnvTaskName.workspaceConnect, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts index a93468a471..0684809aa9 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts @@ -1,16 +1,6 @@ -import { - generateOptions, - chalk, - logTask, - logToSummary, - executeTask, - RnvTaskOptionPresets, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { generateOptions, chalk, logTask, logToSummary, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; -const taskWorkspaceList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskWorkspaceList'); if (c.paths.project.configExists) { @@ -32,9 +22,8 @@ const taskWorkspaceList: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Show list of all available workspaces', - fn: taskWorkspaceList, + fn, task: RnvTaskName.workspaceList, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts index 976b06207f..7df5f1066d 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts @@ -1,6 +1,6 @@ -import { logTask, executeTask, RnvTaskOptionPresets, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; -const taskWorkspaceUpdate: RnvTaskFn = async (_c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { // TODO: taskWorkspaceUpdate logTask('taskWorkspaceUpdate'); @@ -11,9 +11,8 @@ const taskWorkspaceUpdate: RnvTaskFn = async (_c, _parentTask, originTask) => { const Task: RnvTask = { description: 'TODO: unused task', - fn: taskWorkspaceUpdate, + fn, task: RnvTaskName.workspaceUpdate, - options: RnvTaskOptionPresets.withBase(), isGlobalScope: true, isPrivate: true, }; diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index 22c618a4d2..6c8309d930 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -1,6 +1,6 @@ import { RnvEngine, generateEngineTasks, generateEngineExtensions } from '@rnv/core'; -import { Tasks as TasksWebOS } from '@rnv/sdk-webos'; -import { Tasks as TasksTizen } from '@rnv/sdk-tizen'; +import { Tasks as TasksSdkWebOS } from '@rnv/sdk-webos'; +import { Tasks as TasksSdkTizen } from '@rnv/sdk-tizen'; //@ts-ignore import CNF from '../renative.engine.json'; import taskBuild from './tasks/taskBuild'; @@ -8,7 +8,7 @@ import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, ...TasksWebOS, ...TasksTizen]), + tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen]), config: CNF, projectDirName: 'project', serverDirName: 'server', diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index 890c5f226d..cfa0399289 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -1,18 +1,18 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; -//@ts-ignore -import CNF from '../renative.engine.json'; +import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import taskRun from './tasks/taskRun'; import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; -import taskExport from './tasks/taskExport'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; +//@ts-ignore +import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskPackage, taskBuild, taskConfigure, taskStart, taskExport]), + tasks: generateEngineTasks([taskRun, taskPackage, taskBuild, taskConfigure, taskStart, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 1878cfe9ad..b444eb90be 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,19 +1,17 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; -import { Tasks as TasksAndroid } from '@rnv/sdk-android'; -import { Tasks as TasksApple } from '@rnv/sdk-apple'; +import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; +import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import taskRun from './tasks/taskRun'; import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskExport from './tasks/taskExport'; - -import taskLog from './tasks/taskLog'; -//@ts-ignore -import CNF from '../renative.engine.json'; import { withRNVBabel } from './adapters/babelAdapter'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; +//@ts-ignore +import CNF from '../renative.engine.json'; const Engine: RnvEngine = { tasks: generateEngineTasks([ @@ -23,9 +21,8 @@ const Engine: RnvEngine = { taskConfigure, taskStart, taskExport, - taskLog, - ...TasksAndroid, - ...TasksApple, + ...TasksSdkAndroid, + ...TasksSdkApple, ]), config: CNF, runtimeExtraProps: { diff --git a/packages/engine-rn-tvos/src/tasks/taskLog.ts b/packages/engine-rn-tvos/src/tasks/taskLog.ts deleted file mode 100644 index 03f984a782..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskLog.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - logTask, - RnvTaskOptionPresets, - executeTask, - logErrorPlatform, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; - -import { runAppleLog } from '@rnv/sdk-apple'; -import { runAndroidLog, checkAndConfigureAndroidSdks } from '@rnv/sdk-android'; - -const taskLog: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskLog', `parent:${parentTask}`); - - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); - - switch (c.platform) { - case 'androidtv': - case 'firetv': - await checkAndConfigureAndroidSdks(); - return runAndroidLog(); - case 'tvos': - return runAppleLog(); - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Attach logger to device or emulator and print out logs', - fn: taskLog, - task: RnvTaskName.log, - options: RnvTaskOptionPresets.withBase(), - platforms: ['tvos', 'androidtv', 'firetv'], - isGlobalScope: true, -}; - -export default Task; diff --git a/packages/engine-rn-tvos/src/tasks/taskPackage.ts b/packages/engine-rn-tvos/src/tasks/taskPackage.ts deleted file mode 100644 index 129415b452..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskPackage.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - getConfigProp, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { packageAndroid } from '@rnv/sdk-android'; -import { packageBundleForXcode } from '@rnv/sdk-apple'; - -const taskPackage: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskPackage', `parent:${parentTask}`); - const { platform } = c; - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); - - const bundleAssets = getConfigProp('bundleAssets'); - - if (!bundleAssets) { - return true; - } - - if (shouldSkipTask(RnvTaskName.package, originTask)) return true; - - switch (platform) { - case 'androidtv': - case 'firetv': { - // NOTE: react-native v0.73 triggers packaging automatically so we skipping it unless we need to - // package it explicitly for tasks where it is not triggered automatically - const signingConfig = getConfigProp('signingConfig'); - - if (originTask === RnvTaskName.eject || signingConfig !== 'Release') { - return packageAndroid(); - } - return true; - } - case 'tvos': - return packageBundleForXcode(); - default: - logErrorPlatform(); - return false; - } -}; - -const Task: RnvTask = { - description: 'Package source files into bundle', - fn: taskPackage, - task: RnvTaskName.package, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['tvos', 'androidtv', 'firetv'], -}; - -export default Task; diff --git a/packages/engine-rn-web/src/index.ts b/packages/engine-rn-web/src/index.ts index b01b4dcd6e..20068f09e2 100644 --- a/packages/engine-rn-web/src/index.ts +++ b/packages/engine-rn-web/src/index.ts @@ -1,6 +1,6 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; -import { Tasks as TasksWebOS } from '@rnv/sdk-webos'; -import { Tasks as TasksTizen } from '@rnv/sdk-tizen'; +import { Tasks as TasksSdkWebOS } from '@rnv/sdk-webos'; +import { Tasks as TasksSdkTizen } from '@rnv/sdk-tizen'; import { withRNVBabel, withRNVWebpack } from './adapter'; //@ts-ignore import CNF from '../renative.engine.json'; @@ -11,7 +11,15 @@ import taskStart from './tasks/taskStart'; import taskDebug from './tasks/taskDebug'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskDebug, ...TasksWebOS, ...TasksTizen]), + tasks: generateEngineTasks([ + taskRun, + taskBuild, + taskConfigure, + taskStart, + taskDebug, + ...TasksSdkWebOS, + ...TasksSdkTizen, + ]), config: CNF, projectDirName: '', serverDirName: '', diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index 1e3726dacf..ff9e163420 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -1,7 +1,7 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; -import { Tasks as TasksAndroid } from '@rnv/sdk-android'; -import { Tasks as TasksApple } from '@rnv/sdk-apple'; +import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; +import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; //@ts-ignore @@ -11,8 +11,6 @@ import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; -import taskExport from './tasks/taskExport'; -import taskLog from './tasks/taskLog'; import taskEject from './tasks/taskEject'; const Engine: RnvEngine = { @@ -22,11 +20,9 @@ const Engine: RnvEngine = { taskBuild, taskConfigure, taskStart, - taskExport, taskEject, - taskLog, - ...TasksAndroid, - ...TasksApple, + ...TasksSdkAndroid, + ...TasksSdkApple, ]), config: CNF, runtimeExtraProps: { diff --git a/packages/engine-rn/src/tasks/taskExport.ts b/packages/engine-rn/src/tasks/taskExport.ts deleted file mode 100644 index 549e073cb1..0000000000 --- a/packages/engine-rn/src/tasks/taskExport.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { exportXcodeProject } from '@rnv/sdk-apple'; - -const taskExport: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskExport', `parent:${parentTask}`); - const { platform } = c; - - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); - - if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - - switch (platform) { - case 'ios': - case 'macos': - return exportXcodeProject(); - case 'android': - case 'androidtv': - case 'androidwear': - // Android Platforms don't need extra export step - return true; - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Export the app into deployable binary', - fn: taskExport, - task: RnvTaskName.export, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], -}; - -export default Task; diff --git a/packages/engine-rn/src/tasks/taskLog.ts b/packages/engine-rn/src/tasks/taskLog.ts deleted file mode 100644 index 3f07c342a5..0000000000 --- a/packages/engine-rn/src/tasks/taskLog.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - executeTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { runAndroidLog, checkAndConfigureAndroidSdks } from '@rnv/sdk-android'; -import { runAppleLog } from '@rnv/sdk-apple'; - -import {} from '@rnv/sdk-android'; - -const taskLog: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskLog', `parent:${parentTask}`); - - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); - - switch (c.platform) { - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - await checkAndConfigureAndroidSdks(); - return runAndroidLog(); - case 'ios': - return runAppleLog(); - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Attach logger to device or emulator and print out logs', - fn: taskLog, - task: RnvTaskName.log, - options: RnvTaskOptionPresets.withBase(), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], - isGlobalScope: true, -}; - -export default Task; diff --git a/packages/engine-rn/src/tasks/taskPackage.ts b/packages/engine-rn/src/tasks/taskPackage.ts deleted file mode 100644 index 14cb0929e2..0000000000 --- a/packages/engine-rn/src/tasks/taskPackage.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - getConfigProp, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { packageAndroid } from '@rnv/sdk-android'; -import { packageBundleForXcode } from '@rnv/sdk-apple'; - -const taskPackage: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskPackage', `parent:${parentTask}`); - const { platform } = c; - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); - - if (shouldSkipTask(RnvTaskName.package, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets'); - - if (!bundleAssets) { - return true; - } - - switch (platform) { - case 'ios': - case 'macos': - return packageBundleForXcode(); - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': { - // NOTE: react-native v0.73 triggers packaging automatically so we skipping it unless we need to - // package it explicitly for tasks where it is not triggered automatically - - const signingConfig = getConfigProp('signingConfig'); - - if (originTask === RnvTaskName.eject || signingConfig !== 'Release') { - //if bundleAssets === true AND signingConfig is not releaase RN will not trigger packaging - return packageAndroid(); - } - return true; - } - default: - logErrorPlatform(); - return false; - } -}; - -const Task: RnvTask = { - description: 'Package source files into bundle', - fn: taskPackage, - task: RnvTaskName.package, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], -}; - -export default Task; diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index 9aead6476b..d7bae62ad5 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -6,5 +6,7 @@ export * from './jetifier'; import taskTargetLaunch from './tasks/taskTargetLaunch'; import taskTargetList from './tasks/taskTargetList'; import taskSdkConfigure from './tasks/taskSdkConfigure'; +import taskLog from './tasks/taskLog'; +import taskPackage from './tasks/taskPackage'; -export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure]; +export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure, taskLog, taskPackage]; diff --git a/packages/sdk-android/src/tasks/taskLog.ts b/packages/sdk-android/src/tasks/taskLog.ts new file mode 100644 index 0000000000..a793b20b25 --- /dev/null +++ b/packages/sdk-android/src/tasks/taskLog.ts @@ -0,0 +1,24 @@ +import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; + +import {} from '@rnv/sdk-android'; +import { runAndroidLog } from '../runner'; +import { checkAndConfigureAndroidSdks } from '../installer'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + logTask('taskLog', `parent:${parentTask}`); + + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); + + await checkAndConfigureAndroidSdks(); + return runAndroidLog(); +}; + +const Task: RnvTask = { + description: 'Attach logger to device or emulator and print out logs', + fn, + task: RnvTaskName.log, + platforms: ['android', 'androidtv', 'androidwear', 'firetv'], + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/sdk-android/src/tasks/taskPackage.ts b/packages/sdk-android/src/tasks/taskPackage.ts new file mode 100644 index 0000000000..2378c848e7 --- /dev/null +++ b/packages/sdk-android/src/tasks/taskPackage.ts @@ -0,0 +1,46 @@ +import { + logTask, + RnvTaskFn, + executeOrSkipTask, + shouldSkipTask, + getConfigProp, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { packageAndroid } from '../runner'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + logTask('taskPackage', `parent:${parentTask}`); + + await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); + + if (shouldSkipTask(RnvTaskName.package, originTask)) return true; + + const bundleAssets = getConfigProp('bundleAssets'); + + if (!bundleAssets) { + return true; + } + + // NOTE: react-native v0.73 triggers packaging automatically so we skipping it unless we need to + // package it explicitly for tasks where it is not triggered automatically + + const signingConfig = getConfigProp('signingConfig'); + + if (originTask === RnvTaskName.eject || signingConfig !== 'Release') { + //if bundleAssets === true AND signingConfig is not releaase RN will not trigger packaging + return packageAndroid(); + } + return true; +}; + +const Task: RnvTask = { + description: 'Package source files into bundle', + fn, + task: RnvTaskName.package, + options: RnvTaskOptionPresets.withConfigure(), + platforms: ['android', 'androidtv', 'androidwear', 'firetv'], +}; + +export default Task; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index 9189356b12..8d8b771938 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -8,6 +8,9 @@ import taskCryptoInstallCerts from './tasks/taskCryptoInstallCerts'; import taskCryptoUpdateProfile from './tasks/taskCryptoUpdateProfile'; import taskCryptoUpdateProfiles from './tasks/taskCryptoUpdateProfiles'; import taskCryptoInstallProfiles from './tasks/taskCryptoInstallProfiles'; +import taskLog from './tasks/taskLog'; +import taskExport from './tasks/taskExport'; +import taskPackage from './tasks/taskPackage'; export const Tasks = [ taskTargetLaunch, @@ -16,4 +19,7 @@ export const Tasks = [ taskCryptoUpdateProfile, taskCryptoUpdateProfiles, taskCryptoInstallProfiles, + taskLog, + taskExport, + taskPackage, ]; diff --git a/packages/engine-rn-macos/src/tasks/taskExport.ts b/packages/sdk-apple/src/tasks/taskExport.ts similarity index 52% rename from packages/engine-rn-macos/src/tasks/taskExport.ts rename to packages/sdk-apple/src/tasks/taskExport.ts index 39cf506e2f..e9ace8c89f 100644 --- a/packages/engine-rn-macos/src/tasks/taskExport.ts +++ b/packages/sdk-apple/src/tasks/taskExport.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, logTask, RnvTaskOptionPresets, executeOrSkipTask, @@ -8,30 +7,24 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { exportXcodeProject } from '@rnv/sdk-apple'; +import { exportXcodeProject } from '../runner'; -const taskExport: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskExport', `parent:${parentTask}`); - const { platform } = c; await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - switch (platform) { - case 'macos': - return exportXcodeProject(); - default: - return logErrorPlatform(); - } + return exportXcodeProject(); }; const Task: RnvTask = { description: 'Export the app into deployable binary', - fn: taskExport, + fn, task: RnvTaskName.export, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['macos'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: ['ios', 'tvos', 'macos'], }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskLog.ts b/packages/sdk-apple/src/tasks/taskLog.ts new file mode 100644 index 0000000000..90ccd34231 --- /dev/null +++ b/packages/sdk-apple/src/tasks/taskLog.ts @@ -0,0 +1,20 @@ +import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { runAppleLog } from '../runner'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + logTask('taskLog', `parent:${parentTask}`); + + await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); + + return runAppleLog(); +}; + +const Task: RnvTask = { + description: 'Attach logger to device or emulator and print out logs', + fn, + task: RnvTaskName.log, + platforms: ['ios', 'macos', 'tvos'], + isGlobalScope: true, +}; + +export default Task; diff --git a/packages/engine-rn-macos/src/tasks/taskPackage.ts b/packages/sdk-apple/src/tasks/taskPackage.ts similarity index 57% rename from packages/engine-rn-macos/src/tasks/taskPackage.ts rename to packages/sdk-apple/src/tasks/taskPackage.ts index 48e9f0c3d0..b8ac0b7c45 100644 --- a/packages/engine-rn-macos/src/tasks/taskPackage.ts +++ b/packages/sdk-apple/src/tasks/taskPackage.ts @@ -1,45 +1,37 @@ import { - RnvTaskFn, - logErrorPlatform, logTask, - RnvTaskOptionPresets, - getConfigProp, + RnvTaskFn, executeOrSkipTask, shouldSkipTask, + getConfigProp, RnvTask, RnvTaskName, + RnvTaskOptionPresets, } from '@rnv/core'; -import { packageBundleForXcode } from '@rnv/sdk-apple'; +import { packageBundleForXcode } from '../runner'; -const taskPackage: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskPackage', `parent:${parentTask}`); - const { platform } = c; await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); + if (shouldSkipTask(RnvTaskName.package, originTask)) return true; + const bundleAssets = getConfigProp('bundleAssets'); if (!bundleAssets) { return true; } - if (shouldSkipTask(RnvTaskName.package, originTask)) return true; - - switch (platform) { - case 'macos': - return packageBundleForXcode(); - default: - logErrorPlatform(); - return false; - } + return packageBundleForXcode(); }; const Task: RnvTask = { description: 'Package source files into bundle', - fn: taskPackage, + fn, task: RnvTaskName.package, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['macos'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: ['ios', 'tvos', 'macos'], }; export default Task; From c18bb48f539814e3a2eb837c0c6a65e0f59ec7ea Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 20:21:18 +0100 Subject: [PATCH 098/175] task migration pt2 --- .../engine-rn-electron/src/tasks/taskBuild.ts | 20 ++----- .../src/tasks/taskConfigure.ts | 16 ++---- .../src/tasks/taskExport.ts | 17 ++---- .../engine-rn-electron/src/tasks/taskRun.ts | 17 ++---- packages/engine-rn-macos/src/index.ts | 4 +- packages/engine-rn-tvos/src/index.ts | 14 +---- .../engine-rn-tvos/src/tasks/taskConfigure.ts | 50 ---------------- .../engine-rn-tvos/src/tasks/taskExport.ts | 41 ------------- packages/engine-rn/src/index.ts | 13 +---- packages/engine-rn/src/tasks/taskConfigure.ts | 57 ------------------- packages/sdk-android/src/index.ts | 3 +- .../src/tasks/taskConfigure.ts | 32 +++++------ packages/sdk-android/src/tasks/taskLog.ts | 2 - packages/sdk-apple/src/index.ts | 2 + packages/sdk-apple/src/tasks/taskConfigure.ts | 40 +++++++++++++ packages/sdk-react-native/src/common.ts | 2 +- 16 files changed, 79 insertions(+), 251 deletions(-) delete mode 100644 packages/engine-rn-tvos/src/tasks/taskConfigure.ts delete mode 100644 packages/engine-rn-tvos/src/tasks/taskExport.ts delete mode 100644 packages/engine-rn/src/tasks/taskConfigure.ts rename packages/{engine-rn-macos => sdk-android}/src/tasks/taskConfigure.ts (56%) create mode 100644 packages/sdk-apple/src/tasks/taskConfigure.ts diff --git a/packages/engine-rn-electron/src/tasks/taskBuild.ts b/packages/engine-rn-electron/src/tasks/taskBuild.ts index 271483148c..96be1f87ed 100644 --- a/packages/engine-rn-electron/src/tasks/taskBuild.ts +++ b/packages/engine-rn-electron/src/tasks/taskBuild.ts @@ -1,7 +1,6 @@ import { RnvTaskFn, logTask, - logErrorPlatform, executeOrSkipTask, shouldSkipTask, RnvTask, @@ -10,30 +9,19 @@ import { } from '@rnv/core'; import { buildElectron } from '../sdk'; -const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskBuild', `parent:${parentTask}`); - const { platform } = c; - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.build, originTask); - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - switch (platform) { - case 'macos': - case 'windows': - case 'linux': - await buildElectron(); - return; - default: - logErrorPlatform(); - } + return buildElectron(); }; const Task: RnvTask = { description: 'Build project binary', - fn: taskBuild, + fn, task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), + options: RnvTaskOptionPresets.withConfigure(), platforms: ['macos', 'windows', 'linux'], }; diff --git a/packages/engine-rn-electron/src/tasks/taskConfigure.ts b/packages/engine-rn-electron/src/tasks/taskConfigure.ts index 5fadfdea33..83422de61c 100644 --- a/packages/engine-rn-electron/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-electron/src/tasks/taskConfigure.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, copySharedPlatforms, logTask, executeTask, @@ -12,7 +11,7 @@ import { } from '@rnv/core'; import { configureElectronProject } from '../sdk'; -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); @@ -27,21 +26,14 @@ const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { return true; } - switch (c.platform) { - case 'macos': - case 'windows': - case 'linux': - return configureElectronProject(); - default: - return logErrorPlatform(); - } + return configureElectronProject(); }; const Task: RnvTask = { description: 'Configure current project', - fn: taskConfigure, + fn, task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), + options: RnvTaskOptionPresets.withConfigure(), platforms: ['macos', 'windows', 'linux'], }; diff --git a/packages/engine-rn-electron/src/tasks/taskExport.ts b/packages/engine-rn-electron/src/tasks/taskExport.ts index 9b49a9cff3..4013ec68d3 100644 --- a/packages/engine-rn-electron/src/tasks/taskExport.ts +++ b/packages/engine-rn-electron/src/tasks/taskExport.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, logTask, executeOrSkipTask, shouldSkipTask, @@ -10,29 +9,21 @@ import { } from '@rnv/core'; import { exportElectron } from '../sdk'; -const taskExport: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskExport', `parent:${parentTask}`); - const { platform } = c; await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - switch (platform) { - case 'macos': - case 'windows': - case 'linux': - return exportElectron(); - default: - logErrorPlatform(); - } + return exportElectron(); }; const Task: RnvTask = { description: 'Export the app into deployable binary', - fn: taskExport, + fn, task: RnvTaskName.export, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), + options: RnvTaskOptionPresets.withConfigure(), platforms: ['macos', 'windows', 'linux'], }; diff --git a/packages/engine-rn-electron/src/tasks/taskRun.ts b/packages/engine-rn-electron/src/tasks/taskRun.ts index 9dedcbf054..b44b567ec3 100644 --- a/packages/engine-rn-electron/src/tasks/taskRun.ts +++ b/packages/engine-rn-electron/src/tasks/taskRun.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, logTask, executeOrSkipTask, shouldSkipTask, @@ -10,8 +9,7 @@ import { } from '@rnv/core'; import { runElectron } from '../sdk'; -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; +const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; const { target } = c.runtime; const { hosted } = c.program; @@ -21,22 +19,15 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - switch (platform) { - case 'macos': - case 'windows': - case 'linux': - return runElectron(); - default: - return logErrorPlatform(); - } + return runElectron(); }; const Task: RnvTask = { description: 'Run your electron app on your machine', - fn: taskRun, + fn, task: RnvTaskName.run, isPriorityOrder: true, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), + options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: ['macos', 'windows', 'linux'], }; diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index cfa0399289..75318cb8dc 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -3,16 +3,14 @@ import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import taskRun from './tasks/taskRun'; -import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; -import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; //@ts-ignore import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskPackage, taskBuild, taskConfigure, taskStart, ...TasksSdkApple]), + tasks: generateEngineTasks([taskRun, taskBuild, taskStart, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index b444eb90be..74c7a30348 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -2,11 +2,8 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/c import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import taskRun from './tasks/taskRun'; -import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; -import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; -import taskExport from './tasks/taskExport'; import { withRNVBabel } from './adapters/babelAdapter'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; @@ -14,16 +11,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([ - taskRun, - taskPackage, - taskBuild, - taskConfigure, - taskStart, - taskExport, - ...TasksSdkAndroid, - ...TasksSdkApple, - ]), + tasks: generateEngineTasks([taskRun, taskBuild, taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', diff --git a/packages/engine-rn-tvos/src/tasks/taskConfigure.ts b/packages/engine-rn-tvos/src/tasks/taskConfigure.ts deleted file mode 100644 index 613cf33fb5..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskConfigure.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - executeTask, - shouldSkipTask, - configureEntryPoint, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { configureGradleProject, jetifyIfRequired } from '@rnv/sdk-android'; -import { configureXcodeProject } from '@rnv/sdk-apple'; - -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - - await configureEntryPoint(c.platform); - - if (c.program.only && !!parentTask) { - return true; - } - - switch (c.platform) { - case 'androidtv': - case 'firetv': - await configureGradleProject(); - await jetifyIfRequired(); - return true; - case 'tvos': - await configureXcodeProject(); - return true; - default: - await logErrorPlatform(); - return true; - } -}; - -const Task: RnvTask = { - description: 'Configure current project', - fn: taskConfigure, - task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['tvos', 'androidtv', 'firetv'], -}; - -export default Task; diff --git a/packages/engine-rn-tvos/src/tasks/taskExport.ts b/packages/engine-rn-tvos/src/tasks/taskExport.ts deleted file mode 100644 index 4a75c170b1..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskExport.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { exportXcodeProject } from '@rnv/sdk-apple'; - -const taskExport: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskExport', `parent:${parentTask}`); - const { platform } = c; - - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); - - if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - - switch (platform) { - case 'androidtv': - case 'firetv': - // Android Platforms don't need extra export step - return true; - case 'tvos': - return exportXcodeProject(); - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Export the app into deployable binary', - fn: taskExport, - task: RnvTaskName.export, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['tvos', 'androidtv', 'firetv'], -}; - -export default Task; diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index ff9e163420..e55d4d3906 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -7,23 +7,12 @@ import { withRNVBabel } from './adapters/babelAdapter'; //@ts-ignore import CNF from '../renative.engine.json'; import taskRun from './tasks/taskRun'; -import taskPackage from './tasks/taskPackage'; import taskBuild from './tasks/taskBuild'; -import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskEject from './tasks/taskEject'; const Engine: RnvEngine = { - tasks: generateEngineTasks([ - taskRun, - taskPackage, - taskBuild, - taskConfigure, - taskStart, - taskEject, - ...TasksSdkAndroid, - ...TasksSdkApple, - ]), + tasks: generateEngineTasks([taskRun, taskBuild, taskStart, taskEject, ...TasksSdkAndroid, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn/src/tasks/taskConfigure.ts b/packages/engine-rn/src/tasks/taskConfigure.ts deleted file mode 100644 index 4be52ed0d1..0000000000 --- a/packages/engine-rn/src/tasks/taskConfigure.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - configureEntryPoint, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { configureGradleProject, jetifyIfRequired } from '@rnv/sdk-android'; -import { configureXcodeProject } from '@rnv/sdk-apple'; -import { configureFonts } from '@rnv/sdk-react-native'; - -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - - await configureEntryPoint(c.platform); - - if (c.program.only && !!parentTask) { - return true; - } - - switch (c.platform) { - case 'ios': - case 'macos': - await configureXcodeProject(); - break; - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - await configureGradleProject(); - await jetifyIfRequired(); - break; - default: - logErrorPlatform(); - break; - } - - await configureFonts(); - return true; -}; - -const Task: RnvTask = { - description: 'Configure current project', - fn: taskConfigure, - task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], -}; - -export default Task; diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index d7bae62ad5..0a12c98287 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -8,5 +8,6 @@ import taskTargetList from './tasks/taskTargetList'; import taskSdkConfigure from './tasks/taskSdkConfigure'; import taskLog from './tasks/taskLog'; import taskPackage from './tasks/taskPackage'; +import taskConfigure from './tasks/taskConfigure'; -export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure, taskLog, taskPackage]; +export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure, taskLog, taskPackage, taskConfigure]; diff --git a/packages/engine-rn-macos/src/tasks/taskConfigure.ts b/packages/sdk-android/src/tasks/taskConfigure.ts similarity index 56% rename from packages/engine-rn-macos/src/tasks/taskConfigure.ts rename to packages/sdk-android/src/tasks/taskConfigure.ts index bbf64953f6..7251dbecd5 100644 --- a/packages/engine-rn-macos/src/tasks/taskConfigure.ts +++ b/packages/sdk-android/src/tasks/taskConfigure.ts @@ -1,17 +1,18 @@ import { - RnvTaskFn, - logErrorPlatform, logTask, - RnvTaskOptionPresets, + RnvTaskFn, + configureEntryPoint, executeTask, shouldSkipTask, - configureEntryPoint, RnvTask, RnvTaskName, + RnvTaskOptionPresets, } from '@rnv/core'; -import { configureXcodeProject } from '@rnv/sdk-apple'; +import { configureGradleProject } from '../runner'; +import { jetifyIfRequired } from '../jetifier'; +import { configureFontSources } from '@rnv/sdk-react-native'; -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); @@ -23,22 +24,19 @@ const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { return true; } - switch (c.platform) { - case 'macos': - await configureXcodeProject(); - return true; - default: - await logErrorPlatform(); - return true; - } + await configureGradleProject(); + await jetifyIfRequired(); + + await configureFontSources(); + return true; }; const Task: RnvTask = { description: 'Configure current project', - fn: taskConfigure, + fn, task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['macos'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: ['android', 'androidtv', 'androidwear', 'firetv'], }; export default Task; diff --git a/packages/sdk-android/src/tasks/taskLog.ts b/packages/sdk-android/src/tasks/taskLog.ts index a793b20b25..691f604200 100644 --- a/packages/sdk-android/src/tasks/taskLog.ts +++ b/packages/sdk-android/src/tasks/taskLog.ts @@ -1,6 +1,4 @@ import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; - -import {} from '@rnv/sdk-android'; import { runAndroidLog } from '../runner'; import { checkAndConfigureAndroidSdks } from '../installer'; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index 8d8b771938..5dcf082f85 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -11,6 +11,7 @@ import taskCryptoInstallProfiles from './tasks/taskCryptoInstallProfiles'; import taskLog from './tasks/taskLog'; import taskExport from './tasks/taskExport'; import taskPackage from './tasks/taskPackage'; +import taskConfigure from './tasks/taskConfigure'; export const Tasks = [ taskTargetLaunch, @@ -22,4 +23,5 @@ export const Tasks = [ taskLog, taskExport, taskPackage, + taskConfigure, ]; diff --git a/packages/sdk-apple/src/tasks/taskConfigure.ts b/packages/sdk-apple/src/tasks/taskConfigure.ts new file mode 100644 index 0000000000..7508b993bb --- /dev/null +++ b/packages/sdk-apple/src/tasks/taskConfigure.ts @@ -0,0 +1,40 @@ +import { + logTask, + RnvTaskFn, + configureEntryPoint, + executeTask, + shouldSkipTask, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { configureFontSources } from '@rnv/sdk-react-native'; +import { configureXcodeProject } from '../runner'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + logTask('taskConfigure'); + + await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); + if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; + + await configureEntryPoint(c.platform); + + if (c.program.only && !!parentTask) { + return true; + } + + await configureXcodeProject(); + await configureFontSources(); + + return true; +}; + +const Task: RnvTask = { + description: 'Configure current project', + fn, + task: RnvTaskName.configure, + options: RnvTaskOptionPresets.withConfigure(), + platforms: ['ios', 'tvos', 'macos'], +}; + +export default Task; diff --git a/packages/sdk-react-native/src/common.ts b/packages/sdk-react-native/src/common.ts index c3b3c93305..63920fd8e1 100644 --- a/packages/sdk-react-native/src/common.ts +++ b/packages/sdk-react-native/src/common.ts @@ -111,7 +111,7 @@ const poll = (fn: () => Promise, timeout = 30000, interval = 1000) => { return new Promise(checkCondition); }; -export const configureFonts = async () => { +export const configureFontSources = async () => { const c = getContext(); const fontFolders = new Set(); parseFonts((font, dir) => { From 6c8a17346ec97b20a3eadc0f826a3caf98ee5cf3 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 20:50:29 +0100 Subject: [PATCH 099/175] task migration pt3 --- packages/engine-rn-macos/src/index.ts | 3 +- packages/engine-rn-macos/src/tasks/taskRun.ts | 65 -------------- packages/engine-rn-tvos/src/index.ts | 3 +- packages/engine-rn-tvos/src/tasks/taskRun.ts | 84 ----------------- packages/engine-rn/src/index.ts | 4 +- packages/engine-rn/src/tasks/taskEject.ts | 60 ------------- packages/engine-rn/src/tasks/taskRun.ts | 89 ------------------- packages/sdk-android/src/constants.ts | 4 + packages/sdk-android/src/index.ts | 3 +- .../sdk-android/src/tasks/taskConfigure.ts | 3 +- packages/sdk-android/src/tasks/taskEject.ts | 34 +++++++ packages/sdk-android/src/tasks/taskLog.ts | 3 +- packages/sdk-android/src/tasks/taskPackage.ts | 3 +- packages/sdk-android/src/tasks/taskRun.ts | 63 +++++++++++++ .../sdk-android/src/tasks/taskSdkConfigure.ts | 3 +- .../sdk-android/src/tasks/taskTargetLaunch.ts | 3 +- .../sdk-android/src/tasks/taskTargetList.ts | 7 +- packages/sdk-apple/src/common.ts | 4 +- packages/sdk-apple/src/index.ts | 2 + packages/sdk-apple/src/tasks/taskConfigure.ts | 15 +--- .../src/tasks/taskCryptoInstallCerts.ts | 5 +- .../src/tasks/taskCryptoInstallProfiles.ts | 6 +- .../src/tasks/taskCryptoUpdateProfile.ts | 6 +- .../src/tasks/taskCryptoUpdateProfiles.ts | 5 +- packages/sdk-apple/src/tasks/taskEject.ts | 35 ++++++++ packages/sdk-apple/src/tasks/taskExport.ts | 3 +- packages/sdk-apple/src/tasks/taskLog.ts | 3 +- packages/sdk-apple/src/tasks/taskPackage.ts | 3 +- packages/sdk-apple/src/tasks/taskRun.ts | 56 ++++++++++++ .../sdk-apple/src/tasks/taskTargetLaunch.ts | 3 +- .../sdk-apple/src/tasks/taskTargetList.ts | 3 +- 31 files changed, 238 insertions(+), 345 deletions(-) delete mode 100644 packages/engine-rn-macos/src/tasks/taskRun.ts delete mode 100644 packages/engine-rn-tvos/src/tasks/taskRun.ts delete mode 100644 packages/engine-rn/src/tasks/taskEject.ts delete mode 100644 packages/engine-rn/src/tasks/taskRun.ts create mode 100644 packages/sdk-android/src/tasks/taskEject.ts create mode 100644 packages/sdk-android/src/tasks/taskRun.ts create mode 100644 packages/sdk-apple/src/tasks/taskEject.ts create mode 100644 packages/sdk-apple/src/tasks/taskRun.ts diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index 75318cb8dc..8186342b3c 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -2,7 +2,6 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/c import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; -import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; import taskStart from './tasks/taskStart'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; @@ -10,7 +9,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskStart, ...TasksSdkApple]), + tasks: generateEngineTasks([taskBuild, taskStart, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-macos/src/tasks/taskRun.ts b/packages/engine-rn-macos/src/tasks/taskRun.ts deleted file mode 100644 index 5002f9201d..0000000000 --- a/packages/engine-rn-macos/src/tasks/taskRun.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { - RnvTaskFn, - getConfigProp, - logErrorPlatform, - logTask, - logSummary, - logRaw, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { runXcodeProject } from '@rnv/sdk-apple'; -import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; - -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { port } = c.runtime; - const { target } = c.runtime; - const { hosted } = c.program; - logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets', false); - - switch (platform) { - case 'macos': - if (!c.program.only) { - await startBundlerIfRequired(RnvTaskName.run, originTask); - await runXcodeProject(); - if (!bundleAssets) { - logSummary({ header: 'BUNDLER STARTED' }); - } - return waitForBundlerIfRequired(); - } - return runXcodeProject(); - default: - return logErrorPlatform(); - } -}; - -const taskRunHelp = async () => { - logRaw(` -More info at: https://renative.org/docs/api-cli -`); -}; - -const Task: RnvTask = { - description: 'Run your macos app on target device or emulator', - fn: taskRun, - fnHelp: taskRunHelp, - task: RnvTaskName.run, - isPriorityOrder: true, - // dependencies: { - // before: RnvTaskName.configure, - // }, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), - platforms: ['macos'], -}; - -export default Task; diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 74c7a30348..cdacddc15d 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,7 +1,6 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; -import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; import taskStart from './tasks/taskStart'; import { withRNVBabel } from './adapters/babelAdapter'; @@ -11,7 +10,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), + tasks: generateEngineTasks([taskBuild, taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', diff --git a/packages/engine-rn-tvos/src/tasks/taskRun.ts b/packages/engine-rn-tvos/src/tasks/taskRun.ts deleted file mode 100644 index b661637032..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskRun.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { - RnvTaskFn, - RnvTaskOptionPresets, - getConfigProp, - logTask, - logSummary, - logRaw, - logErrorPlatform, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { packageAndroid, runAndroid, getAndroidDeviceToRunOn } from '@rnv/sdk-android'; -import { runXcodeProject, getIosDeviceToRunOn } from '@rnv/sdk-apple'; -import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; - -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { port } = c.runtime; - const { target } = c.runtime; - const { hosted } = c.program; - logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets', false); - - switch (platform) { - case 'androidtv': - case 'firetv': - // eslint-disable-next-line no-case-declarations - const runDevice = await getAndroidDeviceToRunOn(); - if (!c.program.only) { - await startBundlerIfRequired(RnvTaskName.run, originTask); - if (bundleAssets) { - await packageAndroid(); - } - await runAndroid(runDevice!); - if (!bundleAssets) { - logSummary({ header: 'BUNDLER STARTED' }); - } - return waitForBundlerIfRequired(); - } - return runAndroid(runDevice!); - case 'tvos': - // eslint-disable-next-line no-case-declarations - const runDeviceArgs = await getIosDeviceToRunOn(c); - if (!c.program.only) { - await startBundlerIfRequired(RnvTaskName.run, originTask); - await runXcodeProject(runDeviceArgs); - if (!bundleAssets) { - logSummary({ header: 'BUNDLER STARTED' }); - } - return waitForBundlerIfRequired(); - } - return runXcodeProject(runDeviceArgs); - default: - return logErrorPlatform(); - } -}; - -const taskRunHelp = async () => { - logRaw(` -More info at: https://renative.org/docs/api-cli -`); -}; - -const Task: RnvTask = { - description: 'Run your tv app on target device or emulator', - fn: taskRun, - fnHelp: taskRunHelp, - task: RnvTaskName.run, - isPriorityOrder: true, - // dependencies: { - // before: RnvTaskName.configure, - // }, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), - platforms: ['tvos', 'androidtv', 'firetv'], -}; - -export default Task; diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index e55d4d3906..287eec1825 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -6,13 +6,11 @@ import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; //@ts-ignore import CNF from '../renative.engine.json'; -import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; import taskStart from './tasks/taskStart'; -import taskEject from './tasks/taskEject'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskStart, taskEject, ...TasksSdkAndroid, ...TasksSdkApple]), + tasks: generateEngineTasks([taskBuild, taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn/src/tasks/taskEject.ts b/packages/engine-rn/src/tasks/taskEject.ts deleted file mode 100644 index a926f3f551..0000000000 --- a/packages/engine-rn/src/tasks/taskEject.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { ejectGradleProject } from '@rnv/sdk-android'; -import { ejectXcodeProject } from '@rnv/sdk-apple'; - -const taskEject: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskEject'); - const { platform } = c; - - c.runtime._platformBuildsSuffix = '_eject'; - - switch (platform) { - case 'android': - case 'androidtv': - case 'androidwear': - c.runtime._platformBuildsSuffix = '_eject/android'; - break; - default: - // Do nothing - } - - c.runtime._skipNativeDepResolutions = true; - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.eject, originTask); - - if (shouldSkipTask(RnvTaskName.eject, originTask)) return true; - - switch (platform) { - case 'ios': - case 'macos': - await ejectXcodeProject(); - return true; - case 'android': - case 'androidtv': - case 'androidwear': - await ejectGradleProject(); - return true; - default: - await logErrorPlatform(); - return true; - } -}; - -const Task: RnvTask = { - description: 'Eject current project app to self contained native project', - fn: taskEject, - task: RnvTaskName.eject, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], -}; - -export default Task; diff --git a/packages/engine-rn/src/tasks/taskRun.ts b/packages/engine-rn/src/tasks/taskRun.ts deleted file mode 100644 index 735a443c7f..0000000000 --- a/packages/engine-rn/src/tasks/taskRun.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - logRaw, - getConfigProp, - logSummary, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { packageAndroid, runAndroid, getAndroidDeviceToRunOn } from '@rnv/sdk-android'; -import { runXcodeProject, getIosDeviceToRunOn } from '@rnv/sdk-apple'; -import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; - -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { port } = c.runtime; - const { hosted } = c.program; - logTask('taskRun', `parent:${parentTask} port:${port} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets', false); - - switch (platform) { - case 'ios': - case 'macos': - // eslint-disable-next-line no-case-declarations - const runDeviceArgs = await getIosDeviceToRunOn(c); - if (!c.program.only) { - await startBundlerIfRequired(RnvTaskName.run, originTask); - await runXcodeProject(runDeviceArgs); - if (!bundleAssets) { - logSummary({ header: 'BUNDLER STARTED' }); - } - return waitForBundlerIfRequired(); - } - return runXcodeProject(runDeviceArgs); - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - // eslint-disable-next-line no-case-declarations - const runDevice = await getAndroidDeviceToRunOn(); - if (runDevice) { - c.runtime.target = runDevice?.name || runDevice?.udid; - } - if (!c.program.only) { - await startBundlerIfRequired(RnvTaskName.run, originTask); - if (bundleAssets || platform === 'androidwear') { - await packageAndroid(); - } - await runAndroid(runDevice!); - if (!bundleAssets) { - logSummary({ header: 'BUNDLER STARTED' }); - } - return waitForBundlerIfRequired(); - } - return runAndroid(runDevice!); - default: - return logErrorPlatform(); - } -}; - -const taskRunHelp = async () => { - logRaw(` -More info at: https://renative.org/docs/api-cli -`); -}; - -const Task: RnvTask = { - description: 'Run your rn app on target device or emulator', - fn: taskRun, - fnHelp: taskRunHelp, - task: RnvTaskName.run, - isPriorityOrder: true, - // dependencies: { - // before: RnvTaskName.configure, - // }, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], -}; - -export default Task; diff --git a/packages/sdk-android/src/constants.ts b/packages/sdk-android/src/constants.ts index e38364e239..5d2cd64e14 100644 --- a/packages/sdk-android/src/constants.ts +++ b/packages/sdk-android/src/constants.ts @@ -1,4 +1,8 @@ +import { PlatformKey } from '@rnv/core'; + export const CLI_ANDROID_EMULATOR = 'androidEmulator'; export const CLI_ANDROID_ADB = 'androidAdb'; export const CLI_ANDROID_AVDMANAGER = 'androidAvdManager'; export const CLI_ANDROID_SDKMANAGER = 'androidSdkManager'; + +export const SdkPlatforms: Array = ['android', 'androidtv', 'androidwear', 'firetv']; diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index 0a12c98287..b62e6ceadf 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -9,5 +9,6 @@ import taskSdkConfigure from './tasks/taskSdkConfigure'; import taskLog from './tasks/taskLog'; import taskPackage from './tasks/taskPackage'; import taskConfigure from './tasks/taskConfigure'; +import taskRun from './tasks/taskRun'; -export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure, taskLog, taskPackage, taskConfigure]; +export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure, taskLog, taskPackage, taskConfigure, taskRun]; diff --git a/packages/sdk-android/src/tasks/taskConfigure.ts b/packages/sdk-android/src/tasks/taskConfigure.ts index 7251dbecd5..3fb466e3ff 100644 --- a/packages/sdk-android/src/tasks/taskConfigure.ts +++ b/packages/sdk-android/src/tasks/taskConfigure.ts @@ -11,6 +11,7 @@ import { import { configureGradleProject } from '../runner'; import { jetifyIfRequired } from '../jetifier'; import { configureFontSources } from '@rnv/sdk-react-native'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); @@ -36,7 +37,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['android', 'androidtv', 'androidwear', 'firetv'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-android/src/tasks/taskEject.ts b/packages/sdk-android/src/tasks/taskEject.ts new file mode 100644 index 0000000000..a12330bc22 --- /dev/null +++ b/packages/sdk-android/src/tasks/taskEject.ts @@ -0,0 +1,34 @@ +import { + logTask, + RnvTaskFn, + executeOrSkipTask, + shouldSkipTask, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { ejectGradleProject } from '../ejector'; +import { SdkPlatforms } from '../constants'; + +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskEject'); + + c.runtime._platformBuildsSuffix = '_eject/android'; + c.runtime._skipNativeDepResolutions = true; + + await executeOrSkipTask(RnvTaskName.package, RnvTaskName.eject, originTask); + + if (shouldSkipTask(RnvTaskName.eject, originTask)) return true; + + await ejectGradleProject(); +}; + +const Task: RnvTask = { + description: 'Eject current project app to self contained native project', + fn, + task: RnvTaskName.eject, + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, +}; + +export default Task; diff --git a/packages/sdk-android/src/tasks/taskLog.ts b/packages/sdk-android/src/tasks/taskLog.ts index 691f604200..8024fa48f3 100644 --- a/packages/sdk-android/src/tasks/taskLog.ts +++ b/packages/sdk-android/src/tasks/taskLog.ts @@ -1,6 +1,7 @@ import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; import { runAndroidLog } from '../runner'; import { checkAndConfigureAndroidSdks } from '../installer'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskLog', `parent:${parentTask}`); @@ -15,7 +16,7 @@ const Task: RnvTask = { description: 'Attach logger to device or emulator and print out logs', fn, task: RnvTaskName.log, - platforms: ['android', 'androidtv', 'androidwear', 'firetv'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-android/src/tasks/taskPackage.ts b/packages/sdk-android/src/tasks/taskPackage.ts index 2378c848e7..0d4898d092 100644 --- a/packages/sdk-android/src/tasks/taskPackage.ts +++ b/packages/sdk-android/src/tasks/taskPackage.ts @@ -9,6 +9,7 @@ import { RnvTaskOptionPresets, } from '@rnv/core'; import { packageAndroid } from '../runner'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskPackage', `parent:${parentTask}`); @@ -40,7 +41,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['android', 'androidtv', 'androidwear', 'firetv'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-android/src/tasks/taskRun.ts b/packages/sdk-android/src/tasks/taskRun.ts new file mode 100644 index 0000000000..e677af0eec --- /dev/null +++ b/packages/sdk-android/src/tasks/taskRun.ts @@ -0,0 +1,63 @@ +import { + logTask, + RnvTaskFn, + executeOrSkipTask, + shouldSkipTask, + logRaw, + getConfigProp, + logSummary, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; +import { getAndroidDeviceToRunOn, packageAndroid, runAndroid } from '../runner'; +import { SdkPlatforms } from '../constants'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + const { platform } = c; + const { port } = c.runtime; + const { hosted } = c.program; + logTask('taskRun', `parent:${parentTask} port:${port} hosted:${hosted}`); + + await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); + + if (shouldSkipTask(RnvTaskName.run, originTask)) return true; + + const bundleAssets = getConfigProp('bundleAssets', false); + + const runDevice = await getAndroidDeviceToRunOn(); + if (runDevice) { + c.runtime.target = runDevice?.name || runDevice?.udid; + } + if (!c.program.only) { + await startBundlerIfRequired(RnvTaskName.run, originTask); + if (bundleAssets || platform === 'androidwear') { + await packageAndroid(); + } + await runAndroid(runDevice!); + if (!bundleAssets) { + logSummary({ header: 'BUNDLER STARTED' }); + } + return waitForBundlerIfRequired(); + } + return runAndroid(runDevice!); +}; + +const taskRunHelp = async () => { + logRaw(` +More info at: https://renative.org/docs/api-cli +`); +}; + +const Task: RnvTask = { + description: 'Run your rn app on target device or emulator', + fn, + fnHelp: taskRunHelp, + task: RnvTaskName.run, + isPriorityOrder: true, + options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), + platforms: SdkPlatforms, +}; + +export default Task; diff --git a/packages/sdk-android/src/tasks/taskSdkConfigure.ts b/packages/sdk-android/src/tasks/taskSdkConfigure.ts index 25c34e0724..54744772b4 100644 --- a/packages/sdk-android/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-android/src/tasks/taskSdkConfigure.ts @@ -1,5 +1,6 @@ import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async () => { logTask('taskSdkConfigure'); @@ -13,7 +14,7 @@ const Task: RnvTask = { isPrivate: true, fn, task: RnvTaskName.sdkConfigure, - options: [], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-android/src/tasks/taskTargetLaunch.ts b/packages/sdk-android/src/tasks/taskTargetLaunch.ts index 56d08ab9eb..cc69ee946a 100644 --- a/packages/sdk-android/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-android/src/tasks/taskTargetLaunch.ts @@ -2,6 +2,7 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskN import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { launchAndroidSimulator } from '../deviceManager'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); @@ -21,7 +22,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], - platforms: ['android', 'androidtv', 'androidwear', 'firetv'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-android/src/tasks/taskTargetList.ts b/packages/sdk-android/src/tasks/taskTargetList.ts index ad245f074d..93e26966ee 100644 --- a/packages/sdk-android/src/tasks/taskTargetList.ts +++ b/packages/sdk-android/src/tasks/taskTargetList.ts @@ -1,8 +1,9 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAndroidTargets } from '../deviceManager'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; +import { SdkPlatforms } from '../constants'; -const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetList'); await isPlatformSupported(true); @@ -15,10 +16,10 @@ const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'List all available targets for specific platform', - fn: taskTargetList, + fn, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], - platforms: ['android', 'androidtv', 'androidwear', 'firetv'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-apple/src/common.ts b/packages/sdk-apple/src/common.ts index 4934cf7e65..e391af0f21 100644 --- a/packages/sdk-apple/src/common.ts +++ b/packages/sdk-apple/src/common.ts @@ -1,4 +1,4 @@ -import { getConfigProp, getContext } from '@rnv/core'; +import { PlatformKey, getConfigProp, getContext } from '@rnv/core'; export const getAppFolderName = () => { const c = getContext(); @@ -15,3 +15,5 @@ export const getAppFolderName = () => { } return 'RNVApp'; }; + +export const SdkPlatforms: Array = ['ios', 'tvos', 'macos']; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index 5dcf082f85..0379782021 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -12,6 +12,7 @@ import taskLog from './tasks/taskLog'; import taskExport from './tasks/taskExport'; import taskPackage from './tasks/taskPackage'; import taskConfigure from './tasks/taskConfigure'; +import taskRun from './tasks/taskRun'; export const Tasks = [ taskTargetLaunch, @@ -24,4 +25,5 @@ export const Tasks = [ taskExport, taskPackage, taskConfigure, + taskRun, ]; diff --git a/packages/sdk-apple/src/tasks/taskConfigure.ts b/packages/sdk-apple/src/tasks/taskConfigure.ts index 7508b993bb..d06b0acac3 100644 --- a/packages/sdk-apple/src/tasks/taskConfigure.ts +++ b/packages/sdk-apple/src/tasks/taskConfigure.ts @@ -1,15 +1,7 @@ -import { - logTask, - RnvTaskFn, - configureEntryPoint, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { logTask, RnvTaskFn, configureEntryPoint, executeTask, shouldSkipTask, RnvTask, RnvTaskName } from '@rnv/core'; import { configureFontSources } from '@rnv/sdk-react-native'; import { configureXcodeProject } from '../runner'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); @@ -33,8 +25,7 @@ const Task: RnvTask = { description: 'Configure current project', fn, task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withConfigure(), - platforms: ['ios', 'tvos', 'macos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts index 2eb1b3a276..1740771746 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts @@ -6,10 +6,10 @@ import { executeAsync, executeTask, shouldSkipTask, - RnvTaskOptionPresets, RnvTask, RnvTaskName, } from '@rnv/core'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskCryptoInstallCerts'); @@ -35,8 +35,7 @@ const Task: RnvTask = { description: 'Installs certificates into keychain (mac only)', fn, task: RnvTaskName.cryptoInstallCerts, - options: RnvTaskOptionPresets.withBase(), - platforms: ['ios', 'macos', 'tvos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts index 7b650dd72b..ab81e12a09 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts @@ -11,10 +11,10 @@ import { fsExistsSync, executeTask, shouldSkipTask, - RnvTaskOptionPresets, RnvTask, RnvTaskName, } from '@rnv/core'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskCryptoInstallProfiles'); @@ -49,9 +49,7 @@ const Task: RnvTask = { description: 'Installs provisioning certificates found in your workspace (mac only)', fn, task: RnvTaskName.cryptoInstallProfiles, - options: RnvTaskOptionPresets.withBase(), - platforms: ['ios', 'macos', 'tvos'], - // skipPlatforms: true, + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts index f0db627577..e339f15f33 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts @@ -1,5 +1,6 @@ -import { RnvTaskFn, executeTask, shouldSkipTask, logTask, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskFn, executeTask, shouldSkipTask, logTask, RnvTask, RnvTaskName } from '@rnv/core'; import { updateProfile } from '../fastlane'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { logTask('taskCryptoUpdateProfile'); @@ -15,8 +16,7 @@ const Task: RnvTask = { description: 'Update provisioning profile (mac only)', fn, task: RnvTaskName.cryptoUpdateProfile, - options: RnvTaskOptionPresets.withBase(), - platforms: ['ios', 'macos', 'tvos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts index c865b4aad1..71cd617fe9 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts @@ -3,13 +3,13 @@ import { listAppConfigsFoldersSync, chalk, logTask, - RnvTaskOptionPresets, executeTask, shouldSkipTask, RnvTask, RnvTaskName, } from '@rnv/core'; import { updateProfile } from '../fastlane'; +import { SdkPlatforms } from '../common'; const _updateProfile = (v: string) => new Promise((resolve, reject) => { @@ -42,8 +42,7 @@ const Task: RnvTask = { description: 'Will attempt to update all provisioning profiles (mac only)', fn, task: RnvTaskName.cryptoUpdateProfiles, - options: RnvTaskOptionPresets.withBase(), - platforms: ['ios', 'macos', 'tvos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskEject.ts b/packages/sdk-apple/src/tasks/taskEject.ts new file mode 100644 index 0000000000..d8b986a6e8 --- /dev/null +++ b/packages/sdk-apple/src/tasks/taskEject.ts @@ -0,0 +1,35 @@ +import { + logTask, + RnvTaskFn, + executeOrSkipTask, + shouldSkipTask, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { ejectXcodeProject } from '../ejector'; +import { SdkPlatforms } from '../common'; + +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { + logTask('taskEject'); + + c.runtime._platformBuildsSuffix = '_eject'; + + c.runtime._skipNativeDepResolutions = true; + + await executeOrSkipTask(RnvTaskName.package, RnvTaskName.eject, originTask); + + if (shouldSkipTask(RnvTaskName.eject, originTask)) return true; + + return ejectXcodeProject(); +}; + +const Task: RnvTask = { + description: 'Eject current ios project app to self contained native project', + fn, + task: RnvTaskName.eject, + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, +}; + +export default Task; diff --git a/packages/sdk-apple/src/tasks/taskExport.ts b/packages/sdk-apple/src/tasks/taskExport.ts index e9ace8c89f..55eec95811 100644 --- a/packages/sdk-apple/src/tasks/taskExport.ts +++ b/packages/sdk-apple/src/tasks/taskExport.ts @@ -8,6 +8,7 @@ import { RnvTaskName, } from '@rnv/core'; import { exportXcodeProject } from '../runner'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskExport', `parent:${parentTask}`); @@ -24,7 +25,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['ios', 'tvos', 'macos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskLog.ts b/packages/sdk-apple/src/tasks/taskLog.ts index 90ccd34231..0cdc29ca13 100644 --- a/packages/sdk-apple/src/tasks/taskLog.ts +++ b/packages/sdk-apple/src/tasks/taskLog.ts @@ -1,5 +1,6 @@ import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; import { runAppleLog } from '../runner'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskLog', `parent:${parentTask}`); @@ -13,7 +14,7 @@ const Task: RnvTask = { description: 'Attach logger to device or emulator and print out logs', fn, task: RnvTaskName.log, - platforms: ['ios', 'macos', 'tvos'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-apple/src/tasks/taskPackage.ts b/packages/sdk-apple/src/tasks/taskPackage.ts index b8ac0b7c45..6084127a07 100644 --- a/packages/sdk-apple/src/tasks/taskPackage.ts +++ b/packages/sdk-apple/src/tasks/taskPackage.ts @@ -9,6 +9,7 @@ import { RnvTaskOptionPresets, } from '@rnv/core'; import { packageBundleForXcode } from '../runner'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskPackage', `parent:${parentTask}`); @@ -31,7 +32,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['ios', 'tvos', 'macos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-apple/src/tasks/taskRun.ts b/packages/sdk-apple/src/tasks/taskRun.ts new file mode 100644 index 0000000000..bb5a10af31 --- /dev/null +++ b/packages/sdk-apple/src/tasks/taskRun.ts @@ -0,0 +1,56 @@ +import { + logTask, + RnvTaskFn, + executeOrSkipTask, + shouldSkipTask, + logRaw, + getConfigProp, + logSummary, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; +import { getIosDeviceToRunOn, runXcodeProject } from '../runner'; +import { SdkPlatforms } from '../common'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + const { port } = c.runtime; + const { hosted } = c.program; + logTask('taskRun', `parent:${parentTask} port:${port} hosted:${hosted}`); + + await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); + + if (shouldSkipTask(RnvTaskName.run, originTask)) return true; + + const bundleAssets = getConfigProp('bundleAssets', false); + + const runDeviceArgs = await getIosDeviceToRunOn(c); + if (!c.program.only) { + await startBundlerIfRequired(RnvTaskName.run, originTask); + await runXcodeProject(runDeviceArgs); + if (!bundleAssets) { + logSummary({ header: 'BUNDLER STARTED' }); + } + return waitForBundlerIfRequired(); + } + return runXcodeProject(runDeviceArgs); +}; + +const taskRunHelp = async () => { + logRaw(` +More info at: https://renative.org/docs/api-cli +`); +}; + +const Task: RnvTask = { + description: 'Run your rn app on target device or emulator', + fn, + fnHelp: taskRunHelp, + task: RnvTaskName.run, + isPriorityOrder: true, + options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), + platforms: SdkPlatforms, +}; + +export default Task; diff --git a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts index d873b3d2a2..3877a961e0 100644 --- a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts @@ -1,6 +1,7 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchAppleSimulator } from '../deviceManager'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); @@ -18,7 +19,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], - platforms: ['ios', 'macos', 'tvos'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-apple/src/tasks/taskTargetList.ts b/packages/sdk-apple/src/tasks/taskTargetList.ts index 0e6498683a..abd2f68ea9 100644 --- a/packages/sdk-apple/src/tasks/taskTargetList.ts +++ b/packages/sdk-apple/src/tasks/taskTargetList.ts @@ -1,5 +1,6 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAppleDevices } from '../deviceManager'; +import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetList'); @@ -14,7 +15,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], - platforms: ['ios', 'macos', 'tvos'], + platforms: SdkPlatforms, isGlobalScope: true, //TODO: evaluate this after moving to SDK }; From 0579189a88b038f571b57611d6b52c752f52b93b Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 21:05:39 +0100 Subject: [PATCH 100/175] task migration pt4 --- packages/engine-rn-macos/src/index.ts | 3 +- .../engine-rn-macos/src/tasks/taskBuild.ts | 41 ---------------- packages/engine-rn-tvos/src/index.ts | 3 +- .../engine-rn-tvos/src/tasks/taskBuild.ts | 45 ----------------- packages/engine-rn/src/index.ts | 5 +- packages/engine-rn/src/tasks/taskBuild.ts | 48 ------------------- packages/sdk-android/src/index.ts | 12 ++++- packages/sdk-android/src/tasks/taskBuild.ts | 30 ++++++++++++ packages/sdk-apple/src/index.ts | 2 + packages/sdk-apple/src/tasks/taskBuild.ts | 35 ++++++++++++++ 10 files changed, 82 insertions(+), 142 deletions(-) delete mode 100644 packages/engine-rn-macos/src/tasks/taskBuild.ts delete mode 100644 packages/engine-rn-tvos/src/tasks/taskBuild.ts delete mode 100644 packages/engine-rn/src/tasks/taskBuild.ts create mode 100644 packages/sdk-android/src/tasks/taskBuild.ts create mode 100644 packages/sdk-apple/src/tasks/taskBuild.ts diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index 8186342b3c..fed0d54bc8 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -2,14 +2,13 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/c import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; -import taskBuild from './tasks/taskBuild'; import taskStart from './tasks/taskStart'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; //@ts-ignore import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskBuild, taskStart, ...TasksSdkApple]), + tasks: generateEngineTasks([taskStart, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-macos/src/tasks/taskBuild.ts b/packages/engine-rn-macos/src/tasks/taskBuild.ts deleted file mode 100644 index b4ee9e9bce..0000000000 --- a/packages/engine-rn-macos/src/tasks/taskBuild.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { buildXcodeProject } from '@rnv/sdk-apple'; - -const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild'); - const { platform } = c; - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); - - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - switch (platform) { - case 'macos': - if (parentTask === RnvTaskName.export) { - // build task is not necessary when exporting macos - return true; - } - return buildXcodeProject(); - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Build project binary', - fn: taskBuild, - task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['macos'], -}; - -export default Task; diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index cdacddc15d..5ac65ca8e7 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,7 +1,6 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; -import taskBuild from './tasks/taskBuild'; import taskStart from './tasks/taskStart'; import { withRNVBabel } from './adapters/babelAdapter'; import { withRNVMetro } from './adapters/metroAdapter'; @@ -10,7 +9,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskBuild, taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), + tasks: generateEngineTasks([taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', diff --git a/packages/engine-rn-tvos/src/tasks/taskBuild.ts b/packages/engine-rn-tvos/src/tasks/taskBuild.ts deleted file mode 100644 index d3afed5e5e..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskBuild.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { buildReactNativeAndroid } from '@rnv/sdk-react-native'; -import { buildXcodeProject } from '@rnv/sdk-apple'; - -const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild'); - const { platform } = c; - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); - - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - switch (platform) { - case 'androidtv': - case 'firetv': - return buildReactNativeAndroid(); - case 'tvos': - if (parentTask === RnvTaskName.export) { - // build task is not necessary when exporting ios - return true; - } - return buildXcodeProject(); - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Build project binary', - fn: taskBuild, - task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['tvos', 'androidtv', 'firetv'], -}; - -export default Task; diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index 287eec1825..fc930384f8 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -4,13 +4,12 @@ import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; +import taskStart from './tasks/taskStart'; //@ts-ignore import CNF from '../renative.engine.json'; -import taskBuild from './tasks/taskBuild'; -import taskStart from './tasks/taskStart'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskBuild, taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), + tasks: generateEngineTasks([taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn/src/tasks/taskBuild.ts b/packages/engine-rn/src/tasks/taskBuild.ts deleted file mode 100644 index d4347ee6b7..0000000000 --- a/packages/engine-rn/src/tasks/taskBuild.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { buildReactNativeAndroid } from '@rnv/sdk-react-native'; -import { buildXcodeProject } from '@rnv/sdk-apple'; - -const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild'); - const { platform } = c; - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); - - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - switch (platform) { - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - return buildReactNativeAndroid(); - case 'ios': - case 'macos': - if (parentTask === RnvTaskName.export) { - // build task is not necessary when exporting ios - return true; - } - return buildXcodeProject(); - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Build project binary', - fn: taskBuild, - task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], -}; - -export default Task; diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index b62e6ceadf..8a53ecb541 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -10,5 +10,15 @@ import taskLog from './tasks/taskLog'; import taskPackage from './tasks/taskPackage'; import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; +import taskBuild from './tasks/taskBuild'; -export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure, taskLog, taskPackage, taskConfigure, taskRun]; +export const Tasks = [ + taskTargetLaunch, + taskTargetList, + taskSdkConfigure, + taskLog, + taskPackage, + taskConfigure, + taskRun, + taskBuild, +]; diff --git a/packages/sdk-android/src/tasks/taskBuild.ts b/packages/sdk-android/src/tasks/taskBuild.ts new file mode 100644 index 0000000000..615bddd3a1 --- /dev/null +++ b/packages/sdk-android/src/tasks/taskBuild.ts @@ -0,0 +1,30 @@ +import { + logTask, + RnvTaskFn, + executeOrSkipTask, + shouldSkipTask, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { buildReactNativeAndroid } from '@rnv/sdk-react-native'; +import { SdkPlatforms } from '../constants'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + logTask('taskBuild'); + await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); + + if (shouldSkipTask(RnvTaskName.build, originTask)) return true; + + return buildReactNativeAndroid(); +}; + +const Task: RnvTask = { + description: 'Build project binary', + fn, + task: RnvTaskName.build, + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, +}; + +export default Task; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index 0379782021..81c6e08648 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -13,6 +13,7 @@ import taskExport from './tasks/taskExport'; import taskPackage from './tasks/taskPackage'; import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; +import taskBuild from './tasks/taskBuild'; export const Tasks = [ taskTargetLaunch, @@ -26,4 +27,5 @@ export const Tasks = [ taskPackage, taskConfigure, taskRun, + taskBuild, ]; diff --git a/packages/sdk-apple/src/tasks/taskBuild.ts b/packages/sdk-apple/src/tasks/taskBuild.ts new file mode 100644 index 0000000000..cfd3dcbccd --- /dev/null +++ b/packages/sdk-apple/src/tasks/taskBuild.ts @@ -0,0 +1,35 @@ +import { + logTask, + RnvTaskFn, + executeOrSkipTask, + shouldSkipTask, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, +} from '@rnv/core'; +import { buildXcodeProject } from '../runner'; +import { SdkPlatforms } from '../common'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + logTask('taskBuild'); + + await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); + + if (shouldSkipTask(RnvTaskName.build, originTask)) return true; + + if (parentTask === RnvTaskName.export) { + // build task is not necessary when exporting ios + return true; + } + return buildXcodeProject(); +}; + +const Task: RnvTask = { + description: 'Build project binary', + fn, + task: RnvTaskName.build, + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, +}; + +export default Task; From 479f1a2ccba1391c94bde8996328892802519b7d Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 21:35:17 +0100 Subject: [PATCH 101/175] task migration pt5 --- packages/engine-rn-macos/src/index.ts | 4 +- .../engine-rn-macos/src/tasks/taskStart.ts | 57 -------------- packages/engine-rn-tvos/src/index.ts | 4 +- .../src/tasks/__tests__/start.test.ts | 54 ------------- .../engine-rn-tvos/src/tasks/taskStart.ts | 61 --------------- packages/engine-rn/src/index.ts | 4 +- .../src/tasks/__tests__/taskStart.test.ts | 36 --------- packages/engine-rn/src/tasks/taskStart.ts | 52 ------------- .../src/tasks/__tests__/taskRun.test.ts | 2 - .../src/tasks/__tests__/taskRun.test.ts} | 6 +- packages/sdk-react-native/src/index.ts | 3 + .../src/tasks/__tests__/taskStart.test.ts | 76 +++++++++++++++++++ .../sdk-react-native/src/tasks/taskStart.ts | 49 ++++++++++++ 13 files changed, 136 insertions(+), 272 deletions(-) delete mode 100644 packages/engine-rn-macos/src/tasks/taskStart.ts delete mode 100644 packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts delete mode 100644 packages/engine-rn-tvos/src/tasks/taskStart.ts delete mode 100644 packages/engine-rn/src/tasks/__tests__/taskStart.test.ts delete mode 100644 packages/engine-rn/src/tasks/taskStart.ts rename packages/{engine-rn => sdk-android}/src/tasks/__tests__/taskRun.test.ts (91%) rename packages/{engine-rn-tvos/src/tasks/__tests__/run.test.ts => sdk-apple/src/tasks/__tests__/taskRun.test.ts} (77%) create mode 100644 packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts create mode 100644 packages/sdk-react-native/src/tasks/taskStart.ts diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index fed0d54bc8..eaf808e180 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -2,13 +2,13 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/c import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; -import taskStart from './tasks/taskStart'; +import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; //@ts-ignore import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskStart, ...TasksSdkApple]), + tasks: generateEngineTasks([...TasksSdkApple, ...TasksSdkReactNative]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-macos/src/tasks/taskStart.ts b/packages/engine-rn-macos/src/tasks/taskStart.ts deleted file mode 100644 index 6e63335013..0000000000 --- a/packages/engine-rn-macos/src/tasks/taskStart.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - doResolve, - logErrorPlatform, - executeTask, - shouldSkipTask, - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - RnvTask, - PlatformKey, - RnvTaskName, -} from '@rnv/core'; -import { startReactNative } from '@rnv/sdk-react-native'; - -const BUNDLER_PLATFORMS: Partial> = {}; - -BUNDLER_PLATFORMS['macos'] = 'macos'; - -const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { hosted } = c.program; - - logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); - - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - // Disable reset for other commands (ie. cleaning platforms) - c.runtime.disableReset = true; - if (!parentTask) { - await executeTask(RnvTaskName.configureSoft, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - switch (platform) { - case 'macos': { - return startReactNative({ - waitForBundler: !parentTask, - customCliPath: `${doResolve('react-native')}/local-cli/cli.js`, - metroConfigName: 'metro.config.rnm.js', - }); - } - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Starts bundler / server', - fn: taskStart, - task: RnvTaskName.start, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['macos'], -}; - -export default Task; diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 5ac65ca8e7..818dc288ee 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,7 +1,7 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; -import taskStart from './tasks/taskStart'; +import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; import { withRNVBabel } from './adapters/babelAdapter'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; @@ -9,7 +9,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), + tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', diff --git a/packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts b/packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts deleted file mode 100644 index cd60d886ff..0000000000 --- a/packages/engine-rn-tvos/src/tasks/__tests__/start.test.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { createRnvContext, getContext, doResolve, executeTask } from '@rnv/core'; -import taskStart from '../taskStart'; -import { startReactNative } from '@rnv/sdk-react-native'; - -jest.mock('@rnv/core'); -jest.mock('@rnv/sdk-react-native'); - -beforeEach(() => { - createRnvContext(); -}); - -afterEach(() => { - jest.resetAllMocks(); -}); - -test('Execute task.rnv.start with no parent', async () => { - // GIVEN - const ctx = getContext(); - ctx.platform = 'tvos'; - jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); - // WHEN - await taskStart.fn?.(ctx, undefined, undefined); - // THEN - expect(executeTask).toHaveBeenCalledTimes(1); - expect(startReactNative).toHaveBeenCalledWith({ - waitForBundler: true, - customCliPath: 'MOCKED_PATH/local-cli/cli.js', - metroConfigName: 'metro.config.js', - }); -}); - -test('Execute task.rnv.start', async () => { - // GIVEN - const ctx = getContext(); - ctx.platform = 'tvos'; - jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); - // WHEN - await taskStart.fn?.(ctx, 'parent', undefined); - // THEN - expect(startReactNative).toHaveBeenCalledWith({ - waitForBundler: false, - customCliPath: 'MOCKED_PATH/local-cli/cli.js', - metroConfigName: 'metro.config.js', - }); -}); - -test('Execute task.rnv.start in hosted mode', async () => { - // GIVEN - const ctx = getContext(); - ctx.platform = 'tvos'; - ctx.program.hosted = true; - // WHEN // THEN - await expect(taskStart.fn?.(ctx, 'parent', undefined)).rejects.toBe('This platform does not support hosted mode'); -}); diff --git a/packages/engine-rn-tvos/src/tasks/taskStart.ts b/packages/engine-rn-tvos/src/tasks/taskStart.ts deleted file mode 100644 index d094608f3b..0000000000 --- a/packages/engine-rn-tvos/src/tasks/taskStart.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { - doResolve, - logErrorPlatform, - executeTask, - shouldSkipTask, - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - RnvTask, - PlatformKey, - RnvTaskName, -} from '@rnv/core'; -import { startReactNative } from '@rnv/sdk-react-native'; - -const BUNDLER_PLATFORMS: Partial> = {}; - -BUNDLER_PLATFORMS['tvos'] = 'ios'; -BUNDLER_PLATFORMS['androidtv'] = 'android'; -BUNDLER_PLATFORMS['firetv'] = 'android'; - -const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { hosted } = c.program; - - logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); - - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - // Disable reset for other commands (ie. cleaning platforms) - c.runtime.disableReset = true; - if (!parentTask) { - await executeTask(RnvTaskName.configureSoft, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - switch (platform) { - case 'androidtv': - case 'firetv': - case 'tvos': { - return startReactNative({ - waitForBundler: !parentTask, - customCliPath: `${doResolve('react-native-tvos')}/local-cli/cli.js`, - metroConfigName: 'metro.config.js', - }); - } - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Starts bundler / server', - fn: taskStart, - task: RnvTaskName.start, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['tvos', 'androidtv', 'firetv'], -}; - -export default Task; diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index fc930384f8..4bf973cf8e 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -2,14 +2,14 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/c import { withRNVRNConfig } from '@rnv/sdk-react-native'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; +import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; -import taskStart from './tasks/taskStart'; //@ts-ignore import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskStart, ...TasksSdkAndroid, ...TasksSdkApple]), + tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative]), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn/src/tasks/__tests__/taskStart.test.ts b/packages/engine-rn/src/tasks/__tests__/taskStart.test.ts deleted file mode 100644 index 515f2f0b98..0000000000 --- a/packages/engine-rn/src/tasks/__tests__/taskStart.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { createRnvContext, executeTask, getContext } from '@rnv/core'; -import taskStart from '../taskStart'; -import { startReactNative } from '@rnv/sdk-react-native'; - -jest.mock('@rnv/core'); -jest.mock('@rnv/sdk-react-native'); - -beforeEach(() => { - createRnvContext(); -}); - -afterEach(() => { - jest.resetAllMocks(); -}); - -describe('taskStart', () => { - it('Execute task.rnv.start with no parent', async () => { - // GIVEN - const ctx = getContext(); - ctx.platform = 'ios'; - jest.mocked(executeTask).mockResolvedValueOnce(undefined); - // WHEN - await taskStart.fn?.(ctx, undefined, undefined); - // THEN - expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: true }); - }); - it('Execute task.rnv.start', async () => { - // GIVEN - const ctx = getContext(); - ctx.platform = 'ios'; - // WHEN - await taskStart.fn?.(ctx, 'parent', undefined); - // THEN - expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: false }); - }); -}); diff --git a/packages/engine-rn/src/tasks/taskStart.ts b/packages/engine-rn/src/tasks/taskStart.ts deleted file mode 100644 index 04df3c6410..0000000000 --- a/packages/engine-rn/src/tasks/taskStart.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskFn, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { startReactNative } from '@rnv/sdk-react-native'; - -const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { hosted } = c.program; - - logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); - - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - // Disable reset for other commands (ie. cleaning platforms) - c.runtime.disableReset = true; - if (!parentTask) { - await executeTask(RnvTaskName.configureSoft, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - switch (platform) { - case 'ios': - case 'macos': - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': { - return startReactNative({ waitForBundler: !parentTask }); - } - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Starts bundler / server', - fn: taskStart, - task: RnvTaskName.start, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'macos'], -}; - -export default Task; diff --git a/packages/engine-rn/src/tasks/__tests__/taskRun.test.ts b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts similarity index 91% rename from packages/engine-rn/src/tasks/__tests__/taskRun.test.ts rename to packages/sdk-android/src/tasks/__tests__/taskRun.test.ts index 15c885f4f0..18eeb0d9f3 100644 --- a/packages/engine-rn/src/tasks/__tests__/taskRun.test.ts +++ b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts @@ -3,8 +3,6 @@ import taskRun from '../taskRun'; import { getIosDeviceToRunOn, runXcodeProject } from '@rnv/sdk-apple'; jest.mock('@rnv/core'); -jest.mock('@rnv/sdk-apple'); -jest.mock('@rnv/sdk-android'); jest.mock('@rnv/sdk-react-native'); beforeEach(() => { diff --git a/packages/engine-rn-tvos/src/tasks/__tests__/run.test.ts b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts similarity index 77% rename from packages/engine-rn-tvos/src/tasks/__tests__/run.test.ts rename to packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts index ce0e25f2af..18eeb0d9f3 100644 --- a/packages/engine-rn-tvos/src/tasks/__tests__/run.test.ts +++ b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts @@ -3,8 +3,6 @@ import taskRun from '../taskRun'; import { getIosDeviceToRunOn, runXcodeProject } from '@rnv/sdk-apple'; jest.mock('@rnv/core'); -jest.mock('@rnv/sdk-apple'); -jest.mock('@rnv/sdk-android'); jest.mock('@rnv/sdk-react-native'); beforeEach(() => { @@ -18,8 +16,8 @@ afterEach(() => { test('Execute task.rnv.run', async () => { // GIVEN const ctx = getContext(); - ctx.platform = 'tvos'; - jest.mocked(getIosDeviceToRunOn).mockResolvedValue('MOCK_DEVICE_ARGS'); + ctx.platform = 'ios'; + jest.mocked(getIosDeviceToRunOn).mockResolvedValueOnce('MOCK_DEVICE_ARGS'); // WHEN await taskRun.fn?.(ctx, undefined, undefined); // THEN diff --git a/packages/sdk-react-native/src/index.ts b/packages/sdk-react-native/src/index.ts index 8a783fa408..a95362ebcd 100644 --- a/packages/sdk-react-native/src/index.ts +++ b/packages/sdk-react-native/src/index.ts @@ -4,3 +4,6 @@ export * from './iosRunner'; export * from './metroRunner'; export * from './adapters'; export * from './env'; +import taskStart from './tasks/taskStart'; + +export const Tasks = [taskStart]; diff --git a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts new file mode 100644 index 0000000000..213e56df0d --- /dev/null +++ b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts @@ -0,0 +1,76 @@ +import { createRnvContext, doResolve, executeTask, getContext } from '@rnv/core'; +import taskStart from '../taskStart'; +import { startReactNative } from '@rnv/sdk-react-native'; + +jest.mock('@rnv/core'); + +beforeEach(() => { + createRnvContext(); +}); + +afterEach(() => { + jest.resetAllMocks(); +}); + +describe('taskStart', () => { + it('Execute task.rnv.start with no parent', async () => { + // GIVEN + const ctx = getContext(); + ctx.platform = 'ios'; + jest.mocked(executeTask).mockResolvedValueOnce(undefined); + // WHEN + await taskStart.fn?.(ctx, undefined, undefined); + // THEN + expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: true }); + }); + it('Execute task.rnv.start', async () => { + // GIVEN + const ctx = getContext(); + ctx.platform = 'ios'; + // WHEN + await taskStart.fn?.(ctx, 'parent', undefined); + // THEN + expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: false }); + }); + it('Execute task.rnv.start with no parent', async () => { + // GIVEN + const ctx = getContext(); + ctx.platform = 'tvos'; + jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); + // WHEN + await taskStart.fn?.(ctx, undefined, undefined); + // THEN + expect(executeTask).toHaveBeenCalledTimes(1); + expect(startReactNative).toHaveBeenCalledWith({ + waitForBundler: true, + customCliPath: 'MOCKED_PATH/local-cli/cli.js', + metroConfigName: 'metro.config.js', + }); + }); + + it('Execute task.rnv.start', async () => { + // GIVEN + const ctx = getContext(); + ctx.platform = 'tvos'; + jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); + // WHEN + await taskStart.fn?.(ctx, 'parent', undefined); + // THEN + expect(startReactNative).toHaveBeenCalledWith({ + waitForBundler: false, + customCliPath: 'MOCKED_PATH/local-cli/cli.js', + metroConfigName: 'metro.config.js', + }); + }); + + it('Execute task.rnv.start in hosted mode', async () => { + // GIVEN + const ctx = getContext(); + ctx.platform = 'tvos'; + ctx.program.hosted = true; + // WHEN // THEN + await expect(taskStart.fn?.(ctx, 'parent', undefined)).rejects.toBe( + 'This platform does not support hosted mode' + ); + }); +}); diff --git a/packages/sdk-react-native/src/tasks/taskStart.ts b/packages/sdk-react-native/src/tasks/taskStart.ts new file mode 100644 index 0000000000..75af29c618 --- /dev/null +++ b/packages/sdk-react-native/src/tasks/taskStart.ts @@ -0,0 +1,49 @@ +import { + logTask, + RnvTaskFn, + executeTask, + shouldSkipTask, + RnvTask, + RnvTaskName, + RnvTaskOptionPresets, + doResolve, +} from '@rnv/core'; +import { startReactNative } from '../metroRunner'; + +const fn: RnvTaskFn = async (c, parentTask, originTask) => { + const { hosted } = c.program; + + logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); + + if (hosted) { + return Promise.reject('This platform does not support hosted mode'); + } + // Disable reset for other commands (ie. cleaning platforms) + c.runtime.disableReset = true; + if (!parentTask) { + await executeTask(RnvTaskName.configureSoft, RnvTaskName.start, originTask); + } + + if (shouldSkipTask(RnvTaskName.start, originTask)) return true; + + let customCliPath: string | undefined; + let metroConfigName: string | undefined; + const { reactNativePackageName, reactNativeMetroConfigName } = c.runtime?.runtimeExtraProps || {}; + if (reactNativePackageName) { + customCliPath = `${doResolve(reactNativePackageName)}/local-cli/cli.js`; + } + if (metroConfigName) { + metroConfigName = reactNativeMetroConfigName; + } + return startReactNative({ waitForBundler: !parentTask, customCliPath, metroConfigName }); +}; + +const Task: RnvTask = { + description: 'Starts react-native bundler', + fn, + task: RnvTaskName.start, + options: RnvTaskOptionPresets.withConfigure(), + platforms: ['ios', 'android', 'androidtv', 'androidwear', 'firetv', 'macos'], +}; + +export default Task; From 26c33d8efb06601171c1a0e1c0d6072f4b0fe2af Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 22:39:41 +0100 Subject: [PATCH 102/175] task migration fixes --- packages/core/src/tasks/constants.ts | 9 --- .../tasks/bootstrap/__tests__/taskNew.test.ts | 1 - packages/engine-lightning/src/index.ts | 4 +- .../engine-lightning/src/sdk/constants.ts | 3 + .../src/{sdks/sdk-lightning => sdk}/env.ts | 0 .../sdk-lightning/index.ts => sdk/runner.ts} | 0 packages/engine-lightning/src/sdks/index.ts | 3 - .../engine-lightning/src/tasks/taskBuild.ts | 11 ++-- .../src/tasks/taskConfigure.ts | 30 +++------- .../engine-lightning/src/tasks/taskRun.ts | 34 +++-------- .../engine-rn-electron/src/sdk/constants.ts | 3 + .../src/{sdk.ts => sdk/runner.ts} | 0 .../engine-rn-electron/src/{ => sdk}/types.ts | 0 .../engine-rn-electron/src/tasks/taskBuild.ts | 5 +- .../src/tasks/taskConfigure.ts | 5 +- .../src/tasks/taskExport.ts | 5 +- .../engine-rn-electron/src/tasks/taskRun.ts | 5 +- .../engine-rn-electron/src/tasks/taskStart.ts | 9 +-- packages/engine-rn-next/src/constants.ts | 1 - packages/engine-rn-next/src/index.ts | 4 +- packages/engine-rn-next/src/sdk/constants.ts | 3 + packages/engine-rn-next/src/{ => sdk}/env.ts | 2 +- .../src/{sdk.ts => sdk/runner.ts} | 0 .../engine-rn-next/src/tasks/taskBuild.ts | 30 ++++------ .../engine-rn-next/src/tasks/taskConfigure.ts | 30 +++------- .../engine-rn-next/src/tasks/taskExport.ts | 23 +++----- packages/engine-rn-next/src/tasks/taskRun.ts | 24 +++----- .../engine-rn-next/src/tasks/taskStart.ts | 23 +++----- packages/engine-rn-web/src/constants.ts | 12 ++++ packages/engine-rn-web/src/tasks/taskBuild.ts | 9 +-- .../engine-rn-web/src/tasks/taskConfigure.ts | 9 +-- packages/engine-rn-web/src/tasks/taskDebug.ts | 27 ++------- packages/engine-rn-web/src/tasks/taskRun.ts | 9 +-- packages/engine-rn-web/src/tasks/taskStart.ts | 9 +-- packages/engine-rn-windows/src/index.ts | 9 ++- .../sdk-windows => sdk}/config/configUtils.js | 0 .../engine-rn-windows/src/sdk/constants.ts | 3 + .../{sdks/sdk-windows => sdk}/copyTemplate.js | 0 .../generator-common/index.js | 0 .../src/{sdks/sdk-windows => sdk}/index.ts | 0 packages/engine-rn-windows/src/sdks/index.ts | 3 - .../engine-rn-windows/src/tasks/taskBuild.ts | 23 +++----- .../src/tasks/taskConfigure.ts | 22 +++---- .../engine-rn-windows/src/tasks/taskExport.ts | 26 +++----- .../src/tasks/taskPackage.ts | 26 +++----- .../engine-rn-windows/src/tasks/taskRun.ts | 29 ++++----- .../engine-rn-windows/src/tasks/taskStart.ts | 59 ------------------- packages/engine-rn/src/index.ts | 3 +- .../src/tasks/taskDockerDeploy.ts | 6 +- .../src/tasks/taskDockerExport.ts | 6 +- .../src/tasks/taskSingleCommand.ts | 8 +-- .../src/tasks/taskStarterHello.ts | 8 +-- .../src/tasks/__tests__/taskRun.test.ts | 1 + .../src/tasks/__tests__/taskRun.test.ts | 1 + packages/sdk-kaios/src/constants.ts | 4 ++ .../sdk-kaios/src/tasks/taskTargetLaunch.ts | 7 ++- packages/sdk-react-native/src/constants.ts | 3 + .../sdk-react-native/src/tasks/taskStart.ts | 3 +- packages/sdk-tizen/src/constants.ts | 4 ++ .../sdk-tizen/src/tasks/taskSdkConfigure.ts | 4 +- .../sdk-tizen/src/tasks/taskTargetLaunch.ts | 7 ++- .../sdk-tizen/src/tasks/taskTargetList.ts | 7 ++- packages/sdk-webos/src/constants.ts | 4 ++ .../sdk-webos/src/tasks/taskSdkConfigure.ts | 4 +- .../sdk-webos/src/tasks/taskTargetLaunch.ts | 3 +- .../sdk-webos/src/tasks/taskTargetList.ts | 3 +- 66 files changed, 227 insertions(+), 401 deletions(-) create mode 100644 packages/engine-lightning/src/sdk/constants.ts rename packages/engine-lightning/src/{sdks/sdk-lightning => sdk}/env.ts (100%) rename packages/engine-lightning/src/{sdks/sdk-lightning/index.ts => sdk/runner.ts} (100%) delete mode 100644 packages/engine-lightning/src/sdks/index.ts create mode 100644 packages/engine-rn-electron/src/sdk/constants.ts rename packages/engine-rn-electron/src/{sdk.ts => sdk/runner.ts} (100%) rename packages/engine-rn-electron/src/{ => sdk}/types.ts (100%) delete mode 100644 packages/engine-rn-next/src/constants.ts create mode 100644 packages/engine-rn-next/src/sdk/constants.ts rename packages/engine-rn-next/src/{ => sdk}/env.ts (98%) rename packages/engine-rn-next/src/{sdk.ts => sdk/runner.ts} (100%) create mode 100644 packages/engine-rn-web/src/constants.ts rename packages/engine-rn-windows/src/{sdks/sdk-windows => sdk}/config/configUtils.js (100%) create mode 100644 packages/engine-rn-windows/src/sdk/constants.ts rename packages/engine-rn-windows/src/{sdks/sdk-windows => sdk}/copyTemplate.js (100%) rename packages/engine-rn-windows/src/{sdks/sdk-windows => sdk}/generator-common/index.js (100%) rename packages/engine-rn-windows/src/{sdks/sdk-windows => sdk}/index.ts (100%) delete mode 100644 packages/engine-rn-windows/src/sdks/index.ts delete mode 100644 packages/engine-rn-windows/src/tasks/taskStart.ts create mode 100644 packages/sdk-react-native/src/constants.ts diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index d6c766d4f9..4acb775868 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -339,15 +339,6 @@ export const RnvTaskCoreOptionPresets = { }; export const RnvTaskOptionPresets = { - withBase: (arr?: Array) => arr || [], - // withBase: (arr?: Array) => - // [ - // RnvTaskOptions.info, - // RnvTaskOptions.ci, - // RnvTaskOptions.mono, - // RnvTaskOptions.maxErrorLength, - // RnvTaskOptions.only, - // ].concat(arr || []), withConfigure: (arr?: Array) => [ RnvTaskOptions.reset, diff --git a/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts index d186081f1b..8582d63a49 100644 --- a/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts @@ -35,7 +35,6 @@ jest.mock('../questions/appID'); jest.mock('../questions/projectVersion'); jest.mock('../questions/workspace'); jest.mock('../questions/hasNodeModules'); -jest.mock('../questions/confirmOverview'); jest.mock('../questions/isRenativeProject'); jest.mock('../questions/projectName'); jest.mock('../questions/supportedPlatforms'); diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index 6c8309d930..cc73aa30d0 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -1,11 +1,11 @@ import { RnvEngine, generateEngineTasks, generateEngineExtensions } from '@rnv/core'; import { Tasks as TasksSdkWebOS } from '@rnv/sdk-webos'; import { Tasks as TasksSdkTizen } from '@rnv/sdk-tizen'; -//@ts-ignore -import CNF from '../renative.engine.json'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; +//@ts-ignore +import CNF from '../renative.engine.json'; const Engine: RnvEngine = { tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen]), diff --git a/packages/engine-lightning/src/sdk/constants.ts b/packages/engine-lightning/src/sdk/constants.ts new file mode 100644 index 0000000000..ea9fcbf5ee --- /dev/null +++ b/packages/engine-lightning/src/sdk/constants.ts @@ -0,0 +1,3 @@ +import { PlatformKey } from '@rnv/core'; + +export const SdkPlatforms: Array = ['tizen', 'webos']; diff --git a/packages/engine-lightning/src/sdks/sdk-lightning/env.ts b/packages/engine-lightning/src/sdk/env.ts similarity index 100% rename from packages/engine-lightning/src/sdks/sdk-lightning/env.ts rename to packages/engine-lightning/src/sdk/env.ts diff --git a/packages/engine-lightning/src/sdks/sdk-lightning/index.ts b/packages/engine-lightning/src/sdk/runner.ts similarity index 100% rename from packages/engine-lightning/src/sdks/sdk-lightning/index.ts rename to packages/engine-lightning/src/sdk/runner.ts diff --git a/packages/engine-lightning/src/sdks/index.ts b/packages/engine-lightning/src/sdks/index.ts deleted file mode 100644 index 524d4026b4..0000000000 --- a/packages/engine-lightning/src/sdks/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as SDKLightning from './sdk-lightning'; - -export { SDKLightning }; diff --git a/packages/engine-lightning/src/tasks/taskBuild.ts b/packages/engine-lightning/src/tasks/taskBuild.ts index 4b66486cc0..473b32aa59 100644 --- a/packages/engine-lightning/src/tasks/taskBuild.ts +++ b/packages/engine-lightning/src/tasks/taskBuild.ts @@ -8,9 +8,10 @@ import { RnvTaskName, RnvTaskOptionPresets, } from '@rnv/core'; -import { buildLightningProject } from '../sdks/sdk-lightning'; +import { buildLightningProject } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; -const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskBuild', `parent:${parentTask}`); const { platform } = c; c.runtime.forceBundleAssets = true; @@ -31,10 +32,10 @@ const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Build project binary', - fn: taskBuild, + fn, task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['tizen', 'webos'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-lightning/src/tasks/taskConfigure.ts b/packages/engine-lightning/src/tasks/taskConfigure.ts index 21e11193fd..62f9daefff 100644 --- a/packages/engine-lightning/src/tasks/taskConfigure.ts +++ b/packages/engine-lightning/src/tasks/taskConfigure.ts @@ -1,15 +1,8 @@ -import { - logErrorPlatform, - logTask, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { configureLightningProject } from '../sdks/sdk-lightning'; +import { logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { configureLightningProject } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); @@ -17,22 +10,15 @@ const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { if (c.program.only && !!parentTask) { return true; } - - switch (c.platform) { - case 'tizen': - case 'webos': - return configureLightningProject(); - default: - return logErrorPlatform(); - } + return configureLightningProject(); }; const Task: RnvTask = { description: 'Configure current project', - fn: taskConfigure, + fn, task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['tizen', 'webos'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-lightning/src/tasks/taskRun.ts b/packages/engine-lightning/src/tasks/taskRun.ts index f0162a0b11..e97b54f40f 100644 --- a/packages/engine-lightning/src/tasks/taskRun.ts +++ b/packages/engine-lightning/src/tasks/taskRun.ts @@ -1,17 +1,8 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - logRaw, - executeOrSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; -import { runLightningProject } from '../sdks/sdk-lightning'; +import { RnvTaskFn, logTask, logRaw, executeOrSkipTask, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { runLightningProject } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; +const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; const { target } = c.runtime; const { hosted } = c.program; @@ -19,13 +10,7 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - switch (platform) { - case 'tizen': - case 'webos': - return runLightningProject(); - default: - return logErrorPlatform(); - } + return runLightningProject(); }; const taskRunHelp = async () => { @@ -36,15 +21,12 @@ More info at: https://renative.org/docs/api-cli const Task: RnvTask = { description: 'Run your lightning app on target device or emulator', - fn: taskRun, + fn, fnHelp: taskRunHelp, task: RnvTaskName.run, isPriorityOrder: true, - // dependencies: { - // before: RnvTaskName.configure, - // }, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), - platforms: ['tizen', 'webos'], + options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-electron/src/sdk/constants.ts b/packages/engine-rn-electron/src/sdk/constants.ts new file mode 100644 index 0000000000..ec22676190 --- /dev/null +++ b/packages/engine-rn-electron/src/sdk/constants.ts @@ -0,0 +1,3 @@ +import { PlatformKey } from '@rnv/core'; + +export const SdkPlatforms: Array = ['macos', 'windows', 'linux']; diff --git a/packages/engine-rn-electron/src/sdk.ts b/packages/engine-rn-electron/src/sdk/runner.ts similarity index 100% rename from packages/engine-rn-electron/src/sdk.ts rename to packages/engine-rn-electron/src/sdk/runner.ts diff --git a/packages/engine-rn-electron/src/types.ts b/packages/engine-rn-electron/src/sdk/types.ts similarity index 100% rename from packages/engine-rn-electron/src/types.ts rename to packages/engine-rn-electron/src/sdk/types.ts diff --git a/packages/engine-rn-electron/src/tasks/taskBuild.ts b/packages/engine-rn-electron/src/tasks/taskBuild.ts index 96be1f87ed..f54c85218b 100644 --- a/packages/engine-rn-electron/src/tasks/taskBuild.ts +++ b/packages/engine-rn-electron/src/tasks/taskBuild.ts @@ -7,7 +7,8 @@ import { RnvTaskName, RnvTaskOptionPresets, } from '@rnv/core'; -import { buildElectron } from '../sdk'; +import { buildElectron } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskBuild', `parent:${parentTask}`); @@ -22,7 +23,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['macos', 'windows', 'linux'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-electron/src/tasks/taskConfigure.ts b/packages/engine-rn-electron/src/tasks/taskConfigure.ts index 83422de61c..95af1f7974 100644 --- a/packages/engine-rn-electron/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-electron/src/tasks/taskConfigure.ts @@ -9,7 +9,8 @@ import { RnvTaskName, RnvTaskOptionPresets, } from '@rnv/core'; -import { configureElectronProject } from '../sdk'; +import { configureElectronProject } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); @@ -34,7 +35,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['macos', 'windows', 'linux'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-electron/src/tasks/taskExport.ts b/packages/engine-rn-electron/src/tasks/taskExport.ts index 4013ec68d3..cb8cf9c853 100644 --- a/packages/engine-rn-electron/src/tasks/taskExport.ts +++ b/packages/engine-rn-electron/src/tasks/taskExport.ts @@ -7,7 +7,8 @@ import { RnvTaskName, RnvTaskOptionPresets, } from '@rnv/core'; -import { exportElectron } from '../sdk'; +import { exportElectron } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskExport', `parent:${parentTask}`); @@ -24,7 +25,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['macos', 'windows', 'linux'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-electron/src/tasks/taskRun.ts b/packages/engine-rn-electron/src/tasks/taskRun.ts index b44b567ec3..369a52e064 100644 --- a/packages/engine-rn-electron/src/tasks/taskRun.ts +++ b/packages/engine-rn-electron/src/tasks/taskRun.ts @@ -7,7 +7,8 @@ import { RnvTaskName, RnvTaskOptionPresets, } from '@rnv/core'; -import { runElectron } from '../sdk'; +import { runElectron } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; @@ -28,7 +29,7 @@ const Task: RnvTask = { task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), - platforms: ['macos', 'windows', 'linux'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-electron/src/tasks/taskStart.ts b/packages/engine-rn-electron/src/tasks/taskStart.ts index cd61ec490d..8ef6a5984d 100644 --- a/packages/engine-rn-electron/src/tasks/taskStart.ts +++ b/packages/engine-rn-electron/src/tasks/taskStart.ts @@ -11,8 +11,9 @@ import { RnvTaskName, } from '@rnv/core'; import { openBrowser, waitForHost } from '@rnv/sdk-utils'; +import { SdkPlatforms } from '../sdk/constants'; -const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { platform } = c; const { port } = c.runtime; const { hosted } = c.program; @@ -43,10 +44,10 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Starts bundler / server', - fn: taskStart, + fn, task: RnvTaskName.start, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['macos', 'windows', 'linux'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-next/src/constants.ts b/packages/engine-rn-next/src/constants.ts deleted file mode 100644 index 2fafba5c5e..0000000000 --- a/packages/engine-rn-next/src/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const NEXT_CONFIG_NAME = 'next.config.js'; diff --git a/packages/engine-rn-next/src/index.ts b/packages/engine-rn-next/src/index.ts index 550ab679ba..8e88c399a5 100644 --- a/packages/engine-rn-next/src/index.ts +++ b/packages/engine-rn-next/src/index.ts @@ -1,13 +1,13 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; import { withRNVNext } from './adapters/nextAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; -//@ts-ignore -import CNF from '../renative.engine.json'; import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskExport from './tasks/taskExport'; +//@ts-ignore +import CNF from '../renative.engine.json'; const Engine: RnvEngine = { tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskExport]), diff --git a/packages/engine-rn-next/src/sdk/constants.ts b/packages/engine-rn-next/src/sdk/constants.ts new file mode 100644 index 0000000000..32d22a7027 --- /dev/null +++ b/packages/engine-rn-next/src/sdk/constants.ts @@ -0,0 +1,3 @@ +import { PlatformKey } from '@rnv/core'; + +export const SdkPlatforms: Array = ['web', 'chromecast']; diff --git a/packages/engine-rn-next/src/env.ts b/packages/engine-rn-next/src/sdk/env.ts similarity index 98% rename from packages/engine-rn-next/src/env.ts rename to packages/engine-rn-next/src/sdk/env.ts index 4ed491a446..0df661cc36 100644 --- a/packages/engine-rn-next/src/env.ts +++ b/packages/engine-rn-next/src/sdk/env.ts @@ -1,6 +1,6 @@ import { chalk, fsExistsSync, getConfigProp, getContext, logWarning, parsePlugins } from '@rnv/core'; import path from 'path'; -import { getExportDir } from './sdk'; +import { getExportDir } from './runner'; export const EnvVars = { RNV_NEXT_TRANSPILE_MODULES: () => { diff --git a/packages/engine-rn-next/src/sdk.ts b/packages/engine-rn-next/src/sdk/runner.ts similarity index 100% rename from packages/engine-rn-next/src/sdk.ts rename to packages/engine-rn-next/src/sdk/runner.ts diff --git a/packages/engine-rn-next/src/tasks/taskBuild.ts b/packages/engine-rn-next/src/tasks/taskBuild.ts index d59544630a..728153bc5c 100644 --- a/packages/engine-rn-next/src/tasks/taskBuild.ts +++ b/packages/engine-rn-next/src/tasks/taskBuild.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, logTask, RnvTaskOptionPresets, executeOrSkipTask, @@ -8,36 +7,27 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { buildWebNext } from '../sdk'; +import { buildWebNext } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; -const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskBuild', `parent:${parentTask}`); - const { platform } = c; - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.build, originTask); - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - switch (platform) { - case 'web': - case 'chromecast': - if (parentTask === RnvTaskName.export) { - // build task is not necessary when exporting. They do the same thing, only difference is a next.config.js config flag - return true; - } - await buildWebNext(); - return; - default: - logErrorPlatform(); + if (parentTask === RnvTaskName.export) { + // build task is not necessary when exporting. They do the same thing, only difference is a next.config.js config flag + return true; } + await buildWebNext(); }; const Task: RnvTask = { description: 'Build project binary', - fn: taskBuild, + fn, task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['web', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-next/src/tasks/taskConfigure.ts b/packages/engine-rn-next/src/tasks/taskConfigure.ts index 8bbf32fc51..190549e690 100644 --- a/packages/engine-rn-next/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-next/src/tasks/taskConfigure.ts @@ -1,16 +1,8 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { configureNextIfRequired } from '../sdk'; +import { RnvTaskFn, logTask, RnvTaskOptionPresets, executeTask, shouldSkipTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { configureNextIfRequired } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); @@ -21,21 +13,15 @@ const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { return true; } - switch (c.platform) { - case 'web': - case 'chromecast': - return configureNextIfRequired(); - default: - return logErrorPlatform(); - } + return configureNextIfRequired(); }; const Task: RnvTask = { description: 'Configure current project', - fn: taskConfigure, + fn, task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['web', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-next/src/tasks/taskExport.ts b/packages/engine-rn-next/src/tasks/taskExport.ts index 89c1977d70..508389779d 100644 --- a/packages/engine-rn-next/src/tasks/taskExport.ts +++ b/packages/engine-rn-next/src/tasks/taskExport.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, logTask, RnvTaskOptionPresets, shouldSkipTask, @@ -8,31 +7,23 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { exportWebNext } from '../sdk'; +import { exportWebNext } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; -const taskExport: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskExport', `parent:${parentTask}`); - const { platform } = c; - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); - if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - switch (platform) { - case 'web': - case 'chromecast': - return exportWebNext(); - default: - logErrorPlatform(); - } + return exportWebNext(); }; const Task: RnvTask = { description: 'Export the app into deployable binary', - fn: taskExport, + fn, task: RnvTaskName.export, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['web', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-next/src/tasks/taskRun.ts b/packages/engine-rn-next/src/tasks/taskRun.ts index 48862ffd5f..7118d6e879 100644 --- a/packages/engine-rn-next/src/tasks/taskRun.ts +++ b/packages/engine-rn-next/src/tasks/taskRun.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, logTask, RnvTaskOptionPresets, executeOrSkipTask, @@ -8,33 +7,24 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { runWebNext } from '../sdk'; +import { runWebNext } from '../sdk/runner'; +import { SdkPlatforms } from '../sdk/constants'; -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskRun', `parent:${parentTask}`); - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - switch (platform) { - case 'web': - case 'chromecast': - c.runtime.shouldOpenBrowser = true; - return runWebNext(); - default: - return logErrorPlatform(); - } + return runWebNext(); }; const Task: RnvTask = { description: 'Run your app in browser', - fn: taskRun, + fn, task: RnvTaskName.run, isPriorityOrder: true, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), - platforms: ['web', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-next/src/tasks/taskStart.ts b/packages/engine-rn-next/src/tasks/taskStart.ts index 732d12bc6e..20de71e22f 100644 --- a/packages/engine-rn-next/src/tasks/taskStart.ts +++ b/packages/engine-rn-next/src/tasks/taskStart.ts @@ -1,6 +1,5 @@ import { RnvTaskFn, - logErrorPlatform, logTask, logError, RnvTaskOptionPresets, @@ -9,11 +8,11 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { runWebNext } from '../sdk'; +import { runWebNext } from '../sdk/runner'; import { openBrowser, waitForHost } from '@rnv/sdk-utils'; +import { SdkPlatforms } from '../sdk/constants'; -const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; +const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; const { hosted } = c.program; @@ -34,22 +33,16 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { if (hosted) { return Promise.reject('This platform does not support hosted mode'); } - switch (platform) { - case 'web': - case 'chromecast': - c.runtime.shouldOpenBrowser = false; - return runWebNext(); - default: - return logErrorPlatform(); - } + + return runWebNext(); }; const Task: RnvTask = { description: 'Starts bundler / server', - fn: taskStart, + fn, task: RnvTaskName.start, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['web', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-web/src/constants.ts b/packages/engine-rn-web/src/constants.ts new file mode 100644 index 0000000000..5b946ba80f --- /dev/null +++ b/packages/engine-rn-web/src/constants.ts @@ -0,0 +1,12 @@ +import { PlatformKey } from '@rnv/core'; + +export const EnginePlatforms: Array = [ + 'web', + 'webtv', + 'tizen', + 'webos', + 'tizenmobile', + 'tizenwatch', + 'kaios', + 'chromecast', +]; diff --git a/packages/engine-rn-web/src/tasks/taskBuild.ts b/packages/engine-rn-web/src/tasks/taskBuild.ts index 42592a0561..c0f2988f5d 100644 --- a/packages/engine-rn-web/src/tasks/taskBuild.ts +++ b/packages/engine-rn-web/src/tasks/taskBuild.ts @@ -12,8 +12,9 @@ import { buildWeb } from '@rnv/sdk-webpack'; import { buildTizenProject } from '@rnv/sdk-tizen'; import { buildWebOSProject } from '@rnv/sdk-webos'; import { buildKaiOSProject } from '@rnv/sdk-kaios'; +import { EnginePlatforms } from '../constants'; -const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskBuild', `parent:${parentTask}`); const { platform } = c; @@ -49,10 +50,10 @@ const taskBuild: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Build project binary', - fn: taskBuild, + fn, task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['web', 'webtv', 'tizen', 'webos', 'tizenmobile', 'tizenwatch', 'kaios', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: EnginePlatforms, }; export default Task; diff --git a/packages/engine-rn-web/src/tasks/taskConfigure.ts b/packages/engine-rn-web/src/tasks/taskConfigure.ts index c16c9d7fa2..dacfe6df20 100644 --- a/packages/engine-rn-web/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-web/src/tasks/taskConfigure.ts @@ -14,8 +14,9 @@ import { configureWebProject, configureChromecastProject } from '@rnv/sdk-webpac import { configureKaiOSProject } from '@rnv/sdk-kaios'; import { configureWebOSProject } from '@rnv/sdk-webos'; import { configureTizenProject } from '@rnv/sdk-tizen'; +import { EnginePlatforms } from '../constants'; -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); @@ -49,10 +50,10 @@ const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Configure current project', - fn: taskConfigure, + fn, task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['web', 'webtv', 'tizen', 'webos', 'tizenmobile', 'tizenwatch', 'kaios', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: EnginePlatforms, }; export default Task; diff --git a/packages/engine-rn-web/src/tasks/taskDebug.ts b/packages/engine-rn-web/src/tasks/taskDebug.ts index f8cf670561..0561c0718f 100644 --- a/packages/engine-rn-web/src/tasks/taskDebug.ts +++ b/packages/engine-rn-web/src/tasks/taskDebug.ts @@ -1,36 +1,17 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - executeAsync, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskFn, logTask, executeAsync, shouldSkipTask, RnvTask, RnvTaskName } from '@rnv/core'; -const taskDebug: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskDebug', `parent:${parentTask}`); if (shouldSkipTask(RnvTaskName.debug, originTask)) return true; - const { platform } = c; - - switch (platform) { - case 'web': - case 'webtv': - case 'tizen': - return executeAsync('npx weinre --boundHost -all-'); - default: - logErrorPlatform(); - } + return executeAsync('npx weinre --boundHost -all-'); }; const Task: RnvTask = { description: 'Debug your app on target device or emulator', - fn: taskDebug, + fn, task: RnvTaskName.debug, - options: RnvTaskOptionPresets.withBase(), platforms: ['web', 'webtv', 'tizen'], }; diff --git a/packages/engine-rn-web/src/tasks/taskRun.ts b/packages/engine-rn-web/src/tasks/taskRun.ts index a5fd147b0a..4dc84ea94f 100644 --- a/packages/engine-rn-web/src/tasks/taskRun.ts +++ b/packages/engine-rn-web/src/tasks/taskRun.ts @@ -23,6 +23,7 @@ import { runTizen } from '@rnv/sdk-tizen'; import { runWebOS } from '@rnv/sdk-webos'; import { runKaiOSProject } from '@rnv/sdk-kaios'; import { getIP } from '@rnv/sdk-utils'; +import { EnginePlatforms } from '../constants'; const existBuildsOverrideForTargetPathSync = (c: RnvContext, destPath: string) => { const appFolder = getAppFolder(); @@ -73,7 +74,7 @@ const _configureHostedIfRequired = async (c: RnvContext) => { } }; -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { platform } = c; const { port } = c.runtime; const { target } = c.runtime; @@ -121,11 +122,11 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Run your app in browser', - fn: taskRun, + fn, task: RnvTaskName.run, isPriorityOrder: true, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), - platforms: ['web', 'webtv', 'tizen', 'webos', 'tizenmobile', 'tizenwatch', 'kaios', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), + platforms: EnginePlatforms, }; export default Task; diff --git a/packages/engine-rn-web/src/tasks/taskStart.ts b/packages/engine-rn-web/src/tasks/taskStart.ts index e04e7029e2..38135c6ce3 100644 --- a/packages/engine-rn-web/src/tasks/taskStart.ts +++ b/packages/engine-rn-web/src/tasks/taskStart.ts @@ -12,8 +12,9 @@ import { RnvTaskName, } from '@rnv/core'; import { REMOTE_DEBUGGER_ENABLED_PLATFORMS, openBrowser, waitForHost } from '@rnv/sdk-utils'; +import { EnginePlatforms } from '../constants'; -const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { platform } = c; const { port } = c.runtime; const { hosted } = c.program; @@ -54,10 +55,10 @@ const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Starts bundler / server', - fn: taskStart, + fn, task: RnvTaskName.start, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['web', 'webtv', 'tizen', 'webos', 'tizenmobile', 'tizenwatch', 'kaios', 'chromecast'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: EnginePlatforms, }; export default Task; diff --git a/packages/engine-rn-windows/src/index.ts b/packages/engine-rn-windows/src/index.ts index 55c7c70f80..b2f60d7871 100644 --- a/packages/engine-rn-windows/src/index.ts +++ b/packages/engine-rn-windows/src/index.ts @@ -1,18 +1,17 @@ import { RnvEngine, generateEngineTasks, generateEngineExtensions } from '@rnv/core'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; -//@ts-ignore -import CNF from '../renative.engine.json'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskExport from './tasks/taskExport'; import taskPackage from './tasks/taskPackage'; import taskRun from './tasks/taskRun'; -import taskStart from './tasks/taskStart'; -import { withRNVRNConfig } from '@rnv/sdk-react-native'; +import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-native'; +//@ts-ignore +import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskPackage, taskBuild, taskConfigure, taskStart, taskExport]), + tasks: generateEngineTasks([taskRun, taskPackage, taskBuild, taskConfigure, taskExport, ...TasksSdkReactNative]), config: CNF, projectDirName: '', runtimeExtraProps: {}, diff --git a/packages/engine-rn-windows/src/sdks/sdk-windows/config/configUtils.js b/packages/engine-rn-windows/src/sdk/config/configUtils.js similarity index 100% rename from packages/engine-rn-windows/src/sdks/sdk-windows/config/configUtils.js rename to packages/engine-rn-windows/src/sdk/config/configUtils.js diff --git a/packages/engine-rn-windows/src/sdk/constants.ts b/packages/engine-rn-windows/src/sdk/constants.ts new file mode 100644 index 0000000000..d2e8790724 --- /dev/null +++ b/packages/engine-rn-windows/src/sdk/constants.ts @@ -0,0 +1,3 @@ +import { PlatformKey } from '@rnv/core'; + +export const SdkPlatforms: Array = ['windows', 'xbox']; diff --git a/packages/engine-rn-windows/src/sdks/sdk-windows/copyTemplate.js b/packages/engine-rn-windows/src/sdk/copyTemplate.js similarity index 100% rename from packages/engine-rn-windows/src/sdks/sdk-windows/copyTemplate.js rename to packages/engine-rn-windows/src/sdk/copyTemplate.js diff --git a/packages/engine-rn-windows/src/sdks/sdk-windows/generator-common/index.js b/packages/engine-rn-windows/src/sdk/generator-common/index.js similarity index 100% rename from packages/engine-rn-windows/src/sdks/sdk-windows/generator-common/index.js rename to packages/engine-rn-windows/src/sdk/generator-common/index.js diff --git a/packages/engine-rn-windows/src/sdks/sdk-windows/index.ts b/packages/engine-rn-windows/src/sdk/index.ts similarity index 100% rename from packages/engine-rn-windows/src/sdks/sdk-windows/index.ts rename to packages/engine-rn-windows/src/sdk/index.ts diff --git a/packages/engine-rn-windows/src/sdks/index.ts b/packages/engine-rn-windows/src/sdks/index.ts deleted file mode 100644 index 2eefd8e5b9..0000000000 --- a/packages/engine-rn-windows/src/sdks/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import * as SDKWindows from './sdk-windows'; - -export { SDKWindows }; diff --git a/packages/engine-rn-windows/src/tasks/taskBuild.ts b/packages/engine-rn-windows/src/tasks/taskBuild.ts index 5713b2a093..64118648f4 100644 --- a/packages/engine-rn-windows/src/tasks/taskBuild.ts +++ b/packages/engine-rn-windows/src/tasks/taskBuild.ts @@ -1,38 +1,29 @@ import { RnvTaskFn, executeOrSkipTask, - logErrorPlatform, RnvTaskOptionPresets, logTask, shouldSkipTask, RnvTask, RnvTaskName, } from '@rnv/core'; -import { ruWindowsProject } from '../sdks/sdk-windows'; +import { ruWindowsProject } from '../sdk'; +import { SdkPlatforms } from '../sdk/constants'; -const taskBuild: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskBuild'); - const { platform } = c; await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - switch (platform) { - case 'xbox': - case 'windows': - return ruWindowsProject(c, { release: true, launch: false, deploy: false, logging: false }); - default: - return logErrorPlatform(); - } + return ruWindowsProject(c, { release: true, launch: false, deploy: false, logging: false }); }; const Task: RnvTask = { description: 'Build project binary', - fn: taskBuild, + fn, task: RnvTaskName.build, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['windows', 'xbox'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-windows/src/tasks/taskConfigure.ts b/packages/engine-rn-windows/src/tasks/taskConfigure.ts index dd86e211bb..7f5ac239f2 100644 --- a/packages/engine-rn-windows/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-windows/src/tasks/taskConfigure.ts @@ -1,5 +1,4 @@ import { - logErrorPlatform, copySharedPlatforms, logTask, RnvTaskOptionPresets, @@ -10,11 +9,10 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { SDKWindows } from '../sdks'; +import { configureWindowsProject } from '../sdk'; +import { SdkPlatforms } from '../sdk/constants'; -const { configureWindowsProject } = SDKWindows; - -const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskConfigure'); await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); @@ -27,21 +25,15 @@ const taskConfigure: RnvTaskFn = async (c, parentTask, originTask) => { return true; } - switch (c.platform) { - case 'xbox': - case 'windows': - return configureWindowsProject(c); - default: - return logErrorPlatform(); - } + return configureWindowsProject(c); }; const Task: RnvTask = { description: 'Configure current project', - fn: taskConfigure, + fn, task: RnvTaskName.configure, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['windows', 'xbox'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-windows/src/tasks/taskExport.ts b/packages/engine-rn-windows/src/tasks/taskExport.ts index b10f6dc0e6..bf3139da7b 100644 --- a/packages/engine-rn-windows/src/tasks/taskExport.ts +++ b/packages/engine-rn-windows/src/tasks/taskExport.ts @@ -1,5 +1,4 @@ import { - logErrorPlatform, logTask, RnvTaskOptionPresets, RnvTaskFn, @@ -8,36 +7,27 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { SDKWindows } from '../sdks'; +import { clearWindowsTemporaryFiles, packageWindowsApp } from '../sdk'; +import { SdkPlatforms } from '../sdk/constants'; // TODO Implement export windows app (currently it only seems to be available through VS Studio itself...) -const { packageWindowsApp, clearWindowsTemporaryFiles } = SDKWindows; -const taskExport: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskExport', `parent:${parentTask}`); - const { platform } = c; - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - - switch (platform) { - case 'xbox': - case 'windows': - await clearWindowsTemporaryFiles(c); - return packageWindowsApp(c); - default: - logErrorPlatform(); - } + await clearWindowsTemporaryFiles(c); + return packageWindowsApp(c); }; const Task: RnvTask = { description: 'Export the app into deployable binary', - fn: taskExport, + fn, task: RnvTaskName.export, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['windows', 'xbox'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-windows/src/tasks/taskPackage.ts b/packages/engine-rn-windows/src/tasks/taskPackage.ts index edd2b2afd1..a0c9da6675 100644 --- a/packages/engine-rn-windows/src/tasks/taskPackage.ts +++ b/packages/engine-rn-windows/src/tasks/taskPackage.ts @@ -1,5 +1,4 @@ import { - logErrorPlatform, logTask, RnvTaskOptionPresets, RnvTaskFn, @@ -9,14 +8,11 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { SDKWindows } from '../sdks'; +import { SdkPlatforms } from '../sdk/constants'; +import { packageBundleForWindows } from '../sdk'; -const { packageBundleForWindows } = SDKWindows; - -const taskPackage: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskPackage', `parent:${parentTask}`); - const { platform } = c; - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); const bundleAssets = getConfigProp('bundleAssets'); @@ -26,23 +22,15 @@ const taskPackage: RnvTaskFn = async (c, parentTask, originTask) => { } if (shouldSkipTask(RnvTaskName.package, originTask)) return true; - - switch (platform) { - case 'xbox': - case 'windows': - return packageBundleForWindows(c); - default: - logErrorPlatform(); - return false; - } + return packageBundleForWindows(c); }; const Task: RnvTask = { description: 'Package source files into bundle', - fn: taskPackage, + fn, task: RnvTaskName.package, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['windows', 'xbox'], + options: RnvTaskOptionPresets.withConfigure(), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-windows/src/tasks/taskRun.ts b/packages/engine-rn-windows/src/tasks/taskRun.ts index a21db06f91..d67ae078f1 100644 --- a/packages/engine-rn-windows/src/tasks/taskRun.ts +++ b/packages/engine-rn-windows/src/tasks/taskRun.ts @@ -1,5 +1,4 @@ import { - logErrorPlatform, logTask, RnvTaskOptionPresets, RnvTaskFn, @@ -8,13 +7,11 @@ import { RnvTask, RnvTaskName, } from '@rnv/core'; -import { SDKWindows } from '../sdks'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; +import { clearWindowsTemporaryFiles, ruWindowsProject } from '../sdk'; +import { SdkPlatforms } from '../sdk/constants'; -const { ruWindowsProject, clearWindowsTemporaryFiles } = SDKWindows; - -const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; +const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; const { target } = c.runtime; const { hosted } = c.program; @@ -24,25 +21,19 @@ const taskRun: RnvTaskFn = async (c, parentTask, originTask) => { if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - switch (platform) { - case 'xbox': - case 'windows': - await clearWindowsTemporaryFiles(c); - await startBundlerIfRequired(RnvTaskName.run, originTask); - await ruWindowsProject(c); - return waitForBundlerIfRequired(); - default: - return logErrorPlatform(); - } + await clearWindowsTemporaryFiles(c); + await startBundlerIfRequired(RnvTaskName.run, originTask); + await ruWindowsProject(c); + return waitForBundlerIfRequired(); }; const Task: RnvTask = { description: 'Run your app in a window on desktop', - fn: taskRun, + fn, task: RnvTaskName.run, isPriorityOrder: true, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun())), - platforms: ['windows', 'xbox'], + options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/engine-rn-windows/src/tasks/taskStart.ts b/packages/engine-rn-windows/src/tasks/taskStart.ts deleted file mode 100644 index fb8a3b1fdf..0000000000 --- a/packages/engine-rn-windows/src/tasks/taskStart.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - executeTask, - shouldSkipTask, - doResolve, - RnvTask, - PlatformKey, - RnvTaskName, -} from '@rnv/core'; -import { startReactNative } from '@rnv/sdk-react-native'; - -const BUNDLER_PLATFORMS: Partial> = {}; - -BUNDLER_PLATFORMS['windows'] = 'windows'; -BUNDLER_PLATFORMS['xbox'] = 'windows'; - -const taskStart: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { hosted } = c.program; - - logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); - - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - // Disable reset for other commands (ie. cleaning platforms) - c.runtime.disableReset = true; - if (!parentTask) { - await executeTask(RnvTaskName.configureSoft, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - switch (platform) { - case 'xbox': - case 'windows': { - return startReactNative({ - waitForBundler: !!parentTask, - customCliPath: `${doResolve('react-native')}/local-cli/cli.js`, - metroConfigName: 'metro.config.js', - }); - } - default: - return logErrorPlatform(); - } -}; - -const Task: RnvTask = { - description: 'Starts bundler / server', - fn: taskStart, - task: RnvTaskName.start, - options: RnvTaskOptionPresets.withBase(RnvTaskOptionPresets.withConfigure()), - platforms: ['windows', 'xbox'], -}; - -export default Task; diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index 4bf973cf8e..4081b089f8 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -1,8 +1,7 @@ import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; -import { withRNVRNConfig } from '@rnv/sdk-react-native'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; -import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; +import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-native'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; //@ts-ignore diff --git a/packages/integration-docker/src/tasks/taskDockerDeploy.ts b/packages/integration-docker/src/tasks/taskDockerDeploy.ts index f4ef53aeb9..6463f8be1b 100644 --- a/packages/integration-docker/src/tasks/taskDockerDeploy.ts +++ b/packages/integration-docker/src/tasks/taskDockerDeploy.ts @@ -1,7 +1,6 @@ import { RnvTaskFn, logTask, - RnvTaskOptionPresets, executeOrSkipTask, initializeTask, findSuitableTask, @@ -10,7 +9,7 @@ import { } from '@rnv/core'; import Docker from '../docker'; -const taskDockerDeploy: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskDockerDeploy', `parent:${parentTask}`); if (c.program.only) { @@ -28,9 +27,8 @@ const taskDockerDeploy: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Deploys your project to docker image', - fn: taskDockerDeploy, + fn, task: 'docker deploy', - options: RnvTaskOptionPresets.withBase(), platforms: ['web'], }; diff --git a/packages/integration-docker/src/tasks/taskDockerExport.ts b/packages/integration-docker/src/tasks/taskDockerExport.ts index f2bc590128..e8a4e973ef 100644 --- a/packages/integration-docker/src/tasks/taskDockerExport.ts +++ b/packages/integration-docker/src/tasks/taskDockerExport.ts @@ -1,7 +1,6 @@ import { RnvTaskFn, logTask, - RnvTaskOptionPresets, executeOrSkipTask, initializeTask, findSuitableTask, @@ -10,7 +9,7 @@ import { } from '@rnv/core'; import Docker from '../docker'; -const taskDockerExport: RnvTaskFn = async (c, parentTask, originTask) => { +const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskDockerExport', `parent:${parentTask}`); if (c.program.only) { @@ -28,9 +27,8 @@ const taskDockerExport: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Exports your project to docker image', - fn: taskDockerExport, + fn, task: 'docker export', - options: RnvTaskOptionPresets.withBase(), platforms: ['web'], }; diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index 759117dc6a..f6489fc5e0 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -1,15 +1,15 @@ -import { RnvContext, RnvTaskOptionPresets, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; +import { RnvContext, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; -const task: RnvTaskFn = async (c: RnvContext) => { +const fn: RnvTaskFn = async (c: RnvContext) => { logSuccess(`Hello from Integration Starter single command! --my-opt: "${c.program.myOpt}"`); }; const Task: RnvTask = { description: 'Prints hello message', - fn: task, + fn, task: 'starter-single-command', - options: RnvTaskOptionPresets.withBase([{ key: 'my-opt', description: 'Hello', isValueType: true }]), + options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], }; export default Task; diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index 911dd35d22..6f5a7fe38e 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -1,15 +1,15 @@ -import { RnvContext, RnvTaskOptionPresets, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; +import { RnvContext, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; -const task: RnvTaskFn = async (c: RnvContext) => { +const fn: RnvTaskFn = async (c: RnvContext) => { logSuccess(`Hello from Integration Starter! --my-opt: "${c.program.myOpt}"`); }; const Task: RnvTask = { description: 'Prints hello message', - fn: task, + fn, task: 'starter hello', - options: RnvTaskOptionPresets.withBase([{ key: 'my-opt', description: 'Hello', isValueType: true }]), + options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], }; export default Task; diff --git a/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts index 18eeb0d9f3..a5a4c435b0 100644 --- a/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts +++ b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts @@ -4,6 +4,7 @@ import { getIosDeviceToRunOn, runXcodeProject } from '@rnv/sdk-apple'; jest.mock('@rnv/core'); jest.mock('@rnv/sdk-react-native'); +jest.mock('../../runner'); beforeEach(() => { createRnvContext(); diff --git a/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts index 18eeb0d9f3..a5a4c435b0 100644 --- a/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts +++ b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts @@ -4,6 +4,7 @@ import { getIosDeviceToRunOn, runXcodeProject } from '@rnv/sdk-apple'; jest.mock('@rnv/core'); jest.mock('@rnv/sdk-react-native'); +jest.mock('../../runner'); beforeEach(() => { createRnvContext(); diff --git a/packages/sdk-kaios/src/constants.ts b/packages/sdk-kaios/src/constants.ts index 9defc3359d..82cefb807f 100644 --- a/packages/sdk-kaios/src/constants.ts +++ b/packages/sdk-kaios/src/constants.ts @@ -1 +1,5 @@ +import { PlatformKey } from '@rnv/core'; + export const CLI_KAIOS_EMULATOR = 'kaiosEmulator'; + +export const SdkPlatforms: Array = ['kaios']; diff --git a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts index df7cc6373e..ff840c9259 100644 --- a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts @@ -1,8 +1,9 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchKaiOSSimulator } from '../deviceManager'; +import { SdkPlatforms } from '../constants'; -const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); await isPlatformSupported(true); @@ -15,10 +16,10 @@ const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Launch specific target', - fn: taskTargetLaunch, + fn, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], - platforms: ['kaios'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-react-native/src/constants.ts b/packages/sdk-react-native/src/constants.ts new file mode 100644 index 0000000000..b7549e56a3 --- /dev/null +++ b/packages/sdk-react-native/src/constants.ts @@ -0,0 +1,3 @@ +import { PlatformKey } from '@rnv/core'; + +export const SdkPlatforms: Array = ['ios', 'android', 'androidtv', 'androidwear', 'firetv', 'macos']; diff --git a/packages/sdk-react-native/src/tasks/taskStart.ts b/packages/sdk-react-native/src/tasks/taskStart.ts index 75af29c618..95c0ccd06a 100644 --- a/packages/sdk-react-native/src/tasks/taskStart.ts +++ b/packages/sdk-react-native/src/tasks/taskStart.ts @@ -9,6 +9,7 @@ import { doResolve, } from '@rnv/core'; import { startReactNative } from '../metroRunner'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { hosted } = c.program; @@ -43,7 +44,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), - platforms: ['ios', 'android', 'androidtv', 'androidwear', 'firetv', 'macos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-tizen/src/constants.ts b/packages/sdk-tizen/src/constants.ts index a1cea8867b..5dc97b04ad 100644 --- a/packages/sdk-tizen/src/constants.ts +++ b/packages/sdk-tizen/src/constants.ts @@ -1,3 +1,7 @@ +import { PlatformKey } from '@rnv/core'; + export const CLI_TIZEN_EMULATOR = 'tizenEmulator'; export const CLI_TIZEN = 'tizen'; export const CLI_SDB_TIZEN = 'tizenSdb'; + +export const SdkPlatforms: Array = ['kaios']; diff --git a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts index a357d1be5c..2c4467e756 100644 --- a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts @@ -1,5 +1,6 @@ import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async () => { logTask('taskSdkConfigure'); @@ -13,8 +14,7 @@ const Task: RnvTask = { isPrivate: true, fn, task: RnvTaskName.sdkConfigure, - options: [], - platforms: ['tizen', 'tizenwatch', 'tizenmobile'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts index 91b0574d5e..a7b0beb6b5 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts @@ -2,8 +2,9 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskN import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { launchTizenSimulator } from '../deviceManager'; +import { SdkPlatforms } from '../constants'; -const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); await isPlatformSupported(true); @@ -18,10 +19,10 @@ const taskTargetLaunch: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Launch specific target', - fn: taskTargetLaunch, + fn, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], - platforms: ['tizen', 'tizenwatch', 'tizenmobile'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-tizen/src/tasks/taskTargetList.ts b/packages/sdk-tizen/src/tasks/taskTargetList.ts index b7a622162e..33303f04de 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetList.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetList.ts @@ -1,8 +1,9 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { listTizenTargets } from '../deviceManager'; +import { SdkPlatforms } from '../constants'; -const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { +const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetList'); await isPlatformSupported(true); @@ -15,10 +16,10 @@ const taskTargetList: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'List all available targets for specific platform', - fn: taskTargetList, + fn, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], - platforms: ['tizen', 'tizenwatch', 'tizenmobile'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-webos/src/constants.ts b/packages/sdk-webos/src/constants.ts index da3e01f222..6acccc8474 100644 --- a/packages/sdk-webos/src/constants.ts +++ b/packages/sdk-webos/src/constants.ts @@ -1,3 +1,5 @@ +import { PlatformKey } from '@rnv/core'; + export const CLI_WEBOS_ARES = 'webosAres'; export const CLI_WEBOS_ARES_PACKAGE = 'webosAresPackage'; export const CLI_WEBOS_ARES_INSTALL = 'webosAresInstall'; @@ -5,3 +7,5 @@ export const CLI_WEBOS_ARES_LAUNCH = 'webosAresLaunch'; export const CLI_WEBOS_ARES_SETUP_DEVICE = 'webosAresSetup'; export const CLI_WEBOS_ARES_DEVICE_INFO = 'webosAresDeviceInfo'; export const CLI_WEBOS_ARES_NOVACOM = 'webosAresNovacom'; + +export const SdkPlatforms: Array = ['webos']; diff --git a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts index 36cd35f0a5..1e0a29b65b 100644 --- a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts @@ -1,5 +1,6 @@ import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async () => { logTask('taskSdkConfigure'); @@ -13,8 +14,7 @@ const Task: RnvTask = { isPrivate: true, fn, task: RnvTaskName.sdkConfigure, - options: [], - platforms: ['webos'], + platforms: SdkPlatforms, }; export default Task; diff --git a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts index 1228b611ae..b3a4435af3 100644 --- a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts @@ -2,6 +2,7 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskN import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { launchWebOSimulator } from '../deviceManager'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetLaunch'); @@ -21,7 +22,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], - platforms: ['webos'], + platforms: SdkPlatforms, isGlobalScope: true, }; diff --git a/packages/sdk-webos/src/tasks/taskTargetList.ts b/packages/sdk-webos/src/tasks/taskTargetList.ts index 60030d4f7e..0ce26af8e2 100644 --- a/packages/sdk-webos/src/tasks/taskTargetList.ts +++ b/packages/sdk-webos/src/tasks/taskTargetList.ts @@ -1,6 +1,7 @@ import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { listWebOSTargets } from '../deviceManager'; +import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskTargetList'); @@ -18,7 +19,7 @@ const Task: RnvTask = { fn, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], - platforms: ['webos'], + platforms: SdkPlatforms, isGlobalScope: true, }; From 0b4a8b89a5b1f93c31e640016ec5c06c26a90948 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 24 Mar 2024 22:40:28 +0100 Subject: [PATCH 103/175] add support for `-p --yes` for rnv new --- .../src/tasks/bootstrap/questions/supportedPlatforms.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts index 172640dc20..0703b483e0 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts @@ -46,8 +46,11 @@ const Question = async (data: NewProjectData) => { supportedPlatforms.sort((a, b) => RnvPlatforms.indexOf(a) - RnvPlatforms.indexOf(b)); + const optsPlatforms = c.program.platform && [c.program.platform]; const selectedPlatforms = - files.template.renativeTemplateConfig?.bootstrapConfig?.defaultSelectedPlatforms || supportedPlatforms; + optsPlatforms || + files.template.renativeTemplateConfig?.bootstrapConfig?.defaultSelectedPlatforms || + supportedPlatforms; if (supportedPlatforms.length === 0) { logError( From 67c7b62ff0a55b437948a96e1b64477e03127a7a Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 00:56:43 +0100 Subject: [PATCH 104/175] install option, read config templates before full install --- packages/core/src/schema/common/index.ts | 8 ++++ .../src/tasks/bootstrap/questionHelpers.ts | 20 ++++++++-- .../bootstrap/questions/applyTemplate.ts | 23 +---------- .../bootstrap/questions/configTemplates.ts | 38 +++++++++++++++++++ .../bootstrap/questions/installProject.ts | 22 +++++++++++ .../bootstrap/questions/installTemplate.ts | 22 +++++++++-- .../src/tasks/bootstrap/taskNew.ts | 4 ++ .../engine-core/src/tasks/bootstrap/types.ts | 5 +++ .../src/tasks/__tests__/taskRun.test.ts | 11 ++++-- .../src/tasks/__tests__/taskRun.test.ts | 2 +- .../src/tasks/__tests__/taskStart.test.ts | 8 ++-- 11 files changed, 127 insertions(+), 36 deletions(-) create mode 100644 packages/engine-core/src/tasks/bootstrap/questions/configTemplates.ts create mode 100644 packages/engine-core/src/tasks/bootstrap/questions/installProject.ts diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index 0eb9cf8c22..49b13ea9b1 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -155,6 +155,10 @@ export const CommonSchemaFragment = { custom: z.optional(Ext), }; +// const CommonSchemaFragmentSchema = z.object(CommonSchemaFragment); + +// type CommonSchemaFragmentTS = z.infer; + // const CommonBuildSchemes = z.record(z.string(), BuildSchemeBase.merge(PlatformBaseFragment)); // export type _CommonBuildSchemesSchemaType = z.infer; @@ -175,4 +179,8 @@ export const CommonSchema = z }) .describe('Common config props used as default props for all available buildSchemes'); +// type CommonSchemaTS = CommonSchemaFragmentTS & { +// buildSchemes: Record; +// }; + export type _CommonSchemaType = z.infer; diff --git a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts index b276708f12..14f2c3d211 100644 --- a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts +++ b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts @@ -5,6 +5,7 @@ import { getApi, getContext, inquirerPrompt, + isYarnInstalled, logDebug, populateContextPaths, updateRenativeConfigs, @@ -76,8 +77,8 @@ export const initNewProject = async () => { defaults: { appVersion: '0.1.0', templateName: '@rnv/template-starter', - projectName: 'helloRenative', - appTitle: 'Hello Renative', + projectName: 'My Renative Project', + appTitle: 'My Renative App', workspaceID: 'rnv', }, inputs: {}, @@ -86,6 +87,7 @@ export const initNewProject = async () => { renativeConfig: {}, packageJson: {}, }, + configTemplates: {}, template: { renativeTemplateConfig: {}, renativeConfig: {}, @@ -124,7 +126,7 @@ export const configureConfigOverrides = async (data: NewProjectData) => { const loadedConf = c.files.project.config; // Configure only required engines based on supportedPlatforms - const engines = data.files.project.renativeConfig?.engines; + const engines = files.project.renativeConfig?.engines; if (engines) { // Remove unused engines based on selected platforms supPlats.forEach((k) => { @@ -139,6 +141,14 @@ export const configureConfigOverrides = async (data: NewProjectData) => { } }); } + Object.keys(renativeConfig.engines).forEach((engKey) => { + const engVersion = files.configTemplates.config?.engineTemplates?.[engKey]?.version; + if (engVersion) { + if (files.project.packageJson.devDependencies) { + files.project.packageJson.devDependencies[engKey] = engVersion; + } + } + }); }; export const telemetryNewProject = async (data: NewProjectData) => { @@ -164,6 +174,8 @@ export const generateProjectOverview = (data: NewProjectData) => { const highlight = chalk().bold; + const installAddon = !inputs.confirmProjectInstall ? `\n ${isYarnInstalled() ? 'yarn' : 'npm install'}` : ''; + const str = ` Generated Project Summary: ------------------------- Project Name: ${highlight(inputs.projectName)} @@ -178,7 +190,7 @@ export const generateProjectOverview = (data: NewProjectData) => { ------------------------- ${chalk().green('✔ Your project is ready!')} Run it with: ${chalk().bold(` - cd ${inputs.projectFolderName} + cd ${inputs.projectFolderName}${installAddon} npx rnv run`)}`; return str; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts index 24b6c3789c..13bba5f201 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts @@ -1,14 +1,5 @@ -import { - ConfigFileProject, - ConfigFileTemplate, - RnvFileName, - getContext, - inquirerPrompt, - mergeObjects, - readObjectSync, -} from '@rnv/core'; +import { getContext, inquirerPrompt, mergeObjects } from '@rnv/core'; import type { NewProjectData } from '../types'; -import path from 'path'; const Question = async (data: NewProjectData): Promise => { const c = getContext(); @@ -18,18 +9,6 @@ const Question = async (data: NewProjectData): Promise => { if (!tplName) { return Promise.reject('Template not selected'); } - const templateDir = path.join(c.paths.project.dir, 'node_modules', tplName); - - const renativeTemplateConfig = - readObjectSync(path.join(templateDir, RnvFileName.renativeTemplate)) || {}; - if (renativeTemplateConfig) { - files.template.renativeTemplateConfig = renativeTemplateConfig; - } - - const renativeConfig = readObjectSync(path.join(templateDir, RnvFileName.renative)); - if (renativeConfig) { - files.template.renativeConfig = renativeConfig; - } const optExtend = 'Extend template (cleaner, overridable)'; const optCopy = 'Copy from template (full control)'; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/configTemplates.ts b/packages/engine-core/src/tasks/bootstrap/questions/configTemplates.ts new file mode 100644 index 0000000000..6ba3e76aba --- /dev/null +++ b/packages/engine-core/src/tasks/bootstrap/questions/configTemplates.ts @@ -0,0 +1,38 @@ +import { + ConfigFileTemplates, + RnvFileName, + executeAsync, + fsExistsSync, + getContext, + isYarnInstalled, + readObjectSync, +} from '@rnv/core'; +import type { NewProjectData } from '../types'; +import path from 'path'; + +const Question = async (data: NewProjectData): Promise => { + const c = getContext(); + const { files } = data; + + const cnfTemplatesName = '@rnv/config-templates'; + const cnfDepVer = + files.template.renativeTemplateConfig?.templateConfig?.package_json?.devDependencies?.[cnfTemplatesName]; + if (cnfDepVer) { + // If we find the config-templates package in the devDependencies of the project's package.json, + // we will use it as source for engines + await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${cnfTemplatesName}@${cnfDepVer} --dev`, { + cwd: c.paths.project.dir, + }); + const ctCnfPath = path.join(c.paths.project.nodeModulesDir, cnfTemplatesName, RnvFileName.renativeTemplates); + if (fsExistsSync(ctCnfPath)) { + files.configTemplates.config = readObjectSync(ctCnfPath) || undefined; + } + } + + if (!files.configTemplates.config) { + // As fallback we'll use current rnv executor's config-templates + files.configTemplates.config = c.files.rnvConfigTemplates.config; + } +}; + +export default Question; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/installProject.ts b/packages/engine-core/src/tasks/bootstrap/questions/installProject.ts new file mode 100644 index 0000000000..0d70e029de --- /dev/null +++ b/packages/engine-core/src/tasks/bootstrap/questions/installProject.ts @@ -0,0 +1,22 @@ +import { executeAsync, getContext, inquirerPrompt, isYarnInstalled } from '@rnv/core'; +import type { NewProjectData } from '../types'; + +const Question = async (data: NewProjectData) => { + const { inputs } = data; + const c = getContext(); + + const { confirmInstallProject } = await inquirerPrompt({ + name: 'confirmInstallProject', + type: 'confirm', + message: 'Project is ready. Do you want to all project dependencies now?', + }); + inputs.confirmProjectInstall = confirmInstallProject; + + if (confirmInstallProject) { + await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm install'}`, { + cwd: c.paths.project.dir, + }); + } +}; + +export default Question; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts index a44a14392d..4ba0231a23 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts @@ -1,4 +1,6 @@ import { + ConfigFileProject, + ConfigFileTemplate, NpmPackageFile, RnvFileName, RnvFolderName, @@ -153,7 +155,6 @@ const Question = async (data: NewProjectData) => { if (!inputs.tepmplate.packageName) { return; } - // NOTE: this is a workaround for npm/yarn bug where manually added packages are overriden on next install const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${inputs.tepmplate.packageName}`; files.project.packageJson = merge(files.project.packageJson, { @@ -168,9 +169,7 @@ const Question = async (data: NewProjectData) => { }, }, }); - await saveProgressIntoProjectConfig(data); - await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm install'}`, { cwd: c.paths.project.dir, }); @@ -198,6 +197,23 @@ const Question = async (data: NewProjectData) => { ); } } + + if (!inputs.tepmplate.packageName) { + return; + } + + const templateDir = path.join(c.paths.project.dir, 'node_modules', inputs.tepmplate.packageName); + + const renativeTemplateConfig = + readObjectSync(path.join(templateDir, RnvFileName.renativeTemplate)) || {}; + if (renativeTemplateConfig) { + files.template.renativeTemplateConfig = renativeTemplateConfig; + } + + const renativeConfig = readObjectSync(path.join(templateDir, RnvFileName.renative)); + if (renativeConfig) { + files.template.renativeConfig = renativeConfig; + } }; export default Question; diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index db3e56330b..2f94b3f8ea 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -23,6 +23,8 @@ import inquiryInstallTemplate from './questions/installTemplate'; import inquiryApplyTemplate from './questions/applyTemplate'; import inquiryBookmarkTemplate from './questions/bookmarkTemplate'; import inquiryAppConfigs from './questions/appConfigs'; +import inquiryConfigTemplates from './questions/configTemplates'; +import inquiryProjectInstall from './questions/installProject'; import { configureConfigOverrides, generateProjectOverview, @@ -47,6 +49,7 @@ const fn = async () => { await processChdirToProject(); // Install template only (this avoids whole npm project install) await inquiryInstallTemplate(payload); + await inquiryConfigTemplates(payload); await inquiryApplyTemplate(payload); await saveProgressIntoProjectConfig(payload); // Gather project/app info @@ -70,6 +73,7 @@ const fn = async () => { await inquiryAppConfigs(payload); // Telementry await telemetryNewProject(payload); + await inquiryProjectInstall(payload); logToSummary(generateProjectOverview(payload)); diff --git a/packages/engine-core/src/tasks/bootstrap/types.ts b/packages/engine-core/src/tasks/bootstrap/types.ts index 51fcc726a0..86cf739526 100644 --- a/packages/engine-core/src/tasks/bootstrap/types.ts +++ b/packages/engine-core/src/tasks/bootstrap/types.ts @@ -2,6 +2,7 @@ import type { ConfigFileBuildConfig, ConfigFileProject, ConfigFileTemplate, + ConfigFileTemplates, NpmPackageFile, PlatformKey, } from '@rnv/core'; @@ -19,6 +20,7 @@ export type NewProjectData = { confirmDeleteNodeModules?: boolean; confirmInRnvProject?: boolean; confirmEnableGit?: boolean; + confirmProjectInstall?: boolean; appID?: string; appVersion?: string; projectName?: string; @@ -34,6 +36,9 @@ export type NewProjectData = { renativeTemplateConfig: ConfigFileTemplate; renativeConfig: ConfigFileProject; }; + configTemplates: { + config?: ConfigFileTemplates; + }; project: { renativeConfig: ConfigFileProject; packageJson: NpmPackageFile; diff --git a/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts index a5a4c435b0..27fb07c7f5 100644 --- a/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts +++ b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts @@ -1,6 +1,6 @@ import { createRnvContext, getContext } from '@rnv/core'; import taskRun from '../taskRun'; -import { getIosDeviceToRunOn, runXcodeProject } from '@rnv/sdk-apple'; +import { getAndroidDeviceToRunOn, runAndroid } from '../../runner'; jest.mock('@rnv/core'); jest.mock('@rnv/sdk-react-native'); @@ -18,9 +18,14 @@ test('Execute task.rnv.run', async () => { // GIVEN const ctx = getContext(); ctx.platform = 'ios'; - jest.mocked(getIosDeviceToRunOn).mockResolvedValueOnce('MOCK_DEVICE_ARGS'); + const mockedDevice = { + name: 'MOCK_DEVICE_NAME', + udid: 'MOCK_DEVICE_UDID', + isActive: true, + }; + jest.mocked(getAndroidDeviceToRunOn).mockResolvedValueOnce(mockedDevice); // WHEN await taskRun.fn?.(ctx, undefined, undefined); // THEN - expect(runXcodeProject).toHaveBeenCalledWith('MOCK_DEVICE_ARGS'); + expect(runAndroid).toHaveBeenCalledWith(mockedDevice); }); diff --git a/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts index a5a4c435b0..d84eecb598 100644 --- a/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts +++ b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts @@ -1,6 +1,6 @@ import { createRnvContext, getContext } from '@rnv/core'; import taskRun from '../taskRun'; -import { getIosDeviceToRunOn, runXcodeProject } from '@rnv/sdk-apple'; +import { getIosDeviceToRunOn, runXcodeProject } from '../../runner'; jest.mock('@rnv/core'); jest.mock('@rnv/sdk-react-native'); diff --git a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts index 213e56df0d..292601453b 100644 --- a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts +++ b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts @@ -1,8 +1,10 @@ import { createRnvContext, doResolve, executeTask, getContext } from '@rnv/core'; import taskStart from '../taskStart'; -import { startReactNative } from '@rnv/sdk-react-native'; +import { startReactNative } from '../../metroRunner'; jest.mock('@rnv/core'); +jest.mock('@rnv/sdk-utils'); +jest.mock('../../metroRunner'); beforeEach(() => { createRnvContext(); @@ -32,7 +34,7 @@ describe('taskStart', () => { // THEN expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: false }); }); - it('Execute task.rnv.start with no parent', async () => { + it('Execute task.rnv.start with no parent and custom customCliPath', async () => { // GIVEN const ctx = getContext(); ctx.platform = 'tvos'; @@ -48,7 +50,7 @@ describe('taskStart', () => { }); }); - it('Execute task.rnv.start', async () => { + it('Execute task.rnv.start with customCliPath', async () => { // GIVEN const ctx = getContext(); ctx.platform = 'tvos'; From 9df8b2455199b430bb2901219d243b15563119b1 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 01:23:13 +0100 Subject: [PATCH 105/175] fix UTs --- packages/core/src/tasks/constants.ts | 14 ++-- .../tasks/bootstrap/__tests__/taskNew.test.ts | 70 +++++++++++-------- .../{projectVersion.ts => appVersion.ts} | 0 .../src/tasks/bootstrap/taskNew.ts | 2 +- .../src/tasks/__tests__/taskStart.test.ts | 12 +++- .../sdk-react-native/src/tasks/taskStart.ts | 2 +- 6 files changed, 61 insertions(+), 39 deletions(-) rename packages/engine-core/src/tasks/bootstrap/questions/{projectVersion.ts => appVersion.ts} (100%) diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 4acb775868..752b483092 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -22,6 +22,7 @@ const _RnvTaskOptions = { description: 'Show full debug Info', }, printExec: { + key: 'print-exec', description: 'Print exec commands in full', }, platform: { @@ -30,6 +31,7 @@ const _RnvTaskOptions = { description: 'select specific Platform', }, skipTasks: { + key: 'skip-tasks', isValueType: true, isRequired: true, description: 'List tasks which you want to skip during rnv execution', @@ -46,6 +48,7 @@ const _RnvTaskOptions = { description: 'Monochrome console output without chalk', }, maxErrorLength: { + key: 'max-error-length', isValueType: true, isRequired: true, description: 'Specify how many characters each error should display. Default 200', @@ -69,16 +72,12 @@ const _RnvTaskOptions = { examples: ['--packageManager yarn', '--packageManager npm'], }, npxMode: { + key: 'npx-mode', description: 'Ensures you can use local npx rnv version after the command is done', }, unlinked: { description: 'Force engines to be loaded from node_modules rather than locally', }, - sourceAppConfigID: { - isValueType: true, - isRequired: true, - description: 'name of source appConfig folder to copy from', - }, configName: { isValueType: true, isRequired: true, @@ -154,6 +153,11 @@ const _RnvTaskOptions = { description: 'Run in a hosted environment (skip budleAssets)', }, // ENGINE-CORE -------------------------------- + sourceAppConfigID: { + isValueType: true, + isRequired: true, + description: 'name of source appConfig folder to copy from', + }, gitEnabled: { description: 'Enable git in your newly created project', isValueType: true, diff --git a/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts index 8582d63a49..9f2d6dfc42 100644 --- a/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts @@ -7,20 +7,23 @@ import { processChdirToProject, } from '../questionHelpers'; import { NewProjectData } from '../types'; -import inquiryAppConfigs from '../questions/appConfigs'; -import inquiryBootstrapQuestions from '../questions/bootstrapQuestions'; -import inquiryGit from '../questions/confirmGit'; -import inquiryIsRenativeProject from '../questions/isRenativeProject'; -import inquiryHasNodeModules from '../questions/hasNodeModules'; -import inquiryProjectName from '../questions/projectName'; -import inquiryWorkspace from '../questions/workspace'; -import inquirySupportedPlatforms from '../questions/supportedPlatforms'; -import inquiryAppTitle from '../questions/appTitle'; -import inquiryAppID from '../questions/appID'; -import inquiryAppVersion from '../questions/projectVersion'; -import inquiryInstallTemplate from '../questions/installTemplate'; -import inquiryApplyTemplate from '../questions/applyTemplate'; -import inquiryBookmarkTemplate from '../questions/bookmarkTemplate'; +import appConfigs from '../questions/appConfigs'; +import bootstrapQuestions from '../questions/bootstrapQuestions'; +import confirmGit from '../questions/confirmGit'; +import isRenativeProject from '../questions/isRenativeProject'; +import hasNodeModules from '../questions/hasNodeModules'; +import projectName from '../questions/projectName'; +import workspace from '../questions/workspace'; +import supportedPlatforms from '../questions/supportedPlatforms'; +import appTitle from '../questions/appTitle'; +import appID from '../questions/appID'; +import appVersion from '../questions/appVersion'; +import installTemplate from '../questions/installTemplate'; +import applyTemplate from '../questions/applyTemplate'; +import bookmarkTemplate from '../questions/bookmarkTemplate'; +import configTemplates from '../questions/configTemplates'; +import projectFolder from '../questions/projectFolder'; +import installProject from '../questions/installProject'; jest.mock('@rnv/core'); jest.mock('lodash/set'); @@ -32,14 +35,18 @@ jest.mock('../questions/installTemplate'); jest.mock('../questions/applyTemplate'); jest.mock('../questions/bookmarkTemplate'); jest.mock('../questions/appID'); -jest.mock('../questions/projectVersion'); +jest.mock('../questions/appVersion'); jest.mock('../questions/workspace'); jest.mock('../questions/hasNodeModules'); jest.mock('../questions/isRenativeProject'); jest.mock('../questions/projectName'); jest.mock('../questions/supportedPlatforms'); jest.mock('../questions/confirmGit'); +jest.mock('../questions/configTemplates'); +jest.mock('../questions/projectFolder'); +jest.mock('../questions/installProject'); jest.mock('../questionHelpers'); +jest.mock('../questions/appConfigs'); beforeEach(() => { createRnvContext(); @@ -66,6 +73,7 @@ test('Execute task.rnv.new', async () => { renativeConfig: {}, packageJson: {}, }, + configTemplates: {}, template: { renativeTemplateConfig: {}, renativeConfig: {}, @@ -78,22 +86,24 @@ test('Execute task.rnv.new', async () => { // THEN expect(result).toEqual(true); expect(initNewProject).toHaveBeenCalled(); - expect(inquiryProjectName).toHaveBeenCalledWith(payload); + expect(projectName).toHaveBeenCalledWith(payload); expect(processChdirToProject).toHaveBeenCalled(); - expect(inquiryIsRenativeProject).toHaveBeenCalledWith(payload); - expect(inquiryHasNodeModules).toHaveBeenCalledWith(payload); - expect(inquiryInstallTemplate).toHaveBeenCalledWith(payload); - expect(inquiryApplyTemplate).toHaveBeenCalledWith(payload); + expect(isRenativeProject).toHaveBeenCalledWith(payload); + expect(hasNodeModules).toHaveBeenCalledWith(payload); + expect(installTemplate).toHaveBeenCalledWith(payload); + expect(applyTemplate).toHaveBeenCalledWith(payload); expect(saveProgressIntoProjectConfig).toHaveBeenCalledWith(payload); - expect(inquiryAppTitle).toHaveBeenCalledWith(payload); - expect(inquiryAppID).toHaveBeenCalledWith(payload); - expect(inquiryAppVersion).toHaveBeenCalledWith(payload); - expect(saveProgressIntoProjectConfig).toHaveBeenCalledWith(payload); - expect(inquiryWorkspace).toHaveBeenCalledWith(payload); - expect(inquirySupportedPlatforms).toHaveBeenCalledWith(payload); - expect(inquiryBootstrapQuestions).toHaveBeenCalledWith(payload); - expect(inquiryGit).toHaveBeenCalledWith(payload); - expect(inquiryBookmarkTemplate).toHaveBeenCalledWith(payload); - expect(inquiryAppConfigs).toHaveBeenCalledWith(payload); + expect(appTitle).toHaveBeenCalledWith(payload); + expect(appID).toHaveBeenCalledWith(payload); + expect(appVersion).toHaveBeenCalledWith(payload); + expect(workspace).toHaveBeenCalledWith(payload); + expect(supportedPlatforms).toHaveBeenCalledWith(payload); + expect(bootstrapQuestions).toHaveBeenCalledWith(payload); + expect(confirmGit).toHaveBeenCalledWith(payload); + expect(bookmarkTemplate).toHaveBeenCalledWith(payload); + expect(appConfigs).toHaveBeenCalledWith(payload); expect(telemetryNewProject).toHaveBeenCalledWith(payload); + expect(configTemplates).toHaveBeenCalled(); + expect(projectFolder).toHaveBeenCalled(); + expect(installProject).toHaveBeenCalled(); }); diff --git a/packages/engine-core/src/tasks/bootstrap/questions/projectVersion.ts b/packages/engine-core/src/tasks/bootstrap/questions/appVersion.ts similarity index 100% rename from packages/engine-core/src/tasks/bootstrap/questions/projectVersion.ts rename to packages/engine-core/src/tasks/bootstrap/questions/appVersion.ts diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index 2f94b3f8ea..eac5d5c49b 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -18,7 +18,7 @@ import inquiryWorkspace from './questions/workspace'; import inquirySupportedPlatforms from './questions/supportedPlatforms'; import inquiryAppTitle from './questions/appTitle'; import inquiryAppID from './questions/appID'; -import inquiryAppVersion from './questions/projectVersion'; +import inquiryAppVersion from './questions/appVersion'; import inquiryInstallTemplate from './questions/installTemplate'; import inquiryApplyTemplate from './questions/applyTemplate'; import inquiryBookmarkTemplate from './questions/bookmarkTemplate'; diff --git a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts index 292601453b..f6fb9d791e 100644 --- a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts +++ b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts @@ -38,6 +38,10 @@ describe('taskStart', () => { // GIVEN const ctx = getContext(); ctx.platform = 'tvos'; + ctx.runtime.runtimeExtraProps = { + reactNativePackageName: 'MOCKED_NAME', + reactNativeMetroConfigName: 'MOCKED_CONFIG', + }; jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); // WHEN await taskStart.fn?.(ctx, undefined, undefined); @@ -46,7 +50,7 @@ describe('taskStart', () => { expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: true, customCliPath: 'MOCKED_PATH/local-cli/cli.js', - metroConfigName: 'metro.config.js', + metroConfigName: 'MOCKED_CONFIG', }); }); @@ -54,6 +58,10 @@ describe('taskStart', () => { // GIVEN const ctx = getContext(); ctx.platform = 'tvos'; + ctx.runtime.runtimeExtraProps = { + reactNativePackageName: 'MOCKED_NAME', + reactNativeMetroConfigName: 'MOCKED_CONFIG', + }; jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); // WHEN await taskStart.fn?.(ctx, 'parent', undefined); @@ -61,7 +69,7 @@ describe('taskStart', () => { expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: false, customCliPath: 'MOCKED_PATH/local-cli/cli.js', - metroConfigName: 'metro.config.js', + metroConfigName: 'MOCKED_CONFIG', }); }); diff --git a/packages/sdk-react-native/src/tasks/taskStart.ts b/packages/sdk-react-native/src/tasks/taskStart.ts index 95c0ccd06a..b0b0155958 100644 --- a/packages/sdk-react-native/src/tasks/taskStart.ts +++ b/packages/sdk-react-native/src/tasks/taskStart.ts @@ -33,7 +33,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { if (reactNativePackageName) { customCliPath = `${doResolve(reactNativePackageName)}/local-cli/cli.js`; } - if (metroConfigName) { + if (reactNativeMetroConfigName) { metroConfigName = reactNativeMetroConfigName; } return startReactNative({ waitForBundler: !parentTask, customCliPath, metroConfigName }); From 9f7e2a49f71f60c5fd42ced12ec6e5cbaad5235e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 02:32:43 +0100 Subject: [PATCH 106/175] bootstrap fixes --- .../src/tasks/bootstrap/questions/appConfigs.ts | 2 +- packages/engine-core/src/tasks/bootstrap/taskNew.ts | 1 + packages/template-starter/src/app/index.tsx | 10 +++++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/engine-core/src/tasks/bootstrap/questions/appConfigs.ts b/packages/engine-core/src/tasks/bootstrap/questions/appConfigs.ts index fd3066b34d..477d0761ab 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/appConfigs.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/appConfigs.ts @@ -24,7 +24,7 @@ const Question = async (data: NewProjectData): Promise => { appConfig.common = appConfig.common || {}; appConfig.common.title = inputs.appTitle; appConfig.common.id = inputs.appID; - appConfig.common.description = `My awesome ${inputs.appTitle} app!`; + appConfig.common.description = `This is ${inputs.appTitle} app!`; logInfo( `Updating appConfig ${chalk().bold(appConfigID)} with title: ${chalk().bold( inputs.appTitle diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index eac5d5c49b..0ec6958e1e 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -84,6 +84,7 @@ const Task: RnvTask = { description: 'Create new ReNative project', fn, task: RnvTaskName.new, + // options: [{ key: 'template', description: 'Template to use' }], isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/template-starter/src/app/index.tsx b/packages/template-starter/src/app/index.tsx index 452d2f10d2..bdc00fe107 100644 --- a/packages/template-starter/src/app/index.tsx +++ b/packages/template-starter/src/app/index.tsx @@ -15,10 +15,12 @@ const AppThemed = () => { const [pixelRatio, setPixelRatio] = useState(1); const [fontScale, setFontScale] = useState(1); + const [isClient, setIsClient] = useState(false); useEffect(() => { setPixelRatio(PixelRatio.get()); setFontScale(PixelRatio.getFontScale()); + setIsClient(true); }, []); return ( @@ -39,9 +41,11 @@ const AppThemed = () => { v {packageJson.version} - - {`platform: ${Api.platform}, factor: ${Api.formFactor}, engine: ${Api.engine}`} - + {isClient ? ( + + {`platform: ${Api.platform}, factor: ${Api.formFactor}, engine: ${Api.engine}`} + + ) : null} {`hermes: ${ typeof HermesInternal === 'object' && HermesInternal !== null ? 'yes' : 'no' }`} From 51cd2f229c9a49cffc032c81eacabd589f8be28b Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 02:32:54 +0100 Subject: [PATCH 107/175] upgrade commander --- packages/cli/package.json | 2 +- packages/cli/src/index.ts | 13 +++++----- packages/core/src/context/defaults.ts | 3 +++ packages/core/src/context/types.ts | 1 + packages/core/src/tasks/index.ts | 3 ++- yarn.lock | 36 ++++++++++++++++++++++++--- 6 files changed, 46 insertions(+), 12 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 5fefa64177..4b5f062232 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "chalk": "4.1.0", - "commander": "^6.2.0", + "commander": "12.0.0", "inquirer": "8.2.0", "@rnv/sdk-telemetry": "1.0.0-rc.12", "@rnv/engine-core": "1.0.0-rc.12" diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index b08cf2591b..c0d643c195 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,4 +1,4 @@ -import program from 'commander'; +import { program } from 'commander'; import fs from 'fs'; import path from 'path'; import { @@ -69,11 +69,11 @@ export const run = ({ RNV_HOME_DIR }: { RNV_HOME_DIR?: string }) => { // This looks weird but commander default help is actual function. // if you pass --help it will override it with undefined // So we need to check if it's not a function to output help - if (!program.help) { - //program.outputHelp(); - // Let's use alternative name for this flag - program.isHelpInvoked = true; - } + // if (!program.help) { + // //program.outputHelp(); + // // Let's use alternative name for this flag + // program.isHelpInvoked = true; + // } // If the first argument is a flag, then the subCommand is missing // this occurs when rnv has to execute unknown commands (ie intergration commands) @@ -81,7 +81,6 @@ export const run = ({ RNV_HOME_DIR }: { RNV_HOME_DIR?: string }) => { if (cmdOption && (cmdOption.startsWith('--') || cmdOption.startsWith('-'))) { cmdOption = ''; } - executeRnv({ cmd: cmdValue, subCmd: cmdOption, diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index d50ba24d5c..aae2d1dcef 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -90,6 +90,9 @@ export const generateContextDefaults = (): RnvContext => ({ allowUnknownOption() { //NOOP }, + showHelpAfterError() { + //NOOP + }, }, buildConfig: {}, command: '', diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index bc1e485425..50fe25ccb8 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -33,6 +33,7 @@ export type RnvContextProgram = ParamKeys void; parse?: (arg: string[]) => void; allowUnknownOption: (p: boolean) => void; + showHelpAfterError: () => void; outputHelp: () => void; isHelpInvoked?: boolean; }; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 0d6003105f..4c47a10ab7 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -382,8 +382,9 @@ const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { task.options.forEach((opt) => { c.program.option?.(generateStringFromTaskOption(opt), opt.description); }); - c.program.parse?.(process.argv); } + c.program.showHelpAfterError(); + c.program.parse?.(process.argv); }; const _selectPlatform = async (c: RnvContext, suitableEngines: Array, task: string) => { diff --git a/yarn.lock b/yarn.lock index 41b5326ae2..2fdc495e34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8111,6 +8111,11 @@ command-exists@1.2.9, command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== +commander@12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz#b929db6df8546080adfd004ab215ed48cf6f2592" + integrity sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA== + "commander@^10.0.0 ": version "10.0.1" resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" @@ -19831,7 +19836,16 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -19919,7 +19933,7 @@ stringify-object@^3.2.1, stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -19933,6 +19947,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -21958,7 +21979,16 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@7.0.0, wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@7.0.0, wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== From 6ae73d2aa8ad2771898666cd58c312c3aa1f9372 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 02:48:40 +0100 Subject: [PATCH 108/175] refactor program options access after upgrade --- __mocks__/@rnv/core.ts | 2 +- packages/cli/src/index.ts | 6 ++--- packages/cli/src/logger/index.ts | 24 +++++++++---------- packages/cli/src/prompt.ts | 4 ++-- packages/core/src/buildHooks/index.ts | 18 +++++++------- packages/core/src/configs/buildConfig.ts | 2 +- packages/core/src/configs/engines.ts | 2 +- packages/core/src/configs/templates.ts | 2 +- packages/core/src/configs/workspaces.ts | 4 ++-- packages/core/src/context/defaults.ts | 3 +++ packages/core/src/context/index.ts | 4 ++-- packages/core/src/context/runtime.ts | 14 +++++------ packages/core/src/context/types.ts | 3 ++- packages/core/src/engines/index.ts | 13 ++++++---- packages/core/src/platforms/index.ts | 4 ++-- packages/core/src/plugins/index.ts | 6 ++--- packages/core/src/projects/bootstrap.ts | 6 ++--- packages/core/src/projects/npm.ts | 10 ++++---- packages/core/src/projects/version.ts | 8 +++++-- packages/core/src/runner.ts | 2 +- packages/core/src/system/exec.ts | 12 +++++----- packages/core/src/tasks/index.ts | 12 +++++----- packages/engine-core/src/buildSchemes.ts | 6 ++--- .../src/tasks/app/taskAppConfigure.ts | 10 ++++---- .../src/tasks/app/taskAppCreate.ts | 22 ++++++++--------- .../src/tasks/app/taskAppSwitch.ts | 2 +- .../src/tasks/bootstrap/questions/appID.ts | 2 +- .../src/tasks/bootstrap/questions/appTitle.ts | 2 +- .../tasks/bootstrap/questions/appVersion.ts | 2 +- .../bootstrap/questions/bootstrapQuestions.ts | 4 ++-- .../tasks/bootstrap/questions/confirmGit.ts | 2 +- .../bootstrap/questions/installTemplate.ts | 2 +- .../tasks/bootstrap/questions/projectName.ts | 2 +- .../bootstrap/questions/supportedPlatforms.ts | 4 ++-- .../tasks/bootstrap/questions/workspace.ts | 2 +- .../engine-core/src/tasks/crypto/common.ts | 2 +- .../src/tasks/crypto/taskCryptoDecrypt.ts | 6 ++--- .../src/tasks/crypto/taskCryptoEncrypt.ts | 4 ++-- .../tasks/global/__tests__/taskClean.test.ts | 2 +- .../engine-core/src/tasks/global/taskClean.ts | 2 +- .../src/tasks/global/taskInstall.ts | 4 ++-- .../src/tasks/hooks/taskHooksRun.ts | 2 +- .../engine-core/src/tasks/linking/linker.ts | 4 ++-- .../tasks/platform/taskPlatformConfigure.ts | 6 ++--- .../src/tasks/project/taskProjectConfigure.ts | 6 ++--- .../src/tasks/template/taskTemplateApply.ts | 10 ++++---- packages/engine-lightning/src/sdk/runner.ts | 2 +- .../src/tasks/taskConfigure.ts | 2 +- .../engine-lightning/src/tasks/taskRun.ts | 2 +- .../src/tasks/taskConfigure.ts | 2 +- .../engine-rn-electron/src/tasks/taskRun.ts | 2 +- .../engine-rn-electron/src/tasks/taskStart.ts | 2 +- packages/engine-rn-next/src/sdk/runner.ts | 2 +- .../engine-rn-next/src/tasks/taskConfigure.ts | 2 +- .../engine-rn-next/src/tasks/taskStart.ts | 2 +- .../engine-rn-web/src/tasks/taskConfigure.ts | 2 +- packages/engine-rn-web/src/tasks/taskRun.ts | 10 ++++---- packages/engine-rn-web/src/tasks/taskStart.ts | 2 +- packages/engine-rn-windows/src/sdk/index.ts | 4 ++-- .../src/tasks/taskConfigure.ts | 2 +- .../engine-rn-windows/src/tasks/taskRun.ts | 2 +- .../src/tasks/taskDockerDeploy.ts | 2 +- .../src/tasks/taskDockerExport.ts | 2 +- .../src/tasks/taskSingleCommand.ts | 2 +- .../src/tasks/taskStarterHello.ts | 2 +- .../sdk-android/src/__tests__/runner.test.ts | 18 +++++++------- packages/sdk-android/src/deviceManager.ts | 12 ++++------ packages/sdk-android/src/installer.ts | 4 ++-- packages/sdk-android/src/runner.ts | 10 ++++---- .../sdk-android/src/tasks/taskConfigure.ts | 2 +- packages/sdk-android/src/tasks/taskRun.ts | 4 ++-- packages/sdk-apple/src/deviceManager.ts | 4 +--- packages/sdk-apple/src/fastlane.ts | 6 ++--- packages/sdk-apple/src/runner.ts | 24 +++++++++---------- packages/sdk-apple/src/tasks/taskConfigure.ts | 2 +- .../src/tasks/taskCryptoInstallCerts.ts | 2 +- packages/sdk-apple/src/tasks/taskRun.ts | 4 ++-- packages/sdk-apple/src/xcodeParser.ts | 9 +++---- packages/sdk-react-native/src/iosRunner.ts | 10 ++++---- packages/sdk-react-native/src/metroRunner.ts | 4 ++-- .../src/tasks/__tests__/taskStart.test.ts | 2 +- .../sdk-react-native/src/tasks/taskStart.ts | 2 +- packages/sdk-telemetry/src/index.ts | 4 ++-- packages/sdk-tizen/src/deviceManager.ts | 4 ++-- packages/sdk-tizen/src/installer.ts | 4 ++-- packages/sdk-tizen/src/runner.ts | 6 ++--- packages/sdk-utils/src/ipUtils.ts | 2 +- packages/sdk-webos/src/deviceManager.ts | 8 +++---- packages/sdk-webos/src/installer.ts | 4 ++-- packages/sdk-webos/src/runner.ts | 4 ++-- packages/sdk-webpack/src/index.ts | 8 +++---- 91 files changed, 246 insertions(+), 236 deletions(-) diff --git a/__mocks__/@rnv/core.ts b/__mocks__/@rnv/core.ts index 5fd38ecb17..cb6107a314 100644 --- a/__mocks__/@rnv/core.ts +++ b/__mocks__/@rnv/core.ts @@ -103,7 +103,7 @@ const generateContextDefaults = (ctx?: Context) => { buildConfig: {}, command: '', subCommand: '', - platform: ctx?.program.platform ?? '', + platform: ctx?.program.opts().platform ?? '', process: {}, //========== _renativePluginCache: {}, diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index c0d643c195..db6ac66527 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -123,9 +123,9 @@ export const executeRnv = async ({ RNV_HOME_DIR?: string; }) => { // set mono and ci if json is enabled - if (program.json) { - program.mono = true; - program.ci = true; + if (program.opts().json) { + program.opts().mono = true; + program.opts().ci = true; } createRnvApi({ spinner, prompt, analytics: Telemetry, logger, getConfigProp, doResolve }); diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index 34592a3109..db050e9d04 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -41,12 +41,12 @@ export const logInitialize = () => { // cnf(); const ctx = getContext(); - _isInfoEnabled = !!ctx.program.info; - _jsonOnly = !!ctx.program.json; - _infoFilter = ctx.program.info?.split?.(','); + _isInfoEnabled = !!ctx.program.opts().info; + _jsonOnly = !!ctx.program.opts().json; + _infoFilter = ctx.program.opts().info?.split?.(','); // _analytics = analytics; - if (ctx.program.mono) { + if (ctx.program.opts().mono) { currentChalk = _chalkMono; chalkBlue = _chalkMono; } @@ -131,10 +131,10 @@ export function stripAnsi(string: string) { // // _c = c; // // if (!ctx.timeStart) ctx.timeStart = new Date(); // _currentProcess = c.process; -// _isInfoEnabled = !!c.program.info; -// _jsonOnly = !!c.program.json; -// _infoFilter = c.program.info?.split?.(','); -// // _isMono = c.program.mono; +// _isInfoEnabled = !!c.program.opts().info; +// _jsonOnly = !!c.program.opts().json; +// _infoFilter = c.program.opts().info?.split?.(','); +// // _isMono = c.program.opts().mono; // _analytics = analytics; // // if (_isMono) { // // currentChalk = _chalkMono; @@ -294,11 +294,11 @@ export const logSummary = (opts?: { header?: string; headerStyle?: 'success' | ' if (ctx.runtime?.target) { str += printIntoBox(`Target (-t): ${_highlightColor(ctx.runtime?.target)}`); } - if (ctx.program?.reset) { - str += printIntoBox(`Reset Project (-r): ${_highlightColor(!!ctx.program?.reset)}`); + if (ctx.program?.opts()?.reset) { + str += printIntoBox(`Reset Project (-r): ${_highlightColor(!!ctx.program?.opts()?.reset)}`); } - if (ctx.program?.resetHard) { - str += printIntoBox(`Reset Project and Assets (-R): ${_highlightColor(!!ctx.program?.resetHard)}`); + if (ctx.program?.opts()?.resetHard) { + str += printIntoBox(`Reset Project and Assets (-R): ${_highlightColor(!!ctx.program?.opts()?.resetHard)}`); } if (ctx.runtime?.supportedPlatforms?.length) { const plats = ctx.runtime.supportedPlatforms.map( diff --git a/packages/cli/src/prompt.ts b/packages/cli/src/prompt.ts index ef19707be5..a4b3bf83b0 100644 --- a/packages/cli/src/prompt.ts +++ b/packages/cli/src/prompt.ts @@ -13,7 +13,7 @@ import { export const inquirerPrompt = async (params: PromptParams): Promise> => { const c = getContext(); - if (c.program?.yes) { + if (c.program?.opts()?.yes) { const key = params.name || params.type; if (params.type === 'confirm') { @@ -28,7 +28,7 @@ export const inquirerPrompt = async (params: PromptParams): Promise { const c = getContext(); - logDebug('executePipe', c?.program?.json ? key : `('${key}')`); + logDebug('executePipe', c?.program?.opts()?.json ? key : `('${key}')`); await buildHooks(); @@ -31,10 +31,10 @@ export const buildHooks = async () => { const enableHookRebuild = getConfigProp('enableHookRebuild'); let shouldBuildHook = - c.program.reset || - c.program.resetHard || - c.program.resetAssets || - c.program.hooks || + c.program.opts().reset || + c.program.opts().resetHard || + c.program.opts().resetAssets || + c.program.opts().hooks || !fsExistsSync(c.paths.buildHooks.dist.dir) || enableHookRebuild === true || c.runtime.forceBuildHookRebuild; @@ -42,7 +42,7 @@ export const buildHooks = async () => { if ( (!fsExistsSync(c.paths.buildHooks.src.index) && !fsExistsSync(c.paths.buildHooks.src.indexTs) && - c.program.ci) || + c.program.opts().ci) || c.runtime.skipBuildHooks ) { logInfo('No build hooks found and in --ci mode. SKIPPING'); @@ -52,13 +52,13 @@ export const buildHooks = async () => { const hasNoIndex = !fsExistsSync(c.paths.buildHooks.src.index) && !fsExistsSync(c.paths.buildHooks.src.indexTs); if (hasNoIndex) { - if (c.program.ci) { + if (c.program.opts().ci) { c.runtime.skipBuildHooks = true; return; } let confirmed; - if (c.program.yes) { + if (c.program.opts().yes) { confirmed = true; } else { const { confirm } = await inquirerPrompt({ @@ -98,7 +98,7 @@ export const buildHooks = async () => { entryPoints: [indexPath], bundle: true, platform: 'node', - logLimit: c.program.json ? 0 : 10, + logLimit: c.program.opts().json ? 0 : 10, external: [ '@rnv/core', // exclude rnv core from build ...Object.keys(c.files.project.package.dependencies || {}), diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 4936eb46d9..6b39f029db 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -193,7 +193,7 @@ export const generateBuildConfig = () => { }; const _checkBuildSchemeIfEngine = (c: RnvContext) => { - const { scheme } = c.program; + const { scheme } = c.program.opts(); if (!c.platform || !scheme) return; const platform = c.buildConfig?.platforms?.[c.platform]; diff --git a/packages/core/src/configs/engines.ts b/packages/core/src/configs/engines.ts index bab69f6ae9..dc7d6bb8b6 100644 --- a/packages/core/src/configs/engines.ts +++ b/packages/core/src/configs/engines.ts @@ -39,7 +39,7 @@ export const getEngineTemplateByPlatform = (platform: RnvPlatform): RnvEngineTem const mergedEngineConfigs = _getMergedEngineConfigs(c); if (!platform) return null; const engineId = - c.program.engine || + c.program.opts().engine || getConfigProp('engine') || //Adding this as default engines moved from platforms into platformTemplates c.files.rnvConfigTemplates.config?.platformTemplates?.[platform]?.engine; diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts index 7ce172ed97..c07f6bd8f3 100644 --- a/packages/core/src/configs/templates.ts +++ b/packages/core/src/configs/templates.ts @@ -6,7 +6,7 @@ import { writeRenativeConfigFile } from './utils'; export const checkIfTemplateConfigured = async () => { logDefault('checkIfTemplateConfigured'); const c = getContext(); - if (c.program.skipDependencyCheck || c.buildConfig?.isTemplate) return true; + if (c.program.opts().skipDependencyCheck || c.buildConfig?.isTemplate) return true; if (!c.buildConfig.templates) { logWarning( `Your ${chalk().bold(c.paths.project.config)} does not contain ${chalk().bold( diff --git a/packages/core/src/configs/workspaces.ts b/packages/core/src/configs/workspaces.ts index 8f2c4e5299..52b0ddda63 100644 --- a/packages/core/src/configs/workspaces.ts +++ b/packages/core/src/configs/workspaces.ts @@ -50,9 +50,9 @@ export const getWorkspaceDirPath = async (c: RnvContext) => { logInfo( `Found workspace id ${ws} and compatible directory ${wsDir}. Your ${c.paths.dotRnv.configWorkspaces} has been updated.` ); - } else if (!c.runtime.isWSConfirmed || c.program.ci === true) { + } else if (!c.runtime.isWSConfirmed || c.program.opts().ci === true) { let confirm = true; - if (c.program.ci !== true) { + if (c.program.opts().ci !== true) { const { conf } = await inquirerPrompt({ name: 'conf', type: 'confirm', diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index aae2d1dcef..462f7b4d0f 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -81,6 +81,9 @@ export const generateContextDefaults = (): RnvContext => ({ option: () => { //NOOP }, + opts: () => { + return {}; + }, parse: () => { //NOOP }, diff --git a/packages/core/src/context/index.ts b/packages/core/src/context/index.ts index 51df2733d2..bf71b89962 100644 --- a/packages/core/src/context/index.ts +++ b/packages/core/src/context/index.ts @@ -128,7 +128,7 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef // TODO: generate solution root paths // project ------------------ - generateContextPaths(c.paths.project, c.paths.user.currentDir, c.program.configName); + generateContextPaths(c.paths.project, c.paths.user.currentDir, c.program.opts().configName); c.paths.buildHooks.dir = path.join(c.paths.project.dir, 'buildHooks'); c.paths.buildHooks.src.dir = path.join(c.paths.buildHooks.dir, 'src'); c.paths.buildHooks.dist.dir = path.join(c.paths.buildHooks.dir, 'dist'); @@ -164,7 +164,7 @@ export const populateContextPaths = (c: RnvContext, RNV_HOME_DIR: string | undef // ); // runtime - c.platform = c.program.platform; + c.platform = c.program.opts().platform; populateLinkingInfo(c); }; diff --git a/packages/core/src/context/runtime.ts b/packages/core/src/context/runtime.ts index 68d154a996..298c138105 100644 --- a/packages/core/src/context/runtime.ts +++ b/packages/core/src/context/runtime.ts @@ -31,17 +31,17 @@ export const configureRuntimeDefaults = async () => { const defaultHost = isSystemWin ? '127.0.0.1' : '0.0.0.0'; - const portString = c.program.port || port || c.runtime.currentPlatform?.defaultPort; // PLATFORMS[c.platform]?.defaultPort; + const portString = c.program.opts().port || port || c.runtime.currentPlatform?.defaultPort; // PLATFORMS[c.platform]?.defaultPort; const portOffset = c.buildConfig?.defaults?.portOffset || 0; c.runtime.port = Number(portString) + portOffset; - if (c.program.target !== true) { - c.runtime.target = c.program.target || defaultTarget; - } else c.runtime.isTargetTrue = c.program.target; - c.runtime.scheme = c.program.scheme || 'debug'; - c.runtime.localhost = c.program.hostIp || defaultHost; + if (c.program.opts().target !== true) { + c.runtime.target = c.program.opts().target || defaultTarget; + } else c.runtime.isTargetTrue = c.program.opts().target; + c.runtime.scheme = c.program.opts().scheme || 'debug'; + c.runtime.localhost = c.program.opts().hostIp || defaultHost; c.runtime.timestamp = c.runtime.timestamp || Date.now(); c.configPropsInjects = c.configPropsInjects || []; c.systemPropsInjects = c.systemPropsInjects || []; @@ -50,7 +50,7 @@ export const configureRuntimeDefaults = async () => { generateRuntimePropInjects(); if (c.buildConfig) { c.runtime.bundleAssets = getConfigProp('bundleAssets') || false; - const { hosted } = c.program; + const { hosted } = c.program.opts(); c.runtime.hosted = hosted && c.runtime.currentPlatform?.isWebHosted; if (c.buildConfig.defaults?.supportedPlatforms) { diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 50fe25ccb8..bafcfdf0cd 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -27,9 +27,10 @@ export type CreateContextOptions = { RNV_HOME_DIR?: string; }; -export type RnvContextProgram = ParamKeys & { +export type RnvContextProgram = { args?: string[]; rawArgs?: string[]; + opts: () => ParamKeys; option?: (cmd: string, desc: string) => void; parse?: (arg: string[]) => void; allowUnknownOption: (p: boolean) => void; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 3d5d707bc6..51743a4489 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -90,7 +90,12 @@ export const configureEngines = async (c: RnvContext) => { const devDependencies = c.files.project.package.devDependencies || {}; c.files.project.package.devDependencies = devDependencies; let needsPackageUpdate = false; - if (engines && !c.runtime.skipPackageUpdate && !c.program.skipDependencyCheck && !c.program.skipRnvCheck) { + if ( + engines && + !c.runtime.skipPackageUpdate && + !c.program.opts().skipDependencyCheck && + !c.program.opts().skipRnvCheck + ) { Object.keys(engines).forEach((k) => { const engVer = c.buildConfig.engineTemplates?.[k]?.version; if (engVer) { @@ -125,7 +130,7 @@ export const registerMissingPlatformEngines = async (taskInstance?: RnvTask) => if ( !taskInstance || (!taskInstance.isGlobalScope && taskInstance?.platforms?.length === 0) || - c.program.platform === 'all' + c.program.opts().platform === 'all' ) { const registerEngineList: Array> = []; c.buildConfig.defaults?.supportedPlatforms?.forEach((platform) => { @@ -221,7 +226,7 @@ export const loadEnginePackageDeps = async (engineConfigs: Array { @@ -444,7 +449,7 @@ ${enginesToInstall.map((v) => `> ${v.key}@${v.version}`).join('\n')} }; const _resolvePkgPath = (c: RnvContext, packageName: string) => { - if (c.paths.IS_LINKED && !c.program.unlinked && c.paths.rnv.dir !== '') { + if (c.paths.IS_LINKED && !c.program.opts().unlinked && c.paths.rnv.dir !== '') { // In the instances of running linked rnv instead of installed one load local packages try { let pkgPathLocal = require.resolve(packageName, { paths: [path.join(c.paths.rnv.dir, '..')] }); diff --git a/packages/core/src/platforms/index.ts b/packages/core/src/platforms/index.ts index 03825f1654..9820465a19 100644 --- a/packages/core/src/platforms/index.ts +++ b/packages/core/src/platforms/index.ts @@ -96,7 +96,7 @@ const printCurrentPlatform = (platform: RnvPlatform) => { export const isPlatformSupported = async (isGlobalScope = false) => { const c = getContext(); - if (c.platform && c.program.platform !== true && isGlobalScope) { + if (c.platform && c.program.opts().platform !== true && isGlobalScope) { printCurrentPlatform(c.platform); return c.platform; } @@ -111,7 +111,7 @@ export const isPlatformSupported = async (isGlobalScope = false) => { if (!platformsAsObj) platformsAsObj = c.runtime.availablePlatforms; const opts = generateOptions(platformsAsObj); - if (!c.platform || c.program.platform === true || !c.runtime.availablePlatforms?.includes?.(c.platform)) { + if (!c.platform || c.program.opts().platform === true || !c.runtime.availablePlatforms?.includes?.(c.platform)) { const { platform } = await inquirerPrompt({ name: 'platform', type: 'list', diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 1d714fbade..01f2890541 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -169,7 +169,7 @@ export const configurePlugins = async () => { const c = getContext(); - if (c.program.skipDependencyCheck) return true; + if (c.program.opts().skipDependencyCheck) return true; if (!c.files.project.package.dependencies) { c.files.project.package.dependencies = {}; @@ -290,7 +290,7 @@ export const configurePlugins = async () => { if (isTemplate) return true; // c.runtime.skipPackageUpdate only reflects rnv version mismatch. should not prevent updating other deps - if (hasPackageChanged /*! c.runtime.skipPackageUpdate */ && !c.program.skipDependencyCheck) { + if (hasPackageChanged /*! c.runtime.skipPackageUpdate */ && !c.program.opts().skipDependencyCheck) { _updatePackage(c, { dependencies: newDeps, devDependencies: newDevDeps }); } @@ -759,7 +759,7 @@ export const checkForPluginDependencies = async (postInjectHandler?: AsyncCallba if (Object.keys(toAdd).length) { // ask the user let install = false; - if (!c.program.ci) { + if (!c.program.opts().ci) { const answer = await inquirerPrompt({ type: 'confirm', message: `Install ${Object.keys(toAdd).join(', ')}?`, diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts index 3184374630..f3d3a466b4 100644 --- a/packages/core/src/projects/bootstrap.ts +++ b/packages/core/src/projects/bootstrap.ts @@ -13,7 +13,7 @@ export const checkAndBootstrapIfRequired = async () => { logDefault('checkAndBootstrapIfRequired'); const c = getContext(); - const template: string = c.program?.template; + const template: string = c.program?.opts().template; if (!c.paths.project.configExists && template) { await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${template}`, { cwd: c.paths.project.dir, @@ -27,7 +27,7 @@ export const checkAndBootstrapIfRequired = async () => { c.paths.template.configTemplate = path.join(templatePath, RnvFileName.renativeTemplate); const templateObj = readObjectSync(c.paths.template.configTemplate); - const appConfigPath = path.join(c.paths.project.appConfigsDir, c.program.appConfigID, 'renative.json'); + const appConfigPath = path.join(c.paths.project.appConfigsDir, c.program.opts().appConfigID, 'renative.json'); //TODO: Investigate whether we really need to support this: supportedPlatforms inside appconfig const appConfigObj = readObjectSync(appConfigPath); const supportedPlatforms = appConfigObj?.defaults?.supportedPlatforms || []; @@ -151,7 +151,7 @@ export const checkAndBootstrapIfRequired = async () => { await installPackageDependencies(); - if (c.program.npxMode) { + if (c.program.opts().npxMode) { return; } diff --git a/packages/core/src/projects/npm.ts b/packages/core/src/projects/npm.ts index eb8efb5522..406cc5137c 100644 --- a/packages/core/src/projects/npm.ts +++ b/packages/core/src/projects/npm.ts @@ -142,15 +142,17 @@ export const installPackageDependencies = async (failOnError = false) => { "You have a yarn.lock file but you don't have yarn installed. Install it or delete yarn.lock" ); command = yarnLockExists ? 'yarn' : 'npm install'; - } else if (c.program.packageManager) { + } else if (c.program.opts().packageManager) { // no lock file check cli option - if (['yarn', 'npm'].includes(c.program.packageManager)) { - command = c.program.packageManager === 'yarn' ? 'yarn' : 'npm install'; + if (['yarn', 'npm'].includes(c.program.opts().packageManager)) { + command = c.program.opts().packageManager === 'yarn' ? 'yarn' : 'npm install'; if (command === 'yarn' && !isYarnInstalled()) throw new Error("You specified yarn as packageManager but it's not installed"); } else { throw new Error( - `Unsupported package manager ${c.program.packageManager}. Only yarn and npm are supported at the moment.` + `Unsupported package manager ${ + c.program.opts().packageManager + }. Only yarn and npm are supported at the moment.` ); } } else { diff --git a/packages/core/src/projects/version.ts b/packages/core/src/projects/version.ts index f91a2799c1..3bfe936d01 100644 --- a/packages/core/src/projects/version.ts +++ b/packages/core/src/projects/version.ts @@ -6,7 +6,11 @@ import { upgradeProjectDependencies } from '../configs/configProject'; export const versionCheck = async (c: RnvContext) => { logDefault('versionCheck'); - if (c.runtime.versionCheckCompleted || c.files.project?.config?.skipAutoUpdate || c.program.skipDependencyCheck) { + if ( + c.runtime.versionCheckCompleted || + c.files.project?.config?.skipAutoUpdate || + c.program.opts().skipDependencyCheck + ) { return true; } c.runtime.rnvVersionRunner = c.files.rnvCore?.package?.version || 'unknown'; @@ -19,7 +23,7 @@ export const versionCheck = async (c: RnvContext) => { chalk().grey ); if (c.runtime.rnvVersionRunner && c.runtime.rnvVersionProject) { - if (c.runtime.rnvVersionRunner !== c.runtime.rnvVersionProject && !c.program.skipRnvCheck) { + if (c.runtime.rnvVersionRunner !== c.runtime.rnvVersionProject && !c.program.opts().skipRnvCheck) { const recCmd = chalk().bold(`$ npx ${getCurrentCommand(true)}`); const actionNoUpdate = 'Continue and skip updating package.json'; const actionWithUpdate = 'Continue and update package.json'; diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index 57dea7c977..07964d8396 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -30,7 +30,7 @@ export const executeRnvCore = async () => { await checkAndBootstrapIfRequired(); // TODO: rename to something more meaningful or DEPRECATE entirely - if (c.program.npxMode) { + if (c.program.opts().npxMode) { return; } diff --git a/packages/core/src/system/exec.ts b/packages/core/src/system/exec.ts index bc8a04d6e2..272ec4acea 100755 --- a/packages/core/src/system/exec.ts +++ b/packages/core/src/system/exec.ts @@ -87,8 +87,8 @@ const _execute = (c: RnvContext, command: string | Array, opts: ExecOpti localDir: path.resolve('./node_modules/.bin'), preferLocal: true, all: true, - maxErrorLength: c.program?.maxErrorLength, - mono: c.program?.mono || c.program?.json, + maxErrorLength: c.program?.opts().maxErrorLength, + mono: c.program?.opts().mono || c.program?.opts().json, }; const blue2 = chalk().rgb(50, 50, 255).bold; @@ -96,7 +96,7 @@ const _execute = (c: RnvContext, command: string | Array, opts: ExecOpti const mergedOpts = { ...defaultOpts, ...opts }; const printableEnv = - opts.env && (c.program.info || c.program.printExec) + opts.env && (c.program.opts().info || c.program.opts().printExec) ? Object.keys(opts.env) .map((k) => `${k}=${opts?.env?.[k]}`) .join(' ') @@ -121,7 +121,7 @@ const _execute = (c: RnvContext, command: string | Array, opts: ExecOpti logMessage = replaceOverridesInString(commandAsString, privateParams, privateMask); } - if (c.program.printExec) { + if (c.program.opts().printExec) { let logMsg = printableEnv ? `${chalk().grey(printableEnv)} ${logMessage}` : logMessage; if (opts.cwd) { logMsg = `cd ${opts.cwd} ${chalk().cyan('&&')} ${logMsg}`; @@ -177,7 +177,7 @@ const _execute = (c: RnvContext, command: string | Array, opts: ExecOpti } }; - if (c.program?.info && child?.stdout?.pipe) { + if (c.program?.opts().info && child?.stdout?.pipe) { child.stdout.pipe(process.stdout); } else if (spinner && child?.stdout?.on) { child.stdout.on('data', printLastLine); @@ -584,7 +584,7 @@ export const waitForExecCLI = async ( let attempts = 0; const maxAttempts = 30; const CHECK_INTEVAL = 2000; - const { maxErrorLength } = c.program; + const { maxErrorLength } = c.program.opts(); const spinner = getApi().spinner('Waiting for emulator to boot...').start(''); return new Promise((resolve, reject) => { diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 4c47a10ab7..4621235385 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -324,7 +324,7 @@ export const findSuitableTask = async (specificTask?: string): Promise { const c = getContext(); - if (!c.program.only) { + if (!c.program.opts().only) { return executeTask(task, parentTask, originTask); } return executeTask('configureSoft', parentTask, originTask); @@ -496,7 +496,7 @@ export const executeDependantTask = async ({ alternativeTask?: string; }) => { const ctx = getContext(); - if (!ctx.program.only) { + if (!ctx.program.opts().only) { return executeTask(task, parentTask, originTask); } if (alternativeTask) { @@ -521,8 +521,8 @@ export const shouldSkipTask = (taskKey: string, originRnvTaskName?: string) => { c.runtime.platform = c.platform; if (!tasks) return; - if (c.program.skipTasks?.split) { - const skipTaskArr = c.program.skipTasks.split(','); + if (c.program.opts().skipTasks?.split) { + const skipTaskArr = c.program.opts().skipTasks.split(','); if (skipTaskArr.includes(task)) return true; } @@ -620,7 +620,7 @@ Description: ${taskInstance.description} if (isFirstTask) { c.runtime.forceBuildHookRebuild = !!taskInstance?.forceBuildHookRebuild; } - const inOnlyMode = c.program.only; + const inOnlyMode = c.program.opts().only; const doPipe = !taskInstance.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); if (doPipe) await _executePipe(c, task, 'before'); if (taskInstance.fn) await taskInstance.fn(c, parentTask, originTask); diff --git a/packages/engine-core/src/buildSchemes.ts b/packages/engine-core/src/buildSchemes.ts index 2a3973324a..3a882a6460 100644 --- a/packages/engine-core/src/buildSchemes.ts +++ b/packages/engine-core/src/buildSchemes.ts @@ -4,7 +4,7 @@ import { chalk, getContext, inquirerPrompt, logDefault, logError, logInfo, logWa export const isBuildSchemeSupported = async () => { logDefault('isBuildSchemeSupported'); const c = getContext(); - const { scheme } = c.program; + const { scheme } = c.program.opts(); if (!c.platform) return; @@ -52,8 +52,8 @@ export const isBuildSchemeSupported = async () => { logMessage: 'You need to specify scheme', }); - c.program.scheme = schemeVals[selectedScheme]; - c.runtime.scheme = c.program.scheme; + c.program.opts().scheme = schemeVals[selectedScheme]; + c.runtime.scheme = c.program.opts().scheme; } logInfo(`Current Build Scheme: ${chalk().bold(c.runtime.scheme)}`); return true; diff --git a/packages/engine-core/src/tasks/app/taskAppConfigure.ts b/packages/engine-core/src/tasks/app/taskAppConfigure.ts index eee3f72dce..cb3bc6801a 100644 --- a/packages/engine-core/src/tasks/app/taskAppConfigure.ts +++ b/packages/engine-core/src/tasks/app/taskAppConfigure.ts @@ -41,7 +41,7 @@ const _askUserAboutConfigs = async (c: RnvContext, dir: string, id: string, base logWarning( `AppConfig error - It seems you have a mismatch between appConfig folder name (${dir}) and the id defined in renative.json (${id}). They must match.` ); - if (c.program.ci === true) { + if (c.program.opts().ci === true) { throw new Error('You cannot continue if you set --ci flag. please fix above error first'); } const { choice } = await inquirerPrompt({ @@ -170,7 +170,7 @@ const fn = async (c: RnvContext) => { c.runtime.appId = undefined; } - if (c.program.appConfigID === true || (!c.program.appConfigID && !c.runtime.appId)) { + if (c.program.opts().appConfigID === true || (!c.program.opts().appConfigID && !c.runtime.appId)) { const hasAppConfig = await _findAndSwitchAppConfigDir(c); if (!hasAppConfig) { // await executeTask(c, RnvTaskName.appCreate, RnvTaskName.appConfigure); @@ -178,10 +178,10 @@ const fn = async (c: RnvContext) => { logWarning('No app configs found for this project'); return true; } - } else if (c.program.appConfigID) { - const aid = await matchAppConfigID(c, c.program.appConfigID); + } else if (c.program.opts().appConfigID) { + const aid = await matchAppConfigID(c, c.program.opts().appConfigID); if (!aid) { - logWarning(`Cannot find app config ${chalk().bold(c.program.appConfigID)}`); + logWarning(`Cannot find app config ${chalk().bold(c.program.opts().appConfigID)}`); const hasAppConfig = await _findAndSwitchAppConfigDir(c); if (!hasAppConfig) { // await executeTask(c, RnvTaskName.appCreate, RnvTaskName.appConfigure); diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index a47f6d123f..8f1cbb5d58 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -25,13 +25,13 @@ const fn: RnvTaskFn = async (c) => { let sourcePath: string | undefined; - if (c.program.sourceAppConfigID) { - const sourceAppConfigDirPath = path.join(c.paths.project.appConfigsDir, c.program.sourceAppConfigID); + if (c.program.opts().sourceAppConfigID) { + const sourceAppConfigDirPath = path.join(c.paths.project.appConfigsDir, c.program.opts().sourceAppConfigID); if (fsExistsSync(sourceAppConfigDirPath)) { sourcePath = sourceAppConfigDirPath; } - } else if (c.program.ci) { + } else if (c.program.opts().ci) { if (c.buildConfig.currentTemplate) { const tacPath = doResolve(c.buildConfig.currentTemplate); if (tacPath && fsExistsSync(tacPath)) { @@ -103,8 +103,8 @@ const fn: RnvTaskFn = async (c) => { let destPath; let appConfigId; - if (c.program.appConfigID) { - appConfigId = c.program.appConfigID.toLowerCase(); + if (c.program.opts().appConfigID) { + appConfigId = c.program.opts().appConfigID.toLowerCase(); destPath = path.join(c.paths.project.appConfigsDir, appConfigId); } else { const { confName } = await inquirerPrompt({ @@ -127,9 +127,9 @@ const fn: RnvTaskFn = async (c) => { confObj.common = confObj.common || {}; let appConfigTitle; - if (c.program.title) { - appConfigTitle = c.program.title; - } else if (c.program.ci) { + if (c.program.opts().title) { + appConfigTitle = c.program.opts().title; + } else if (c.program.opts().ci) { // Ignore } else { const { confTitle } = await inquirerPrompt({ @@ -143,9 +143,9 @@ const fn: RnvTaskFn = async (c) => { confObj.common.title = appConfigTitle || confObj.common.title; let bundleId; - if (c.program.id) { - bundleId = c.program.id; - } else if (c.program.ci) { + if (c.program.opts().id) { + bundleId = c.program.opts().id; + } else if (c.program.opts().ci) { // Ignore } else { const { confId } = await inquirerPrompt({ diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index 7d085720fb..c0d66d3030 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -12,7 +12,7 @@ import { configureFonts } from '@rnv/sdk-utils'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { logTask('taskSwitch'); - c.program.appConfigID = true; + c.program.opts().appConfigID = true; await executeTask(RnvTaskName.projectConfigure, RnvTaskName.appSwitch, originTask); diff --git a/packages/engine-core/src/tasks/bootstrap/questions/appID.ts b/packages/engine-core/src/tasks/bootstrap/questions/appID.ts index a62131fc5d..9feeff02b3 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/appID.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/appID.ts @@ -4,7 +4,7 @@ import { validateAndAssign } from '../questionHelpers'; const Question = async (data: NewProjectData): Promise => { const c = getContext(); - const { id, ci } = c.program; + const { id, ci } = c.program.opts(); const { inputs } = data; const validator = (appId: string) => (typeof appId === 'string' && !!appId.match(/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/)) || diff --git a/packages/engine-core/src/tasks/bootstrap/questions/appTitle.ts b/packages/engine-core/src/tasks/bootstrap/questions/appTitle.ts index e6128f7963..e38a274c38 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/appTitle.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/appTitle.ts @@ -4,7 +4,7 @@ import { checkInputValue, validateAndAssign } from '../questionHelpers'; const Question = async (data: NewProjectData) => { const c = getContext(); - const { title, ci } = c.program; + const { title, ci } = c.program.opts(); const { inputs, defaults } = data; const validator = (val: string) => checkInputValue(val) || 'Please enter a title'; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/appVersion.ts b/packages/engine-core/src/tasks/bootstrap/questions/appVersion.ts index d94bbd286d..505ef388bd 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/appVersion.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/appVersion.ts @@ -6,7 +6,7 @@ import { merge } from 'lodash'; const Question = async (data: NewProjectData) => { const c = getContext(); - const { appVersion, ci } = c.program; + const { appVersion, ci } = c.program.opts(); const validator = (version: string) => !!semver.valid(semver.coerce(version)) || 'Please enter a valid semver version (1.0.0, 42.6.7.9.3-alpha, etc.)'; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/bootstrapQuestions.ts b/packages/engine-core/src/tasks/bootstrap/questions/bootstrapQuestions.ts index f4dcc2c939..114260d66d 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/bootstrapQuestions.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/bootstrapQuestions.ts @@ -21,8 +21,8 @@ const Question = async (data: NewProjectData) => { const results: QuestionResults = {}; const providedAnswers: Record = {}; - if (c.program.answer) { - c.program.answer.forEach((a: string) => { + if (c.program.opts().answer) { + c.program.opts().answer.forEach((a: string) => { const key = a.split('=')[0]; let value; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/confirmGit.ts b/packages/engine-core/src/tasks/bootstrap/questions/confirmGit.ts index 6dd7b6c8d2..ed967ef5b2 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/confirmGit.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/confirmGit.ts @@ -13,7 +13,7 @@ import path from 'path'; const Question = async (data: NewProjectData) => { const c = getContext(); - const { gitEnabled, ci } = c.program; + const { gitEnabled, ci } = c.program.opts(); const { inputs } = data; inputs.confirmEnableGit = !!gitEnabled; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts index 4ba0231a23..147469d1c0 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts @@ -34,7 +34,7 @@ const Question = async (data: NewProjectData) => { const noTemplate: TemplateOption = { name: 'No Template (blank project)', value: { type: 'none' } }; const c = getContext(); - const { templateVersion, projectTemplate } = c.program; + const { templateVersion, projectTemplate } = c.program.opts(); const projectTemplates = c.buildConfig.projectTemplates || {}; // c.files.rnvConfigTemplates.config?.projectTemplates || {}; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/projectName.ts b/packages/engine-core/src/tasks/bootstrap/questions/projectName.ts index 6cd6b62b4f..ee85bf70ff 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/projectName.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/projectName.ts @@ -4,7 +4,7 @@ import { checkInputValue } from '../questionHelpers'; const Question = async (data: NewProjectData): Promise => { const c = getContext(); - const { projectName } = c.program; + const { projectName } = c.program.opts(); const { inputs } = data; if (checkInputValue(projectName)) { inputs.projectName = projectName; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts index 0703b483e0..66a12bb6f9 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts @@ -4,7 +4,7 @@ import { checkInputValue } from '../questionHelpers'; const Question = async (data: NewProjectData) => { const c = getContext(); - const { platform } = c.program; + const { platform } = c.program.opts(); const { inputs, files } = data; // TODO: grouped platforms @@ -46,7 +46,7 @@ const Question = async (data: NewProjectData) => { supportedPlatforms.sort((a, b) => RnvPlatforms.indexOf(a) - RnvPlatforms.indexOf(b)); - const optsPlatforms = c.program.platform && [c.program.platform]; + const optsPlatforms = c.program.opts().platform && [c.program.opts().platform]; const selectedPlatforms = optsPlatforms || files.template.renativeTemplateConfig?.bootstrapConfig?.defaultSelectedPlatforms || diff --git a/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts b/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts index 9247be8026..f06f51d9ae 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts @@ -4,7 +4,7 @@ import { checkInputValue } from '../questionHelpers'; const Question = async (data: NewProjectData) => { const c = getContext(); - const { ci, workspace } = c.program; + const { ci, workspace } = c.program.opts(); if (checkInputValue(workspace)) { data.inputs.workspaceID = workspace; } else if (ci) { diff --git a/packages/engine-core/src/tasks/crypto/common.ts b/packages/engine-core/src/tasks/crypto/common.ts index e4e38ea56e..653f14991d 100644 --- a/packages/engine-core/src/tasks/crypto/common.ts +++ b/packages/engine-core/src/tasks/crypto/common.ts @@ -40,7 +40,7 @@ export const checkCrypto = async (parentTask?: string, originTask?: string) => { const c = getContext(); logTask('checkCrypto'); - if (c.program.ci || c.files.project.config?.crypto?.isOptional) return; + if (c.program.opts().ci || c.files.project.config?.crypto?.isOptional) return; const sourceRaw = c.files.project.config?.crypto?.path; if (!c.files.project.package.name) { diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index e37aa0e3a2..f6bd561dfb 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -69,9 +69,9 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { let shouldCleanFolder = false; const wsPath = path.join(c.paths.workspace.dir, projectName); - const isCryptoReset = c.command === 'crypto' && c.program.reset === true; + const isCryptoReset = c.command === 'crypto' && c.program.opts().reset === true; - if (c.program.ci !== true && !isCryptoReset && fsExistsSync(destFolder)) { + if (c.program.opts().ci !== true && !isCryptoReset && fsExistsSync(destFolder)) { const options = ['Yes - override (recommended)', 'Yes - merge', 'Skip']; const { option } = await inquirerPrompt({ name: 'option', @@ -101,7 +101,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { } } - const key = c.program.key || c.process.env[envVar]; + const key = c.program.opts().key || c.process.env[envVar]; if (!key) { return Promise.reject(`encrypt: You must pass ${chalk().bold('--key')} or have env var defined: diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index 43d3a1f2f9..780833a244 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -138,7 +138,7 @@ RNV will create it for you, make sure you add whatever you want encrypted in it // if (confirm) return true; } - let key = c.program.key || c.process.env[envVar]; + let key = c.program.opts().key || c.process.env[envVar]; let keyGenerated = false; if (!key) { const { confirm } = await inquirerPrompt({ @@ -193,7 +193,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { if (!envVar) return; - const key = c.program.key || c.process.env[envVar]; + const key = c.program.opts().key || c.process.env[envVar]; if (destRaw) { const dest = `${getRealPath(destRaw, 'crypto.path')}`; diff --git a/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts b/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts index 160c26ea14..00b45d0ff8 100644 --- a/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts +++ b/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts @@ -28,7 +28,7 @@ test('Execute task.rnv.clean', async () => { ); jest.mocked(fsExistsSync).mockReturnValue(true); jest.mocked(fsReaddirSync).mockReturnValue([]); - ctx.program.ci = false; + ctx.program.opts().ci = false; //WHEN await expect(taskClean.fn?.(ctx)).resolves.toEqual(true); //THEN diff --git a/packages/engine-core/src/tasks/global/taskClean.ts b/packages/engine-core/src/tasks/global/taskClean.ts index 81ed9b833f..7a04c5b8fd 100644 --- a/packages/engine-core/src/tasks/global/taskClean.ts +++ b/packages/engine-core/src/tasks/global/taskClean.ts @@ -44,7 +44,7 @@ function clearWindowsCacheFiles() { const fn: RnvTaskFn = async (c) => { logTask('taskClean'); - const skipQuestion = c.program.ci; + const skipQuestion = c.program.opts().ci; const pathsToRemove = []; const localFiles = []; const immediateNodeModuleDir = path.join(c.paths.project.dir, 'node_modules'); diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 5bbb5656a5..3ee53de2ae 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -4,9 +4,9 @@ import { installPackageDependenciesAndPlugins } from '../../plugins'; const fn: RnvTaskFn = async (c, parentTask, _) => { logTask('taskInstall', `requiresInstall:${!!c._requiresNpmInstall}:${!c.runtime.skipPackageUpdate}`); - if (c.program.only && !!parentTask) return true; + if (c.program.opts().only && !!parentTask) return true; - if (c.program.skipDependencyCheck) return true; + if (c.program.opts().skipDependencyCheck) return true; // Check node_modules // c.runtime.skipPackageUpdate only reflects rnv version mismatch. should not prevent updating other deps diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index c2a65a0fb3..9747657b3b 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -26,7 +26,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { return Promise.reject('Build hooks have not been compiled properly!'); } - let hookName = c.program?.exeMethod; + let hookName = c.program?.opts()?.exeMethod; let showHookList = false; if (!hookName || hookName === true) { diff --git a/packages/engine-core/src/tasks/linking/linker.ts b/packages/engine-core/src/tasks/linking/linker.ts index a84244e216..e4c255b048 100644 --- a/packages/engine-core/src/tasks/linking/linker.ts +++ b/packages/engine-core/src/tasks/linking/linker.ts @@ -72,14 +72,14 @@ export const traverseTargetProject = (sourceDir: string) => { export const getSourceDir = () => { const ctx = getContext(); - const dirOption = ctx.program.dir; + const dirOption = ctx.program.opts().dir; if (dirOption) { logInfo(`Using custom source directory: ${chalk().bold(dirOption)}`); } // As default we'll use the development source directory which is a monorepo - const sourceDir = ctx.program.dir || path.join(ctx.paths.rnvCore.dir, '../../'); + const sourceDir = ctx.program.opts().dir || path.join(ctx.paths.rnvCore.dir, '../../'); if (!fsExistsSync(sourceDir)) { throw new Error(`Source directory ${sourceDir} does not exist!`); } diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 5ab3ff3fdd..5e30d4eb4d 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -34,16 +34,16 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await configureRuntimeDefaults(); - if (c.program.only && !!parentTask) return true; + if (c.program.opts().only && !!parentTask) return true; await executeTask(RnvTaskName.install, RnvTaskName.platformConfigure, originTask); const hasBuild = fsExistsSync(c.paths.project.builds.dir); logTask('', `taskPlatformConfigure hasBuildFolderPresent:${hasBuild}`); - if ((c.program.reset || c.program.resetHard) && !c.runtime.disableReset) { + if ((c.program.opts().reset || c.program.opts().resetHard) && !c.runtime.disableReset) { logInfo( - `You passed ${chalk().bold(c.program.reset ? '-r' : '-R')} argument. "${chalk().bold( + `You passed ${chalk().bold(c.program.opts().reset ? '-r' : '-R')} argument. "${chalk().bold( getAppFolder() )}" CLEANING...DONE` ); diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 728a2c654c..dc9d5da510 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -64,7 +64,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { await configureRuntimeDefaults(); await executeTask(RnvTaskName.appConfigure, RnvTaskName.projectConfigure, originTask); await generatePlatformAssetsRuntimeConfig(); @@ -104,14 +104,14 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await configureRuntimeDefaults(); if (!c.runtime.disableReset) { - if (c.program.resetHard) { + if (c.program.opts().resetHard) { logInfo( `You passed ${chalk().bold('-R, --resetHard')} argument. "${chalk().bold( './platformAssets' )}" will be cleaned up first` ); await cleanPlaformAssets(); - } else if (c.program.resetAssets) { + } else if (c.program.opts().resetAssets) { logInfo( `You passed ${chalk().bold('-a, --resetAssets')} argument. "${chalk().bold( './platformAssets' diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 25691d0b3d..018eee7a26 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -10,7 +10,7 @@ import { } from '@rnv/core'; const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTemplateApply', `template: ${c.program.template}`); + logTask('taskTemplateApply', `template: ${c.program.opts().template}`); await executeTask(RnvTaskName.projectConfigure, RnvTaskName.templateApply, originTask); @@ -18,9 +18,9 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { return Promise.reject('Template projects cannot use template apply command'); } - if (c.program.template) { - await applyTemplate(c.program.template); - if (c.program.appConfigID) { + if (c.program.opts().template) { + await applyTemplate(c.program.opts().template); + if (c.program.opts().appConfigID) { await executeTask(RnvTaskName.appConfigure, RnvTaskName.templateApply, originTask); } @@ -36,7 +36,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { }); await applyTemplate(template); - if (c.program.appConfigID) { + if (c.program.opts().appConfigID) { await executeTask(RnvTaskName.appConfigure, RnvTaskName.templateApply, originTask); } return true; diff --git a/packages/engine-lightning/src/sdk/runner.ts b/packages/engine-lightning/src/sdk/runner.ts index 32565bb5ea..0735152179 100644 --- a/packages/engine-lightning/src/sdk/runner.ts +++ b/packages/engine-lightning/src/sdk/runner.ts @@ -30,7 +30,7 @@ export const runLightningProject = async () => { const c = getContext(); logDefault('runLightningProject'); const { platform } = c; - const { hosted } = c.program; + const { hosted } = c.program.opts(); const isHosted = hosted && !getConfigProp('bundleAssets'); if (isHosted) { diff --git a/packages/engine-lightning/src/tasks/taskConfigure.ts b/packages/engine-lightning/src/tasks/taskConfigure.ts index 62f9daefff..e78ce45935 100644 --- a/packages/engine-lightning/src/tasks/taskConfigure.ts +++ b/packages/engine-lightning/src/tasks/taskConfigure.ts @@ -7,7 +7,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { return true; } return configureLightningProject(); diff --git a/packages/engine-lightning/src/tasks/taskRun.ts b/packages/engine-lightning/src/tasks/taskRun.ts index e97b54f40f..1027c5d908 100644 --- a/packages/engine-lightning/src/tasks/taskRun.ts +++ b/packages/engine-lightning/src/tasks/taskRun.ts @@ -5,7 +5,7 @@ import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; const { target } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); diff --git a/packages/engine-rn-electron/src/tasks/taskConfigure.ts b/packages/engine-rn-electron/src/tasks/taskConfigure.ts index 95af1f7974..cd2474cac5 100644 --- a/packages/engine-rn-electron/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-electron/src/tasks/taskConfigure.ts @@ -23,7 +23,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await copySharedPlatforms(); - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { return true; } diff --git a/packages/engine-rn-electron/src/tasks/taskRun.ts b/packages/engine-rn-electron/src/tasks/taskRun.ts index 369a52e064..2e586e8940 100644 --- a/packages/engine-rn-electron/src/tasks/taskRun.ts +++ b/packages/engine-rn-electron/src/tasks/taskRun.ts @@ -13,7 +13,7 @@ import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; const { target } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); diff --git a/packages/engine-rn-electron/src/tasks/taskStart.ts b/packages/engine-rn-electron/src/tasks/taskStart.ts index 8ef6a5984d..4fbd5dc322 100644 --- a/packages/engine-rn-electron/src/tasks/taskStart.ts +++ b/packages/engine-rn-electron/src/tasks/taskStart.ts @@ -16,7 +16,7 @@ import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { platform } = c; const { port } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); diff --git a/packages/engine-rn-next/src/sdk/runner.ts b/packages/engine-rn-next/src/sdk/runner.ts index 16fe411ba7..af46bbd3d5 100644 --- a/packages/engine-rn-next/src/sdk/runner.ts +++ b/packages/engine-rn-next/src/sdk/runner.ts @@ -137,7 +137,7 @@ Dev server running at: ${url} `); const bundleAssets = getConfigProp('bundleAssets', false); - const opts = !c.program?.json + const opts = !c.program?.opts()?.json ? ExecOptionsPresets.INHERIT_OUTPUT_NO_SPINNER : ExecOptionsPresets.SPINNER_FULL_ERROR_SUMMARY; return executeAsync(`npx next ${bundleAssets ? 'start' : 'dev'} --port ${c.runtime.port}`, { diff --git a/packages/engine-rn-next/src/tasks/taskConfigure.ts b/packages/engine-rn-next/src/tasks/taskConfigure.ts index 190549e690..c9378da87b 100644 --- a/packages/engine-rn-next/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-next/src/tasks/taskConfigure.ts @@ -9,7 +9,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { return true; } diff --git a/packages/engine-rn-next/src/tasks/taskStart.ts b/packages/engine-rn-next/src/tasks/taskStart.ts index 20de71e22f..8c5f0cfbf9 100644 --- a/packages/engine-rn-next/src/tasks/taskStart.ts +++ b/packages/engine-rn-next/src/tasks/taskStart.ts @@ -14,7 +14,7 @@ import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); diff --git a/packages/engine-rn-web/src/tasks/taskConfigure.ts b/packages/engine-rn-web/src/tasks/taskConfigure.ts index dacfe6df20..26d8ab1c04 100644 --- a/packages/engine-rn-web/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-web/src/tasks/taskConfigure.ts @@ -25,7 +25,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await copySharedPlatforms(); - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { return true; } diff --git a/packages/engine-rn-web/src/tasks/taskRun.ts b/packages/engine-rn-web/src/tasks/taskRun.ts index 4dc84ea94f..37ace0e0a9 100644 --- a/packages/engine-rn-web/src/tasks/taskRun.ts +++ b/packages/engine-rn-web/src/tasks/taskRun.ts @@ -55,7 +55,7 @@ const _configureHostedIfRequired = async (c: RnvContext) => { if (!bundleAssets && !existBuildsOverrideForTargetPathSync(c, path.join(getPlatformProjectDir()!, 'index.html'))) { logDebug('Running hosted build'); - const ipAddress = c.program.hostIp || getIP(); + const ipAddress = c.program.opts().hostIp || getIP(); if (c.runtime.currentEngine?.rootPath) { writeCleanFile( @@ -78,7 +78,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { platform } = c; const { port } = c.runtime; const { target } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); @@ -99,19 +99,19 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { case 'tizen': case 'tizenmobile': case 'tizenwatch': - if (!c.program.only) { + if (!c.program.opts().only) { await _configureHostedIfRequired(c); } return runTizen(c, target); case 'webos': - if (!c.program.only) { + if (!c.program.opts().only) { await _configureHostedIfRequired(c); } return runWebOS(c); case 'kaios': return runKaiOSProject(); case 'chromecast': - if (!c.program.only) { + if (!c.program.opts().only) { await _configureHostedIfRequired(c); } return runChromecast(c); diff --git a/packages/engine-rn-web/src/tasks/taskStart.ts b/packages/engine-rn-web/src/tasks/taskStart.ts index 38135c6ce3..72ed55ab44 100644 --- a/packages/engine-rn-web/src/tasks/taskStart.ts +++ b/packages/engine-rn-web/src/tasks/taskStart.ts @@ -17,7 +17,7 @@ import { EnginePlatforms } from '../constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { platform } = c; const { port } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); if (!platform) return; diff --git a/packages/engine-rn-windows/src/sdk/index.ts b/packages/engine-rn-windows/src/sdk/index.ts index b84e2bb19f..ca0475f325 100644 --- a/packages/engine-rn-windows/src/sdk/index.ts +++ b/packages/engine-rn-windows/src/sdk/index.ts @@ -296,7 +296,7 @@ function clearWindowsTemporaryFiles(c: RnvContext) { const packageBundleForWindows = (c: RnvContext, isDev = false) => { logDefault('packageBundleForWindows'); - // const { maxErrorLength } = c.program; + // const { maxErrorLength } = c.program.opts(); const entryFile = getConfigProp('entryFile'); if (!c.runtime.appId) return; @@ -315,7 +315,7 @@ const packageBundleForWindows = (c: RnvContext, isDev = false) => { `${getAppFolder().replace(/\//g, '\\')}\\${c.runtime.appId}\\Bundle\\index.windows.bundle`, ]; - if (c.program.info) { + if (c.program.opts().info) { args.push('--verbose'); } diff --git a/packages/engine-rn-windows/src/tasks/taskConfigure.ts b/packages/engine-rn-windows/src/tasks/taskConfigure.ts index 7f5ac239f2..b528fe1a48 100644 --- a/packages/engine-rn-windows/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-windows/src/tasks/taskConfigure.ts @@ -21,7 +21,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await copySharedPlatforms(); - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { return true; } diff --git a/packages/engine-rn-windows/src/tasks/taskRun.ts b/packages/engine-rn-windows/src/tasks/taskRun.ts index d67ae078f1..332f718003 100644 --- a/packages/engine-rn-windows/src/tasks/taskRun.ts +++ b/packages/engine-rn-windows/src/tasks/taskRun.ts @@ -14,7 +14,7 @@ import { SdkPlatforms } from '../sdk/constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; const { target } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); diff --git a/packages/integration-docker/src/tasks/taskDockerDeploy.ts b/packages/integration-docker/src/tasks/taskDockerDeploy.ts index 6463f8be1b..6c082b7e81 100644 --- a/packages/integration-docker/src/tasks/taskDockerDeploy.ts +++ b/packages/integration-docker/src/tasks/taskDockerDeploy.ts @@ -12,7 +12,7 @@ import Docker from '../docker'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskDockerDeploy', `parent:${parentTask}`); - if (c.program.only) { + if (c.program.opts().only) { // If run as standalone command skip all the export await executeOrSkipTask(RnvTaskName.export, 'docker export', originTask); } else { diff --git a/packages/integration-docker/src/tasks/taskDockerExport.ts b/packages/integration-docker/src/tasks/taskDockerExport.ts index e8a4e973ef..c12fef83ee 100644 --- a/packages/integration-docker/src/tasks/taskDockerExport.ts +++ b/packages/integration-docker/src/tasks/taskDockerExport.ts @@ -12,7 +12,7 @@ import Docker from '../docker'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { logTask('taskDockerExport', `parent:${parentTask}`); - if (c.program.only) { + if (c.program.opts().only) { // If run as standalone command skip all the export await executeOrSkipTask(RnvTaskName.export, 'docker export', originTask); } else { diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index f6489fc5e0..242cc7f47c 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -2,7 +2,7 @@ import { RnvContext, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; const fn: RnvTaskFn = async (c: RnvContext) => { logSuccess(`Hello from Integration Starter single command! ---my-opt: "${c.program.myOpt}"`); +--my-opt: "${c.program.opts().myOpt}"`); }; const Task: RnvTask = { diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index 6f5a7fe38e..2ce1df8877 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -2,7 +2,7 @@ import { RnvContext, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; const fn: RnvTaskFn = async (c: RnvContext) => { logSuccess(`Hello from Integration Starter! ---my-opt: "${c.program.myOpt}"`); +--my-opt: "${c.program.opts().myOpt}"`); }; const Task: RnvTask = { diff --git a/packages/sdk-android/src/__tests__/runner.test.ts b/packages/sdk-android/src/__tests__/runner.test.ts index 032677f207..4fbdb02878 100644 --- a/packages/sdk-android/src/__tests__/runner.test.ts +++ b/packages/sdk-android/src/__tests__/runner.test.ts @@ -20,8 +20,8 @@ describe('getAndroidDeviceToRunOn', () => { //GIVEN const ctx = getContext(); ctx.platform = 'android'; - ctx.program.target = true; - ctx.program.device = 'device1'; + ctx.program.opts().target = true; + ctx.program.opts().device = 'device1'; ctx.runtime.target = 'defaultTarget'; const mockFoundDevice = { name: 'simulator1', isActive: false, udid: '', isDevice: false }; @@ -39,9 +39,9 @@ describe('getAndroidDeviceToRunOn', () => { const targetToConnectWiFi = 'invalidIPAdress'; const ctx = getContext(); ctx.platform = 'android'; - ctx.program.target = true; + ctx.program.opts().target = true; ctx.runtime.target = 'defaultTarget'; - ctx.program.device = targetToConnectWiFi; + ctx.program.opts().device = targetToConnectWiFi; const mockFoundDevice = { name: 'simulator1', isActive: false, udid: '', isDevice: false }; net.isIP = jest.fn().mockReturnValue(false); @@ -61,9 +61,9 @@ describe('getAndroidDeviceToRunOn', () => { const targetToConnectWiFi = '192.168.0.1'; const ctx = getContext(); ctx.platform = 'android'; - ctx.program.target = true; + ctx.program.opts().target = true; ctx.runtime.target = 'defaultTarget'; - ctx.program.device = targetToConnectWiFi; + ctx.program.opts().device = targetToConnectWiFi; net.isIP = jest.fn().mockReturnValue(true); jest.mocked(connectToWifiDevice).mockResolvedValue(true); @@ -82,7 +82,7 @@ describe('getAndroidDeviceToRunOn', () => { //GIVEN const ctx = getContext(); ctx.platform = 'android'; - ctx.program.target = undefined; + ctx.program.opts().target = undefined; ctx.runtime.target = 'defaultTarget'; const mockFoundDevice = { name: 'defaultTarget', isActive: true, udid: '', isDevice: false }; @@ -96,7 +96,7 @@ describe('getAndroidDeviceToRunOn', () => { //GIVEN const ctx = getContext(); ctx.platform = 'android'; - ctx.program.target = 'existingTarget'; + ctx.program.opts().target = 'existingTarget'; ctx.runtime.target = 'defaultTarget'; const mockFoundDevice = { name: 'existingTarget', isActive: true, udid: '' }; jest.mocked(getAndroidTargets).mockResolvedValueOnce([mockFoundDevice]); @@ -109,7 +109,7 @@ describe('getAndroidDeviceToRunOn', () => { //GIVEN const ctx = getContext(); ctx.platform = 'android'; - ctx.program.target = false; + ctx.program.opts().target = false; ctx.runtime.target = 'defaultTarget'; const mockDevicesAndEmulators = [ diff --git a/packages/sdk-android/src/deviceManager.ts b/packages/sdk-android/src/deviceManager.ts index 9d3afc3d94..50ffd2fe8c 100644 --- a/packages/sdk-android/src/deviceManager.ts +++ b/packages/sdk-android/src/deviceManager.ts @@ -65,9 +65,7 @@ export const launchAndroidSimulator = async ( let newTarget: { name: string } | string; if (target === true) { - const { - program: { device }, - } = c; + const { device } = c.program.opts(); const list = await getAndroidTargets(false, device, device); const devicesString = composeDevicesArray(list); @@ -133,9 +131,7 @@ export const launchAndroidSimulator = async ( export const listAndroidTargets = async () => { const c = getContext(); logDefault('listAndroidTargets'); - const { - program: { device }, - } = c; + const { device } = c.program.opts(); await resetAdb(); const list = await getAndroidTargets(false, device, device); @@ -187,7 +183,7 @@ const _getDeviceAsObject = (device: AndroidDevice): DeviceInfo => { export const resetAdb = async (forceRun?: boolean, ranBefore?: boolean) => { const c = getContext(); - if (!c.program.resetAdb && !forceRun) return; + if (!c.program.opts().resetAdb && !forceRun) return; try { if (!ranBefore) await execCLI(CLI_ANDROID_ADB, 'kill-server'); } catch (e) { @@ -460,7 +456,7 @@ const _parseDevicesResult = async ( ) => { logDebug(`_parseDevicesResult:${devicesString}:${avdsString}:${deviceOnly}`); const devices: Array = []; - const { skipTargetCheck } = c.program; + const { skipTargetCheck } = c.program.opts(); if (devicesString) { const lines = devicesString.trim().split(/\r?\n/); diff --git a/packages/sdk-android/src/installer.ts b/packages/sdk-android/src/installer.ts index 510157ce40..17e516bdec 100644 --- a/packages/sdk-android/src/installer.ts +++ b/packages/sdk-android/src/installer.ts @@ -112,7 +112,7 @@ const _findFolderWithFile = (dir: string, fileToFind: string) => { const _attemptAutoFix = async (c: RnvContext, sdkPlatform: string, sdkKey: SDKKey, traverseUntilFoundFile?: string) => { logDefault('_attemptAutoFix'); - if (c.program.hosted) { + if (c.program.opts().hosted) { logInfo('HOSTED Mode. Skipping SDK checks'); return true; } @@ -144,7 +144,7 @@ const _attemptAutoFix = async (c: RnvContext, sdkPlatform: string, sdkKey: SDKKe if (result) { logSuccess(`Found existing ${chalk().bold(sdkKey)} location at ${chalk().bold(result)}`); let confirmSdk = true; - if (!c.program.ci) { + if (!c.program.opts().ci) { const { confirm } = await inquirerPrompt({ type: 'confirm', name: 'confirm', diff --git a/packages/sdk-android/src/runner.ts b/packages/sdk-android/src/runner.ts index 984351dfe6..03fe99f7c1 100644 --- a/packages/sdk-android/src/runner.ts +++ b/packages/sdk-android/src/runner.ts @@ -78,7 +78,7 @@ export const getAndroidDeviceToRunOn = async () => { if (!c.platform) return; - const { target, device } = c.program; + const { target, device } = c.program.opts(); await resetAdb(); const targetToConnectWiFi = _isString(target) ? target : device; @@ -98,7 +98,7 @@ export const getAndroidDeviceToRunOn = async () => { const askWhereToRun = async () => { if (activeDevices.length || inactiveDevices.length) { // No device active and device param is passed, exiting - if (c.program.device && !activeDevices.length) { + if (c.program.opts().device && !activeDevices.length) { return Promise.reject('No active devices found, please connect one or remove the device argument'); } if (!foundDevice && (_isString(target) || _isString(device))) { @@ -141,7 +141,7 @@ export const getAndroidDeviceToRunOn = async () => { return device; } } else { - if (c.program.device) { + if (c.program.opts().device) { return Promise.reject('No active devices found, please connect one or remove the device argument'); } await askForNewEmulator(); @@ -205,7 +205,7 @@ const _checkSigningCerts = async (c: Context) => { } app in release mode but you have't configured your ${chalk().bold( c.paths.workspace.appConfig.configPrivate )} for ${chalk().bold(c.platform)} platform yet.`; - if (c.program.ci === true) { + if (c.program.opts().ci === true) { return Promise.reject(msg); } logWarning(msg); @@ -504,7 +504,7 @@ export const configureProject = async () => { export const runAndroidLog = async () => { const c = getContext(); logDefault('runAndroidLog'); - const filter = c.program.filter || ''; + const filter = c.program.opts().filter || ''; const child = execaCommand(`${c.cli[CLI_ANDROID_ADB]} logcat`); // use event hooks to provide a callback to execute when data are available: child.stdout?.on('data', (data: Buffer) => { diff --git a/packages/sdk-android/src/tasks/taskConfigure.ts b/packages/sdk-android/src/tasks/taskConfigure.ts index 3fb466e3ff..6112d34c07 100644 --- a/packages/sdk-android/src/tasks/taskConfigure.ts +++ b/packages/sdk-android/src/tasks/taskConfigure.ts @@ -21,7 +21,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await configureEntryPoint(c.platform); - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { return true; } diff --git a/packages/sdk-android/src/tasks/taskRun.ts b/packages/sdk-android/src/tasks/taskRun.ts index e677af0eec..8af72520e5 100644 --- a/packages/sdk-android/src/tasks/taskRun.ts +++ b/packages/sdk-android/src/tasks/taskRun.ts @@ -17,7 +17,7 @@ import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { platform } = c; const { port } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskRun', `parent:${parentTask} port:${port} hosted:${hosted}`); await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); @@ -30,7 +30,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { if (runDevice) { c.runtime.target = runDevice?.name || runDevice?.udid; } - if (!c.program.only) { + if (!c.program.opts().only) { await startBundlerIfRequired(RnvTaskName.run, originTask); if (bundleAssets || platform === 'androidwear') { await packageAndroid(); diff --git a/packages/sdk-apple/src/deviceManager.ts b/packages/sdk-apple/src/deviceManager.ts index 1f2b998d00..4403926179 100644 --- a/packages/sdk-apple/src/deviceManager.ts +++ b/packages/sdk-apple/src/deviceManager.ts @@ -26,9 +26,7 @@ export const getAppleDevices = async (c: RnvContext, ignoreDevices?: boolean, ig logDefault('getAppleDevices', `ignoreDevices:${ignoreDevices} ignoreSimulators:${ignoreSimulators}`); - const { - program: { skipTargetCheck }, - } = c; + const { skipTargetCheck } = c.program.opts(); const connectedDevicesIds = await utilities.getConnectedDevices(); const connectedDevicesArray = await Promise.all( diff --git a/packages/sdk-apple/src/fastlane.ts b/packages/sdk-apple/src/fastlane.ts index 3ebc439704..2c19860b43 100644 --- a/packages/sdk-apple/src/fastlane.ts +++ b/packages/sdk-apple/src/fastlane.ts @@ -32,9 +32,9 @@ export const updateProfile = async (): Promise => { // TODO: run trough all schemes // const schemes = c.buildConfig.platforms?.[c.platform]?.buildSchemes - // const currScheme = c.program.scheme + // const currScheme = c.program.opts().scheme // for(k in schemes) { - // c.program.scheme = k + // c.program.opts().scheme = k // } // if (appConfigId) await setAppConfig(c, appConfigId); @@ -42,7 +42,7 @@ export const updateProfile = async (): Promise => { if (c.platform !== 'ios') { return Promise.reject(`updateProfile:platform ${c.platform} not supported`); } - const { scheme } = c.program; + const { scheme } = c.program.opts(); const { platform } = c; diff --git a/packages/sdk-apple/src/runner.ts b/packages/sdk-apple/src/runner.ts index eb1467d802..53779ded41 100644 --- a/packages/sdk-apple/src/runner.ts +++ b/packages/sdk-apple/src/runner.ts @@ -61,7 +61,7 @@ export const getIosDeviceToRunOn = async (c: Context) => { if (!c.platform) return; - const { device } = c.program; + const { device } = c.program.opts(); let devicesArr: AppleDevice[] = []; if (device === true) { devicesArr = await getAppleDevices(c, false, true); @@ -362,7 +362,7 @@ Type in your Apple Team ID to be used (will be saved to ${c.paths.appConfig?.con }; const _handleProvisioningIssues = async (c: Context, e: unknown, msg: string) => { - const provisioningStyle = c.program.provisioningStyle || getConfigProp('provisioningStyle'); + const provisioningStyle = c.program.opts().provisioningStyle || getConfigProp('provisioningStyle'); const appFolderName = getAppFolderName(); // Sometimes xcodebuild reports Automatic signing is disabled but it could be keychain not accepted by user const isProvAutomatic = provisioningStyle === 'Automatic'; const proAutoText = isProvAutomatic @@ -468,7 +468,7 @@ export const buildXcodeProject = async () => { let destinationPlatform = ''; switch (c.platform) { case 'ios': { - if (c.program.device) { + if (c.program.opts().device) { destinationPlatform = 'iOS'; } else { destinationPlatform = 'iOS Simulator'; @@ -476,7 +476,7 @@ export const buildXcodeProject = async () => { break; } case 'tvos': { - if (c.program.device) { + if (c.program.opts().device) { destinationPlatform = 'tvOS'; } else { destinationPlatform = 'tvOS Simulator'; @@ -496,8 +496,8 @@ export const buildXcodeProject = async () => { const allowProvisioningUpdates = getConfigProp('allowProvisioningUpdates') || true; const ignoreLogs = getConfigProp('ignoreLogs'); let ps = ''; - if (c.program.xcodebuildArgs) { - ps = c.program.xcodebuildArgs; + if (c.program.opts().xcodebuildArgs) { + ps = c.program.opts().xcodebuildArgs; } const p: string[] = []; @@ -588,8 +588,8 @@ const archiveXcodeProject = () => { const ignoreLogs = getConfigProp('ignoreLogs'); const exportPathArchive = `${exportPath}/${appFolderName}.xcarchive`; let ps = ''; - if (c.program.xcodebuildArchiveArgs) { - ps = c.program.xcodebuildArchiveArgs; + if (c.program.opts().xcodebuildArchiveArgs) { + ps = c.program.opts().xcodebuildArchiveArgs; } const p: string[] = []; @@ -658,8 +658,8 @@ export const exportXcodeProject = async () => { const ignoreLogs = getConfigProp('ignoreLogs'); let ps = ''; - if (c.program.xcodebuildExportArgs) { - ps = c.program.xcodebuildExportArgs; + if (c.program.opts().xcodebuildExportArgs) { + ps = c.program.opts().xcodebuildExportArgs; } const p = ['-exportArchive']; @@ -692,7 +692,7 @@ export const runAppleLog = () => new Promise(() => { const c = getContext(); logDefault('runAppleLog'); - const filter = c.program.filter || 'RNV'; + const filter = c.program.opts().filter || 'RNV'; const opts: ObjectEncodingOptions & ExecFileOptions = {}; //{ stdio: 'inherit', customFds: [0, 1, 2] }; const child = child_process.execFile( 'xcrun', @@ -718,7 +718,7 @@ export const configureXcodeProject = async () => { const c = getContext(); logDefault('configureXcodeProject'); - const { device } = c.program; + const { device } = c.program.opts(); const { platform } = c; // const bundlerIp = device ? getIP() : 'localhost'; const appFolder = getAppFolder(); diff --git a/packages/sdk-apple/src/tasks/taskConfigure.ts b/packages/sdk-apple/src/tasks/taskConfigure.ts index d06b0acac3..c89a95fcf4 100644 --- a/packages/sdk-apple/src/tasks/taskConfigure.ts +++ b/packages/sdk-apple/src/tasks/taskConfigure.ts @@ -11,7 +11,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { await configureEntryPoint(c.platform); - if (c.program.only && !!parentTask) { + if (c.program.opts().only && !!parentTask) { return true; } diff --git a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts index 1740771746..927369e9da 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts @@ -18,7 +18,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { if (shouldSkipTask(RnvTaskName.cryptoInstallCerts, originTask)) return true; - const kChain = c.program.keychain || 'ios-build.keychain'; + const kChain = c.program.opts().keychain || 'ios-build.keychain'; const list = getFileListSync(c.paths.workspace.project.dir); const cerArr = list.filter((v) => v.endsWith('.cer')); diff --git a/packages/sdk-apple/src/tasks/taskRun.ts b/packages/sdk-apple/src/tasks/taskRun.ts index bb5a10af31..3c3a9764e6 100644 --- a/packages/sdk-apple/src/tasks/taskRun.ts +++ b/packages/sdk-apple/src/tasks/taskRun.ts @@ -16,7 +16,7 @@ import { SdkPlatforms } from '../common'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { const { port } = c.runtime; - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskRun', `parent:${parentTask} port:${port} hosted:${hosted}`); await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); @@ -26,7 +26,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { const bundleAssets = getConfigProp('bundleAssets', false); const runDeviceArgs = await getIosDeviceToRunOn(c); - if (!c.program.only) { + if (!c.program.opts().only) { await startBundlerIfRequired(RnvTaskName.run, originTask); await runXcodeProject(runDeviceArgs); if (!bundleAssets) { diff --git a/packages/sdk-apple/src/xcodeParser.ts b/packages/sdk-apple/src/xcodeParser.ts index a3269fe971..d3d0d3066e 100644 --- a/packages/sdk-apple/src/xcodeParser.ts +++ b/packages/sdk-apple/src/xcodeParser.ts @@ -30,13 +30,13 @@ export const parseXcodeProject = async () => { // PROJECT c.payload.xcodeProj = {}; c.payload.xcodeProj.provisioningStyle = - c.program.provisioningStyle || getConfigProp('provisioningStyle', 'Automatic'); + c.program.opts().provisioningStyle || getConfigProp('provisioningStyle', 'Automatic'); c.payload.xcodeProj.deploymentTarget = getConfigProp('deploymentTarget', '14.0'); c.payload.xcodeProj.provisionProfileSpecifier = - c.program.provisionProfileSpecifier || getConfigProp('provisionProfileSpecifier'); + c.program.opts().provisionProfileSpecifier || getConfigProp('provisionProfileSpecifier'); c.payload.xcodeProj.provisionProfileSpecifiers = getConfigProp('provisionProfileSpecifiers') || {}; c.payload.xcodeProj.codeSignIdentity = - c.program.codeSignIdentity || getConfigProp('codeSignIdentity', 'iPhone Developer'); + c.program.opts().codeSignIdentity || getConfigProp('codeSignIdentity', 'iPhone Developer'); c.payload.xcodeProj.codeSignIdentities = getConfigProp('codeSignIdentities'); @@ -70,7 +70,8 @@ export const parseXcodeProject = async () => { warningMessage: 'No provisionProfileSpecifier configured in appConfig despite setting provisioningStyle to manual', }); - const schemeToUpdate = c.files.appConfig.config?.platforms?.[platform]?.buildSchemes?.[c.program.scheme]; + const schemeToUpdate = + c.files.appConfig.config?.platforms?.[platform]?.buildSchemes?.[c.program.opts().scheme]; if (autoFix && schemeToUpdate && c.files.appConfig.config) { c.payload.xcodeProj.provisionProfileSpecifier = eligibleProfile.Name; if ('provisionProfileSpecifier' in schemeToUpdate) { diff --git a/packages/sdk-react-native/src/iosRunner.ts b/packages/sdk-react-native/src/iosRunner.ts index 80e67afa31..0a33e90a82 100644 --- a/packages/sdk-react-native/src/iosRunner.ts +++ b/packages/sdk-react-native/src/iosRunner.ts @@ -28,7 +28,7 @@ export const packageReactNativeIOS = (isDev = false) => { const entryFile = getConfigProp('entryFile'); if (!c.platform) return; - // const { maxErrorLength } = c.program; + // const { maxErrorLength } = c.program.opts(); const args = [ 'bundle', '--platform', @@ -49,7 +49,7 @@ export const packageReactNativeIOS = (isDev = false) => { args.push(`${getAppFolder()}/main.jsbundle.map`); } - if (c.program.info) { + if (c.program.opts().info) { args.push('--verbose'); } @@ -127,7 +127,7 @@ const checkIfPodsIsRequired = (c: RnvContext): { result: boolean; reason: string if (c.runtime._skipNativeDepResolutions) { return { result: false, reason: `Command ${getCurrentCommand(true)} explicitly skips pod checks`, code: 1 }; } - if (c.program.updatePods) { + if (c.program.opts().updatePods) { return { result: true, reason: 'You passed --updatePods option', code: 2 }; } const appFolder = getAppFolder(); @@ -171,7 +171,7 @@ const updatePodsChecksum = () => { export const runCocoaPods = async () => { const c = getContext(); - logDefault('runCocoaPods', `forceUpdate:${!!c.program.updatePods}`); + logDefault('runCocoaPods', `forceUpdate:${!!c.program.opts().updatePods}`); const checkResult = await checkIfPodsIsRequired(c); @@ -203,7 +203,7 @@ export const runCocoaPods = async () => { ...EnvVars.RNV_FLIPPER_ENABLED(), }; - if (c.program.updatePods) { + if (c.program.opts().updatePods) { await executeAsync('bundle exec pod update', { cwd: appFolder, env, diff --git a/packages/sdk-react-native/src/metroRunner.ts b/packages/sdk-react-native/src/metroRunner.ts index ae8d09623d..a9941fe5a5 100644 --- a/packages/sdk-react-native/src/metroRunner.ts +++ b/packages/sdk-react-native/src/metroRunner.ts @@ -55,11 +55,11 @@ export const startReactNative = async (opts: { startCmd += ` --config=${metroConfigName}`; } - if (c.program.resetHard || c.program.reset) { + if (c.program.opts().resetHard || c.program.opts().reset) { startCmd += ' --reset-cache'; } - if (c.program.resetHard || c.program.reset) { + if (c.program.opts().resetHard || c.program.opts().reset) { logInfo(`You passed ${chalk().bold('-r')} argument. --reset-cache will be applied to react-native`); } // logSummary('BUNDLER STARTED'); diff --git a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts index f6fb9d791e..d2a10bc7ca 100644 --- a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts +++ b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts @@ -77,7 +77,7 @@ describe('taskStart', () => { // GIVEN const ctx = getContext(); ctx.platform = 'tvos'; - ctx.program.hosted = true; + ctx.program.opts().hosted = true; // WHEN // THEN await expect(taskStart.fn?.(ctx, 'parent', undefined)).rejects.toBe( 'This platform does not support hosted mode' diff --git a/packages/sdk-react-native/src/tasks/taskStart.ts b/packages/sdk-react-native/src/tasks/taskStart.ts index b0b0155958..6cd900a877 100644 --- a/packages/sdk-react-native/src/tasks/taskStart.ts +++ b/packages/sdk-react-native/src/tasks/taskStart.ts @@ -12,7 +12,7 @@ import { startReactNative } from '../metroRunner'; import { SdkPlatforms } from '../constants'; const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { hosted } = c.program; + const { hosted } = c.program.opts(); logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); diff --git a/packages/sdk-telemetry/src/index.ts b/packages/sdk-telemetry/src/index.ts index 7b6db664ea..0aebeb5c06 100644 --- a/packages/sdk-telemetry/src/index.ts +++ b/packages/sdk-telemetry/src/index.ts @@ -104,7 +104,7 @@ export class AnalyticsCls { scope.setTags({ ...tags, os: os.platform() }); scope.setExtras({ ...extra, fingerprint: machineIdSync() }); const c = getContext(); - if (c.program.telemetryDebug) { + if (c.program.opts().telemetryDebug) { logRaw(`TELEMETRY EXCEPTION PAYLOAD: ${e} `); @@ -122,7 +122,7 @@ export class AnalyticsCls { async captureEvent(e: { type: string; platform?: RnvPlatform; template?: string; platforms?: Array }) { const c = getContext(); if (this.isAnalyticsEnabled && this.knowItAll) { - if (c.program.telemetryDebug) { + if (c.program.opts().telemetryDebug) { logRaw(`TELEMETRY EVENT PAYLOAD: ${JSON.stringify(e, null, 2)} `); diff --git a/packages/sdk-tizen/src/deviceManager.ts b/packages/sdk-tizen/src/deviceManager.ts index 36adabadbd..ed82e01615 100644 --- a/packages/sdk-tizen/src/deviceManager.ts +++ b/packages/sdk-tizen/src/deviceManager.ts @@ -171,7 +171,7 @@ export const addDevelopTizenCertificate = (c: RnvContext, secureProfileConfig: T }); const _getDeviceID = async (c: RnvContext, target: string) => { - const { device } = c.program; + const { device } = c.program.opts(); if (device) { let connectResponse: string; @@ -215,7 +215,7 @@ const _getDeviceID = async (c: RnvContext, target: string) => { }; const _getRunningDevices = async (c: RnvContext) => { - const { platform } = c.program; + const { platform } = c.program.opts(); const devicesList = await execCLI(CLI_SDB_TIZEN, 'devices'); const lines = devicesList .trim() diff --git a/packages/sdk-tizen/src/installer.ts b/packages/sdk-tizen/src/installer.ts index e8aeb614d8..5a068780df 100644 --- a/packages/sdk-tizen/src/installer.ts +++ b/packages/sdk-tizen/src/installer.ts @@ -63,7 +63,7 @@ const _attemptAutoFix = async (c: RnvContext) => { if (!c.files.workspace.config) return; - if (c.program.hosted) { + if (c.program.opts().hosted) { logInfo('HOSTED Mode. Skipping SDK checks'); return true; } @@ -73,7 +73,7 @@ const _attemptAutoFix = async (c: RnvContext) => { if (result) { logSuccess(`Found existing ${c.platform} SDK location at ${chalk().bold(result)}`); let confirmSdk = true; - if (!c.program.ci) { + if (!c.program.opts().ci) { const { confirm } = await inquirerPrompt({ type: 'confirm', name: 'confirm', diff --git a/packages/sdk-tizen/src/runner.ts b/packages/sdk-tizen/src/runner.ts index cc962d76a8..29bcc769c7 100644 --- a/packages/sdk-tizen/src/runner.ts +++ b/packages/sdk-tizen/src/runner.ts @@ -111,7 +111,7 @@ const _copyRequiredFiles = () => { export const runTizen = async (c: RnvContext, target?: string) => { logDefault('runTizen', `target:${target}`); const { platform } = c; - const { hosted } = c.program; + const { hosted } = c.program.opts(); if (!platform) return; @@ -174,7 +174,7 @@ export const buildTizenProject = async () => { await buildCoreWebpackProject(); - if (!c.program.hosted) { + if (!c.program.opts().hosted) { _copyRequiredFiles(); const tOut = path.join(tDir, 'output'); const tIntermediate = path.join(tDir, 'intermediate'); @@ -201,7 +201,7 @@ export const configureTizenProject = async () => { return; } - if (!_isGlobalConfigured && !c.program.hosted) { + if (!_isGlobalConfigured && !c.program.opts().hosted) { _isGlobalConfigured = true; await configureTizenGlobal(); } diff --git a/packages/sdk-utils/src/ipUtils.ts b/packages/sdk-utils/src/ipUtils.ts index 6a8e3da863..8d214cec8a 100644 --- a/packages/sdk-utils/src/ipUtils.ts +++ b/packages/sdk-utils/src/ipUtils.ts @@ -9,7 +9,7 @@ export const confirmActiveBundler = async () => { const c = getContext(); if (c.runtime.skipActiveServerCheck) return true; - if (c.program.ci) { + if (c.program.opts().ci) { //TODO: handle return codes properly await killPort(c.runtime.port); return true; diff --git a/packages/sdk-webos/src/deviceManager.ts b/packages/sdk-webos/src/deviceManager.ts index f656f368b2..e535deaed5 100644 --- a/packages/sdk-webos/src/deviceManager.ts +++ b/packages/sdk-webos/src/deviceManager.ts @@ -186,7 +186,7 @@ const installAndLaunchApp = async (target: string, appPath: string, tId: string) // the device from time to time. Running it again works. await execCLI(CLI_WEBOS_ARES_INSTALL, `--device ${target} ${appPath}`); } - // const { hosted } = c.program; + // const { hosted } = c.program.opts(); // const { platform } = c; // const isHosted = hosted || !getConfigProp('bundleAssets'); const toReturn = true; @@ -228,7 +228,7 @@ export const listWebOSTargets = async () => { export const runWebosSimOrDevice = async () => { const c = getContext(); - const { device } = c.program; + const { device } = c.program.opts(); const platDir = getAppFolder(); if (!platDir) { @@ -301,7 +301,7 @@ export const runWebosSimOrDevice = async () => { const tv = actualDevices[0]; return installAndLaunchApp(tv.name, appPath, tId); } - } else if (!c.program.target) { + } else if (!c.program.opts().target) { // No target specified if (activeDevices.length === 1) { // One device present @@ -324,6 +324,6 @@ export const runWebosSimOrDevice = async () => { } } else { // Target specified, using that - return installAndLaunchApp(c.program.target, appPath, tId); + return installAndLaunchApp(c.program.opts().target, appPath, tId); } }; diff --git a/packages/sdk-webos/src/installer.ts b/packages/sdk-webos/src/installer.ts index 54173b742f..849d249509 100644 --- a/packages/sdk-webos/src/installer.ts +++ b/packages/sdk-webos/src/installer.ts @@ -68,7 +68,7 @@ const _isSdkInstalled = (c: RnvContext) => { const _attemptAutoFix = async (c: RnvContext) => { logDefault('_attemptAutoFix'); - if (c.program.hosted) { + if (c.program.opts().hosted) { logInfo('HOSTED Mode. Skipping SDK checks'); return true; } @@ -78,7 +78,7 @@ const _attemptAutoFix = async (c: RnvContext) => { if (result) { logSuccess(`Found existing ${c.platform} SDK location at ${chalk().bold(result)}`); let confirmSdk = true; - if (!c.program.ci) { + if (!c.program.opts().ci) { const { confirm } = await inquirerPrompt({ type: 'confirm', name: 'confirm', diff --git a/packages/sdk-webos/src/runner.ts b/packages/sdk-webos/src/runner.ts index d423967278..a4be2a9ac6 100644 --- a/packages/sdk-webos/src/runner.ts +++ b/packages/sdk-webos/src/runner.ts @@ -37,7 +37,7 @@ import { import { fsExistsSync } from '@rnv/core'; export const runWebOS = async (c: RnvContext) => { - const { hosted } = c.program; + const { hosted } = c.program.opts(); const { target } = c.runtime; const { platform } = c; @@ -119,7 +119,7 @@ export const buildWebOSProject = async () => { await buildCoreWebpackProject(); - if (!c.program.hosted) { + if (!c.program.opts().hosted) { const tDir = path.join(getPlatformProjectDir()!, 'build'); const tOut = path.join(getAppFolder()!, 'output'); diff --git a/packages/sdk-webpack/src/index.ts b/packages/sdk-webpack/src/index.ts index 02fbaf5662..24e2de4286 100644 --- a/packages/sdk-webpack/src/index.ts +++ b/packages/sdk-webpack/src/index.ts @@ -69,7 +69,7 @@ const _runWebBrowser = (devServerHost: string, port: number, alreadyStarted: boo }); const _runRemoteDebuggerChii = async (c: RnvContext, obj: { remoteDebuggerActive: boolean }) => { - const { debugIp } = c.program; + const { debugIp } = c.program.opts(); try { await commandExists('chii'); @@ -106,7 +106,7 @@ Debugger running at: ${debugUrl}`); }; const _runRemoteDebuggerWeinre = async (c: RnvContext, obj: { remoteDebuggerActive: boolean }) => { - const { debugIp } = c.program; + const { debugIp } = c.program.opts(); try { await commandExists('weinre'); @@ -142,7 +142,7 @@ Debugger running at: ${debugUrl}`); export const _runWebDevServer = async (c: RnvContext, enableRemoteDebugger?: boolean) => { logDefault('_runWebDevServer'); - const { debug } = c.program; + const { debug } = c.program.opts(); const env: Env = { ...CoreEnvVars.BASE(), @@ -187,7 +187,7 @@ export const _runWebDevServer = async (c: RnvContext, enableRemoteDebugger?: boo export const buildCoreWebpackProject = async () => { const c = getContext(); - const { debug, debugIp } = c.program; + const { debug, debugIp } = c.program.opts(); logDefault('buildCoreWebpackProject'); const env: Record = { ...CoreEnvVars.BASE(), From 0b20f6c29bc0ce6e9df0ab02648c5f49b6af0666 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 03:01:11 +0100 Subject: [PATCH 109/175] fix help options --- packages/cli/src/index.ts | 10 ++++++---- packages/cli/src/logger/index.ts | 18 +++++++++--------- packages/core/src/tasks/index.ts | 2 +- .../engine-core/src/tasks/bootstrap/taskNew.ts | 2 +- packages/integration-docker/src/docker.ts | 7 ++----- packages/sdk-utils/src/target.ts | 2 +- 6 files changed, 20 insertions(+), 21 deletions(-) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index db6ac66527..5d9ca23122 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -69,10 +69,12 @@ export const run = ({ RNV_HOME_DIR }: { RNV_HOME_DIR?: string }) => { // This looks weird but commander default help is actual function. // if you pass --help it will override it with undefined // So we need to check if it's not a function to output help - // if (!program.help) { - // //program.outputHelp(); - // // Let's use alternative name for this flag - // program.isHelpInvoked = true; + // if (program.opts().help) { + // console.log('HKJHKDJHKJDHKD'); + + //program.outputHelp(); + // Let's use alternative name for this flag + // program.opts().help = true; // } // If the first argument is a flag, then the subCommand is missing diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index db050e9d04..097286ab51 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -57,7 +57,7 @@ export const logInitialize = () => { export const logWelcome = () => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; const shortLen = 64; // prettier-ignore let str = _defaultColor(` @@ -188,7 +188,7 @@ export const getCurrentCommand = (excludeDollar = false) => { export const logToSummary = (v: string) => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; const _v = _sanitizePaths(v); ctx.logging.logMessages.push(`\n${_v}`); }; @@ -206,7 +206,7 @@ export const logRaw = (...args: Array) => { export const logSummary = (opts?: { header?: string; headerStyle?: 'success' | 'warning' | 'error' | 'none' }) => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; if (_jsonOnly) return; @@ -389,7 +389,7 @@ const TASK_COUNTER: Record = {}; export const logTask = (task: string, customChalk?: string | RnvApiChalkFn) => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; if (!TASK_COUNTER[task]) TASK_COUNTER[task] = 0; TASK_COUNTER[task] += 1; const taskCount = currentChalk.grey(`[${TASK_COUNTER[task]}]`); @@ -421,7 +421,7 @@ export const logTask = (task: string, customChalk?: string | RnvApiChalkFn) => { export const logDefault = (task: string, customChalk?: string | RnvApiChalkFn) => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; const taskCount = getLogCounter(task); if (_jsonOnly) { @@ -459,7 +459,7 @@ const getLogCounter = (task: string, skipAddition = false) => { export const logInitTask = (task: string) => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; const taskCount = getLogCounter(task); if (_jsonOnly) { @@ -485,7 +485,7 @@ type PrintJsonPayload = { export const logExitTask = (task: string) => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; if (_jsonOnly) { return _printJson({ type: 'taskExit', @@ -501,7 +501,7 @@ export const logExitTask = (task: string) => { export const logHook = (hook = '', msg = '') => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; if (_jsonOnly) { const payload: PrintJsonPayload = { type: 'hook', hook, message: stripAnsi(_sanitizePaths(msg)) }; if (_getCurrentTask()) payload.task = stripAnsi(_getCurrentTask()); @@ -527,7 +527,7 @@ export const logWarning = (msg: string | boolean | unknown) => { export const logInfo = (msg: string) => { const ctx = getContext(); - if (ctx.program?.isHelpInvoked) return; + if (ctx.program?.opts().help) return; if (_jsonOnly) { return _printJson({ type: 'log', diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 4621235385..260b92513a 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -588,7 +588,7 @@ export const executeEngineTask = async ( isFirstTask?: boolean ) => { const c = getContext(); - const needsHelp = Object.prototype.hasOwnProperty.call(c.program, 'help'); + const needsHelp = c.program.opts().help; const taskInstance = getEngineTask(task, tasks, CUSTOM_TASKS); diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index 0ec6958e1e..cee6b9a7fe 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -84,7 +84,7 @@ const Task: RnvTask = { description: 'Create new ReNative project', fn, task: RnvTaskName.new, - // options: [{ key: 'template', description: 'Template to use' }], + options: [{ key: 'template', description: 'Template to use' }], isGlobalScope: true, isPriorityOrder: true, }; diff --git a/packages/integration-docker/src/docker.ts b/packages/integration-docker/src/docker.ts index 4c23b71753..d7d61bae21 100644 --- a/packages/integration-docker/src/docker.ts +++ b/packages/integration-docker/src/docker.ts @@ -83,11 +83,8 @@ class Docker { async saveImage() { const { c } = this; - const { - runtime, - files, - program: { scheme = 'debug' }, - } = c; + const { runtime, files, program } = c; + const scheme = program?.opts()?.scheme || 'debug'; const imageName = runtime.appId?.toLowerCase(); const appVersion = files.project.package.version; diff --git a/packages/sdk-utils/src/target.ts b/packages/sdk-utils/src/target.ts index 42bab099a8..64974e0302 100644 --- a/packages/sdk-utils/src/target.ts +++ b/packages/sdk-utils/src/target.ts @@ -3,7 +3,7 @@ import { getContext, inquirerPrompt } from '@rnv/core'; export const getTargetWithOptionalPrompt = async () => { const ctx = getContext(); const { platform, program } = ctx; - let target = program?.target; + let target = program?.opts().target; const options = []; if (platform && !target) { From 3a6528f8c94098b2dd528259c321bcfa7f7f4661 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 05:02:41 +0100 Subject: [PATCH 110/175] move options to specific tasks, deprecate custom appConfig, src copy logic in core --- .../core/src/schema/configFiles/project.ts | 8 +- packages/core/src/tasks/constants.ts | 10 +- packages/core/src/templates/index.ts | 232 +++++++++--------- .../src/tasks/app/taskAppCreate.ts | 13 +- .../src/tasks/bootstrap/questionHelpers.ts | 14 +- .../src/tasks/bootstrap/taskNew.ts | 14 +- 6 files changed, 148 insertions(+), 143 deletions(-) diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 5e0c10fc24..d0d37a5518 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -241,10 +241,10 @@ const RootProjectBaseFragment = { .describe( "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" ), - isNew: z - .boolean() - .optional() - .describe('Marker indicating that this project has just been bootstrapped. this prop is managed by rnv'), + // isNew: z + // .boolean() + // .optional() + // .describe('Marker indicating that this project has just been bootstrapped. this prop is managed by rnv'), }; const RootProjectBaseSchema = z.object(RootProjectBaseFragment); diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 752b483092..2969750399 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -153,11 +153,7 @@ const _RnvTaskOptions = { description: 'Run in a hosted environment (skip budleAssets)', }, // ENGINE-CORE -------------------------------- - sourceAppConfigID: { - isValueType: true, - isRequired: true, - description: 'name of source appConfig folder to copy from', - }, + gitEnabled: { description: 'Enable git in your newly created project', isValueType: true, @@ -309,9 +305,7 @@ const _RnvTaskOptions = { // }, }; -type ParamKeysType = typeof _RnvTaskOptions; - -export type ProgramOptionsKey = keyof ParamKeysType; +export type ProgramOptionsKey = keyof typeof _RnvTaskOptions; export const RnvTaskOptions = _RnvTaskOptions as Record; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index e7a369fe40..63f9f7d9e5 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -8,21 +8,21 @@ import { readObjectSync, fsExistsSync, fsLstatSync, - fsUnlinkSync, - removeDirSync, + // fsUnlinkSync, + // removeDirSync, } from '../system/fs'; import { chalk, logError, logInfo, logWarning, logDefault, logDebug } from '../logger'; -import { loadFileExtended } from '../configs'; +// import { loadFileExtended } from '../configs'; import { doResolve } from '../system/resolve'; import { RnvContext } from '../context/types'; import { generateOptions, inquirerPrompt } from '../api'; import { PromptOptions } from '../api/types'; import { RnvPlatform } from '../types'; -import { listAppConfigsFoldersSync } from '../configs/appConfigs'; +// import { listAppConfigsFoldersSync } from '../configs/appConfigs'; import { writeRenativeConfigFile } from '../configs/utils'; import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; -import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -import { PlatformKey } from '../schema/types'; +import { ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; +// import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; @@ -89,118 +89,107 @@ const _applyTemplate = async (c: RnvContext) => { return true; }; -const _configureSrc = (c: RnvContext) => - new Promise((resolve) => { - // Check src - logDebug('configureProject:check src'); - if (!fsExistsSync(c.paths.project.srcDir)) { - logInfo(`Your src folder ${chalk().bold(c.paths.project.srcDir)} is missing! CREATING...DONE`); - copyFolderContentsRecursiveSync(path.join(c.paths.template.dir, 'src'), c.paths.project.srcDir); - } - resolve(); - }); - -const _configureAppConfigs = async (c: RnvContext) => { - // Check appConfigs - logDebug('configureProject:check appConfigs'); - // - if (!fsExistsSync(c.paths.project.appConfigsDir)) { - logInfo( - `Your appConfig folder ${chalk().bold( - c.paths.project.appConfigsDir - )} is missing! ReNative will create one from template.` - ); - - // TODO: GET CORRECT PROJECT TEMPLATE - copyFolderContentsRecursiveSync(c.paths.template.appConfigsDir, c.paths.project.appConfigsDir); - - const appConfigIds = listAppConfigsFoldersSync(false); - - // Update App Title to match package.json - try { - const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; - appConfigIds.forEach((v) => { - const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); - const appConfig = readObjectSync(appConfigPath); - if (appConfig) { - if (appConfig.skipBootstrapCopy) { - fsUnlinkSync(appConfigPath); - if (v !== 'base') { - removeDirSync(path.join(c.paths.project.appConfigsDir, v)); - } - } else if (!appConfig.hidden) { - appConfig.common = appConfig.common || {}; - //TODO: this needs to use bootstrap_metadata to work properly - // appConfig.common.title = c.files.project.config?.defaults?.title; - // appConfig.common.id = c.files.project.config?.defaults?.id; - - if (supPlats && appConfig.platforms) { - (Object.keys(appConfig.platforms) as PlatformKey[]).forEach((pk) => { - if (!supPlats.includes(pk)) { - delete appConfig.platforms?.[pk]; - } - }); - } - - writeRenativeConfigFile(appConfigPath, appConfig); - } - } - }); - } catch (e) { - logError(e); - } - } -}; - -const _configureProjectConfig = (c: RnvContext) => - new Promise((resolve) => { - // Check projectConfigs - logDebug('configureProject:check projectConfigs'); - if (!fsExistsSync(c.paths.project.appConfigBase.dir)) { - logInfo( - `Your projectConfig folder ${chalk().bold( - c.paths.project.appConfigBase.dir - )} is missing! CREATING...DONE` - ); - copyFolderContentsRecursiveSync(c.paths.template.appConfigBase.dir, c.paths.project.appConfigBase.dir); - } - resolve(); - }); - -const _configureRenativeConfig = async (c: RnvContext) => { - // renative.json - const templateConfig = readObjectSync(c.paths.template.configTemplate); - logDebug('configureProject:check renative.json'); - - if (c.runtime.selectedTemplate || c.runtime.requiresForcedTemplateApply || c.files.project.config?.isNew) { - logInfo( - `Your ${c.paths.project.config} needs to be updated with ${c.paths.template.configTemplate}. UPDATING...DONE` - ); - const mergedObjBase = getProjectTemplateMergedConfig(templateConfig); - if (mergedObjBase) { - const mergedObj = { ...mergedObjBase, ...(mergedObjBase.templateConfig?.renative_json || {}) }; - - // Do not override supportedPlatforms - mergedObj.defaults = mergedObj.defaults || {}; - mergedObj.defaults.supportedPlatforms = c.files.project.config_original?.defaults?.supportedPlatforms; - // Do not override engines - mergedObj.engines = c.files.project.config_original?.engines; - // Set current template - if (c.runtime.currentTemplate) { - mergedObj.currentTemplate = c.runtime.currentTemplate; - } - - // mergedObj.isNew = null; - delete mergedObj.isNew; - delete mergedObj.templateConfig; - // c.files.project.config = mergedObj; - writeRenativeConfigFile(c.paths.project.config, mergedObj); - loadFileExtended(c.files.project, c.paths.project, 'config'); - } - } - - return true; -}; +// const _configureAppConfigs = async (c: RnvContext) => { +// // Check appConfigs +// logDebug('configureProject:check appConfigs'); +// // +// if (!fsExistsSync(c.paths.project.appConfigsDir)) { +// logInfo( +// `Your appConfig folder ${chalk().bold( +// c.paths.project.appConfigsDir +// )} is missing! ReNative will create one from template.` +// ); + +// // TODO: GET CORRECT PROJECT TEMPLATE +// copyFolderContentsRecursiveSync(c.paths.template.appConfigsDir, c.paths.project.appConfigsDir); + +// const appConfigIds = listAppConfigsFoldersSync(false); + +// // Update App Title to match package.json +// try { +// const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; +// appConfigIds.forEach((v) => { +// const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); +// const appConfig = readObjectSync(appConfigPath); +// if (appConfig) { +// if (appConfig.skipBootstrapCopy) { +// fsUnlinkSync(appConfigPath); +// if (v !== 'base') { +// removeDirSync(path.join(c.paths.project.appConfigsDir, v)); +// } +// } else if (!appConfig.hidden) { +// appConfig.common = appConfig.common || {}; +// //TODO: this needs to use bootstrap_metadata to work properly +// // appConfig.common.title = c.files.project.config?.defaults?.title; +// // appConfig.common.id = c.files.project.config?.defaults?.id; + +// if (supPlats && appConfig.platforms) { +// (Object.keys(appConfig.platforms) as PlatformKey[]).forEach((pk) => { +// if (!supPlats.includes(pk)) { +// delete appConfig.platforms?.[pk]; +// } +// }); +// } + +// writeRenativeConfigFile(appConfigPath, appConfig); +// } +// } +// }); +// } catch (e) { +// logError(e); +// } +// } +// }; + +// const _configureProjectConfig = (c: RnvContext) => +// new Promise((resolve) => { +// // Check projectConfigs +// logDebug('configureProject:check projectConfigs'); +// if (!fsExistsSync(c.paths.project.appConfigBase.dir)) { +// logInfo( +// `Your projectConfig folder ${chalk().bold( +// c.paths.project.appConfigBase.dir +// )} is missing! CREATING...DONE` +// ); +// copyFolderContentsRecursiveSync(c.paths.template.appConfigBase.dir, c.paths.project.appConfigBase.dir); +// } +// resolve(); +// }); + +// const _configureRenativeConfig = async (c: RnvContext) => { +// // renative.json +// const templateConfig = readObjectSync(c.paths.template.configTemplate); +// logDebug('configureProject:check renative.json'); + +// if (c.runtime.selectedTemplate || c.runtime.requiresForcedTemplateApply || c.files.project.config?.isNew) { +// logInfo( +// `Your ${c.paths.project.config} needs to be updated with ${c.paths.template.configTemplate}. UPDATING...DONE` +// ); +// const mergedObjBase = getProjectTemplateMergedConfig(templateConfig); +// if (mergedObjBase) { +// const mergedObj = { ...mergedObjBase, ...(mergedObjBase.templateConfig?.renative_json || {}) }; + +// // Do not override supportedPlatforms +// mergedObj.defaults = mergedObj.defaults || {}; +// mergedObj.defaults.supportedPlatforms = c.files.project.config_original?.defaults?.supportedPlatforms; +// // Do not override engines +// mergedObj.engines = c.files.project.config_original?.engines; +// // Set current template +// if (c.runtime.currentTemplate) { +// mergedObj.currentTemplate = c.runtime.currentTemplate; +// } + +// // mergedObj.isNew = null; +// delete mergedObj.isNew; +// delete mergedObj.templateConfig; +// // c.files.project.config = mergedObj; +// writeRenativeConfigFile(c.paths.project.config, mergedObj); +// loadFileExtended(c.files.project, c.paths.project, 'config'); +// } +// } + +// return true; +// }; const getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | null) => { const c = getContext(); @@ -360,8 +349,7 @@ export const applyTemplate = async (selectedTemplate?: string) => { } await _applyTemplate(c); - await _configureSrc(c); - await _configureAppConfigs(c); - await _configureProjectConfig(c); - await _configureRenativeConfig(c); + // await _configureAppConfigs(c); + // await _configureProjectConfig(c); + // await _configureRenativeConfig(c); }; diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index 8f1cbb5d58..09d15b6bf5 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -16,15 +16,18 @@ import { RnvTask, ConfigFileApp, RnvTaskName, + getContext, } from '@rnv/core'; -const fn: RnvTaskFn = async (c) => { +const fn: RnvTaskFn = async () => { logTask('taskAppCreate'); await configureRuntimeDefaults(); let sourcePath: string | undefined; + const c = getContext(); + if (c.program.opts().sourceAppConfigID) { const sourceAppConfigDirPath = path.join(c.paths.project.appConfigsDir, c.program.opts().sourceAppConfigID); @@ -166,6 +169,14 @@ const fn: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Create new app config', fn, + options: [ + { + key: 'sourceAppConfigID', + isValueType: true, + isRequired: true, + description: 'name of source appConfig folder to copy from', + }, + ], task: RnvTaskName.appCreate, }; diff --git a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts index 14f2c3d211..a3abc8c216 100644 --- a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts +++ b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts @@ -178,14 +178,14 @@ export const generateProjectOverview = (data: NewProjectData) => { const str = ` Generated Project Summary: ------------------------- - Project Name: ${highlight(inputs.projectName)} + Project Name (--projectName): ${highlight(inputs.projectName)} Package name: ${highlight(inputs.packageName)} - Workspace: ${highlight(inputs.workspaceID)} - App Title: ${highlight(inputs.appTitle)} - App Version: ${highlight(inputs.appVersion)} - App ID: ${highlight(inputs.appID)} - Project Template: ${highlight(tempString)} - Git Enabled: ${highlight(inputs.confirmEnableGit)} + Project Version (--appVersion): ${highlight(inputs.appVersion)} + Workspace (--workspace): ${highlight(inputs.workspaceID)} + App Title (--title): ${highlight(inputs.appTitle)} + App ID (--id): ${highlight(inputs.appID)} + Project Template (--template): ${highlight(tempString)} + Git Enabled (--gitEnabled): ${highlight(inputs.confirmEnableGit)} Enabled Platforms: ${highlight((inputs.supportedPlatforms || []).join(', '))} ------------------------- ${chalk().green('✔ Your project is ready!')} Run it with: diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index cee6b9a7fe..ac8c130e85 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -7,6 +7,7 @@ import { applyTemplate, configureTemplateFiles, generateLocalJsonSchemas, + RnvTaskOptions, } from '@rnv/core'; import inquiryProjectFolder from './questions/projectFolder'; import inquiryBootstrapQuestions from './questions/bootstrapQuestions'; @@ -84,7 +85,18 @@ const Task: RnvTask = { description: 'Create new ReNative project', fn, task: RnvTaskName.new, - options: [{ key: 'template', description: 'Template to use' }], + options: [ + RnvTaskOptions.gitEnabled, + RnvTaskOptions.answer, + RnvTaskOptions.workspace, + RnvTaskOptions.template, + RnvTaskOptions.projectName, + RnvTaskOptions.projectTemplate, + RnvTaskOptions.templateVersion, + RnvTaskOptions.title, + RnvTaskOptions.appVersion, + RnvTaskOptions.id, + ], isGlobalScope: true, isPriorityOrder: true, }; From d77ae221bf13f7732137bf312058901577c264d5 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 05:21:01 +0100 Subject: [PATCH 111/175] fix UTs --- __mocks__/@rnv/core.ts | 5 ++++- packages/core/src/context/__tests__/index.test.ts | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/__mocks__/@rnv/core.ts b/__mocks__/@rnv/core.ts index cb6107a314..067a132653 100644 --- a/__mocks__/@rnv/core.ts +++ b/__mocks__/@rnv/core.ts @@ -61,6 +61,7 @@ const generateRnvConfigFileObj = () => { }; const generateContextDefaults = (ctx?: Context) => { + const _opts = {}; const runtime: any = { currentEngine: { rootPath: '' }, enginesByPlatform: {}, @@ -99,7 +100,9 @@ const generateContextDefaults = (ctx?: Context) => { runtimePropsInjects: [], supportedPlatforms: [], systemPropsInjects: [], - program: {}, + program: { + opts: () => _opts, + }, buildConfig: {}, command: '', subCommand: '', diff --git a/packages/core/src/context/__tests__/index.test.ts b/packages/core/src/context/__tests__/index.test.ts index 979d433058..f8923d10a0 100644 --- a/packages/core/src/context/__tests__/index.test.ts +++ b/packages/core/src/context/__tests__/index.test.ts @@ -9,7 +9,9 @@ describe('Context tests', () => { it('test getContext returns object with keys', async () => { // GIVEN createRnvContext({ - program: {} as any, //Not important for this test + program: { + opts: () => ({}), + } as any, //Not important for this test process: process, cmd: 'command', subCmd: 'subcommand', From 1c0e0bd2048e08a4d73f7039111d25558e78d14b Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 12:12:13 +0100 Subject: [PATCH 112/175] revert template apply old code (until new err handling for applyTemplate provided) --- packages/core/src/templates/index.ts | 221 +++++++++--------- .../bootstrap/questions/installProject.ts | 2 +- 2 files changed, 111 insertions(+), 112 deletions(-) diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index 63f9f7d9e5..dd969e87f6 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -8,21 +8,21 @@ import { readObjectSync, fsExistsSync, fsLstatSync, - // fsUnlinkSync, - // removeDirSync, + fsUnlinkSync, + removeDirSync, } from '../system/fs'; import { chalk, logError, logInfo, logWarning, logDefault, logDebug } from '../logger'; -// import { loadFileExtended } from '../configs'; +import { loadFileExtended } from '../configs'; import { doResolve } from '../system/resolve'; import { RnvContext } from '../context/types'; import { generateOptions, inquirerPrompt } from '../api'; import { PromptOptions } from '../api/types'; import { RnvPlatform } from '../types'; -// import { listAppConfigsFoldersSync } from '../configs/appConfigs'; +import { listAppConfigsFoldersSync } from '../configs/appConfigs'; import { writeRenativeConfigFile } from '../configs/utils'; import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; -import { ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -// import { PlatformKey } from '../schema/types'; +import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; +import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; @@ -89,107 +89,107 @@ const _applyTemplate = async (c: RnvContext) => { return true; }; -// const _configureAppConfigs = async (c: RnvContext) => { -// // Check appConfigs -// logDebug('configureProject:check appConfigs'); -// // -// if (!fsExistsSync(c.paths.project.appConfigsDir)) { -// logInfo( -// `Your appConfig folder ${chalk().bold( -// c.paths.project.appConfigsDir -// )} is missing! ReNative will create one from template.` -// ); - -// // TODO: GET CORRECT PROJECT TEMPLATE -// copyFolderContentsRecursiveSync(c.paths.template.appConfigsDir, c.paths.project.appConfigsDir); - -// const appConfigIds = listAppConfigsFoldersSync(false); - -// // Update App Title to match package.json -// try { -// const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; -// appConfigIds.forEach((v) => { -// const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); -// const appConfig = readObjectSync(appConfigPath); -// if (appConfig) { -// if (appConfig.skipBootstrapCopy) { -// fsUnlinkSync(appConfigPath); -// if (v !== 'base') { -// removeDirSync(path.join(c.paths.project.appConfigsDir, v)); -// } -// } else if (!appConfig.hidden) { -// appConfig.common = appConfig.common || {}; -// //TODO: this needs to use bootstrap_metadata to work properly -// // appConfig.common.title = c.files.project.config?.defaults?.title; -// // appConfig.common.id = c.files.project.config?.defaults?.id; - -// if (supPlats && appConfig.platforms) { -// (Object.keys(appConfig.platforms) as PlatformKey[]).forEach((pk) => { -// if (!supPlats.includes(pk)) { -// delete appConfig.platforms?.[pk]; -// } -// }); -// } - -// writeRenativeConfigFile(appConfigPath, appConfig); -// } -// } -// }); -// } catch (e) { -// logError(e); -// } -// } -// }; - -// const _configureProjectConfig = (c: RnvContext) => -// new Promise((resolve) => { -// // Check projectConfigs -// logDebug('configureProject:check projectConfigs'); -// if (!fsExistsSync(c.paths.project.appConfigBase.dir)) { -// logInfo( -// `Your projectConfig folder ${chalk().bold( -// c.paths.project.appConfigBase.dir -// )} is missing! CREATING...DONE` -// ); -// copyFolderContentsRecursiveSync(c.paths.template.appConfigBase.dir, c.paths.project.appConfigBase.dir); -// } -// resolve(); -// }); - -// const _configureRenativeConfig = async (c: RnvContext) => { -// // renative.json -// const templateConfig = readObjectSync(c.paths.template.configTemplate); -// logDebug('configureProject:check renative.json'); - -// if (c.runtime.selectedTemplate || c.runtime.requiresForcedTemplateApply || c.files.project.config?.isNew) { -// logInfo( -// `Your ${c.paths.project.config} needs to be updated with ${c.paths.template.configTemplate}. UPDATING...DONE` -// ); -// const mergedObjBase = getProjectTemplateMergedConfig(templateConfig); -// if (mergedObjBase) { -// const mergedObj = { ...mergedObjBase, ...(mergedObjBase.templateConfig?.renative_json || {}) }; - -// // Do not override supportedPlatforms -// mergedObj.defaults = mergedObj.defaults || {}; -// mergedObj.defaults.supportedPlatforms = c.files.project.config_original?.defaults?.supportedPlatforms; -// // Do not override engines -// mergedObj.engines = c.files.project.config_original?.engines; -// // Set current template -// if (c.runtime.currentTemplate) { -// mergedObj.currentTemplate = c.runtime.currentTemplate; -// } - -// // mergedObj.isNew = null; -// delete mergedObj.isNew; -// delete mergedObj.templateConfig; -// // c.files.project.config = mergedObj; -// writeRenativeConfigFile(c.paths.project.config, mergedObj); -// loadFileExtended(c.files.project, c.paths.project, 'config'); -// } -// } - -// return true; -// }; +const _configureAppConfigs = async (c: RnvContext) => { + // Check appConfigs + logDebug('configureProject:check appConfigs'); + // + if (!fsExistsSync(c.paths.project.appConfigsDir)) { + logInfo( + `Your appConfig folder ${chalk().bold( + c.paths.project.appConfigsDir + )} is missing! ReNative will create one from template.` + ); + + // TODO: GET CORRECT PROJECT TEMPLATE + copyFolderContentsRecursiveSync(c.paths.template.appConfigsDir, c.paths.project.appConfigsDir); + + const appConfigIds = listAppConfigsFoldersSync(false); + + // Update App Title to match package.json + try { + const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; + appConfigIds.forEach((v) => { + const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); + const appConfig = readObjectSync(appConfigPath); + if (appConfig) { + if (appConfig.skipBootstrapCopy) { + fsUnlinkSync(appConfigPath); + if (v !== 'base') { + removeDirSync(path.join(c.paths.project.appConfigsDir, v)); + } + } else if (!appConfig.hidden) { + appConfig.common = appConfig.common || {}; + //TODO: this needs to use bootstrap_metadata to work properly + // appConfig.common.title = c.files.project.config?.defaults?.title; + // appConfig.common.id = c.files.project.config?.defaults?.id; + + if (supPlats && appConfig.platforms) { + (Object.keys(appConfig.platforms) as PlatformKey[]).forEach((pk) => { + if (!supPlats.includes(pk)) { + delete appConfig.platforms?.[pk]; + } + }); + } + + writeRenativeConfigFile(appConfigPath, appConfig); + } + } + }); + } catch (e) { + logError(e); + } + } +}; + +const _configureProjectConfig = (c: RnvContext) => + new Promise((resolve) => { + // Check projectConfigs + logDebug('configureProject:check projectConfigs'); + if (!fsExistsSync(c.paths.project.appConfigBase.dir)) { + logInfo( + `Your projectConfig folder ${chalk().bold( + c.paths.project.appConfigBase.dir + )} is missing! CREATING...DONE` + ); + copyFolderContentsRecursiveSync(c.paths.template.appConfigBase.dir, c.paths.project.appConfigBase.dir); + } + resolve(); + }); + +const _configureRenativeConfig = async (c: RnvContext) => { + // renative.json + const templateConfig = readObjectSync(c.paths.template.configTemplate); + logDebug('configureProject:check renative.json'); + + if (c.runtime.selectedTemplate || c.runtime.requiresForcedTemplateApply) { + logInfo( + `Your ${c.paths.project.config} needs to be updated with ${c.paths.template.configTemplate}. UPDATING...DONE` + ); + const mergedObjBase = getProjectTemplateMergedConfig(templateConfig); + if (mergedObjBase) { + const mergedObj = { ...mergedObjBase, ...(mergedObjBase.templateConfig?.renative_json || {}) }; + + // Do not override supportedPlatforms + mergedObj.defaults = mergedObj.defaults || {}; + mergedObj.defaults.supportedPlatforms = c.files.project.config_original?.defaults?.supportedPlatforms; + // Do not override engines + mergedObj.engines = c.files.project.config_original?.engines; + // Set current template + if (c.runtime.currentTemplate) { + mergedObj.currentTemplate = c.runtime.currentTemplate; + } + + // mergedObj.isNew = null; + // delete mergedObj.isNew; + delete mergedObj.templateConfig; + // c.files.project.config = mergedObj; + writeRenativeConfigFile(c.paths.project.config, mergedObj); + loadFileExtended(c.files.project, c.paths.project, 'config'); + } + } + + return true; +}; const getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | null) => { const c = getContext(); @@ -316,7 +316,6 @@ export const applyTemplate = async (selectedTemplate?: string) => { if (!c.files.project.config) { logError('Project config not loaded. cannot apply template'); - console.trace('DJDJDJD'); return false; } @@ -349,7 +348,7 @@ export const applyTemplate = async (selectedTemplate?: string) => { } await _applyTemplate(c); - // await _configureAppConfigs(c); - // await _configureProjectConfig(c); - // await _configureRenativeConfig(c); + await _configureAppConfigs(c); + await _configureProjectConfig(c); + await _configureRenativeConfig(c); }; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/installProject.ts b/packages/engine-core/src/tasks/bootstrap/questions/installProject.ts index 0d70e029de..2b0a6da873 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/installProject.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/installProject.ts @@ -8,7 +8,7 @@ const Question = async (data: NewProjectData) => { const { confirmInstallProject } = await inquirerPrompt({ name: 'confirmInstallProject', type: 'confirm', - message: 'Project is ready. Do you want to all project dependencies now?', + message: 'Project is ready. Do you want to install all dependencies now?', }); inputs.confirmProjectInstall = confirmInstallProject; From d9d386bb2477f22fa40829eca814cc14c623af7d Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 25 Mar 2024 15:05:34 +0100 Subject: [PATCH 113/175] fix template gen --- packages/core/src/configs/index.ts | 15 +- packages/core/src/templates/index.ts | 221 +++++++++--------- .../src/tasks/project/taskProjectConfigure.ts | 8 +- .../template-starter/renative.template.json | 5 +- 4 files changed, 129 insertions(+), 120 deletions(-) diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index cc78ed994c..17ea300df0 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -3,7 +3,7 @@ import path from 'path'; import { mergeObjects, fsExistsSync, fsReaddirSync, getRealPath, readObjectSync, loadFile } from '../system/fs'; import { logWarning, logDebug, logDefault, chalk } from '../logger'; import { doResolve } from '../system/resolve'; -import { RnvContextFileObj, RnvContextPathObj, RnvContext, RnvContextFileKey } from '../context/types'; +import { RnvContextFileObj, RnvContextPathObj, RnvContextFileKey } from '../context/types'; import { generateRnvConfigPathObj } from '../context/defaults'; import { generateContextPaths } from '../context'; import { generateBuildConfig } from './buildConfig'; @@ -61,7 +61,6 @@ export const loadFileExtended = (fileObj: Record, pathObj: RnvConte }; const _loadConfigFiles = ( - c: RnvContext, fileObj: RnvContextFileObj, pathObj: RnvContextPathObj, parseAppConfigs?: boolean @@ -243,7 +242,7 @@ export const parseRenativeConfigs = async () => { loadFile(c.files.project, c.paths.project, 'package'); // LOAD ./RENATIVE.*.JSON - _loadConfigFiles(c, c.files.project, c.paths.project); + _loadConfigFiles(c.files.project, c.paths.project); if (c.runtime.appId) { c.paths.project.builds.config = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${c.platform}.json`); @@ -258,7 +257,7 @@ export const parseRenativeConfigs = async () => { const wsDir = getRealPath(await getWorkspaceDirPath(c)); if (wsDir) { generateContextPaths(c.paths.workspace, wsDir); - _loadConfigFiles(c, c.files.workspace, c.paths.workspace); + _loadConfigFiles(c.files.workspace, c.paths.workspace); } // LOAD DEFAULT WORKSPACE //not needed anymore. loaded at the initial stage @@ -286,7 +285,7 @@ export const parseRenativeConfigs = async () => { c.paths.workspace.project, path.join(c.paths.workspace.dir, c.files.project.config.projectName) ); - _loadConfigFiles(c, c.files.workspace.project, c.paths.workspace.project); + _loadConfigFiles(c.files.workspace.project, c.paths.workspace.project); c.paths.workspace.project.appConfigBase.dir = path.join(c.paths.workspace.project.dir, 'appConfigs', 'base'); @@ -300,7 +299,7 @@ export const parseRenativeConfigs = async () => { // ); if (c.runtime.appConfigDir) { generateContextPaths(c.paths.appConfig, c.runtime.appConfigDir); - _loadConfigFiles(c, c.files.appConfig, c.paths.appConfig, true); + _loadConfigFiles(c.files.appConfig, c.paths.appConfig, true); } } @@ -313,7 +312,7 @@ export const parseRenativeConfigs = async () => { path.join(c.paths.workspace.project.appConfigsDir, c.runtime.appId) ); - _loadConfigFiles(c, c.files.workspace.appConfig, c.paths.workspace.appConfig, true); + _loadConfigFiles(c.files.workspace.appConfig, c.paths.workspace.appConfig, true); loadFile(c.files.project.assets, c.paths.project.assets, 'config'); @@ -323,7 +322,7 @@ export const parseRenativeConfigs = async () => { const wsPathReal = getRealPath(wsPath); if (wsPathReal) { generateContextPaths(c.paths.workspace, wsPathReal); - _loadConfigFiles(c, c.files.workspace, c.paths.workspace); + _loadConfigFiles(c.files.workspace, c.paths.workspace); } } diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index dd969e87f6..288216415d 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -8,21 +8,21 @@ import { readObjectSync, fsExistsSync, fsLstatSync, - fsUnlinkSync, - removeDirSync, + // fsUnlinkSync, + // removeDirSync, } from '../system/fs'; import { chalk, logError, logInfo, logWarning, logDefault, logDebug } from '../logger'; -import { loadFileExtended } from '../configs'; +// import { loadFileExtended } from '../configs'; import { doResolve } from '../system/resolve'; import { RnvContext } from '../context/types'; import { generateOptions, inquirerPrompt } from '../api'; import { PromptOptions } from '../api/types'; import { RnvPlatform } from '../types'; -import { listAppConfigsFoldersSync } from '../configs/appConfigs'; +// import { listAppConfigsFoldersSync } from '../configs/appConfigs'; import { writeRenativeConfigFile } from '../configs/utils'; import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; -import { ConfigFileApp, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -import { PlatformKey } from '../schema/types'; +import { ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; +// import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; @@ -89,107 +89,108 @@ const _applyTemplate = async (c: RnvContext) => { return true; }; -const _configureAppConfigs = async (c: RnvContext) => { - // Check appConfigs - logDebug('configureProject:check appConfigs'); - // - if (!fsExistsSync(c.paths.project.appConfigsDir)) { - logInfo( - `Your appConfig folder ${chalk().bold( - c.paths.project.appConfigsDir - )} is missing! ReNative will create one from template.` - ); - - // TODO: GET CORRECT PROJECT TEMPLATE - copyFolderContentsRecursiveSync(c.paths.template.appConfigsDir, c.paths.project.appConfigsDir); - - const appConfigIds = listAppConfigsFoldersSync(false); - - // Update App Title to match package.json - try { - const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; - appConfigIds.forEach((v) => { - const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); - const appConfig = readObjectSync(appConfigPath); - if (appConfig) { - if (appConfig.skipBootstrapCopy) { - fsUnlinkSync(appConfigPath); - if (v !== 'base') { - removeDirSync(path.join(c.paths.project.appConfigsDir, v)); - } - } else if (!appConfig.hidden) { - appConfig.common = appConfig.common || {}; - //TODO: this needs to use bootstrap_metadata to work properly - // appConfig.common.title = c.files.project.config?.defaults?.title; - // appConfig.common.id = c.files.project.config?.defaults?.id; - - if (supPlats && appConfig.platforms) { - (Object.keys(appConfig.platforms) as PlatformKey[]).forEach((pk) => { - if (!supPlats.includes(pk)) { - delete appConfig.platforms?.[pk]; - } - }); - } - - writeRenativeConfigFile(appConfigPath, appConfig); - } - } - }); - } catch (e) { - logError(e); - } - } -}; - -const _configureProjectConfig = (c: RnvContext) => - new Promise((resolve) => { - // Check projectConfigs - logDebug('configureProject:check projectConfigs'); - if (!fsExistsSync(c.paths.project.appConfigBase.dir)) { - logInfo( - `Your projectConfig folder ${chalk().bold( - c.paths.project.appConfigBase.dir - )} is missing! CREATING...DONE` - ); - copyFolderContentsRecursiveSync(c.paths.template.appConfigBase.dir, c.paths.project.appConfigBase.dir); - } - resolve(); - }); - -const _configureRenativeConfig = async (c: RnvContext) => { - // renative.json - const templateConfig = readObjectSync(c.paths.template.configTemplate); - logDebug('configureProject:check renative.json'); - - if (c.runtime.selectedTemplate || c.runtime.requiresForcedTemplateApply) { - logInfo( - `Your ${c.paths.project.config} needs to be updated with ${c.paths.template.configTemplate}. UPDATING...DONE` - ); - const mergedObjBase = getProjectTemplateMergedConfig(templateConfig); - if (mergedObjBase) { - const mergedObj = { ...mergedObjBase, ...(mergedObjBase.templateConfig?.renative_json || {}) }; - - // Do not override supportedPlatforms - mergedObj.defaults = mergedObj.defaults || {}; - mergedObj.defaults.supportedPlatforms = c.files.project.config_original?.defaults?.supportedPlatforms; - // Do not override engines - mergedObj.engines = c.files.project.config_original?.engines; - // Set current template - if (c.runtime.currentTemplate) { - mergedObj.currentTemplate = c.runtime.currentTemplate; - } - - // mergedObj.isNew = null; - // delete mergedObj.isNew; - delete mergedObj.templateConfig; - // c.files.project.config = mergedObj; - writeRenativeConfigFile(c.paths.project.config, mergedObj); - loadFileExtended(c.files.project, c.paths.project, 'config'); - } - } - - return true; -}; +// DEPRECATED - left here only for temporary reference +// const _configureAppConfigs = async (c: RnvContext) => { +// // Check appConfigs +// logDebug('configureProject:check appConfigs'); +// // +// if (!fsExistsSync(c.paths.project.appConfigsDir)) { +// logInfo( +// `Your appConfig folder ${chalk().bold( +// c.paths.project.appConfigsDir +// )} is missing! ReNative will create one from template.` +// ); + +// // TODO: GET CORRECT PROJECT TEMPLATE +// copyFolderContentsRecursiveSync(c.paths.template.appConfigsDir, c.paths.project.appConfigsDir); + +// const appConfigIds = listAppConfigsFoldersSync(false); + +// // Update App Title to match package.json +// try { +// const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; +// appConfigIds.forEach((v) => { +// const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); +// const appConfig = readObjectSync(appConfigPath); +// if (appConfig) { +// if (appConfig.skipBootstrapCopy) { +// fsUnlinkSync(appConfigPath); +// if (v !== 'base') { +// removeDirSync(path.join(c.paths.project.appConfigsDir, v)); +// } +// } else if (!appConfig.hidden) { +// appConfig.common = appConfig.common || {}; +// //TODO: this needs to use bootstrap_metadata to work properly +// // appConfig.common.title = c.files.project.config?.defaults?.title; +// // appConfig.common.id = c.files.project.config?.defaults?.id; + +// if (supPlats && appConfig.platforms) { +// (Object.keys(appConfig.platforms) as PlatformKey[]).forEach((pk) => { +// if (!supPlats.includes(pk)) { +// delete appConfig.platforms?.[pk]; +// } +// }); +// } + +// writeRenativeConfigFile(appConfigPath, appConfig); +// } +// } +// }); +// } catch (e) { +// logError(e); +// } +// } +// }; + +// const _configureProjectConfig = (c: RnvContext) => +// new Promise((resolve) => { +// // Check projectConfigs +// logDebug('configureProject:check projectConfigs'); +// if (!fsExistsSync(c.paths.project.appConfigBase.dir)) { +// logInfo( +// `Your projectConfig folder ${chalk().bold( +// c.paths.project.appConfigBase.dir +// )} is missing! CREATING...DONE` +// ); +// copyFolderContentsRecursiveSync(c.paths.template.appConfigBase.dir, c.paths.project.appConfigBase.dir); +// } +// resolve(); +// }); + +// const _configureRenativeConfig = async (c: RnvContext) => { +// // renative.json +// const templateConfig = readObjectSync(c.paths.template.configTemplate); +// logDebug('configureProject:check renative.json'); + +// if (c.runtime.selectedTemplate || c.runtime.requiresForcedTemplateApply || c.files.project.config?.isNew) { +// logInfo( +// `Your ${c.paths.project.config} needs to be updated with ${c.paths.template.configTemplate}. UPDATING...DONE` +// ); +// const mergedObjBase = getProjectTemplateMergedConfig(templateConfig); +// if (mergedObjBase) { +// const mergedObj = { ...mergedObjBase, ...(mergedObjBase.templateConfig?.renative_json || {}) }; + +// // Do not override supportedPlatforms +// mergedObj.defaults = mergedObj.defaults || {}; +// mergedObj.defaults.supportedPlatforms = c.files.project.config_original?.defaults?.supportedPlatforms; +// // Do not override engines +// mergedObj.engines = c.files.project.config_original?.engines; +// // Set current template +// if (c.runtime.currentTemplate) { +// mergedObj.currentTemplate = c.runtime.currentTemplate; +// } + +// // mergedObj.isNew = null; +// delete mergedObj.isNew; +// delete mergedObj.templateConfig; +// // c.files.project.config = mergedObj; +// writeRenativeConfigFile(c.paths.project.config, mergedObj); +// loadFileExtended(c.files.project, c.paths.project, 'config'); +// } +// } + +// return true; +// }; const getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | null) => { const c = getContext(); @@ -348,7 +349,7 @@ export const applyTemplate = async (selectedTemplate?: string) => { } await _applyTemplate(c); - await _configureAppConfigs(c); - await _configureProjectConfig(c); - await _configureRenativeConfig(c); + // await _configureAppConfigs(c); + // await _configureProjectConfig(c); + // await _configureRenativeConfig(c); }; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index dc9d5da510..3556295373 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -28,6 +28,9 @@ import { generateLocalJsonSchemas, RnvTaskName, getContext, + // parseRenativeConfigs, + // parseAppConfigs, + // loadFileExtended, } from '@rnv/core'; import { checkCrypto } from '../crypto/common'; import { installPackageDependenciesAndPlugins } from '../../plugins'; @@ -93,6 +96,8 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { } } await applyTemplate(); + // We need to ensure appConfigs are populated from template before proceeding further + await configureTemplateFiles(); await configureRuntimeDefaults(); await executeTask(RnvTaskName.install, RnvTaskName.projectConfigure, originTask); await executeTask(RnvTaskName.appConfigure, RnvTaskName.projectConfigure, originTask); @@ -122,7 +127,8 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { } await copyRuntimeAssets(); - await configureTemplateFiles(); + // Moved this up stream to ensure all configs are ready before copyRuntimeAssets + // await configureTemplateFiles(); if (!c.buildConfig.platforms) { await updateRenativeConfigs(); diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index 9fe26de59d..1a0e5643e7 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -13,7 +13,10 @@ "tsconfig.json", "babel.config.js", "typings", - ".gitignore" + ".gitignore", + "appConfigs/app", + "appConfigs/base/assets", + "appConfigs/base/fonts" ] }, { From fbcc7c527585cd35a40d94220bf2301ddfb6e33e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 26 Mar 2024 08:35:11 +0100 Subject: [PATCH 114/175] fix task selection, add unique key for each task --- packages/core/src/engines/index.ts | 64 ++++++++++---- packages/core/src/tasks/index.ts | 8 +- packages/core/src/tasks/types.ts | 2 + packages/engine-core/src/buildSchemes.ts | 2 +- packages/engine-core/src/index.ts | 105 ++++++++++++----------- packages/engine-lightning/src/index.ts | 2 +- packages/engine-rn-electron/src/index.ts | 2 +- packages/engine-rn-macos/src/index.ts | 2 +- packages/engine-rn-next/src/index.ts | 2 +- packages/engine-rn-tvos/src/index.ts | 2 +- packages/engine-rn-web/src/index.ts | 13 +-- packages/engine-rn-windows/src/index.ts | 5 +- packages/engine-rn/src/index.ts | 2 +- packages/sdk-android/src/installer.ts | 15 +--- packages/sdk-tizen/src/installer.ts | 12 +-- packages/sdk-webos/src/installer.ts | 12 +-- 16 files changed, 132 insertions(+), 118 deletions(-) diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 51743a4489..f76d6017b2 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -75,10 +75,15 @@ export const generateEngineExtensions = (exts: Array, config: ConfigFile return extArr; }; -export const generateEngineTasks = (taskArr: Array) => { +export const generateEngineTasks = (taskArr: Array, config: ConfigFileEngine) => { const tasks: RnvTaskMap = {}; + taskArr.forEach((taskInstance) => { - tasks[taskInstance.task] = taskInstance; + const plts = taskInstance.platforms || []; + const key = `${config.id}:${plts.join('-')}:${taskInstance.task}`; + taskInstance.ownerID = config.id; + taskInstance.key = key; + tasks[key] = taskInstance; }); return tasks; }; @@ -514,28 +519,52 @@ export const getEngineRunnerByPlatform = (platform: RnvPlatform, ignoreMissingEr return selectedEngine; }; -export const getEngineTask = (task: string, tasks?: RnvTaskMap, customTasks?: RnvTaskMap): RnvTask | undefined => { - const customTask = customTasks?.[task]; - if (customTask) return customTask; - let tsk; - const taskCleaned = task.split(' ')[0]; - if (tasks) { - tsk = tasks[task]; - if (!tsk) { - tsk = tasks[taskCleaned]; - } +const findByTaskName = (taskName: string, tasks: RnvTaskMap) => { + const task = Object.values(tasks).find((v) => v.task === taskName); + return task; +}; + +export const getEngineTask = (taskName: string, tasks?: RnvTaskMap, customTasks?: RnvTaskMap): RnvTask | undefined => { + // TODO: tasks need to be merged into one single map + if (customTasks) { + const customTask = findByTaskName(taskName, customTasks); + if (customTask) return customTask; + } + if (!tasks) { + return undefined; } - return tsk; + // let tsk; + // const taskCleaned = task.split(' ')[0]; + // if (tasks) { + // tsk = tasks[task]; + // if (!tsk) { + // tsk = tasks[taskCleaned]; + // } + // } + const taskInstance = findByTaskName(taskName, tasks); + return taskInstance; }; export const hasEngineTask = (task: string, tasks: RnvTaskMap, isProjectScope?: boolean) => isProjectScope ? !!getEngineTask(task, tasks) : getEngineTask(task, tasks)?.isGlobalScope; -export const getEngineSubTasks = (task: string, tasks: RnvTaskMap, exactMatch?: boolean) => - Object.values(tasks).filter((v) => - exactMatch ? v.task.split(' ')[0] === task : v.task.split(' ')[0].startsWith(task) - ); +export const getEngineSubTasks = (task: string, engine: RnvEngine, exactMatch?: boolean) => { + const ctx = getContext(); + const { tasks } = engine; + const result = Object.values(tasks).filter((v) => { + if (ctx.platform) { + if (v.platforms) { + if (!v.platforms.includes(ctx.platform)) { + return false; + } + } + } + return exactMatch ? v.task.split(' ')[0] === task : v.task.split(' ')[0].startsWith(task); + }); + + return result; +}; export const getEngineRunner = (task: string, customTasks?: RnvTaskMap, failOnMissingEngine = true) => { const c = getContext(); @@ -560,6 +589,7 @@ export const getEngineRunner = (task: string, customTasks?: RnvTaskMap, failOnMi } return undefined; } + if (hasEngineTask(task, engine.tasks, configExists)) return engine; if (hasEngineTask(task, c.runtime.enginesById[ENGINE_CORE].tasks, configExists)) { return c.runtime.enginesById[ENGINE_CORE]; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 260b92513a..a48a6130a3 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -110,6 +110,7 @@ export const getAllSuitableTasks = (): Record => { suitableTasks[taskObj.value] = taskObj; } else { // In case of multiple competing tasks (same task name but coming from different engines) + taskObj = suitableTasks[taskObj.value]; // We try to revert to generic description instead. taskObj.description = DEFAULT_TASK_DESCRIPTIONS[taskObj.value] || taskObj.description; @@ -148,6 +149,7 @@ export const findSuitableTask = async (specificTask?: string): Promise getEngineSubTasks(task, engine.tasks, true).length - ); + const autocompleteEngines = REGISTERED_ENGINES.filter((engine) => getEngineSubTasks(task, engine, true).length); const isAutoComplete = !suitableEngines.length && !!c.command && !autocompleteEngines.length; if (!suitableEngines.length) { @@ -227,7 +227,7 @@ export const findSuitableTask = async (specificTask?: string): Promise = []; REGISTERED_ENGINES.forEach((engine) => { - const st = getEngineSubTasks(task, engine.tasks); + const st = getEngineSubTasks(task, engine); st.forEach((taskInstance) => { const isNotViable = !c.paths.project.configExists && !taskInstance.isGlobalScope; diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index 2f3a031819..9fdb1494c4 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -13,6 +13,8 @@ export type RnvTask = { isPrivate?: boolean; isPriorityOrder?: boolean; ignoreEngines?: boolean; + ownerID?: string; + key?: string; }; export type TaskPromptOption = { diff --git a/packages/engine-core/src/buildSchemes.ts b/packages/engine-core/src/buildSchemes.ts index 3a882a6460..fe9765715e 100644 --- a/packages/engine-core/src/buildSchemes.ts +++ b/packages/engine-core/src/buildSchemes.ts @@ -55,6 +55,6 @@ export const isBuildSchemeSupported = async () => { c.program.opts().scheme = schemeVals[selectedScheme]; c.runtime.scheme = c.program.opts().scheme; } - logInfo(`Current Build Scheme: ${chalk().bold(c.runtime.scheme)}`); + logInfo(`Current Build Scheme2: ${chalk().bold(c.runtime.scheme)}`); return true; }; diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index 907fea5f43..f9bd84870f 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -41,59 +41,64 @@ import taskTelemetryEnable from './tasks/telemetry/taskTelemetryEnable'; import taskTelemetryDisable from './tasks/telemetry/taskTelemetryDisable'; import taskSwitch from './tasks/app/taskAppSwitch'; +const CNF = { + // title: 'Engine Core', + id: 'engine-core', + platforms: {}, + npm: {}, + engineExtension: 'core', + overview: '', +}; + const Engine: RnvEngine = { runtimeExtraProps: {}, serverDirName: '', - tasks: generateEngineTasks([ - taskCryptoDecrypt, - taskCryptoEncrypt, - taskPlatformEject, - taskPlatformConnect, - taskPlatformList, - taskPlatformConfigure, - taskPlatformSetup, - taskTemplateAdd, - taskTemplateApply, - taskTemplateList, - taskPluginAdd, - taskPluginList, - taskPluginUpdate, - taskWorkspaceList, - taskWorkspaceAdd, - taskWorkspaceConnect, - taskWorkspaceUpdate, - taskHooksList, - taskHooksRun, - taskHooksPipes, - taskClean, - taskStatus, - taskConfig, - taskHelp, - taskNew, - taskInstall, - taskProjectConfigure, - taskProjectUpgrade, - taskAppConfigure, - taskAppCreate, - taskWorkspaceConfigure, - taskConfigureSoft, - taskRvnKill, - taskRvnDoctor, - taskLink, - taskUnlink, - taskTelemetryStatus, - taskTelemetryEnable, - taskTelemetryDisable, - taskSwitch, - ]), - config: { - // title: 'Engine Core', - id: 'engine-core', - platforms: {}, - npm: {}, - engineExtension: 'core', - overview: '', - }, + tasks: generateEngineTasks( + [ + taskCryptoDecrypt, + taskCryptoEncrypt, + taskPlatformEject, + taskPlatformConnect, + taskPlatformList, + taskPlatformConfigure, + taskPlatformSetup, + taskTemplateAdd, + taskTemplateApply, + taskTemplateList, + taskPluginAdd, + taskPluginList, + taskPluginUpdate, + taskWorkspaceList, + taskWorkspaceAdd, + taskWorkspaceConnect, + taskWorkspaceUpdate, + taskHooksList, + taskHooksRun, + taskHooksPipes, + taskClean, + taskStatus, + taskConfig, + taskHelp, + taskNew, + taskInstall, + taskProjectConfigure, + taskProjectUpgrade, + taskAppConfigure, + taskAppCreate, + taskWorkspaceConfigure, + taskConfigureSoft, + taskRvnKill, + taskRvnDoctor, + taskLink, + taskUnlink, + taskTelemetryStatus, + taskTelemetryEnable, + taskTelemetryDisable, + taskSwitch, + ], + CNF + ), + config: CNF, // package: '', projectDirName: '', // ejectPlatform: null, diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index cc73aa30d0..c24793690a 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -8,7 +8,7 @@ import taskRun from './tasks/taskRun'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen]), + tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen], CNF), config: CNF, projectDirName: 'project', serverDirName: 'server', diff --git a/packages/engine-rn-electron/src/index.ts b/packages/engine-rn-electron/src/index.ts index a43ccbbc85..d0e35b7094 100644 --- a/packages/engine-rn-electron/src/index.ts +++ b/packages/engine-rn-electron/src/index.ts @@ -9,7 +9,7 @@ import taskStart from './tasks/taskStart'; import { withRNVBabel } from './adapter'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskExport]), + tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), config: CNF, projectDirName: '', serverDirName: '', diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index eaf808e180..73375fd77c 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -8,7 +8,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([...TasksSdkApple, ...TasksSdkReactNative]), + tasks: generateEngineTasks([...TasksSdkApple, ...TasksSdkReactNative], CNF), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-next/src/index.ts b/packages/engine-rn-next/src/index.ts index 8e88c399a5..f90e6ccb3a 100644 --- a/packages/engine-rn-next/src/index.ts +++ b/packages/engine-rn-next/src/index.ts @@ -10,7 +10,7 @@ import taskExport from './tasks/taskExport'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskExport]), + tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), config: CNF, projectDirName: '', runtimeExtraProps: {}, diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 818dc288ee..715748f412 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -9,7 +9,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative]), + tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', diff --git a/packages/engine-rn-web/src/index.ts b/packages/engine-rn-web/src/index.ts index 20068f09e2..55a6125494 100644 --- a/packages/engine-rn-web/src/index.ts +++ b/packages/engine-rn-web/src/index.ts @@ -11,15 +11,10 @@ import taskStart from './tasks/taskStart'; import taskDebug from './tasks/taskDebug'; const Engine: RnvEngine = { - tasks: generateEngineTasks([ - taskRun, - taskBuild, - taskConfigure, - taskStart, - taskDebug, - ...TasksSdkWebOS, - ...TasksSdkTizen, - ]), + tasks: generateEngineTasks( + [taskRun, taskBuild, taskConfigure, taskStart, taskDebug, ...TasksSdkWebOS, ...TasksSdkTizen], + CNF + ), config: CNF, projectDirName: '', serverDirName: '', diff --git a/packages/engine-rn-windows/src/index.ts b/packages/engine-rn-windows/src/index.ts index b2f60d7871..f453bc1b7c 100644 --- a/packages/engine-rn-windows/src/index.ts +++ b/packages/engine-rn-windows/src/index.ts @@ -11,7 +11,10 @@ import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-na import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskPackage, taskBuild, taskConfigure, taskExport, ...TasksSdkReactNative]), + tasks: generateEngineTasks( + [taskRun, taskPackage, taskBuild, taskConfigure, taskExport, ...TasksSdkReactNative], + CNF + ), config: CNF, projectDirName: '', runtimeExtraProps: {}, diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index 4081b089f8..9a00d4202e 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -8,7 +8,7 @@ import { withRNVBabel } from './adapters/babelAdapter'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative]), + tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/sdk-android/src/installer.ts b/packages/sdk-android/src/installer.ts index 17e516bdec..c126af8576 100644 --- a/packages/sdk-android/src/installer.ts +++ b/packages/sdk-android/src/installer.ts @@ -179,23 +179,16 @@ const _attemptAutoFix = async (c: RnvContext, sdkPlatform: string, sdkKey: SDKKe export const checkAndroidSdk = async () => { const c = getContext(); logDefault('checkAndroidSdk'); + if (!_isSdkInstalled(c)) { logWarning( - `${c.platform} requires SDK to be installed. Your SDK path in ${chalk().bold( + `${c.platform} platform requires Android SDK to be installed. Your SDK path in ${chalk().bold( c.paths.workspace.config )} does not exist: ${chalk().bold(_getCurrentSdkPath(c))}` ); - switch (c.platform) { - case 'android': - case 'androidtv': - case 'firetv': - case 'androidwear': - await _attemptAutoFix(c, 'android', 'ANDROID_SDK'); - return _attemptAutoFix(c, 'android-ndk', 'ANDROID_NDK', 'source.properties'); - default: - return true; - } + await _attemptAutoFix(c, 'android', 'ANDROID_SDK'); + return _attemptAutoFix(c, 'android-ndk', 'ANDROID_NDK', 'source.properties'); } else { await checkAndConfigureAndroidSdks(); } diff --git a/packages/sdk-tizen/src/installer.ts b/packages/sdk-tizen/src/installer.ts index 5a068780df..38abcd2fd7 100644 --- a/packages/sdk-tizen/src/installer.ts +++ b/packages/sdk-tizen/src/installer.ts @@ -112,19 +112,11 @@ export const checkTizenSdk = async () => { logDefault('checkTizenSdk'); if (!_isSdkInstalled(c)) { logWarning( - `${c.platform} requires SDK to be installed. Your SDK path in ${chalk().bold( + `${c.platform} platform requires Tizen SDK to be installed. Your SDK path in ${chalk().bold( c.paths.workspace.config )} does not exist: ${chalk().bold(_getCurrentSdkPath(c))}` ); - - switch (c.platform) { - case 'tizen': - case 'tizenmobile': - case 'tizenwatch': - return _attemptAutoFix(c); - default: - return true; - } + return _attemptAutoFix(c); } return true; }; diff --git a/packages/sdk-webos/src/installer.ts b/packages/sdk-webos/src/installer.ts index 849d249509..282a24a72b 100644 --- a/packages/sdk-webos/src/installer.ts +++ b/packages/sdk-webos/src/installer.ts @@ -104,7 +104,7 @@ const _attemptAutoFix = async (c: RnvContext) => { } } - logDefault(`_attemptAutoFix: no sdks found. searched at: ${SDK_LOCATIONS.join(', ')}`); + logError(`_attemptAutoFix: no sdks found. searched at: ${SDK_LOCATIONS.join(', ')}`); // const setupInstance = PlatformSetup(c); // await setupInstance.askToInstallSDK(sdkPlatform); @@ -118,17 +118,11 @@ export const checkWebosSdk = async () => { logDefault('checkWebosSdk'); if (!_isSdkInstalled(c)) { logWarning( - `${c.platform} requires SDK to be installed. Your SDK path in ${chalk().bold( + `${c.platform} platform requires WebOS SDK to be installed. Your SDK path in ${chalk().bold( c.paths.workspace.config )} does not exist: ${chalk().bold(_getCurrentSdkPath(c))}` ); - - switch (c.platform) { - case 'webos': - return _attemptAutoFix(c); - default: - return true; - } + return _attemptAutoFix(c); } return true; }; From dd8adef90cc3920c0deb2654987bb1011a4af519 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 00:16:05 +0100 Subject: [PATCH 115/175] refactor task system pt1 --- packages/core/src/context/defaults.ts | 1 + packages/core/src/context/types.ts | 3 +- packages/core/src/engines/index.ts | 177 ++- packages/core/src/index.ts | 3 + packages/core/src/integrations/index.ts | 12 +- packages/core/src/integrations/types.ts | 2 +- packages/core/src/runner.ts | 25 +- packages/core/src/tasks/index.ts | 1140 +++++++++-------- packages/core/src/tasks/taskCreator.ts | 6 + packages/core/src/tasks/taskHelpers.ts | 117 ++ packages/core/src/tasks/taskRegistry.ts | 15 + packages/core/src/tasks/types.ts | 16 +- packages/core/src/templates/index.ts | 2 +- packages/engine-core/src/buildSchemes.ts | 2 +- .../src/tasks/app/taskAppConfigure.ts | 2 +- .../src/tasks/app/taskAppCreate.ts | 2 +- .../src/tasks/app/taskAppSwitch.ts | 2 +- .../src/tasks/bootstrap/taskNew.ts | 2 +- .../src/tasks/crypto/taskCryptoDecrypt.ts | 2 +- .../src/tasks/crypto/taskCryptoEncrypt.ts | 2 +- .../engine-core/src/tasks/global/taskClean.ts | 2 +- .../src/tasks/global/taskConfig.ts | 2 +- .../src/tasks/global/taskDoctor.ts | 2 +- .../engine-core/src/tasks/global/taskHelp.ts | 2 +- .../src/tasks/global/taskInstall.ts | 2 +- .../engine-core/src/tasks/global/taskKill.ts | 2 +- .../src/tasks/global/taskStatus.ts | 2 +- .../src/tasks/hooks/taskHooksList.ts | 2 +- .../src/tasks/hooks/taskHooksPipes.ts | 2 +- .../src/tasks/hooks/taskHooksRun.ts | 2 +- .../engine-core/src/tasks/linking/taskLink.ts | 2 +- .../src/tasks/linking/taskUnlink.ts | 2 +- .../tasks/platform/taskPlatformConfigure.ts | 2 +- .../src/tasks/platform/taskPlatformConnect.ts | 2 +- .../src/tasks/platform/taskPlatformEject.ts | 2 +- .../src/tasks/platform/taskPlatformList.ts | 2 +- .../src/tasks/platform/taskPlatformSetup.ts | 2 +- .../src/tasks/plugin/taskPluginAdd.ts | 2 +- .../src/tasks/plugin/taskPluginList.ts | 2 +- .../src/tasks/plugin/taskPluginUpdate.ts | 2 +- .../src/tasks/project/taskConfigureSoft.ts | 2 +- .../src/tasks/project/taskProjectConfigure.ts | 2 +- .../src/tasks/project/taskProjectUpgrade.ts | 2 +- .../tasks/telemetry/taskTelemetryDisable.ts | 2 +- .../tasks/telemetry/taskTelemetryEnable.ts | 2 +- .../tasks/telemetry/taskTelemetryStatus.ts | 2 +- .../src/tasks/template/taskTemplateAdd.ts | 2 +- .../src/tasks/template/taskTemplateApply.ts | 2 +- .../src/tasks/template/taskTemplateList.ts | 2 +- .../src/tasks/workspace/taskWorkspaceAdd.ts | 3 +- .../tasks/workspace/taskWorkspaceConfigure.ts | 2 +- .../tasks/workspace/taskWorkspaceConnect.ts | 2 +- .../src/tasks/workspace/taskWorkspaceList.ts | 2 +- .../tasks/workspace/taskWorkspaceUpdate.ts | 2 +- .../engine-lightning/src/tasks/taskBuild.ts | 41 +- .../src/tasks/taskConfigure.ts | 24 +- .../engine-lightning/src/tasks/taskRun.ts | 31 +- .../engine-rn-electron/src/tasks/taskBuild.ts | 23 +- .../src/tasks/taskConfigure.ts | 37 +- .../src/tasks/taskExport.ts | 25 +- .../engine-rn-electron/src/tasks/taskRun.ts | 28 +- .../engine-rn-electron/src/tasks/taskStart.ts | 47 +- .../engine-rn-next/src/tasks/taskBuild.ts | 27 +- .../engine-rn-next/src/tasks/taskConfigure.ts | 21 +- .../engine-rn-next/src/tasks/taskExport.ts | 23 +- packages/engine-rn-next/src/tasks/taskRun.ts | 23 +- .../engine-rn-next/src/tasks/taskStart.ts | 45 +- packages/engine-rn-web/src/tasks/taskBuild.ts | 69 +- .../engine-rn-web/src/tasks/taskConfigure.ts | 59 +- packages/engine-rn-web/src/tasks/taskDebug.ts | 14 +- packages/engine-rn-web/src/tasks/taskRun.ts | 87 +- packages/engine-rn-web/src/tasks/taskStart.ts | 83 +- packages/engine-rn-windows/src/sdk/index.ts | 19 +- .../engine-rn-windows/src/tasks/taskBuild.ts | 23 +- .../src/tasks/taskConfigure.ts | 35 +- .../engine-rn-windows/src/tasks/taskExport.ts | 27 +- .../src/tasks/taskPackage.ts | 34 +- .../engine-rn-windows/src/tasks/taskRun.ts | 34 +- .../src/tasks/taskDockerDeploy.ts | 32 +- .../src/tasks/taskDockerExport.ts | 34 +- packages/integration-starter/src/index.ts | 11 +- .../src/tasks/taskSingleCommand.ts | 12 +- .../src/tasks/taskStarterHello.ts | 12 +- packages/sdk-android/src/tasks/taskBuild.ts | 30 +- .../sdk-android/src/tasks/taskConfigure.ts | 38 +- packages/sdk-android/src/tasks/taskEject.ts | 38 +- packages/sdk-android/src/tasks/taskLog.ts | 17 +- packages/sdk-android/src/tasks/taskPackage.ts | 53 +- packages/sdk-android/src/tasks/taskRun.ts | 70 +- .../sdk-android/src/tasks/taskSdkConfigure.ts | 14 +- .../sdk-android/src/tasks/taskTargetLaunch.ts | 23 +- .../sdk-android/src/tasks/taskTargetList.ts | 20 +- packages/sdk-apple/src/deviceManager.ts | 3 +- packages/sdk-apple/src/tasks/taskBuild.ts | 33 +- packages/sdk-apple/src/tasks/taskConfigure.ts | 32 +- .../src/tasks/taskCryptoInstallCerts.ts | 47 +- .../src/tasks/taskCryptoInstallProfiles.ts | 55 +- .../src/tasks/taskCryptoUpdateProfile.ts | 17 +- .../src/tasks/taskCryptoUpdateProfiles.ts | 37 +- packages/sdk-apple/src/tasks/taskEject.ts | 33 +- packages/sdk-apple/src/tasks/taskExport.ts | 25 +- packages/sdk-apple/src/tasks/taskLog.ts | 15 +- packages/sdk-apple/src/tasks/taskPackage.ts | 38 +- packages/sdk-apple/src/tasks/taskRun.ts | 59 +- .../sdk-apple/src/tasks/taskTargetLaunch.ts | 19 +- .../sdk-apple/src/tasks/taskTargetList.ts | 15 +- .../sdk-kaios/src/tasks/taskTargetLaunch.ts | 19 +- .../sdk-react-native/src/tasks/taskStart.ts | 61 +- .../sdk-tizen/src/tasks/taskSdkConfigure.ts | 14 +- .../sdk-tizen/src/tasks/taskTargetLaunch.ts | 23 +- .../sdk-tizen/src/tasks/taskTargetList.ts | 20 +- .../sdk-webos/src/tasks/taskSdkConfigure.ts | 14 +- .../sdk-webos/src/tasks/taskTargetLaunch.ts | 23 +- .../sdk-webos/src/tasks/taskTargetList.ts | 20 +- 114 files changed, 1452 insertions(+), 2055 deletions(-) create mode 100644 packages/core/src/tasks/taskCreator.ts create mode 100644 packages/core/src/tasks/taskHelpers.ts create mode 100644 packages/core/src/tasks/taskRegistry.ts diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 462f7b4d0f..0938acb57e 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -29,6 +29,7 @@ export const generateRnvConfigFileObj = () => { }; const runtime: RnvContext['runtime'] = { + integrationsByIndex: [], plugins: {}, pluginVersions: {}, enginesByPlatform: {}, diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index bafcfdf0cd..5ca05ed729 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -18,6 +18,7 @@ import { ConfigFileBuildConfig } from '../schema/configFiles/buildConfig'; import type { ParamKeys, ProgramOptionsKey } from '../tasks/constants'; import { ExecaChildProcess } from 'execa'; import { RnvPlugin } from '../plugins/types'; +import { RnvIntegration } from '../integrations/types'; export type CreateContextOptions = { program: RnvContextProgram; @@ -97,6 +98,7 @@ export type RnvContextBuildConfig = Partial & { }; export type RnvContextRuntime = { + integrationsByIndex: Array; enginesByPlatform: Record; enginesByIndex: Array; enginesById: Record; @@ -129,7 +131,6 @@ export type RnvContextRuntime = { _platformBuildsSuffix?: string; platformBuildsProjectPath?: string; targetUDID?: string; - forceBundleAssets?: boolean; webpackTarget?: string; shouldOpenBrowser?: boolean; appId?: string; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index f76d6017b2..814e135474 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -5,7 +5,7 @@ import { logDebug, logDefault, chalk, logInfo, logWarning, logError } from '../l import { doResolve } from '../system/resolve'; import { configurePlugins } from '../plugins'; import { RnvContext } from '../context/types'; -import { RnvTask, RnvTaskMap } from '../tasks/types'; +import { RnvTask } from '../tasks/types'; import { RenativeConfigVersion, RnvPlatform } from '../types'; import { RnvEngine, RnvEngineInstallConfig, RnvEngineTemplate } from './types'; import { inquirerPrompt } from '../api'; @@ -16,7 +16,7 @@ import { getEngineTemplateByPlatform } from '../configs/engines'; import { ConfigFileEngine } from '../schema/configFiles/types'; import { getConfigProp } from '../context/contextProps'; -const ENGINE_CORE = 'engine-core'; +// const ENGINE_CORE = 'engine-core'; export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, engConfig?: RnvEngineTemplate) => { const c = getContext(); @@ -75,19 +75,6 @@ export const generateEngineExtensions = (exts: Array, config: ConfigFile return extArr; }; -export const generateEngineTasks = (taskArr: Array, config: ConfigFileEngine) => { - const tasks: RnvTaskMap = {}; - - taskArr.forEach((taskInstance) => { - const plts = taskInstance.platforms || []; - const key = `${config.id}:${plts.join('-')}:${taskInstance.task}`; - taskInstance.ownerID = config.id; - taskInstance.key = key; - tasks[key] = taskInstance; - }); - return tasks; -}; - export const configureEngines = async (c: RnvContext) => { logDefault('configureEngines'); @@ -519,83 +506,87 @@ export const getEngineRunnerByPlatform = (platform: RnvPlatform, ignoreMissingEr return selectedEngine; }; -const findByTaskName = (taskName: string, tasks: RnvTaskMap) => { - const task = Object.values(tasks).find((v) => v.task === taskName); - return task; -}; - -export const getEngineTask = (taskName: string, tasks?: RnvTaskMap, customTasks?: RnvTaskMap): RnvTask | undefined => { - // TODO: tasks need to be merged into one single map - if (customTasks) { - const customTask = findByTaskName(taskName, customTasks); - if (customTask) return customTask; - } - if (!tasks) { - return undefined; - } - - // let tsk; - // const taskCleaned = task.split(' ')[0]; - // if (tasks) { - // tsk = tasks[task]; - // if (!tsk) { - // tsk = tasks[taskCleaned]; - // } - // } - const taskInstance = findByTaskName(taskName, tasks); - return taskInstance; -}; - -export const hasEngineTask = (task: string, tasks: RnvTaskMap, isProjectScope?: boolean) => - isProjectScope ? !!getEngineTask(task, tasks) : getEngineTask(task, tasks)?.isGlobalScope; - -export const getEngineSubTasks = (task: string, engine: RnvEngine, exactMatch?: boolean) => { - const ctx = getContext(); - const { tasks } = engine; - const result = Object.values(tasks).filter((v) => { - if (ctx.platform) { - if (v.platforms) { - if (!v.platforms.includes(ctx.platform)) { - return false; - } - } - } - return exactMatch ? v.task.split(' ')[0] === task : v.task.split(' ')[0].startsWith(task); - }); - - return result; -}; - -export const getEngineRunner = (task: string, customTasks?: RnvTaskMap, failOnMissingEngine = true) => { - const c = getContext(); - - if (customTasks?.[task]) { - return c.runtime.enginesById[ENGINE_CORE]; - } - - const { configExists } = c.paths.project; - - let engine = typeof c.platform === 'string' && c.runtime.enginesByPlatform[c.platform]; - if (!engine) { - engine = c.runtime.enginesById['engine-core']; - } - if (!engine) { - if (hasEngineTask(task, c.runtime.enginesById[ENGINE_CORE].tasks, configExists)) { - return c.runtime.enginesById[ENGINE_CORE]; - } - if (failOnMissingEngine) { - throw new Error(`Cound not find active engine for platform ${c.platform}. Available engines: - ${c.runtime.enginesByIndex.map((v) => v.config.id).join(', ')}`); - } - return undefined; - } - - if (hasEngineTask(task, engine.tasks, configExists)) return engine; - if (hasEngineTask(task, c.runtime.enginesById[ENGINE_CORE].tasks, configExists)) { - return c.runtime.enginesById[ENGINE_CORE]; - } - if (failOnMissingEngine) throw new Error(`Cound not find suitable executor for task ${chalk().bold(task)}`); - return undefined; -}; +// const findTasksByTaskName = (taskName: string, tasks: RnvTaskMap) => { +// const result: RnvTask[] = []; +// const task = Object.values(tasks).forEach((v) => { +// const plat = getContext().platform; +// if (v.platforms && plat) { +// if (!v.platforms.includes(plat)) { +// // If we found a task with platform restriction and it does not match current platform we skip it +// return; +// } +// } +// if (v.task === taskName) { +// result.push(v); +// } +// }); +// return result; +// }; + +// export const getEngineTask = (taskName: string, tasks?: RnvTaskMap, customTasks?: RnvTaskMap): RnvTask | undefined => { +// const result: RnvTask[] = []; + +// if (customTasks) { +// result.push(...findTasksByTaskName(taskName, customTasks)); +// } +// if (!tasks) { +// return undefined; +// } + +// const taskInstance = findByTaskName(taskName, tasks); +// return taskInstance; +// }; + +// export const hasEngineTask = (task: string, tasks: RnvTaskMap, isProjectScope?: boolean) => +// isProjectScope ? !!getEngineTask(task, tasks) : getEngineTask(task, tasks)?.isGlobalScope; + +// export const getEngineSubTasks = (task: string, engine: RnvEngine, exactMatch?: boolean) => { +// const ctx = getContext(); +// const { tasks } = engine; +// const result = Object.values(tasks).filter((v) => { +// if (ctx.platform) { +// if (v.platforms) { +// if (!v.platforms.includes(ctx.platform)) { +// return false; +// } +// } +// } +// return exactMatch ? v.task.split(' ')[0] === task : v.task.split(' ')[0].startsWith(task); +// }); + +// return result; +// }; + +// export const getEngineRunner = (task: string, customTasks?: RnvTaskMap, failOnMissingEngine = true) => { +// const c = getContext(); + +// if (customTasks?.[task]) { +// return c.runtime.enginesById[ENGINE_CORE]; +// } + +// const { configExists } = c.paths.project; + +// let engine = typeof c.platform === 'string' && c.runtime.enginesByPlatform[c.platform]; +// if (!engine) { +// engine = c.runtime.enginesById['engine-core']; +// } +// if (!engine) { +// if (hasEngineTask(task, c.runtime.enginesById[ENGINE_CORE].tasks, configExists)) { +// return c.runtime.enginesById[ENGINE_CORE]; +// } +// if (failOnMissingEngine) { +// throw new Error(`Cound not find active engine for platform ${c.platform}. Available engines: +// ${c.runtime.enginesByIndex.map((v) => v.config.id).join(', ')}`); +// } +// return undefined; +// } + +// if (hasEngineTask(task, engine.tasks, configExists)) return engine; +// if (hasEngineTask(task, c.runtime.enginesById[ENGINE_CORE].tasks, configExists)) { +// return c.runtime.enginesById[ENGINE_CORE]; +// } +// if (failOnMissingEngine) throw new Error(`Cound not find suitable executor for task ${chalk().bold(task)}`); +// return undefined; +// }; export const getRegisteredEngines = () => getContext().runtime.enginesByIndex; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 04e8bfc001..d4714f8443 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -30,7 +30,10 @@ export * from './projects/fonts'; export * from './projects/utils'; export * from './tasks'; +export * from './tasks/taskHelpers'; +export * from './tasks/taskRegistry'; export * from './tasks/constants'; +export * from './tasks/taskCreator'; export * from './schema'; export * from './schema/defaults'; diff --git a/packages/core/src/integrations/index.ts b/packages/core/src/integrations/index.ts index 7e5dd70a15..6051ecfdcf 100644 --- a/packages/core/src/integrations/index.ts +++ b/packages/core/src/integrations/index.ts @@ -1,7 +1,6 @@ import path from 'path'; import { fsExistsSync } from '../system/fs'; import { logDefault, logWarning } from '../logger'; -import { registerCustomTask } from '../tasks'; import { RnvIntegration } from './types'; import { getContext } from '../context/provider'; @@ -21,9 +20,10 @@ export const loadIntegrations = async () => { try { const instance: RnvIntegration = require(intPath)?.default; if (instance) { - instance.getTasks().forEach((task) => { - registerCustomTask(task); - }); + c.runtime.integrationsByIndex.push(instance); + // instance.getTasks().forEach((task) => { + // registerCustomTask(task); + // }); } } catch (err) { logWarning( @@ -33,7 +33,3 @@ export const loadIntegrations = async () => { }); } }; - -export const registerIntegration = () => { - //Do nothing -}; diff --git a/packages/core/src/integrations/types.ts b/packages/core/src/integrations/types.ts index 068d3d33fc..a6d6effdfb 100644 --- a/packages/core/src/integrations/types.ts +++ b/packages/core/src/integrations/types.ts @@ -3,5 +3,5 @@ import { RnvTask } from '../tasks/types'; export type RnvIntegration = { config: ConfigFileIntegration; - getTasks: () => Array; + tasks: Record; }; diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index 07964d8396..ec258ea7a9 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -3,11 +3,12 @@ import { loadEngines, registerMissingPlatformEngines } from './engines'; import { loadIntegrations } from './integrations'; import { checkAndMigrateProject } from './migrator'; import { configureRuntimeDefaults } from './context/runtime'; -import { findSuitableGlobalTask, findSuitableTask, initializeTask } from './tasks'; +import { findSuitableTask, initializeTask } from './tasks'; import { updateRenativeConfigs } from './plugins'; import { checkAndBootstrapIfRequired } from './projects/bootstrap'; import { loadDefaultConfigTemplates } from './configs'; import { getApi } from './api/provider'; +import { RnvTask } from './tasks/types'; export const exitRnvCore = async (code: number) => { const ctx = getContext(); @@ -34,11 +35,13 @@ export const executeRnvCore = async () => { return; } + let initTask: RnvTask | undefined; + // Special Case for engine-core tasks // they don't require other engines to be loaded if isGlobalScope = true // ie rnv link - const initTask = await findSuitableGlobalTask(); - if (initTask?.task && initTask.isGlobalScope) { + initTask = await findSuitableTask(); + if (initTask?.isGlobalScope) { return initializeTask(initTask); } @@ -48,19 +51,21 @@ export const executeRnvCore = async () => { if (!result) { await updateRenativeConfigs(); } - // for root rnv we simply load all engines upfront const { configExists } = c.paths.project; if (!c.command && configExists) { await registerMissingPlatformEngines(); } - // Some tasks might require all engines to be present (ie rnv platform list) - const taskInstance = await findSuitableTask(); + initTask = await findSuitableTask(); + return initializeTask(initTask); - if (c.command && !taskInstance?.ignoreEngines) { - await registerMissingPlatformEngines(taskInstance); - } + // if (c.command && !taskInstance?.ignoreEngines) { + // await registerMissingPlatformEngines(taskInstance); + // } - if (taskInstance?.task) await initializeTask(taskInstance); + // if (taskInstance?.task) { + // return initializeTask(taskInstance); + // } + // return Promise.reject(`No suitable task found for command: ${c.command}`); }; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index a48a6130a3..3c308b676e 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -1,35 +1,67 @@ -import { logDefault, logInitTask, logExitTask, chalk, logRaw, logInfo, logWarning } from '../logger'; +import { logDefault, logInitTask, logExitTask, chalk, logRaw, logInfo } from '../logger'; import { executePipe } from '../buildHooks'; -import { - getEngineRunner, - getEngineTask, - getRegisteredEngines, - hasEngineTask, - getEngineSubTasks, - registerAllPlatformEngines, -} from '../engines'; import type { RnvContext } from '../context/types'; -import type { RnvTask, RnvTaskMap, RnvTaskOption, TaskItemMap, TaskObj, TaskPromptOption } from './types'; -import type { RnvEngine } from '../engines/types'; -import { inquirerPrompt, inquirerSeparator } from '../api'; +import type { RnvTask } from './types'; import { getApi } from '../api/provider'; -import type { PlatformKey, RenativeConfigRnvTaskName } from '../schema/types'; import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; -import { DEFAULT_TASK_DESCRIPTIONS } from './constants'; import { getContext } from '../context/provider'; -import { RnvPlatforms } from '../enums/platformName'; +import { RnvTaskName } from '../enums/taskName'; +import { getRegisteredTasks } from './taskRegistry'; +import { generateStringFromTaskOption, getTaskNameFromCommand, shouldSkipTask } from './taskHelpers'; let executedTasks: Record = {}; +const TASK_LIMIT = 20; -const CUSTOM_TASKS: RnvTaskMap = {}; +export const executeTask = async (opts: { + taskName: string; + parentTaskName?: string; + originTaskName?: string; + isFirstTask?: boolean; + isOptional?: boolean; + skipInOnlyMode?: boolean; + alternativeTaskInOnlyMode?: string; +}) => { + const { + taskName, + parentTaskName, + originTaskName, + isOptional, + isFirstTask, + skipInOnlyMode, + alternativeTaskInOnlyMode, + } = opts; + const ctx = getContext(); + const inOnlyMode = ctx.program.opts().only; + if (skipInOnlyMode && inOnlyMode) { + const availableTasks = _findTasksByTaskName(alternativeTaskInOnlyMode || RnvTaskName.configureSoft); + const taskInstance = await extractSingleExecutableTask(availableTasks); + return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); + } + const availableTasks = _findTasksByTaskName(taskName); + const taskInstance = await extractSingleExecutableTask(availableTasks); + return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); +}; -export const registerCustomTask = async (task: RnvTask) => { - if (task.task) { - CUSTOM_TASKS[task.task] = task; +export const findSuitableTask = async (): Promise => { + logDefault('findSuitableTask'); + // const c = getContext(); + + const taskName = getTaskNameFromCommand(); + if (!taskName) { + // Trigger auto selection + throw new Error('TODO interactive selection offer all tasks'); } + const suitableTasks = _findTasksByTaskName(taskName); + console.log('SUITABLE_TASKS', suitableTasks); + + const taskInstance = extractSingleExecutableTask(suitableTasks); + return taskInstance; }; -export const initializeTask = async (taskInstance: RnvTask) => { +export const initializeTask = async (taskInstance: RnvTask | undefined) => { + if (!taskInstance) { + throw new Error('Task instance is undefined'); + } const { task } = taskInstance; logDefault('initializeTask', task); const c = getContext(); @@ -48,334 +80,10 @@ export const initializeTask = async (taskInstance: RnvTask) => { platform: c.platform, }); - await executeTask(task, undefined, task); + await _executeTaskInstance({ taskInstance, originTaskName: task, isFirstTask: true }); return true; }; -const _getTaskOption = ({ taskInstance }: TaskObj, provider?: string): TaskPromptOption => { - const asArray = taskInstance.task.split(' '); - const output: TaskPromptOption = { - value: taskInstance.task, - command: '', - name: '', - asArray, - isPriorityOrder: taskInstance.isPriorityOrder, - description: taskInstance.description, - isGlobalScope: taskInstance.isGlobalScope, - isPrivate: taskInstance.isPrivate, - params: taskInstance.options, - providers: [], - }; - - if (taskInstance.description && taskInstance.description !== '') { - output.description = taskInstance.description; - output.name = `${taskInstance.task} ${chalk().grey(`(${taskInstance.description})`)}`; - } else { - output.name = taskInstance.task; - } - output.command = asArray[0]; - output.subCommand = asArray[1]; // TODO don't treat options like --myopt as subcommands - - if (provider) { - output.providers.push(provider); - } - - return output; -}; - -const _getTaskObj = (taskInstance: RnvTask) => { - const key = taskInstance.task; - const taskNameArr = key.split(' '); - let parent: null | string = null; - if (taskNameArr.length > 1) { - taskNameArr.pop(); - parent = taskNameArr.join(' '); - } - - return { - key, - taskInstance, - parent, - }; -}; - -export const getAllSuitableTasks = (): Record => { - const REGISTERED_ENGINES = getRegisteredEngines(); - const suitableTasks: Record = {}; - - REGISTERED_ENGINES.forEach((engine) => { - Object.values(engine.tasks).forEach((taskInstance) => { - let taskObj: TaskPromptOption = _getTaskOption(_getTaskObj(taskInstance), engine?.config?.id); - if (!suitableTasks[taskObj.value]) { - suitableTasks[taskObj.value] = taskObj; - } else { - // In case of multiple competing tasks (same task name but coming from different engines) - - taskObj = suitableTasks[taskObj.value]; - // We try to revert to generic description instead. - taskObj.description = DEFAULT_TASK_DESCRIPTIONS[taskObj.value] || taskObj.description; - // In case of multiple competing tasks we assume they are "commonly used" - taskObj.isPriorityOrder = true; - taskObj.providers.push(engine?.config?.id); - } - }); - }); - Object.values(CUSTOM_TASKS).forEach((taskInstance) => { - const taskObj = _getTaskOption(_getTaskObj(taskInstance), 'custom'); - suitableTasks[taskObj.value] = taskObj; - }); - // TODO: handle integration cli options - - return suitableTasks; -}; - -export const findSuitableGlobalTask = async () => { - const c = getContext(); - if (!c.command) return undefined; - let task = ''; - - if (c.command) task = c.command; - if (c.subCommand) task += ` ${c.subCommand}`; - - c.runtime.engine = getEngineRunner(task, undefined, false); - - const tsk = getEngineTask(task, c.runtime.engine?.tasks); - - return tsk; -}; - -export const findSuitableTask = async (specificTask?: string): Promise => { - logDefault('findSuitableTask'); - const c = getContext(); - - const REGISTERED_ENGINES = getRegisteredEngines(); - - let task = ''; - if (!specificTask) { - if (!c.command) { - const suitableTasks = getAllSuitableTasks(); - - const taskInstances = Object.values(suitableTasks); - let tasks: TaskPromptOption[]; - - let defaultCmd: string | undefined = 'new'; - let addendum = ''; - if (!c.paths.project.configExists) { - tasks = taskInstances.filter((v) => v.isGlobalScope && !v.isPrivate).sort(); - addendum = ' (Not a ReNative project. options will be limited)'; - } else { - tasks = taskInstances.filter((v) => !v.isPrivate).sort(); - defaultCmd = tasks.find((v) => v.value === 'run')?.name; - } - - const commonTasks: TaskPromptOption[] = []; - const ungroupedTasks: TaskPromptOption[] = []; - const groupedTasks: TaskPromptOption[] = []; - const taskGroups: Record = {}; - tasks.forEach((task) => { - if (task.subCommand) { - if (!taskGroups[task.command]) { - const groupTask: TaskPromptOption = { - name: `${task.command}...`, - command: task.command, - value: task.command, - providers: [], - }; - taskGroups[task.command] = groupTask; - groupedTasks.push(groupTask); - } - } else if (task.isPriorityOrder) { - commonTasks.push(task); - } else { - ungroupedTasks.push(task); - } - }); - - const mergedTasks = [ - inquirerSeparator('─────────── Common tasks ───────────'), - ...commonTasks, - inquirerSeparator('─────────── More tasks ─────────────'), - ...ungroupedTasks, - ...groupedTasks, - ]; - - const { selectedTask } = await inquirerPrompt({ - type: 'list', - default: defaultCmd, - name: 'selectedTask', - message: `Pick a command${addendum}`, - choices: mergedTasks, - pageSize: 15, - logMessage: 'Welcome to the brave new world...', - }); - c.command = selectedTask; - } - if (c.command) task = c.command; - if (c.subCommand) task += ` ${c.subCommand}`; - - let suitableEngines = REGISTERED_ENGINES.filter((engine) => { - return hasEngineTask(task, engine.tasks, c.paths.project.configExists); - }); - - const autocompleteEngines = REGISTERED_ENGINES.filter((engine) => getEngineSubTasks(task, engine, true).length); - - const isAutoComplete = !suitableEngines.length && !!c.command && !autocompleteEngines.length; - if (!suitableEngines.length) { - // Get all supported tasks - const supportedSubtasksArr: Array<{ - desc: string; - taskKey: string; - }> = []; - REGISTERED_ENGINES.forEach((engine) => { - const st = getEngineSubTasks(task, engine); - - st.forEach((taskInstance) => { - const isNotViable = !c.paths.project.configExists && !taskInstance.isGlobalScope; - - if (!isNotViable) { - const taskKey = isAutoComplete ? taskInstance.task : taskInstance.task.split(' ')[1]; - - supportedSubtasksArr.push({ - desc: taskInstance.description?.toLowerCase?.(), - taskKey, - }); - } - }); - }); - Object.values(CUSTOM_TASKS).forEach((taskInstance) => { - const tskArr = taskInstance.task.split(' '); - - if (task === tskArr[0] && tskArr.length > 1) { - const taskKey = isAutoComplete ? taskInstance.task : taskInstance.task.split(' ')[1]; - - supportedSubtasksArr.push({ - desc: taskInstance.description?.toLowerCase?.(), - taskKey, - }); - } - }); - - const supportedSubtasks: TaskItemMap = {}; - // Normalize task options - const supportedSubtasksFilter: TaskItemMap = {}; - supportedSubtasksArr.forEach((tsk) => { - const mergedTask = supportedSubtasksFilter[tsk.taskKey]; - if (!mergedTask) { - supportedSubtasksFilter[tsk.taskKey] = tsk; - } else if (!mergedTask.desc?.includes(tsk.desc)) { - mergedTask.desc += `, ${tsk.desc}`; - } - }); - - // Generate final list object - Object.values(supportedSubtasksFilter).forEach((v) => { - const desc = v.desc ? `(${v.desc})` : ''; - const key = `${v.taskKey} ${chalk().grey(desc)}`; - supportedSubtasks[key] = { - taskKey: v.taskKey, - }; - }); - - const subTasks = Object.keys(supportedSubtasks); - if (subTasks.length && c.runtime.hasAllEnginesRegistered) { - // Only offer autocomple option if all engines are registered - - const message = isAutoComplete - ? `Autocomplete action for "${c.command}"` - : `Pick a subCommand for ${c.command}`; - const { subCommand } = await inquirerPrompt({ - type: 'list', - name: 'subCommand', - message, - choices: subTasks, - }); - if (isAutoComplete) { - task = supportedSubtasks[subCommand].taskKey; - c.command = task.split(' ')[0]; - c.subCommand = task.split(' ')[1]; - if (c.subCommand) { - task = `${c.command} ${c.subCommand}`; - } else { - task = `${c.command}`; - } - } else { - c.subCommand = supportedSubtasks[subCommand].taskKey; - task = `${c.command} ${c.subCommand}`; - } - - suitableEngines = REGISTERED_ENGINES.filter((engine) => - hasEngineTask(task, engine.tasks, c.paths.project.configExists) - ); - } - } - if (CUSTOM_TASKS[task]) { - // Custom tasks are executed by core engine - logInfo(`Running custom task ${chalk().bold(task)}`); - } else if (!suitableEngines.length) { - if (!c.runtime.hasAllEnginesRegistered) { - // No platform was specified. we have no option other than load all engines and offer platform list next round - await registerAllPlatformEngines(); - return findSuitableTask(); - } - - logInfo(`could not find suitable task for ${chalk().bold(c.command)}. GETTING OPTIONS...`); - c.command = null; - c.subCommand = null; - return findSuitableTask(); - } - //TODO: special type case for c.platform - if (!c.platform || c.program.opts().platform === true) { - await _selectPlatform(c, suitableEngines, task); - } - c.runtime.engine = getEngineRunner(task, CUSTOM_TASKS, false); - // Cover scenarios of -p xxxxxxxxx - if (!c.runtime.engine) { - await _selectPlatform(c, suitableEngines, task); - c.runtime.engine = getEngineRunner(task, CUSTOM_TASKS); - } - if (c.runtime.engine?.runtimeExtraProps) { - c.runtime.runtimeExtraProps = c.runtime.engine.runtimeExtraProps; - } - - const customTask = CUSTOM_TASKS[task]; - if (customTask) { - c.runtime.availablePlatforms = customTask.platforms == null ? [...RnvPlatforms] : customTask.platforms; - // _populateExtraParameters(c, customTask); - return customTask; - } - } else { - task = specificTask; - c.runtime.engine = getEngineRunner(task); - } - const plats = c.runtime.engine?.platforms || []; - c.runtime.availablePlatforms = Object.keys(plats) as PlatformKey[]; - const engineTask = getEngineTask(task, c.runtime.engine?.tasks); - - return engineTask; -}; - -export const generateStringFromTaskOption = (opt: RnvTaskOption) => { - let cmd = ''; - if (opt.shortcut) { - cmd += `-${opt.shortcut}, `; - } - cmd += `--${opt.key}`; - if (opt.isVariadic) { - if (opt.isRequired) { - cmd += ` `; - } else { - cmd += ` [value...]`; - } - } else if (opt.isValueType) { - if (opt.isRequired) { - cmd += ` `; - } else { - cmd += ` [value]`; - } - } - return cmd; -}; - const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { c.program?.allowUnknownOption(false); // integration options are not known ahead of time if (task.options) { @@ -387,227 +95,63 @@ const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { c.program.parse?.(process.argv); }; -const _selectPlatform = async (c: RnvContext, suitableEngines: Array, task: string) => { - let platforms: string[] = []; - const supportedEngPlatforms: string[] = []; - let isPlatformIndependentTask = false; - suitableEngines.forEach((engine) => { - const enPlats = getEngineTask(task, engine.tasks)?.platforms; - - if (enPlats) { - enPlats.forEach((plat) => { - supportedEngPlatforms.push(plat); - }); - } else { - // enPlats=null means task can be executed without platform - isPlatformIndependentTask = true; +const _findTasksByTaskName = (taskName: string) => { + const result: RnvTask[] = []; + Object.values(getRegisteredTasks()).forEach((v) => { + const plat = getContext().platform; + if (v.platforms && plat) { + if (!v.platforms.includes(plat)) { + // If we found a task with platform restriction and it does not match current platform we skip it + return; + } + } + if (v.task === taskName) { + result.push(v); } }); - - if (supportedEngPlatforms.length === 0 && isPlatformIndependentTask) { - // If there are no tasks declaring supported platforms - // BUT there are tasks that can be executed without platform - // then we can skip platform selection - return; - } - - const supProjPlatforms = c.buildConfig?.defaults?.supportedPlatforms; - - if (supProjPlatforms) { - supProjPlatforms.forEach((plat) => { - if (supportedEngPlatforms.includes(plat)) { - platforms.push(plat); - } - }); - } else { - platforms = supportedEngPlatforms; - } - - if (platforms?.length === 1) { - logInfo(`Only one platform available for task: ${task}. Using ${chalk().bold(platforms[0])}`); - c.platform = platforms[0] as PlatformKey; - return; - } - - if (platforms) { - const { platform } = await inquirerPrompt({ - type: 'list', - name: 'platform', - message: `Pick a platform for ${task}`, - choices: platforms, - }); - c.platform = platform; - } - // else if (platforms.length === 1) { - // c.platform = platforms[0] as PlatformKey; - // } + return result; }; -const _executePipe = async (c: RnvContext, task: string, phase: string) => - executePipe(`${task.split(' ').join(':')}:${phase}`); - -const TASK_LIMIT = 20; - -export const executeTask = async (task: string, parentTask?: string, originTask?: string, isOptional?: boolean) => { +const _executeTaskInstance = async (opts: { + taskInstance: RnvTask; + parentTaskName?: string; + originTaskName?: string; + isFirstTask?: boolean; + isOptional?: boolean; +}) => { + const { taskInstance, parentTaskName, originTaskName, isFirstTask, isOptional } = opts; const c = getContext(); - // const pt = parentTask ? `=> [${parentTask}] ` : ''; - c._currentTask = task; + if (!taskInstance) { + if (!isOptional) { + return; + } + throw new Error(`Task Instance is undefined`); + } + const needsHelp = c.program.opts().help; + const inOnlyMode = c.program.opts().only; + + c._currentTask = taskInstance.task; // logInitTask(`${pt}=> [${chalk().bold.rgb(170, 106, 170)(task)}]`); - logInitTask(`${task}`); + logInitTask(`${taskInstance.task}`); - if (!executedTasks[task]) executedTasks[task] = 0; - if (executedTasks[task] > TASK_LIMIT) { - return Promise.reject(`You reached maximum amount of executions per one task (${TASK_LIMIT}) task: ${task}. + if (!executedTasks[taskInstance.task]) executedTasks[taskInstance.task] = 0; + if (executedTasks[taskInstance.task] > TASK_LIMIT) { + return Promise.reject(`You reached maximum amount of executions per one task (${TASK_LIMIT}) task: ${taskInstance.task}. This is to warn you ended up in task loop. -(${task} calls same or another task which calls ${task} again) +(${taskInstance.task} calls same or another task which calls ${taskInstance.task} again) but issue migh not be necessarily with this task To avoid that test your task code against parentTask and avoid executing same task X from within task X`); } - await executeEngineTask(task, parentTask, originTask, getEngineRunner(task, CUSTOM_TASKS, !isOptional)?.tasks); - // await getEngineRunner(task, CUSTOM_TASKS).executeTask(task, parentTask, originTask, isFirstTask); - executedTasks[task]++; - - c._currentTask = parentTask; - // const prt = parentTask ? `<= [${chalk().rgb(170, 106, 170)(parentTask)}] ` : ''; - logExitTask(`${task}`); -}; - -/** - * @deprecated Use executeDependantTask instead - */ -export const executeOrSkipTask = async (task: string, parentTask: string, originTask?: string) => { - const c = getContext(); - if (!c.program.opts().only) { - return executeTask(task, parentTask, originTask); - } - return executeTask('configureSoft', parentTask, originTask); -}; - -export const executeDependantTask = async ({ - task, - parentTask, - originTask, - alternativeTask, -}: { - task: string; - parentTask: string; - originTask?: string; - alternativeTask?: string; -}) => { - const ctx = getContext(); - if (!ctx.program.opts().only) { - return executeTask(task, parentTask, originTask); - } - if (alternativeTask) { - return executeTask(alternativeTask, parentTask, originTask); - } - return true; -}; - -const ACCEPTED_CONDITIONS = ['platform', 'target', 'appId', 'scheme'] as const; -type ACKey = (typeof ACCEPTED_CONDITIONS)[number]; - -const _logSkip = (task: string) => { - logInfo(`Original RNV task ${chalk().bold(task)} marked to ignore. SKIPPING...`); -}; - -export const shouldSkipTask = (taskKey: string, originRnvTaskName?: string) => { - const c = getContext(); - const task = taskKey as RenativeConfigRnvTaskName; - const originTask = originRnvTaskName as RenativeConfigRnvTaskName; - const tasks = c.buildConfig?.tasks; - c.runtime.platform = c.platform; - if (!tasks) return; - - if (c.program.opts().skipTasks?.split) { - const skipTaskArr = c.program.opts().skipTasks.split(','); - if (skipTaskArr.includes(task)) return true; - } - - if (Array.isArray(tasks)) { - for (let k = 0; k < tasks.length; k++) { - const t = tasks[k]; - if (t.name === task) { - if (t.filter) { - const conditions = t.filter.split('&'); - let conditionsToMatch = conditions.length; - conditions.forEach((con: string) => { - const conArr = con.split('='); - const conKey = conArr[0] as ACKey; - if (ACCEPTED_CONDITIONS.includes(conKey)) { - const rt = c.runtime; - if (rt[conKey] === conArr[1]) { - conditionsToMatch--; - } - } else { - logWarning( - `Condition ${con} not valid. only following keys are valid: ${ACCEPTED_CONDITIONS.join( - ',' - )} SKIPPING...` - ); - } - }); - if (conditionsToMatch === 0) { - if (t.ignore) { - _logSkip(task); - return true; - } - } - } else if (t.ignore) { - _logSkip(task); - return true; - } - } - } - } else if (c.platform) { - const ignoreTask = tasks[task]?.platform?.[c.platform]?.ignore; - if (ignoreTask) { - _logSkip(task); - return true; - } - if (!originTask) { - return false; - } - const ignoreTasks = tasks[originTask]?.platform?.[c.platform]?.ignoreTasks || []; - if (ignoreTasks.includes(task)) { - logInfo(`Task ${task} marked to skip during rnv ${originTask}. SKIPPING...`); - return true; - } - } - - return false; -}; - -export const executeEngineTask = async ( - task: string, - parentTask?: string, - originTask?: string, - tasks?: Record, - isFirstTask?: boolean -) => { - const c = getContext(); - const needsHelp = c.program.opts().help; - - const taskInstance = getEngineTask(task, tasks, CUSTOM_TASKS); - - if (!taskInstance) return; - - if (needsHelp && !parentTask && taskInstance) { + if (needsHelp && !parentTaskName && taskInstance) { logRaw(` Description: ${taskInstance.description} `); c.program.outputHelp(); - // ${t.options - // .map((v) => { - // const option = v.shortcut ? `-${v.shortcut}, ` : ''; - // return ` ${option}--${v.key} ${v.description}`; - // }) - // .join('\n')} if (taskInstance.fnHelp) { - await taskInstance.fnHelp(c, parentTask, originTask); + await taskInstance.fnHelp(); } return; } @@ -620,9 +164,503 @@ Description: ${taskInstance.description} if (isFirstTask) { c.runtime.forceBuildHookRebuild = !!taskInstance?.forceBuildHookRebuild; } - const inOnlyMode = c.program.opts().only; + const doPipe = !taskInstance.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); - if (doPipe) await _executePipe(c, task, 'before'); - if (taskInstance.fn) await taskInstance.fn(c, parentTask, originTask); - if (doPipe) await _executePipe(c, task, 'after'); + if (doPipe) await _executePipe(taskInstance, 'before'); + executedTasks[taskInstance.task]++; + c._currentTask = parentTaskName; + const shouldSkip = shouldSkipTask({ taskName: taskInstance.task }); + if (taskInstance.dependsOn) { + for (const dep of taskInstance.dependsOn) { + await executeTask({ taskName: dep, parentTaskName: taskInstance.task, originTaskName }); + } + } + if (taskInstance.fn && !shouldSkip) { + await taskInstance.fn({ + taskName: taskInstance.task, + parentTaskName, + originTaskName, + shouldSkip, + ctx: c, + }); + } + if (doPipe) await _executePipe(taskInstance, 'after'); + + executedTasks[taskInstance.task]++; + + c._currentTask = parentTaskName; + + logExitTask(`${taskInstance.task}`); +}; + +const _executePipe = async (taskInstance: RnvTask, phase: string) => + executePipe(`${taskInstance.task.split(' ').join(':')}:${phase}`); + +const extractSingleExecutableTask = async (suitableTasks: RnvTask[]) => { + if (suitableTasks.length === 1) { + return suitableTasks[0]; + } else if (suitableTasks.length > 1) { + // Found multiple Tasks with same name + throw new Error('TODO interactive selection multiple tasks'); + } + // Found no tasks + throw new Error('TODO found no tasks'); }; + +////////=======================//////// + +// const _getTaskOption = ({ taskInstance }: TaskObj, provider?: string): TaskPromptOption => { +// const asArray = taskInstance.task.split(' '); +// const output: TaskPromptOption = { +// value: taskInstance.task, +// command: '', +// name: '', +// asArray, +// isPriorityOrder: taskInstance.isPriorityOrder, +// description: taskInstance.description, +// isGlobalScope: taskInstance.isGlobalScope, +// isPrivate: taskInstance.isPrivate, +// params: taskInstance.options, +// providers: [], +// }; + +// if (taskInstance.description && taskInstance.description !== '') { +// output.description = taskInstance.description; +// output.name = `${taskInstance.task} ${chalk().grey(`(${taskInstance.description})`)}`; +// } else { +// output.name = taskInstance.task; +// } +// output.command = asArray[0]; +// output.subCommand = asArray[1]; // TODO don't treat options like --myopt as subcommands + +// if (provider) { +// output.providers.push(provider); +// } + +// return output; +// }; + +// const _getTaskObj = (taskInstance: RnvTask) => { +// const key = taskInstance.task; +// const taskNameArr = key.split(' '); +// let parent: null | string = null; +// if (taskNameArr.length > 1) { +// taskNameArr.pop(); +// parent = taskNameArr.join(' '); +// } + +// return { +// key, +// taskInstance, +// parent, +// }; +// }; + +// export const findSuitableGlobalTask = async () => { +// const c = getContext(); +// if (!c.command) return undefined; +// let task = ''; + +// if (c.command) task = c.command; +// if (c.subCommand) task += ` ${c.subCommand}`; + +// c.runtime.engine = getEngineRunner(task, undefined, false); + +// const tsk = getEngineTask(task, c.runtime.engine?.tasks); + +// return tsk; +// }; + +// const ACCEPTED_CONDITIONS = ['platform', 'target', 'appId', 'scheme'] as const; + +// type ACKey = (typeof ACCEPTED_CONDITIONS)[number]; + +// const _logSkip = (task: string) => { +// logInfo(`Original RNV task ${chalk().bold(task)} marked to ignore. SKIPPING...`); +// }; + +////////=======================//////// + +// export const getAllSuitableTasks = (): Record => { +// const REGISTERED_ENGINES = getRegisteredEngines(); +// const suitableTasks: Record = {}; + +// REGISTERED_ENGINES.forEach((engine) => { +// Object.values(engine.tasks).forEach((taskInstance) => { +// let taskObj: TaskPromptOption = _getTaskOption(_getTaskObj(taskInstance), engine?.config?.id); +// if (!suitableTasks[taskObj.value]) { +// suitableTasks[taskObj.value] = taskObj; +// } else { +// // In case of multiple competing tasks (same task name but coming from different engines) + +// taskObj = suitableTasks[taskObj.value]; +// // We try to revert to generic description instead. +// taskObj.description = DEFAULT_TASK_DESCRIPTIONS[taskObj.value] || taskObj.description; +// // In case of multiple competing tasks we assume they are "commonly used" +// taskObj.isPriorityOrder = true; +// taskObj.providers.push(engine?.config?.id); +// } +// }); +// }); +// Object.values(CUSTOM_TASKS).forEach((taskInstance) => { +// const taskObj = _getTaskOption(_getTaskObj(taskInstance), 'custom'); +// suitableTasks[taskObj.value] = taskObj; +// }); +// // TODO: handle integration cli options + +// return suitableTasks; +// }; + +// export const findSuitableTask2 = async (specificTask?: string): Promise => { +// logDefault('findSuitableTask'); +// const c = getContext(); + +// const REGISTERED_ENGINES = getRegisteredEngines(); + +// let task = ''; +// if (!specificTask) { +// if (!c.command) { +// const suitableTasks = getAllSuitableTasks(); + +// const taskInstances = Object.values(suitableTasks); +// let tasks: TaskPromptOption[]; + +// let defaultCmd: string | undefined = 'new'; +// let addendum = ''; +// if (!c.paths.project.configExists) { +// tasks = taskInstances.filter((v) => v.isGlobalScope && !v.isPrivate).sort(); +// addendum = ' (Not a ReNative project. options will be limited)'; +// } else { +// tasks = taskInstances.filter((v) => !v.isPrivate).sort(); +// defaultCmd = tasks.find((v) => v.value === 'run')?.name; +// } + +// const commonTasks: TaskPromptOption[] = []; +// const ungroupedTasks: TaskPromptOption[] = []; +// const groupedTasks: TaskPromptOption[] = []; +// const taskGroups: Record = {}; +// tasks.forEach((task) => { +// if (task.subCommand) { +// if (!taskGroups[task.command]) { +// const groupTask: TaskPromptOption = { +// name: `${task.command}...`, +// command: task.command, +// value: task.command, +// providers: [], +// }; +// taskGroups[task.command] = groupTask; +// groupedTasks.push(groupTask); +// } +// } else if (task.isPriorityOrder) { +// commonTasks.push(task); +// } else { +// ungroupedTasks.push(task); +// } +// }); + +// const mergedTasks = [ +// inquirerSeparator('─────────── Common tasks ───────────'), +// ...commonTasks, +// inquirerSeparator('─────────── More tasks ─────────────'), +// ...ungroupedTasks, +// ...groupedTasks, +// ]; + +// const { selectedTask } = await inquirerPrompt({ +// type: 'list', +// default: defaultCmd, +// name: 'selectedTask', +// message: `Pick a command${addendum}`, +// choices: mergedTasks, +// pageSize: 15, +// logMessage: 'Welcome to the brave new world...', +// }); +// c.command = selectedTask; +// } +// if (c.command) task = c.command; +// if (c.subCommand) task += ` ${c.subCommand}`; + +// let suitableEngines = REGISTERED_ENGINES.filter((engine) => { +// return hasEngineTask(task, engine.tasks, c.paths.project.configExists); +// }); +// console.log('SJSKLJSK', suitableEngines); + +// const autocompleteEngines = REGISTERED_ENGINES.filter((engine) => getEngineSubTasks(task, engine, true).length); + +// const isAutoComplete = !suitableEngines.length && !!c.command && !autocompleteEngines.length; +// if (!suitableEngines.length) { +// // Get all supported tasks +// const supportedSubtasksArr: Array<{ +// desc: string; +// taskKey: string; +// }> = []; +// REGISTERED_ENGINES.forEach((engine) => { +// const st = getEngineSubTasks(task, engine); + +// st.forEach((taskInstance) => { +// const isNotViable = !c.paths.project.configExists && !taskInstance.isGlobalScope; + +// if (!isNotViable) { +// const taskKey = isAutoComplete ? taskInstance.task : taskInstance.task.split(' ')[1]; + +// supportedSubtasksArr.push({ +// desc: taskInstance.description?.toLowerCase?.(), +// taskKey, +// }); +// } +// }); +// }); +// Object.values(CUSTOM_TASKS).forEach((taskInstance) => { +// const tskArr = taskInstance.task.split(' '); + +// if (task === tskArr[0] && tskArr.length > 1) { +// const taskKey = isAutoComplete ? taskInstance.task : taskInstance.task.split(' ')[1]; + +// supportedSubtasksArr.push({ +// desc: taskInstance.description?.toLowerCase?.(), +// taskKey, +// }); +// } +// }); + +// const supportedSubtasks: TaskItemMap = {}; +// // Normalize task options +// const supportedSubtasksFilter: TaskItemMap = {}; +// supportedSubtasksArr.forEach((tsk) => { +// const mergedTask = supportedSubtasksFilter[tsk.taskKey]; +// if (!mergedTask) { +// supportedSubtasksFilter[tsk.taskKey] = tsk; +// } else if (!mergedTask.desc?.includes(tsk.desc)) { +// mergedTask.desc += `, ${tsk.desc}`; +// } +// }); + +// // Generate final list object +// Object.values(supportedSubtasksFilter).forEach((v) => { +// const desc = v.desc ? `(${v.desc})` : ''; +// const key = `${v.taskKey} ${chalk().grey(desc)}`; +// supportedSubtasks[key] = { +// taskKey: v.taskKey, +// }; +// }); + +// const subTasks = Object.keys(supportedSubtasks); +// if (subTasks.length && c.runtime.hasAllEnginesRegistered) { +// // Only offer autocomple option if all engines are registered + +// const message = isAutoComplete +// ? `Autocomplete action for "${c.command}"` +// : `Pick a subCommand for ${c.command}`; +// const { subCommand } = await inquirerPrompt({ +// type: 'list', +// name: 'subCommand', +// message, +// choices: subTasks, +// }); +// if (isAutoComplete) { +// task = supportedSubtasks[subCommand].taskKey; +// c.command = task.split(' ')[0]; +// c.subCommand = task.split(' ')[1]; +// if (c.subCommand) { +// task = `${c.command} ${c.subCommand}`; +// } else { +// task = `${c.command}`; +// } +// } else { +// c.subCommand = supportedSubtasks[subCommand].taskKey; +// task = `${c.command} ${c.subCommand}`; +// } + +// suitableEngines = REGISTERED_ENGINES.filter((engine) => +// hasEngineTask(task, engine.tasks, c.paths.project.configExists) +// ); +// } +// } +// if (CUSTOM_TASKS[task]) { +// // Custom tasks are executed by core engine +// logInfo(`Running custom task ${chalk().bold(task)}`); +// } else if (!suitableEngines.length) { +// if (!c.runtime.hasAllEnginesRegistered) { +// // No platform was specified. we have no option other than load all engines and offer platform list next round +// await registerAllPlatformEngines(); +// return findSuitableTask(); +// } + +// logInfo(`could not find suitable task for ${chalk().bold(c.command)}. GETTING OPTIONS...`); +// c.command = null; +// c.subCommand = null; +// return findSuitableTask(); +// } +// //TODO: special type case for c.platform +// if (!c.platform || c.program.opts().platform === true) { +// await _selectPlatform(c, suitableEngines, task); +// } +// c.runtime.engine = getEngineRunner(task, CUSTOM_TASKS, false); +// // Cover scenarios of -p xxxxxxxxx +// if (!c.runtime.engine) { +// await _selectPlatform(c, suitableEngines, task); +// c.runtime.engine = getEngineRunner(task, CUSTOM_TASKS); +// } +// if (c.runtime.engine?.runtimeExtraProps) { +// c.runtime.runtimeExtraProps = c.runtime.engine.runtimeExtraProps; +// } + +// const customTask = CUSTOM_TASKS[task]; +// if (customTask) { +// c.runtime.availablePlatforms = customTask.platforms == null ? [...RnvPlatforms] : customTask.platforms; +// // _populateExtraParameters(c, customTask); +// return customTask; +// } +// } else { +// task = specificTask; +// c.runtime.engine = getEngineRunner(task); +// } +// const plats = c.runtime.engine?.platforms || []; +// c.runtime.availablePlatforms = Object.keys(plats) as PlatformKey[]; +// const engineTask = getEngineTask(task, c.runtime.engine?.tasks); +// console.log('DJDLKDJLDKJLKDJLD', engineTask); + +// return engineTask; +// }; + +// const _selectPlatform = async (c: RnvContext, suitableEngines: Array, task: string) => { +// let platforms: string[] = []; +// const supportedEngPlatforms: string[] = []; +// let isPlatformIndependentTask = false; +// suitableEngines.forEach((engine) => { +// const enPlats = getEngineTask(task, engine.tasks)?.platforms; +// console.log( +// 'ENGPLAAA', +// enPlats, +// suitableEngines.map((v) => v.config.id) +// ); + +// if (enPlats) { +// enPlats.forEach((plat) => { +// supportedEngPlatforms.push(plat); +// }); +// } else { +// // enPlats=null means task can be executed without platform +// isPlatformIndependentTask = true; +// } +// }); + +// if (supportedEngPlatforms.length === 0 && isPlatformIndependentTask) { +// // If there are no tasks declaring supported platforms +// // BUT there are tasks that can be executed without platform +// // then we can skip platform selection +// return; +// } + +// const supProjPlatforms = c.buildConfig?.defaults?.supportedPlatforms; + +// if (supProjPlatforms) { +// supProjPlatforms.forEach((plat) => { +// if (supportedEngPlatforms.includes(plat)) { +// platforms.push(plat); +// } +// }); +// } else { +// platforms = supportedEngPlatforms; +// } + +// if (platforms?.length === 1) { +// logInfo(`Only one platform available for task: ${task}. Using ${chalk().bold(platforms[0])}`); +// c.platform = platforms[0] as PlatformKey; +// return; +// } + +// console.log('SLKJLSKJSL', supProjPlatforms, supportedEngPlatforms); + +// if (platforms) { +// const { platform } = await inquirerPrompt({ +// type: 'list', +// name: 'platform', +// message: `Pick a platform for ${task}`, +// choices: platforms, +// }); +// c.platform = platform; +// } +// // else if (platforms.length === 1) { +// // c.platform = platforms[0] as PlatformKey; +// // } +// }; + +// /** +// * @deprecated Use executeDependantTask instead +// */ +// export const executeOrSkipTask = async (task: string, parentTask: string, originTask?: string) => { +// const c = getContext(); +// if (!c.program.opts().only) { +// return executeTask(task, parentTask, originTask); +// } +// return executeTask('configureSoft', parentTask, originTask); +// }; + +// export const executeDependantTask = async ({ +// task, +// parentTask, +// originTask, +// alternativeTask, +// }: { +// task: string; +// parentTask: string; +// originTask?: string; +// alternativeTask?: string; +// }) => { +// const ctx = getContext(); +// if (!ctx.program.opts().only) { +// return executeTask(task, parentTask, originTask); +// } +// if (alternativeTask) { +// return executeTask(alternativeTask, parentTask, originTask); +// } +// return true; +// }; + +// export const executeEngineTask = async ( +// task: string, +// parentTask?: string, +// originTask?: string, +// tasks?: Record, +// isFirstTask?: boolean +// ) => { +// const c = getContext(); +// const needsHelp = c.program.opts().help; + +// const taskInstance = getEngineTask(task, tasks, CUSTOM_TASKS); + +// if (!taskInstance) return; + +// if (needsHelp && !parentTask && taskInstance) { +// logRaw(` +// Description: ${taskInstance.description} +// `); +// c.program.outputHelp(); + +// // ${t.options +// // .map((v) => { +// // const option = v.shortcut ? `-${v.shortcut}, ` : ''; +// // return ` ${option}--${v.key} ${v.description}`; +// // }) +// // .join('\n')} +// if (taskInstance.fnHelp) { +// await taskInstance.fnHelp(c, parentTask, originTask); +// } +// return; +// } +// if (!taskInstance.isGlobalScope && isFirstTask) { +// if (c.files.project.package) { +// // This has to happen in order for hooks to be able to run +// await checkIfProjectAndNodeModulesExists(); +// } +// } +// if (isFirstTask) { +// c.runtime.forceBuildHookRebuild = !!taskInstance?.forceBuildHookRebuild; +// } +// const inOnlyMode = c.program.opts().only; +// const doPipe = !taskInstance.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); +// if (doPipe) await _executePipe(c, task, 'before'); +// if (taskInstance.fn) await taskInstance.fn(c, parentTask, originTask); +// if (doPipe) await _executePipe(c, task, 'after'); +// }; diff --git a/packages/core/src/tasks/taskCreator.ts b/packages/core/src/tasks/taskCreator.ts new file mode 100644 index 0000000000..46da120b6a --- /dev/null +++ b/packages/core/src/tasks/taskCreator.ts @@ -0,0 +1,6 @@ +import { RnvTask } from './types'; + +export const createTask = (task: RnvTask) => { + // TODO: Implement generics later on + return task; +}; diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts new file mode 100644 index 0000000000..e8016a0321 --- /dev/null +++ b/packages/core/src/tasks/taskHelpers.ts @@ -0,0 +1,117 @@ +import { getContext } from '../context/provider'; +import { RnvTask, RnvTaskMap, RnvTaskOption } from './types'; + +export const getTaskNameFromCommand = (): string | undefined => { + const c = getContext(); + if (!c.command) return undefined; + let taskName = ''; + + if (c.command) taskName = c.command; + if (c.subCommand) taskName += ` ${c.subCommand}`; + + return taskName; +}; + +export const generateRnvTaskMap = (taskArr: Array, config: { name: string }) => { + const tasks: RnvTaskMap = {}; + + taskArr.forEach((taskInstance) => { + const plts = taskInstance.platforms || []; + const key = `${config.name}:${plts.join('-')}:${taskInstance.task}`; + taskInstance.ownerID = config.name; + taskInstance.key = key; + tasks[key] = taskInstance; + }); + return tasks; +}; + +export const generateStringFromTaskOption = (opt: RnvTaskOption) => { + let cmd = ''; + if (opt.shortcut) { + cmd += `-${opt.shortcut}, `; + } + cmd += `--${opt.key}`; + if (opt.isVariadic) { + if (opt.isRequired) { + cmd += ` `; + } else { + cmd += ` [value...]`; + } + } else if (opt.isValueType) { + if (opt.isRequired) { + cmd += ` `; + } else { + cmd += ` [value]`; + } + } + return cmd; +}; + +// const ACCEPTED_CONDITIONS = ['platform', 'target', 'appId', 'scheme'] as const; + +export const shouldSkipTask = ({ taskName }: { taskName: string }) => { + const c = getContext(); + // const task = taskKey as RenativeConfigRnvTaskName; + // const originTask = originRnvTaskName as RenativeConfigRnvTaskName; + const tasks = c.buildConfig?.tasks; + c.runtime.platform = c.platform; + if (!tasks) return false; + + if (c.program.opts().skipTasks?.split) { + const skipTaskArr = c.program.opts().skipTasks.split(','); + if (skipTaskArr.includes(taskName)) return true; + } + + // if (Array.isArray(tasks)) { + // for (let k = 0; k < tasks.length; k++) { + // const t = tasks[k]; + // if (t.name === task) { + // if (t.filter) { + // const conditions = t.filter.split('&'); + // let conditionsToMatch = conditions.length; + // conditions.forEach((con: string) => { + // const conArr = con.split('='); + // const conKey = conArr[0] as ACKey; + // if (ACCEPTED_CONDITIONS.includes(conKey)) { + // const rt = c.runtime; + // if (rt[conKey] === conArr[1]) { + // conditionsToMatch--; + // } + // } else { + // logWarning( + // `Condition ${con} not valid. only following keys are valid: ${ACCEPTED_CONDITIONS.join( + // ',' + // )} SKIPPING...` + // ); + // } + // }); + // if (conditionsToMatch === 0) { + // if (t.ignore) { + // _logSkip(task); + // return true; + // } + // } + // } else if (t.ignore) { + // _logSkip(task); + // return true; + // } + // } + // } + // } else if (c.platform) { + // const ignoreTask = tasks[task]?.platform?.[c.platform]?.ignore; + // if (ignoreTask) { + // _logSkip(task); + // return true; + // } + // if (!originTask) { + // return false; + // } + // const ignoreTasks = tasks[originTask]?.platform?.[c.platform]?.ignoreTasks || []; + // if (ignoreTasks.includes(task)) { + // logInfo(`Task ${task} marked to skip during rnv ${originTask}. SKIPPING...`); + // return true; + // } + // } + + return false; +}; diff --git a/packages/core/src/tasks/taskRegistry.ts b/packages/core/src/tasks/taskRegistry.ts new file mode 100644 index 0000000000..18c7aa33f2 --- /dev/null +++ b/packages/core/src/tasks/taskRegistry.ts @@ -0,0 +1,15 @@ +import { RnvTask, RnvTaskMap } from './types'; + +const REGISTERED_TASKS: RnvTaskMap = {}; + +export const registerRnvTask = async (taskInstance: RnvTask) => { + if (!taskInstance.key) { + throw new Error('Task key is required'); + } + if (taskInstance.key in REGISTERED_TASKS) { + throw new Error(`Task key must be unique. Task with key ${taskInstance.key} already exists`); + } + REGISTERED_TASKS[taskInstance.key] = taskInstance; +}; + +export const getRegisteredTasks = () => REGISTERED_TASKS; diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index 9fdb1494c4..054ebf3a14 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -1,15 +1,17 @@ -import type { RnvContext } from '../context/types'; +import { RnvContext } from '../context/types'; import type { PlatformKey } from '../schema/types'; export type RnvTask = { task: string; + dependsOn?: string[]; options?: Array; isGlobalScope?: boolean; platforms?: Array; description: string; forceBuildHookRebuild?: boolean; + beforeDependsOn?: RnvTaskFn; fn?: RnvTaskFn; - fnHelp?: RnvTaskFn; + fnHelp?: RnvTaskHelpFn; isPrivate?: boolean; isPriorityOrder?: boolean; ignoreEngines?: boolean; @@ -46,7 +48,15 @@ export type RnvTaskOption = { export type RnvTaskMap = Record; //Too many choices of return types -export type RnvTaskFn = (c: RnvContext, parentTask?: string, originTask?: string) => Promise; // Promise; +export type RnvTaskFn = (opts: { + ctx: RnvContext; + taskName: string; + parentTaskName: string | undefined; + originTaskName: string | undefined; + shouldSkip: boolean; +}) => Promise; // Promise; + +export type RnvTaskHelpFn = () => Promise; export type TaskItemMap = Record< string, diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index 288216415d..59d5181c42 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -259,7 +259,7 @@ export const configureTemplateFiles = async () => { } }; -export const configureEntryPoint = async (platform: RnvPlatform) => { +export const configureEntryPoint = async () => { logDefault('configureEntryPoint'); const c = getContext(); diff --git a/packages/engine-core/src/buildSchemes.ts b/packages/engine-core/src/buildSchemes.ts index fe9765715e..3a882a6460 100644 --- a/packages/engine-core/src/buildSchemes.ts +++ b/packages/engine-core/src/buildSchemes.ts @@ -55,6 +55,6 @@ export const isBuildSchemeSupported = async () => { c.program.opts().scheme = schemeVals[selectedScheme]; c.runtime.scheme = c.program.opts().scheme; } - logInfo(`Current Build Scheme2: ${chalk().bold(c.runtime.scheme)}`); + logInfo(`Current Build Scheme: ${chalk().bold(c.runtime.scheme)}`); return true; }; diff --git a/packages/engine-core/src/tasks/app/taskAppConfigure.ts b/packages/engine-core/src/tasks/app/taskAppConfigure.ts index cb3bc6801a..81f3ba49da 100644 --- a/packages/engine-core/src/tasks/app/taskAppConfigure.ts +++ b/packages/engine-core/src/tasks/app/taskAppConfigure.ts @@ -207,7 +207,7 @@ const fn = async (c: RnvContext) => { const Task: RnvTask = { description: 'Configure project with specific appConfig', - fn, + fn: async () => {}, task: RnvTaskName.appConfigure, options: RnvTaskOptionPresets.withConfigure(), }; diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index 09d15b6bf5..d3129d5ebd 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -168,7 +168,7 @@ const fn: RnvTaskFn = async () => { const Task: RnvTask = { description: 'Create new app config', - fn, + fn: async () => {}, options: [ { key: 'sourceAppConfigID', diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index c0d66d3030..9c76cc6270 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -25,7 +25,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Switch between different app configs in current project', - fn, + fn: async () => {}, task: RnvTaskName.appSwitch, }; diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index ac8c130e85..b077fe8c22 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -83,7 +83,7 @@ const fn = async () => { const Task: RnvTask = { description: 'Create new ReNative project', - fn, + fn: async () => {}, task: RnvTaskName.new, options: [ RnvTaskOptions.gitEnabled, diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index f6bd561dfb..44da0b0d85 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -207,7 +207,7 @@ and we will try to help! const Task: RnvTask = { description: 'Decrypt encrypted project files into local `~///..`', - fn, + fn: async () => {}, task: RnvTaskName.cryptoDecrypt, }; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index 780833a244..b3af2cb590 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -236,7 +236,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Encrypts secure files from `~///..` to project', - fn, + fn: async () => {}, task: RnvTaskName.cryptoEncrypt, }; diff --git a/packages/engine-core/src/tasks/global/taskClean.ts b/packages/engine-core/src/tasks/global/taskClean.ts index 7a04c5b8fd..efab892d21 100644 --- a/packages/engine-core/src/tasks/global/taskClean.ts +++ b/packages/engine-core/src/tasks/global/taskClean.ts @@ -209,7 +209,7 @@ const fn: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Automatically removes all node_modules and lock in your project and its dependencies', - fn, + fn: async () => {}, task: RnvTaskName.clean, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskConfig.ts b/packages/engine-core/src/tasks/global/taskConfig.ts index f47d6a6699..b7e9d86f30 100644 --- a/packages/engine-core/src/tasks/global/taskConfig.ts +++ b/packages/engine-core/src/tasks/global/taskConfig.ts @@ -10,7 +10,7 @@ const fn: RnvTaskFn = async (c, _, originTask) => { const Task: RnvTask = { description: 'Display RNV config', - fn, + fn: async () => {}, task: RnvTaskName.config, }; diff --git a/packages/engine-core/src/tasks/global/taskDoctor.ts b/packages/engine-core/src/tasks/global/taskDoctor.ts index 4cfcf26822..1ec474b311 100644 --- a/packages/engine-core/src/tasks/global/taskDoctor.ts +++ b/packages/engine-core/src/tasks/global/taskDoctor.ts @@ -88,7 +88,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Checks validity and config health of your project', - fn, + fn: async () => {}, task: RnvTaskName.doctor, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskHelp.ts b/packages/engine-core/src/tasks/global/taskHelp.ts index fc81b85992..8594c6c318 100644 --- a/packages/engine-core/src/tasks/global/taskHelp.ts +++ b/packages/engine-core/src/tasks/global/taskHelp.ts @@ -44,7 +44,7 @@ ${optsString} const Task: RnvTask = { description: 'Display generic help', - fn, + fn: async () => {}, task: RnvTaskName.help, isGlobalScope: true, isPriorityOrder: true, diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 3ee53de2ae..2c1ea5b5d8 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -24,7 +24,7 @@ const fn: RnvTaskFn = async (c, parentTask, _) => { const Task: RnvTask = { description: 'Install package node_modules via yarn or npm', - fn, + fn: async () => {}, task: RnvTaskName.install, }; diff --git a/packages/engine-core/src/tasks/global/taskKill.ts b/packages/engine-core/src/tasks/global/taskKill.ts index 8535863e98..7581b1f30e 100644 --- a/packages/engine-core/src/tasks/global/taskKill.ts +++ b/packages/engine-core/src/tasks/global/taskKill.ts @@ -66,7 +66,7 @@ ${usedPorts.map((v) => chalk().bold(`> ${v.port} (${v.platform})`)).join('\n')}` const Task: RnvTask = { description: 'Kills all the processes related to this project', - fn, + fn: async () => {}, task: RnvTaskName.kill, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskStatus.ts b/packages/engine-core/src/tasks/global/taskStatus.ts index 046e3f62bd..f06a36e9d7 100644 --- a/packages/engine-core/src/tasks/global/taskStatus.ts +++ b/packages/engine-core/src/tasks/global/taskStatus.ts @@ -4,7 +4,7 @@ const fn = async () => Promise.resolve(); const Task: RnvTask = { description: 'Show current info about the project', - fn, + fn: async () => {}, task: RnvTaskName.status, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksList.ts b/packages/engine-core/src/tasks/hooks/taskHooksList.ts index 9297294452..68a1d537d1 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksList.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksList.ts @@ -31,7 +31,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Get list of all available hooks', - fn, + fn: async () => {}, task: RnvTaskName.hooksList, forceBuildHookRebuild: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts index 775c584b72..7636d5e8da 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts @@ -13,7 +13,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Get the list of all available pipes', - fn, + fn: async () => {}, task: RnvTaskName.hooksPipes, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index 9747657b3b..463a8439a2 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -57,7 +57,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Run specific build hook', - fn, + fn: async () => {}, task: RnvTaskName.hooksRun, options: [RnvTaskOptions.exeMethod], forceBuildHookRebuild: true, diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index d5063d3a16..966818fce2 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -91,7 +91,7 @@ const fn: RnvTaskFn = async () => { const Task: RnvTask = { description: 'Links development version or renative with this project', - fn, + fn: async () => {}, task: RnvTaskName.link, options: [{ key: 'dir', description: 'Source folder to be linked into project', isValueType: true }], isGlobalScope: true, diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index bb19567adc..2218d0143b 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -43,7 +43,7 @@ const fn: RnvTaskFn = async () => { const Task: RnvTask = { description: 'Replaces rnv version in project with original node_modules version', - fn, + fn: async () => {}, task: RnvTaskName.unlink, isGlobalScope: true, ignoreEngines: true, diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 5e30d4eb4d..9787c9ca32 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -69,7 +69,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Low-level task used by engines to prepare platformBuilds folder', - fn, + fn: async () => {}, task: RnvTaskName.platformConfigure, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts index 01eab17523..f751d3ee2e 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts @@ -88,7 +88,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Connect platform template back to rnv', - fn, + fn: async () => {}, task: RnvTaskName.platformConnect, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts index 40966da840..744b25a06c 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts @@ -71,7 +71,7 @@ TIP: You can select options with ${chalk().bold('SPACE')} key before pressing EN const Task: RnvTask = { description: 'Copy all platform files directly to project', - fn, + fn: async () => {}, task: RnvTaskName.platformEject, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformList.ts b/packages/engine-core/src/tasks/platform/taskPlatformList.ts index daefa18b1c..0663ee8d4a 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformList.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformList.ts @@ -21,7 +21,7 @@ const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { const Task: RnvTask = { description: 'List all available platforms', - fn, + fn: async () => {}, task: RnvTaskName.platformList, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts index 5610da7503..d85a141e92 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts @@ -30,7 +30,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Allows you to change supportedPlatforms for your project', - fn, + fn: async () => {}, task: RnvTaskName.platformSetup, }; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index 6a9388c9f1..d9d76d4c06 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -100,7 +100,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Add selected plugin to the project', - fn, + fn: async () => {}, task: RnvTaskName.pluginAdd, }; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginList.ts b/packages/engine-core/src/tasks/plugin/taskPluginList.ts index 4e1277811d..c58c96b958 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginList.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginList.ts @@ -13,7 +13,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Show list of all available plugins', - fn, + fn: async () => {}, task: RnvTaskName.pluginList, }; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts index 5b366045e4..575b45fadf 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts @@ -49,7 +49,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Update specific plugin to latest supported version (rnv)', - fn, + fn: async () => {}, task: RnvTaskName.pluginUpdate, }; diff --git a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts index f206af8fdc..811496a8a1 100644 --- a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts @@ -25,7 +25,7 @@ const fn: RnvTaskFn = async (_c, parentTask, originTask) => { const Task: RnvTask = { description: 'Configure system and project without recreating files (used for --only)', - fn, + fn: async () => {}, task: RnvTaskName.configureSoft, isPrivate: true, }; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 3556295373..7fd31c0ed5 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -147,7 +147,7 @@ const fn: RnvTaskFn = async (c, parentTask, originTask) => { const Task: RnvTask = { description: 'Configure current project', - fn, + fn: async () => {}, task: RnvTaskName.projectConfigure, }; diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index f4bead3f9d..6919d57ada 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -76,7 +76,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Upgrade or downgrade RNV dependencies in your ReNative project', - fn, + fn: async () => {}, task: RnvTaskName.projectUpgrade, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index ccb9855571..f1740c0757 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -20,7 +20,7 @@ const fn: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Disables rnv telemetry on your machine', - fn, + fn: async () => {}, task: RnvTaskName.telemetryDisable, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index 0a4a3310cc..4437791558 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -20,7 +20,7 @@ const fn: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Enables rnv telemetry on your machine', - fn, + fn: async () => {}, task: RnvTaskName.telemetryEnable, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts index d1c0f4441b..fdc2f69636 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts @@ -27,7 +27,7 @@ const fn: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Show current rnv telemetry status on your machine', - fn, + fn: async () => {}, task: RnvTaskName.telemetryStatus, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts index 3e00143401..bb92106318 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts @@ -54,7 +54,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Install additional template to the project', - fn, + fn: async () => {}, task: RnvTaskName.templateAdd, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 018eee7a26..4ec51a9cb4 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -44,7 +44,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Reset project to specific template', - fn, + fn: async () => {}, task: RnvTaskName.templateApply, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts index f7ea1a5d5d..63f2552bd6 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateList.ts @@ -14,7 +14,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Show list of available templates', - fn, + fn: async () => {}, task: RnvTaskName.templateList, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts index 9c5b9b8b3d..772d1a5b94 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts @@ -49,7 +49,8 @@ const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Add new workspace', - fn, + dependsOn: [RnvTaskName.projectConfigure], + fn: async () => {}, task: RnvTaskName.workspaceAdd, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index 80776c599b..8c6628e165 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -83,7 +83,7 @@ const fn: RnvTaskFn = async (c) => { const Task: RnvTask = { description: 'Preconfigures your current workspace defined via "workspaceID" prop in renative config file', - fn, + fn: async () => {}, task: RnvTaskName.workspaceConfigure, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts index fdde030ac4..fc8b5f40e1 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts @@ -34,7 +34,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Connect project with selected workspace', - fn, + fn: async () => {}, task: RnvTaskName.workspaceConnect, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts index 0684809aa9..ae18214b65 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts @@ -22,7 +22,7 @@ const fn: RnvTaskFn = async (c, _parentTask, originTask) => { const Task: RnvTask = { description: 'Show list of all available workspaces', - fn, + fn: async () => {}, task: RnvTaskName.workspaceList, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts index 7df5f1066d..0b1be3cedc 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts @@ -11,7 +11,7 @@ const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { const Task: RnvTask = { description: 'TODO: unused task', - fn, + fn: async () => {}, task: RnvTaskName.workspaceUpdate, isGlobalScope: true, isPrivate: true, diff --git a/packages/engine-lightning/src/tasks/taskBuild.ts b/packages/engine-lightning/src/tasks/taskBuild.ts index 473b32aa59..e81dd974e6 100644 --- a/packages/engine-lightning/src/tasks/taskBuild.ts +++ b/packages/engine-lightning/src/tasks/taskBuild.ts @@ -1,41 +1,14 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTaskName, RnvTaskOptionPresets, createTask } from '@rnv/core'; import { buildLightningProject } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild', `parent:${parentTask}`); - const { platform } = c; - c.runtime.forceBundleAssets = true; - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.build, originTask); - - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - switch (platform) { - case 'tizen': - case 'webos': - await buildLightningProject(); - return; - default: - logErrorPlatform(); - } -}; - -const Task: RnvTask = { +export default createTask({ description: 'Build project binary', - fn, + fn: async () => { + return buildLightningProject(); + }, task: RnvTaskName.build, + dependsOn: [RnvTaskName.configure], options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-lightning/src/tasks/taskConfigure.ts b/packages/engine-lightning/src/tasks/taskConfigure.ts index e78ce45935..efe19d12eb 100644 --- a/packages/engine-lightning/src/tasks/taskConfigure.ts +++ b/packages/engine-lightning/src/tasks/taskConfigure.ts @@ -1,24 +1,14 @@ -import { logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { RnvTaskName, RnvTaskOptionPresets, createTask } from '@rnv/core'; import { configureLightningProject } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - - if (c.program.opts().only && !!parentTask) { - return true; - } - return configureLightningProject(); -}; - -const Task: RnvTask = { +export default createTask({ + dependsOn: [RnvTaskName.platformConfigure], description: 'Configure current project', - fn, + fn: async () => { + return configureLightningProject(); + }, task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-lightning/src/tasks/taskRun.ts b/packages/engine-lightning/src/tasks/taskRun.ts index 1027c5d908..322f022838 100644 --- a/packages/engine-lightning/src/tasks/taskRun.ts +++ b/packages/engine-lightning/src/tasks/taskRun.ts @@ -1,32 +1,15 @@ -import { RnvTaskFn, logTask, logRaw, executeOrSkipTask, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { RnvTaskName, RnvTaskOptionPresets, createTask } from '@rnv/core'; import { runLightningProject } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { port } = c.runtime; - const { target } = c.runtime; - const { hosted } = c.program.opts(); - logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - return runLightningProject(); -}; - -const taskRunHelp = async () => { - logRaw(` -More info at: https://renative.org/docs/api-cli -`); -}; - -const Task: RnvTask = { +export default createTask({ + dependsOn: [RnvTaskName.configure], description: 'Run your lightning app on target device or emulator', - fn, - fnHelp: taskRunHelp, + fn: async () => { + return runLightningProject(); + }, task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-electron/src/tasks/taskBuild.ts b/packages/engine-rn-electron/src/tasks/taskBuild.ts index f54c85218b..97bb9752d6 100644 --- a/packages/engine-rn-electron/src/tasks/taskBuild.ts +++ b/packages/engine-rn-electron/src/tasks/taskBuild.ts @@ -1,26 +1,13 @@ -import { - RnvTaskFn, - logTask, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { buildElectron } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild', `parent:${parentTask}`); - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.build, originTask); - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - return buildElectron(); -}; - const Task: RnvTask = { description: 'Build project binary', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + return buildElectron(); + }, task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-electron/src/tasks/taskConfigure.ts b/packages/engine-rn-electron/src/tasks/taskConfigure.ts index cd2474cac5..f3dd967e1c 100644 --- a/packages/engine-rn-electron/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-electron/src/tasks/taskConfigure.ts @@ -1,38 +1,15 @@ -import { - RnvTaskFn, - copySharedPlatforms, - logTask, - executeTask, - shouldSkipTask, - configureEntryPoint, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { copySharedPlatforms, configureEntryPoint, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { configureElectronProject } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - - await configureEntryPoint(c.platform); - - await copySharedPlatforms(); - - if (c.program.opts().only && !!parentTask) { - return true; - } - - return configureElectronProject(); -}; - const Task: RnvTask = { description: 'Configure current project', - fn, + dependsOn: [RnvTaskName.platformConfigure], + fn: async () => { + await configureEntryPoint(); + await copySharedPlatforms(); + return configureElectronProject(); + }, task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-electron/src/tasks/taskExport.ts b/packages/engine-rn-electron/src/tasks/taskExport.ts index cb8cf9c853..179964ffa6 100644 --- a/packages/engine-rn-electron/src/tasks/taskExport.ts +++ b/packages/engine-rn-electron/src/tasks/taskExport.ts @@ -1,28 +1,13 @@ -import { - RnvTaskFn, - logTask, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { exportElectron } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskExport', `parent:${parentTask}`); - - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); - - if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - - return exportElectron(); -}; - const Task: RnvTask = { description: 'Export the app into deployable binary', - fn, + dependsOn: [RnvTaskName.build], + fn: async () => { + return exportElectron(); + }, task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-electron/src/tasks/taskRun.ts b/packages/engine-rn-electron/src/tasks/taskRun.ts index 2e586e8940..d1878fb41b 100644 --- a/packages/engine-rn-electron/src/tasks/taskRun.ts +++ b/packages/engine-rn-electron/src/tasks/taskRun.ts @@ -1,31 +1,13 @@ -import { - RnvTaskFn, - logTask, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { runElectron } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { port } = c.runtime; - const { target } = c.runtime; - const { hosted } = c.program.opts(); - logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - return runElectron(); -}; - const Task: RnvTask = { description: 'Run your electron app on your machine', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + return runElectron(); + }, task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), diff --git a/packages/engine-rn-electron/src/tasks/taskStart.ts b/packages/engine-rn-electron/src/tasks/taskStart.ts index 4fbd5dc322..8949909207 100644 --- a/packages/engine-rn-electron/src/tasks/taskStart.ts +++ b/packages/engine-rn-electron/src/tasks/taskStart.ts @@ -1,50 +1,13 @@ import { runWebpackServer } from '@rnv/sdk-webpack'; -import { - RnvTaskFn, - logErrorPlatform, - logTask, - logError, - RnvTaskOptionPresets, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; -import { openBrowser, waitForHost } from '@rnv/sdk-utils'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { port } = c.runtime; - const { hosted } = c.program.opts(); - - logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); - - if (hosted) { - waitForHost('') - .then(() => openBrowser(`http://${c.runtime.localhost}:${port}/`)) - .catch(logError); - } - - if (!parentTask) { - await executeTask(RnvTaskName.configure, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - switch (platform) { - case 'macos': - case 'windows': - case 'linux': - return runWebpackServer(); - default: - return logErrorPlatform(); - } -}; - const Task: RnvTask = { description: 'Starts bundler / server', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + return runWebpackServer(); + }, task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-next/src/tasks/taskBuild.ts b/packages/engine-rn-next/src/tasks/taskBuild.ts index 728153bc5c..b853469132 100644 --- a/packages/engine-rn-next/src/tasks/taskBuild.ts +++ b/packages/engine-rn-next/src/tasks/taskBuild.ts @@ -1,30 +1,13 @@ -import { - RnvTaskFn, - logTask, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { buildWebNext } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild', `parent:${parentTask}`); - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.build, originTask); - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - if (parentTask === RnvTaskName.export) { - // build task is not necessary when exporting. They do the same thing, only difference is a next.config.js config flag - return true; - } - await buildWebNext(); -}; - const Task: RnvTask = { description: 'Build project binary', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + await buildWebNext(); + }, task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-next/src/tasks/taskConfigure.ts b/packages/engine-rn-next/src/tasks/taskConfigure.ts index c9378da87b..6a9cf3b77c 100644 --- a/packages/engine-rn-next/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-next/src/tasks/taskConfigure.ts @@ -1,24 +1,13 @@ -import { RnvTaskFn, logTask, RnvTaskOptionPresets, executeTask, shouldSkipTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { configureNextIfRequired } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - - if (c.program.opts().only && !!parentTask) { - return true; - } - - return configureNextIfRequired(); -}; - const Task: RnvTask = { description: 'Configure current project', - fn, + dependsOn: [RnvTaskName.platformConfigure], + fn: async () => { + return configureNextIfRequired(); + }, task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-next/src/tasks/taskExport.ts b/packages/engine-rn-next/src/tasks/taskExport.ts index 508389779d..7b969791f2 100644 --- a/packages/engine-rn-next/src/tasks/taskExport.ts +++ b/packages/engine-rn-next/src/tasks/taskExport.ts @@ -1,26 +1,13 @@ -import { - RnvTaskFn, - logTask, - RnvTaskOptionPresets, - shouldSkipTask, - executeOrSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { exportWebNext } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskExport', `parent:${parentTask}`); - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); - if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - - return exportWebNext(); -}; - const Task: RnvTask = { description: 'Export the app into deployable binary', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + return exportWebNext(); + }, task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-next/src/tasks/taskRun.ts b/packages/engine-rn-next/src/tasks/taskRun.ts index 7118d6e879..1faddeadfd 100644 --- a/packages/engine-rn-next/src/tasks/taskRun.ts +++ b/packages/engine-rn-next/src/tasks/taskRun.ts @@ -1,26 +1,13 @@ -import { - RnvTaskFn, - logTask, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { runWebNext } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskRun', `parent:${parentTask}`); - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - return runWebNext(); -}; - const Task: RnvTask = { description: 'Run your app in browser', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + return runWebNext(); + }, task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), diff --git a/packages/engine-rn-next/src/tasks/taskStart.ts b/packages/engine-rn-next/src/tasks/taskStart.ts index 8c5f0cfbf9..51d5b8929a 100644 --- a/packages/engine-rn-next/src/tasks/taskStart.ts +++ b/packages/engine-rn-next/src/tasks/taskStart.ts @@ -1,45 +1,18 @@ -import { - RnvTaskFn, - logTask, - logError, - RnvTaskOptionPresets, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { logError, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { runWebNext } from '../sdk/runner'; import { openBrowser, waitForHost } from '@rnv/sdk-utils'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { port } = c.runtime; - const { hosted } = c.program.opts(); - - logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); - - if (hosted) { - waitForHost() - .then(() => openBrowser(`http://${c.runtime.localhost}:${port}/`)) - .catch(logError); - } - - if (!parentTask) { - await executeTask(RnvTaskName.configure, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - - return runWebNext(); -}; - const Task: RnvTask = { description: 'Starts bundler / server', - fn, + dependsOn: [RnvTaskName.configure], + fn: async ({ ctx }) => { + const { localhost, port } = ctx.runtime; + waitForHost() + .then(() => openBrowser(`http://${localhost}:${port}/`)) + .catch(logError); + return runWebNext(); + }, task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-web/src/tasks/taskBuild.ts b/packages/engine-rn-web/src/tasks/taskBuild.ts index c0f2988f5d..d514d37c8f 100644 --- a/packages/engine-rn-web/src/tasks/taskBuild.ts +++ b/packages/engine-rn-web/src/tasks/taskBuild.ts @@ -1,56 +1,35 @@ -import { - RnvTaskFn, - logErrorPlatform, - logTask, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { logErrorPlatform, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { buildWeb } from '@rnv/sdk-webpack'; import { buildTizenProject } from '@rnv/sdk-tizen'; import { buildWebOSProject } from '@rnv/sdk-webos'; import { buildKaiOSProject } from '@rnv/sdk-kaios'; import { EnginePlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild', `parent:${parentTask}`); - - const { platform } = c; - - // Build aways bundles assets - c.runtime.forceBundleAssets = true; - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.build, originTask); - - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - switch (platform) { - case 'web': - case 'webtv': - case 'chromecast': - await buildWeb(); - return; - case 'kaios': - await buildKaiOSProject(); - return; - case 'tizen': - case 'tizenmobile': - case 'tizenwatch': - await buildTizenProject(); - return; - case 'webos': - await buildWebOSProject(); - return; - default: - logErrorPlatform(); - } -}; - const Task: RnvTask = { description: 'Build project binary', - fn, + dependsOn: [RnvTaskName.configure], + fn: async ({ ctx }) => { + switch (ctx.platform) { + case 'web': + case 'webtv': + case 'chromecast': + await buildWeb(); + return; + case 'kaios': + await buildKaiOSProject(); + return; + case 'tizen': + case 'tizenmobile': + case 'tizenwatch': + await buildTizenProject(); + return; + case 'webos': + await buildWebOSProject(); + return; + default: + logErrorPlatform(); + } + }, task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: EnginePlatforms, diff --git a/packages/engine-rn-web/src/tasks/taskConfigure.ts b/packages/engine-rn-web/src/tasks/taskConfigure.ts index 26d8ab1c04..cf7e13cd79 100644 --- a/packages/engine-rn-web/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-web/src/tasks/taskConfigure.ts @@ -1,11 +1,7 @@ import { - RnvTaskFn, logErrorPlatform, copySharedPlatforms, - logTask, RnvTaskOptionPresets, - executeTask, - shouldSkipTask, configureEntryPoint, RnvTask, RnvTaskName, @@ -16,41 +12,30 @@ import { configureWebOSProject } from '@rnv/sdk-webos'; import { configureTizenProject } from '@rnv/sdk-tizen'; import { EnginePlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - await configureEntryPoint(c.platform); - - await copySharedPlatforms(); - - if (c.program.opts().only && !!parentTask) { - return true; - } - - switch (c.platform) { - case 'web': - case 'webtv': - return configureWebProject(); - case 'tizen': - case 'tizenmobile': - case 'tizenwatch': - return configureTizenProject(); - case 'webos': - return configureWebOSProject(); - case 'chromecast': - return configureChromecastProject(); - case 'kaios': - return configureKaiOSProject(); - default: - return logErrorPlatform(); - } -}; - const Task: RnvTask = { description: 'Configure current project', - fn, + dependsOn: [RnvTaskName.platformConfigure], + fn: async ({ ctx }) => { + await configureEntryPoint(); + await copySharedPlatforms(); + switch (ctx.platform) { + case 'web': + case 'webtv': + return configureWebProject(); + case 'tizen': + case 'tizenmobile': + case 'tizenwatch': + return configureTizenProject(); + case 'webos': + return configureWebOSProject(); + case 'chromecast': + return configureChromecastProject(); + case 'kaios': + return configureKaiOSProject(); + default: + return logErrorPlatform(); + } + }, task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: EnginePlatforms, diff --git a/packages/engine-rn-web/src/tasks/taskDebug.ts b/packages/engine-rn-web/src/tasks/taskDebug.ts index 0561c0718f..17415d1d4c 100644 --- a/packages/engine-rn-web/src/tasks/taskDebug.ts +++ b/packages/engine-rn-web/src/tasks/taskDebug.ts @@ -1,16 +1,10 @@ -import { RnvTaskFn, logTask, executeAsync, shouldSkipTask, RnvTask, RnvTaskName } from '@rnv/core'; - -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskDebug', `parent:${parentTask}`); - - if (shouldSkipTask(RnvTaskName.debug, originTask)) return true; - - return executeAsync('npx weinre --boundHost -all-'); -}; +import { executeAsync, RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'Debug your app on target device or emulator', - fn, + fn: async () => { + return executeAsync('npx weinre --boundHost -all-'); + }, task: RnvTaskName.debug, platforms: ['web', 'webtv', 'tizen'], }; diff --git a/packages/engine-rn-web/src/tasks/taskRun.ts b/packages/engine-rn-web/src/tasks/taskRun.ts index 37ace0e0a9..4f5c0bf64e 100644 --- a/packages/engine-rn-web/src/tasks/taskRun.ts +++ b/packages/engine-rn-web/src/tasks/taskRun.ts @@ -1,6 +1,5 @@ import { RnvContext, - RnvTaskFn, RnvTaskOptionPresets, logErrorPlatform, logTask, @@ -9,8 +8,6 @@ import { getPlatformProjectDir, writeCleanFile, executeTask, - executeOrSkipTask, - shouldSkipTask, RnvTask, getAppFolder, fsExistsSync, @@ -74,55 +71,45 @@ const _configureHostedIfRequired = async (c: RnvContext) => { } }; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { port } = c.runtime; - const { target } = c.runtime; - const { hosted } = c.program.opts(); - logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (hosted) { - c.runtime.shouldOpenBrowser = true; - // return _taskStart(c); - return executeTask(RnvTaskName.start, RnvTaskName.run, originTask); - } - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - switch (platform) { - case 'web': - case 'webtv': - c.runtime.shouldOpenBrowser = true; - return runWebpackServer(); - case 'tizen': - case 'tizenmobile': - case 'tizenwatch': - if (!c.program.opts().only) { - await _configureHostedIfRequired(c); - } - return runTizen(c, target); - case 'webos': - if (!c.program.opts().only) { - await _configureHostedIfRequired(c); - } - return runWebOS(c); - case 'kaios': - return runKaiOSProject(); - case 'chromecast': - if (!c.program.opts().only) { - await _configureHostedIfRequired(c); - } - return runChromecast(c); - default: - return logErrorPlatform(); - } -}; - const Task: RnvTask = { description: 'Run your app in browser', - fn, + dependsOn: [RnvTaskName.configure], + fn: async ({ ctx, taskName, originTaskName }) => { + const { hosted } = ctx.program.opts(); + if (hosted) { + ctx.runtime.shouldOpenBrowser = true; + // return _taskStart(c); + return executeTask({ taskName: RnvTaskName.start, parentTaskName: taskName, originTaskName }); + } + + switch (ctx.platform) { + case 'web': + case 'webtv': + ctx.runtime.shouldOpenBrowser = true; + return runWebpackServer(); + case 'tizen': + case 'tizenmobile': + case 'tizenwatch': + if (!ctx.program.opts().only) { + await _configureHostedIfRequired(ctx); + } + return runTizen(ctx, ctx.runtime.target); + case 'webos': + if (!ctx.program.opts().only) { + await _configureHostedIfRequired(ctx); + } + return runWebOS(ctx); + case 'kaios': + return runKaiOSProject(); + case 'chromecast': + if (!ctx.program.opts().only) { + await _configureHostedIfRequired(ctx); + } + return runChromecast(ctx); + default: + return logErrorPlatform(); + } + }, task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), diff --git a/packages/engine-rn-web/src/tasks/taskStart.ts b/packages/engine-rn-web/src/tasks/taskStart.ts index 72ed55ab44..8ce5380513 100644 --- a/packages/engine-rn-web/src/tasks/taskStart.ts +++ b/packages/engine-rn-web/src/tasks/taskStart.ts @@ -1,61 +1,40 @@ import { runWebpackServer } from '@rnv/sdk-webpack'; -import { - RnvTaskFn, - getConfigProp, - logErrorPlatform, - logTask, - logError, - RnvTaskOptionPresets, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { getConfigProp, logErrorPlatform, logError, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { REMOTE_DEBUGGER_ENABLED_PLATFORMS, openBrowser, waitForHost } from '@rnv/sdk-utils'; import { EnginePlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { port } = c.runtime; - const { hosted } = c.program.opts(); - - if (!platform) return; - - logTask('taskStart', `parent:${parentTask} port:${port} hosted:${!!hosted}`); - - if (!parentTask) { - await executeTask(RnvTaskName.configure, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - if (hosted) { - waitForHost('') - .then(() => openBrowser(`http://${c.runtime.localhost}:${port}/`)) - .catch(logError); - } - const bundleAssets = getConfigProp('bundleAssets'); - const isWeinreEnabled = REMOTE_DEBUGGER_ENABLED_PLATFORMS.includes(platform) && !bundleAssets && !hosted; - - switch (platform) { - case 'web': - case 'webtv': - case 'tizen': - case 'webos': - case 'tizenmobile': - case 'tizenwatch': - return runWebpackServer(isWeinreEnabled); - default: - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - return logErrorPlatform(); - } -}; - const Task: RnvTask = { description: 'Starts bundler / server', - fn, + dependsOn: [RnvTaskName.configure], + fn: async ({ ctx }) => { + const { platform, runtime, program } = ctx; + const { port, localhost } = runtime; + const { hosted } = program.opts(); + + if (hosted) { + waitForHost('') + .then(() => openBrowser(`http://${localhost}:${port}/`)) + .catch(logError); + } + const bundleAssets = getConfigProp('bundleAssets'); + const isWeinreEnabled = + (platform && REMOTE_DEBUGGER_ENABLED_PLATFORMS.includes(platform) && !bundleAssets && !hosted) || undefined; + + switch (platform) { + case 'web': + case 'webtv': + case 'tizen': + case 'webos': + case 'tizenmobile': + case 'tizenwatch': + return runWebpackServer(isWeinreEnabled); + default: + if (hosted) { + return Promise.reject('This platform does not support hosted mode'); + } + return logErrorPlatform(); + } + }, task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: EnginePlatforms, diff --git a/packages/engine-rn-windows/src/sdk/index.ts b/packages/engine-rn-windows/src/sdk/index.ts index ca0475f325..1e8f539dd8 100644 --- a/packages/engine-rn-windows/src/sdk/index.ts +++ b/packages/engine-rn-windows/src/sdk/index.ts @@ -13,6 +13,7 @@ import { logError, logDefault, logWarning, + getContext, } from '@rnv/core'; // import cli from '@react-native-windows/cli'; // import runWindowsCMD from '@react-native-windows/cli/lib-commonjs/runWindows/runWindows'; @@ -191,9 +192,11 @@ type InjectOptions = { }; // TODO Document/comment each of the functions -export const ruWindowsProject = async (c: RnvContext, injectedOptions?: InjectOptions) => { +export const ruWindowsProject = async (injectedOptions?: InjectOptions) => { logDefault('runWindowsProject'); + const c = getContext(); + const options = getOptions(c, injectedOptions); const args: string[] = []; @@ -243,7 +246,7 @@ export const ruWindowsProject = async (c: RnvContext, injectedOptions?: InjectOp // For release bundle needs to be created if (options.bundleAssets || options.release) { logDebug('Assets will be bundled'); - await packageBundleForWindows(c, options.bundleIsDev); + await packageBundleForWindows(options.bundleIsDev); } await runWindows(args, config, options); @@ -251,7 +254,8 @@ export const ruWindowsProject = async (c: RnvContext, injectedOptions?: InjectOp return true; }; -const copyWindowsTemplateProject = async (c: RnvContext, injectedOptions = {}) => { +const copyWindowsTemplateProject = async (injectedOptions = {}) => { + const c = getContext(); const options = getOptions(c, injectedOptions); const opts = { @@ -267,7 +271,8 @@ const copyWindowsTemplateProject = async (c: RnvContext, injectedOptions = {}) = return true; }; -function clearWindowsTemporaryFiles(c: RnvContext) { +function clearWindowsTemporaryFiles() { + const c = getContext(); logDefault('clearWindowsTemporaryFiles'); const logging = getConfigProp('logging', defaultOptions.logging); const opts = { @@ -294,7 +299,8 @@ function clearWindowsTemporaryFiles(c: RnvContext) { return new Promise((resolve) => setTimeout(() => resolve(true), 4000)); } -const packageBundleForWindows = (c: RnvContext, isDev = false) => { +const packageBundleForWindows = (isDev = false) => { + const c = getContext(); logDefault('packageBundleForWindows'); // const { maxErrorLength } = c.program.opts(); const entryFile = getConfigProp('entryFile'); @@ -439,7 +445,8 @@ const installWindowsApp = async (c: RnvContext, script: string, windowsStoreAppU ); }; -const packageWindowsApp = async (c: RnvContext, injectedOptions?: InjectOptions) => { +const packageWindowsApp = async (injectedOptions?: InjectOptions) => { + const c = getContext(); if (!c.runtime.appId) return; try { const appFolder = getAppFolder(); diff --git a/packages/engine-rn-windows/src/tasks/taskBuild.ts b/packages/engine-rn-windows/src/tasks/taskBuild.ts index 64118648f4..5cfbbe8869 100644 --- a/packages/engine-rn-windows/src/tasks/taskBuild.ts +++ b/packages/engine-rn-windows/src/tasks/taskBuild.ts @@ -1,26 +1,13 @@ -import { - RnvTaskFn, - executeOrSkipTask, - RnvTaskOptionPresets, - logTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { ruWindowsProject } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskBuild'); - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - return ruWindowsProject(c, { release: true, launch: false, deploy: false, logging: false }); -}; - const Task: RnvTask = { description: 'Build project binary', - fn, + dependsOn: [RnvTaskName.package], + fn: async () => { + return ruWindowsProject({ release: true, launch: false, deploy: false, logging: false }); + }, task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-windows/src/tasks/taskConfigure.ts b/packages/engine-rn-windows/src/tasks/taskConfigure.ts index b528fe1a48..e4abd843c9 100644 --- a/packages/engine-rn-windows/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-windows/src/tasks/taskConfigure.ts @@ -1,36 +1,15 @@ -import { - copySharedPlatforms, - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - configureEntryPoint, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { copySharedPlatforms, RnvTaskOptionPresets, configureEntryPoint, RnvTask, RnvTaskName } from '@rnv/core'; import { configureWindowsProject } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - await configureEntryPoint(c.platform); - - await copySharedPlatforms(); - - if (c.program.opts().only && !!parentTask) { - return true; - } - - return configureWindowsProject(c); -}; - const Task: RnvTask = { description: 'Configure current project', - fn, + dependsOn: [RnvTaskName.platformConfigure], + fn: async () => { + await configureEntryPoint(); + await copySharedPlatforms(); + return configureWindowsProject(); + }, task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-windows/src/tasks/taskExport.ts b/packages/engine-rn-windows/src/tasks/taskExport.ts index bf3139da7b..74215565fd 100644 --- a/packages/engine-rn-windows/src/tasks/taskExport.ts +++ b/packages/engine-rn-windows/src/tasks/taskExport.ts @@ -1,30 +1,15 @@ -import { - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { clearWindowsTemporaryFiles, packageWindowsApp } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; // TODO Implement export windows app (currently it only seems to be available through VS Studio itself...) - -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskExport', `parent:${parentTask}`); - - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); - - if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - await clearWindowsTemporaryFiles(c); - return packageWindowsApp(c); -}; - const Task: RnvTask = { description: 'Export the app into deployable binary', - fn, + dependsOn: [RnvTaskName.build], + fn: async () => { + await clearWindowsTemporaryFiles(); + return packageWindowsApp(); + }, task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-windows/src/tasks/taskPackage.ts b/packages/engine-rn-windows/src/tasks/taskPackage.ts index a0c9da6675..f553950331 100644 --- a/packages/engine-rn-windows/src/tasks/taskPackage.ts +++ b/packages/engine-rn-windows/src/tasks/taskPackage.ts @@ -1,33 +1,17 @@ -import { - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - getConfigProp, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, getConfigProp, RnvTask, RnvTaskName } from '@rnv/core'; import { SdkPlatforms } from '../sdk/constants'; import { packageBundleForWindows } from '../sdk'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskPackage', `parent:${parentTask}`); - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); - - const bundleAssets = getConfigProp('bundleAssets'); - - if (!bundleAssets) { - return true; - } - - if (shouldSkipTask(RnvTaskName.package, originTask)) return true; - return packageBundleForWindows(c); -}; - const Task: RnvTask = { description: 'Package source files into bundle', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + const bundleAssets = getConfigProp('bundleAssets'); + if (!bundleAssets) { + return true; + } + return packageBundleForWindows(); + }, task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/engine-rn-windows/src/tasks/taskRun.ts b/packages/engine-rn-windows/src/tasks/taskRun.ts index 332f718003..60ce31702b 100644 --- a/packages/engine-rn-windows/src/tasks/taskRun.ts +++ b/packages/engine-rn-windows/src/tasks/taskRun.ts @@ -1,35 +1,17 @@ -import { - logTask, - RnvTaskOptionPresets, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; import { clearWindowsTemporaryFiles, ruWindowsProject } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { port } = c.runtime; - const { target } = c.runtime; - const { hosted } = c.program.opts(); - logTask('taskRun', `parent:${parentTask} port:${port} target:${target} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - await clearWindowsTemporaryFiles(c); - await startBundlerIfRequired(RnvTaskName.run, originTask); - await ruWindowsProject(c); - return waitForBundlerIfRequired(); -}; - const Task: RnvTask = { description: 'Run your app in a window on desktop', - fn, + dependsOn: [RnvTaskName.configure], + fn: async ({ originTaskName }) => { + await clearWindowsTemporaryFiles(); + await startBundlerIfRequired(RnvTaskName.run, originTaskName); + await ruWindowsProject(); + return waitForBundlerIfRequired(); + }, task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), diff --git a/packages/integration-docker/src/tasks/taskDockerDeploy.ts b/packages/integration-docker/src/tasks/taskDockerDeploy.ts index 6c082b7e81..5406df4dfe 100644 --- a/packages/integration-docker/src/tasks/taskDockerDeploy.ts +++ b/packages/integration-docker/src/tasks/taskDockerDeploy.ts @@ -1,33 +1,13 @@ -import { - RnvTaskFn, - logTask, - executeOrSkipTask, - initializeTask, - findSuitableTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import Docker from '../docker'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskDockerDeploy', `parent:${parentTask}`); - - if (c.program.opts().only) { - // If run as standalone command skip all the export - await executeOrSkipTask(RnvTaskName.export, 'docker export', originTask); - } else { - const taskInstance = await findSuitableTask(RnvTaskName.export); - if (taskInstance) await initializeTask(taskInstance); - } - - const docker = new Docker(); - await docker.doDeploy(); - return true; -}; - const Task: RnvTask = { + dependsOn: [RnvTaskName.export], description: 'Deploys your project to docker image', - fn, + fn: async () => { + const docker = new Docker(); + return docker.doDeploy(); + }, task: 'docker deploy', platforms: ['web'], }; diff --git a/packages/integration-docker/src/tasks/taskDockerExport.ts b/packages/integration-docker/src/tasks/taskDockerExport.ts index c12fef83ee..b13d436d31 100644 --- a/packages/integration-docker/src/tasks/taskDockerExport.ts +++ b/packages/integration-docker/src/tasks/taskDockerExport.ts @@ -1,33 +1,15 @@ -import { - RnvTaskFn, - logTask, - executeOrSkipTask, - initializeTask, - findSuitableTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import Docker from '../docker'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskDockerExport', `parent:${parentTask}`); - - if (c.program.opts().only) { - // If run as standalone command skip all the export - await executeOrSkipTask(RnvTaskName.export, 'docker export', originTask); - } else { - const taskInstance = await findSuitableTask(RnvTaskName.export); - if (taskInstance) await initializeTask(taskInstance); - } - - const docker = new Docker(); - await docker.doExport(); - return true; -}; - const Task: RnvTask = { description: 'Exports your project to docker image', - fn, + // TODO: we need to do this differently + // Project neds to define pipeline of tasks instead of integration + dependsOn: [RnvTaskName.export], + fn: async () => { + const docker = new Docker(); + await docker.doExport(); + }, task: 'docker export', platforms: ['web'], }; diff --git a/packages/integration-starter/src/index.ts b/packages/integration-starter/src/index.ts index 49078ece38..aa2af4d779 100644 --- a/packages/integration-starter/src/index.ts +++ b/packages/integration-starter/src/index.ts @@ -1,13 +1,14 @@ import taskStarterHello from './tasks/taskStarterHello'; import taskSingleCommand from './tasks/taskSingleCommand'; - //@ts-ignore -import config from '../renative.integration.json'; -import { RnvIntegration } from '@rnv/core'; +import CNF from '../renative.integration.json'; +//@ts-ignore +import PKG from '../package.json'; +import { RnvIntegration, generateRnvTaskMap } from '@rnv/core'; const Integration: RnvIntegration = { - getTasks: () => [taskStarterHello, taskSingleCommand], - config, + tasks: generateRnvTaskMap([taskStarterHello, taskSingleCommand], PKG), + config: CNF, }; export default Integration; diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index 242cc7f47c..e7d73a4441 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -1,13 +1,11 @@ -import { RnvContext, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; - -const fn: RnvTaskFn = async (c: RnvContext) => { - logSuccess(`Hello from Integration Starter single command! ---my-opt: "${c.program.opts().myOpt}"`); -}; +import { logSuccess, RnvTask } from '@rnv/core'; const Task: RnvTask = { description: 'Prints hello message', - fn, + fn: async ({ ctx }) => { + logSuccess(`Hello from Integration Starter single command! + --my-opt: "${ctx.program.opts().myOpt}"`); + }, task: 'starter-single-command', options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], }; diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index 2ce1df8877..e72b357605 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -1,13 +1,11 @@ -import { RnvContext, logSuccess, RnvTask, RnvTaskFn } from '@rnv/core'; - -const fn: RnvTaskFn = async (c: RnvContext) => { - logSuccess(`Hello from Integration Starter! ---my-opt: "${c.program.opts().myOpt}"`); -}; +import { logSuccess, RnvTask } from '@rnv/core'; const Task: RnvTask = { description: 'Prints hello message', - fn, + fn: async ({ ctx }) => { + logSuccess(`Hello from Integration Starter! +--my-opt: "${ctx.program.opts().myOpt}"`); + }, task: 'starter hello', options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], }; diff --git a/packages/sdk-android/src/tasks/taskBuild.ts b/packages/sdk-android/src/tasks/taskBuild.ts index 615bddd3a1..7802f5be11 100644 --- a/packages/sdk-android/src/tasks/taskBuild.ts +++ b/packages/sdk-android/src/tasks/taskBuild.ts @@ -1,30 +1,14 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTaskName, RnvTaskOptionPresets, createTask } from '@rnv/core'; import { buildReactNativeAndroid } from '@rnv/sdk-react-native'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild'); - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); - - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - return buildReactNativeAndroid(); -}; - -const Task: RnvTask = { +export default createTask({ description: 'Build project binary', - fn, + fn: async () => { + return buildReactNativeAndroid(); + }, task: RnvTaskName.build, + dependsOn: [RnvTaskName.package], options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskConfigure.ts b/packages/sdk-android/src/tasks/taskConfigure.ts index 6112d34c07..01c3f9e7bc 100644 --- a/packages/sdk-android/src/tasks/taskConfigure.ts +++ b/packages/sdk-android/src/tasks/taskConfigure.ts @@ -1,41 +1,19 @@ -import { - logTask, - RnvTaskFn, - configureEntryPoint, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { configureEntryPoint, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { configureGradleProject } from '../runner'; import { jetifyIfRequired } from '../jetifier'; import { configureFontSources } from '@rnv/sdk-react-native'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - - await configureEntryPoint(c.platform); - - if (c.program.opts().only && !!parentTask) { - return true; - } - - await configureGradleProject(); - await jetifyIfRequired(); - - await configureFontSources(); - return true; -}; - const Task: RnvTask = { description: 'Configure current project', - fn, + fn: async () => { + await configureEntryPoint(); + await configureGradleProject(); + await jetifyIfRequired(); + return configureFontSources(); + }, task: RnvTaskName.configure, + dependsOn: [RnvTaskName.platformConfigure], options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, }; diff --git a/packages/sdk-android/src/tasks/taskEject.ts b/packages/sdk-android/src/tasks/taskEject.ts index a12330bc22..28eda8aec2 100644 --- a/packages/sdk-android/src/tasks/taskEject.ts +++ b/packages/sdk-android/src/tasks/taskEject.ts @@ -1,34 +1,18 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTaskName, RnvTaskOptionPresets, createTask } from '@rnv/core'; import { ejectGradleProject } from '../ejector'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskEject'); - - c.runtime._platformBuildsSuffix = '_eject/android'; - c.runtime._skipNativeDepResolutions = true; - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.eject, originTask); - - if (shouldSkipTask(RnvTaskName.eject, originTask)) return true; - - await ejectGradleProject(); -}; - -const Task: RnvTask = { +export default createTask({ description: 'Eject current project app to self contained native project', - fn, + beforeDependsOn: async ({ ctx }) => { + ctx.runtime._platformBuildsSuffix = '_eject/android'; + ctx.runtime._skipNativeDepResolutions = true; + }, + dependsOn: [RnvTaskName.package], + fn: async () => { + return ejectGradleProject(); + }, task: RnvTaskName.eject, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskLog.ts b/packages/sdk-android/src/tasks/taskLog.ts index 8024fa48f3..c80a5b5b38 100644 --- a/packages/sdk-android/src/tasks/taskLog.ts +++ b/packages/sdk-android/src/tasks/taskLog.ts @@ -1,20 +1,15 @@ -import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import { runAndroidLog } from '../runner'; import { checkAndConfigureAndroidSdks } from '../installer'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskLog', `parent:${parentTask}`); - - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); - - await checkAndConfigureAndroidSdks(); - return runAndroidLog(); -}; - const Task: RnvTask = { description: 'Attach logger to device or emulator and print out logs', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + await checkAndConfigureAndroidSdks(); + return runAndroidLog(); + }, task: RnvTaskName.log, platforms: SdkPlatforms, isGlobalScope: true, diff --git a/packages/sdk-android/src/tasks/taskPackage.ts b/packages/sdk-android/src/tasks/taskPackage.ts index 0d4898d092..a2b92a3b45 100644 --- a/packages/sdk-android/src/tasks/taskPackage.ts +++ b/packages/sdk-android/src/tasks/taskPackage.ts @@ -1,44 +1,25 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - getConfigProp, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { getConfigProp, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { packageAndroid } from '../runner'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskPackage', `parent:${parentTask}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); - - if (shouldSkipTask(RnvTaskName.package, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets'); - - if (!bundleAssets) { - return true; - } - - // NOTE: react-native v0.73 triggers packaging automatically so we skipping it unless we need to - // package it explicitly for tasks where it is not triggered automatically - - const signingConfig = getConfigProp('signingConfig'); - - if (originTask === RnvTaskName.eject || signingConfig !== 'Release') { - //if bundleAssets === true AND signingConfig is not releaase RN will not trigger packaging - return packageAndroid(); - } - return true; -}; - const Task: RnvTask = { description: 'Package source files into bundle', - fn, + dependsOn: [RnvTaskName.configure], + fn: async ({ originTaskName }) => { + const bundleAssets = getConfigProp('bundleAssets'); + if (!bundleAssets) { + return true; + } + // NOTE: react-native v0.73 triggers packaging automatically so we skipping it unless we need to + // package it explicitly for tasks where it is not triggered automatically + const signingConfig = getConfigProp('signingConfig'); + + if (originTaskName === RnvTaskName.eject || signingConfig !== 'Release') { + //if bundleAssets === true AND signingConfig is not releaase RN will not trigger packaging + return packageAndroid(); + } + return true; + }, task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/sdk-android/src/tasks/taskRun.ts b/packages/sdk-android/src/tasks/taskRun.ts index 8af72520e5..9def41ba95 100644 --- a/packages/sdk-android/src/tasks/taskRun.ts +++ b/packages/sdk-android/src/tasks/taskRun.ts @@ -1,59 +1,31 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - logRaw, - getConfigProp, - logSummary, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { getConfigProp, logSummary, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; import { getAndroidDeviceToRunOn, packageAndroid, runAndroid } from '../runner'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { platform } = c; - const { port } = c.runtime; - const { hosted } = c.program.opts(); - logTask('taskRun', `parent:${parentTask} port:${port} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets', false); +const Task: RnvTask = { + description: 'Run your rn app on target device or emulator', + dependsOn: [RnvTaskName.configure], + fn: async ({ ctx, originTaskName }) => { + const bundleAssets = getConfigProp('bundleAssets', false); - const runDevice = await getAndroidDeviceToRunOn(); - if (runDevice) { - c.runtime.target = runDevice?.name || runDevice?.udid; - } - if (!c.program.opts().only) { - await startBundlerIfRequired(RnvTaskName.run, originTask); - if (bundleAssets || platform === 'androidwear') { - await packageAndroid(); + const runDevice = await getAndroidDeviceToRunOn(); + if (runDevice) { + ctx.runtime.target = runDevice?.name || runDevice?.udid; } - await runAndroid(runDevice!); - if (!bundleAssets) { - logSummary({ header: 'BUNDLER STARTED' }); + if (!ctx.program.opts().only) { + await startBundlerIfRequired(RnvTaskName.run, originTaskName); + if (bundleAssets || ctx.platform === 'androidwear') { + await packageAndroid(); + } + await runAndroid(runDevice!); + if (!bundleAssets) { + logSummary({ header: 'BUNDLER STARTED' }); + } + return waitForBundlerIfRequired(); } - return waitForBundlerIfRequired(); - } - return runAndroid(runDevice!); -}; - -const taskRunHelp = async () => { - logRaw(` -More info at: https://renative.org/docs/api-cli -`); -}; - -const Task: RnvTask = { - description: 'Run your rn app on target device or emulator', - fn, - fnHelp: taskRunHelp, + return runAndroid(runDevice!); + }, task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), diff --git a/packages/sdk-android/src/tasks/taskSdkConfigure.ts b/packages/sdk-android/src/tasks/taskSdkConfigure.ts index 54744772b4..55663a5b8b 100644 --- a/packages/sdk-android/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-android/src/tasks/taskSdkConfigure.ts @@ -1,18 +1,14 @@ -import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async () => { - logTask('taskSdkConfigure'); - - await checkAndConfigureAndroidSdks(); - await checkAndroidSdk(); -}; - const Task: RnvTask = { description: 'Configures sdks', isPrivate: true, - fn, + fn: async () => { + await checkAndConfigureAndroidSdks(); + return checkAndroidSdk(); + }, task: RnvTaskName.sdkConfigure, platforms: SdkPlatforms, }; diff --git a/packages/sdk-android/src/tasks/taskTargetLaunch.ts b/packages/sdk-android/src/tasks/taskTargetLaunch.ts index cc69ee946a..3184a58c37 100644 --- a/packages/sdk-android/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-android/src/tasks/taskTargetLaunch.ts @@ -1,25 +1,18 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { launchAndroidSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetLaunch'); - - await isPlatformSupported(true); - await checkAndConfigureAndroidSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); - - const target = await getTargetWithOptionalPrompt(); - - await checkAndroidSdk(); - return launchAndroidSimulator(target); -}; - const Task: RnvTask = { description: 'Launch specific target', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + await checkAndConfigureAndroidSdks(); + const target = await getTargetWithOptionalPrompt(); + await checkAndroidSdk(); + return launchAndroidSimulator(target); + }, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-android/src/tasks/taskTargetList.ts b/packages/sdk-android/src/tasks/taskTargetList.ts index 93e26966ee..ffaaeab129 100644 --- a/packages/sdk-android/src/tasks/taskTargetList.ts +++ b/packages/sdk-android/src/tasks/taskTargetList.ts @@ -1,22 +1,16 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAndroidTargets } from '../deviceManager'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetList'); - - await isPlatformSupported(true); - await checkAndConfigureAndroidSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); - await checkAndroidSdk(); - - return listAndroidTargets(); -}; - const Task: RnvTask = { description: 'List all available targets for specific platform', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + await checkAndConfigureAndroidSdks(); + await checkAndroidSdk(); + return listAndroidTargets(); + }, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-apple/src/deviceManager.ts b/packages/sdk-apple/src/deviceManager.ts index 4403926179..15bec2a153 100644 --- a/packages/sdk-apple/src/deviceManager.ts +++ b/packages/sdk-apple/src/deviceManager.ts @@ -258,8 +258,9 @@ const _launchSimulator = async (selectedDevice: AppleDevice) => { return true; }; -export const listAppleDevices = async (c: RnvContext) => { +export const listAppleDevices = async () => { logDefault('listAppleDevices'); + const c = getContext(); const { platform } = c; const devicesArr = await getAppleDevices(c); let devicesString = ''; diff --git a/packages/sdk-apple/src/tasks/taskBuild.ts b/packages/sdk-apple/src/tasks/taskBuild.ts index cfd3dcbccd..fd898165ef 100644 --- a/packages/sdk-apple/src/tasks/taskBuild.ts +++ b/packages/sdk-apple/src/tasks/taskBuild.ts @@ -1,32 +1,17 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { buildXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskBuild'); - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.build, originTask); - - if (shouldSkipTask(RnvTaskName.build, originTask)) return true; - - if (parentTask === RnvTaskName.export) { - // build task is not necessary when exporting ios - return true; - } - return buildXcodeProject(); -}; - const Task: RnvTask = { description: 'Build project binary', - fn, + dependsOn: [RnvTaskName.package], + fn: async ({ parentTaskName }) => { + if (parentTaskName === RnvTaskName.export) { + // build task is not necessary when exporting ios + return true; + } + return buildXcodeProject(); + }, task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/sdk-apple/src/tasks/taskConfigure.ts b/packages/sdk-apple/src/tasks/taskConfigure.ts index c89a95fcf4..34bb21fc20 100644 --- a/packages/sdk-apple/src/tasks/taskConfigure.ts +++ b/packages/sdk-apple/src/tasks/taskConfigure.ts @@ -1,29 +1,21 @@ -import { logTask, RnvTaskFn, configureEntryPoint, executeTask, shouldSkipTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { configureEntryPoint, RnvTask, RnvTaskName } from '@rnv/core'; import { configureFontSources } from '@rnv/sdk-react-native'; import { configureXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskConfigure'); - - await executeTask(RnvTaskName.platformConfigure, RnvTaskName.configure, originTask); - if (shouldSkipTask(RnvTaskName.configure, originTask)) return true; - - await configureEntryPoint(c.platform); - - if (c.program.opts().only && !!parentTask) { - return true; - } - - await configureXcodeProject(); - await configureFontSources(); - - return true; -}; - const Task: RnvTask = { description: 'Configure current project', - fn, + dependsOn: [RnvTaskName.platformConfigure], + fn: async ({ ctx, parentTaskName }) => { + await configureEntryPoint(); + + if (ctx.program.opts().only && !!parentTaskName) { + return true; + } + + await configureXcodeProject(); + await configureFontSources(); + }, task: RnvTaskName.configure, platforms: SdkPlatforms, }; diff --git a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts index 927369e9da..bcfc4944fc 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts @@ -1,39 +1,22 @@ -import { - RnvTaskFn, - logWarning, - logTask, - getFileListSync, - executeAsync, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { logWarning, getFileListSync, executeAsync, RnvTask, RnvTaskName } from '@rnv/core'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoInstallCerts'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoInstallCerts, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoInstallCerts, originTask)) return true; - - const kChain = c.program.opts().keychain || 'ios-build.keychain'; - - const list = getFileListSync(c.paths.workspace.project.dir); - const cerArr = list.filter((v) => v.endsWith('.cer')); - - try { - Promise.all(cerArr.map((v) => executeAsync(`security import ${v} -k ${kChain} -A`))); - } catch (e) { - logWarning(e); - return true; - } -}; - const Task: RnvTask = { description: 'Installs certificates into keychain (mac only)', - fn, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const kChain = ctx.program.opts().keychain || 'ios-build.keychain'; + + const list = getFileListSync(ctx.paths.workspace.project.dir); + const cerArr = list.filter((v) => v.endsWith('.cer')); + + try { + Promise.all(cerArr.map((v) => executeAsync(`security import ${v} -k ${kChain} -A`))); + } catch (e) { + logWarning(e); + return true; + } + }, task: RnvTaskName.cryptoInstallCerts, platforms: SdkPlatforms, }; diff --git a/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts index ab81e12a09..679f194863 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts @@ -1,53 +1,40 @@ import path from 'path'; import { - RnvTaskFn, logWarning, logError, - logTask, logDebug, getFileListSync, copyFileSync, mkdirSync, fsExistsSync, - executeTask, - shouldSkipTask, RnvTask, RnvTaskName, } from '@rnv/core'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoInstallProfiles'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoInstallProfiles, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoInstallProfiles, originTask)) return true; - - const ppFolder = path.join(c.paths.user.homeDir, 'Library/MobileDevice/Provisioning Profiles'); - - if (!fsExistsSync(ppFolder)) { - logWarning(`folder ${ppFolder} does not exist!`); - mkdirSync(ppFolder); - } - - const list = getFileListSync(c.paths.workspace.project.dir); - const mobileprovisionArr = list.filter((v) => v.endsWith('.mobileprovision')); - - try { - mobileprovisionArr.forEach((v) => { - logDebug(`taskCryptoInstallProfiles: Installing: ${v}`); - copyFileSync(v, ppFolder); - }); - } catch (e) { - logError(e); - } - - return true; -}; - const Task: RnvTask = { description: 'Installs provisioning certificates found in your workspace (mac only)', - fn, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const ppFolder = path.join(ctx.paths.user.homeDir, 'Library/MobileDevice/Provisioning Profiles'); + + if (!fsExistsSync(ppFolder)) { + logWarning(`folder ${ppFolder} does not exist!`); + mkdirSync(ppFolder); + } + + const list = getFileListSync(ctx.paths.workspace.project.dir); + const mobileprovisionArr = list.filter((v) => v.endsWith('.mobileprovision')); + + try { + mobileprovisionArr.forEach((v) => { + logDebug(`taskCryptoInstallProfiles: Installing: ${v}`); + copyFileSync(v, ppFolder); + }); + } catch (e) { + logError(e); + } + }, task: RnvTaskName.cryptoInstallProfiles, platforms: SdkPlatforms, }; diff --git a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts index e339f15f33..5e1e14f285 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts @@ -1,20 +1,13 @@ -import { RnvTaskFn, executeTask, shouldSkipTask, logTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import { updateProfile } from '../fastlane'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { - logTask('taskCryptoUpdateProfile'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoUpdateProfile, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoUpdateProfile, originTask)) return true; - - await updateProfile(); -}; - const Task: RnvTask = { description: 'Update provisioning profile (mac only)', - fn, + dependsOn: [RnvTaskName.projectConfigure], + fn: async () => { + return updateProfile(); + }, task: RnvTaskName.cryptoUpdateProfile, platforms: SdkPlatforms, }; diff --git a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts index 71cd617fe9..39530c488a 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts @@ -1,13 +1,4 @@ -import { - RnvTaskFn, - listAppConfigsFoldersSync, - chalk, - logTask, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { listAppConfigsFoldersSync, chalk, logTask, RnvTask, RnvTaskName } from '@rnv/core'; import { updateProfile } from '../fastlane'; import { SdkPlatforms } from '../common'; @@ -19,28 +10,14 @@ const _updateProfile = (v: string) => .catch((e) => reject(e)); }); -const _updateProfiles = () => { - logTask('_updateProfiles', chalk().grey); - const acList = listAppConfigsFoldersSync(true); - - return acList.reduce((previousPromise, v) => previousPromise.then(() => _updateProfile(v)), Promise.resolve()); -}; - -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoUpdateProfiles'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoUpdateProfiles, originTask); - - if (shouldSkipTask(RnvTaskName.cryptoUpdateProfiles, originTask)) return true; - - _updateProfiles(); - - return true; -}; - const Task: RnvTask = { description: 'Will attempt to update all provisioning profiles (mac only)', - fn, + dependsOn: [RnvTaskName.projectConfigure], + fn: async () => { + const acList = listAppConfigsFoldersSync(true); + + return acList.reduce((previousPromise, v) => previousPromise.then(() => _updateProfile(v)), Promise.resolve()); + }, task: RnvTaskName.cryptoUpdateProfiles, platforms: SdkPlatforms, }; diff --git a/packages/sdk-apple/src/tasks/taskEject.ts b/packages/sdk-apple/src/tasks/taskEject.ts index d8b986a6e8..af15b286bf 100644 --- a/packages/sdk-apple/src/tasks/taskEject.ts +++ b/packages/sdk-apple/src/tasks/taskEject.ts @@ -1,32 +1,17 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { ejectXcodeProject } from '../ejector'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskEject'); - - c.runtime._platformBuildsSuffix = '_eject'; - - c.runtime._skipNativeDepResolutions = true; - - await executeOrSkipTask(RnvTaskName.package, RnvTaskName.eject, originTask); - - if (shouldSkipTask(RnvTaskName.eject, originTask)) return true; - - return ejectXcodeProject(); -}; - const Task: RnvTask = { description: 'Eject current ios project app to self contained native project', - fn, + dependsOn: [RnvTaskName.package], + beforeDependsOn: async ({ ctx }) => { + ctx.runtime._platformBuildsSuffix = '_eject'; + ctx.runtime._skipNativeDepResolutions = true; + }, + fn: async () => { + return ejectXcodeProject(); + }, task: RnvTaskName.eject, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/sdk-apple/src/tasks/taskExport.ts b/packages/sdk-apple/src/tasks/taskExport.ts index 55eec95811..e09b78261e 100644 --- a/packages/sdk-apple/src/tasks/taskExport.ts +++ b/packages/sdk-apple/src/tasks/taskExport.ts @@ -1,28 +1,13 @@ -import { - RnvTaskFn, - logTask, - RnvTaskOptionPresets, - executeOrSkipTask, - shouldSkipTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; import { exportXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskExport', `parent:${parentTask}`); - - await executeOrSkipTask(RnvTaskName.build, RnvTaskName.export, originTask); - - if (shouldSkipTask(RnvTaskName.export, originTask)) return true; - - return exportXcodeProject(); -}; - const Task: RnvTask = { description: 'Export the app into deployable binary', - fn, + dependsOn: [RnvTaskName.build], + fn: async () => { + return exportXcodeProject(); + }, task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/sdk-apple/src/tasks/taskLog.ts b/packages/sdk-apple/src/tasks/taskLog.ts index 0cdc29ca13..ad42db6b67 100644 --- a/packages/sdk-apple/src/tasks/taskLog.ts +++ b/packages/sdk-apple/src/tasks/taskLog.ts @@ -1,18 +1,13 @@ -import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import { runAppleLog } from '../runner'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskLog', `parent:${parentTask}`); - - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); - - return runAppleLog(); -}; - const Task: RnvTask = { description: 'Attach logger to device or emulator and print out logs', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + return runAppleLog(); + }, task: RnvTaskName.log, platforms: SdkPlatforms, isGlobalScope: true, diff --git a/packages/sdk-apple/src/tasks/taskPackage.ts b/packages/sdk-apple/src/tasks/taskPackage.ts index 6084127a07..840786a1cf 100644 --- a/packages/sdk-apple/src/tasks/taskPackage.ts +++ b/packages/sdk-apple/src/tasks/taskPackage.ts @@ -1,35 +1,19 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - getConfigProp, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { getConfigProp, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { packageBundleForXcode } from '../runner'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskPackage', `parent:${parentTask}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.package, originTask); - - if (shouldSkipTask(RnvTaskName.package, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets'); - - if (!bundleAssets) { - return true; - } - - return packageBundleForXcode(); -}; - const Task: RnvTask = { description: 'Package source files into bundle', - fn, + dependsOn: [RnvTaskName.configure], + fn: async () => { + const bundleAssets = getConfigProp('bundleAssets'); + + if (!bundleAssets) { + return true; + } + + return packageBundleForXcode(); + }, task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/sdk-apple/src/tasks/taskRun.ts b/packages/sdk-apple/src/tasks/taskRun.ts index 3c3a9764e6..36bf4322a2 100644 --- a/packages/sdk-apple/src/tasks/taskRun.ts +++ b/packages/sdk-apple/src/tasks/taskRun.ts @@ -1,52 +1,25 @@ -import { - logTask, - RnvTaskFn, - executeOrSkipTask, - shouldSkipTask, - logRaw, - getConfigProp, - logSummary, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, -} from '@rnv/core'; +import { getConfigProp, logSummary, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; import { getIosDeviceToRunOn, runXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { port } = c.runtime; - const { hosted } = c.program.opts(); - logTask('taskRun', `parent:${parentTask} port:${port} hosted:${hosted}`); - - await executeOrSkipTask(RnvTaskName.configure, RnvTaskName.run, originTask); - - if (shouldSkipTask(RnvTaskName.run, originTask)) return true; - - const bundleAssets = getConfigProp('bundleAssets', false); - - const runDeviceArgs = await getIosDeviceToRunOn(c); - if (!c.program.opts().only) { - await startBundlerIfRequired(RnvTaskName.run, originTask); - await runXcodeProject(runDeviceArgs); - if (!bundleAssets) { - logSummary({ header: 'BUNDLER STARTED' }); - } - return waitForBundlerIfRequired(); - } - return runXcodeProject(runDeviceArgs); -}; - -const taskRunHelp = async () => { - logRaw(` -More info at: https://renative.org/docs/api-cli -`); -}; - const Task: RnvTask = { description: 'Run your rn app on target device or emulator', - fn, - fnHelp: taskRunHelp, + dependsOn: [RnvTaskName.configure], + fn: async ({ ctx, originTaskName }) => { + const bundleAssets = getConfigProp('bundleAssets', false); + + const runDeviceArgs = await getIosDeviceToRunOn(ctx); + if (!ctx.program.opts().only) { + await startBundlerIfRequired(RnvTaskName.run, originTaskName); + await runXcodeProject(runDeviceArgs); + if (!bundleAssets) { + logSummary({ header: 'BUNDLER STARTED' }); + } + return waitForBundlerIfRequired(); + } + return runXcodeProject(runDeviceArgs); + }, task: RnvTaskName.run, isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), diff --git a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts index 3877a961e0..81046fc6ca 100644 --- a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts @@ -1,22 +1,15 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchAppleSimulator } from '../deviceManager'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetLaunch'); - - await isPlatformSupported(true); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); - - const target = await getTargetWithOptionalPrompt(); - - return launchAppleSimulator(target); -}; - const Task: RnvTask = { description: 'Launch specific ios target', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + const target = await getTargetWithOptionalPrompt(); + return launchAppleSimulator(target); + }, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-apple/src/tasks/taskTargetList.ts b/packages/sdk-apple/src/tasks/taskTargetList.ts index abd2f68ea9..acb0e2f533 100644 --- a/packages/sdk-apple/src/tasks/taskTargetList.ts +++ b/packages/sdk-apple/src/tasks/taskTargetList.ts @@ -1,18 +1,13 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAppleDevices } from '../deviceManager'; import { SdkPlatforms } from '../common'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetList'); - - await isPlatformSupported(true); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); - return listAppleDevices(c); -}; - const Task: RnvTask = { description: 'List all available targets for specific platform', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + return listAppleDevices(); + }, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts index ff840c9259..ca3effea09 100644 --- a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts @@ -1,22 +1,15 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchKaiOSSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetLaunch'); - - await isPlatformSupported(true); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); - - const target = await getTargetWithOptionalPrompt(); - - return launchKaiOSSimulator(target); -}; - const Task: RnvTask = { description: 'Launch specific target', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + const target = await getTargetWithOptionalPrompt(); + return launchKaiOSSimulator(target); + }, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-react-native/src/tasks/taskStart.ts b/packages/sdk-react-native/src/tasks/taskStart.ts index 6cd900a877..b8eb086fc8 100644 --- a/packages/sdk-react-native/src/tasks/taskStart.ts +++ b/packages/sdk-react-native/src/tasks/taskStart.ts @@ -1,47 +1,30 @@ -import { - logTask, - RnvTaskFn, - executeTask, - shouldSkipTask, - RnvTask, - RnvTaskName, - RnvTaskOptionPresets, - doResolve, -} from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptionPresets, doResolve } from '@rnv/core'; import { startReactNative } from '../metroRunner'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - const { hosted } = c.program.opts(); - - logTask('taskStart', `parent:${parentTask} port:${c.runtime.port} hosted:${!!hosted}`); - - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - // Disable reset for other commands (ie. cleaning platforms) - c.runtime.disableReset = true; - if (!parentTask) { - await executeTask(RnvTaskName.configureSoft, RnvTaskName.start, originTask); - } - - if (shouldSkipTask(RnvTaskName.start, originTask)) return true; - - let customCliPath: string | undefined; - let metroConfigName: string | undefined; - const { reactNativePackageName, reactNativeMetroConfigName } = c.runtime?.runtimeExtraProps || {}; - if (reactNativePackageName) { - customCliPath = `${doResolve(reactNativePackageName)}/local-cli/cli.js`; - } - if (reactNativeMetroConfigName) { - metroConfigName = reactNativeMetroConfigName; - } - return startReactNative({ waitForBundler: !parentTask, customCliPath, metroConfigName }); -}; - const Task: RnvTask = { description: 'Starts react-native bundler', - fn, + dependsOn: [RnvTaskName.configureSoft], + //TODO: implement dependsOnTrigger + // dependsOnTrigger: ({ parentTaskName }) => !parentTaskName, + fn: async ({ ctx, parentTaskName }) => { + const { hosted } = ctx.program.opts(); + if (hosted) { + return Promise.reject('This platform does not support hosted mode'); + } + // Disable reset for other commands (ie. cleaning platforms) + ctx.runtime.disableReset = true; + let customCliPath: string | undefined; + let metroConfigName: string | undefined; + const { reactNativePackageName, reactNativeMetroConfigName } = ctx.runtime?.runtimeExtraProps || {}; + if (reactNativePackageName) { + customCliPath = `${doResolve(reactNativePackageName)}/local-cli/cli.js`; + } + if (reactNativeMetroConfigName) { + metroConfigName = reactNativeMetroConfigName; + } + return startReactNative({ waitForBundler: !parentTaskName, customCliPath, metroConfigName }); + }, task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, diff --git a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts index 2c4467e756..cc76ef0a5c 100644 --- a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts @@ -1,18 +1,14 @@ -import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async () => { - logTask('taskSdkConfigure'); - - await checkAndConfigureTizenSdks(); - await checkTizenSdk(); -}; - const Task: RnvTask = { description: 'Configures sdks', isPrivate: true, - fn, + fn: async () => { + await checkAndConfigureTizenSdks(); + await checkTizenSdk(); + }, task: RnvTaskName.sdkConfigure, platforms: SdkPlatforms, }; diff --git a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts index a7b0beb6b5..3c224922f5 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts @@ -1,25 +1,18 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { launchTizenSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetLaunch'); - - await isPlatformSupported(true); - await checkAndConfigureTizenSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); - - const target = await getTargetWithOptionalPrompt(); - - await checkTizenSdk(); - return launchTizenSimulator(target); -}; - const Task: RnvTask = { description: 'Launch specific target', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + await checkAndConfigureTizenSdks(); + const target = await getTargetWithOptionalPrompt(); + await checkTizenSdk(); + return launchTizenSimulator(target); + }, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-tizen/src/tasks/taskTargetList.ts b/packages/sdk-tizen/src/tasks/taskTargetList.ts index 33303f04de..4d2a90b488 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetList.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetList.ts @@ -1,22 +1,16 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { listTizenTargets } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetList'); - - await isPlatformSupported(true); - await checkAndConfigureTizenSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); - await checkTizenSdk(); - - return listTizenTargets(); -}; - const Task: RnvTask = { description: 'List all available targets for specific platform', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + await checkAndConfigureTizenSdks(); + await checkTizenSdk(); + return listTizenTargets(); + }, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts index 1e0a29b65b..a87773d1f0 100644 --- a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts @@ -1,18 +1,14 @@ -import { logTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async () => { - logTask('taskSdkConfigure'); - - await checkAndConfigureWebosSdks(); - await checkWebosSdk(); -}; - const Task: RnvTask = { description: 'Configures sdks', isPrivate: true, - fn, + fn: async () => { + await checkAndConfigureWebosSdks(); + await checkWebosSdk(); + }, task: RnvTaskName.sdkConfigure, platforms: SdkPlatforms, }; diff --git a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts index b3a4435af3..18c5b0950a 100644 --- a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts @@ -1,25 +1,18 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { launchWebOSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetLaunch'); - - await isPlatformSupported(true); - await checkAndConfigureWebosSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetLaunch, originTask); - - const target = await getTargetWithOptionalPrompt(); - - await checkWebosSdk(); - return launchWebOSimulator(target); -}; - const Task: RnvTask = { description: 'Launch specific target', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + await checkAndConfigureWebosSdks(); + const target = await getTargetWithOptionalPrompt(); + await checkWebosSdk(); + return launchWebOSimulator(target); + }, task: RnvTaskName.targetLaunch, options: [RnvTaskOptions.target], platforms: SdkPlatforms, diff --git a/packages/sdk-webos/src/tasks/taskTargetList.ts b/packages/sdk-webos/src/tasks/taskTargetList.ts index 0ce26af8e2..22cc53a664 100644 --- a/packages/sdk-webos/src/tasks/taskTargetList.ts +++ b/packages/sdk-webos/src/tasks/taskTargetList.ts @@ -1,22 +1,16 @@ -import { isPlatformSupported, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { listWebOSTargets } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTargetList'); - - await isPlatformSupported(true); - await checkAndConfigureWebosSdks(); - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.targetList, originTask); - await checkWebosSdk(); - - return listWebOSTargets(); -}; - const Task: RnvTask = { description: 'List all available targets for specific platform', - fn, + dependsOn: [RnvTaskName.workspaceConfigure], + fn: async () => { + await checkAndConfigureWebosSdks(); + await checkWebosSdk(); + return listWebOSTargets(); + }, task: RnvTaskName.targetList, options: [RnvTaskOptions.target], platforms: SdkPlatforms, From 2c4925c8e287757544ef21a33fbe738ef7900b60 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 01:02:34 +0100 Subject: [PATCH 116/175] task system refactor pt2 --- packages/engine-core/src/index.ts | 11 +- .../src/tasks/app/taskAppConfigure.ts | 120 ++++--- .../src/tasks/app/taskAppCreate.ts | 273 ++++++++-------- .../src/tasks/app/taskAppSwitch.ts | 34 +- .../src/tasks/bootstrap/taskNew.ts | 90 +++--- .../engine-core/src/tasks/crypto/common.ts | 4 +- .../src/tasks/crypto/taskCryptoDecrypt.ts | 217 ++++++------- .../src/tasks/crypto/taskCryptoEncrypt.ts | 138 ++++---- .../engine-core/src/tasks/global/taskClean.ts | 299 +++++++++--------- .../src/tasks/global/taskConfig.ts | 16 +- .../src/tasks/global/taskDoctor.ts | 121 ++++--- .../engine-core/src/tasks/global/taskHelp.ts | 42 ++- .../src/tasks/global/taskInstall.ts | 40 +-- .../engine-core/src/tasks/global/taskKill.ts | 88 +++--- .../src/tasks/global/taskStatus.ts | 6 +- .../src/tasks/hooks/taskHooksList.ts | 47 +-- .../src/tasks/hooks/taskHooksPipes.ts | 21 +- .../src/tasks/hooks/taskHooksRun.ts | 94 +++--- .../engine-core/src/tasks/linking/taskLink.ts | 70 ++-- .../src/tasks/linking/taskUnlink.ts | 40 ++- .../tasks/platform/taskPlatformConfigure.ts | 85 +++-- .../src/tasks/platform/taskPlatformConnect.ts | 135 ++++---- .../src/tasks/platform/taskPlatformEject.ts | 95 +++--- .../src/tasks/platform/taskPlatformList.ts | 28 +- .../src/tasks/platform/taskPlatformSetup.ts | 47 +-- .../src/tasks/plugin/taskPluginAdd.ts | 143 ++++----- .../src/tasks/plugin/taskPluginList.ts | 19 +- .../src/tasks/plugin/taskPluginUpdate.ts | 79 ++--- .../src/tasks/project/taskConfigureSoft.ts | 40 +-- .../src/tasks/project/taskProjectConfigure.ts | 175 +++++----- .../src/tasks/project/taskProjectUpgrade.ts | 98 +++--- .../tasks/telemetry/taskTelemetryDisable.ts | 28 +- .../tasks/telemetry/taskTelemetryEnable.ts | 28 +- .../tasks/telemetry/taskTelemetryStatus.ts | 36 +-- .../src/tasks/template/taskTemplateAdd.ts | 35 +- .../src/tasks/template/taskTemplateApply.ts | 62 ++-- .../src/tasks/template/taskTemplateList.ts | 20 +- .../src/tasks/workspace/taskWorkspaceAdd.ts | 77 ++--- .../tasks/workspace/taskWorkspaceConfigure.ts | 113 ++++--- .../tasks/workspace/taskWorkspaceConnect.ts | 51 +-- .../src/tasks/workspace/taskWorkspaceList.ts | 37 +-- .../tasks/workspace/taskWorkspaceUpdate.ts | 20 -- 42 files changed, 1459 insertions(+), 1763 deletions(-) delete mode 100644 packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index f9bd84870f..2980e4e80b 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -1,4 +1,4 @@ -import { RnvEngine, generateEngineTasks } from '@rnv/core'; +import { RnvEngine, generateRnvTaskMap } from '@rnv/core'; import taskCryptoDecrypt from './tasks/crypto/taskCryptoDecrypt'; import taskCryptoEncrypt from './tasks/crypto/taskCryptoEncrypt'; @@ -16,7 +16,6 @@ import taskPluginUpdate from './tasks/plugin/taskPluginUpdate'; import taskWorkspaceList from './tasks/workspace/taskWorkspaceList'; import taskWorkspaceAdd from './tasks/workspace/taskWorkspaceAdd'; import taskWorkspaceConnect from './tasks/workspace/taskWorkspaceConnect'; -import taskWorkspaceUpdate from './tasks/workspace/taskWorkspaceUpdate'; import taskHooksList from './tasks/hooks/taskHooksList'; import taskHooksRun from './tasks/hooks/taskHooksRun'; import taskHooksPipes from './tasks/hooks/taskHooksPipes'; @@ -40,7 +39,8 @@ import taskTelemetryStatus from './tasks/telemetry/taskTelemetryStatus'; import taskTelemetryEnable from './tasks/telemetry/taskTelemetryEnable'; import taskTelemetryDisable from './tasks/telemetry/taskTelemetryDisable'; import taskSwitch from './tasks/app/taskAppSwitch'; - +//@ts-ignore +import PKG from '../package.json'; const CNF = { // title: 'Engine Core', id: 'engine-core', @@ -53,7 +53,7 @@ const CNF = { const Engine: RnvEngine = { runtimeExtraProps: {}, serverDirName: '', - tasks: generateEngineTasks( + tasks: generateRnvTaskMap( [ taskCryptoDecrypt, taskCryptoEncrypt, @@ -71,7 +71,6 @@ const Engine: RnvEngine = { taskWorkspaceList, taskWorkspaceAdd, taskWorkspaceConnect, - taskWorkspaceUpdate, taskHooksList, taskHooksRun, taskHooksPipes, @@ -96,7 +95,7 @@ const Engine: RnvEngine = { taskTelemetryDisable, taskSwitch, ], - CNF + PKG ), config: CNF, // package: '', diff --git a/packages/engine-core/src/tasks/app/taskAppConfigure.ts b/packages/engine-core/src/tasks/app/taskAppConfigure.ts index 81f3ba49da..355f348c9f 100644 --- a/packages/engine-core/src/tasks/app/taskAppConfigure.ts +++ b/packages/engine-core/src/tasks/app/taskAppConfigure.ts @@ -36,12 +36,12 @@ const _loadAppConfigIDfromDir = (dirName: string, appConfigsDir: string) => { return { dir: dirName, id: null }; }; -const _askUserAboutConfigs = async (c: RnvContext, dir: string, id: string, basePath: string) => { +const _askUserAboutConfigs = async (ctx: RnvContext, dir: string, id: string, basePath: string) => { logTask('_askUserAboutConfigs'); logWarning( `AppConfig error - It seems you have a mismatch between appConfig folder name (${dir}) and the id defined in renative.json (${id}). They must match.` ); - if (c.program.opts().ci === true) { + if (ctx.program.opts().ci === true) { throw new Error('You cannot continue if you set --ci flag. please fix above error first'); } const { choice } = await inquirerPrompt({ @@ -89,19 +89,19 @@ const _askUserAboutConfigs = async (c: RnvContext, dir: string, id: string, base }; /* eslint-disable no-await-in-loop */ -const matchAppConfigID = async (c: RnvContext, appConfigID: string) => { +const matchAppConfigID = async (ctx: RnvContext, appConfigID: string) => { logTask('matchAppConfigID', `appId:${appConfigID}`); if (!appConfigID) return false; - const { appConfigsDirs, appConfigsDirNames } = c.paths.project; + const { appConfigsDirs, appConfigsDirNames } = ctx.paths.project; const acIndex = appConfigsDirNames.indexOf(appConfigID); if (acIndex !== -1) { let conf = _loadAppConfigIDfromDir(appConfigID, appConfigsDirs[acIndex]); const { dir, id } = conf; if (id !== dir) { - conf = await _askUserAboutConfigs(c, conf.dir, conf.id, path.join(appConfigsDirs[acIndex], '..')); + conf = await _askUserAboutConfigs(ctx, conf.dir, conf.id, path.join(appConfigsDirs[acIndex], '..')); } return conf.id; @@ -109,14 +109,14 @@ const matchAppConfigID = async (c: RnvContext, appConfigID: string) => { return false; }; -const _findAndSwitchAppConfigDir = async (c: RnvContext) => { +const _findAndSwitchAppConfigDir = async (ctx: RnvContext) => { logTask('_findAndSwitchAppConfigDir'); - const { appConfigsDirNames } = c.paths.project; + const { appConfigsDirNames } = ctx.paths.project; if (appConfigsDirNames.length) { if (appConfigsDirNames.length === 1) { // we have only one, skip the question logInfo(`Found only one app config available. Will use ${chalk().bold(appConfigsDirNames[0])}`); - _setAppId(c, appConfigsDirNames[0]); + _setAppId(ctx, appConfigsDirNames[0]); return true; } @@ -130,7 +130,7 @@ const _findAndSwitchAppConfigDir = async (c: RnvContext) => { }); if (conf) { - _setAppId(c, conf); + _setAppId(ctx, conf); return true; } } @@ -138,76 +138,72 @@ const _findAndSwitchAppConfigDir = async (c: RnvContext) => { return false; }; -const _setAppId = (c: RnvContext, appId: string) => { - const currentAppConfigId = c.files.project?.configLocal?._meta?.currentAppConfigId; +const _setAppId = (ctx: RnvContext, appId: string) => { + const currentAppConfigId = ctx.files.project?.configLocal?._meta?.currentAppConfigId; - logTask('_setAppId', `appId:${appId} runtime.appId:${c.runtime.appId} _meta.appId:${currentAppConfigId}`); - c.runtime.appId = appId || c.runtime.appId || currentAppConfigId; - c.runtime.appDir = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${c.platform}`); + logTask('_setAppId', `appId:${appId} runtime.appId:${ctx.runtime.appId} _meta.appId:${currentAppConfigId}`); + ctx.runtime.appId = appId || ctx.runtime.appId || currentAppConfigId; + ctx.runtime.appDir = path.join(ctx.paths.project.builds.dir, `${ctx.runtime.appId}_${ctx.platform}`); }; -const fn = async (c: RnvContext) => { - logTask('taskAppConfigure'); - - c.paths.project.appConfigsDirNames = listAppConfigsFoldersSync(true); - c.paths.project.appConfigsDirNames.forEach((dirName) => { - c.paths.project.appConfigsDirs.push(path.join(c.paths.project.appConfigsDir, dirName)); - }); - - const appConfigsDirsExt = c.buildConfig?.paths?.appConfigsDirs; - if (appConfigsDirsExt) { - appConfigsDirsExt.forEach((apePath) => { - const appConfigsExt = listAppConfigsFoldersSync(true, apePath); - appConfigsExt.forEach((appExtName) => { - c.paths.project.appConfigsDirNames.push(appExtName); - c.paths.project.appConfigsDirs.push(path.join(apePath, appExtName)); - }); +const Task: RnvTask = { + description: 'Configure project with specific appConfig', + fn: async ({ ctx }) => { + ctx.paths.project.appConfigsDirNames = listAppConfigsFoldersSync(true); + ctx.paths.project.appConfigsDirNames.forEach((dirName) => { + ctx.paths.project.appConfigsDirs.push(path.join(ctx.paths.project.appConfigsDir, dirName)); }); - } - // Reset appId if appConfig no longer exists but renative.local.json still has reference to it - if (c.runtime.appId && !c.paths.project.appConfigsDirNames.includes(c.runtime.appId)) { - c.runtime.appId = undefined; - } + const appConfigsDirsExt = ctx.buildConfig?.paths?.appConfigsDirs; + if (appConfigsDirsExt) { + appConfigsDirsExt.forEach((apePath) => { + const appConfigsExt = listAppConfigsFoldersSync(true, apePath); + appConfigsExt.forEach((appExtName) => { + ctx.paths.project.appConfigsDirNames.push(appExtName); + ctx.paths.project.appConfigsDirs.push(path.join(apePath, appExtName)); + }); + }); + } - if (c.program.opts().appConfigID === true || (!c.program.opts().appConfigID && !c.runtime.appId)) { - const hasAppConfig = await _findAndSwitchAppConfigDir(c); - if (!hasAppConfig) { - // await executeTask(c, RnvTaskName.appCreate, RnvTaskName.appConfigure); - // return Promise.reject('No app configs found for this project'); - logWarning('No app configs found for this project'); - return true; + // Reset appId if appConfig no longer exists but renative.local.json still has reference to it + if (ctx.runtime.appId && !ctx.paths.project.appConfigsDirNames.includes(ctx.runtime.appId)) { + ctx.runtime.appId = undefined; } - } else if (c.program.opts().appConfigID) { - const aid = await matchAppConfigID(c, c.program.opts().appConfigID); - if (!aid) { - logWarning(`Cannot find app config ${chalk().bold(c.program.opts().appConfigID)}`); - const hasAppConfig = await _findAndSwitchAppConfigDir(c); + + if (ctx.program.opts().appConfigID === true || (!ctx.program.opts().appConfigID && !ctx.runtime.appId)) { + const hasAppConfig = await _findAndSwitchAppConfigDir(ctx); if (!hasAppConfig) { // await executeTask(c, RnvTaskName.appCreate, RnvTaskName.appConfigure); // return Promise.reject('No app configs found for this project'); logWarning('No app configs found for this project'); return true; } + } else if (ctx.program.opts().appConfigID) { + const aid = await matchAppConfigID(ctx, ctx.program.opts().appConfigID); + if (!aid) { + logWarning(`Cannot find app config ${chalk().bold(ctx.program.opts().appConfigID)}`); + const hasAppConfig = await _findAndSwitchAppConfigDir(ctx); + if (!hasAppConfig) { + // await executeTask(c, RnvTaskName.appCreate, RnvTaskName.appConfigure); + // return Promise.reject('No app configs found for this project'); + logWarning('No app configs found for this project'); + return true; + } + } + _setAppId(ctx, aid); } - _setAppId(c, aid); - } - - // Generate true path to appConfig (ensure external appConfigsDirs are included) - if (c.runtime.appId) { - c.runtime.appConfigDir = - c.paths.project.appConfigsDirs[c.paths.project.appConfigsDirNames.indexOf(c.runtime.appId)]; - } - await updateRenativeConfigs(); - logAppInfo(c); + // Generate true path to appConfig (ensure external appConfigsDirs are included) + if (ctx.runtime.appId) { + ctx.runtime.appConfigDir = + ctx.paths.project.appConfigsDirs[ctx.paths.project.appConfigsDirNames.indexOf(ctx.runtime.appId)]; + } - return true; -}; + await updateRenativeConfigs(); + logAppInfo(ctx); -const Task: RnvTask = { - description: 'Configure project with specific appConfig', - fn: async () => {}, + return true; + }, task: RnvTaskName.appConfigure, options: RnvTaskOptionPresets.withConfigure(), }; diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index d3129d5ebd..6af7e285b4 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -8,7 +8,6 @@ import { readObjectSync, writeFileSync, doResolve, - RnvTaskFn, configureRuntimeDefaults, inquirerPrompt, logInfo, @@ -19,156 +18,154 @@ import { getContext, } from '@rnv/core'; -const fn: RnvTaskFn = async () => { - logTask('taskAppCreate'); +const Task: RnvTask = { + description: 'Create new app config', + fn: async () => { + logTask('taskAppCreate'); - await configureRuntimeDefaults(); + await configureRuntimeDefaults(); - let sourcePath: string | undefined; + let sourcePath: string | undefined; - const c = getContext(); + const c = getContext(); - if (c.program.opts().sourceAppConfigID) { - const sourceAppConfigDirPath = path.join(c.paths.project.appConfigsDir, c.program.opts().sourceAppConfigID); + if (c.program.opts().sourceAppConfigID) { + const sourceAppConfigDirPath = path.join(c.paths.project.appConfigsDir, c.program.opts().sourceAppConfigID); - if (fsExistsSync(sourceAppConfigDirPath)) { - sourcePath = sourceAppConfigDirPath; - } - } else if (c.program.opts().ci) { - if (c.buildConfig.currentTemplate) { - const tacPath = doResolve(c.buildConfig.currentTemplate); - if (tacPath && fsExistsSync(tacPath)) { - const tacDirsPath = path.join(tacPath, 'appConfigs'); - const tacDirs = fsReaddirSync(tacDirsPath); - tacDirs.forEach((v) => { - if (v !== 'base') { - const pth = path.join(tacDirsPath, v); - if (fsLstatSync(pth).isDirectory()) { - sourcePath = pth; - } - } - }); - } - } - } else { - const appConfigChoicesObj: Record< - string, - { - path: string; + if (fsExistsSync(sourceAppConfigDirPath)) { + sourcePath = sourceAppConfigDirPath; } - > = {}; - const appConfigChoices: Array = []; - // Project Configs - const acDirs = fsReaddirSync(c.paths.project.appConfigsDir); - acDirs.forEach((v) => { - if (v !== 'base') { - const pth = path.join(c.paths.project.appConfigsDir, v); - if (fsLstatSync(pth).isDirectory()) { - const key = `project>${v}`; - appConfigChoices.push(key); - appConfigChoicesObj[key] = { - path: pth, - }; + } else if (c.program.opts().ci) { + if (c.buildConfig.currentTemplate) { + const tacPath = doResolve(c.buildConfig.currentTemplate); + if (tacPath && fsExistsSync(tacPath)) { + const tacDirsPath = path.join(tacPath, 'appConfigs'); + const tacDirs = fsReaddirSync(tacDirsPath); + tacDirs.forEach((v) => { + if (v !== 'base') { + const pth = path.join(tacDirsPath, v); + if (fsLstatSync(pth).isDirectory()) { + sourcePath = pth; + } + } + }); } } - }); - - // Template Configs - if (c.buildConfig.currentTemplate) { - const tacPath = doResolve(c.buildConfig.currentTemplate); - if (tacPath && fsExistsSync(tacPath)) { - const tacDirsPath = path.join(tacPath, 'appConfigs'); - const tacDirs = fsReaddirSync(tacDirsPath); - tacDirs.forEach((v) => { - if (v !== 'base') { - const pth = path.join(tacDirsPath, v); - if (fsLstatSync(pth).isDirectory()) { - const key = `template>${v}`; - appConfigChoices.push(key); - appConfigChoicesObj[key] = { - path: pth, - }; - } + } else { + const appConfigChoicesObj: Record< + string, + { + path: string; + } + > = {}; + const appConfigChoices: Array = []; + // Project Configs + const acDirs = fsReaddirSync(c.paths.project.appConfigsDir); + acDirs.forEach((v) => { + if (v !== 'base') { + const pth = path.join(c.paths.project.appConfigsDir, v); + if (fsLstatSync(pth).isDirectory()) { + const key = `project>${v}`; + appConfigChoices.push(key); + appConfigChoicesObj[key] = { + path: pth, + }; } - }); + } + }); + + // Template Configs + if (c.buildConfig.currentTemplate) { + const tacPath = doResolve(c.buildConfig.currentTemplate); + if (tacPath && fsExistsSync(tacPath)) { + const tacDirsPath = path.join(tacPath, 'appConfigs'); + const tacDirs = fsReaddirSync(tacDirsPath); + tacDirs.forEach((v) => { + if (v !== 'base') { + const pth = path.join(tacDirsPath, v); + if (fsLstatSync(pth).isDirectory()) { + const key = `template>${v}`; + appConfigChoices.push(key); + appConfigChoicesObj[key] = { + path: pth, + }; + } + } + }); + } } + + const { sourceAppConfig } = await inquirerPrompt({ + name: 'sourceAppConfig', + type: 'list', + choices: appConfigChoices, + message: 'Which App config to use as copy source?', + }); + + sourcePath = appConfigChoicesObj[sourceAppConfig].path; } - const { sourceAppConfig } = await inquirerPrompt({ - name: 'sourceAppConfig', - type: 'list', - choices: appConfigChoices, - message: 'Which App config to use as copy source?', - }); - - sourcePath = appConfigChoicesObj[sourceAppConfig].path; - } - - let destPath; - let appConfigId; - if (c.program.opts().appConfigID) { - appConfigId = c.program.opts().appConfigID.toLowerCase(); - destPath = path.join(c.paths.project.appConfigsDir, appConfigId); - } else { - const { confName } = await inquirerPrompt({ - name: 'confName', - type: 'input', - message: 'Type name of app config (lowercase)', - }); - appConfigId = confName.toLowerCase(); - destPath = path.join(c.paths.project.appConfigsDir, appConfigId); - } - - logInfo('Copying new app config...'); - if (sourcePath) await copyFolderContentsRecursive(sourcePath, destPath); - logInfo('Copying new app config...DONE'); - - const confObjPath = path.join(destPath, 'renative.json'); - const confObj = readObjectSync(confObjPath) || {}; - - confObj.id = appConfigId; - confObj.common = confObj.common || {}; - - let appConfigTitle; - if (c.program.opts().title) { - appConfigTitle = c.program.opts().title; - } else if (c.program.opts().ci) { - // Ignore - } else { - const { confTitle } = await inquirerPrompt({ - name: 'confTitle', - type: 'input', - default: confObj.common?.title || '', - message: 'Type the title of the app', - }); - appConfigTitle = confTitle; - } - confObj.common.title = appConfigTitle || confObj.common.title; - - let bundleId; - if (c.program.opts().id) { - bundleId = c.program.opts().id; - } else if (c.program.opts().ci) { - // Ignore - } else { - const { confId } = await inquirerPrompt({ - name: 'confId', - type: 'input', - default: confObj.common?.id || '', - message: 'Type the id of the app (bundle identifier)', - }); - bundleId = confId; - } - confObj.common.id = bundleId || confObj.common.id; - - writeFileSync(confObjPath, confObj); - - return true; -}; + let destPath; + let appConfigId; + if (c.program.opts().appConfigID) { + appConfigId = c.program.opts().appConfigID.toLowerCase(); + destPath = path.join(c.paths.project.appConfigsDir, appConfigId); + } else { + const { confName } = await inquirerPrompt({ + name: 'confName', + type: 'input', + message: 'Type name of app config (lowercase)', + }); + appConfigId = confName.toLowerCase(); + destPath = path.join(c.paths.project.appConfigsDir, appConfigId); + } -const Task: RnvTask = { - description: 'Create new app config', - fn: async () => {}, + logInfo('Copying new app config...'); + if (sourcePath) await copyFolderContentsRecursive(sourcePath, destPath); + logInfo('Copying new app config...DONE'); + + const confObjPath = path.join(destPath, 'renative.json'); + const confObj = readObjectSync(confObjPath) || {}; + + confObj.id = appConfigId; + confObj.common = confObj.common || {}; + + let appConfigTitle; + if (c.program.opts().title) { + appConfigTitle = c.program.opts().title; + } else if (c.program.opts().ci) { + // Ignore + } else { + const { confTitle } = await inquirerPrompt({ + name: 'confTitle', + type: 'input', + default: confObj.common?.title || '', + message: 'Type the title of the app', + }); + appConfigTitle = confTitle; + } + confObj.common.title = appConfigTitle || confObj.common.title; + + let bundleId; + if (c.program.opts().id) { + bundleId = c.program.opts().id; + } else if (c.program.opts().ci) { + // Ignore + } else { + const { confId } = await inquirerPrompt({ + name: 'confId', + type: 'input', + default: confObj.common?.id || '', + message: 'Type the id of the app (bundle identifier)', + }); + bundleId = confId; + } + confObj.common.id = bundleId || confObj.common.id; + + writeFileSync(confObjPath, confObj); + + return true; + }, options: [ { key: 'sourceAppConfigID', diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index 9c76cc6270..2b8f278286 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -1,31 +1,17 @@ -import { - logTask, - copyRuntimeAssets, - executeTask, - RnvTaskFn, - generatePlatformAssetsRuntimeConfig, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { copyRuntimeAssets, generatePlatformAssetsRuntimeConfig, RnvTask, RnvTaskName } from '@rnv/core'; import { configureFonts } from '@rnv/sdk-utils'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskSwitch'); - - c.program.opts().appConfigID = true; - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.appSwitch, originTask); - - await copyRuntimeAssets(); - await generatePlatformAssetsRuntimeConfig(); - await configureFonts(); - - return true; -}; - const Task: RnvTask = { description: 'Switch between different app configs in current project', - fn: async () => {}, + beforeDependsOn: async ({ ctx }) => { + ctx.program.opts().appConfigID = true; + }, + dependsOn: [RnvTaskName.projectConfigure], + fn: async () => { + await copyRuntimeAssets(); + await generatePlatformAssetsRuntimeConfig(); + await configureFonts(); + }, task: RnvTaskName.appSwitch, }; diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index b077fe8c22..19383365ec 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -1,5 +1,4 @@ import { - logTask, RnvTask, RnvTaskName, updateRenativeConfigs, @@ -35,55 +34,52 @@ import { processChdirToProject, } from './questionHelpers'; -const fn = async () => { - logTask('taskNew'); - // Initialize Project - const payload = await initNewProject(); - // Initial questions - await inquiryProjectName(payload); - await inquiryProjectFolder(payload); - await inquiryIsRenativeProject(payload); - await inquiryHasNodeModules(payload); - await inquiryWorkspace(payload); - await saveProgressIntoProjectConfig(payload); - // Switch execution context to new directory - await processChdirToProject(); - // Install template only (this avoids whole npm project install) - await inquiryInstallTemplate(payload); - await inquiryConfigTemplates(payload); - await inquiryApplyTemplate(payload); - await saveProgressIntoProjectConfig(payload); - // Gather project/app info - await inquiryBookmarkTemplate(payload); - await inquiryAppTitle(payload); - await inquiryAppID(payload); - await inquiryAppVersion(payload); - await saveProgressIntoProjectConfig(payload); - - await inquirySupportedPlatforms(payload); - await inquiryBootstrapQuestions(payload); - await inquiryGit(payload); - // Configure final config overrides - await updateRenativeConfigs(); - await configureConfigOverrides(payload); - await saveProgressIntoProjectConfig(payload); - // Now we can apply template (required for appConfigs to be generated properly) - await applyTemplate(); - await configureTemplateFiles(); - await generateLocalJsonSchemas(); - await inquiryAppConfigs(payload); - // Telementry - await telemetryNewProject(payload); - await inquiryProjectInstall(payload); +const Task: RnvTask = { + description: 'Create new ReNative project', + fn: async () => { + // Initialize Project + const payload = await initNewProject(); + // Initial questions + await inquiryProjectName(payload); + await inquiryProjectFolder(payload); + await inquiryIsRenativeProject(payload); + await inquiryHasNodeModules(payload); + await inquiryWorkspace(payload); + await saveProgressIntoProjectConfig(payload); + // Switch execution context to new directory + await processChdirToProject(); + // Install template only (this avoids whole npm project install) + await inquiryInstallTemplate(payload); + await inquiryConfigTemplates(payload); + await inquiryApplyTemplate(payload); + await saveProgressIntoProjectConfig(payload); + // Gather project/app info + await inquiryBookmarkTemplate(payload); + await inquiryAppTitle(payload); + await inquiryAppID(payload); + await inquiryAppVersion(payload); + await saveProgressIntoProjectConfig(payload); - logToSummary(generateProjectOverview(payload)); + await inquirySupportedPlatforms(payload); + await inquiryBootstrapQuestions(payload); + await inquiryGit(payload); + // Configure final config overrides + await updateRenativeConfigs(); + await configureConfigOverrides(payload); + await saveProgressIntoProjectConfig(payload); + // Now we can apply template (required for appConfigs to be generated properly) + await applyTemplate(); + await configureTemplateFiles(); + await generateLocalJsonSchemas(); + await inquiryAppConfigs(payload); + // Telementry + await telemetryNewProject(payload); + await inquiryProjectInstall(payload); - return true; -}; + logToSummary(generateProjectOverview(payload)); -const Task: RnvTask = { - description: 'Create new ReNative project', - fn: async () => {}, + return true; + }, task: RnvTaskName.new, options: [ RnvTaskOptions.gitEnabled, diff --git a/packages/engine-core/src/tasks/crypto/common.ts b/packages/engine-core/src/tasks/crypto/common.ts index 653f14991d..c4bec2af82 100644 --- a/packages/engine-core/src/tasks/crypto/common.ts +++ b/packages/engine-core/src/tasks/crypto/common.ts @@ -36,7 +36,7 @@ export const getEnvVar = () => { return envVar; }; -export const checkCrypto = async (parentTask?: string, originTask?: string) => { +export const checkCrypto = async (parentTaskName?: string, originTaskName?: string) => { const c = getContext(); logTask('checkCrypto'); @@ -71,7 +71,7 @@ export const checkCrypto = async (parentTask?: string, originTask?: string) => { project timestamp: ${chalk().grey(`${tsProject} - ${new Date(tsProject)}`)} workspace timestamp: ${chalk().grey(`${tsWorkspace} - ${new Date(tsWorkspace)}`)} you should run decrypt`); - await executeTask(RnvTaskName.cryptoDecrypt, parentTask, originTask); + await executeTask({ taskName: RnvTaskName.cryptoDecrypt, parentTaskName, originTaskName }); return; } diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index 44da0b0d85..4723fde62d 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -3,7 +3,6 @@ import tar from 'tar'; import { chalk, logWarning, - logTask, logSuccess, getRealPath, removeFilesSync, @@ -13,9 +12,7 @@ import { fsExistsSync, fsReadFileSync, inquirerPrompt, - executeTask, RnvContext, - RnvTaskFn, RnvTask, RnvTaskName, } from '@rnv/core'; @@ -24,7 +21,7 @@ import { getEnvExportCmd, getEnvVar } from './common'; const iocane = require('iocane'); const _unzipAndCopy = async ( - c: RnvContext, + ctx: RnvContext, shouldCleanFolder: boolean, destTemp: string, wsPath: string, @@ -37,91 +34,87 @@ const _unzipAndCopy = async ( await tar.x({ file: destTemp, - cwd: c.paths.workspace.dir, + cwd: ctx.paths.workspace.dir, }); removeFilesSync([destTemp]); - if (c.files.project.package.name && fsExistsSync(ts)) { - copyFileSync(ts, path.join(c.paths.workspace.dir, c.files.project.package.name, 'timestamp')); + if (ctx.files.project.package.name && fsExistsSync(ts)) { + copyFileSync(ts, path.join(ctx.paths.workspace.dir, ctx.files.project.package.name, 'timestamp')); } logSuccess(`Files succesfully extracted into ${destFolder}`); }; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskCryptoDecrypt'); - - if (!parentTask) { - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoDecrypt, originTask); - } - - const crypto = c.files.project.config?.crypto; - const sourceRaw = crypto?.path; - const projectName = c.files.project.config?.projectName; - - if (!crypto?.isOptional && sourceRaw) { - const envVar = getEnvVar(); - if (!projectName || !envVar) return; - - const source = `${getRealPath(sourceRaw, 'crypto.path')}`; - const ts = `${source}.timestamp`; - const destFolder = path.join(c.paths.workspace.dir, projectName); - const destTemp = `${path.join(c.paths.workspace.dir, projectName.replace('/', '-'))}.tgz`; - - let shouldCleanFolder = false; - const wsPath = path.join(c.paths.workspace.dir, projectName); - const isCryptoReset = c.command === 'crypto' && c.program.opts().reset === true; - - if (c.program.opts().ci !== true && !isCryptoReset && fsExistsSync(destFolder)) { - const options = ['Yes - override (recommended)', 'Yes - merge', 'Skip']; - const { option } = await inquirerPrompt({ - name: 'option', - type: 'list', - choices: options, - message: `How to decrypt to ${chalk().bold(destFolder)} ?`, - }); - if (option === options[0]) { +const Task: RnvTask = { + description: 'Decrypt encrypted project files into local `~///..`', + fn: async ({ ctx }) => { + const crypto = ctx.files.project.config?.crypto; + const sourceRaw = crypto?.path; + const projectName = ctx.files.project.config?.projectName; + + if (!crypto?.isOptional && sourceRaw) { + const envVar = getEnvVar(); + if (!projectName || !envVar) return; + + const source = `${getRealPath(sourceRaw, 'crypto.path')}`; + const ts = `${source}.timestamp`; + const destFolder = path.join(ctx.paths.workspace.dir, projectName); + const destTemp = `${path.join(ctx.paths.workspace.dir, projectName.replace('/', '-'))}.tgz`; + + let shouldCleanFolder = false; + const wsPath = path.join(ctx.paths.workspace.dir, projectName); + const isCryptoReset = ctx.command === 'crypto' && ctx.program.opts().reset === true; + + if (ctx.program.opts().ci !== true && !isCryptoReset && fsExistsSync(destFolder)) { + const options = ['Yes - override (recommended)', 'Yes - merge', 'Skip']; + const { option } = await inquirerPrompt({ + name: 'option', + type: 'list', + choices: options, + message: `How to decrypt to ${chalk().bold(destFolder)} ?`, + }); + if (option === options[0]) { + shouldCleanFolder = true; + } else if (option === options[2]) { + return true; + } + } else { shouldCleanFolder = true; - } else if (option === options[2]) { - return true; } - } else { - shouldCleanFolder = true; - } - if (fsExistsSync(destTemp)) { - const { confirm } = await inquirerPrompt({ - type: 'confirm', - message: `Found existing decrypted file at ${chalk().bold( - destTemp - )}. want to use it and skip decrypt ?`, - }); - if (confirm) { - await _unzipAndCopy(c, shouldCleanFolder, destTemp, wsPath, ts, destFolder); - return true; + if (fsExistsSync(destTemp)) { + const { confirm } = await inquirerPrompt({ + type: 'confirm', + message: `Found existing decrypted file at ${chalk().bold( + destTemp + )}. want to use it and skip decrypt ?`, + }); + if (confirm) { + await _unzipAndCopy(ctx, shouldCleanFolder, destTemp, wsPath, ts, destFolder); + return true; + } } - } - const key = c.program.opts().key || c.process.env[envVar]; - if (!key) { - return Promise.reject(`encrypt: You must pass ${chalk().bold('--key')} or have env var defined: + const key = ctx.program.opts().key || ctx.process.env[envVar]; + if (!key) { + return Promise.reject(`encrypt: You must pass ${chalk().bold('--key')} or have env var defined: ${getEnvExportCmd(envVar, 'REPLACE_WITH_ENV_VARIABLE')} Make sure you take into account special characters that might need to be escaped. `); - } - if (!fsExistsSync(source)) { - return Promise.reject(`Can't decrypt. ${chalk().bold(source)} is missing!`); - } + } + if (!fsExistsSync(source)) { + return Promise.reject(`Can't decrypt. ${chalk().bold(source)} is missing!`); + } - let data; - try { - data = await iocane.createSession().use('cbc').decrypt(fsReadFileSync(source), key); - } catch (e) { - if (e instanceof Error) { - if (e?.message?.includes) { - if (e.message.includes('Signature mismatch')) { - const err = `You're trying to decode crypto file encoded with previous version of crypto. + let data; + try { + data = await iocane.createSession().use('cbc').decrypt(fsReadFileSync(source), key); + } catch (e) { + if (e instanceof Error) { + if (e?.message?.includes) { + if (e.message.includes('Signature mismatch')) { + const err = `You're trying to decode crypto file encoded with previous version of crypto. this change was introduced in "rnv@0.29.0" ${e} @@ -141,10 +134,10 @@ ${e} `; - return Promise.reject(err); - } - if (e.message.includes('Authentication failed')) { - return Promise.reject(`It seems like you provided invalid decryption key. + return Promise.reject(err); + } + if (e.message.includes('Authentication failed')) { + return Promise.reject(`It seems like you provided invalid decryption key. ${e.stack} @@ -164,50 +157,46 @@ ${chalk().bold('https://github.com/flexn-io/renative/issues')} and we will try to help! `); + } } } + + return Promise.reject(e); } - return Promise.reject(e); + fsWriteFileSync(destTemp, data); + + // try { + // await executeAsync( + // c, + // `${_getOpenSllPath( + // c + // )} enc -aes-256-cbc -md md5 -d -in ${source} -out ${destTemp} -k ${key}`, + // { privateParams: [key] } + // ); + // } catch (e) { + // const cmd1 = chalk().bold( + // `openssl enc -aes-256-cbc -md md5 -d -in ${source} -out ${destTemp} -k $${envVar}` + // ); + // return Promise.reject(`${e} + + // ${chalk().green('SUGGESTION:')} + + // ${chalk().yellow('STEP 1:')} + // ${cmd1} + + // ${chalk().yellow('STEP 2:')} + // ${chalk().bold( + // 'run your previous command again and choose to skip openssl once asked' + // )}`); + // } + + await _unzipAndCopy(ctx, shouldCleanFolder, destTemp, wsPath, ts, destFolder); + } else { + logWarning(`You don't have {{ crypto.path }} specificed in ${chalk().bold(ctx.paths.appConfigBase)}`); + return true; } - - fsWriteFileSync(destTemp, data); - - // try { - // await executeAsync( - // c, - // `${_getOpenSllPath( - // c - // )} enc -aes-256-cbc -md md5 -d -in ${source} -out ${destTemp} -k ${key}`, - // { privateParams: [key] } - // ); - // } catch (e) { - // const cmd1 = chalk().bold( - // `openssl enc -aes-256-cbc -md md5 -d -in ${source} -out ${destTemp} -k $${envVar}` - // ); - // return Promise.reject(`${e} - - // ${chalk().green('SUGGESTION:')} - - // ${chalk().yellow('STEP 1:')} - // ${cmd1} - - // ${chalk().yellow('STEP 2:')} - // ${chalk().bold( - // 'run your previous command again and choose to skip openssl once asked' - // )}`); - // } - - await _unzipAndCopy(c, shouldCleanFolder, destTemp, wsPath, ts, destFolder); - } else { - logWarning(`You don't have {{ crypto.path }} specificed in ${chalk().bold(c.paths.appConfigBase)}`); - return true; - } -}; - -const Task: RnvTask = { - description: 'Decrypt encrypted project files into local `~///..`', - fn: async () => {}, + }, task: RnvTaskName.cryptoDecrypt, }; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index b3af2cb590..7185499e8e 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -4,7 +4,6 @@ import { promisify } from 'util'; import { chalk, logWarning, - logTask, logSuccess, logInfo, getRealPath, @@ -16,9 +15,7 @@ import { fsReadFileSync, fsReaddir, inquirerPrompt, - executeTask, RnvContext, - RnvTaskFn, copyFileSync, RnvTask, RnvTaskName, @@ -38,13 +35,13 @@ const generateRandomKey = (length: number) => .join(''); const initializeCryptoDirectory = async (sourceFolder: string) => { - const c = getContext(); + const ctx = getContext(); const configDir = path.join(sourceFolder, 'appConfigs'); const targetFile = 'renative.private.json'; mkdirSync(sourceFolder); mkdirSync(configDir); - if (c.paths.project.configPrivateExists) { + if (ctx.paths.project.configPrivateExists) { const options = [ 'Move renative.private.json into encrypted folder (Recommended)', 'Copy renative.private.json into encrypted folder', @@ -55,24 +52,24 @@ const initializeCryptoDirectory = async (sourceFolder: string) => { type: 'list', choices: options, message: `Found existing private config in your project ${chalk().grey( - c.paths.project.configPrivate + ctx.paths.project.configPrivate )}. What to do next?`, }); if (option === options[0]) { - copyFileSync(c.paths.project.configPrivate, path.join(sourceFolder, targetFile)); - removeFilesSync([c.paths.project.configPrivate]); + copyFileSync(ctx.paths.project.configPrivate, path.join(sourceFolder, targetFile)); + removeFilesSync([ctx.paths.project.configPrivate]); } else if (option === options[1]) { - copyFileSync(c.paths.project.configPrivate, path.join(sourceFolder, targetFile)); + copyFileSync(ctx.paths.project.configPrivate, path.join(sourceFolder, targetFile)); } } - const appConfigsDirs = await readdirAsync(c.paths.project.appConfigsDir); + const appConfigsDirs = await readdirAsync(ctx.paths.project.appConfigsDir); appConfigsDirs.forEach(async (item: string) => { if (item == targetFile) { - copyFileSync(path.join(c.paths.project.appConfigsDir, item), path.join(configDir, targetFile)); + copyFileSync(path.join(ctx.paths.project.appConfigsDir, item), path.join(configDir, targetFile)); } const appConfigDir = path.join(configDir, item); - const itemPath = path.join(c.paths.project.appConfigsDir, item); + const itemPath = path.join(ctx.paths.project.appConfigsDir, item); const stat = statSync(itemPath); if (stat && stat.isDirectory()) { @@ -84,7 +81,7 @@ const initializeCryptoDirectory = async (sourceFolder: string) => { mkdirSync(path.join(appConfigDir, 'certs')); copyFileSync( - path.join(c.paths.project.appConfigsDir, item, targetFile), + path.join(ctx.paths.project.appConfigsDir, item, targetFile), path.join(appConfigDir, targetFile) ); } @@ -93,16 +90,16 @@ const initializeCryptoDirectory = async (sourceFolder: string) => { }); }; -const _checkAndConfigureCrypto = async (c: RnvContext) => { +const _checkAndConfigureCrypto = async (ctx: RnvContext) => { // handle missing config - const source = `./${c.files.project.config?.projectName}`; + const source = `./${ctx.files.project.config?.projectName}`; - const cnf = c.files.project.config_original; + const cnf = ctx.files.project.config_original; if (!cnf) return; const envVar = getEnvVar(); if (!envVar) return; - if (c.files.project.config && !c.files.project.config.crypto) { + if (ctx.files.project.config && !ctx.files.project.config.crypto) { const { location } = await inquirerPrompt({ type: 'input', name: 'location', @@ -113,13 +110,13 @@ const _checkAndConfigureCrypto = async (c: RnvContext) => { cnf.crypto = { path: `./${location}/privateConfigs.enc`, }; - c.files.project.config.crypto = cnf.crypto; + ctx.files.project.config.crypto = cnf.crypto; - writeFileSync(c.paths.project.config, cnf); + writeFileSync(ctx.paths.project.config, cnf); } // check if src folder actually exists - const sourceFolder = path.join(c.paths.workspace.dir, source); + const sourceFolder = path.join(ctx.paths.workspace.dir, source); if (!fsExistsSync(sourceFolder)) { logInfo( @@ -129,7 +126,7 @@ const _checkAndConfigureCrypto = async (c: RnvContext) => { RNV will create it for you, make sure you add whatever you want encrypted in it and then run the command again` ); await initializeCryptoDirectory(sourceFolder); - // writeFileSync(path.join(sourceFolder), c.files.project.config); + // writeFileSync(path.join(sourceFolder), ctx.files.project.config); await inquirerPrompt({ type: 'confirm', message: 'Once ready, Continue?', @@ -138,7 +135,7 @@ RNV will create it for you, make sure you add whatever you want encrypted in it // if (confirm) return true; } - let key = c.program.opts().key || c.process.env[envVar]; + let key = ctx.program.opts().key || ctx.process.env[envVar]; let keyGenerated = false; if (!key) { const { confirm } = await inquirerPrompt({ @@ -169,74 +166,69 @@ ${getEnvExportCmd(envVar, key)} Make sure you take into account special characters that might need to be escaped `); - c.process.env[envVar] = key; + ctx.process.env[envVar] = key; } } }; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskCryptoEncrypt'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.cryptoEncrypt, originTask); +const Task: RnvTask = { + description: 'Encrypts secure files from `~///..` to project', + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const projectName = ctx.files.project.config?.projectName; - const projectName = c.files.project.config?.projectName; + if (!projectName) return; - if (!projectName) return; + const source = `./${projectName}`; - const source = `./${projectName}`; + await _checkAndConfigureCrypto(ctx); - await _checkAndConfigureCrypto(c); + const destRaw = ctx.files.project.config?.crypto?.path; + const tsWorkspacePath = path.join(ctx.paths.workspace.dir, projectName, 'timestamp'); + const envVar = getEnvVar(); - const destRaw = c.files.project.config?.crypto?.path; - const tsWorkspacePath = path.join(c.paths.workspace.dir, projectName, 'timestamp'); - const envVar = getEnvVar(); + if (!envVar) return; - if (!envVar) return; + const key = ctx.program.opts().key || ctx.process.env[envVar]; - const key = c.program.opts().key || c.process.env[envVar]; + if (destRaw) { + const dest = `${getRealPath(destRaw, 'crypto.path')}`; + const destTemp = `${path.join(ctx.paths.workspace.dir, projectName.replace('/', '-'))}.tgz`; + const timestamp = new Date().getTime(); - if (destRaw) { - const dest = `${getRealPath(destRaw, 'crypto.path')}`; - const destTemp = `${path.join(c.paths.workspace.dir, projectName.replace('/', '-'))}.tgz`; - const timestamp = new Date().getTime(); + // check if dest folder actually exists + const destFolder = dest.slice(0, dest.lastIndexOf('/')); - // check if dest folder actually exists - const destFolder = dest.slice(0, dest.lastIndexOf('/')); + !fsExistsSync(destFolder) && mkdirSync(destFolder); - !fsExistsSync(destFolder) && mkdirSync(destFolder); + await tar.c( + { + gzip: true, + file: destTemp, + cwd: ctx.paths.workspace.dir, + }, + [source] + ); - await tar.c( - { - gzip: true, - file: destTemp, - cwd: c.paths.workspace.dir, - }, - [source] - ); + const data = await iocane.createSession().use('cbc').encrypt(fsReadFileSync(destTemp), key); - const data = await iocane.createSession().use('cbc').encrypt(fsReadFileSync(destTemp), key); - - fsWriteFileSync(dest, data); - - // await executeAsync( - // c, - // `${_getOpenSllPath( - // c - // )} enc -aes-256-cbc -md md5 -salt -in ${destTemp} -out ${dest} -k ${key}`, - // { privateParams: [key] } - // ); - removeFilesSync([destTemp]); - fsWriteFileSync(`${dest}.timestamp`, `${timestamp}`); - fsWriteFileSync(`${tsWorkspacePath}`, `${timestamp}`); - logSuccess(`Files succesfully encrypted into ${dest}`); - } else { - logWarning(`You don't have {{ crypto.path }} specificed in ${chalk().bold(c.paths.appConfigBase)}`); - } -}; + fsWriteFileSync(dest, data); -const Task: RnvTask = { - description: 'Encrypts secure files from `~///..` to project', - fn: async () => {}, + // await executeAsync( + // c, + // `${_getOpenSllPath( + // c + // )} enc -aes-256-cbc -md md5 -salt -in ${destTemp} -out ${dest} -k ${key}`, + // { privateParams: [key] } + // ); + removeFilesSync([destTemp]); + fsWriteFileSync(`${dest}.timestamp`, `${timestamp}`); + fsWriteFileSync(`${tsWorkspacePath}`, `${timestamp}`); + logSuccess(`Files succesfully encrypted into ${dest}`); + } else { + logWarning(`You don't have {{ crypto.path }} specificed in ${chalk().bold(ctx.paths.appConfigBase)}`); + } + }, task: RnvTaskName.cryptoEncrypt, }; diff --git a/packages/engine-core/src/tasks/global/taskClean.ts b/packages/engine-core/src/tasks/global/taskClean.ts index efab892d21..b1c8e67b41 100644 --- a/packages/engine-core/src/tasks/global/taskClean.ts +++ b/packages/engine-core/src/tasks/global/taskClean.ts @@ -5,12 +5,10 @@ import { fsExistsSync, fsReaddirSync, chalk, - logTask, logToSummary, logDebug, executeAsync, isSystemWin, - RnvTaskFn, inquirerPrompt, RnvTask, RnvTaskName, @@ -42,174 +40,171 @@ function clearWindowsCacheFiles() { return true; } -const fn: RnvTaskFn = async (c) => { - logTask('taskClean'); - const skipQuestion = c.program.opts().ci; - const pathsToRemove = []; - const localFiles = []; - const immediateNodeModuleDir = path.join(c.paths.project.dir, 'node_modules'); - - const pkgLock = path.join(c.paths.project.dir, 'package-lock.json'); - - if (fsExistsSync(immediateNodeModuleDir)) { - pathsToRemove.push(immediateNodeModuleDir); - } - if (fsExistsSync(pkgLock)) pathsToRemove.push(pkgLock); - - const yarnLock = path.join(c.paths.project.dir, 'yarn.lock'); - if (fsExistsSync(yarnLock)) { - pathsToRemove.push(yarnLock); - } - - const packagesFolder = path.join(c.paths.project.dir, 'packages'); - if (fsExistsSync(packagesFolder)) { - fsReaddirSync(packagesFolder).forEach((dir) => { - if (dir === '.DS_Store') { - const pth = path.join(packagesFolder, dir); - - if (fsExistsSync(pth)) { - pathsToRemove.push(pth); - } - } else { - const pth2 = path.join(packagesFolder, dir, 'node_modules'); - if (fsExistsSync(pth2)) { - pathsToRemove.push(pth2); - } +const Task: RnvTask = { + description: 'Automatically removes all node_modules and lock in your project and its dependencies', + fn: async ({ ctx }) => { + const skipQuestion = ctx.program.opts().ci; + const pathsToRemove = []; + const localFiles = []; + const immediateNodeModuleDir = path.join(ctx.paths.project.dir, 'node_modules'); - const pth3 = path.join(packagesFolder, dir, 'package-lock.json'); - if (fsExistsSync(pth3)) { - pathsToRemove.push(pth3); - } + const pkgLock = path.join(ctx.paths.project.dir, 'package-lock.json'); - const pth4 = path.join(packagesFolder, dir, 'yarn.lock'); - if (fsExistsSync(pth4)) { - pathsToRemove.push(pth4); - } + if (fsExistsSync(immediateNodeModuleDir)) { + pathsToRemove.push(immediateNodeModuleDir); + } + if (fsExistsSync(pkgLock)) pathsToRemove.push(pkgLock); + + const yarnLock = path.join(ctx.paths.project.dir, 'yarn.lock'); + if (fsExistsSync(yarnLock)) { + pathsToRemove.push(yarnLock); + } - const pth5 = path.join(packagesFolder, dir, 'dist'); - if (fsExistsSync(pth5)) { - pathsToRemove.push(pth5); + const packagesFolder = path.join(ctx.paths.project.dir, 'packages'); + if (fsExistsSync(packagesFolder)) { + fsReaddirSync(packagesFolder).forEach((dir) => { + if (dir === '.DS_Store') { + const pth = path.join(packagesFolder, dir); + + if (fsExistsSync(pth)) { + pathsToRemove.push(pth); + } + } else { + const pth2 = path.join(packagesFolder, dir, 'node_modules'); + if (fsExistsSync(pth2)) { + pathsToRemove.push(pth2); + } + + const pth3 = path.join(packagesFolder, dir, 'package-lock.json'); + if (fsExistsSync(pth3)) { + pathsToRemove.push(pth3); + } + + const pth4 = path.join(packagesFolder, dir, 'yarn.lock'); + if (fsExistsSync(pth4)) { + pathsToRemove.push(pth4); + } + + const pth5 = path.join(packagesFolder, dir, 'dist'); + if (fsExistsSync(pth5)) { + pathsToRemove.push(pth5); + } } + }); + } + + const buildDirs = []; + if (fsExistsSync(ctx.paths.project.builds.dir)) { + buildDirs.push(ctx.paths.project.builds.dir); + } + if (fsExistsSync(ctx.paths.project.assets.dir)) { + buildDirs.push(ctx.paths.project.assets.dir); + } + + const local1 = path.join(ctx.paths.project.dir, '.DS_Store'); + if (fsExistsSync(local1)) localFiles.push(local1); + const local2 = path.join(ctx.paths.project.dir, 'renative.local.json'); + if (fsExistsSync(local2)) localFiles.push(local2); + const local3 = path.join(ctx.paths.project.dir, 'metro.config.local.js'); + if (fsExistsSync(local3)) localFiles.push(local3); + + const answers = { + modules: false, + builds: false, + cache: false, + nothingToClean: !skipQuestion, + locals: false, + }; + + if (pathsToRemove.length) { + if (!skipQuestion) { + const { confirm } = await inquirerPrompt({ + name: 'confirm', + type: 'confirm', + message: `Do you want to remove node_module related files/folders? \n${chalk().red( + pathsToRemove.join('\n') + )}`, + }); + answers.modules = confirm; + if (confirm) answers.nothingToClean = false; + } else { + answers.modules = true; } - }); - } - - const buildDirs = []; - if (fsExistsSync(c.paths.project.builds.dir)) { - buildDirs.push(c.paths.project.builds.dir); - } - if (fsExistsSync(c.paths.project.assets.dir)) { - buildDirs.push(c.paths.project.assets.dir); - } - - const local1 = path.join(c.paths.project.dir, '.DS_Store'); - if (fsExistsSync(local1)) localFiles.push(local1); - const local2 = path.join(c.paths.project.dir, 'renative.local.json'); - if (fsExistsSync(local2)) localFiles.push(local2); - const local3 = path.join(c.paths.project.dir, 'metro.config.local.js'); - if (fsExistsSync(local3)) localFiles.push(local3); - - const answers = { - modules: false, - builds: false, - cache: false, - nothingToClean: !skipQuestion, - locals: false, - }; + } - if (pathsToRemove.length) { - if (!skipQuestion) { - const { confirm } = await inquirerPrompt({ - name: 'confirm', - type: 'confirm', - message: `Do you want to remove node_module related files/folders? \n${chalk().red( - pathsToRemove.join('\n') - )}`, - }); - answers.modules = confirm; - if (confirm) answers.nothingToClean = false; - } else { - answers.modules = true; + if (buildDirs.length) { + if (!skipQuestion) { + const { confirmBuilds } = await inquirerPrompt({ + name: 'confirmBuilds', + type: 'confirm', + message: `Do you want to clean your platformBuilds and platformAssets? \n${chalk().red( + buildDirs.join('\n') + )}`, + }); + answers.builds = confirmBuilds; + if (confirmBuilds) answers.nothingToClean = false; + } else { + answers.builds = true; + } } - } - if (buildDirs.length) { - if (!skipQuestion) { - const { confirmBuilds } = await inquirerPrompt({ - name: 'confirmBuilds', - type: 'confirm', - message: `Do you want to clean your platformBuilds and platformAssets? \n${chalk().red( - buildDirs.join('\n') - )}`, - }); - answers.builds = confirmBuilds; - if (confirmBuilds) answers.nothingToClean = false; - } else { - answers.builds = true; + if (localFiles.length) { + if (!skipQuestion) { + const { confirmLocals } = await inquirerPrompt({ + name: 'confirmLocals', + type: 'confirm', + message: `Do you want to clean local files? \n${chalk().red(localFiles.join('\n'))}`, + }); + answers.locals = confirmLocals; + if (confirmLocals) answers.nothingToClean = false; + } else { + answers.locals = true; + } } - } - if (localFiles.length) { if (!skipQuestion) { - const { confirmLocals } = await inquirerPrompt({ - name: 'confirmLocals', + const { confirmCache } = await inquirerPrompt({ + name: 'confirmCache', type: 'confirm', - message: `Do you want to clean local files? \n${chalk().red(localFiles.join('\n'))}`, + message: 'Do you want to clean your npm/bundler cache?', }); - answers.locals = confirmLocals; - if (confirmLocals) answers.nothingToClean = false; + answers.cache = confirmCache; + if (confirmCache) answers.nothingToClean = false; } else { - answers.locals = true; + answers.cache = true; } - } - - if (!skipQuestion) { - const { confirmCache } = await inquirerPrompt({ - name: 'confirmCache', - type: 'confirm', - message: 'Do you want to clean your npm/bundler cache?', - }); - answers.cache = confirmCache; - if (confirmCache) answers.nothingToClean = false; - } else { - answers.cache = true; - } - - if (answers.nothingToClean) { - logToSummary('Nothing to clean'); - return true; - } - - if (answers.modules) { - await removeDirs(pathsToRemove); - } - if (answers.builds) { - await removeDirs(buildDirs); - } - if (answers.locals) { - await removeDirs(localFiles); - } - if (answers.cache) { - if (isSystemWin) { - clearWindowsCacheFiles(); - } else { - try { - await executeAsync('watchman watch-del-all'); - } catch (e) { - logDebug('watchman not installed. skipping'); - } - await executeAsync( - 'npx rimraf -I $TMPDIR/metro-* && npx rimraf -I $TMPDIR/react-* && npx rimraf -I $TMPDIR/haste-*' - ); + if (answers.nothingToClean) { + logToSummary('Nothing to clean'); + return true; } - } - return true; -}; -const Task: RnvTask = { - description: 'Automatically removes all node_modules and lock in your project and its dependencies', - fn: async () => {}, + if (answers.modules) { + await removeDirs(pathsToRemove); + } + if (answers.builds) { + await removeDirs(buildDirs); + } + if (answers.locals) { + await removeDirs(localFiles); + } + if (answers.cache) { + if (isSystemWin) { + clearWindowsCacheFiles(); + } else { + try { + await executeAsync('watchman watch-del-all'); + } catch (e) { + logDebug('watchman not installed. skipping'); + } + + await executeAsync( + 'npx rimraf -I $TMPDIR/metro-* && npx rimraf -I $TMPDIR/react-* && npx rimraf -I $TMPDIR/haste-*' + ); + } + } + return true; + }, task: RnvTaskName.clean, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskConfig.ts b/packages/engine-core/src/tasks/global/taskConfig.ts index b7e9d86f30..42dc96cd47 100644 --- a/packages/engine-core/src/tasks/global/taskConfig.ts +++ b/packages/engine-core/src/tasks/global/taskConfig.ts @@ -1,16 +1,12 @@ -import { logTask, RnvTaskFn, executeTask, RnvTask, RnvTaskName } from '@rnv/core'; - -const fn: RnvTaskFn = async (c, _, originTask) => { - logTask('taskConfig'); - - await executeTask(RnvTaskName.configureSoft, RnvTaskName.config, originTask); - console.log(JSON.stringify(c.buildConfig, null, 2)); - return true; -}; +import { RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'Display RNV config', - fn: async () => {}, + dependsOn: [RnvTaskName.configureSoft], + fn: async ({ ctx }) => { + console.log(JSON.stringify(ctx.buildConfig, null, 2)); + return true; + }, task: RnvTaskName.config, }; diff --git a/packages/engine-core/src/tasks/global/taskDoctor.ts b/packages/engine-core/src/tasks/global/taskDoctor.ts index 1ec474b311..69ba4fd979 100644 --- a/packages/engine-core/src/tasks/global/taskDoctor.ts +++ b/packages/engine-core/src/tasks/global/taskDoctor.ts @@ -1,13 +1,10 @@ import lGet from 'lodash/get'; import { chalk, - logTask, logToSummary, - executeTask, configureRuntimeDefaults, readObjectSync, fsExistsSync, - RnvTaskFn, validateRenativeProjectSchema, RnvTask, RnvTaskName, @@ -21,74 +18,72 @@ const configTargets = [ 'appConfig.configs', ]; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskDoctor'); - - await configureRuntimeDefaults(); - await executeTask(RnvTaskName.appConfigure, parentTask, originTask); - await configureRuntimeDefaults(); +const Task: RnvTask = { + description: 'Checks validity and config health of your project', + dependsOn: [RnvTaskName.appConfigure], + beforeDependsOn: async () => { + await configureRuntimeDefaults(); + }, + fn: async ({ ctx }) => { + await configureRuntimeDefaults(); - const configPaths: Array = []; + const configPaths: Array = []; - configTargets.forEach((target) => { - const tPath = lGet(c.paths, target); + configTargets.forEach((target) => { + const tPath = lGet(ctx.paths, target); - if (tPath) { - if (Array.isArray(tPath)) { - configPaths.push(...tPath); - } else { - configPaths.push(tPath); + if (tPath) { + if (Array.isArray(tPath)) { + configPaths.push(...tPath); + } else { + configPaths.push(tPath); + } } - } - }); + }); - let errMsg = 'RENATIVE JSON SCHEMA VALIDITY CHECK:\n\n'; - let hasErrors = false; - configPaths.forEach((cPath) => { - if (fsExistsSync(cPath)) { - const cObj = readObjectSync(cPath); - const result = validateRenativeProjectSchema(cObj); - if (!result.success) { - hasErrors = true; - errMsg += chalk().yellow(`\nInvalid schema in ${cPath}. ISSUES:\n\n`); - result.error.errors?.forEach((err) => { - errMsg += chalk().yellow(`${chalk().grey(err.path)}: ${err.message}`); - }); + let errMsg = 'RENATIVE JSON SCHEMA VALIDITY CHECK:\n\n'; + let hasErrors = false; + configPaths.forEach((cPath) => { + if (fsExistsSync(cPath)) { + const cObj = readObjectSync(cPath); + const result = validateRenativeProjectSchema(cObj); + if (!result.success) { + hasErrors = true; + errMsg += chalk().yellow(`\nInvalid schema in ${cPath}. ISSUES:\n\n`); + result.error.errors?.forEach((err) => { + errMsg += chalk().yellow(`${chalk().grey(err.path)}: ${err.message}`); + }); + } + // if (!valid) { + // hasErrors = true; + // // console.log('ERROR', ajv.errors); + // errMsg += chalk().yellow( + // `\nInvalid schema in ${ + // // cPath}. ISSUES: ${JSON.stringify(ajv.errors, null, 2)}\n`); + // cPath + // }. ISSUES:\n\n` + // ); + // if (typeof ajv !== 'boolean' && ajv) { + // ajv.errors?.forEach((err) => { + // errMsg += chalk().yellow( + // `${chalk().grey(err.dataPath === '' ? '/' : err.dataPath)}: ${err.message} ${Object.keys( + // err.params + // ) + // .map((k) => `=> ${chalk().red(err.params[k])}`) + // .join('\n')}\n` + // ); + // }); + // } + // } } - // if (!valid) { - // hasErrors = true; - // // console.log('ERROR', ajv.errors); - // errMsg += chalk().yellow( - // `\nInvalid schema in ${ - // // cPath}. ISSUES: ${JSON.stringify(ajv.errors, null, 2)}\n`); - // cPath - // }. ISSUES:\n\n` - // ); - // if (typeof ajv !== 'boolean' && ajv) { - // ajv.errors?.forEach((err) => { - // errMsg += chalk().yellow( - // `${chalk().grey(err.dataPath === '' ? '/' : err.dataPath)}: ${err.message} ${Object.keys( - // err.params - // ) - // .map((k) => `=> ${chalk().red(err.params[k])}`) - // .join('\n')}\n` - // ); - // }); - // } - // } - } - }); + }); - if (!hasErrors) { - errMsg += chalk().green(`PASSED ${configPaths.length} files`); - } - - logToSummary(errMsg); -}; + if (!hasErrors) { + errMsg += chalk().green(`PASSED ${configPaths.length} files`); + } -const Task: RnvTask = { - description: 'Checks validity and config health of your project', - fn: async () => {}, + logToSummary(errMsg); + }, task: RnvTaskName.doctor, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskHelp.ts b/packages/engine-core/src/tasks/global/taskHelp.ts index 8594c6c318..7b98907118 100644 --- a/packages/engine-core/src/tasks/global/taskHelp.ts +++ b/packages/engine-core/src/tasks/global/taskHelp.ts @@ -1,37 +1,35 @@ import { chalk, logToSummary, - logTask, RnvTaskOptionPresets, getRegisteredEngines, - RnvTaskFn, RnvTask, RnvTaskName, generateStringFromTaskOption, } from '@rnv/core'; -const fn: RnvTaskFn = async () => { - logTask('taskHelp'); - - // PARAMS - let optsString = ''; +const Task: RnvTask = { + description: 'Display generic help', + fn: async () => { + // PARAMS + let optsString = ''; - RnvTaskOptionPresets.withAll().forEach((param) => { - optsString += chalk().grey(`${generateStringFromTaskOption(param)}, ${param.description}\n`); - }); + RnvTaskOptionPresets.withAll().forEach((param) => { + optsString += chalk().grey(`${generateStringFromTaskOption(param)}, ${param.description}\n`); + }); - // TASKS - const commands: Array = []; - const engines = getRegisteredEngines(); + // TASKS + const commands: Array = []; + const engines = getRegisteredEngines(); - engines.forEach((engine) => { - Object.values(engine.tasks).forEach(({ task }) => { - commands.push(task); + engines.forEach((engine) => { + Object.values(engine.tasks).forEach(({ task }) => { + commands.push(task); + }); }); - }); - const cmdsString = commands.join(', '); + const cmdsString = commands.join(', '); - logToSummary(` + logToSummary(` ${chalk().bold('COMMANDS:')} ${cmdsString} @@ -40,11 +38,7 @@ ${chalk().bold('OPTIONS:')} ${optsString} `); -}; - -const Task: RnvTask = { - description: 'Display generic help', - fn: async () => {}, + }, task: RnvTaskName.help, isGlobalScope: true, isPriorityOrder: true, diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 2c1ea5b5d8..0c45af7d44 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -1,30 +1,24 @@ -import { areNodeModulesInstalled, logTask, logInfo, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { areNodeModulesInstalled, logInfo, RnvTask, RnvTaskName } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; -const fn: RnvTaskFn = async (c, parentTask, _) => { - logTask('taskInstall', `requiresInstall:${!!c._requiresNpmInstall}:${!c.runtime.skipPackageUpdate}`); - - if (c.program.opts().only && !!parentTask) return true; - - if (c.program.opts().skipDependencyCheck) return true; - - // Check node_modules - // c.runtime.skipPackageUpdate only reflects rnv version mismatch. should not prevent updating other deps - if (!areNodeModulesInstalled() || c._requiresNpmInstall /* && !c.runtime.skipPackageUpdate */) { - if (!areNodeModulesInstalled()) { - logInfo('node_modules folder is missing. INSTALLING...'); - } else { - logInfo('node_modules folder is out of date. INSTALLING...'); - } - c._requiresNpmInstall = false; - await installPackageDependenciesAndPlugins(); - } - return true; -}; - const Task: RnvTask = { description: 'Install package node_modules via yarn or npm', - fn: async () => {}, + fn: async ({ ctx }) => { + if (ctx.program.opts().skipDependencyCheck) return true; + + // Check node_modules + // c.runtime.skipPackageUpdate only reflects rnv version mismatch. should not prevent updating other deps + if (!areNodeModulesInstalled() || ctx._requiresNpmInstall /* && !c.runtime.skipPackageUpdate */) { + if (!areNodeModulesInstalled()) { + logInfo('node_modules folder is missing. INSTALLING...'); + } else { + logInfo('node_modules folder is out of date. INSTALLING...'); + } + ctx._requiresNpmInstall = false; + await installPackageDependenciesAndPlugins(); + } + return true; + }, task: RnvTaskName.install, }; diff --git a/packages/engine-core/src/tasks/global/taskKill.ts b/packages/engine-core/src/tasks/global/taskKill.ts index 7581b1f30e..cc959c87eb 100644 --- a/packages/engine-core/src/tasks/global/taskKill.ts +++ b/packages/engine-core/src/tasks/global/taskKill.ts @@ -2,71 +2,65 @@ import { PlatformKey, RnvContext, RnvTask, - RnvTaskFn, RnvTaskName, chalk, configureRuntimeDefaults, executeTask, inquirerPrompt, logSuccess, - logTask, } from '@rnv/core'; import { checkPortInUse } from '@rnv/sdk-utils'; import killPort from 'kill-port'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskKill'); - - const usedPorts: RnvContext['runtime']['supportedPlatforms'] = []; - let platArray: RnvContext['runtime']['supportedPlatforms'] = []; - const results = []; - let ports: Partial> = {}; - - await configureRuntimeDefaults(); +const Task: RnvTask = { + description: 'Kills all the processes related to this project', + fn: async ({ ctx, taskName, originTaskName }) => { + const usedPorts: RnvContext['runtime']['supportedPlatforms'] = []; + let platArray: RnvContext['runtime']['supportedPlatforms'] = []; + const results = []; + let ports: Partial> = {}; - if (c.paths.project.configExists) { - await executeTask(RnvTaskName.appConfigure, RnvTaskName.kill, originTask); await configureRuntimeDefaults(); - platArray = Object.values(c.runtime.supportedPlatforms); - ports = c.buildConfig?.defaults?.ports || {}; - } - for (let i = 0; i < platArray.length; i++) { - const plat = platArray[i]; - const port = ports?.[plat.platform]; - plat.port = port; - if (port) { - results.push(checkPortInUse(port)); + + if (ctx.paths.project.configExists) { + await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); + await configureRuntimeDefaults(); + platArray = Object.values(ctx.runtime.supportedPlatforms); + ports = ctx.buildConfig?.defaults?.ports || {}; } - } - const usedPortsArr = await Promise.all(results); - usedPortsArr.forEach((isInUse, i) => { - if (isInUse) { - usedPorts.push(platArray[i]); + for (let i = 0; i < platArray.length; i++) { + const plat = platArray[i]; + const port = ports?.[plat.platform]; + plat.port = port; + if (port) { + results.push(checkPortInUse(port)); + } } - }); + const usedPortsArr = await Promise.all(results); + usedPortsArr.forEach((isInUse, i) => { + if (isInUse) { + usedPorts.push(platArray[i]); + } + }); - if (usedPorts.length) { - const { confirm } = await inquirerPrompt({ - type: 'confirm', - message: 'Processes attached to the ports will be killed. Continue?', - warningMessage: `Found active ports: + if (usedPorts.length) { + const { confirm } = await inquirerPrompt({ + type: 'confirm', + message: 'Processes attached to the ports will be killed. Continue?', + warningMessage: `Found active ports: ${usedPorts.map((v) => chalk().bold(`> ${v.port} (${v.platform})`)).join('\n')}`, - }); - if (confirm) { - const killPromise = []; - usedPorts.forEach((v) => { - if (v.port) killPromise.push(killPort(v.port)); }); - await Promise.all(usedPorts); - logSuccess('Processes KILLED'); + if (confirm) { + const killPromise = []; + usedPorts.forEach((v) => { + if (v.port) killPromise.push(killPort(v.port)); + }); + await Promise.all(usedPorts); + logSuccess('Processes KILLED'); + } } - } - return true; -}; - -const Task: RnvTask = { - description: 'Kills all the processes related to this project', - fn: async () => {}, + return true; + }, task: RnvTaskName.kill, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/global/taskStatus.ts b/packages/engine-core/src/tasks/global/taskStatus.ts index f06a36e9d7..5425af1d09 100644 --- a/packages/engine-core/src/tasks/global/taskStatus.ts +++ b/packages/engine-core/src/tasks/global/taskStatus.ts @@ -1,10 +1,10 @@ import { RnvTask, RnvTaskName } from '@rnv/core'; -const fn = async () => Promise.resolve(); - const Task: RnvTask = { description: 'Show current info about the project', - fn: async () => {}, + fn: async () => { + return true; + }, task: RnvTaskName.status, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksList.ts b/packages/engine-core/src/tasks/hooks/taskHooksList.ts index 68a1d537d1..40040929ff 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksList.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksList.ts @@ -1,37 +1,24 @@ -import { - logToSummary, - logTask, - generateOptions, - buildHooks, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { logToSummary, generateOptions, buildHooks, RnvTask, RnvTaskName } from '@rnv/core'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskHooksList'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.hooksList, originTask); - await buildHooks(); +const Task: RnvTask = { + description: 'Get list of all available hooks', + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + await buildHooks(); - if (c.buildHooks) { - const hookOpts = generateOptions(c.buildHooks); - let hooksAsString = `\n${'Hooks:'}\n${hookOpts.asString}`; + if (ctx.buildHooks) { + const hookOpts = generateOptions(ctx.buildHooks); + let hooksAsString = `\n${'Hooks:'}\n${hookOpts.asString}`; - if (c.buildPipes) { - const pipeOpts = generateOptions(c.buildPipes); - hooksAsString += `\n${'Pipes:'}\n${pipeOpts.asString}`; + if (ctx.buildPipes) { + const pipeOpts = generateOptions(ctx.buildPipes); + hooksAsString += `\n${'Pipes:'}\n${pipeOpts.asString}`; + } + logToSummary(hooksAsString); + return; } - logToSummary(hooksAsString); - return; - } - return Promise.reject('Your buildHooks object is empty!'); -}; - -const Task: RnvTask = { - description: 'Get list of all available hooks', - fn: async () => {}, + return Promise.reject('Your buildHooks object is empty!'); + }, task: RnvTaskName.hooksList, forceBuildHookRebuild: true, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts index 7636d5e8da..ff31e404dd 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts @@ -1,19 +1,14 @@ -import { logTask, logRaw, generateOptions, buildHooks, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; - -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskHooksPipes'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.hooksPipes, originTask); - - await buildHooks(); - - const pipeOpts = generateOptions(c.buildPipes); - logRaw(`Pipes:\n${pipeOpts.asString}`); -}; +import { logRaw, generateOptions, buildHooks, RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'Get the list of all available pipes', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + await buildHooks(); + + const pipeOpts = generateOptions(ctx.buildPipes); + logRaw(`Pipes:\n${pipeOpts.asString}`); + }, task: RnvTaskName.hooksPipes, }; diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index 463a8439a2..4ce37e38e2 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -1,63 +1,43 @@ -import { - logTask, - logInfo, - buildHooks, - executeTask, - fsExistsSync, - RnvTaskFn, - inquirerPrompt, - RnvTask, - RnvTaskName, - RnvTaskOptions, -} from '@rnv/core'; - -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskHooksRun'); - - if (fsExistsSync(c.paths.project.config)) { - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.hooksRun, originTask); - } else { - logInfo('Your are running your buildHook outside of renative project'); - } - - await buildHooks(); - - if (!c.buildHooks) { - return Promise.reject('Build hooks have not been compiled properly!'); - } - - let hookName = c.program?.opts()?.exeMethod; - let showHookList = false; - - if (!hookName || hookName === true) { - showHookList = true; - } else if (!c.buildHooks[hookName]) { - showHookList = true; - } - - if (Object.keys(c.buildHooks).length === 0) { - return true; - } - - if (showHookList) { - const hooksList = Object.keys(c.buildHooks); - - const { selectedHook } = await inquirerPrompt({ - name: 'selectedHook', - type: 'list', - message: 'Pick an available hook:', - choices: hooksList, - }); - hookName = selectedHook; - } - await c.buildHooks[hookName](c); - - return true; -}; +import { buildHooks, inquirerPrompt, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; const Task: RnvTask = { description: 'Run specific build hook', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + await buildHooks(); + + if (!ctx.buildHooks) { + return Promise.reject('Build hooks have not been compiled properly!'); + } + + let hookName = ctx.program?.opts()?.exeMethod; + let showHookList = false; + + if (!hookName || hookName === true) { + showHookList = true; + } else if (!ctx.buildHooks[hookName]) { + showHookList = true; + } + + if (Object.keys(ctx.buildHooks).length === 0) { + return true; + } + + if (showHookList) { + const hooksList = Object.keys(ctx.buildHooks); + + const { selectedHook } = await inquirerPrompt({ + name: 'selectedHook', + type: 'list', + message: 'Pick an available hook:', + choices: hooksList, + }); + hookName = selectedHook; + } + await ctx.buildHooks[hookName](ctx); + + return true; + }, task: RnvTaskName.hooksRun, options: [RnvTaskOptions.exeMethod], forceBuildHookRebuild: true, diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index 966818fce2..9a0386ae3e 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -1,10 +1,8 @@ import { logInfo, - logTask, fsExistsSync, fsRenameSync, fsSymlinkSync, - RnvTaskFn, RnvTask, RnvTaskName, mkdirSync, @@ -46,52 +44,48 @@ const _linkPackage = (pkg: LinkablePackage) => { const runtimeLibs = ['@rnv/renative']; -const fn: RnvTaskFn = async () => { - logTask('taskLink'); - - const linkablePackages = traverseTargetProject(getSourceDir()); +const Task: RnvTask = { + description: 'Links development version or renative with this project', + fn: async () => { + const linkablePackages = traverseTargetProject(getSourceDir()); - let msg = 'Found following source packages:\n\n'; + let msg = 'Found following source packages:\n\n'; - const choices: { name: string; value: LinkablePackage }[] = []; + const choices: { name: string; value: LinkablePackage }[] = []; - linkablePackages.forEach((pkg) => { - const title = `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ - pkg.isBrokenLink ? chalk().red('(broken)') : pkg.isLinked ? chalk().green('(linked)') : '(unlinked)' - }\n`; + linkablePackages.forEach((pkg) => { + const title = `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ + pkg.isBrokenLink ? chalk().red('(broken)') : pkg.isLinked ? chalk().green('(linked)') : '(unlinked)' + }\n`; - msg += title; - const addon = runtimeLibs.includes(pkg.name) - ? chalk().yellow(' (Runtime lib. will not work with react-native)') - : ''; + msg += title; + const addon = runtimeLibs.includes(pkg.name) + ? chalk().yellow(' (Runtime lib. will not work with react-native)') + : ''; - choices.push({ name: `${pkg.name}${addon}`, value: pkg }); - }); + choices.push({ name: `${pkg.name}${addon}`, value: pkg }); + }); - logInfo(msg); + logInfo(msg); - const slpDefaults = linkablePackages.filter((pkg) => !runtimeLibs.includes(pkg.name)); + const slpDefaults = linkablePackages.filter((pkg) => !runtimeLibs.includes(pkg.name)); - const { selectedLinkableProjects } = await inquirerPrompt({ - name: 'selectedLinkableProjects', - type: 'checkbox', - message: `Found following packages to link?`, - default: slpDefaults, - loop: false, - choices, - }); + const { selectedLinkableProjects } = await inquirerPrompt({ + name: 'selectedLinkableProjects', + type: 'checkbox', + message: `Found following packages to link?`, + default: slpDefaults, + loop: false, + choices, + }); - logInfo('Linking packages...'); - selectedLinkableProjects.forEach((pkg: LinkablePackage) => { - _linkPackage(pkg); - }); + logInfo('Linking packages...'); + selectedLinkableProjects.forEach((pkg: LinkablePackage) => { + _linkPackage(pkg); + }); - return true; -}; - -const Task: RnvTask = { - description: 'Links development version or renative with this project', - fn: async () => {}, + return true; + }, task: RnvTaskName.link, options: [{ key: 'dir', description: 'Source folder to be linked into project', isValueType: true }], isGlobalScope: true, diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index 2218d0143b..7f157d3b38 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -1,4 +1,4 @@ -import { logInfo, logTask, fsRenameSync, fsUnlinkSync, RnvTaskFn, RnvTask, RnvTaskName, chalk } from '@rnv/core'; +import { logInfo, fsRenameSync, fsUnlinkSync, RnvTask, RnvTaskName, chalk } from '@rnv/core'; import { getSourceDir, traverseTargetProject } from './linker'; import { LinkablePackage } from './types'; @@ -17,33 +17,29 @@ const _unlinkPackage = (pkg: LinkablePackage) => { } }; -const fn: RnvTaskFn = async () => { - logTask('taskUnlink'); - - const linkablePackages = traverseTargetProject(getSourceDir()); +const Task: RnvTask = { + description: 'Replaces rnv version in project with original node_modules version', + fn: async () => { + const linkablePackages = traverseTargetProject(getSourceDir()); - let msg = 'Found following source packages:\n\n'; + let msg = 'Found following source packages:\n\n'; - linkablePackages.forEach((pkg) => { - msg += `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ - pkg.isBrokenLink ? chalk().red('(broken)') : pkg.isLinked ? chalk().green('(linked)') : '(unlinked)' - }\n`; - }); + linkablePackages.forEach((pkg) => { + msg += `${pkg.nmPath.replace(pkg.name, chalk().bold(pkg.name))} ${ + pkg.isBrokenLink ? chalk().red('(broken)') : pkg.isLinked ? chalk().green('(linked)') : '(unlinked)' + }\n`; + }); - logInfo(msg); + logInfo(msg); - logInfo('Unlinking packages...'); + logInfo('Unlinking packages...'); - linkablePackages.forEach((pkg) => { - _unlinkPackage(pkg); - }); + linkablePackages.forEach((pkg) => { + _unlinkPackage(pkg); + }); - return true; -}; - -const Task: RnvTask = { - description: 'Replaces rnv version in project with original node_modules version', - fn: async () => {}, + return true; + }, task: RnvTaskName.unlink, isGlobalScope: true, ignoreEngines: true, diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 9787c9ca32..331df32d3e 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -10,8 +10,6 @@ import { injectPlatformDependencies, configureRuntimeDefaults, executeTask, - shouldSkipTask, - RnvTaskFn, RnvTask, RnvTaskName, installPackageDependencies, @@ -20,56 +18,53 @@ import { import { isBuildSchemeSupported } from '../../buildSchemes'; import { configureFonts } from '@rnv/sdk-utils'; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskPlatformConfigure', ''); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformConfigure, originTask); - - if (shouldSkipTask(RnvTaskName.platformConfigure, originTask)) return true; - - await isPlatformSupported(); - await isBuildSchemeSupported(); - - await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.platformConfigure, originTask, true); - - await configureRuntimeDefaults(); +const Task: RnvTask = { + description: 'Low-level task used by engines to prepare platformBuilds folder', + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx, taskName, originTaskName }) => { + const { program } = ctx; + await isPlatformSupported(); + await isBuildSchemeSupported(); - if (c.program.opts().only && !!parentTask) return true; + await executeTask({ + taskName: RnvTaskName.sdkConfigure, + parentTaskName: taskName, + originTaskName, + isOptional: true, + }); - await executeTask(RnvTaskName.install, RnvTaskName.platformConfigure, originTask); + await configureRuntimeDefaults(); - const hasBuild = fsExistsSync(c.paths.project.builds.dir); - logTask('', `taskPlatformConfigure hasBuildFolderPresent:${hasBuild}`); + await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); - if ((c.program.opts().reset || c.program.opts().resetHard) && !c.runtime.disableReset) { - logInfo( - `You passed ${chalk().bold(c.program.opts().reset ? '-r' : '-R')} argument. "${chalk().bold( - getAppFolder() - )}" CLEANING...DONE` - ); - await cleanPlatformBuild(c.platform); - } + const hasBuild = fsExistsSync(ctx.paths.project.builds.dir); + logTask('', `taskPlatformConfigure hasBuildFolderPresent:${hasBuild}`); - await createPlatformBuild(c.platform); - await injectPlatformDependencies( - async () => { - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); - }, - async () => { - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); + if ((program.opts().reset || program.opts().resetHard) && !ctx.runtime.disableReset) { + logInfo( + `You passed ${chalk().bold(program.opts().reset ? '-r' : '-R')} argument. "${chalk().bold( + getAppFolder() + )}" CLEANING...DONE` + ); + await cleanPlatformBuild(ctx.platform); } - ); - // await _runCopyPlatforms(c); - return true; -}; -const Task: RnvTask = { - description: 'Low-level task used by engines to prepare platformBuilds folder', - fn: async () => {}, + await createPlatformBuild(ctx.platform); + await injectPlatformDependencies( + async () => { + await installPackageDependencies(); + await overrideTemplatePlugins(); + await configureFonts(); + }, + async () => { + await installPackageDependencies(); + await overrideTemplatePlugins(); + await configureFonts(); + } + ); + // await _runCopyPlatforms(c); + return true; + }, task: RnvTaskName.platformConfigure, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts index f751d3ee2e..f5a01073dd 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts @@ -1,94 +1,85 @@ import path from 'path'; - import { chalk, - logTask, logSuccess, logToSummary, writeFileSync, removeDirs, generatePlatformChoices, - executeTask, - RnvTaskFn, inquirerPrompt, PlatformKey, RnvTask, RnvTaskName, } from '@rnv/core'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskPlatformConnect'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformConnect, originTask); - - const configOriginal = c.files.project.config_original; - if (!configOriginal) { - return; - } - - if (!c.files.project.config?.paths?.platformTemplatesDirs) { - logToSummary('All supported platforms are connected. nothing to do.'); - return; - } - - let selectedPlatforms: Array; - if (c.platform) { - selectedPlatforms = [c.platform]; - } else { - const { connectedPlatforms } = await inquirerPrompt({ - name: 'connectedPlatforms', - message: - 'This will point platformTemplates folders from your local project to ReNative managed one. Select platforms you would like to connect', - type: 'checkbox', - choices: generatePlatformChoices().map((choice) => ({ - ...choice, - disabled: choice.isConnected, - })), - }); - selectedPlatforms = connectedPlatforms; - } - - if (selectedPlatforms.length) { - selectedPlatforms.forEach((platform) => { - if (configOriginal.paths?.platformTemplatesDirs?.[platform]) { - delete configOriginal.paths.platformTemplatesDirs[platform]; - } - - if (!Object.keys(configOriginal.paths?.platformTemplatesDirs || {}).length) { - delete configOriginal.paths?.platformTemplatesDirs; // also cleanup the empty object - } - - writeFileSync(c.paths.project.config, configOriginal); - }); - } - - const { deletePlatformFolder } = await inquirerPrompt({ - name: 'deletePlatformFolder', - type: 'confirm', - message: 'Would you also like to delete the previously used platform folder?', - }); - - if (deletePlatformFolder) { - const pathsToRemove: Array = []; - selectedPlatforms.forEach((platform) => { - pathsToRemove.push(path.join(c.paths.project.platformTemplatesDirs[platform], platform)); +const Task: RnvTask = { + description: 'Connect platform template back to rnv', + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const configOriginal = ctx.files.project.config_original; + if (!configOriginal) { + return; + } + + if (!ctx.files.project.config?.paths?.platformTemplatesDirs) { + logToSummary('All supported platforms are connected. nothing to do.'); + return; + } + + let selectedPlatforms: Array; + if (ctx.platform) { + selectedPlatforms = [ctx.platform]; + } else { + const { connectedPlatforms } = await inquirerPrompt({ + name: 'connectedPlatforms', + message: + 'This will point platformTemplates folders from your local project to ReNative managed one. Select platforms you would like to connect', + type: 'checkbox', + choices: generatePlatformChoices().map((choice) => ({ + ...choice, + disabled: choice.isConnected, + })), + }); + selectedPlatforms = connectedPlatforms; + } + + if (selectedPlatforms.length) { + selectedPlatforms.forEach((platform) => { + if (configOriginal.paths?.platformTemplatesDirs?.[platform]) { + delete configOriginal.paths.platformTemplatesDirs[platform]; + } + + if (!Object.keys(configOriginal.paths?.platformTemplatesDirs || {}).length) { + delete configOriginal.paths?.platformTemplatesDirs; // also cleanup the empty object + } + + writeFileSync(ctx.paths.project.config, configOriginal); + }); + } + + const { deletePlatformFolder } = await inquirerPrompt({ + name: 'deletePlatformFolder', + type: 'confirm', + message: 'Would you also like to delete the previously used platform folder?', }); - // TODO: Remove shared folders as well + if (deletePlatformFolder) { + const pathsToRemove: Array = []; + selectedPlatforms.forEach((platform) => { + pathsToRemove.push(path.join(ctx.paths.project.platformTemplatesDirs[platform], platform)); + }); - await removeDirs(pathsToRemove); - } + // TODO: Remove shared folders as well - logSuccess( - `${chalk().bold( - selectedPlatforms.join(',') - )} now using ReNative platformTemplates located associated platform engines.` - ); -}; + await removeDirs(pathsToRemove); + } -const Task: RnvTask = { - description: 'Connect platform template back to rnv', - fn: async () => {}, + logSuccess( + `${chalk().bold( + selectedPlatforms.join(',') + )} now using ReNative platformTemplates located associated platform engines.` + ); + }, task: RnvTaskName.platformConnect, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts index 744b25a06c..b5812e5667 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts @@ -1,77 +1,68 @@ import { chalk, - logTask, logSuccess, logError, logInfo, writeFileSync, generatePlatformChoices, ejectPlatform, - executeTask, - RnvTaskFn, inquirerPrompt, PlatformKey, RnvTask, RnvTaskName, } from '@rnv/core'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskPlatformEject'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformEject, originTask); - - const configOriginal = c.files.project.config_original; +const Task: RnvTask = { + description: 'Copy all platform files directly to project', + fn: async ({ ctx }) => { + const configOriginal = ctx.files.project.config_original; - if (!configOriginal) { - return; - } + if (!configOriginal) { + return; + } - let selectedPlatforms: Array; - if (c.platform) { - selectedPlatforms = [c.platform]; - } else { - logInfo(`Preparing to eject engine platforms to local ${chalk().bold('./platformTemplates')}`); - const { ejectedPlatforms } = await inquirerPrompt({ - name: 'ejectedPlatforms', - message: 'Select platforms you would like to eject (use SPACE key)', - type: 'checkbox', - choices: generatePlatformChoices().map((choice) => ({ - ...choice, - disabled: !choice.isConnected, - })), - }); - selectedPlatforms = ejectedPlatforms; - } + let selectedPlatforms: Array; + if (ctx.platform) { + selectedPlatforms = [ctx.platform]; + } else { + logInfo(`Preparing to eject engine platforms to local ${chalk().bold('./platformTemplates')}`); + const { ejectedPlatforms } = await inquirerPrompt({ + name: 'ejectedPlatforms', + message: 'Select platforms you would like to eject (use SPACE key)', + type: 'checkbox', + choices: generatePlatformChoices().map((choice) => ({ + ...choice, + disabled: !choice.isConnected, + })), + }); + selectedPlatforms = ejectedPlatforms; + } - if (selectedPlatforms.length) { - selectedPlatforms.forEach((platform) => { - // const engine = getEngineRunnerByPlatform(c, platform); - // const destDir = path.join(c.paths.project.dir, 'platformTemplates', platform); + if (selectedPlatforms.length) { + selectedPlatforms.forEach((platform) => { + // const engine = getEngineRunnerByPlatform(c, platform); + // const destDir = path.join(c.paths.project.dir, 'platformTemplates', platform); - // engine.ejectPlatform(c, platform, destDir); - ejectPlatform(platform); + // engine.ejectPlatform(c, platform, destDir); + ejectPlatform(platform); - configOriginal.paths = configOriginal.paths || {}; + configOriginal.paths = configOriginal.paths || {}; - configOriginal.paths.platformTemplatesDirs = configOriginal.paths.platformTemplatesDirs || {}; - configOriginal.paths.platformTemplatesDirs[platform] = `./${'platformTemplates'}`; - writeFileSync(c.paths.project.config, configOriginal); - }); + configOriginal.paths.platformTemplatesDirs = configOriginal.paths.platformTemplatesDirs || {}; + configOriginal.paths.platformTemplatesDirs[platform] = `./${'platformTemplates'}`; + writeFileSync(ctx.paths.project.config, configOriginal); + }); - logSuccess( - `${chalk().bold(selectedPlatforms.join(','))} platform templates are located in ${chalk().bold( - c.files.project.config?.paths?.platformTemplatesDirs?.[selectedPlatforms[0]] - )} now. You can edit them directly!` - ); - } else { - logError(`You haven't selected any platform to eject. + logSuccess( + `${chalk().bold(selectedPlatforms.join(','))} platform templates are located in ${chalk().bold( + ctx.files.project.config?.paths?.platformTemplatesDirs?.[selectedPlatforms[0]] + )} now. You can edit them directly!` + ); + } else { + logError(`You haven't selected any platform to eject. TIP: You can select options with ${chalk().bold('SPACE')} key before pressing ENTER!`); - } -}; - -const Task: RnvTask = { - description: 'Copy all platform files directly to project', - fn: async () => {}, + } + }, task: RnvTaskName.platformEject, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformList.ts b/packages/engine-core/src/tasks/platform/taskPlatformList.ts index 0663ee8d4a..e664cc0d6f 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformList.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformList.ts @@ -1,27 +1,13 @@ -import { - chalk, - logToSummary, - logTask, - generatePlatformChoices, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; - -const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { - logTask('taskPlatformList'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformList, originTask); - - const opts = generatePlatformChoices().map((v, i) => ` [${chalk().bold(i + 1)}]> ${v.name}`); - logToSummary(`Platforms:\n\n${opts.join('\n')}`); - return true; -}; +import { chalk, logToSummary, generatePlatformChoices, RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'List all available platforms', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async () => { + const opts = generatePlatformChoices().map((v, i) => ` [${chalk().bold(i + 1)}]> ${v.name}`); + logToSummary(`Platforms:\n\n${opts.join('\n')}`); + return true; + }, task: RnvTaskName.platformList, }; diff --git a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts index d85a141e92..12fef2e370 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts @@ -1,36 +1,23 @@ -import { - updateProjectPlatforms, - logTask, - executeTask, - RnvTaskFn, - inquirerPrompt, - RnvTask, - RnvTaskName, -} from '@rnv/core'; - -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskPlatformSetup'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.platformSetup, originTask); - - const currentPlatforms = c.files.project.config?.defaults?.supportedPlatforms || []; - - const { inputSupportedPlatforms } = await inquirerPrompt({ - name: 'inputSupportedPlatforms', - type: 'checkbox', - pageSize: 20, - message: 'What platforms would you like to use?', - validate: (val) => !!val.length || 'Please select at least a platform', - default: currentPlatforms, - choices: c.runtime.availablePlatforms, - }); - - updateProjectPlatforms(inputSupportedPlatforms); -}; +import { updateProjectPlatforms, inquirerPrompt, RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'Allows you to change supportedPlatforms for your project', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const currentPlatforms = ctx.files.project.config?.defaults?.supportedPlatforms || []; + + const { inputSupportedPlatforms } = await inquirerPrompt({ + name: 'inputSupportedPlatforms', + type: 'checkbox', + pageSize: 20, + message: 'What platforms would you like to use?', + validate: (val) => !!val.length || 'Please select at least a platform', + default: currentPlatforms, + choices: ctx.runtime.availablePlatforms, + }); + + updateProjectPlatforms(inputSupportedPlatforms); + }, task: RnvTaskName.platformSetup, }; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index d9d76d4c06..9a026d4927 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -2,10 +2,8 @@ import { writeRenativeConfigFile, chalk, logSuccess, - logTask, resolvePluginDependants, executeTask, - RnvTaskFn, PluginListResponseItem, getApi, inquirerPrompt, @@ -15,92 +13,87 @@ import { } from '@rnv/core'; import { getPluginList } from '../../plugins'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskPluginAdd'); +const Task: RnvTask = { + description: 'Add selected plugin to the project', + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx, taskName, originTaskName }) => { + const selPluginKey = ctx.program.rawArgs?.[4]; + + const o = getPluginList(); + + const selPlugin = selPluginKey && o.allPlugins[selPluginKey]; + const selectedPlugins: Record = {}; + const installMessage = []; + + if (!selPlugin) { + const { plugin } = await inquirerPrompt({ + name: 'plugin', + type: 'rawlist', + message: 'Select the plugins you want to add', + choices: o.asArray, + pageSize: 50, + }); + + selectedPlugins[plugin] = o.allPlugins[plugin]; + installMessage.push(`${chalk().bold(plugin)} v(${chalk().green(o.allPlugins[plugin].version)})`); + } else { + selectedPlugins[selPluginKey] = selPlugin; + installMessage.push(`${chalk().bold(selPluginKey)} v(${chalk().green(selPlugin.version)})`); + } + + const questionPlugins: Record = {}; - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.pluginAdd, originTask); + const cnfOriginal = ctx.files.project.config_original; + if (!cnfOriginal) { + return; + } - const selPluginKey = c.program.rawArgs?.[4]; + const cnfPlugins = cnfOriginal.plugins || {}; + cnfOriginal.plugins = cnfPlugins; - const o = getPluginList(); + Object.keys(selectedPlugins).forEach((key) => { + // c.buildConfig.plugins[key] = 'source:rnv'; + const plugin = selectedPlugins[key]; + if (plugin.props) questionPlugins[key] = plugin; - const selPlugin = selPluginKey && o.allPlugins[selPluginKey]; - const selectedPlugins: Record = {}; - const installMessage = []; + cnfPlugins[key] = 'source:rnv'; - if (!selPlugin) { - const { plugin } = await inquirerPrompt({ - name: 'plugin', - type: 'rawlist', - message: 'Select the plugins you want to add', - choices: o.asArray, - pageSize: 50, + // c.buildConfig.plugins[key] = selectedPlugins[key]; }); - selectedPlugins[plugin] = o.allPlugins[plugin]; - installMessage.push(`${chalk().bold(plugin)} v(${chalk().green(o.allPlugins[plugin].version)})`); - } else { - selectedPlugins[selPluginKey] = selPlugin; - installMessage.push(`${chalk().bold(selPluginKey)} v(${chalk().green(selPlugin.version)})`); - } - - const questionPlugins: Record = {}; - - const cnfOriginal = c.files.project.config_original; - if (!cnfOriginal) { - return; - } - - const cnfPlugins = cnfOriginal.plugins || {}; - cnfOriginal.plugins = cnfPlugins; - - Object.keys(selectedPlugins).forEach((key) => { - // c.buildConfig.plugins[key] = 'source:rnv'; - const plugin = selectedPlugins[key]; - if (plugin.props) questionPlugins[key] = plugin; - - cnfPlugins[key] = 'source:rnv'; - - // c.buildConfig.plugins[key] = selectedPlugins[key]; - }); - - const pluginKeys = Object.keys(questionPlugins); - for (let i = 0; i < pluginKeys.length; i++) { - const pluginKey = pluginKeys[i]; - const plugin = questionPlugins[pluginKey]; - const pluginProps = Object.keys(plugin.props || {}); - const finalProps: Record = {}; - for (let i2 = 0; i2 < pluginProps.length; i2++) { - const { propValue } = await inquirerPrompt({ - name: 'propValue', - type: 'input', - message: `${pluginKey}: Add value for ${pluginProps[i2]} (You can do this later in ./renative.json file)`, - }); - finalProps[pluginProps[i2]] = propValue; + const pluginKeys = Object.keys(questionPlugins); + for (let i = 0; i < pluginKeys.length; i++) { + const pluginKey = pluginKeys[i]; + const plugin = questionPlugins[pluginKey]; + const pluginProps = Object.keys(plugin.props || {}); + const finalProps: Record = {}; + for (let i2 = 0; i2 < pluginProps.length; i2++) { + const { propValue } = await inquirerPrompt({ + name: 'propValue', + type: 'input', + message: `${pluginKey}: Add value for ${pluginProps[i2]} (You can do this later in ./renative.json file)`, + }); + finalProps[pluginProps[i2]] = propValue; + } + const pluginToAdd: RenativeConfigPlugin = {}; + pluginToAdd.props = finalProps; + cnfPlugins[pluginKey] = pluginToAdd; } - const pluginToAdd: RenativeConfigPlugin = {}; - pluginToAdd.props = finalProps; - cnfPlugins[pluginKey] = pluginToAdd; - } - - const spinner = getApi() - .spinner(`Installing: ${installMessage.join(', ')}`) - .start(''); - writeRenativeConfigFile(c.paths.project.config, cnfOriginal); + const spinner = getApi() + .spinner(`Installing: ${installMessage.join(', ')}`) + .start(''); - await resolvePluginDependants(); + writeRenativeConfigFile(ctx.paths.project.config, cnfOriginal); - await executeTask(RnvTaskName.install, RnvTaskName.pluginAdd, originTask); + await resolvePluginDependants(); - spinner.succeed('All plugins installed!'); - logSuccess('Plugins installed successfully!'); - return true; -}; + await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); -const Task: RnvTask = { - description: 'Add selected plugin to the project', - fn: async () => {}, + spinner.succeed('All plugins installed!'); + logSuccess('Plugins installed successfully!'); + return true; + }, task: RnvTaskName.pluginAdd, }; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginList.ts b/packages/engine-core/src/tasks/plugin/taskPluginList.ts index c58c96b958..7db6d19336 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginList.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginList.ts @@ -1,19 +1,14 @@ -import { logTask, logToSummary, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; import { getPluginList } from '../../plugins'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskPluginList'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.pluginList, originTask); - - const o = getPluginList(); - logToSummary(`Plugins:\n\n${o.asString}`); - return true; -}; - const Task: RnvTask = { description: 'Show list of all available plugins', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async () => { + const o = getPluginList(); + logToSummary(`Plugins:\n\n${o.asString}`); + return true; + }, task: RnvTaskName.pluginList, }; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts index 575b45fadf..a072b01f31 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts @@ -1,55 +1,36 @@ -import { - writeFileSync, - logSuccess, - logTask, - logWarning, - executeTask, - RnvTaskFn, - inquirerPrompt, - RnvTask, - RnvTaskName, -} from '@rnv/core'; - -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskPluginUpdate'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.pluginUpdate, originTask); - - // const pluginList = getPluginList(c, true); - - // console.log(o.asString); - - const { confirm } = await inquirerPrompt({ - name: 'confirm', - type: 'confirm', - message: 'Above installed plugins will be updated with RNV', - }); - - if (confirm) { - const { plugins } = c.buildConfig; - if (plugins) { - const cnf = c.files.project.config_original; - - if (!cnf) return; - Object.keys(plugins).forEach((_key) => { - //TODO: fix this. not working - // c.buildConfig.plugins[key] = o.json[key]; - cnf.plugins = cnf.plugins || {}; - // cnf.plugins[key] = pluginList.json[key]; - }); - - writeFileSync(c.paths.project.config, cnf); - - logSuccess('Plugins updated successfully!'); - } else { - logWarning(`No plugins found in renative.json`); - } - } -}; +import { writeFileSync, logSuccess, logWarning, inquirerPrompt, RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'Update specific plugin to latest supported version (rnv)', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const { confirm } = await inquirerPrompt({ + name: 'confirm', + type: 'confirm', + message: 'Above installed plugins will be updated with RNV', + }); + + if (confirm) { + const { plugins } = ctx.buildConfig; + if (plugins) { + const cnf = ctx.files.project.config_original; + + if (!cnf) return; + Object.keys(plugins).forEach((_key) => { + //TODO: fix this. not working + // c.buildConfig.plugins[key] = o.json[key]; + cnf.plugins = cnf.plugins || {}; + // cnf.plugins[key] = pluginList.json[key]; + }); + + writeFileSync(ctx.paths.project.config, cnf); + + logSuccess('Plugins updated successfully!'); + } else { + logWarning(`No plugins found in renative.json`); + } + } + }, task: RnvTaskName.pluginUpdate, }; diff --git a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts index 811496a8a1..f550be95a9 100644 --- a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts @@ -1,31 +1,25 @@ -import { - RnvTaskFn, - executeTask, - configureRuntimeDefaults, - isPlatformSupported, - logTask, - RnvTask, - RnvTaskName, -} from '@rnv/core'; +import { executeTask, configureRuntimeDefaults, isPlatformSupported, RnvTask, RnvTaskName } from '@rnv/core'; import { isBuildSchemeSupported } from '../../buildSchemes'; -const fn: RnvTaskFn = async (_c, parentTask, originTask) => { - logTask('taskConfigureSoft'); - - await configureRuntimeDefaults(); - await executeTask(RnvTaskName.appConfigure, RnvTaskName.configureSoft, originTask); - await isPlatformSupported(); - await isBuildSchemeSupported(); +const Task: RnvTask = { + description: 'Configure system and project without recreating files (used for --only)', + fn: async ({ taskName, originTaskName }) => { + await configureRuntimeDefaults(); + await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); - await executeTask(RnvTaskName.sdkConfigure, RnvTaskName.configureSoft, originTask, true); + await isPlatformSupported(); + await isBuildSchemeSupported(); - await configureRuntimeDefaults(); - return true; -}; + await executeTask({ + taskName: RnvTaskName.sdkConfigure, + parentTaskName: taskName, + originTaskName, + isOptional: true, + }); -const Task: RnvTask = { - description: 'Configure system and project without recreating files (used for --only)', - fn: async () => {}, + await configureRuntimeDefaults(); + return true; + }, task: RnvTaskName.configureSoft, isPrivate: true, }; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 7fd31c0ed5..6eb5e9588b 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -4,7 +4,6 @@ import { overrideTemplatePlugins, resolvePluginDependants, chalk, - logTask, logInfo, updateRenativeConfigs, configureRuntimeDefaults, @@ -22,7 +21,6 @@ import { executeTask, initializeTask, findSuitableTask, - RnvTaskFn, generatePlatformAssetsRuntimeConfig, RnvTask, generateLocalJsonSchemas, @@ -38,10 +36,11 @@ import { configureFonts } from '@rnv/sdk-utils'; const checkIsRenativeProject = async () => { const c = getContext(); - if (!c.paths.project.configExists) { + const { paths } = c; + if (!paths.project.configExists) { return Promise.reject( `This directory is not ReNative project. Project config ${chalk().bold( - c.paths.project.config + paths.project.config )} is missing!. You can create new project with ${chalk().bold('rnv new')}` ); } @@ -50,104 +49,110 @@ const checkIsRenativeProject = async () => { const configurePlatformBuilds = async () => { const c = getContext(); - if (c.paths.project.builds.dir && !fsExistsSync(c.paths.project.builds.dir)) { - logInfo(`Creating folder ${c.paths.project.builds.dir} ...DONE`); - fsMkdirSync(c.paths.project.builds.dir); + const { paths } = c; + if (paths.project.builds.dir && !fsExistsSync(paths.project.builds.dir)) { + logInfo(`Creating folder ${paths.project.builds.dir} ...DONE`); + fsMkdirSync(paths.project.builds.dir); } }; -const fn: RnvTaskFn = async (c, parentTask, originTask) => { - logTask('taskProjectConfigure'); - - await configurePlatformBuilds(); - await checkAndMigrateProject(); - await updateRenativeConfigs(); - await checkIsRenativeProject(); - await generateLocalJsonSchemas(); +const Task: RnvTask = { + description: 'Configure current project', + fn: async ({ ctx, taskName, originTaskName, parentTaskName }) => { + const { paths, runtime, program } = ctx; + if (!paths.project.configExists) { + return Promise.reject(`${RnvTaskName.projectConfigure} not supported outside of renative project`); + } - await executeTask(RnvTaskName.workspaceConfigure, RnvTaskName.projectConfigure, originTask); + await configurePlatformBuilds(); + await checkAndMigrateProject(); + await updateRenativeConfigs(); + await checkIsRenativeProject(); + await generateLocalJsonSchemas(); - if (c.program.opts().only && !!parentTask) { - await configureRuntimeDefaults(); - await executeTask(RnvTaskName.appConfigure, RnvTaskName.projectConfigure, originTask); - await generatePlatformAssetsRuntimeConfig(); - return true; - } + await executeTask({ taskName: RnvTaskName.workspaceConfigure, parentTaskName: taskName, originTaskName }); - await checkIfTemplateConfigured(); - await executeTask(RnvTaskName.install, RnvTaskName.projectConfigure, originTask); - if (originTask !== RnvTaskName.cryptoDecrypt) { - //If we explicitly running rnv crypto decrypt there is no need to check crypto - await checkCrypto(parentTask, originTask); - } + if (program.opts().only && !!parentTaskName) { + await configureRuntimeDefaults(); + await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); - await configureRuntimeDefaults(); + await generatePlatformAssetsRuntimeConfig(); + return true; + } - if (originTask !== RnvTaskName.templateApply) { - if ((c.runtime.requiresBootstrap || !isTemplateInstalled()) && !c.buildConfig?.isTemplate) { - await applyTemplate(); - // We'll have to install the template first and reset current engine - logInfo('Your template has been bootstraped. Command reset is required. RESTRATING...DONE'); + await checkIfTemplateConfigured(); + await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); - const taskInstance = await findSuitableTask(); - c.runtime.requiresBootstrap = false; - if (taskInstance?.task) { - return initializeTask(taskInstance); - } + if (originTaskName !== RnvTaskName.cryptoDecrypt) { + //If we explicitly running rnv crypto decrypt there is no need to check crypto + await checkCrypto(parentTaskName, originTaskName); } - await applyTemplate(); - // We need to ensure appConfigs are populated from template before proceeding further - await configureTemplateFiles(); - await configureRuntimeDefaults(); - await executeTask(RnvTaskName.install, RnvTaskName.projectConfigure, originTask); - await executeTask(RnvTaskName.appConfigure, RnvTaskName.projectConfigure, originTask); - // IMPORTANT: configurePlugins must run after appConfig present to ensure merge of all configs/plugins - await versionCheck(c); - await configureEngines(c); - await resolvePluginDependants(); - await configurePlugins(); await configureRuntimeDefaults(); - if (!c.runtime.disableReset) { - if (c.program.opts().resetHard) { - logInfo( - `You passed ${chalk().bold('-R, --resetHard')} argument. "${chalk().bold( - './platformAssets' - )}" will be cleaned up first` - ); - await cleanPlaformAssets(); - } else if (c.program.opts().resetAssets) { - logInfo( - `You passed ${chalk().bold('-a, --resetAssets')} argument. "${chalk().bold( - './platformAssets' - )}" will be cleaned up first` - ); - await cleanPlaformAssets(); + + if (originTaskName !== RnvTaskName.templateApply) { + if ((runtime.requiresBootstrap || !isTemplateInstalled()) && !ctx.buildConfig?.isTemplate) { + await applyTemplate(); + // We'll have to install the template first and reset current engine + logInfo('Your template has been bootstraped. Command reset is required. RESTRATING...DONE'); + + const taskInstance = await findSuitableTask(); + runtime.requiresBootstrap = false; + if (taskInstance?.task) { + return initializeTask(taskInstance); + } + } + await applyTemplate(); + // We need to ensure appConfigs are populated from template before proceeding further + await configureTemplateFiles(); + await configureRuntimeDefaults(); + await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); + + await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); + + // IMPORTANT: configurePlugins must run after appConfig present to ensure merge of all configs/plugins + await versionCheck(ctx); + await configureEngines(ctx); + await resolvePluginDependants(); + await configurePlugins(); + + await configureRuntimeDefaults(); + if (!runtime.disableReset) { + if (program.opts().resetHard) { + logInfo( + `You passed ${chalk().bold('-R, --resetHard')} argument. "${chalk().bold( + './platformAssets' + )}" will be cleaned up first` + ); + await cleanPlaformAssets(); + } else if (program.opts().resetAssets) { + logInfo( + `You passed ${chalk().bold('-a, --resetAssets')} argument. "${chalk().bold( + './platformAssets' + )}" will be cleaned up first` + ); + await cleanPlaformAssets(); + } } - } - await copyRuntimeAssets(); - // Moved this up stream to ensure all configs are ready before copyRuntimeAssets - // await configureTemplateFiles(); + await copyRuntimeAssets(); + // Moved this up stream to ensure all configs are ready before copyRuntimeAssets + // await configureTemplateFiles(); - if (!c.buildConfig.platforms) { - await updateRenativeConfigs(); + if (!ctx.buildConfig.platforms) { + await updateRenativeConfigs(); + } + await generatePlatformAssetsRuntimeConfig(); + await overrideTemplatePlugins(); + // NOTE: this is needed to ensure missing rnv plugin sub-deps are caught + await checkForPluginDependencies(async () => { + await installPackageDependenciesAndPlugins(); + }); + await configureFonts(); } - await generatePlatformAssetsRuntimeConfig(); - await overrideTemplatePlugins(); - // NOTE: this is needed to ensure missing rnv plugin sub-deps are caught - await checkForPluginDependencies(async () => { - await installPackageDependenciesAndPlugins(); - }); - await configureFonts(); - } - return true; -}; - -const Task: RnvTask = { - description: 'Configure current project', - fn: async () => {}, + return true; + }, task: RnvTaskName.projectConfigure, }; diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index 6919d57ada..29b24b1941 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -1,7 +1,6 @@ import path from 'path'; import fs from 'fs'; import { - logTask, logInfo, logToSummary, upgradeProjectDependencies, @@ -10,7 +9,6 @@ import { listAndSelectNpmVersion, fsExistsSync, readObjectSync, - RnvTaskFn, RnvTask, RnvTaskName, NpmPackageFile, @@ -19,64 +17,64 @@ import { } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskProjectUpgrade'); - const upgradedPaths = []; - if (fsExistsSync(c.paths.project.config)) { - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.projectUpgrade, originTask); - const selectedVersion = await listAndSelectNpmVersion('rnv'); +const Task: RnvTask = { + description: 'Upgrade or downgrade RNV dependencies in your ReNative project', + fn: async ({ ctx, taskName, originTaskName }) => { + const { paths, files } = ctx; + const upgradedPaths = []; + if (fsExistsSync(paths.project.config)) { + await executeTask({ taskName: RnvTaskName.projectConfigure, parentTaskName: taskName, originTaskName }); + const selectedVersion = await listAndSelectNpmVersion('rnv'); - upgradedPaths.push(...upgradeProjectDependencies(selectedVersion)); + upgradedPaths.push(...upgradeProjectDependencies(selectedVersion)); - await installPackageDependenciesAndPlugins(); - } else { - logInfo('Your are running rnv upgrade outside of renative project'); - const packagesPath = path.join(c.paths.project.dir, 'packages'); - if (fsExistsSync(c.paths.project.package) && fsExistsSync(packagesPath)) { - const selectedVersion = await listAndSelectNpmVersion('rnv'); + await installPackageDependenciesAndPlugins(); + } else { + logInfo('Your are running rnv upgrade outside of renative project'); + const packagesPath = path.join(paths.project.dir, 'packages'); + if (fsExistsSync(paths.project.package) && fsExistsSync(packagesPath)) { + const selectedVersion = await listAndSelectNpmVersion('rnv'); - upgradedPaths.push( - ...upgradeDependencies( - c.files.project.package, - c.paths.project.package, - undefined, - null, - selectedVersion - ) - ); + upgradedPaths.push( + ...upgradeDependencies( + files.project.package, + paths.project.package, + undefined, + null, + selectedVersion + ) + ); - const dirs = fs.readdirSync(packagesPath); + const dirs = fs.readdirSync(packagesPath); - dirs.forEach((dir) => { - const dirPath = path.join(packagesPath, dir); - if (fs.statSync(dirPath).isDirectory()) { - const pkgPath = path.join(dirPath, RnvFileName.package); - const rnvPath = path.join(dirPath, RnvFileName.renative); - let pkgFile; - let rnvFile; - if (fsExistsSync(pkgPath)) { - pkgFile = readObjectSync(pkgPath); - } + dirs.forEach((dir) => { + const dirPath = path.join(packagesPath, dir); + if (fs.statSync(dirPath).isDirectory()) { + const pkgPath = path.join(dirPath, RnvFileName.package); + const rnvPath = path.join(dirPath, RnvFileName.renative); + let pkgFile; + let rnvFile; + if (fsExistsSync(pkgPath)) { + pkgFile = readObjectSync(pkgPath); + } - if (fsExistsSync(rnvPath)) { - rnvFile = readObjectSync(rnvPath); + if (fsExistsSync(rnvPath)) { + rnvFile = readObjectSync(rnvPath); + } + if (pkgFile && rnvFile) { + upgradedPaths.push( + ...upgradeDependencies(pkgFile, pkgPath, rnvFile, rnvPath, selectedVersion) + ); + } } - if (pkgFile && rnvFile) { - upgradedPaths.push(...upgradeDependencies(pkgFile, pkgPath, rnvFile, rnvPath, selectedVersion)); - } - } - }); + }); + } } - } - - logToSummary(`Upgraded following files:\n${upgradedPaths.join('\n')}`); - return true; -}; + logToSummary(`Upgraded following files:\n${upgradedPaths.join('\n')}`); -const Task: RnvTask = { - description: 'Upgrade or downgrade RNV dependencies in your ReNative project', - fn: async () => {}, + return true; + }, task: RnvTaskName.projectUpgrade, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index f1740c0757..8e615999f3 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -1,26 +1,22 @@ -import { chalk, logTask, logToSummary, RnvTask, RnvTaskFn, RnvTaskName, writeFileSync } from '@rnv/core'; +import { chalk, logToSummary, RnvTask, RnvTaskName, writeFileSync } from '@rnv/core'; -const fn: RnvTaskFn = async (c) => { - logTask('taskTelemetryDisable'); - - const { config } = c.files.dotRnv; - if (config) { - config.disableTelemetry = true; +const Task: RnvTask = { + description: 'Disables rnv telemetry on your machine', + fn: async ({ ctx }) => { + const { config } = ctx.files.dotRnv; + if (config) { + config.disableTelemetry = true; - writeFileSync(c.paths.dotRnv.config, config); + writeFileSync(ctx.paths.dotRnv.config, config); - logToSummary(` Succesfully ${chalk().red('disabled')} ReNative telemetry on your machine. + logToSummary(` Succesfully ${chalk().red('disabled')} ReNative telemetry on your machine. No data will be collected from your machine. Learn more: https://renative.org/telemetry`); - } + } - return true; -}; - -const Task: RnvTask = { - description: 'Disables rnv telemetry on your machine', - fn: async () => {}, + return true; + }, task: RnvTaskName.telemetryDisable, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index 4437791558..235d72a6e5 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -1,26 +1,22 @@ -import { chalk, logTask, logToSummary, RnvTask, RnvTaskFn, RnvTaskName, writeFileSync } from '@rnv/core'; +import { chalk, logToSummary, RnvTask, RnvTaskName, writeFileSync } from '@rnv/core'; -const fn: RnvTaskFn = async (c) => { - logTask('taskTelemetryEnable'); - - const { config } = c.files.dotRnv; - if (config) { - config.disableTelemetry = false; +const Task: RnvTask = { + description: 'Enables rnv telemetry on your machine', + fn: async ({ ctx }) => { + const { config } = ctx.files.dotRnv; + if (config) { + config.disableTelemetry = false; - writeFileSync(c.paths.dotRnv.config, config); + writeFileSync(ctx.paths.dotRnv.config, config); - logToSummary(` Succesfully ${chalk().green('enabled')} ReNative telemetry on your machine. + logToSummary(` Succesfully ${chalk().green('enabled')} ReNative telemetry on your machine. ReNative telemetry is completely anonymous. Thank you for participating! Learn more: https://renative.org/telemetry `); - } + } - return true; -}; - -const Task: RnvTask = { - description: 'Enables rnv telemetry on your machine', - fn: async () => {}, + return true; + }, task: RnvTaskName.telemetryEnable, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts index fdc2f69636..cc87a6d02d 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts @@ -1,33 +1,29 @@ -import { chalk, logTask, logToSummary, RnvTask, RnvTaskFn, RnvTaskName } from '@rnv/core'; +import { chalk, logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; -const fn: RnvTaskFn = async (c) => { - logTask('taskTelemetryStatus'); - - const disableTelemetry = c.files.dotRnv.config?.disableTelemetry; +const Task: RnvTask = { + description: 'Show current rnv telemetry status on your machine', + fn: async ({ ctx }) => { + const disableTelemetry = ctx.files.dotRnv.config?.disableTelemetry; - if (disableTelemetry) { - logToSummary( - ` Status: ${chalk().red('Disabled')} + if (disableTelemetry) { + logToSummary( + ` Status: ${chalk().red('Disabled')} You have opted-out of ReNative anonymous telemetry program. No data will be collected from your machine. Learn more: https://renative.org/telemetry` - ); - } else { - logToSummary( - ` Status: ${chalk().green('Enabled')} + ); + } else { + logToSummary( + ` Status: ${chalk().green('Enabled')} ReNative telemetry is completely anonymous. Thank you for participating! Learn more: https://renative.org/telemetry ` - ); - } + ); + } - return true; -}; - -const Task: RnvTask = { - description: 'Show current rnv telemetry status on your machine', - fn: async () => {}, + return true; + }, task: RnvTaskName.telemetryStatus, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts index bb92106318..a0d17222be 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts @@ -2,9 +2,7 @@ import { writeFileSync, logTask, generateBuildConfig, - executeTask, RnvContext, - RnvTaskFn, inquirerPrompt, RnvTask, RnvTaskName, @@ -33,28 +31,23 @@ export const _addTemplate = (c: RnvContext, template: string) => { _writeObjectSync(c.paths.project.config, cnf); }; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTemplateAdd'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.templateAdd, originTask); - - const opts = getTemplateOptions(); - - const { template } = await inquirerPrompt({ - type: 'list', - message: 'Pick which template to install', - name: 'template', - choices: opts.keysAsArray, - }); +const Task: RnvTask = { + description: 'Install additional template to the project', + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const opts = getTemplateOptions(); - _addTemplate(c, template); + const { template } = await inquirerPrompt({ + type: 'list', + message: 'Pick which template to install', + name: 'template', + choices: opts.keysAsArray, + }); - return true; -}; + _addTemplate(ctx, template); -const Task: RnvTask = { - description: 'Install additional template to the project', - fn: async () => {}, + return true; + }, task: RnvTaskName.templateAdd, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 4ec51a9cb4..4e941c8a2d 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -1,50 +1,44 @@ import { - logTask, applyTemplate, getInstalledTemplateOptions, executeTask, - RnvTaskFn, inquirerPrompt, RnvTask, RnvTaskName, } from '@rnv/core'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTemplateApply', `template: ${c.program.opts().template}`); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.templateApply, originTask); +const Task: RnvTask = { + description: 'Reset project to specific template', + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx, taskName, originTaskName }) => { + const { buildConfig, program } = ctx; + if (buildConfig?.isTemplate) { + return Promise.reject('Template projects cannot use template apply command'); + } - if (c.buildConfig?.isTemplate) { - return Promise.reject('Template projects cannot use template apply command'); - } + if (program.opts().template) { + await applyTemplate(program.opts().template); + if (program.opts().appConfigID) { + await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); + } - if (c.program.opts().template) { - await applyTemplate(c.program.opts().template); - if (c.program.opts().appConfigID) { - await executeTask(RnvTaskName.appConfigure, RnvTaskName.templateApply, originTask); + return true; + } + const opts = await getInstalledTemplateOptions(); + + const { template } = await inquirerPrompt({ + type: 'list', + message: 'Pick which template to install', + name: 'template', + choices: opts?.keysAsArray, + }); + + await applyTemplate(template); + if (program.opts().appConfigID) { + await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); } - return true; - } - const opts = await getInstalledTemplateOptions(); - - const { template } = await inquirerPrompt({ - type: 'list', - message: 'Pick which template to install', - name: 'template', - choices: opts?.keysAsArray, - }); - - await applyTemplate(template); - if (c.program.opts().appConfigID) { - await executeTask(RnvTaskName.appConfigure, RnvTaskName.templateApply, originTask); - } - return true; -}; - -const Task: RnvTask = { - description: 'Reset project to specific template', - fn: async () => {}, + }, task: RnvTaskName.templateApply, }; diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts index 63f2552bd6..56769c94c6 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateList.ts @@ -1,20 +1,14 @@ -import { logToSummary, logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; +import { logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; import { getTemplateOptions } from '../../templates'; -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskTemplateList'); - - if (c.paths.project.configExists) { - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.templateList, originTask); - } - const opts = getTemplateOptions(!c.paths.project.configExists); - logToSummary(`Templates:\n\n${opts.asString}`); - return true; -}; - const Task: RnvTask = { description: 'Show list of available templates', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const opts = getTemplateOptions(!ctx.paths.project.configExists); + logToSummary(`Templates:\n\n${opts.asString}`); + return true; + }, task: RnvTaskName.templateList, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts index 772d1a5b94..3408b7d27d 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts @@ -1,56 +1,41 @@ import path from 'path'; -import { - inquirerPrompt, - logTask, - createWorkspace, - fsExistsSync, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; - -const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { - logTask('taskWorkspaceAdd'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.workspaceAdd, originTask); - - const { workspace } = await inquirerPrompt({ - name: 'workspace', - type: 'input', - message: 'absolute path to new workspace', - validate: (i: string) => !!i || 'No path provided', - }); - - const workspacePath = path.join(workspace); - - if (fsExistsSync(workspacePath)) { - const { confirm } = await inquirerPrompt({ - name: 'confirm', - type: 'confirm', - message: `Folder ${workspacePath} already exists are you sure you want to override it?`, +import { inquirerPrompt, createWorkspace, fsExistsSync, RnvTask, RnvTaskName } from '@rnv/core'; + +const Task: RnvTask = { + description: 'Add new workspace', + dependsOn: [RnvTaskName.projectConfigure], + fn: async () => { + const { workspace } = await inquirerPrompt({ + name: 'workspace', + type: 'input', + message: 'absolute path to new workspace', + validate: (i: string) => !!i || 'No path provided', }); - if (!confirm) return false; - } - let workspaceID = workspacePath.split('/').pop()?.replace(/@|\./g, '') || 'rnv'; + const workspacePath = path.join(workspace); - const { workspaceIDInput } = await inquirerPrompt({ - name: 'workspaceIDInput', - type: 'input', - message: `ID of the workspace (${workspaceID})`, - }); + if (fsExistsSync(workspacePath)) { + const { confirm } = await inquirerPrompt({ + name: 'confirm', + type: 'confirm', + message: `Folder ${workspacePath} already exists are you sure you want to override it?`, + }); + if (!confirm) return false; + } - workspaceID = workspaceIDInput || workspaceID; - createWorkspace(workspaceID, workspacePath); + let workspaceID = workspacePath.split('/').pop()?.replace(/@|\./g, '') || 'rnv'; - return true; -}; + const { workspaceIDInput } = await inquirerPrompt({ + name: 'workspaceIDInput', + type: 'input', + message: `ID of the workspace (${workspaceID})`, + }); -const Task: RnvTask = { - description: 'Add new workspace', - dependsOn: [RnvTaskName.projectConfigure], - fn: async () => {}, + workspaceID = workspaceIDInput || workspaceID; + createWorkspace(workspaceID, workspacePath); + + return true; + }, task: RnvTaskName.workspaceAdd, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index 8c6628e165..4bb00f7c37 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -6,84 +6,79 @@ import { fsExistsSync, fsReadFileSync, chalk, - logTask, logWarning, logDebug, logInfo, - RnvTaskFn, RnvTask, RnvTaskName, RnvFileName, } from '@rnv/core'; import { writeFileSync } from 'fs'; -const fn: RnvTaskFn = async (c) => { - logTask('taskWorkspaceConfigure'); - - // Check globalConfig Dir - if (fsExistsSync(c.paths.workspace.dir)) { - logDebug(`${c.paths.workspace.dir} folder exists!`); - } else { - logInfo(`${c.paths.workspace.dir} folder missing! Creating one for you...`); - mkdirSync(c.paths.workspace.dir); - } - - // Check globalConfig - if (fsExistsSync(c.paths.workspace.config)) { - logDebug(`${c.paths.workspace.dir}/${RnvFileName.renative} file exists!`); - } else { - const oldGlobalConfigPath = path.join(c.paths.workspace.dir, 'config.json'); - if (fsExistsSync(oldGlobalConfigPath)) { - logWarning('Found old version of your config. will copy it to new renative.json config'); - copyFileSync(oldGlobalConfigPath, c.paths.workspace.config); +const Task: RnvTask = { + description: 'Preconfigures your current workspace defined via "workspaceID" prop in renative config file', + fn: async ({ ctx }) => { + const { paths, files } = ctx; + // Check globalConfig Dir + if (fsExistsSync(paths.workspace.dir)) { + logDebug(`${paths.workspace.dir} folder exists!`); } else { - logInfo(`${c.paths.workspace.dir}/${RnvFileName.renative} file missing! Creating one for you...`); - writeFileSync(c.paths.workspace.config, '{}'); + logInfo(`${paths.workspace.dir} folder missing! Creating one for you...`); + mkdirSync(paths.workspace.dir); } - } - - if (fsExistsSync(c.paths.workspace.config)) { - c.files.workspace.config = JSON.parse(fsReadFileSync(c.paths.workspace.config).toString()); - if (c.files.workspace.config?.appConfigsPath) { - if (!fsExistsSync(c.files.workspace.config.appConfigsPath)) { - logWarning( - `Your custom global appConfig is pointing to ${chalk().bold( - c.files.workspace.config.appConfigsPath - )} which doesn't exist! Make sure you create one in that location` - ); + // Check globalConfig + if (fsExistsSync(paths.workspace.config)) { + logDebug(`${paths.workspace.dir}/${RnvFileName.renative} file exists!`); + } else { + const oldGlobalConfigPath = path.join(paths.workspace.dir, 'config.json'); + if (fsExistsSync(oldGlobalConfigPath)) { + logWarning('Found old version of your config. will copy it to new renative.json config'); + copyFileSync(oldGlobalConfigPath, paths.workspace.config); } else { - logInfo( - `Found custom appConfing location pointing to ${chalk().bold( - c.files.workspace.config.appConfigsPath - )}. ReNativewill now swith to that location!` - ); - c.paths.project.appConfigsDir = c.files.workspace.config.appConfigsPath; + logInfo(`${paths.workspace.dir}/${RnvFileName.renative} file missing! Creating one for you...`); + writeFileSync(paths.workspace.config, '{}'); } } - // Check config sanity - if (c.files.workspace.config?.defaultTargets === undefined) { - logWarning( - `You're missing defaultTargets in your config ${chalk().bold( - c.paths.workspace.config - )}. Let's add them!` - ); + if (fsExistsSync(paths.workspace.config)) { + files.workspace.config = JSON.parse(fsReadFileSync(paths.workspace.config).toString()); - const newConfig = { - ...c.files.workspace.config, - defaultTargets: {}, - }; - fsWriteFileSync(c.paths.workspace.config, JSON.stringify(newConfig, null, 2)); - } - } + if (files.workspace.config?.appConfigsPath) { + if (!fsExistsSync(files.workspace.config.appConfigsPath)) { + logWarning( + `Your custom global appConfig is pointing to ${chalk().bold( + files.workspace.config.appConfigsPath + )} which doesn't exist! Make sure you create one in that location` + ); + } else { + logInfo( + `Found custom appConfing location pointing to ${chalk().bold( + files.workspace.config.appConfigsPath + )}. ReNativewill now swith to that location!` + ); + paths.project.appConfigsDir = files.workspace.config.appConfigsPath; + } + } - return true; -}; + // Check config sanity + if (files.workspace.config?.defaultTargets === undefined) { + logWarning( + `You're missing defaultTargets in your config ${chalk().bold( + paths.workspace.config + )}. Let's add them!` + ); -const Task: RnvTask = { - description: 'Preconfigures your current workspace defined via "workspaceID" prop in renative config file', - fn: async () => {}, + const newConfig = { + ...files.workspace.config, + defaultTargets: {}, + }; + fsWriteFileSync(paths.workspace.config, JSON.stringify(newConfig, null, 2)); + } + } + + return true; + }, task: RnvTaskName.workspaceConfigure, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts index fc8b5f40e1..be59e68cf7 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts @@ -1,40 +1,23 @@ -import { - inquirerPrompt, - logTask, - logRaw, - getWorkspaceConnectionString, - executeTask, - RnvTaskFn, - RnvTask, - RnvTaskName, -} from '@rnv/core'; - -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskWorkspaceConnect'); - - if (!c.paths.project.configExists) { - return Promise.reject(`${RnvTaskName.projectConfigure} not supported outside of renative project`); - } - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.workspaceConnect, originTask); - - const cnf = c.files.dotRnv.configWorkspaces; - if (!cnf) return; - - const opts = Object.keys(cnf.workspaces).map((v) => `${v} ${getWorkspaceConnectionString(cnf.workspaces[v])}`); - - const { selectedWS } = await inquirerPrompt({ - type: 'list', - name: 'selectedWS', - message: 'Pick a workspace', - choices: opts, - }); - - logRaw(selectedWS); -}; +import { inquirerPrompt, logRaw, getWorkspaceConnectionString, RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'Connect project with selected workspace', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const cnf = ctx.files.dotRnv.configWorkspaces; + if (!cnf) return; + + const opts = Object.keys(cnf.workspaces).map((v) => `${v} ${getWorkspaceConnectionString(cnf.workspaces[v])}`); + + const { selectedWS } = await inquirerPrompt({ + type: 'list', + name: 'selectedWS', + message: 'Pick a workspace', + choices: opts, + }); + + logRaw(selectedWS); + }, task: RnvTaskName.workspaceConnect, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts index ae18214b65..d55f1de21c 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts @@ -1,28 +1,21 @@ -import { generateOptions, chalk, logTask, logToSummary, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; - -const fn: RnvTaskFn = async (c, _parentTask, originTask) => { - logTask('taskWorkspaceList'); - - if (c.paths.project.configExists) { - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.workspaceList, originTask); - } - - const opts = generateOptions( - c.files.dotRnv.configWorkspaces?.workspaces, - true, - null, - (i, obj, mapping, defaultVal) => { - const isConnected = ''; - return ` [${chalk().grey(i + 1)}]> ${chalk().bold(defaultVal)}${isConnected} \n`; - } - ); - - logToSummary(`Workspaces:\n\n${opts.asString}`); -}; +import { generateOptions, chalk, logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; const Task: RnvTask = { description: 'Show list of all available workspaces', - fn: async () => {}, + dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx }) => { + const opts = generateOptions( + ctx.files.dotRnv.configWorkspaces?.workspaces, + true, + null, + (i, obj, mapping, defaultVal) => { + const isConnected = ''; + return ` [${chalk().grey(i + 1)}]> ${chalk().bold(defaultVal)}${isConnected} \n`; + } + ); + + logToSummary(`Workspaces:\n\n${opts.asString}`); + }, task: RnvTaskName.workspaceList, isGlobalScope: true, }; diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts deleted file mode 100644 index 0b1be3cedc..0000000000 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceUpdate.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { logTask, executeTask, RnvTaskFn, RnvTask, RnvTaskName } from '@rnv/core'; - -const fn: RnvTaskFn = async (_c, _parentTask, originTask) => { - // TODO: taskWorkspaceUpdate - logTask('taskWorkspaceUpdate'); - - await executeTask(RnvTaskName.projectConfigure, RnvTaskName.workspaceUpdate, originTask); - - return true; -}; - -const Task: RnvTask = { - description: 'TODO: unused task', - fn: async () => {}, - task: RnvTaskName.workspaceUpdate, - isGlobalScope: true, - isPrivate: true, -}; - -export default Task; From 6d2be447d1ef7e0628bc9bc144e8beb105e2851f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 01:13:41 +0100 Subject: [PATCH 117/175] task system refactor pt3 --- packages/core/src/projects/bootstrap.ts | 2 +- packages/engine-lightning/src/index.ts | 4 ++-- packages/engine-rn-electron/src/index.ts | 4 ++-- packages/engine-rn-macos/src/index.ts | 4 ++-- packages/engine-rn-next/src/index.ts | 4 ++-- packages/engine-rn-tvos/src/index.ts | 4 ++-- packages/engine-rn-web/src/index.ts | 4 ++-- packages/engine-rn-windows/src/index.ts | 4 ++-- packages/engine-rn/src/index.ts | 4 ++-- packages/integration-docker/src/index.ts | 14 ++++++-------- .../src/tasks/taskSingleCommand.ts | 4 +++- .../src/tasks/taskStarterHello.ts | 4 +++- packages/sdk-react-native/src/common.ts | 6 +++--- 13 files changed, 32 insertions(+), 30 deletions(-) diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts index f3d3a466b4..22359ab522 100644 --- a/packages/core/src/projects/bootstrap.ts +++ b/packages/core/src/projects/bootstrap.ts @@ -158,7 +158,7 @@ export const checkAndBootstrapIfRequired = async () => { await parseRenativeConfigs(); await configureTemplateFiles(); - await configureEntryPoint(c.platform); + await configureEntryPoint(); // await applyTemplate(c); // copyFolderContentsRecursiveSync(templatePath, c.paths.project.dir); diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index c24793690a..e801a78cbc 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -1,4 +1,4 @@ -import { RnvEngine, generateEngineTasks, generateEngineExtensions } from '@rnv/core'; +import { RnvEngine, generateEngineExtensions, generateRnvTaskMap } from '@rnv/core'; import { Tasks as TasksSdkWebOS } from '@rnv/sdk-webos'; import { Tasks as TasksSdkTizen } from '@rnv/sdk-tizen'; import taskBuild from './tasks/taskBuild'; @@ -8,7 +8,7 @@ import taskRun from './tasks/taskRun'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen], CNF), + tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen], CNF), config: CNF, projectDirName: 'project', serverDirName: 'server', diff --git a/packages/engine-rn-electron/src/index.ts b/packages/engine-rn-electron/src/index.ts index d0e35b7094..70496698b8 100644 --- a/packages/engine-rn-electron/src/index.ts +++ b/packages/engine-rn-electron/src/index.ts @@ -1,4 +1,4 @@ -import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; //@ts-ignore import CNF from '../renative.engine.json'; import taskBuild from './tasks/taskBuild'; @@ -9,7 +9,7 @@ import taskStart from './tasks/taskStart'; import { withRNVBabel } from './adapter'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), + tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), config: CNF, projectDirName: '', serverDirName: '', diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index 73375fd77c..d385511bcd 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -1,4 +1,4 @@ -import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; @@ -8,7 +8,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([...TasksSdkApple, ...TasksSdkReactNative], CNF), + tasks: generateRnvTaskMap([...TasksSdkApple, ...TasksSdkReactNative], CNF), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-next/src/index.ts b/packages/engine-rn-next/src/index.ts index f90e6ccb3a..bcfd651797 100644 --- a/packages/engine-rn-next/src/index.ts +++ b/packages/engine-rn-next/src/index.ts @@ -1,4 +1,4 @@ -import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; import { withRNVNext } from './adapters/nextAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import taskRun from './tasks/taskRun'; @@ -10,7 +10,7 @@ import taskExport from './tasks/taskExport'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), + tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), config: CNF, projectDirName: '', runtimeExtraProps: {}, diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 715748f412..349af9bd11 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,4 +1,4 @@ -import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; @@ -9,7 +9,7 @@ import { withRNVRNConfig } from '@rnv/sdk-react-native'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), + tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', diff --git a/packages/engine-rn-web/src/index.ts b/packages/engine-rn-web/src/index.ts index 55a6125494..c10fe4d31f 100644 --- a/packages/engine-rn-web/src/index.ts +++ b/packages/engine-rn-web/src/index.ts @@ -1,4 +1,4 @@ -import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; import { Tasks as TasksSdkWebOS } from '@rnv/sdk-webos'; import { Tasks as TasksSdkTizen } from '@rnv/sdk-tizen'; import { withRNVBabel, withRNVWebpack } from './adapter'; @@ -11,7 +11,7 @@ import taskStart from './tasks/taskStart'; import taskDebug from './tasks/taskDebug'; const Engine: RnvEngine = { - tasks: generateEngineTasks( + tasks: generateRnvTaskMap( [taskRun, taskBuild, taskConfigure, taskStart, taskDebug, ...TasksSdkWebOS, ...TasksSdkTizen], CNF ), diff --git a/packages/engine-rn-windows/src/index.ts b/packages/engine-rn-windows/src/index.ts index f453bc1b7c..1179b033d9 100644 --- a/packages/engine-rn-windows/src/index.ts +++ b/packages/engine-rn-windows/src/index.ts @@ -1,4 +1,4 @@ -import { RnvEngine, generateEngineTasks, generateEngineExtensions } from '@rnv/core'; +import { RnvEngine, generateRnvTaskMap, generateEngineExtensions } from '@rnv/core'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import taskBuild from './tasks/taskBuild'; @@ -11,7 +11,7 @@ import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-na import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks( + tasks: generateRnvTaskMap( [taskRun, taskPackage, taskBuild, taskConfigure, taskExport, ...TasksSdkReactNative], CNF ), diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index 9a00d4202e..acc29a4678 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -1,4 +1,4 @@ -import { generateEngineExtensions, generateEngineTasks, RnvEngine } from '@rnv/core'; +import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-native'; @@ -8,7 +8,7 @@ import { withRNVBabel } from './adapters/babelAdapter'; import CNF from '../renative.engine.json'; const Engine: RnvEngine = { - tasks: generateEngineTasks([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), + tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/integration-docker/src/index.ts b/packages/integration-docker/src/index.ts index 153b75c451..87ee310f87 100644 --- a/packages/integration-docker/src/index.ts +++ b/packages/integration-docker/src/index.ts @@ -1,16 +1,14 @@ import taskDockerDeploy from './tasks/taskDockerDeploy'; import taskDockerExport from './tasks/taskDockerExport'; +import { RnvIntegration, generateRnvTaskMap } from '@rnv/core'; //@ts-ignore -import config from '../renative.integration.json'; -import { RnvIntegration } from '@rnv/core'; - -const TASKS = [taskDockerExport, taskDockerDeploy]; - -const getTasks = () => TASKS; +import CNF from '../renative.integration.json'; +//@ts-ignore +import PKG from '../package.json'; const Integration: RnvIntegration = { - getTasks, - config, + tasks: generateRnvTaskMap([taskDockerExport, taskDockerDeploy], PKG), + config: CNF, }; export default Integration; diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index e7d73a4441..1e5de8051a 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -3,8 +3,10 @@ import { logSuccess, RnvTask } from '@rnv/core'; const Task: RnvTask = { description: 'Prints hello message', fn: async ({ ctx }) => { + //TODO: switch to typed options once Context generics are supported + const opts: any = ctx.program.opts(); logSuccess(`Hello from Integration Starter single command! - --my-opt: "${ctx.program.opts().myOpt}"`); + --my-opt: "${opts.myOpt}"`); }, task: 'starter-single-command', options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index e72b357605..ea698e3d5e 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -3,8 +3,10 @@ import { logSuccess, RnvTask } from '@rnv/core'; const Task: RnvTask = { description: 'Prints hello message', fn: async ({ ctx }) => { + //TODO: switch to typed options once Context generics are supported + const opts: any = ctx.program.opts(); logSuccess(`Hello from Integration Starter! ---my-opt: "${ctx.program.opts().myOpt}"`); +--my-opt: "${opts.myOpt}"`); }, task: 'starter hello', options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], diff --git a/packages/sdk-react-native/src/common.ts b/packages/sdk-react-native/src/common.ts index 63920fd8e1..6e8f5c45a7 100644 --- a/packages/sdk-react-native/src/common.ts +++ b/packages/sdk-react-native/src/common.ts @@ -16,7 +16,7 @@ import { confirmActiveBundler } from '@rnv/sdk-utils'; let keepRNVRunning = false; -export const startBundlerIfRequired = async (parentTask: string, originTask?: string) => { +export const startBundlerIfRequired = async (parentTaskName: string, originTaskName?: string) => { logDefault('startBundlerIfRequired'); const bundleAssets = getConfigProp('bundleAssets'); if (bundleAssets === true) return; @@ -24,14 +24,14 @@ export const startBundlerIfRequired = async (parentTask: string, originTask?: st const isRunning = await isBundlerActive(); if (!isRunning) { // _taskStart(c, parentTask, originTask); - await executeTask(RnvTaskName.start, parentTask, originTask); + await executeTask({ taskName: RnvTaskName.start, parentTaskName, originTaskName }); keepRNVRunning = true; await waitForBundler(); } else { const resetCompleted = await confirmActiveBundler(); if (resetCompleted) { - await executeTask(RnvTaskName.start, parentTask, originTask); + await executeTask({ taskName: RnvTaskName.start, parentTaskName, originTaskName }); keepRNVRunning = true; await waitForBundler(); From cb87521c6fdf62266941f9d4f4638848cefd30f5 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 03:25:43 +0100 Subject: [PATCH 118/175] engine reg fixes --- packages/core/src/engines/index.ts | 13 ++++++ packages/core/src/integrations/index.ts | 2 + packages/core/src/runner.ts | 41 ++++++++++++++++--- .../core/src/schema/configFiles/engine.ts | 1 + .../src/schema/configFiles/integration.ts | 4 +- packages/core/src/tasks/index.ts | 30 ++++++++------ packages/core/src/tasks/taskRegistry.ts | 6 ++- packages/engine-core/src/index.ts | 1 + .../engine-lightning/renative.engine.json | 1 + packages/engine-lightning/src/index.ts | 4 +- .../engine-rn-electron/renative.engine.json | 1 + packages/engine-rn-electron/src/index.ts | 5 ++- packages/engine-rn-macos/renative.engine.json | 1 + packages/engine-rn-macos/src/index.ts | 4 +- packages/engine-rn-next/renative.engine.json | 1 + packages/engine-rn-next/src/index.ts | 4 +- packages/engine-rn-tvos/renative.engine.json | 1 + packages/engine-rn-tvos/src/index.ts | 4 +- packages/engine-rn-web/renative.engine.json | 1 + packages/engine-rn-web/src/index.ts | 4 +- .../engine-rn-windows/renative.engine.json | 1 + packages/engine-rn-windows/src/index.ts | 4 +- packages/engine-rn/renative.engine.json | 1 + packages/engine-rn/src/index.ts | 4 +- packages/engine-roku/renative.engine.json | 1 + .../renative.integration.json | 2 +- .../renative.integration.json | 2 +- 27 files changed, 115 insertions(+), 29 deletions(-) diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 814e135474..67c777979f 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -15,12 +15,14 @@ import { checkAndCreateProjectPackage } from '../projects/package'; import { getEngineTemplateByPlatform } from '../configs/engines'; import { ConfigFileEngine } from '../schema/configFiles/types'; import { getConfigProp } from '../context/contextProps'; +import { registerRnvTasks } from '../tasks/taskRegistry'; // const ENGINE_CORE = 'engine-core'; export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, engConfig?: RnvEngineTemplate) => { const c = getContext(); logDefault(`registerEngine:${engine.config.id}`); + console.log('DJDDJDJK', engine.config.id); c.runtime.enginesById[engine.config.id] = engine; @@ -34,6 +36,7 @@ export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, ); } _registerEnginePlatform(c, platform, engine); + registerRnvTasks(engine.tasks); }; const _registerEnginePlatform = (c: RnvContext, platform?: RnvPlatform, engine?: RnvEngine) => { @@ -356,6 +359,8 @@ export const loadEngines = async (failOnMissingDeps?: boolean): Promise logDefault('loadEngines'); const c = getContext(); + console.log('APAPAPAPAAPAP', c.paths.project.config); + if (!fsExistsSync(c.paths.project.config)) return true; const filteredEngines: Record = _getFilteredEngines(c); @@ -363,6 +368,7 @@ export const loadEngines = async (failOnMissingDeps?: boolean): Promise const readyEngines: Array = []; const engineConfigs: Array = []; // if (filteredEngines) { + Object.keys(filteredEngines).forEach((k) => { const engineRootPath = doResolve(k); const configPath = engineRootPath ? path.join(engineRootPath, 'renative.engine.json') : null; @@ -471,6 +477,7 @@ const _resolvePkgPath = (c: RnvContext, packageName: string) => { const _registerPlatformEngine = async (c: RnvContext, platform: RnvPlatform | boolean): Promise => { // Only register active platform engine to be faster + console.log('SJJSSJSJSJ', platform); if (platform === true || !platform) return; const selectedEngineTemplate = getEngineTemplateByPlatform(platform); @@ -506,6 +513,12 @@ export const getEngineRunnerByPlatform = (platform: RnvPlatform, ignoreMissingEr return selectedEngine; }; +export const getEngineRunnerByOwnerID = (task: RnvTask) => { + const ctx = getContext(); + const engine = ctx.runtime.enginesByIndex.find((v) => v.config.packageName === task.ownerID); + return engine; +}; + // const findTasksByTaskName = (taskName: string, tasks: RnvTaskMap) => { // const result: RnvTask[] = []; // const task = Object.values(tasks).forEach((v) => { diff --git a/packages/core/src/integrations/index.ts b/packages/core/src/integrations/index.ts index 6051ecfdcf..c6449d4a73 100644 --- a/packages/core/src/integrations/index.ts +++ b/packages/core/src/integrations/index.ts @@ -3,6 +3,7 @@ import { fsExistsSync } from '../system/fs'; import { logDefault, logWarning } from '../logger'; import { RnvIntegration } from './types'; import { getContext } from '../context/provider'; +import { registerRnvTasks } from '../tasks/taskRegistry'; export const loadIntegrations = async () => { logDefault('loadIntegrations'); @@ -21,6 +22,7 @@ export const loadIntegrations = async () => { const instance: RnvIntegration = require(intPath)?.default; if (instance) { c.runtime.integrationsByIndex.push(instance); + registerRnvTasks(instance.tasks); // instance.getTasks().forEach((task) => { // registerCustomTask(task); // }); diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index ec258ea7a9..e1d346a994 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -1,5 +1,5 @@ import { getContext } from './context/provider'; -import { loadEngines, registerMissingPlatformEngines } from './engines'; +import { loadEngines } from './engines'; import { loadIntegrations } from './integrations'; import { checkAndMigrateProject } from './migrator'; import { configureRuntimeDefaults } from './context/runtime'; @@ -9,6 +9,8 @@ import { checkAndBootstrapIfRequired } from './projects/bootstrap'; import { loadDefaultConfigTemplates } from './configs'; import { getApi } from './api/provider'; import { RnvTask } from './tasks/types'; +import { inquirerPrompt } from './api'; +import { getTaskNameFromCommand } from './tasks/taskHelpers'; export const exitRnvCore = async (code: number) => { const ctx = getContext(); @@ -45,19 +47,48 @@ export const executeRnvCore = async () => { return initializeTask(initTask); } + // Next we load all integrations and see if there is a task that matches await loadIntegrations(); + initTask = await findSuitableTask(); + if (initTask) { + return initializeTask(initTask); + } + + // Engines are bound to platform + // If we don't know the platform yet we need to load all engines + c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; + if (!c.platform) { + const taskName = getTaskNameFromCommand(); + const platforms = c.runtime.availablePlatforms; + if (platforms) { + if (platforms.length === 1) { + c.platform = platforms[0]; + } else { + const { platform } = await inquirerPrompt({ + type: 'list', + name: 'platform', + message: `Pick a platform for ${taskName}`, + choices: platforms, + }); + c.platform = platform; + } + } + } + console.log('KKFSSLSSLSLSL', c.platform); + const result = await loadEngines(); // If false make sure we reload configs as it means it's freshly installed if (!result) { await updateRenativeConfigs(); } + // for root rnv we simply load all engines upfront - const { configExists } = c.paths.project; - if (!c.command && configExists) { - await registerMissingPlatformEngines(); - } + // const { configExists } = c.paths.project; + // if (!c.command && configExists) { + // } initTask = await findSuitableTask(); + console.log('DKDKDKDKDK', initTask); return initializeTask(initTask); // if (c.command && !taskInstance?.ignoreEngines) { diff --git a/packages/core/src/schema/configFiles/engine.ts b/packages/core/src/schema/configFiles/engine.ts index f3aec6c445..fd6d529218 100644 --- a/packages/core/src/schema/configFiles/engine.ts +++ b/packages/core/src/schema/configFiles/engine.ts @@ -34,6 +34,7 @@ const Extends = z.string().describe('ID of engine to extend. Not being used yet' export const RootEngineSchema = z.object({ custom: z.optional(Ext), id: Id, + packageName: z.string(), engineExtension: EngineExtension, extends: z.optional(Extends), overview: Overview, diff --git a/packages/core/src/schema/configFiles/integration.ts b/packages/core/src/schema/configFiles/integration.ts index 82fdedc8f7..f0d52191e1 100644 --- a/packages/core/src/schema/configFiles/integration.ts +++ b/packages/core/src/schema/configFiles/integration.ts @@ -1,5 +1,7 @@ import { z } from 'zod'; -export const RootIntegrationSchema = z.object({}); +export const RootIntegrationSchema = z.object({ + packageName: z.string(), +}); export type _RootIntegrationSchemaType = z.infer; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts index 3c308b676e..dca43b47a4 100644 --- a/packages/core/src/tasks/index.ts +++ b/packages/core/src/tasks/index.ts @@ -8,6 +8,7 @@ import { getContext } from '../context/provider'; import { RnvTaskName } from '../enums/taskName'; import { getRegisteredTasks } from './taskRegistry'; import { generateStringFromTaskOption, getTaskNameFromCommand, shouldSkipTask } from './taskHelpers'; +import { getEngineRunnerByOwnerID } from '../engines'; let executedTasks: Record = {}; const TASK_LIMIT = 20; @@ -37,6 +38,7 @@ export const executeTask = async (opts: { const taskInstance = await extractSingleExecutableTask(availableTasks); return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); } + const availableTasks = _findTasksByTaskName(taskName); const taskInstance = await extractSingleExecutableTask(availableTasks); return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); @@ -52,9 +54,8 @@ export const findSuitableTask = async (): Promise => { throw new Error('TODO interactive selection offer all tasks'); } const suitableTasks = _findTasksByTaskName(taskName); - console.log('SUITABLE_TASKS', suitableTasks); - const taskInstance = extractSingleExecutableTask(suitableTasks); + const taskInstance = await extractSingleExecutableTask(suitableTasks); return taskInstance; }; @@ -67,11 +68,12 @@ export const initializeTask = async (taskInstance: RnvTask | undefined) => { const c = getContext(); _populateExtraParameters(c, taskInstance); - logInfo( - `Current engine: ${chalk().bold(c.runtime.engine?.config.id)} ${chalk().grey( - `(${c.runtime.engine?.rootPath})` - )}` - ); + c.runtime.engine = getEngineRunnerByOwnerID(taskInstance); + + logInfo(`Current engine: ${chalk().bold(taskInstance.ownerID)} ${chalk().grey(`(${c.runtime.engine?.rootPath})`)}`); + // logInfo( + // `Current engine: ${chalk().bold(c.runtime.engine?.config)} ${chalk().grey(`(${c.runtime.engine?.rootPath})`)}` + // ); c.runtime.task = task; executedTasks = {}; @@ -97,14 +99,17 @@ const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { const _findTasksByTaskName = (taskName: string) => { const result: RnvTask[] = []; - Object.values(getRegisteredTasks()).forEach((v) => { - const plat = getContext().platform; + const ctx = getContext(); + const tasks = getRegisteredTasks(); + Object.values(tasks).forEach((v) => { + const plat = ctx.platform; if (v.platforms && plat) { if (!v.platforms.includes(plat)) { // If we found a task with platform restriction and it does not match current platform we skip it return; } } + if (v.task === taskName) { result.push(v); } @@ -113,7 +118,7 @@ const _findTasksByTaskName = (taskName: string) => { }; const _executeTaskInstance = async (opts: { - taskInstance: RnvTask; + taskInstance?: RnvTask; parentTaskName?: string; originTaskName?: string; isFirstTask?: boolean; @@ -122,7 +127,7 @@ const _executeTaskInstance = async (opts: { const { taskInstance, parentTaskName, originTaskName, isFirstTask, isOptional } = opts; const c = getContext(); if (!taskInstance) { - if (!isOptional) { + if (isOptional) { return; } throw new Error(`Task Instance is undefined`); @@ -204,7 +209,8 @@ const extractSingleExecutableTask = async (suitableTasks: RnvTask[]) => { throw new Error('TODO interactive selection multiple tasks'); } // Found no tasks - throw new Error('TODO found no tasks'); + // throw new Error('TODO found no tasks'); + return undefined; }; ////////=======================//////// diff --git a/packages/core/src/tasks/taskRegistry.ts b/packages/core/src/tasks/taskRegistry.ts index 18c7aa33f2..19f1d9a1d5 100644 --- a/packages/core/src/tasks/taskRegistry.ts +++ b/packages/core/src/tasks/taskRegistry.ts @@ -2,7 +2,11 @@ import { RnvTask, RnvTaskMap } from './types'; const REGISTERED_TASKS: RnvTaskMap = {}; -export const registerRnvTask = async (taskInstance: RnvTask) => { +export const registerRnvTasks = async (tasks: RnvTaskMap) => { + Object.values(tasks).forEach((task) => registerRnvTask(task)); +}; + +const registerRnvTask = async (taskInstance: RnvTask) => { if (!taskInstance.key) { throw new Error('Task key is required'); } diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index 2980e4e80b..d41c771134 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -48,6 +48,7 @@ const CNF = { npm: {}, engineExtension: 'core', overview: '', + packageName: '@rnv/engine-core', }; const Engine: RnvEngine = { diff --git a/packages/engine-lightning/renative.engine.json b/packages/engine-lightning/renative.engine.json index dafbbff582..1c704911e5 100644 --- a/packages/engine-lightning/renative.engine.json +++ b/packages/engine-lightning/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-lightning", + "packageName": "@rnv/engine-lightning", "overview": "ReNative Engine to build lightning based apps.", "plugins": { "@lightningjs/sdk": "source:rnv", diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index e801a78cbc..54c88e9bdd 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -6,9 +6,11 @@ import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; //@ts-ignore import CNF from '../renative.engine.json'; +//@ts-ignore +import PKG from '../package.json'; const Engine: RnvEngine = { - tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen], CNF), + tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen], PKG), config: CNF, projectDirName: 'project', serverDirName: 'server', diff --git a/packages/engine-rn-electron/renative.engine.json b/packages/engine-rn-electron/renative.engine.json index 10fa56c4bf..4fbaa59a02 100644 --- a/packages/engine-rn-electron/renative.engine.json +++ b/packages/engine-rn-electron/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn-electron", + "packageName": "@rnv/engine-rn-electron", "engineExtension": "rne", "overview": "React native based engine with web transpiler provided by react-native-web and native desktop wrapper provided by electron", "plugins": { diff --git a/packages/engine-rn-electron/src/index.ts b/packages/engine-rn-electron/src/index.ts index 70496698b8..ca5c30ac1b 100644 --- a/packages/engine-rn-electron/src/index.ts +++ b/packages/engine-rn-electron/src/index.ts @@ -8,8 +8,11 @@ import taskRun from './tasks/taskRun'; import taskStart from './tasks/taskStart'; import { withRNVBabel } from './adapter'; +//@ts-ignore +import PKG from '../package.json'; + const Engine: RnvEngine = { - tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), + tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], PKG), config: CNF, projectDirName: '', serverDirName: '', diff --git a/packages/engine-rn-macos/renative.engine.json b/packages/engine-rn-macos/renative.engine.json index 04a93fff55..80816f4311 100644 --- a/packages/engine-rn-macos/renative.engine.json +++ b/packages/engine-rn-macos/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn-macos", + "packageName": "@rnv/engine-rn-macos", "engineExtension": "rnm", "overview": "React native based engine with react-native-macos extension which adds support for macOS platform.", "plugins": { diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index d385511bcd..5bf56fb361 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -6,9 +6,11 @@ import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; //@ts-ignore import CNF from '../renative.engine.json'; +//@ts-ignore +import PKG from '../package.json'; const Engine: RnvEngine = { - tasks: generateRnvTaskMap([...TasksSdkApple, ...TasksSdkReactNative], CNF), + tasks: generateRnvTaskMap([...TasksSdkApple, ...TasksSdkReactNative], PKG), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-rn-next/renative.engine.json b/packages/engine-rn-next/renative.engine.json index d66bacd7d7..c7c5f5e159 100644 --- a/packages/engine-rn-next/renative.engine.json +++ b/packages/engine-rn-next/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn-next", + "packageName": "@rnv/engine-rn-next", "engineExtension": "rnx", "overview": "React native based engine with web transpiler provided by react-native-web and render by nextjs", "plugins": { diff --git a/packages/engine-rn-next/src/index.ts b/packages/engine-rn-next/src/index.ts index bcfd651797..c2e8d5dce2 100644 --- a/packages/engine-rn-next/src/index.ts +++ b/packages/engine-rn-next/src/index.ts @@ -8,9 +8,11 @@ import taskStart from './tasks/taskStart'; import taskExport from './tasks/taskExport'; //@ts-ignore import CNF from '../renative.engine.json'; +//@ts-ignore +import PKG from '../package.json'; const Engine: RnvEngine = { - tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], CNF), + tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], PKG), config: CNF, projectDirName: '', runtimeExtraProps: {}, diff --git a/packages/engine-rn-tvos/renative.engine.json b/packages/engine-rn-tvos/renative.engine.json index 53f5a92c1e..6a44aace50 100644 --- a/packages/engine-rn-tvos/renative.engine.json +++ b/packages/engine-rn-tvos/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn-tvos", + "packageName": "@rnv/engine-rn-tvos", "engineExtension": "rntvos", "extends": "engine-rn", "overview": "React native based engine with added support for tvOS platform. Runs standard react native apps with native support", diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index 349af9bd11..f19c464457 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -7,9 +7,11 @@ import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; //@ts-ignore import CNF from '../renative.engine.json'; +//@ts-ignore +import PKG from '../package.json'; const Engine: RnvEngine = { - tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), + tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], PKG), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', diff --git a/packages/engine-rn-web/renative.engine.json b/packages/engine-rn-web/renative.engine.json index 874e22a468..7ab7cc87e3 100644 --- a/packages/engine-rn-web/renative.engine.json +++ b/packages/engine-rn-web/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn-web", + "packageName": "@rnv/engine-rn-web", "overview": "React native based engine with web transpiler provided by react-native-web", "plugins": { "react": "source:rnv", diff --git a/packages/engine-rn-web/src/index.ts b/packages/engine-rn-web/src/index.ts index c10fe4d31f..b1dccc6540 100644 --- a/packages/engine-rn-web/src/index.ts +++ b/packages/engine-rn-web/src/index.ts @@ -9,11 +9,13 @@ import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskDebug from './tasks/taskDebug'; +//@ts-ignore +import PKG from '../package.json'; const Engine: RnvEngine = { tasks: generateRnvTaskMap( [taskRun, taskBuild, taskConfigure, taskStart, taskDebug, ...TasksSdkWebOS, ...TasksSdkTizen], - CNF + PKG ), config: CNF, projectDirName: '', diff --git a/packages/engine-rn-windows/renative.engine.json b/packages/engine-rn-windows/renative.engine.json index e6ccfda83c..f978395919 100644 --- a/packages/engine-rn-windows/renative.engine.json +++ b/packages/engine-rn-windows/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn-windows", + "packageName": "@rnv/engine-rn-windows", "engineExtension": "rnwin", "overview": "React native based engine with react-native-windows cli tool", "plugins": { diff --git a/packages/engine-rn-windows/src/index.ts b/packages/engine-rn-windows/src/index.ts index 1179b033d9..7c6cb50013 100644 --- a/packages/engine-rn-windows/src/index.ts +++ b/packages/engine-rn-windows/src/index.ts @@ -9,11 +9,13 @@ import taskRun from './tasks/taskRun'; import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-native'; //@ts-ignore import CNF from '../renative.engine.json'; +//@ts-ignore +import PKG from '../package.json'; const Engine: RnvEngine = { tasks: generateRnvTaskMap( [taskRun, taskPackage, taskBuild, taskConfigure, taskExport, ...TasksSdkReactNative], - CNF + PKG ), config: CNF, projectDirName: '', diff --git a/packages/engine-rn/renative.engine.json b/packages/engine-rn/renative.engine.json index d1fdd130ff..b0612b0913 100644 --- a/packages/engine-rn/renative.engine.json +++ b/packages/engine-rn/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn", + "packageName": "@rnv/engine-rn", "engineExtension": "rn", "overview": "Default react-native based engine. Runs standard react native apps with native support", "plugins": { diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index acc29a4678..0ec1e3573a 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -6,9 +6,11 @@ import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; //@ts-ignore import CNF from '../renative.engine.json'; +//@ts-ignore +import PKG from '../package.json'; const Engine: RnvEngine = { - tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], CNF), + tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], PKG), config: CNF, runtimeExtraProps: { reactNativePackageName: 'react-native', diff --git a/packages/engine-roku/renative.engine.json b/packages/engine-roku/renative.engine.json index d56c8f374e..5f307c819a 100644 --- a/packages/engine-roku/renative.engine.json +++ b/packages/engine-roku/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-roku", + "packageName": "@rnv/engine-roku", "engineExtension": "rk", "overview": "ReNative Roku Engine", "plugins": {}, diff --git a/packages/integration-docker/renative.integration.json b/packages/integration-docker/renative.integration.json index df4ce83ade..322f0939a5 100644 --- a/packages/integration-docker/renative.integration.json +++ b/packages/integration-docker/renative.integration.json @@ -1,5 +1,5 @@ { "$schema": "../../.rnv/schema/rnv.integration.json", "id": "docker", - "npmPackage": "@rnv/integration-docker" + "packageName": "@rnv/integration-docker" } diff --git a/packages/integration-starter/renative.integration.json b/packages/integration-starter/renative.integration.json index 4f566ce229..c16d6679b4 100644 --- a/packages/integration-starter/renative.integration.json +++ b/packages/integration-starter/renative.integration.json @@ -1,5 +1,5 @@ { "$schema": "../../.rnv/schema/rnv.integration.json", "id": "starter", - "npmPackage": "@rnv/integration-starter" + "packageName": "@rnv/integration-starter" } From a8f23e01ae83e3c6c5e8ef52539942fc626905be Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 03:40:14 +0100 Subject: [PATCH 119/175] cleanup, fixes, schema regen --- packages/core/jsonSchema/rnv.app.json | 7 +++++++ packages/core/jsonSchema/rnv.engine.json | 4 ++++ packages/core/jsonSchema/rnv.integration.json | 6 ++++++ packages/core/jsonSchema/rnv.project.json | 11 ++++++---- packages/core/jsonSchema/rnv.templates.json | 9 +++++--- packages/core/jsonSchema/rnv.workspace.json | 9 +++++--- packages/core/src/engines/index.ts | 5 ----- packages/core/src/runner.ts | 2 -- .../src/tasks/hooks/taskHooksRun.ts | 21 ++++++++++++++++--- .../src/tasks/project/taskProjectConfigure.ts | 8 +++---- packages/engine-rn-next/src/tasks/taskRun.ts | 3 ++- 11 files changed, 60 insertions(+), 25 deletions(-) diff --git a/packages/core/jsonSchema/rnv.app.json b/packages/core/jsonSchema/rnv.app.json index de69f008e2..0fb91f99a7 100644 --- a/packages/core/jsonSchema/rnv.app.json +++ b/packages/core/jsonSchema/rnv.app.json @@ -477,6 +477,10 @@ "type": "boolean", "description": "Enables new arch for android. Default: false" }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, "reactNativeEngine": { "type": "string", "enum": [ @@ -957,6 +961,9 @@ "newArchEnabled": { "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/newArchEnabled" }, + "flipperEnabled": { + "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/flipperEnabled" + }, "reactNativeEngine": { "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" }, diff --git a/packages/core/jsonSchema/rnv.engine.json b/packages/core/jsonSchema/rnv.engine.json index 9ea159fccb..86ce24200a 100644 --- a/packages/core/jsonSchema/rnv.engine.json +++ b/packages/core/jsonSchema/rnv.engine.json @@ -11,6 +11,9 @@ "type": "string", "description": "ID of engine" }, + "packageName": { + "type": "string" + }, "engineExtension": { "type": "string", "description": "Engine extension ised by rnv during compilation" @@ -96,6 +99,7 @@ }, "required": [ "id", + "packageName", "engineExtension", "overview" ], diff --git a/packages/core/jsonSchema/rnv.integration.json b/packages/core/jsonSchema/rnv.integration.json index 5eff0ae095..c2da968672 100644 --- a/packages/core/jsonSchema/rnv.integration.json +++ b/packages/core/jsonSchema/rnv.integration.json @@ -4,11 +4,17 @@ "rnv.integration": { "type": "object", "properties": { + "packageName": { + "type": "string" + }, "$schema": { "type": "string", "description": "schema definition" } }, + "required": [ + "packageName" + ], "additionalProperties": false } }, diff --git a/packages/core/jsonSchema/rnv.project.json b/packages/core/jsonSchema/rnv.project.json index 87d1e42dc9..3a98fe20e4 100644 --- a/packages/core/jsonSchema/rnv.project.json +++ b/packages/core/jsonSchema/rnv.project.json @@ -500,10 +500,6 @@ "type": "boolean", "description": "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" }, - "isNew": { - "type": "boolean", - "description": "Marker indicating that this project has just been bootstrapped. this prop is managed by rnv" - }, "common": { "type": "object", "properties": { @@ -935,6 +931,10 @@ "type": "boolean", "description": "Enables new arch for android. Default: false" }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, "reactNativeEngine": { "type": "string", "enum": [ @@ -1415,6 +1415,9 @@ "newArchEnabled": { "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/newArchEnabled" }, + "flipperEnabled": { + "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/flipperEnabled" + }, "reactNativeEngine": { "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" }, diff --git a/packages/core/jsonSchema/rnv.templates.json b/packages/core/jsonSchema/rnv.templates.json index 73823e4487..46d8a7221c 100644 --- a/packages/core/jsonSchema/rnv.templates.json +++ b/packages/core/jsonSchema/rnv.templates.json @@ -9,13 +9,16 @@ "additionalProperties": { "type": "object", "properties": { + "packageName": { + "type": "string" + }, "description": { "type": "string" + }, + "localPath": { + "type": "string" } }, - "required": [ - "description" - ], "additionalProperties": false } }, diff --git a/packages/core/jsonSchema/rnv.workspace.json b/packages/core/jsonSchema/rnv.workspace.json index a66e2c7547..30b120798c 100644 --- a/packages/core/jsonSchema/rnv.workspace.json +++ b/packages/core/jsonSchema/rnv.workspace.json @@ -60,13 +60,16 @@ "additionalProperties": { "type": "object", "properties": { + "packageName": { + "type": "string" + }, "description": { "type": "string" + }, + "localPath": { + "type": "string" } }, - "required": [ - "description" - ], "additionalProperties": false } }, diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 67c777979f..60ec1e9945 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -22,7 +22,6 @@ import { registerRnvTasks } from '../tasks/taskRegistry'; export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, engConfig?: RnvEngineTemplate) => { const c = getContext(); logDefault(`registerEngine:${engine.config.id}`); - console.log('DJDDJDJK', engine.config.id); c.runtime.enginesById[engine.config.id] = engine; @@ -359,8 +358,6 @@ export const loadEngines = async (failOnMissingDeps?: boolean): Promise logDefault('loadEngines'); const c = getContext(); - console.log('APAPAPAPAAPAP', c.paths.project.config); - if (!fsExistsSync(c.paths.project.config)) return true; const filteredEngines: Record = _getFilteredEngines(c); @@ -477,8 +474,6 @@ const _resolvePkgPath = (c: RnvContext, packageName: string) => { const _registerPlatformEngine = async (c: RnvContext, platform: RnvPlatform | boolean): Promise => { // Only register active platform engine to be faster - console.log('SJJSSJSJSJ', platform); - if (platform === true || !platform) return; const selectedEngineTemplate = getEngineTemplateByPlatform(platform); diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index e1d346a994..d211b38750 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -74,7 +74,6 @@ export const executeRnvCore = async () => { } } } - console.log('KKFSSLSSLSLSL', c.platform); const result = await loadEngines(); // If false make sure we reload configs as it means it's freshly installed @@ -88,7 +87,6 @@ export const executeRnvCore = async () => { // } initTask = await findSuitableTask(); - console.log('DKDKDKDKDK', initTask); return initializeTask(initTask); // if (c.command && !taskInstance?.ignoreEngines) { diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index 4ce37e38e2..ba3e566da1 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -1,9 +1,24 @@ -import { buildHooks, inquirerPrompt, RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { + buildHooks, + executeTask, + fsExistsSync, + inquirerPrompt, + logInfo, + RnvTask, + RnvTaskName, + RnvTaskOptions, +} from '@rnv/core'; const Task: RnvTask = { description: 'Run specific build hook', - dependsOn: [RnvTaskName.projectConfigure], - fn: async ({ ctx }) => { + // dependsOn: [RnvTaskName.projectConfigure], + fn: async ({ ctx, taskName, originTaskName }) => { + if (fsExistsSync(ctx.paths.project.config)) { + await executeTask({ taskName: RnvTaskName.projectConfigure, parentTaskName: taskName, originTaskName }); + } else { + logInfo('Your are running your buildHook outside of renative project. SKIPPING project configure'); + } + await buildHooks(); if (!ctx.buildHooks) { diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 6eb5e9588b..e700939605 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -59,10 +59,10 @@ const configurePlatformBuilds = async () => { const Task: RnvTask = { description: 'Configure current project', fn: async ({ ctx, taskName, originTaskName, parentTaskName }) => { - const { paths, runtime, program } = ctx; - if (!paths.project.configExists) { - return Promise.reject(`${RnvTaskName.projectConfigure} not supported outside of renative project`); - } + const { runtime, program } = ctx; + // if (!paths.project.configExists) { + // return Promise.reject(`${RnvTaskName.projectConfigure} not supported outside of renative project`); + // } await configurePlatformBuilds(); await checkAndMigrateProject(); diff --git a/packages/engine-rn-next/src/tasks/taskRun.ts b/packages/engine-rn-next/src/tasks/taskRun.ts index 1faddeadfd..5aa73d6bcf 100644 --- a/packages/engine-rn-next/src/tasks/taskRun.ts +++ b/packages/engine-rn-next/src/tasks/taskRun.ts @@ -5,7 +5,8 @@ import { SdkPlatforms } from '../sdk/constants'; const Task: RnvTask = { description: 'Run your app in browser', dependsOn: [RnvTaskName.configure], - fn: async () => { + fn: async ({ ctx }) => { + ctx.runtime.shouldOpenBrowser = true; return runWebNext(); }, task: RnvTaskName.run, From f96829256e6f26cfae7ed5f997831b99c07071a2 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 13:06:34 +0100 Subject: [PATCH 120/175] refactor task exec and wizard --- packages/cli/src/index.ts | 1 - packages/core/src/context/runtime.ts | 54 +- packages/core/src/engines/index.ts | 101 --- packages/core/src/index.ts | 3 +- packages/core/src/runner.ts | 75 +- packages/core/src/tasks/index.ts | 672 ------------------ packages/core/src/tasks/taskExecutors.ts | 169 +++++ packages/core/src/tasks/taskFinder.ts | 76 ++ packages/core/src/tasks/taskHelpers.ts | 34 +- packages/core/src/tasks/taskRegistry.ts | 1 + packages/core/src/tasks/types.ts | 5 +- packages/core/src/tasks/wizard.ts | 244 +++++++ .../engine-core/src/tasks/linking/linker.ts | 3 - 13 files changed, 585 insertions(+), 853 deletions(-) delete mode 100644 packages/core/src/tasks/index.ts create mode 100644 packages/core/src/tasks/taskExecutors.ts create mode 100644 packages/core/src/tasks/taskFinder.ts create mode 100644 packages/core/src/tasks/wizard.ts diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 5d9ca23122..8625059242 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -70,7 +70,6 @@ export const run = ({ RNV_HOME_DIR }: { RNV_HOME_DIR?: string }) => { // if you pass --help it will override it with undefined // So we need to check if it's not a function to output help // if (program.opts().help) { - // console.log('HKJHKDJHKJDHKD'); //program.outputHelp(); // Let's use alternative name for this flag diff --git a/packages/core/src/context/runtime.ts b/packages/core/src/context/runtime.ts index 298c138105..6c7f77bec6 100644 --- a/packages/core/src/context/runtime.ts +++ b/packages/core/src/context/runtime.ts @@ -1,8 +1,7 @@ import path from 'path'; -import { getEngineRunnerByPlatform } from '../engines'; import { isSystemWin } from '../system/is'; -import { fsExistsSync, fsReadFileSync, getRealPath } from '../system/fs'; -import { RnvContext, RnvContextPlatform } from './types'; +import { fsExistsSync, fsReadFileSync } from '../system/fs'; +import { RnvContext } from './types'; import { generateRuntimePropInjects } from '../system/injectors'; import { getConfigProp } from './contextProps'; import { logDebug, logDefault } from '../logger'; @@ -54,31 +53,32 @@ export const configureRuntimeDefaults = async () => { c.runtime.hosted = hosted && c.runtime.currentPlatform?.isWebHosted; if (c.buildConfig.defaults?.supportedPlatforms) { - c.runtime.supportedPlatforms = []; - c.buildConfig.defaults.supportedPlatforms.forEach((platform) => { - //TODO: migrate to singular platform engine - const engine = getEngineRunnerByPlatform(platform); - if (engine) { - const dir = engine.originalTemplatePlatformsDir; + // c.runtime.supportedPlatforms = []; + c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; + // c.buildConfig.defaults.supportedPlatforms.forEach((platform) => { + // //TODO: migrate to singular platform engine + // const engine = getEngineRunnerByPlatform(platform); + // if (engine) { + // const dir = engine.originalTemplatePlatformsDir; - let isConnected = false; - let isValid = false; - const pDir = c.paths.project.platformTemplatesDirs?.[platform]; - if (pDir) { - isValid = true; - isConnected = pDir?.includes?.(getRealPath(dir) || 'UNDEFINED'); - } - const port = c.buildConfig.defaults?.ports?.[platform] || c.runtime.currentPlatform?.defaultPort; - const cp: RnvContextPlatform = { - engine, - platform, - isConnected, - port, - isValid, - }; - c.runtime.supportedPlatforms.push(cp); - } - }); + // let isConnected = false; + // let isValid = false; + // const pDir = c.paths.project.platformTemplatesDirs?.[platform]; + // if (pDir) { + // isValid = true; + // isConnected = pDir?.includes?.(getRealPath(dir) || 'UNDEFINED'); + // } + // const port = c.buildConfig.defaults?.ports?.[platform] || c.runtime.currentPlatform?.defaultPort; + // const cp: RnvContextPlatform = { + // engine, + // platform, + // isConnected, + // port, + // isValid, + // }; + // c.runtime.supportedPlatforms.push(cp); + // } + // }); } } return true; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 60ec1e9945..7cb6cf4c03 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -17,8 +17,6 @@ import { ConfigFileEngine } from '../schema/configFiles/types'; import { getConfigProp } from '../context/contextProps'; import { registerRnvTasks } from '../tasks/taskRegistry'; -// const ENGINE_CORE = 'engine-core'; - export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, engConfig?: RnvEngineTemplate) => { const c = getContext(); logDefault(`registerEngine:${engine.config.id}`); @@ -424,22 +422,6 @@ ${enginesToInstall.map((v) => `> ${v.key}@${v.version}`).join('\n')} // All engines ready to be registered _registerPlatformEngine(c, c.platform); - // } else if (c.files.project.config_original) { - // logError('Engine configs missing in your renative.json. FIXING...DONE'); - // c.files.project.config_original.engines = { - // '@rnv/engine-rn': 'source:rnv', - // '@rnv/engine-rn-web': 'source:rnv', - // '@rnv/engine-rn-next': 'source:rnv', - // '@rnv/engine-rn-electron': 'source:rnv', - // '@rnv/engine-lightning': 'source:rnv', - // '@rnv/engine-rn-macos': 'source:rnv', - // }; - // // TODO: use parseRenativeConfigs instead - // c.buildConfig.engines = c.files.project.config_original.engines; - - // writeFileSync(c.paths.project.config, c.files.project.config_original); - // return loadEngines(c); - // } return true; }; @@ -514,87 +496,4 @@ export const getEngineRunnerByOwnerID = (task: RnvTask) => { return engine; }; -// const findTasksByTaskName = (taskName: string, tasks: RnvTaskMap) => { -// const result: RnvTask[] = []; -// const task = Object.values(tasks).forEach((v) => { -// const plat = getContext().platform; -// if (v.platforms && plat) { -// if (!v.platforms.includes(plat)) { -// // If we found a task with platform restriction and it does not match current platform we skip it -// return; -// } -// } -// if (v.task === taskName) { -// result.push(v); -// } -// }); -// return result; -// }; - -// export const getEngineTask = (taskName: string, tasks?: RnvTaskMap, customTasks?: RnvTaskMap): RnvTask | undefined => { -// const result: RnvTask[] = []; - -// if (customTasks) { -// result.push(...findTasksByTaskName(taskName, customTasks)); -// } -// if (!tasks) { -// return undefined; -// } - -// const taskInstance = findByTaskName(taskName, tasks); -// return taskInstance; -// }; - -// export const hasEngineTask = (task: string, tasks: RnvTaskMap, isProjectScope?: boolean) => -// isProjectScope ? !!getEngineTask(task, tasks) : getEngineTask(task, tasks)?.isGlobalScope; - -// export const getEngineSubTasks = (task: string, engine: RnvEngine, exactMatch?: boolean) => { -// const ctx = getContext(); -// const { tasks } = engine; -// const result = Object.values(tasks).filter((v) => { -// if (ctx.platform) { -// if (v.platforms) { -// if (!v.platforms.includes(ctx.platform)) { -// return false; -// } -// } -// } -// return exactMatch ? v.task.split(' ')[0] === task : v.task.split(' ')[0].startsWith(task); -// }); - -// return result; -// }; - -// export const getEngineRunner = (task: string, customTasks?: RnvTaskMap, failOnMissingEngine = true) => { -// const c = getContext(); - -// if (customTasks?.[task]) { -// return c.runtime.enginesById[ENGINE_CORE]; -// } - -// const { configExists } = c.paths.project; - -// let engine = typeof c.platform === 'string' && c.runtime.enginesByPlatform[c.platform]; -// if (!engine) { -// engine = c.runtime.enginesById['engine-core']; -// } -// if (!engine) { -// if (hasEngineTask(task, c.runtime.enginesById[ENGINE_CORE].tasks, configExists)) { -// return c.runtime.enginesById[ENGINE_CORE]; -// } -// if (failOnMissingEngine) { -// throw new Error(`Cound not find active engine for platform ${c.platform}. Available engines: -// ${c.runtime.enginesByIndex.map((v) => v.config.id).join(', ')}`); -// } -// return undefined; -// } - -// if (hasEngineTask(task, engine.tasks, configExists)) return engine; -// if (hasEngineTask(task, c.runtime.enginesById[ENGINE_CORE].tasks, configExists)) { -// return c.runtime.enginesById[ENGINE_CORE]; -// } -// if (failOnMissingEngine) throw new Error(`Cound not find suitable executor for task ${chalk().bold(task)}`); -// return undefined; -// }; - export const getRegisteredEngines = () => getContext().runtime.enginesByIndex; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index d4714f8443..9b5d080052 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -29,7 +29,8 @@ export * from './projects/dependencies'; export * from './projects/fonts'; export * from './projects/utils'; -export * from './tasks'; +export * from './tasks/taskFinder'; +export * from './tasks/taskExecutors'; export * from './tasks/taskHelpers'; export * from './tasks/taskRegistry'; export * from './tasks/constants'; diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index d211b38750..e42d4da60b 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -1,16 +1,16 @@ import { getContext } from './context/provider'; -import { loadEngines } from './engines'; +import { loadEngines, registerMissingPlatformEngines } from './engines'; import { loadIntegrations } from './integrations'; import { checkAndMigrateProject } from './migrator'; import { configureRuntimeDefaults } from './context/runtime'; -import { findSuitableTask, initializeTask } from './tasks'; +import { findSuitableTask } from './tasks/taskFinder'; import { updateRenativeConfigs } from './plugins'; import { checkAndBootstrapIfRequired } from './projects/bootstrap'; import { loadDefaultConfigTemplates } from './configs'; import { getApi } from './api/provider'; import { RnvTask } from './tasks/types'; -import { inquirerPrompt } from './api'; -import { getTaskNameFromCommand } from './tasks/taskHelpers'; +import { runInteractiveWizard, runInteractiveWizardForSubTasks } from './tasks/wizard'; +import { initializeTask } from './tasks/taskExecutors'; export const exitRnvCore = async (code: number) => { const ctx = getContext(); @@ -23,6 +23,15 @@ export const exitRnvCore = async (code: number) => { } }; +const loadAllEngineTasks = async () => { + const result = await loadEngines(); + // If false make sure we reload configs as it means it's freshly installed + if (!result) { + await updateRenativeConfigs(); + } + await registerMissingPlatformEngines(); +}; + export const executeRnvCore = async () => { const c = getContext(); @@ -37,13 +46,21 @@ export const executeRnvCore = async () => { return; } + // for "rnv" we simply load all engines upfront + const { configExists } = c.paths.project; + if (!c.command && configExists) { + await loadAllEngineTasks(); + await loadIntegrations(); + return runInteractiveWizard(); + } + let initTask: RnvTask | undefined; // Special Case for engine-core tasks // they don't require other engines to be loaded if isGlobalScope = true // ie rnv link initTask = await findSuitableTask(); - if (initTask?.isGlobalScope) { + if (initTask) { return initializeTask(initTask); } @@ -54,47 +71,13 @@ export const executeRnvCore = async () => { return initializeTask(initTask); } - // Engines are bound to platform - // If we don't know the platform yet we need to load all engines - c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; - if (!c.platform) { - const taskName = getTaskNameFromCommand(); - const platforms = c.runtime.availablePlatforms; - if (platforms) { - if (platforms.length === 1) { - c.platform = platforms[0]; - } else { - const { platform } = await inquirerPrompt({ - type: 'list', - name: 'platform', - message: `Pick a platform for ${taskName}`, - choices: platforms, - }); - c.platform = platform; - } - } - } - - const result = await loadEngines(); - // If false make sure we reload configs as it means it's freshly installed - if (!result) { - await updateRenativeConfigs(); - } - - // for root rnv we simply load all engines upfront - // const { configExists } = c.paths.project; - // if (!c.command && configExists) { - // } - + // Still no task found. time to load all engines to see if anything matches + await loadAllEngineTasks(); initTask = await findSuitableTask(); - return initializeTask(initTask); - - // if (c.command && !taskInstance?.ignoreEngines) { - // await registerMissingPlatformEngines(taskInstance); - // } + if (initTask) { + return initializeTask(initTask); + } - // if (taskInstance?.task) { - // return initializeTask(taskInstance); - // } - // return Promise.reject(`No suitable task found for command: ${c.command}`); + // Still no task found. time to check sub tasks options via wizard + return runInteractiveWizardForSubTasks(); }; diff --git a/packages/core/src/tasks/index.ts b/packages/core/src/tasks/index.ts deleted file mode 100644 index dca43b47a4..0000000000 --- a/packages/core/src/tasks/index.ts +++ /dev/null @@ -1,672 +0,0 @@ -import { logDefault, logInitTask, logExitTask, chalk, logRaw, logInfo } from '../logger'; -import { executePipe } from '../buildHooks'; -import type { RnvContext } from '../context/types'; -import type { RnvTask } from './types'; -import { getApi } from '../api/provider'; -import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; -import { getContext } from '../context/provider'; -import { RnvTaskName } from '../enums/taskName'; -import { getRegisteredTasks } from './taskRegistry'; -import { generateStringFromTaskOption, getTaskNameFromCommand, shouldSkipTask } from './taskHelpers'; -import { getEngineRunnerByOwnerID } from '../engines'; - -let executedTasks: Record = {}; -const TASK_LIMIT = 20; - -export const executeTask = async (opts: { - taskName: string; - parentTaskName?: string; - originTaskName?: string; - isFirstTask?: boolean; - isOptional?: boolean; - skipInOnlyMode?: boolean; - alternativeTaskInOnlyMode?: string; -}) => { - const { - taskName, - parentTaskName, - originTaskName, - isOptional, - isFirstTask, - skipInOnlyMode, - alternativeTaskInOnlyMode, - } = opts; - const ctx = getContext(); - const inOnlyMode = ctx.program.opts().only; - if (skipInOnlyMode && inOnlyMode) { - const availableTasks = _findTasksByTaskName(alternativeTaskInOnlyMode || RnvTaskName.configureSoft); - const taskInstance = await extractSingleExecutableTask(availableTasks); - return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); - } - - const availableTasks = _findTasksByTaskName(taskName); - const taskInstance = await extractSingleExecutableTask(availableTasks); - return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); -}; - -export const findSuitableTask = async (): Promise => { - logDefault('findSuitableTask'); - // const c = getContext(); - - const taskName = getTaskNameFromCommand(); - if (!taskName) { - // Trigger auto selection - throw new Error('TODO interactive selection offer all tasks'); - } - const suitableTasks = _findTasksByTaskName(taskName); - - const taskInstance = await extractSingleExecutableTask(suitableTasks); - return taskInstance; -}; - -export const initializeTask = async (taskInstance: RnvTask | undefined) => { - if (!taskInstance) { - throw new Error('Task instance is undefined'); - } - const { task } = taskInstance; - logDefault('initializeTask', task); - const c = getContext(); - _populateExtraParameters(c, taskInstance); - - c.runtime.engine = getEngineRunnerByOwnerID(taskInstance); - - logInfo(`Current engine: ${chalk().bold(taskInstance.ownerID)} ${chalk().grey(`(${c.runtime.engine?.rootPath})`)}`); - // logInfo( - // `Current engine: ${chalk().bold(c.runtime.engine?.config)} ${chalk().grey(`(${c.runtime.engine?.rootPath})`)}` - // ); - c.runtime.task = task; - executedTasks = {}; - - getApi().analytics.captureEvent({ - type: task, - platform: c.platform, - }); - - await _executeTaskInstance({ taskInstance, originTaskName: task, isFirstTask: true }); - return true; -}; - -const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { - c.program?.allowUnknownOption(false); // integration options are not known ahead of time - if (task.options) { - task.options.forEach((opt) => { - c.program.option?.(generateStringFromTaskOption(opt), opt.description); - }); - } - c.program.showHelpAfterError(); - c.program.parse?.(process.argv); -}; - -const _findTasksByTaskName = (taskName: string) => { - const result: RnvTask[] = []; - const ctx = getContext(); - const tasks = getRegisteredTasks(); - Object.values(tasks).forEach((v) => { - const plat = ctx.platform; - if (v.platforms && plat) { - if (!v.platforms.includes(plat)) { - // If we found a task with platform restriction and it does not match current platform we skip it - return; - } - } - - if (v.task === taskName) { - result.push(v); - } - }); - return result; -}; - -const _executeTaskInstance = async (opts: { - taskInstance?: RnvTask; - parentTaskName?: string; - originTaskName?: string; - isFirstTask?: boolean; - isOptional?: boolean; -}) => { - const { taskInstance, parentTaskName, originTaskName, isFirstTask, isOptional } = opts; - const c = getContext(); - if (!taskInstance) { - if (isOptional) { - return; - } - throw new Error(`Task Instance is undefined`); - } - const needsHelp = c.program.opts().help; - const inOnlyMode = c.program.opts().only; - - c._currentTask = taskInstance.task; - // logInitTask(`${pt}=> [${chalk().bold.rgb(170, 106, 170)(task)}]`); - logInitTask(`${taskInstance.task}`); - - if (!executedTasks[taskInstance.task]) executedTasks[taskInstance.task] = 0; - if (executedTasks[taskInstance.task] > TASK_LIMIT) { - return Promise.reject(`You reached maximum amount of executions per one task (${TASK_LIMIT}) task: ${taskInstance.task}. -This is to warn you ended up in task loop. -(${taskInstance.task} calls same or another task which calls ${taskInstance.task} again) -but issue migh not be necessarily with this task - -To avoid that test your task code against parentTask and avoid executing same task X from within task X`); - } - - if (needsHelp && !parentTaskName && taskInstance) { - logRaw(` -Description: ${taskInstance.description} - `); - c.program.outputHelp(); - - if (taskInstance.fnHelp) { - await taskInstance.fnHelp(); - } - return; - } - if (!taskInstance.isGlobalScope && isFirstTask) { - if (c.files.project.package) { - // This has to happen in order for hooks to be able to run - await checkIfProjectAndNodeModulesExists(); - } - } - if (isFirstTask) { - c.runtime.forceBuildHookRebuild = !!taskInstance?.forceBuildHookRebuild; - } - - const doPipe = !taskInstance.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); - if (doPipe) await _executePipe(taskInstance, 'before'); - executedTasks[taskInstance.task]++; - c._currentTask = parentTaskName; - const shouldSkip = shouldSkipTask({ taskName: taskInstance.task }); - if (taskInstance.dependsOn) { - for (const dep of taskInstance.dependsOn) { - await executeTask({ taskName: dep, parentTaskName: taskInstance.task, originTaskName }); - } - } - if (taskInstance.fn && !shouldSkip) { - await taskInstance.fn({ - taskName: taskInstance.task, - parentTaskName, - originTaskName, - shouldSkip, - ctx: c, - }); - } - if (doPipe) await _executePipe(taskInstance, 'after'); - - executedTasks[taskInstance.task]++; - - c._currentTask = parentTaskName; - - logExitTask(`${taskInstance.task}`); -}; - -const _executePipe = async (taskInstance: RnvTask, phase: string) => - executePipe(`${taskInstance.task.split(' ').join(':')}:${phase}`); - -const extractSingleExecutableTask = async (suitableTasks: RnvTask[]) => { - if (suitableTasks.length === 1) { - return suitableTasks[0]; - } else if (suitableTasks.length > 1) { - // Found multiple Tasks with same name - throw new Error('TODO interactive selection multiple tasks'); - } - // Found no tasks - // throw new Error('TODO found no tasks'); - return undefined; -}; - -////////=======================//////// - -// const _getTaskOption = ({ taskInstance }: TaskObj, provider?: string): TaskPromptOption => { -// const asArray = taskInstance.task.split(' '); -// const output: TaskPromptOption = { -// value: taskInstance.task, -// command: '', -// name: '', -// asArray, -// isPriorityOrder: taskInstance.isPriorityOrder, -// description: taskInstance.description, -// isGlobalScope: taskInstance.isGlobalScope, -// isPrivate: taskInstance.isPrivate, -// params: taskInstance.options, -// providers: [], -// }; - -// if (taskInstance.description && taskInstance.description !== '') { -// output.description = taskInstance.description; -// output.name = `${taskInstance.task} ${chalk().grey(`(${taskInstance.description})`)}`; -// } else { -// output.name = taskInstance.task; -// } -// output.command = asArray[0]; -// output.subCommand = asArray[1]; // TODO don't treat options like --myopt as subcommands - -// if (provider) { -// output.providers.push(provider); -// } - -// return output; -// }; - -// const _getTaskObj = (taskInstance: RnvTask) => { -// const key = taskInstance.task; -// const taskNameArr = key.split(' '); -// let parent: null | string = null; -// if (taskNameArr.length > 1) { -// taskNameArr.pop(); -// parent = taskNameArr.join(' '); -// } - -// return { -// key, -// taskInstance, -// parent, -// }; -// }; - -// export const findSuitableGlobalTask = async () => { -// const c = getContext(); -// if (!c.command) return undefined; -// let task = ''; - -// if (c.command) task = c.command; -// if (c.subCommand) task += ` ${c.subCommand}`; - -// c.runtime.engine = getEngineRunner(task, undefined, false); - -// const tsk = getEngineTask(task, c.runtime.engine?.tasks); - -// return tsk; -// }; - -// const ACCEPTED_CONDITIONS = ['platform', 'target', 'appId', 'scheme'] as const; - -// type ACKey = (typeof ACCEPTED_CONDITIONS)[number]; - -// const _logSkip = (task: string) => { -// logInfo(`Original RNV task ${chalk().bold(task)} marked to ignore. SKIPPING...`); -// }; - -////////=======================//////// - -// export const getAllSuitableTasks = (): Record => { -// const REGISTERED_ENGINES = getRegisteredEngines(); -// const suitableTasks: Record = {}; - -// REGISTERED_ENGINES.forEach((engine) => { -// Object.values(engine.tasks).forEach((taskInstance) => { -// let taskObj: TaskPromptOption = _getTaskOption(_getTaskObj(taskInstance), engine?.config?.id); -// if (!suitableTasks[taskObj.value]) { -// suitableTasks[taskObj.value] = taskObj; -// } else { -// // In case of multiple competing tasks (same task name but coming from different engines) - -// taskObj = suitableTasks[taskObj.value]; -// // We try to revert to generic description instead. -// taskObj.description = DEFAULT_TASK_DESCRIPTIONS[taskObj.value] || taskObj.description; -// // In case of multiple competing tasks we assume they are "commonly used" -// taskObj.isPriorityOrder = true; -// taskObj.providers.push(engine?.config?.id); -// } -// }); -// }); -// Object.values(CUSTOM_TASKS).forEach((taskInstance) => { -// const taskObj = _getTaskOption(_getTaskObj(taskInstance), 'custom'); -// suitableTasks[taskObj.value] = taskObj; -// }); -// // TODO: handle integration cli options - -// return suitableTasks; -// }; - -// export const findSuitableTask2 = async (specificTask?: string): Promise => { -// logDefault('findSuitableTask'); -// const c = getContext(); - -// const REGISTERED_ENGINES = getRegisteredEngines(); - -// let task = ''; -// if (!specificTask) { -// if (!c.command) { -// const suitableTasks = getAllSuitableTasks(); - -// const taskInstances = Object.values(suitableTasks); -// let tasks: TaskPromptOption[]; - -// let defaultCmd: string | undefined = 'new'; -// let addendum = ''; -// if (!c.paths.project.configExists) { -// tasks = taskInstances.filter((v) => v.isGlobalScope && !v.isPrivate).sort(); -// addendum = ' (Not a ReNative project. options will be limited)'; -// } else { -// tasks = taskInstances.filter((v) => !v.isPrivate).sort(); -// defaultCmd = tasks.find((v) => v.value === 'run')?.name; -// } - -// const commonTasks: TaskPromptOption[] = []; -// const ungroupedTasks: TaskPromptOption[] = []; -// const groupedTasks: TaskPromptOption[] = []; -// const taskGroups: Record = {}; -// tasks.forEach((task) => { -// if (task.subCommand) { -// if (!taskGroups[task.command]) { -// const groupTask: TaskPromptOption = { -// name: `${task.command}...`, -// command: task.command, -// value: task.command, -// providers: [], -// }; -// taskGroups[task.command] = groupTask; -// groupedTasks.push(groupTask); -// } -// } else if (task.isPriorityOrder) { -// commonTasks.push(task); -// } else { -// ungroupedTasks.push(task); -// } -// }); - -// const mergedTasks = [ -// inquirerSeparator('─────────── Common tasks ───────────'), -// ...commonTasks, -// inquirerSeparator('─────────── More tasks ─────────────'), -// ...ungroupedTasks, -// ...groupedTasks, -// ]; - -// const { selectedTask } = await inquirerPrompt({ -// type: 'list', -// default: defaultCmd, -// name: 'selectedTask', -// message: `Pick a command${addendum}`, -// choices: mergedTasks, -// pageSize: 15, -// logMessage: 'Welcome to the brave new world...', -// }); -// c.command = selectedTask; -// } -// if (c.command) task = c.command; -// if (c.subCommand) task += ` ${c.subCommand}`; - -// let suitableEngines = REGISTERED_ENGINES.filter((engine) => { -// return hasEngineTask(task, engine.tasks, c.paths.project.configExists); -// }); -// console.log('SJSKLJSK', suitableEngines); - -// const autocompleteEngines = REGISTERED_ENGINES.filter((engine) => getEngineSubTasks(task, engine, true).length); - -// const isAutoComplete = !suitableEngines.length && !!c.command && !autocompleteEngines.length; -// if (!suitableEngines.length) { -// // Get all supported tasks -// const supportedSubtasksArr: Array<{ -// desc: string; -// taskKey: string; -// }> = []; -// REGISTERED_ENGINES.forEach((engine) => { -// const st = getEngineSubTasks(task, engine); - -// st.forEach((taskInstance) => { -// const isNotViable = !c.paths.project.configExists && !taskInstance.isGlobalScope; - -// if (!isNotViable) { -// const taskKey = isAutoComplete ? taskInstance.task : taskInstance.task.split(' ')[1]; - -// supportedSubtasksArr.push({ -// desc: taskInstance.description?.toLowerCase?.(), -// taskKey, -// }); -// } -// }); -// }); -// Object.values(CUSTOM_TASKS).forEach((taskInstance) => { -// const tskArr = taskInstance.task.split(' '); - -// if (task === tskArr[0] && tskArr.length > 1) { -// const taskKey = isAutoComplete ? taskInstance.task : taskInstance.task.split(' ')[1]; - -// supportedSubtasksArr.push({ -// desc: taskInstance.description?.toLowerCase?.(), -// taskKey, -// }); -// } -// }); - -// const supportedSubtasks: TaskItemMap = {}; -// // Normalize task options -// const supportedSubtasksFilter: TaskItemMap = {}; -// supportedSubtasksArr.forEach((tsk) => { -// const mergedTask = supportedSubtasksFilter[tsk.taskKey]; -// if (!mergedTask) { -// supportedSubtasksFilter[tsk.taskKey] = tsk; -// } else if (!mergedTask.desc?.includes(tsk.desc)) { -// mergedTask.desc += `, ${tsk.desc}`; -// } -// }); - -// // Generate final list object -// Object.values(supportedSubtasksFilter).forEach((v) => { -// const desc = v.desc ? `(${v.desc})` : ''; -// const key = `${v.taskKey} ${chalk().grey(desc)}`; -// supportedSubtasks[key] = { -// taskKey: v.taskKey, -// }; -// }); - -// const subTasks = Object.keys(supportedSubtasks); -// if (subTasks.length && c.runtime.hasAllEnginesRegistered) { -// // Only offer autocomple option if all engines are registered - -// const message = isAutoComplete -// ? `Autocomplete action for "${c.command}"` -// : `Pick a subCommand for ${c.command}`; -// const { subCommand } = await inquirerPrompt({ -// type: 'list', -// name: 'subCommand', -// message, -// choices: subTasks, -// }); -// if (isAutoComplete) { -// task = supportedSubtasks[subCommand].taskKey; -// c.command = task.split(' ')[0]; -// c.subCommand = task.split(' ')[1]; -// if (c.subCommand) { -// task = `${c.command} ${c.subCommand}`; -// } else { -// task = `${c.command}`; -// } -// } else { -// c.subCommand = supportedSubtasks[subCommand].taskKey; -// task = `${c.command} ${c.subCommand}`; -// } - -// suitableEngines = REGISTERED_ENGINES.filter((engine) => -// hasEngineTask(task, engine.tasks, c.paths.project.configExists) -// ); -// } -// } -// if (CUSTOM_TASKS[task]) { -// // Custom tasks are executed by core engine -// logInfo(`Running custom task ${chalk().bold(task)}`); -// } else if (!suitableEngines.length) { -// if (!c.runtime.hasAllEnginesRegistered) { -// // No platform was specified. we have no option other than load all engines and offer platform list next round -// await registerAllPlatformEngines(); -// return findSuitableTask(); -// } - -// logInfo(`could not find suitable task for ${chalk().bold(c.command)}. GETTING OPTIONS...`); -// c.command = null; -// c.subCommand = null; -// return findSuitableTask(); -// } -// //TODO: special type case for c.platform -// if (!c.platform || c.program.opts().platform === true) { -// await _selectPlatform(c, suitableEngines, task); -// } -// c.runtime.engine = getEngineRunner(task, CUSTOM_TASKS, false); -// // Cover scenarios of -p xxxxxxxxx -// if (!c.runtime.engine) { -// await _selectPlatform(c, suitableEngines, task); -// c.runtime.engine = getEngineRunner(task, CUSTOM_TASKS); -// } -// if (c.runtime.engine?.runtimeExtraProps) { -// c.runtime.runtimeExtraProps = c.runtime.engine.runtimeExtraProps; -// } - -// const customTask = CUSTOM_TASKS[task]; -// if (customTask) { -// c.runtime.availablePlatforms = customTask.platforms == null ? [...RnvPlatforms] : customTask.platforms; -// // _populateExtraParameters(c, customTask); -// return customTask; -// } -// } else { -// task = specificTask; -// c.runtime.engine = getEngineRunner(task); -// } -// const plats = c.runtime.engine?.platforms || []; -// c.runtime.availablePlatforms = Object.keys(plats) as PlatformKey[]; -// const engineTask = getEngineTask(task, c.runtime.engine?.tasks); -// console.log('DJDLKDJLDKJLKDJLD', engineTask); - -// return engineTask; -// }; - -// const _selectPlatform = async (c: RnvContext, suitableEngines: Array, task: string) => { -// let platforms: string[] = []; -// const supportedEngPlatforms: string[] = []; -// let isPlatformIndependentTask = false; -// suitableEngines.forEach((engine) => { -// const enPlats = getEngineTask(task, engine.tasks)?.platforms; -// console.log( -// 'ENGPLAAA', -// enPlats, -// suitableEngines.map((v) => v.config.id) -// ); - -// if (enPlats) { -// enPlats.forEach((plat) => { -// supportedEngPlatforms.push(plat); -// }); -// } else { -// // enPlats=null means task can be executed without platform -// isPlatformIndependentTask = true; -// } -// }); - -// if (supportedEngPlatforms.length === 0 && isPlatformIndependentTask) { -// // If there are no tasks declaring supported platforms -// // BUT there are tasks that can be executed without platform -// // then we can skip platform selection -// return; -// } - -// const supProjPlatforms = c.buildConfig?.defaults?.supportedPlatforms; - -// if (supProjPlatforms) { -// supProjPlatforms.forEach((plat) => { -// if (supportedEngPlatforms.includes(plat)) { -// platforms.push(plat); -// } -// }); -// } else { -// platforms = supportedEngPlatforms; -// } - -// if (platforms?.length === 1) { -// logInfo(`Only one platform available for task: ${task}. Using ${chalk().bold(platforms[0])}`); -// c.platform = platforms[0] as PlatformKey; -// return; -// } - -// console.log('SLKJLSKJSL', supProjPlatforms, supportedEngPlatforms); - -// if (platforms) { -// const { platform } = await inquirerPrompt({ -// type: 'list', -// name: 'platform', -// message: `Pick a platform for ${task}`, -// choices: platforms, -// }); -// c.platform = platform; -// } -// // else if (platforms.length === 1) { -// // c.platform = platforms[0] as PlatformKey; -// // } -// }; - -// /** -// * @deprecated Use executeDependantTask instead -// */ -// export const executeOrSkipTask = async (task: string, parentTask: string, originTask?: string) => { -// const c = getContext(); -// if (!c.program.opts().only) { -// return executeTask(task, parentTask, originTask); -// } -// return executeTask('configureSoft', parentTask, originTask); -// }; - -// export const executeDependantTask = async ({ -// task, -// parentTask, -// originTask, -// alternativeTask, -// }: { -// task: string; -// parentTask: string; -// originTask?: string; -// alternativeTask?: string; -// }) => { -// const ctx = getContext(); -// if (!ctx.program.opts().only) { -// return executeTask(task, parentTask, originTask); -// } -// if (alternativeTask) { -// return executeTask(alternativeTask, parentTask, originTask); -// } -// return true; -// }; - -// export const executeEngineTask = async ( -// task: string, -// parentTask?: string, -// originTask?: string, -// tasks?: Record, -// isFirstTask?: boolean -// ) => { -// const c = getContext(); -// const needsHelp = c.program.opts().help; - -// const taskInstance = getEngineTask(task, tasks, CUSTOM_TASKS); - -// if (!taskInstance) return; - -// if (needsHelp && !parentTask && taskInstance) { -// logRaw(` -// Description: ${taskInstance.description} -// `); -// c.program.outputHelp(); - -// // ${t.options -// // .map((v) => { -// // const option = v.shortcut ? `-${v.shortcut}, ` : ''; -// // return ` ${option}--${v.key} ${v.description}`; -// // }) -// // .join('\n')} -// if (taskInstance.fnHelp) { -// await taskInstance.fnHelp(c, parentTask, originTask); -// } -// return; -// } -// if (!taskInstance.isGlobalScope && isFirstTask) { -// if (c.files.project.package) { -// // This has to happen in order for hooks to be able to run -// await checkIfProjectAndNodeModulesExists(); -// } -// } -// if (isFirstTask) { -// c.runtime.forceBuildHookRebuild = !!taskInstance?.forceBuildHookRebuild; -// } -// const inOnlyMode = c.program.opts().only; -// const doPipe = !taskInstance.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); -// if (doPipe) await _executePipe(c, task, 'before'); -// if (taskInstance.fn) await taskInstance.fn(c, parentTask, originTask); -// if (doPipe) await _executePipe(c, task, 'after'); -// }; diff --git a/packages/core/src/tasks/taskExecutors.ts b/packages/core/src/tasks/taskExecutors.ts new file mode 100644 index 0000000000..a3277e7495 --- /dev/null +++ b/packages/core/src/tasks/taskExecutors.ts @@ -0,0 +1,169 @@ +import { logDefault, logInitTask, logExitTask, chalk, logRaw, logInfo } from '../logger'; +import { executePipe } from '../buildHooks'; +import type { RnvContext } from '../context/types'; +import type { RnvTask } from './types'; +import { getApi } from '../api/provider'; +import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; +import { getContext } from '../context/provider'; +import { RnvTaskName } from '../enums/taskName'; +import { generateStringFromTaskOption, shouldSkipTask } from './taskHelpers'; +import { getEngineRunnerByOwnerID } from '../engines'; +import { extractSingleExecutableTask, findTasksByTaskName } from './taskFinder'; + +let executedTasks: Record = {}; +const TASK_LIMIT = 20; + +export const executeTask = async (opts: { + taskName: string; + parentTaskName?: string; + originTaskName?: string; + isFirstTask?: boolean; + isOptional?: boolean; + skipInOnlyMode?: boolean; + alternativeTaskInOnlyMode?: string; +}) => { + const { + taskName, + parentTaskName, + originTaskName, + isOptional, + isFirstTask, + skipInOnlyMode, + alternativeTaskInOnlyMode, + } = opts; + const ctx = getContext(); + const inOnlyMode = ctx.program.opts().only; + if (skipInOnlyMode && inOnlyMode) { + const availableTasks = findTasksByTaskName(alternativeTaskInOnlyMode || RnvTaskName.configureSoft); + const taskInstance = await extractSingleExecutableTask(availableTasks, taskName); + return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); + } + + const availableTasks = findTasksByTaskName(taskName); + const taskInstance = await extractSingleExecutableTask(availableTasks, taskName); + return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); +}; + +export const initializeTask = async (taskInstance: RnvTask | undefined) => { + if (!taskInstance) { + throw new Error('Task instance is undefined'); + } + const { task } = taskInstance; + logDefault('initializeTask', task); + const c = getContext(); + _populateExtraParameters(c, taskInstance); + + // If engine has not been selected by picking interactive platform selection + // let's pick it based on task ownerID + if (!c.runtime.engine) { + c.runtime.engine = getEngineRunnerByOwnerID(taskInstance); + } + + logInfo(`Current engine: ${chalk().bold(taskInstance.ownerID)} ${chalk().grey(`(${c.runtime.engine?.rootPath})`)}`); + + c.runtime.task = task; + executedTasks = {}; + + getApi().analytics.captureEvent({ + type: task, + platform: c.platform, + }); + + await _executeTaskInstance({ taskInstance, originTaskName: task, isFirstTask: true }); + return true; +}; + +const _executeTaskInstance = async (opts: { + taskInstance?: RnvTask; + parentTaskName?: string; + originTaskName?: string; + isFirstTask?: boolean; + isOptional?: boolean; +}) => { + const { taskInstance, parentTaskName, originTaskName, isFirstTask, isOptional } = opts; + const c = getContext(); + if (!taskInstance) { + if (isOptional) { + return; + } + throw new Error(`Task Instance is undefined`); + } + const needsHelp = c.program.opts().help; + const inOnlyMode = c.program.opts().only; + + c._currentTask = taskInstance.task; + // logInitTask(`${pt}=> [${chalk().bold.rgb(170, 106, 170)(task)}]`); + logInitTask(`${taskInstance.task}`); + + if (!executedTasks[taskInstance.task]) executedTasks[taskInstance.task] = 0; + if (executedTasks[taskInstance.task] > TASK_LIMIT) { + return Promise.reject(`You reached maximum amount of executions per one task (${TASK_LIMIT}) task: ${taskInstance.task}. +This is to warn you ended up in task loop. +(${taskInstance.task} calls same or another task which calls ${taskInstance.task} again) +but issue migh not be necessarily with this task + +To avoid that test your task code against parentTask and avoid executing same task X from within task X`); + } + + if (needsHelp && !parentTaskName && taskInstance) { + logRaw(` +Description: ${taskInstance.description} + `); + c.program.outputHelp(); + + if (taskInstance.fnHelp) { + await taskInstance.fnHelp(); + } + return; + } + if (!taskInstance.isGlobalScope && isFirstTask) { + if (c.files.project.package) { + // This has to happen in order for hooks to be able to run + await checkIfProjectAndNodeModulesExists(); + } + } + if (isFirstTask) { + c.runtime.forceBuildHookRebuild = !!taskInstance?.forceBuildHookRebuild; + } + + const doPipe = !taskInstance.isGlobalScope && (!inOnlyMode || (inOnlyMode && isFirstTask)); + if (doPipe) await _executePipe(taskInstance, 'before'); + executedTasks[taskInstance.task]++; + c._currentTask = parentTaskName; + const shouldSkip = shouldSkipTask({ taskName: taskInstance.task }); + if (taskInstance.dependsOn) { + for (const dep of taskInstance.dependsOn) { + await executeTask({ taskName: dep, parentTaskName: taskInstance.task, originTaskName }); + } + } + if (taskInstance.fn && !shouldSkip) { + await taskInstance.fn({ + taskName: taskInstance.task, + parentTaskName, + originTaskName, + shouldSkip, + ctx: c, + }); + } + if (doPipe) await _executePipe(taskInstance, 'after'); + + executedTasks[taskInstance.task]++; + + c._currentTask = parentTaskName; + + logExitTask(`${taskInstance.task}`); +}; + +const _populateExtraParameters = (c: RnvContext, task: RnvTask) => { + c.program?.allowUnknownOption(false); // integration options are not known ahead of time + if (task.options) { + task.options.forEach((opt) => { + c.program.option?.(generateStringFromTaskOption(opt), opt.description); + }); + } + c.program.showHelpAfterError(); + c.program.parse?.(process.argv); +}; + +const _executePipe = async (taskInstance: RnvTask, phase: string) => + executePipe(`${taskInstance.task.split(' ').join(':')}:${phase}`); diff --git a/packages/core/src/tasks/taskFinder.ts b/packages/core/src/tasks/taskFinder.ts new file mode 100644 index 0000000000..ba5784615c --- /dev/null +++ b/packages/core/src/tasks/taskFinder.ts @@ -0,0 +1,76 @@ +import { logDefault } from '../logger'; +import type { RnvTask } from './types'; +import { getContext } from '../context/provider'; +import { getRegisteredTasks } from './taskRegistry'; +import { getTaskNameFromCommand, selectPlatformIfRequired } from './taskHelpers'; + +export const findSuitableTask = async (): Promise => { + logDefault('findSuitableTask'); + // const c = getContext(); + + const taskName = getTaskNameFromCommand(); + if (!taskName) { + // Trigger auto selection + throw new Error('TODO interactive selection offer all tasks'); + } + const suitableTasks = findTasksByTaskName(taskName); + + const taskInstance = await extractSingleExecutableTask(suitableTasks, taskName); + return taskInstance; +}; + +export const findTasksByTaskName = (taskName: string) => { + const result: RnvTask[] = []; + const ctx = getContext(); + const tasks = getRegisteredTasks(); + Object.values(tasks).forEach((v) => { + const plat = ctx.platform; + if (v.platforms && plat) { + if (!v.platforms.includes(plat)) { + // If we found a task with platform restriction and it does not match current platform we skip it + return; + } + if (ctx.runtime.engine && v.ownerID !== ctx.runtime.engine?.config.packageName) { + // If we already know specific engine to be used and task is not from that engine we skip it + return; + } + } + + if (v.task === taskName) { + result.push(v); + } + }); + return result; +}; + +export const extractSingleExecutableTask = async ( + suitableTasks: RnvTask[], + taskName: string +): Promise => { + if (suitableTasks.length === 1) { + return suitableTasks[0]; + } else if (suitableTasks.length > 1) { + // Found multiple Tasks with same name + let hasPlatformAwareTasks = false; + suitableTasks.forEach((v) => { + if (v.platforms) { + hasPlatformAwareTasks = true; + } + }); + if (hasPlatformAwareTasks) { + // Restart the process now we defined specific platform + await selectPlatformIfRequired(); + const newSuitableTasks = await findTasksByTaskName(taskName); + if (newSuitableTasks.length === 0) { + throw new Error('TODO cannot find any suitable tasks after platform selection'); + } else if (newSuitableTasks.length === 1) { + return newSuitableTasks[0]; + } + } + + throw new Error('TODO interactive selection multiple tasks'); + } + // Found no tasks + // throw new Error('TODO found no tasks'); + return undefined; +}; diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index e8016a0321..df26b4d09d 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -1,6 +1,30 @@ +import { inquirerPrompt } from '../api'; import { getContext } from '../context/provider'; +import { getEngineRunnerByPlatform } from '../engines'; import { RnvTask, RnvTaskMap, RnvTaskOption } from './types'; +export const selectPlatformIfRequired = async () => { + const c = getContext(); + if (!c.platform) { + const taskName = getTaskNameFromCommand(); + const platforms = c.runtime.availablePlatforms; + if (platforms) { + if (platforms.length === 1) { + c.platform = platforms[0]; + } else { + const { platform } = await inquirerPrompt({ + type: 'list', + name: 'platform', + message: `Pick a platform for ${taskName}`, + choices: platforms, + }); + c.platform = platform; + } + c.runtime.engine = getEngineRunnerByPlatform(c.platform); + } + } +}; + export const getTaskNameFromCommand = (): string | undefined => { const c = getContext(); if (!c.command) return undefined; @@ -15,13 +39,21 @@ export const getTaskNameFromCommand = (): string | undefined => { export const generateRnvTaskMap = (taskArr: Array, config: { name: string }) => { const tasks: RnvTaskMap = {}; - taskArr.forEach((taskInstance) => { + taskArr.forEach((taskBlueprint) => { + const taskInstance = { ...taskBlueprint }; const plts = taskInstance.platforms || []; const key = `${config.name}:${plts.join('-')}:${taskInstance.task}`; taskInstance.ownerID = config.name; taskInstance.key = key; tasks[key] = taskInstance; }); + // if (extedTaskMaps) { + // extedTaskMaps.forEach((taskMap) => { + // Object.keys(taskMap).forEach((key) => { + // tasks[key] = taskMap[key]; + // }); + // }); + // } return tasks; }; diff --git a/packages/core/src/tasks/taskRegistry.ts b/packages/core/src/tasks/taskRegistry.ts index 19f1d9a1d5..674225f680 100644 --- a/packages/core/src/tasks/taskRegistry.ts +++ b/packages/core/src/tasks/taskRegistry.ts @@ -13,6 +13,7 @@ const registerRnvTask = async (taskInstance: RnvTask) => { if (taskInstance.key in REGISTERED_TASKS) { throw new Error(`Task key must be unique. Task with key ${taskInstance.key} already exists`); } + REGISTERED_TASKS[taskInstance.key] = taskInstance; }; diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index 054ebf3a14..241697d0b1 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -21,7 +21,10 @@ export type RnvTask = { export type TaskPromptOption = { name: string; - value: string; + value: { + taskName: string; + subTsks?: TaskPromptOption[]; + }; command: string; asArray?: string[]; subCommand?: string; diff --git a/packages/core/src/tasks/wizard.ts b/packages/core/src/tasks/wizard.ts new file mode 100644 index 0000000000..085c91d5c2 --- /dev/null +++ b/packages/core/src/tasks/wizard.ts @@ -0,0 +1,244 @@ +import { findSuitableTask } from './taskFinder'; +import { inquirerPrompt } from '../api'; +import { getContext } from '../context/provider'; +import { chalk, logInfo } from '../logger'; +import { getRegisteredTasks } from './taskRegistry'; +import { initializeTask } from './taskExecutors.js'; +import { getTaskNameFromCommand } from './taskHelpers'; + +type TaskOpt = { + name: string; + value: string; +}; + +export const runInteractiveWizardForSubTasks = async () => { + const ctx = getContext(); + + const tasks = getRegisteredTasks(); + const optionsMap: Record = {}; + Object.values(tasks).forEach((taskInstance) => { + const taskCmdName = taskInstance.task.split(' ')[0]; + + if (taskCmdName === ctx.command) { + if (!optionsMap[taskInstance.task]) { + optionsMap[taskInstance.task] = { + name: `${taskInstance.task} ${chalk().gray(taskInstance.description)}`, + value: taskInstance.task, + }; + } else { + // If multiple tasks with same name we append ... to indicate there are more options coming + optionsMap[taskInstance.task].name = `${taskInstance.task}${chalk().gray('...')}`; + } + } + }); + + const options: TaskOpt[] = Object.values(optionsMap); + + if (options.length > 0) { + if (ctx.subCommand) { + logInfo(`No sub task named ${chalk().red(ctx.subCommand)} found. Will look for available ones instead.`); + ctx.subCommand = null; + // throw new Error('Trying to run interactive wizard for subtasks'); + } + + const { selectedTask } = await inquirerPrompt({ + type: 'list', + // default: defaultCmd, + name: 'selectedTask', + message: `Pick a command`, + choices: options, + pageSize: 15, + logMessage: 'Welcome to the brave new world...', + }); + + const taskArr = selectedTask.split(' '); + ctx.command = taskArr[0]; + ctx.subCommand = taskArr[1] || null; + + const initTask = await findSuitableTask(); + return initializeTask(initTask); + } + + // No subtasks found. let's resort to default wizard + if (ctx.subCommand) { + logInfo(`No tasks found for ${chalk().red(getTaskNameFromCommand())}. Launching wizard...`); + ctx.subCommand = null; + // throw new Error('Trying to run interactive wizard for subtasks'); + } + return runInteractiveWizard(); + + // Engines are bound to platform + // If we don't know the platform yet we need to load all engines + // await selectPlatformIfRequired(); + + // initTask = await findSuitableTask(); + // return initializeTask(initTask); +}; + +export const runInteractiveWizard = async () => { + // for "rnv" we simply load all engines upfront + const ctx = getContext(); + + // const taskOptions = _getWizardOptions(); + // const { options, addendum, defaultCmd } = _getGroupedWizardOptions(taskOptions); + + const tasks = getRegisteredTasks(); + + const options: TaskOpt[] = []; + + Object.values(tasks).forEach((taskInstance) => { + options.push({ + name: `${taskInstance.task} ${chalk().gray(taskInstance.description)}`, + value: taskInstance.task, + }); + }); + + const { selectedTask } = await inquirerPrompt({ + type: 'list', + // default: defaultCmd, + name: 'selectedTask', + message: `Pick a command`, + choices: options, + pageSize: 15, + logMessage: 'Welcome to the brave new world...', + }); + const taskArr = selectedTask.split(' '); + ctx.command = taskArr[0]; + ctx.subCommand = taskArr[1] || null; + + const initTask = await findSuitableTask(); + return initializeTask(initTask); +}; + +// const _getGroupedWizardOptions = (taskInstances: TaskPromptOption[]) => { +// let tasks: TaskPromptOption[]; +// const c = getContext(); +// let defaultCmd: string | undefined = 'new'; +// let addendum = ''; +// if (!c.paths.project.configExists) { +// tasks = taskInstances.filter((v) => v.isGlobalScope && !v.isPrivate).sort(); +// addendum = ' (Not a ReNative project. options will be limited)'; +// } else { +// tasks = taskInstances.filter((v) => !v.isPrivate).sort(); +// defaultCmd = tasks.find((v) => v.value.taskName === 'run')?.name; +// } +// const commonTasks: TaskPromptOption[] = []; +// const ungroupedTasks: TaskPromptOption[] = []; +// const groupedTasks: TaskPromptOption[] = []; +// // const taskGroups: Record = {}; +// tasks.forEach((task) => { +// if (task.subTasks) { +// // if (!taskGroups[task.command]) { +// // const groupTask: TaskPromptOption = { +// // name: `${task.command}...`, +// // command: task.command, +// // value: task.command, +// // providers: [], +// // }; +// // taskGroups[task.command] = groupTask; +// // groupedTasks.push(groupTask); +// // } +// groupedTasks.push(task); +// } else if (task.isPriorityOrder) { +// commonTasks.push(task); +// } else { +// ungroupedTasks.push(task); +// } +// }); + +// const mergedTasks = [ +// inquirerSeparator('─────────── Common tasks ───────────'), +// ...commonTasks, +// inquirerSeparator('─────────── More tasks ─────────────'), +// ...ungroupedTasks, +// ...groupedTasks, +// ]; + +// return { options: mergedTasks, addendum, defaultCmd }; +// }; + +// const _getWizardOptions = () => { +// const tasks = getRegisteredTasks(); + +// console.log( +// 'DLJDLDKD:KD:LDKD', +// Object.values(tasks).map((v) => v.key) +// ); + +// const suitableTasks: Record = {}; +// Object.values(tasks).forEach((taskInstance) => { +// let taskObj: TaskPromptOption = _getTaskOption(_getTaskObj(taskInstance)); +// if (!suitableTasks[taskObj.value.taskName]) { +// suitableTasks[taskObj.value.taskName] = taskObj; +// } else { +// // In case of multiple competing tasks (same task name but coming from different engines) + +// taskObj = suitableTasks[taskObj.value.taskName]; +// if (!taskObj.subTasks) { +// taskObj.subTasks = [ +// { +// ...taskObj, +// }, +// ]; +// } +// taskObj.subTasks.push(taskObj); +// // We try to revert to generic description instead. +// taskObj.name = `${taskObj.value}...`; +// taskObj.description = DEFAULT_TASK_DESCRIPTIONS[taskObj.value.taskName] || taskObj.description; +// // In case of multiple competing tasks we assume they are "commonly used" +// taskObj.isPriorityOrder = true; +// if (taskInstance.ownerID) { +// taskObj.providers.push(taskInstance.ownerID); +// } +// taskObj.value.subTsks = taskObj.subTasks; +// } +// }); +// return Object.values(suitableTasks); +// }; + +// const _getTaskObj = (taskInstance: RnvTask) => { +// const key = taskInstance.task; +// const taskNameArr = key.split(' '); +// let parent: null | string = null; +// if (taskNameArr.length > 1) { +// taskNameArr.pop(); +// parent = taskNameArr.join(' '); +// } + +// return { +// key, +// taskInstance, +// parent, +// }; +// }; + +// const _getTaskOption = ({ taskInstance }: TaskObj, provider?: string): TaskPromptOption => { +// const asArray = taskInstance.task.split(' '); +// const output: TaskPromptOption = { +// value: { taskName: taskInstance.task }, +// command: '', +// name: ``, +// asArray, +// isPriorityOrder: taskInstance.isPriorityOrder, +// description: taskInstance.description, +// isGlobalScope: taskInstance.isGlobalScope, +// isPrivate: taskInstance.isPrivate, +// params: taskInstance.options, +// providers: [], +// }; + +// if (taskInstance.description && taskInstance.description !== '') { +// output.description = taskInstance.description; +// output.name = `${taskInstance.task} ${chalk().grey(`(${taskInstance.description})`)}`; +// } else { +// output.name = taskInstance.task; +// } +// output.command = asArray[0]; +// output.subCommand = asArray[1]; // TODO don't treat options like --myopt as subcommands + +// if (provider) { +// output.providers.push(provider); +// } + +// return output; +// }; diff --git a/packages/engine-core/src/tasks/linking/linker.ts b/packages/engine-core/src/tasks/linking/linker.ts index e4c255b048..caa828500e 100644 --- a/packages/engine-core/src/tasks/linking/linker.ts +++ b/packages/engine-core/src/tasks/linking/linker.ts @@ -19,9 +19,6 @@ const captureLinkablePackages = ( ) => { sourcePackages.forEach((pkg) => { const rnvDepPath = path.join(baseDir, pkg.name); - - // const stat = fsStatSync(rnvDepPath); - // console.log('DJDJDJDDJ', rnvDepPath, fsExistsSync(rnvDepPath)); let isSymLink = false; const nmPathExists = fsExistsSync(rnvDepPath); try { From f55b8c017b93e36bdab54ddd47461d97b71cb508 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 14:26:27 +0100 Subject: [PATCH 121/175] update tasks to createTask func --- packages/engine-core/src/tasks/app/taskAppConfigure.ts | 8 +++----- packages/engine-core/src/tasks/app/taskAppCreate.ts | 8 +++----- packages/engine-core/src/tasks/app/taskAppSwitch.ts | 8 +++----- packages/engine-core/src/tasks/bootstrap/taskNew.ts | 8 +++----- .../engine-core/src/tasks/crypto/taskCryptoDecrypt.ts | 8 +++----- .../engine-core/src/tasks/crypto/taskCryptoEncrypt.ts | 8 +++----- packages/engine-core/src/tasks/global/taskClean.ts | 8 +++----- packages/engine-core/src/tasks/global/taskConfig.ts | 8 +++----- packages/engine-core/src/tasks/global/taskDoctor.ts | 8 +++----- packages/engine-core/src/tasks/global/taskHelp.ts | 8 +++----- packages/engine-core/src/tasks/global/taskInstall.ts | 8 +++----- packages/engine-core/src/tasks/global/taskKill.ts | 8 +++----- packages/engine-core/src/tasks/global/taskStatus.ts | 8 +++----- packages/engine-core/src/tasks/hooks/taskHooksList.ts | 8 +++----- packages/engine-core/src/tasks/hooks/taskHooksPipes.ts | 8 +++----- packages/engine-core/src/tasks/hooks/taskHooksRun.ts | 8 +++----- packages/engine-core/src/tasks/linking/taskLink.ts | 8 +++----- packages/engine-core/src/tasks/linking/taskUnlink.ts | 8 +++----- .../src/tasks/platform/taskPlatformConfigure.ts | 8 +++----- .../engine-core/src/tasks/platform/taskPlatformConnect.ts | 8 +++----- .../engine-core/src/tasks/platform/taskPlatformEject.ts | 8 +++----- .../engine-core/src/tasks/platform/taskPlatformList.ts | 8 +++----- .../engine-core/src/tasks/platform/taskPlatformSetup.ts | 8 +++----- packages/engine-core/src/tasks/plugin/taskPluginAdd.ts | 8 +++----- packages/engine-core/src/tasks/plugin/taskPluginList.ts | 8 +++----- packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts | 8 +++----- .../engine-core/src/tasks/project/taskConfigureSoft.ts | 8 +++----- .../engine-core/src/tasks/project/taskProjectConfigure.ts | 8 +++----- .../engine-core/src/tasks/project/taskProjectUpgrade.ts | 8 +++----- .../src/tasks/telemetry/taskTelemetryDisable.ts | 8 +++----- .../src/tasks/telemetry/taskTelemetryEnable.ts | 8 +++----- .../src/tasks/telemetry/taskTelemetryStatus.ts | 8 +++----- .../engine-core/src/tasks/template/taskTemplateAdd.ts | 8 +++----- .../engine-core/src/tasks/template/taskTemplateApply.ts | 8 +++----- .../engine-core/src/tasks/template/taskTemplateList.ts | 8 +++----- .../engine-core/src/tasks/workspace/taskWorkspaceAdd.ts | 8 +++----- .../src/tasks/workspace/taskWorkspaceConfigure.ts | 8 +++----- .../src/tasks/workspace/taskWorkspaceConnect.ts | 8 +++----- .../engine-core/src/tasks/workspace/taskWorkspaceList.ts | 8 +++----- packages/engine-rn-electron/src/tasks/taskBuild.ts | 8 +++----- packages/engine-rn-electron/src/tasks/taskConfigure.ts | 8 +++----- packages/engine-rn-electron/src/tasks/taskExport.ts | 8 +++----- packages/engine-rn-electron/src/tasks/taskRun.ts | 8 +++----- packages/engine-rn-electron/src/tasks/taskStart.ts | 8 +++----- packages/engine-rn-next/src/tasks/taskBuild.ts | 8 +++----- packages/engine-rn-next/src/tasks/taskConfigure.ts | 8 +++----- packages/engine-rn-next/src/tasks/taskExport.ts | 8 +++----- packages/engine-rn-next/src/tasks/taskRun.ts | 8 +++----- packages/engine-rn-next/src/tasks/taskStart.ts | 8 +++----- packages/engine-rn-web/src/tasks/taskBuild.ts | 8 +++----- packages/engine-rn-web/src/tasks/taskConfigure.ts | 8 +++----- packages/engine-rn-web/src/tasks/taskDebug.ts | 8 +++----- packages/engine-rn-web/src/tasks/taskRun.ts | 8 +++----- packages/engine-rn-web/src/tasks/taskStart.ts | 8 +++----- packages/engine-rn-windows/src/tasks/taskBuild.ts | 8 +++----- packages/engine-rn-windows/src/tasks/taskConfigure.ts | 8 +++----- packages/engine-rn-windows/src/tasks/taskExport.ts | 8 +++----- packages/engine-rn-windows/src/tasks/taskPackage.ts | 8 +++----- packages/engine-rn-windows/src/tasks/taskRun.ts | 8 +++----- packages/integration-docker/src/tasks/taskDockerDeploy.ts | 8 +++----- packages/integration-docker/src/tasks/taskDockerExport.ts | 8 +++----- .../integration-starter/src/tasks/taskSingleCommand.ts | 8 +++----- .../integration-starter/src/tasks/taskStarterHello.ts | 8 +++----- packages/sdk-android/src/tasks/taskConfigure.ts | 8 +++----- packages/sdk-android/src/tasks/taskLog.ts | 8 +++----- packages/sdk-android/src/tasks/taskPackage.ts | 8 +++----- packages/sdk-android/src/tasks/taskRun.ts | 8 +++----- packages/sdk-android/src/tasks/taskSdkConfigure.ts | 8 +++----- packages/sdk-android/src/tasks/taskTargetLaunch.ts | 8 +++----- packages/sdk-android/src/tasks/taskTargetList.ts | 8 +++----- packages/sdk-apple/src/tasks/taskBuild.ts | 8 +++----- packages/sdk-apple/src/tasks/taskConfigure.ts | 8 +++----- packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts | 8 +++----- packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts | 8 +++----- packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts | 8 +++----- packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts | 8 +++----- packages/sdk-apple/src/tasks/taskEject.ts | 8 +++----- packages/sdk-apple/src/tasks/taskExport.ts | 8 +++----- packages/sdk-apple/src/tasks/taskLog.ts | 8 +++----- packages/sdk-apple/src/tasks/taskPackage.ts | 8 +++----- packages/sdk-apple/src/tasks/taskRun.ts | 4 ++-- packages/sdk-apple/src/tasks/taskTargetLaunch.ts | 8 +++----- packages/sdk-apple/src/tasks/taskTargetList.ts | 8 +++----- packages/sdk-kaios/src/tasks/taskTargetLaunch.ts | 8 +++----- packages/sdk-react-native/src/tasks/taskStart.ts | 8 +++----- packages/sdk-tizen/src/tasks/taskSdkConfigure.ts | 8 +++----- packages/sdk-tizen/src/tasks/taskTargetLaunch.ts | 4 ++-- packages/sdk-tizen/src/tasks/taskTargetList.ts | 4 ++-- packages/sdk-webos/src/tasks/taskSdkConfigure.ts | 8 +++----- packages/sdk-webos/src/tasks/taskTargetLaunch.ts | 8 +++----- packages/sdk-webos/src/tasks/taskTargetList.ts | 8 +++----- 91 files changed, 270 insertions(+), 446 deletions(-) diff --git a/packages/engine-core/src/tasks/app/taskAppConfigure.ts b/packages/engine-core/src/tasks/app/taskAppConfigure.ts index 355f348c9f..1ef7ad8456 100644 --- a/packages/engine-core/src/tasks/app/taskAppConfigure.ts +++ b/packages/engine-core/src/tasks/app/taskAppConfigure.ts @@ -18,8 +18,8 @@ import { inquirerPrompt, RnvContext, inquirerSeparator, - RnvTask, RnvTaskName, + createTask, } from '@rnv/core'; const _loadAppConfigIDfromDir = (dirName: string, appConfigsDir: string) => { @@ -146,7 +146,7 @@ const _setAppId = (ctx: RnvContext, appId: string) => { ctx.runtime.appDir = path.join(ctx.paths.project.builds.dir, `${ctx.runtime.appId}_${ctx.platform}`); }; -const Task: RnvTask = { +export default createTask({ description: 'Configure project with specific appConfig', fn: async ({ ctx }) => { ctx.paths.project.appConfigsDirNames = listAppConfigsFoldersSync(true); @@ -206,6 +206,4 @@ const Task: RnvTask = { }, task: RnvTaskName.appConfigure, options: RnvTaskOptionPresets.withConfigure(), -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index 6af7e285b4..121d9c718a 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -12,13 +12,13 @@ import { inquirerPrompt, logInfo, logTask, - RnvTask, ConfigFileApp, RnvTaskName, getContext, + createTask, } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Create new app config', fn: async () => { logTask('taskAppCreate'); @@ -175,6 +175,4 @@ const Task: RnvTask = { }, ], task: RnvTaskName.appCreate, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/app/taskAppSwitch.ts b/packages/engine-core/src/tasks/app/taskAppSwitch.ts index 2b8f278286..ba7a3672cc 100644 --- a/packages/engine-core/src/tasks/app/taskAppSwitch.ts +++ b/packages/engine-core/src/tasks/app/taskAppSwitch.ts @@ -1,7 +1,7 @@ -import { copyRuntimeAssets, generatePlatformAssetsRuntimeConfig, RnvTask, RnvTaskName } from '@rnv/core'; +import { copyRuntimeAssets, createTask, generatePlatformAssetsRuntimeConfig, RnvTaskName } from '@rnv/core'; import { configureFonts } from '@rnv/sdk-utils'; -const Task: RnvTask = { +export default createTask({ description: 'Switch between different app configs in current project', beforeDependsOn: async ({ ctx }) => { ctx.program.opts().appConfigID = true; @@ -13,6 +13,4 @@ const Task: RnvTask = { await configureFonts(); }, task: RnvTaskName.appSwitch, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index 19383365ec..892919ad1b 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -1,5 +1,4 @@ import { - RnvTask, RnvTaskName, updateRenativeConfigs, logToSummary, @@ -7,6 +6,7 @@ import { configureTemplateFiles, generateLocalJsonSchemas, RnvTaskOptions, + createTask, } from '@rnv/core'; import inquiryProjectFolder from './questions/projectFolder'; import inquiryBootstrapQuestions from './questions/bootstrapQuestions'; @@ -34,7 +34,7 @@ import { processChdirToProject, } from './questionHelpers'; -const Task: RnvTask = { +export default createTask({ description: 'Create new ReNative project', fn: async () => { // Initialize Project @@ -95,6 +95,4 @@ const Task: RnvTask = { ], isGlobalScope: true, isPriorityOrder: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index 4723fde62d..698788c7a4 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -13,8 +13,8 @@ import { fsReadFileSync, inquirerPrompt, RnvContext, - RnvTask, RnvTaskName, + createTask, } from '@rnv/core'; import { getEnvExportCmd, getEnvVar } from './common'; @@ -44,7 +44,7 @@ const _unzipAndCopy = async ( logSuccess(`Files succesfully extracted into ${destFolder}`); }; -const Task: RnvTask = { +export default createTask({ description: 'Decrypt encrypted project files into local `~///..`', fn: async ({ ctx }) => { const crypto = ctx.files.project.config?.crypto; @@ -198,6 +198,4 @@ and we will try to help! } }, task: RnvTaskName.cryptoDecrypt, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index 7185499e8e..a7393bd9f0 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -17,9 +17,9 @@ import { inquirerPrompt, RnvContext, copyFileSync, - RnvTask, RnvTaskName, getContext, + createTask, } from '@rnv/core'; import { statSync } from 'fs'; import { getEnvExportCmd, getEnvVar } from './common'; @@ -171,7 +171,7 @@ Make sure you take into account special characters that might need to be escaped } }; -const Task: RnvTask = { +export default createTask({ description: 'Encrypts secure files from `~///..` to project', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -230,6 +230,4 @@ const Task: RnvTask = { } }, task: RnvTaskName.cryptoEncrypt, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/global/taskClean.ts b/packages/engine-core/src/tasks/global/taskClean.ts index b1c8e67b41..2e59ea52e4 100644 --- a/packages/engine-core/src/tasks/global/taskClean.ts +++ b/packages/engine-core/src/tasks/global/taskClean.ts @@ -10,8 +10,8 @@ import { executeAsync, isSystemWin, inquirerPrompt, - RnvTask, RnvTaskName, + createTask, } from '@rnv/core'; function clearWindowsCacheFiles() { @@ -40,7 +40,7 @@ function clearWindowsCacheFiles() { return true; } -const Task: RnvTask = { +export default createTask({ description: 'Automatically removes all node_modules and lock in your project and its dependencies', fn: async ({ ctx }) => { const skipQuestion = ctx.program.opts().ci; @@ -207,6 +207,4 @@ const Task: RnvTask = { }, task: RnvTaskName.clean, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/global/taskConfig.ts b/packages/engine-core/src/tasks/global/taskConfig.ts index 42dc96cd47..8f085c87d5 100644 --- a/packages/engine-core/src/tasks/global/taskConfig.ts +++ b/packages/engine-core/src/tasks/global/taskConfig.ts @@ -1,6 +1,6 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskName, createTask } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Display RNV config', dependsOn: [RnvTaskName.configureSoft], fn: async ({ ctx }) => { @@ -8,6 +8,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.config, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/global/taskDoctor.ts b/packages/engine-core/src/tasks/global/taskDoctor.ts index 69ba4fd979..35101eea3a 100644 --- a/packages/engine-core/src/tasks/global/taskDoctor.ts +++ b/packages/engine-core/src/tasks/global/taskDoctor.ts @@ -6,8 +6,8 @@ import { readObjectSync, fsExistsSync, validateRenativeProjectSchema, - RnvTask, RnvTaskName, + createTask, } from '@rnv/core'; const configTargets = [ @@ -18,7 +18,7 @@ const configTargets = [ 'appConfig.configs', ]; -const Task: RnvTask = { +export default createTask({ description: 'Checks validity and config health of your project', dependsOn: [RnvTaskName.appConfigure], beforeDependsOn: async () => { @@ -86,6 +86,4 @@ const Task: RnvTask = { }, task: RnvTaskName.doctor, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/global/taskHelp.ts b/packages/engine-core/src/tasks/global/taskHelp.ts index 7b98907118..9b3c9c1a76 100644 --- a/packages/engine-core/src/tasks/global/taskHelp.ts +++ b/packages/engine-core/src/tasks/global/taskHelp.ts @@ -3,12 +3,12 @@ import { logToSummary, RnvTaskOptionPresets, getRegisteredEngines, - RnvTask, + createTask, RnvTaskName, generateStringFromTaskOption, } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Display generic help', fn: async () => { // PARAMS @@ -42,6 +42,4 @@ ${optsString} task: RnvTaskName.help, isGlobalScope: true, isPriorityOrder: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 0c45af7d44..dc024e9767 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -1,7 +1,7 @@ -import { areNodeModulesInstalled, logInfo, RnvTask, RnvTaskName } from '@rnv/core'; +import { areNodeModulesInstalled, logInfo, createTask, RnvTaskName } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; -const Task: RnvTask = { +export default createTask({ description: 'Install package node_modules via yarn or npm', fn: async ({ ctx }) => { if (ctx.program.opts().skipDependencyCheck) return true; @@ -20,6 +20,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.install, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/global/taskKill.ts b/packages/engine-core/src/tasks/global/taskKill.ts index cc959c87eb..f77087c0dd 100644 --- a/packages/engine-core/src/tasks/global/taskKill.ts +++ b/packages/engine-core/src/tasks/global/taskKill.ts @@ -1,7 +1,7 @@ import { PlatformKey, RnvContext, - RnvTask, + createTask, RnvTaskName, chalk, configureRuntimeDefaults, @@ -12,7 +12,7 @@ import { import { checkPortInUse } from '@rnv/sdk-utils'; import killPort from 'kill-port'; -const Task: RnvTask = { +export default createTask({ description: 'Kills all the processes related to this project', fn: async ({ ctx, taskName, originTaskName }) => { const usedPorts: RnvContext['runtime']['supportedPlatforms'] = []; @@ -63,6 +63,4 @@ ${usedPorts.map((v) => chalk().bold(`> ${v.port} (${v.platform})`)).join('\n')}` }, task: RnvTaskName.kill, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/global/taskStatus.ts b/packages/engine-core/src/tasks/global/taskStatus.ts index 5425af1d09..bcf4a6723d 100644 --- a/packages/engine-core/src/tasks/global/taskStatus.ts +++ b/packages/engine-core/src/tasks/global/taskStatus.ts @@ -1,12 +1,10 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Show current info about the project', fn: async () => { return true; }, task: RnvTaskName.status, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/hooks/taskHooksList.ts b/packages/engine-core/src/tasks/hooks/taskHooksList.ts index 40040929ff..3bad7bb5b2 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksList.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksList.ts @@ -1,6 +1,6 @@ -import { logToSummary, generateOptions, buildHooks, RnvTask, RnvTaskName } from '@rnv/core'; +import { logToSummary, generateOptions, buildHooks, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Get list of all available hooks', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -21,6 +21,4 @@ const Task: RnvTask = { }, task: RnvTaskName.hooksList, forceBuildHookRebuild: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts index ff31e404dd..2b7a44267b 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksPipes.ts @@ -1,6 +1,6 @@ -import { logRaw, generateOptions, buildHooks, RnvTask, RnvTaskName } from '@rnv/core'; +import { logRaw, generateOptions, buildHooks, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Get the list of all available pipes', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -10,6 +10,4 @@ const Task: RnvTask = { logRaw(`Pipes:\n${pipeOpts.asString}`); }, task: RnvTaskName.hooksPipes, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index ba3e566da1..044718f6c1 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -4,12 +4,12 @@ import { fsExistsSync, inquirerPrompt, logInfo, - RnvTask, + createTask, RnvTaskName, RnvTaskOptions, } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Run specific build hook', // dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx, taskName, originTaskName }) => { @@ -57,6 +57,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.exeMethod], forceBuildHookRebuild: true, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/linking/taskLink.ts b/packages/engine-core/src/tasks/linking/taskLink.ts index 9a0386ae3e..0a9efc7ef0 100644 --- a/packages/engine-core/src/tasks/linking/taskLink.ts +++ b/packages/engine-core/src/tasks/linking/taskLink.ts @@ -3,7 +3,7 @@ import { fsExistsSync, fsRenameSync, fsSymlinkSync, - RnvTask, + createTask, RnvTaskName, mkdirSync, chalk, @@ -44,7 +44,7 @@ const _linkPackage = (pkg: LinkablePackage) => { const runtimeLibs = ['@rnv/renative']; -const Task: RnvTask = { +export default createTask({ description: 'Links development version or renative with this project', fn: async () => { const linkablePackages = traverseTargetProject(getSourceDir()); @@ -90,6 +90,4 @@ const Task: RnvTask = { options: [{ key: 'dir', description: 'Source folder to be linked into project', isValueType: true }], isGlobalScope: true, ignoreEngines: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/linking/taskUnlink.ts b/packages/engine-core/src/tasks/linking/taskUnlink.ts index 7f157d3b38..bb6c631e4a 100644 --- a/packages/engine-core/src/tasks/linking/taskUnlink.ts +++ b/packages/engine-core/src/tasks/linking/taskUnlink.ts @@ -1,4 +1,4 @@ -import { logInfo, fsRenameSync, fsUnlinkSync, RnvTask, RnvTaskName, chalk } from '@rnv/core'; +import { logInfo, fsRenameSync, fsUnlinkSync, createTask, RnvTaskName, chalk } from '@rnv/core'; import { getSourceDir, traverseTargetProject } from './linker'; import { LinkablePackage } from './types'; @@ -17,7 +17,7 @@ const _unlinkPackage = (pkg: LinkablePackage) => { } }; -const Task: RnvTask = { +export default createTask({ description: 'Replaces rnv version in project with original node_modules version', fn: async () => { const linkablePackages = traverseTargetProject(getSourceDir()); @@ -43,6 +43,4 @@ const Task: RnvTask = { task: RnvTaskName.unlink, isGlobalScope: true, ignoreEngines: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 331df32d3e..4c11901591 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -10,7 +10,7 @@ import { injectPlatformDependencies, configureRuntimeDefaults, executeTask, - RnvTask, + createTask, RnvTaskName, installPackageDependencies, overrideTemplatePlugins, @@ -18,7 +18,7 @@ import { import { isBuildSchemeSupported } from '../../buildSchemes'; import { configureFonts } from '@rnv/sdk-utils'; -const Task: RnvTask = { +export default createTask({ description: 'Low-level task used by engines to prepare platformBuilds folder', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx, taskName, originTaskName }) => { @@ -66,6 +66,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.platformConfigure, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts index f5a01073dd..687f14283f 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts @@ -8,11 +8,11 @@ import { generatePlatformChoices, inquirerPrompt, PlatformKey, - RnvTask, + createTask, RnvTaskName, } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Connect platform template back to rnv', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -81,6 +81,4 @@ const Task: RnvTask = { ); }, task: RnvTaskName.platformConnect, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts index b5812e5667..f476635897 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts @@ -8,11 +8,11 @@ import { ejectPlatform, inquirerPrompt, PlatformKey, - RnvTask, + createTask, RnvTaskName, } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Copy all platform files directly to project', fn: async ({ ctx }) => { const configOriginal = ctx.files.project.config_original; @@ -64,6 +64,4 @@ TIP: You can select options with ${chalk().bold('SPACE')} key before pressing EN } }, task: RnvTaskName.platformEject, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformList.ts b/packages/engine-core/src/tasks/platform/taskPlatformList.ts index e664cc0d6f..b9e7f2e038 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformList.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformList.ts @@ -1,6 +1,6 @@ -import { chalk, logToSummary, generatePlatformChoices, RnvTask, RnvTaskName } from '@rnv/core'; +import { chalk, logToSummary, generatePlatformChoices, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'List all available platforms', dependsOn: [RnvTaskName.projectConfigure], fn: async () => { @@ -9,6 +9,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.platformList, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts index 12fef2e370..541a56347a 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts @@ -1,6 +1,6 @@ -import { updateProjectPlatforms, inquirerPrompt, RnvTask, RnvTaskName } from '@rnv/core'; +import { updateProjectPlatforms, inquirerPrompt, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Allows you to change supportedPlatforms for your project', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -19,6 +19,4 @@ const Task: RnvTask = { updateProjectPlatforms(inputSupportedPlatforms); }, task: RnvTaskName.platformSetup, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index 9a026d4927..1f1ea72a95 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -8,12 +8,12 @@ import { getApi, inquirerPrompt, RenativeConfigPlugin, - RnvTask, + createTask, RnvTaskName, } from '@rnv/core'; import { getPluginList } from '../../plugins'; -const Task: RnvTask = { +export default createTask({ description: 'Add selected plugin to the project', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx, taskName, originTaskName }) => { @@ -95,6 +95,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.pluginAdd, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/plugin/taskPluginList.ts b/packages/engine-core/src/tasks/plugin/taskPluginList.ts index 7db6d19336..2a2b2903ad 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginList.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginList.ts @@ -1,7 +1,7 @@ -import { logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; +import { logToSummary, createTask, RnvTaskName } from '@rnv/core'; import { getPluginList } from '../../plugins'; -const Task: RnvTask = { +export default createTask({ description: 'Show list of all available plugins', dependsOn: [RnvTaskName.projectConfigure], fn: async () => { @@ -10,6 +10,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.pluginList, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts index a072b01f31..d5c36cc3aa 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginUpdate.ts @@ -1,6 +1,6 @@ -import { writeFileSync, logSuccess, logWarning, inquirerPrompt, RnvTask, RnvTaskName } from '@rnv/core'; +import { writeFileSync, logSuccess, logWarning, inquirerPrompt, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Update specific plugin to latest supported version (rnv)', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -32,6 +32,4 @@ const Task: RnvTask = { } }, task: RnvTaskName.pluginUpdate, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts index f550be95a9..72b045c968 100644 --- a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts @@ -1,7 +1,7 @@ -import { executeTask, configureRuntimeDefaults, isPlatformSupported, RnvTask, RnvTaskName } from '@rnv/core'; +import { executeTask, configureRuntimeDefaults, isPlatformSupported, createTask, RnvTaskName } from '@rnv/core'; import { isBuildSchemeSupported } from '../../buildSchemes'; -const Task: RnvTask = { +export default createTask({ description: 'Configure system and project without recreating files (used for --only)', fn: async ({ taskName, originTaskName }) => { await configureRuntimeDefaults(); @@ -22,6 +22,4 @@ const Task: RnvTask = { }, task: RnvTaskName.configureSoft, isPrivate: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index e700939605..2150fbe8e4 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -22,7 +22,7 @@ import { initializeTask, findSuitableTask, generatePlatformAssetsRuntimeConfig, - RnvTask, + createTask, generateLocalJsonSchemas, RnvTaskName, getContext, @@ -56,7 +56,7 @@ const configurePlatformBuilds = async () => { } }; -const Task: RnvTask = { +export default createTask({ description: 'Configure current project', fn: async ({ ctx, taskName, originTaskName, parentTaskName }) => { const { runtime, program } = ctx; @@ -154,6 +154,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.projectConfigure, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index 29b24b1941..5302fd37cd 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -9,7 +9,7 @@ import { listAndSelectNpmVersion, fsExistsSync, readObjectSync, - RnvTask, + createTask, RnvTaskName, NpmPackageFile, ConfigFileProject, @@ -17,7 +17,7 @@ import { } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; -const Task: RnvTask = { +export default createTask({ description: 'Upgrade or downgrade RNV dependencies in your ReNative project', fn: async ({ ctx, taskName, originTaskName }) => { const { paths, files } = ctx; @@ -77,6 +77,4 @@ const Task: RnvTask = { }, task: RnvTaskName.projectUpgrade, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts index 8e615999f3..4430aa427d 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryDisable.ts @@ -1,6 +1,6 @@ -import { chalk, logToSummary, RnvTask, RnvTaskName, writeFileSync } from '@rnv/core'; +import { chalk, logToSummary, createTask, RnvTaskName, writeFileSync } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Disables rnv telemetry on your machine', fn: async ({ ctx }) => { const { config } = ctx.files.dotRnv; @@ -19,6 +19,4 @@ const Task: RnvTask = { }, task: RnvTaskName.telemetryDisable, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts index 235d72a6e5..2cfd7787df 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryEnable.ts @@ -1,6 +1,6 @@ -import { chalk, logToSummary, RnvTask, RnvTaskName, writeFileSync } from '@rnv/core'; +import { chalk, logToSummary, createTask, RnvTaskName, writeFileSync } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Enables rnv telemetry on your machine', fn: async ({ ctx }) => { const { config } = ctx.files.dotRnv; @@ -19,6 +19,4 @@ const Task: RnvTask = { }, task: RnvTaskName.telemetryEnable, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts index cc87a6d02d..c085aa7ef7 100644 --- a/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts +++ b/packages/engine-core/src/tasks/telemetry/taskTelemetryStatus.ts @@ -1,6 +1,6 @@ -import { chalk, logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; +import { chalk, logToSummary, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Show current rnv telemetry status on your machine', fn: async ({ ctx }) => { const disableTelemetry = ctx.files.dotRnv.config?.disableTelemetry; @@ -26,6 +26,4 @@ const Task: RnvTask = { }, task: RnvTaskName.telemetryStatus, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts index a0d17222be..5eb60f6b59 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts @@ -4,7 +4,7 @@ import { generateBuildConfig, RnvContext, inquirerPrompt, - RnvTask, + createTask, RnvTaskName, } from '@rnv/core'; import { getTemplateOptions } from '../../templates'; @@ -31,7 +31,7 @@ export const _addTemplate = (c: RnvContext, template: string) => { _writeObjectSync(c.paths.project.config, cnf); }; -const Task: RnvTask = { +export default createTask({ description: 'Install additional template to the project', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -49,6 +49,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.templateAdd, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 4e941c8a2d..712bac5850 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -3,11 +3,11 @@ import { getInstalledTemplateOptions, executeTask, inquirerPrompt, - RnvTask, + createTask, RnvTaskName, } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Reset project to specific template', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx, taskName, originTaskName }) => { @@ -40,6 +40,4 @@ const Task: RnvTask = { return true; }, task: RnvTaskName.templateApply, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts index 56769c94c6..7a9187140a 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateList.ts @@ -1,7 +1,7 @@ -import { logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; +import { logToSummary, createTask, RnvTaskName } from '@rnv/core'; import { getTemplateOptions } from '../../templates'; -const Task: RnvTask = { +export default createTask({ description: 'Show list of available templates', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -11,6 +11,4 @@ const Task: RnvTask = { }, task: RnvTaskName.templateList, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts index 3408b7d27d..53864b99b5 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceAdd.ts @@ -1,7 +1,7 @@ import path from 'path'; -import { inquirerPrompt, createWorkspace, fsExistsSync, RnvTask, RnvTaskName } from '@rnv/core'; +import { inquirerPrompt, createWorkspace, fsExistsSync, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Add new workspace', dependsOn: [RnvTaskName.projectConfigure], fn: async () => { @@ -38,6 +38,4 @@ const Task: RnvTask = { }, task: RnvTaskName.workspaceAdd, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts index 4bb00f7c37..766ffbef6d 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConfigure.ts @@ -9,13 +9,13 @@ import { logWarning, logDebug, logInfo, - RnvTask, + createTask, RnvTaskName, RnvFileName, } from '@rnv/core'; import { writeFileSync } from 'fs'; -const Task: RnvTask = { +export default createTask({ description: 'Preconfigures your current workspace defined via "workspaceID" prop in renative config file', fn: async ({ ctx }) => { const { paths, files } = ctx; @@ -81,6 +81,4 @@ const Task: RnvTask = { }, task: RnvTaskName.workspaceConfigure, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts index be59e68cf7..d587014b9a 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceConnect.ts @@ -1,6 +1,6 @@ -import { inquirerPrompt, logRaw, getWorkspaceConnectionString, RnvTask, RnvTaskName } from '@rnv/core'; +import { inquirerPrompt, logRaw, getWorkspaceConnectionString, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Connect project with selected workspace', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -20,6 +20,4 @@ const Task: RnvTask = { }, task: RnvTaskName.workspaceConnect, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts index d55f1de21c..776e63ab58 100644 --- a/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts +++ b/packages/engine-core/src/tasks/workspace/taskWorkspaceList.ts @@ -1,6 +1,6 @@ -import { generateOptions, chalk, logToSummary, RnvTask, RnvTaskName } from '@rnv/core'; +import { generateOptions, chalk, logToSummary, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Show list of all available workspaces', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -18,6 +18,4 @@ const Task: RnvTask = { }, task: RnvTaskName.workspaceList, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/engine-rn-electron/src/tasks/taskBuild.ts b/packages/engine-rn-electron/src/tasks/taskBuild.ts index 97bb9752d6..ad812e299c 100644 --- a/packages/engine-rn-electron/src/tasks/taskBuild.ts +++ b/packages/engine-rn-electron/src/tasks/taskBuild.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { buildElectron } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Build project binary', dependsOn: [RnvTaskName.configure], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-electron/src/tasks/taskConfigure.ts b/packages/engine-rn-electron/src/tasks/taskConfigure.ts index f3dd967e1c..fb49db7ed5 100644 --- a/packages/engine-rn-electron/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-electron/src/tasks/taskConfigure.ts @@ -1,8 +1,8 @@ -import { copySharedPlatforms, configureEntryPoint, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { copySharedPlatforms, configureEntryPoint, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { configureElectronProject } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async () => { @@ -13,6 +13,4 @@ const Task: RnvTask = { task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-electron/src/tasks/taskExport.ts b/packages/engine-rn-electron/src/tasks/taskExport.ts index 179964ffa6..6b4dec6268 100644 --- a/packages/engine-rn-electron/src/tasks/taskExport.ts +++ b/packages/engine-rn-electron/src/tasks/taskExport.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { exportElectron } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Export the app into deployable binary', dependsOn: [RnvTaskName.build], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-electron/src/tasks/taskRun.ts b/packages/engine-rn-electron/src/tasks/taskRun.ts index d1878fb41b..d60fce2a31 100644 --- a/packages/engine-rn-electron/src/tasks/taskRun.ts +++ b/packages/engine-rn-electron/src/tasks/taskRun.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { runElectron } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Run your electron app on your machine', dependsOn: [RnvTaskName.configure], fn: async () => { @@ -12,6 +12,4 @@ const Task: RnvTask = { isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-electron/src/tasks/taskStart.ts b/packages/engine-rn-electron/src/tasks/taskStart.ts index 8949909207..949b6e5413 100644 --- a/packages/engine-rn-electron/src/tasks/taskStart.ts +++ b/packages/engine-rn-electron/src/tasks/taskStart.ts @@ -1,8 +1,8 @@ import { runWebpackServer } from '@rnv/sdk-webpack'; -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Starts bundler / server', dependsOn: [RnvTaskName.configure], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-next/src/tasks/taskBuild.ts b/packages/engine-rn-next/src/tasks/taskBuild.ts index b853469132..d86b2ed4ad 100644 --- a/packages/engine-rn-next/src/tasks/taskBuild.ts +++ b/packages/engine-rn-next/src/tasks/taskBuild.ts @@ -1,8 +1,8 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { buildWebNext } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Build project binary', dependsOn: [RnvTaskName.configure], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-next/src/tasks/taskConfigure.ts b/packages/engine-rn-next/src/tasks/taskConfigure.ts index 6a9cf3b77c..6a699176e9 100644 --- a/packages/engine-rn-next/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-next/src/tasks/taskConfigure.ts @@ -1,8 +1,8 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { configureNextIfRequired } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-next/src/tasks/taskExport.ts b/packages/engine-rn-next/src/tasks/taskExport.ts index 7b969791f2..87ae6ffaa5 100644 --- a/packages/engine-rn-next/src/tasks/taskExport.ts +++ b/packages/engine-rn-next/src/tasks/taskExport.ts @@ -1,8 +1,8 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { exportWebNext } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Export the app into deployable binary', dependsOn: [RnvTaskName.configure], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-next/src/tasks/taskRun.ts b/packages/engine-rn-next/src/tasks/taskRun.ts index 5aa73d6bcf..8fff1086ee 100644 --- a/packages/engine-rn-next/src/tasks/taskRun.ts +++ b/packages/engine-rn-next/src/tasks/taskRun.ts @@ -1,8 +1,8 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, RnvTaskName, createTask } from '@rnv/core'; import { runWebNext } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Run your app in browser', dependsOn: [RnvTaskName.configure], fn: async ({ ctx }) => { @@ -13,6 +13,4 @@ const Task: RnvTask = { isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-next/src/tasks/taskStart.ts b/packages/engine-rn-next/src/tasks/taskStart.ts index 51d5b8929a..e5977b3082 100644 --- a/packages/engine-rn-next/src/tasks/taskStart.ts +++ b/packages/engine-rn-next/src/tasks/taskStart.ts @@ -1,9 +1,9 @@ -import { logError, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { logError, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { runWebNext } from '../sdk/runner'; import { openBrowser, waitForHost } from '@rnv/sdk-utils'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Starts bundler / server', dependsOn: [RnvTaskName.configure], fn: async ({ ctx }) => { @@ -16,6 +16,4 @@ const Task: RnvTask = { task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-web/src/tasks/taskBuild.ts b/packages/engine-rn-web/src/tasks/taskBuild.ts index d514d37c8f..a4f56d228e 100644 --- a/packages/engine-rn-web/src/tasks/taskBuild.ts +++ b/packages/engine-rn-web/src/tasks/taskBuild.ts @@ -1,11 +1,11 @@ -import { logErrorPlatform, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { logErrorPlatform, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { buildWeb } from '@rnv/sdk-webpack'; import { buildTizenProject } from '@rnv/sdk-tizen'; import { buildWebOSProject } from '@rnv/sdk-webos'; import { buildKaiOSProject } from '@rnv/sdk-kaios'; import { EnginePlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Build project binary', dependsOn: [RnvTaskName.configure], fn: async ({ ctx }) => { @@ -33,6 +33,4 @@ const Task: RnvTask = { task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: EnginePlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-web/src/tasks/taskConfigure.ts b/packages/engine-rn-web/src/tasks/taskConfigure.ts index cf7e13cd79..ebe4c73e2b 100644 --- a/packages/engine-rn-web/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-web/src/tasks/taskConfigure.ts @@ -3,7 +3,7 @@ import { copySharedPlatforms, RnvTaskOptionPresets, configureEntryPoint, - RnvTask, + createTask, RnvTaskName, } from '@rnv/core'; import { configureWebProject, configureChromecastProject } from '@rnv/sdk-webpack'; @@ -12,7 +12,7 @@ import { configureWebOSProject } from '@rnv/sdk-webos'; import { configureTizenProject } from '@rnv/sdk-tizen'; import { EnginePlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async ({ ctx }) => { @@ -39,6 +39,4 @@ const Task: RnvTask = { task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: EnginePlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-web/src/tasks/taskDebug.ts b/packages/engine-rn-web/src/tasks/taskDebug.ts index 17415d1d4c..f03577cff0 100644 --- a/packages/engine-rn-web/src/tasks/taskDebug.ts +++ b/packages/engine-rn-web/src/tasks/taskDebug.ts @@ -1,12 +1,10 @@ -import { executeAsync, RnvTask, RnvTaskName } from '@rnv/core'; +import { executeAsync, createTask, RnvTaskName } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Debug your app on target device or emulator', fn: async () => { return executeAsync('npx weinre --boundHost -all-'); }, task: RnvTaskName.debug, platforms: ['web', 'webtv', 'tizen'], -}; - -export default Task; +}); diff --git a/packages/engine-rn-web/src/tasks/taskRun.ts b/packages/engine-rn-web/src/tasks/taskRun.ts index 4f5c0bf64e..d97146098c 100644 --- a/packages/engine-rn-web/src/tasks/taskRun.ts +++ b/packages/engine-rn-web/src/tasks/taskRun.ts @@ -8,7 +8,7 @@ import { getPlatformProjectDir, writeCleanFile, executeTask, - RnvTask, + createTask, getAppFolder, fsExistsSync, getAppConfigBuildsFolder, @@ -71,7 +71,7 @@ const _configureHostedIfRequired = async (c: RnvContext) => { } }; -const Task: RnvTask = { +export default createTask({ description: 'Run your app in browser', dependsOn: [RnvTaskName.configure], fn: async ({ ctx, taskName, originTaskName }) => { @@ -114,6 +114,4 @@ const Task: RnvTask = { isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: EnginePlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-web/src/tasks/taskStart.ts b/packages/engine-rn-web/src/tasks/taskStart.ts index 8ce5380513..d73ccb9802 100644 --- a/packages/engine-rn-web/src/tasks/taskStart.ts +++ b/packages/engine-rn-web/src/tasks/taskStart.ts @@ -1,9 +1,9 @@ import { runWebpackServer } from '@rnv/sdk-webpack'; -import { getConfigProp, logErrorPlatform, logError, RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { getConfigProp, logErrorPlatform, logError, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { REMOTE_DEBUGGER_ENABLED_PLATFORMS, openBrowser, waitForHost } from '@rnv/sdk-utils'; import { EnginePlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Starts bundler / server', dependsOn: [RnvTaskName.configure], fn: async ({ ctx }) => { @@ -38,6 +38,4 @@ const Task: RnvTask = { task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: EnginePlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-windows/src/tasks/taskBuild.ts b/packages/engine-rn-windows/src/tasks/taskBuild.ts index 5cfbbe8869..e9305c7462 100644 --- a/packages/engine-rn-windows/src/tasks/taskBuild.ts +++ b/packages/engine-rn-windows/src/tasks/taskBuild.ts @@ -1,8 +1,8 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { ruWindowsProject } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Build project binary', dependsOn: [RnvTaskName.package], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-windows/src/tasks/taskConfigure.ts b/packages/engine-rn-windows/src/tasks/taskConfigure.ts index e4abd843c9..4c983a6eac 100644 --- a/packages/engine-rn-windows/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-windows/src/tasks/taskConfigure.ts @@ -1,8 +1,8 @@ -import { copySharedPlatforms, RnvTaskOptionPresets, configureEntryPoint, RnvTask, RnvTaskName } from '@rnv/core'; +import { copySharedPlatforms, RnvTaskOptionPresets, configureEntryPoint, createTask, RnvTaskName } from '@rnv/core'; import { configureWindowsProject } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async () => { @@ -13,6 +13,4 @@ const Task: RnvTask = { task: RnvTaskName.configure, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-windows/src/tasks/taskExport.ts b/packages/engine-rn-windows/src/tasks/taskExport.ts index 74215565fd..8ab4c2aac2 100644 --- a/packages/engine-rn-windows/src/tasks/taskExport.ts +++ b/packages/engine-rn-windows/src/tasks/taskExport.ts @@ -1,9 +1,9 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { clearWindowsTemporaryFiles, packageWindowsApp } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; // TODO Implement export windows app (currently it only seems to be available through VS Studio itself...) -const Task: RnvTask = { +export default createTask({ description: 'Export the app into deployable binary', dependsOn: [RnvTaskName.build], fn: async () => { @@ -13,6 +13,4 @@ const Task: RnvTask = { task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-windows/src/tasks/taskPackage.ts b/packages/engine-rn-windows/src/tasks/taskPackage.ts index f553950331..eaa8e93555 100644 --- a/packages/engine-rn-windows/src/tasks/taskPackage.ts +++ b/packages/engine-rn-windows/src/tasks/taskPackage.ts @@ -1,8 +1,8 @@ -import { RnvTaskOptionPresets, getConfigProp, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, getConfigProp, createTask, RnvTaskName } from '@rnv/core'; import { SdkPlatforms } from '../sdk/constants'; import { packageBundleForWindows } from '../sdk'; -const Task: RnvTask = { +export default createTask({ description: 'Package source files into bundle', dependsOn: [RnvTaskName.configure], fn: async () => { @@ -15,6 +15,4 @@ const Task: RnvTask = { task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/engine-rn-windows/src/tasks/taskRun.ts b/packages/engine-rn-windows/src/tasks/taskRun.ts index 60ce31702b..3f0b022201 100644 --- a/packages/engine-rn-windows/src/tasks/taskRun.ts +++ b/packages/engine-rn-windows/src/tasks/taskRun.ts @@ -1,9 +1,9 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; import { clearWindowsTemporaryFiles, ruWindowsProject } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; -const Task: RnvTask = { +export default createTask({ description: 'Run your app in a window on desktop', dependsOn: [RnvTaskName.configure], fn: async ({ originTaskName }) => { @@ -16,6 +16,4 @@ const Task: RnvTask = { isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/integration-docker/src/tasks/taskDockerDeploy.ts b/packages/integration-docker/src/tasks/taskDockerDeploy.ts index 5406df4dfe..b579ec2b40 100644 --- a/packages/integration-docker/src/tasks/taskDockerDeploy.ts +++ b/packages/integration-docker/src/tasks/taskDockerDeploy.ts @@ -1,7 +1,7 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import Docker from '../docker'; -const Task: RnvTask = { +export default createTask({ dependsOn: [RnvTaskName.export], description: 'Deploys your project to docker image', fn: async () => { @@ -10,6 +10,4 @@ const Task: RnvTask = { }, task: 'docker deploy', platforms: ['web'], -}; - -export default Task; +}); diff --git a/packages/integration-docker/src/tasks/taskDockerExport.ts b/packages/integration-docker/src/tasks/taskDockerExport.ts index b13d436d31..69c737e02d 100644 --- a/packages/integration-docker/src/tasks/taskDockerExport.ts +++ b/packages/integration-docker/src/tasks/taskDockerExport.ts @@ -1,7 +1,7 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import Docker from '../docker'; -const Task: RnvTask = { +export default createTask({ description: 'Exports your project to docker image', // TODO: we need to do this differently // Project neds to define pipeline of tasks instead of integration @@ -12,6 +12,4 @@ const Task: RnvTask = { }, task: 'docker export', platforms: ['web'], -}; - -export default Task; +}); diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index 1e5de8051a..ecc3242339 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -1,6 +1,6 @@ -import { logSuccess, RnvTask } from '@rnv/core'; +import { createTask, logSuccess } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Prints hello message', fn: async ({ ctx }) => { //TODO: switch to typed options once Context generics are supported @@ -10,6 +10,4 @@ const Task: RnvTask = { }, task: 'starter-single-command', options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], -}; - -export default Task; +}); diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index ea698e3d5e..d2cac8720c 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -1,6 +1,6 @@ -import { logSuccess, RnvTask } from '@rnv/core'; +import { createTask, logSuccess } from '@rnv/core'; -const Task: RnvTask = { +export default createTask({ description: 'Prints hello message', fn: async ({ ctx }) => { //TODO: switch to typed options once Context generics are supported @@ -10,6 +10,4 @@ const Task: RnvTask = { }, task: 'starter hello', options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskConfigure.ts b/packages/sdk-android/src/tasks/taskConfigure.ts index 01c3f9e7bc..55bd790860 100644 --- a/packages/sdk-android/src/tasks/taskConfigure.ts +++ b/packages/sdk-android/src/tasks/taskConfigure.ts @@ -1,10 +1,10 @@ -import { configureEntryPoint, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { configureEntryPoint, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { configureGradleProject } from '../runner'; import { jetifyIfRequired } from '../jetifier'; import { configureFontSources } from '@rnv/sdk-react-native'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configure current project', fn: async () => { await configureEntryPoint(); @@ -16,6 +16,4 @@ const Task: RnvTask = { dependsOn: [RnvTaskName.platformConfigure], options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskLog.ts b/packages/sdk-android/src/tasks/taskLog.ts index c80a5b5b38..c6c5bf81ce 100644 --- a/packages/sdk-android/src/tasks/taskLog.ts +++ b/packages/sdk-android/src/tasks/taskLog.ts @@ -1,9 +1,9 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { runAndroidLog } from '../runner'; import { checkAndConfigureAndroidSdks } from '../installer'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Attach logger to device or emulator and print out logs', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -13,6 +13,4 @@ const Task: RnvTask = { task: RnvTaskName.log, platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskPackage.ts b/packages/sdk-android/src/tasks/taskPackage.ts index a2b92a3b45..071f276eaf 100644 --- a/packages/sdk-android/src/tasks/taskPackage.ts +++ b/packages/sdk-android/src/tasks/taskPackage.ts @@ -1,8 +1,8 @@ -import { getConfigProp, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { getConfigProp, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { packageAndroid } from '../runner'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Package source files into bundle', dependsOn: [RnvTaskName.configure], fn: async ({ originTaskName }) => { @@ -23,6 +23,4 @@ const Task: RnvTask = { task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskRun.ts b/packages/sdk-android/src/tasks/taskRun.ts index 9def41ba95..7d92a0d529 100644 --- a/packages/sdk-android/src/tasks/taskRun.ts +++ b/packages/sdk-android/src/tasks/taskRun.ts @@ -1,9 +1,9 @@ -import { getConfigProp, logSummary, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { getConfigProp, logSummary, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; import { getAndroidDeviceToRunOn, packageAndroid, runAndroid } from '../runner'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Run your rn app on target device or emulator', dependsOn: [RnvTaskName.configure], fn: async ({ ctx, originTaskName }) => { @@ -30,6 +30,4 @@ const Task: RnvTask = { isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskSdkConfigure.ts b/packages/sdk-android/src/tasks/taskSdkConfigure.ts index 55663a5b8b..e637bf3738 100644 --- a/packages/sdk-android/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-android/src/tasks/taskSdkConfigure.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configures sdks', isPrivate: true, fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { }, task: RnvTaskName.sdkConfigure, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskTargetLaunch.ts b/packages/sdk-android/src/tasks/taskTargetLaunch.ts index 3184a58c37..c67883a015 100644 --- a/packages/sdk-android/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-android/src/tasks/taskTargetLaunch.ts @@ -1,10 +1,10 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { launchAndroidSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Launch specific target', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -17,6 +17,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/sdk-android/src/tasks/taskTargetList.ts b/packages/sdk-android/src/tasks/taskTargetList.ts index ffaaeab129..e439a394e5 100644 --- a/packages/sdk-android/src/tasks/taskTargetList.ts +++ b/packages/sdk-android/src/tasks/taskTargetList.ts @@ -1,9 +1,9 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAndroidTargets } from '../deviceManager'; import { checkAndConfigureAndroidSdks, checkAndroidSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'List all available targets for specific platform', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -15,6 +15,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskBuild.ts b/packages/sdk-apple/src/tasks/taskBuild.ts index fd898165ef..7867991ca4 100644 --- a/packages/sdk-apple/src/tasks/taskBuild.ts +++ b/packages/sdk-apple/src/tasks/taskBuild.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { buildXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Build project binary', dependsOn: [RnvTaskName.package], fn: async ({ parentTaskName }) => { @@ -15,6 +15,4 @@ const Task: RnvTask = { task: RnvTaskName.build, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskConfigure.ts b/packages/sdk-apple/src/tasks/taskConfigure.ts index 34bb21fc20..a73426ee72 100644 --- a/packages/sdk-apple/src/tasks/taskConfigure.ts +++ b/packages/sdk-apple/src/tasks/taskConfigure.ts @@ -1,9 +1,9 @@ -import { configureEntryPoint, RnvTask, RnvTaskName } from '@rnv/core'; +import { configureEntryPoint, createTask, RnvTaskName } from '@rnv/core'; import { configureFontSources } from '@rnv/sdk-react-native'; import { configureXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async ({ ctx, parentTaskName }) => { @@ -18,6 +18,4 @@ const Task: RnvTask = { }, task: RnvTaskName.configure, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts index bcfc4944fc..5e08b49027 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallCerts.ts @@ -1,7 +1,7 @@ -import { logWarning, getFileListSync, executeAsync, RnvTask, RnvTaskName } from '@rnv/core'; +import { logWarning, getFileListSync, executeAsync, createTask, RnvTaskName } from '@rnv/core'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Installs certificates into keychain (mac only)', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -19,6 +19,4 @@ const Task: RnvTask = { }, task: RnvTaskName.cryptoInstallCerts, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts index 679f194863..c3a7947a28 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoInstallProfiles.ts @@ -7,12 +7,12 @@ import { copyFileSync, mkdirSync, fsExistsSync, - RnvTask, + createTask, RnvTaskName, } from '@rnv/core'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Installs provisioning certificates found in your workspace (mac only)', dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx }) => { @@ -37,6 +37,4 @@ const Task: RnvTask = { }, task: RnvTaskName.cryptoInstallProfiles, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts index 5e1e14f285..4074cb8c01 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfile.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { updateProfile } from '../fastlane'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Update provisioning profile (mac only)', dependsOn: [RnvTaskName.projectConfigure], fn: async () => { @@ -10,6 +10,4 @@ const Task: RnvTask = { }, task: RnvTaskName.cryptoUpdateProfile, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts index 39530c488a..903e2dbf04 100644 --- a/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts +++ b/packages/sdk-apple/src/tasks/taskCryptoUpdateProfiles.ts @@ -1,4 +1,4 @@ -import { listAppConfigsFoldersSync, chalk, logTask, RnvTask, RnvTaskName } from '@rnv/core'; +import { listAppConfigsFoldersSync, chalk, logTask, createTask, RnvTaskName } from '@rnv/core'; import { updateProfile } from '../fastlane'; import { SdkPlatforms } from '../common'; @@ -10,7 +10,7 @@ const _updateProfile = (v: string) => .catch((e) => reject(e)); }); -const Task: RnvTask = { +export default createTask({ description: 'Will attempt to update all provisioning profiles (mac only)', dependsOn: [RnvTaskName.projectConfigure], fn: async () => { @@ -20,6 +20,4 @@ const Task: RnvTask = { }, task: RnvTaskName.cryptoUpdateProfiles, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskEject.ts b/packages/sdk-apple/src/tasks/taskEject.ts index af15b286bf..97175e843f 100644 --- a/packages/sdk-apple/src/tasks/taskEject.ts +++ b/packages/sdk-apple/src/tasks/taskEject.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { ejectXcodeProject } from '../ejector'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Eject current ios project app to self contained native project', dependsOn: [RnvTaskName.package], beforeDependsOn: async ({ ctx }) => { @@ -15,6 +15,4 @@ const Task: RnvTask = { task: RnvTaskName.eject, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskExport.ts b/packages/sdk-apple/src/tasks/taskExport.ts index e09b78261e..bb28c4391f 100644 --- a/packages/sdk-apple/src/tasks/taskExport.ts +++ b/packages/sdk-apple/src/tasks/taskExport.ts @@ -1,8 +1,8 @@ -import { RnvTaskOptionPresets, RnvTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { exportXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Export the app into deployable binary', dependsOn: [RnvTaskName.build], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.export, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskLog.ts b/packages/sdk-apple/src/tasks/taskLog.ts index ad42db6b67..d260c58e12 100644 --- a/packages/sdk-apple/src/tasks/taskLog.ts +++ b/packages/sdk-apple/src/tasks/taskLog.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { runAppleLog } from '../runner'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Attach logger to device or emulator and print out logs', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { task: RnvTaskName.log, platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskPackage.ts b/packages/sdk-apple/src/tasks/taskPackage.ts index 840786a1cf..854c5bd659 100644 --- a/packages/sdk-apple/src/tasks/taskPackage.ts +++ b/packages/sdk-apple/src/tasks/taskPackage.ts @@ -1,8 +1,8 @@ -import { getConfigProp, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { getConfigProp, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { packageBundleForXcode } from '../runner'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Package source files into bundle', dependsOn: [RnvTaskName.configure], fn: async () => { @@ -17,6 +17,4 @@ const Task: RnvTask = { task: RnvTaskName.package, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskRun.ts b/packages/sdk-apple/src/tasks/taskRun.ts index 36bf4322a2..2067937704 100644 --- a/packages/sdk-apple/src/tasks/taskRun.ts +++ b/packages/sdk-apple/src/tasks/taskRun.ts @@ -3,7 +3,7 @@ import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react import { getIosDeviceToRunOn, runXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Run your rn app on target device or emulator', dependsOn: [RnvTaskName.configure], fn: async ({ ctx, originTaskName }) => { @@ -26,4 +26,4 @@ const Task: RnvTask = { platforms: SdkPlatforms, }; -export default Task; + diff --git a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts index 81046fc6ca..e753631fdb 100644 --- a/packages/sdk-apple/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-apple/src/tasks/taskTargetLaunch.ts @@ -1,9 +1,9 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchAppleSimulator } from '../deviceManager'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'Launch specific ios target', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -14,6 +14,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/sdk-apple/src/tasks/taskTargetList.ts b/packages/sdk-apple/src/tasks/taskTargetList.ts index acb0e2f533..b5c76a6783 100644 --- a/packages/sdk-apple/src/tasks/taskTargetList.ts +++ b/packages/sdk-apple/src/tasks/taskTargetList.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { listAppleDevices } from '../deviceManager'; import { SdkPlatforms } from '../common'; -const Task: RnvTask = { +export default createTask({ description: 'List all available targets for specific platform', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -12,6 +12,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, //TODO: evaluate this after moving to SDK -}; - -export default Task; +}); diff --git a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts index ca3effea09..c22776d373 100644 --- a/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-kaios/src/tasks/taskTargetLaunch.ts @@ -1,9 +1,9 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { launchKaiOSSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Launch specific target', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -14,6 +14,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/sdk-react-native/src/tasks/taskStart.ts b/packages/sdk-react-native/src/tasks/taskStart.ts index b8eb086fc8..46711a9be4 100644 --- a/packages/sdk-react-native/src/tasks/taskStart.ts +++ b/packages/sdk-react-native/src/tasks/taskStart.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName, RnvTaskOptionPresets, doResolve } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptionPresets, doResolve } from '@rnv/core'; import { startReactNative } from '../metroRunner'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Starts react-native bundler', dependsOn: [RnvTaskName.configureSoft], //TODO: implement dependsOnTrigger @@ -28,6 +28,4 @@ const Task: RnvTask = { task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts index cc76ef0a5c..bb1c96c19e 100644 --- a/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-tizen/src/tasks/taskSdkConfigure.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configures sdks', isPrivate: true, fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { }, task: RnvTaskName.sdkConfigure, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts index 3c224922f5..ad73a23439 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts @@ -4,7 +4,7 @@ import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { launchTizenSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Launch specific target', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -19,4 +19,4 @@ const Task: RnvTask = { isGlobalScope: true, }; -export default Task; + diff --git a/packages/sdk-tizen/src/tasks/taskTargetList.ts b/packages/sdk-tizen/src/tasks/taskTargetList.ts index 4d2a90b488..9bdde133ba 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetList.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetList.ts @@ -3,7 +3,7 @@ import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { listTizenTargets } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'List all available targets for specific platform', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -17,4 +17,4 @@ const Task: RnvTask = { isGlobalScope: true, }; -export default Task; + diff --git a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts index a87773d1f0..be045ec3cb 100644 --- a/packages/sdk-webos/src/tasks/taskSdkConfigure.ts +++ b/packages/sdk-webos/src/tasks/taskSdkConfigure.ts @@ -1,8 +1,8 @@ -import { RnvTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Configures sdks', isPrivate: true, fn: async () => { @@ -11,6 +11,4 @@ const Task: RnvTask = { }, task: RnvTaskName.sdkConfigure, platforms: SdkPlatforms, -}; - -export default Task; +}); diff --git a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts index 18c5b0950a..adcb116c30 100644 --- a/packages/sdk-webos/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-webos/src/tasks/taskTargetLaunch.ts @@ -1,10 +1,10 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { launchWebOSimulator } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'Launch specific target', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -17,6 +17,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); diff --git a/packages/sdk-webos/src/tasks/taskTargetList.ts b/packages/sdk-webos/src/tasks/taskTargetList.ts index 22cc53a664..f5859e069f 100644 --- a/packages/sdk-webos/src/tasks/taskTargetList.ts +++ b/packages/sdk-webos/src/tasks/taskTargetList.ts @@ -1,9 +1,9 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureWebosSdks, checkWebosSdk } from '../installer'; import { listWebOSTargets } from '../deviceManager'; import { SdkPlatforms } from '../constants'; -const Task: RnvTask = { +export default createTask({ description: 'List all available targets for specific platform', dependsOn: [RnvTaskName.workspaceConfigure], fn: async () => { @@ -15,6 +15,4 @@ const Task: RnvTask = { options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - -export default Task; +}); From 24163918c3947f84295e2b04fd049b32d6e38861 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 14:30:02 +0100 Subject: [PATCH 122/175] add --packageManager to configure preset, fix tizen sdk errs --- packages/core/src/tasks/constants.ts | 1 + packages/sdk-tizen/src/tasks/taskTargetLaunch.ts | 6 ++---- packages/sdk-tizen/src/tasks/taskTargetList.ts | 6 ++---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 2969750399..55f717e690 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -345,6 +345,7 @@ export const RnvTaskOptionPresets = { RnvTaskOptions.resetAssets, RnvTaskOptions.appConfigID, RnvTaskOptions.scheme, + RnvTaskOptions.packageManager, // RnvTaskOptions.platform, ].concat(arr || []), withRun: (arr?: Array) => diff --git a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts index ad73a23439..b4bcf2f318 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetLaunch.ts @@ -1,4 +1,4 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { getTargetWithOptionalPrompt } from '@rnv/sdk-utils'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { launchTizenSimulator } from '../deviceManager'; @@ -17,6 +17,4 @@ export default createTask({ options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - - +}); diff --git a/packages/sdk-tizen/src/tasks/taskTargetList.ts b/packages/sdk-tizen/src/tasks/taskTargetList.ts index 9bdde133ba..697a5777a7 100644 --- a/packages/sdk-tizen/src/tasks/taskTargetList.ts +++ b/packages/sdk-tizen/src/tasks/taskTargetList.ts @@ -1,4 +1,4 @@ -import { RnvTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptions } from '@rnv/core'; import { checkAndConfigureTizenSdks, checkTizenSdk } from '../installer'; import { listTizenTargets } from '../deviceManager'; import { SdkPlatforms } from '../constants'; @@ -15,6 +15,4 @@ export default createTask({ options: [RnvTaskOptions.target], platforms: SdkPlatforms, isGlobalScope: true, -}; - - +}); From e6f252d94a159a02877a310591bff0c578ae0abc Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 14:57:28 +0100 Subject: [PATCH 123/175] UT fixes --- __mocks__/@rnv/core.ts | 1 + .../{index.test.ts => taskFinder.test.ts} | 12 +++-- .../tasks/bootstrap/__tests__/taskNew.test.ts | 8 +++- .../tasks/global/__tests__/taskClean.test.ts | 10 ++++- .../tasks/global/__tests__/taskKill.test.ts | 16 ++++++- .../__tests__/taskPlatformConfigure.test.ts | 22 +++++++++- .../__tests__/taskPlatformList.test.ts | 10 ++++- .../src/tasks/__tests__/run.test.ts | 16 ++++++- .../src/tasks/__tests__/taskRun.test.ts | 8 +++- .../src/tasks/__tests__/taskRun.test.ts | 8 +++- packages/sdk-apple/src/tasks/taskRun.ts | 6 +-- .../src/tasks/__tests__/taskStart.test.ts | 44 ++++++++++++++++--- 12 files changed, 135 insertions(+), 26 deletions(-) rename packages/core/src/tasks/__tests__/{index.test.ts => taskFinder.test.ts} (90%) diff --git a/__mocks__/@rnv/core.ts b/__mocks__/@rnv/core.ts index 067a132653..bc3ef95dca 100644 --- a/__mocks__/@rnv/core.ts +++ b/__mocks__/@rnv/core.ts @@ -254,6 +254,7 @@ const generateContextDefaults = (ctx?: Context) => { }, }; }; +rnvcore.createTask = (task) => task; rnvcore.chalk = () => _chalkMono; rnvcore.createRnvContext = (ctx?: Context) => { rnvcore.__MOCK_RNV_CONTEXT = generateContextDefaults(ctx); diff --git a/packages/core/src/tasks/__tests__/index.test.ts b/packages/core/src/tasks/__tests__/taskFinder.test.ts similarity index 90% rename from packages/core/src/tasks/__tests__/index.test.ts rename to packages/core/src/tasks/__tests__/taskFinder.test.ts index 81555652dd..09ffd70446 100644 --- a/packages/core/src/tasks/__tests__/index.test.ts +++ b/packages/core/src/tasks/__tests__/taskFinder.test.ts @@ -1,12 +1,15 @@ -import { getAllSuitableTasks } from '..'; +import { findSuitableTask } from '../taskFinder'; import { getRegisteredEngines } from '../../engines'; import { RnvEngine } from '../../engines/types'; import { DEFAULT_TASK_DESCRIPTIONS } from '../constants'; import { getContext } from '../../context/provider'; import { generateContextDefaults } from '../../context/defaults'; import { checkIfProjectAndNodeModulesExists } from '../../projects/dependencies'; +// import { getTaskNameFromCommand, selectPlatformIfRequired } from '../taskHelpers'; jest.mock('../../engines'); +jest.mock('../taskHelpers'); +jest.mock('../taskRegistry'); jest.mock('chalk'); jest.mock('../../logger'); jest.mock('../../api'); @@ -28,6 +31,7 @@ const ENGINE_MOCK_PROPS = { id: '', engineExtension: '', overview: '', + packageName: '', }, projectDirName: '', runtimeExtraProps: {}, @@ -69,7 +73,7 @@ describe('Get suitable tasks', () => { jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1]); jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); // WHEN - const result = getAllSuitableTasks(); + const result = findSuitableTask(); // THEN expect(Object.keys(result)).toEqual(['mock-task']); expect(result['mock-task'].description).toEqual('mock task 1'); @@ -82,7 +86,7 @@ describe('Get suitable tasks', () => { jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); DEFAULT_TASK_DESCRIPTIONS['mock-task'] = 'mock task common'; // WHEN - const result = getAllSuitableTasks(); + const result = findSuitableTask(); // THEN expect(Object.keys(result)).toEqual(['mock-task', 'mock-task-2']); expect(result['mock-task'].description).toEqual('mock task common'); @@ -95,7 +99,7 @@ describe('Get suitable tasks', () => { jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); delete DEFAULT_TASK_DESCRIPTIONS['mock-task']; // WHEN - const result = getAllSuitableTasks(); + const result = findSuitableTask(); // THEN expect(Object.keys(result)).toEqual(['mock-task-2', 'mock-task']); expect(result['mock-task'].description).toEqual('mock task 1'); diff --git a/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts b/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts index 9f2d6dfc42..c4682cd7dd 100644 --- a/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts +++ b/packages/engine-core/src/tasks/bootstrap/__tests__/taskNew.test.ts @@ -82,7 +82,13 @@ test('Execute task.rnv.new', async () => { }; jest.mocked(initNewProject).mockResolvedValue(payload); // WHEN - const result = await taskNew.fn?.(ctx); + const result = await taskNew.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); // THEN expect(result).toEqual(true); expect(initNewProject).toHaveBeenCalled(); diff --git a/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts b/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts index 00b45d0ff8..a487b123a6 100644 --- a/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts +++ b/packages/engine-core/src/tasks/global/__tests__/taskClean.test.ts @@ -30,7 +30,15 @@ test('Execute task.rnv.clean', async () => { jest.mocked(fsReaddirSync).mockReturnValue([]); ctx.program.opts().ci = false; //WHEN - await expect(taskClean.fn?.(ctx)).resolves.toEqual(true); + await expect( + taskClean.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }) + ).resolves.toEqual(true); //THEN expect(removeDirs).toHaveBeenCalledTimes(3); expect(executeAsync).toHaveBeenCalledWith('watchman watch-del-all'); diff --git a/packages/engine-core/src/tasks/global/__tests__/taskKill.test.ts b/packages/engine-core/src/tasks/global/__tests__/taskKill.test.ts index 9e91129cb0..31c0098363 100644 --- a/packages/engine-core/src/tasks/global/__tests__/taskKill.test.ts +++ b/packages/engine-core/src/tasks/global/__tests__/taskKill.test.ts @@ -18,7 +18,19 @@ test('Execute task.rnv.kill', async () => { const ctx = getContext(); ctx.paths.project.configExists = true; //WHEN - await expect(taskKill.fn?.(ctx)).resolves.toEqual(true); + await expect( + taskKill.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }) + ).resolves.toEqual(true); //THEN - expect(executeTask).toHaveBeenCalledWith('app configure', 'kill', undefined); + expect(executeTask).toHaveBeenCalledWith({ + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_taskName', + taskName: 'app configure', + }); }); diff --git a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts index 448c6476d3..56f7d2efff 100644 --- a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts +++ b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts @@ -16,7 +16,25 @@ test('Execute task.rnv.platform.configure', async () => { //GIVEN const ctx = getContext(); //WHEN - await expect(taskPlatformConfigure.fn?.(ctx)).resolves.toEqual(true); + await expect( + taskPlatformConfigure.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }) + ).resolves.toEqual(true); //THEN - expect(executeTask).toHaveBeenCalledWith('project configure', 'platform configure', undefined); + expect(executeTask).toHaveBeenCalledWith({ + isOptional: true, + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_taskName', + taskName: 'sdk configure', + }); + expect(executeTask).toHaveBeenCalledWith({ + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_taskName', + taskName: 'install', + }); }); diff --git a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts index b8d33a0d6f..485699b8be 100644 --- a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts +++ b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts @@ -16,7 +16,15 @@ test('Execute task.rnv.platform.list', async () => { const ctx = getContext(); jest.mocked(generatePlatformChoices).mockReturnValue([]); //WHEN - await expect(taskPlatformList.fn?.(ctx)).resolves.toEqual(true); + await expect( + taskPlatformList.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }) + ).resolves.toEqual(true); //THEN expect(executeTask).toHaveBeenCalledWith('project configure', 'platform list', undefined); }); diff --git a/packages/engine-rn-web/src/tasks/__tests__/run.test.ts b/packages/engine-rn-web/src/tasks/__tests__/run.test.ts index f48610ba5a..6927853603 100644 --- a/packages/engine-rn-web/src/tasks/__tests__/run.test.ts +++ b/packages/engine-rn-web/src/tasks/__tests__/run.test.ts @@ -27,7 +27,13 @@ test('Execute task.rnv.run -p web', async () => { jest.mocked(getAppFolder).mockReturnValueOnce('MOCKED_PATH'); //WHEN - await taskRun.fn?.(ctx); + await taskRun.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); //THEN expect(runWebpackServer).toHaveBeenCalled(); }); @@ -38,7 +44,13 @@ test('Execute task.rnv.run -p tizen', async () => { ctx.platform = 'tizen'; jest.mocked(getPlatformProjectDir).mockReturnValue(''); //WHEN - await taskRun.fn?.(ctx); + await taskRun.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); //THEN expect(runTizen).toHaveBeenCalled(); }); diff --git a/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts index 27fb07c7f5..06354bba87 100644 --- a/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts +++ b/packages/sdk-android/src/tasks/__tests__/taskRun.test.ts @@ -25,7 +25,13 @@ test('Execute task.rnv.run', async () => { }; jest.mocked(getAndroidDeviceToRunOn).mockResolvedValueOnce(mockedDevice); // WHEN - await taskRun.fn?.(ctx, undefined, undefined); + await taskRun.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); // THEN expect(runAndroid).toHaveBeenCalledWith(mockedDevice); }); diff --git a/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts index d84eecb598..a5c6777c6d 100644 --- a/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts +++ b/packages/sdk-apple/src/tasks/__tests__/taskRun.test.ts @@ -20,7 +20,13 @@ test('Execute task.rnv.run', async () => { ctx.platform = 'ios'; jest.mocked(getIosDeviceToRunOn).mockResolvedValueOnce('MOCK_DEVICE_ARGS'); // WHEN - await taskRun.fn?.(ctx, undefined, undefined); + await taskRun.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); // THEN expect(runXcodeProject).toHaveBeenCalledWith('MOCK_DEVICE_ARGS'); }); diff --git a/packages/sdk-apple/src/tasks/taskRun.ts b/packages/sdk-apple/src/tasks/taskRun.ts index 2067937704..26c5e268aa 100644 --- a/packages/sdk-apple/src/tasks/taskRun.ts +++ b/packages/sdk-apple/src/tasks/taskRun.ts @@ -1,4 +1,4 @@ -import { getConfigProp, logSummary, RnvTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { getConfigProp, logSummary, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; import { getIosDeviceToRunOn, runXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; @@ -24,6 +24,4 @@ export default createTask({ isPriorityOrder: true, options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: SdkPlatforms, -}; - - +}); diff --git a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts index d2a10bc7ca..1f6fd4b514 100644 --- a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts +++ b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts @@ -21,7 +21,13 @@ describe('taskStart', () => { ctx.platform = 'ios'; jest.mocked(executeTask).mockResolvedValueOnce(undefined); // WHEN - await taskStart.fn?.(ctx, undefined, undefined); + await taskStart.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: undefined, + shouldSkip: false, + }); // THEN expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: true }); }); @@ -30,7 +36,13 @@ describe('taskStart', () => { const ctx = getContext(); ctx.platform = 'ios'; // WHEN - await taskStart.fn?.(ctx, 'parent', undefined); + await taskStart.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); // THEN expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: false }); }); @@ -44,7 +56,13 @@ describe('taskStart', () => { }; jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); // WHEN - await taskStart.fn?.(ctx, undefined, undefined); + await taskStart.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); // THEN expect(executeTask).toHaveBeenCalledTimes(1); expect(startReactNative).toHaveBeenCalledWith({ @@ -64,7 +82,13 @@ describe('taskStart', () => { }; jest.mocked(doResolve).mockReturnValueOnce('MOCKED_PATH'); // WHEN - await taskStart.fn?.(ctx, 'parent', undefined); + await taskStart.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }); // THEN expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: false, @@ -79,8 +103,14 @@ describe('taskStart', () => { ctx.platform = 'tvos'; ctx.program.opts().hosted = true; // WHEN // THEN - await expect(taskStart.fn?.(ctx, 'parent', undefined)).rejects.toBe( - 'This platform does not support hosted mode' - ); + await expect( + taskStart.fn?.({ + ctx, + taskName: 'MOCK_taskName', + originTaskName: 'MOCK_originTaskName', + parentTaskName: 'MOCK_parentTaskName', + shouldSkip: false, + }) + ).rejects.toBe('This platform does not support hosted mode'); }); }); From a15d4697c00f058d255abc0186c3c799cc1d7e14 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 15:16:42 +0100 Subject: [PATCH 124/175] fix rnv run --- .../src/tasks/__tests__/taskFinder.test.ts | 114 +++++++++++------- packages/core/src/tasks/taskFinder.ts | 5 +- packages/core/src/tasks/taskHelpers.ts | 4 +- 3 files changed, 74 insertions(+), 49 deletions(-) diff --git a/packages/core/src/tasks/__tests__/taskFinder.test.ts b/packages/core/src/tasks/__tests__/taskFinder.test.ts index 09ffd70446..4a3509e56e 100644 --- a/packages/core/src/tasks/__tests__/taskFinder.test.ts +++ b/packages/core/src/tasks/__tests__/taskFinder.test.ts @@ -1,11 +1,9 @@ import { findSuitableTask } from '../taskFinder'; -import { getRegisteredEngines } from '../../engines'; -import { RnvEngine } from '../../engines/types'; import { DEFAULT_TASK_DESCRIPTIONS } from '../constants'; import { getContext } from '../../context/provider'; import { generateContextDefaults } from '../../context/defaults'; -import { checkIfProjectAndNodeModulesExists } from '../../projects/dependencies'; -// import { getTaskNameFromCommand, selectPlatformIfRequired } from '../taskHelpers'; +import { getTaskNameFromCommand } from '../taskHelpers'; +import { getRegisteredTasks } from '../taskRegistry'; jest.mock('../../engines'); jest.mock('../taskHelpers'); @@ -25,53 +23,73 @@ afterEach(() => { jest.resetAllMocks(); }); -const ENGINE_MOCK_PROPS = { - platforms: {}, - config: { - id: '', - engineExtension: '', - overview: '', - packageName: '', - }, - projectDirName: '', - runtimeExtraProps: {}, - serverDirName: '', -}; +// const ENGINE_MOCK_PROPS = { +// platforms: {}, +// config: { +// id: '', +// engineExtension: '', +// overview: '', +// packageName: '', +// }, +// projectDirName: '', +// runtimeExtraProps: {}, +// serverDirName: '', +// }; -const rnvEngineMock1: RnvEngine = { - ...ENGINE_MOCK_PROPS, - tasks: { - ['mock-task']: { - description: 'mock task 1', - task: 'mock-task', - options: [], - }, +const MOCK_TASKS = { + ['en1::mock-task']: { + description: 'mock task 1', + task: 'mock-task', + options: [], }, -}; - -const rnvEngineMock2: RnvEngine = { - ...ENGINE_MOCK_PROPS, - tasks: { - //NOTE: order of task here is IMPORTANT - ['mock-task-2']: { - description: 'mock task 2', - task: 'mock-task-2', - options: [], - }, - ['mock-task']: { - description: 'mock task 1', - task: 'mock-task', - options: [], - }, + ['en1::mock-task-2']: { + description: 'mock task 2', + task: 'mock-task-2', + options: [], + }, + ['en2::mock-task']: { + description: 'mock task 1', + task: 'mock-task', + options: [], }, }; +// const rnvEngineMock1: RnvEngine = { +// ...ENGINE_MOCK_PROPS, +// tasks: { +// ['mock-task']: { +// description: 'mock task 1', +// task: 'mock-task', +// options: [], +// }, +// }, +// }; + +// const rnvEngineMock2: RnvEngine = { +// ...ENGINE_MOCK_PROPS, +// tasks: { +// //NOTE: order of task here is IMPORTANT +// ['mock-task-2']: { +// description: 'mock task 2', +// task: 'mock-task-2', +// options: [], +// }, +// ['mock-task']: { +// description: 'mock task 1', +// task: 'mock-task', +// options: [], +// }, +// }, +// }; + describe('Get suitable tasks', () => { it('should return all tasks for given 1 engine', () => { // GIVEN + jest.mocked(getTaskNameFromCommand).mockReturnValue(''); jest.mocked(getContext).mockReturnValue(generateContextDefaults()); - jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1]); - jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); + jest.mocked(getRegisteredTasks).mockReturnValue({ ...MOCK_TASKS }); + // jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1]); + // jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); // WHEN const result = findSuitableTask(); // THEN @@ -81,9 +99,11 @@ describe('Get suitable tasks', () => { it('should return common description for tasks from 2 different engines but same name', () => { // GIVEN + jest.mocked(getTaskNameFromCommand).mockReturnValue('mock-task'); jest.mocked(getContext).mockReturnValue(generateContextDefaults()); - jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1, rnvEngineMock2]); - jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); + // jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1, rnvEngineMock2]); + jest.mocked(getRegisteredTasks).mockReturnValue({ ...MOCK_TASKS }); + // jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); DEFAULT_TASK_DESCRIPTIONS['mock-task'] = 'mock task common'; // WHEN const result = findSuitableTask(); @@ -94,9 +114,11 @@ describe('Get suitable tasks', () => { it('should return first task description for tasks from 2 different engines but same name if common desc not available', () => { // GIVEN + jest.mocked(getTaskNameFromCommand).mockReturnValue(''); jest.mocked(getContext).mockReturnValue(generateContextDefaults()); - jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock2, rnvEngineMock1]); - jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); + jest.mocked(getRegisteredTasks).mockReturnValue({ ...MOCK_TASKS }); + // jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock2, rnvEngineMock1]); + // jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); delete DEFAULT_TASK_DESCRIPTIONS['mock-task']; // WHEN const result = findSuitableTask(); diff --git a/packages/core/src/tasks/taskFinder.ts b/packages/core/src/tasks/taskFinder.ts index ba5784615c..a6d12a90ce 100644 --- a/packages/core/src/tasks/taskFinder.ts +++ b/packages/core/src/tasks/taskFinder.ts @@ -10,8 +10,9 @@ export const findSuitableTask = async (): Promise => { const taskName = getTaskNameFromCommand(); if (!taskName) { - // Trigger auto selection - throw new Error('TODO interactive selection offer all tasks'); + // Trigger auto selection outside of this function + // throw new Error('TODO interactive selection offer all tasks'); + return undefined; } const suitableTasks = findTasksByTaskName(taskName); diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index df26b4d09d..dc51cac4a4 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -7,6 +7,8 @@ export const selectPlatformIfRequired = async () => { const c = getContext(); if (!c.platform) { const taskName = getTaskNameFromCommand(); + // TODO: move this to more generic place + c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; const platforms = c.runtime.availablePlatforms; if (platforms) { if (platforms.length === 1) { @@ -15,7 +17,7 @@ export const selectPlatformIfRequired = async () => { const { platform } = await inquirerPrompt({ type: 'list', name: 'platform', - message: `Pick a platform for ${taskName}`, + message: `Pick a platform for task: "rnv ${taskName}"`, choices: platforms, }); c.platform = platform; From 2e5d1924a81ebb5d148b279b3f610fbfbba2bba2 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 15:24:33 +0100 Subject: [PATCH 125/175] set availablePlatforms and engine regardless of manual selection option --- packages/core/src/tasks/taskHelpers.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index dc51cac4a4..b5b2a298bf 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -7,8 +7,6 @@ export const selectPlatformIfRequired = async () => { const c = getContext(); if (!c.platform) { const taskName = getTaskNameFromCommand(); - // TODO: move this to more generic place - c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; const platforms = c.runtime.availablePlatforms; if (platforms) { if (platforms.length === 1) { @@ -22,9 +20,11 @@ export const selectPlatformIfRequired = async () => { }); c.platform = platform; } - c.runtime.engine = getEngineRunnerByPlatform(c.platform); } } + // TODO: move this to more generic place? + c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; + c.runtime.engine = getEngineRunnerByPlatform(c.platform); }; export const getTaskNameFromCommand = (): string | undefined => { From 3bcbfb9703e7a5dc1f6b300e7cb90ae6c554ad2d Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 15:44:09 +0100 Subject: [PATCH 126/175] e2e fix --- packages/app-harness/package.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index b497b4f606..3efeb92dfb 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -16,11 +16,11 @@ }, "scripts": { "bootstrap": "cd ../.. && yarn bootstrap", - "build:android-test": "npx rnv build -p android -s test --packageManager yarn --ci -r", - "build:androidtv-test": "npx rnv build -p androidtv -s test --packageManager yarn --ci -r", - "build:ios-test": "npx rnv build -p ios -s test --packageManager yarn --ci -r", - "build:macos-test": "npx rnv build -p macos -s test --packageManager yarn --ci -r", - "build:tvos-test": "npx rnv build -p tvos -s test --packageManager yarn --ci -r", + "build:android-test": "npx rnv build -p android -s test --packageManager -c harness yarn --ci -r", + "build:androidtv-test": "npx rnv build -p androidtv -s test --packageManager -c harness yarn --ci -r", + "build:ios-test": "npx rnv build -p ios -s test --packageManager -c harness yarn --ci -r", + "build:macos-test": "npx rnv build -p macos -s test --packageManager -c harness yarn --ci -r", + "build:tvos-test": "npx rnv build -p tvos -s test --packageManager -c harness yarn --ci -r", "e2e:android": "APPIUM_HOME=./ PLATFORM=android JAVA_HOME=$(/usr/libexec/java_home) wdio wdio.conf.cjs", "e2e:androidtv": "APPIUM_HOME=./ PLATFORM=androidtv JAVA_HOME=$(/usr/libexec/java_home) wdio wdio.conf.cjs", "e2e:ios": "APPIUM_HOME=./ PLATFORM=ios wdio wdio.conf.cjs", @@ -30,11 +30,11 @@ "report": "yarn report:generate && yarn report:open", "report:generate": "npx allure generate --clean reporting/allure-results -o reporting/allure-report", "report:open": "npx allure open reporting/allure-report", - "run:android-test": "npx rnv run -p android -s test --packageManager yarn --ci -r", - "run:androidtv-test": "npx rnv run -p androidtv -s test --packageManager yarn --ci -r", - "run:ios-test": "npx rnv run -p ios -s test --packageManager yarn --ci -r", - "run:tvos-test": "npx rnv run -p tvos -s test --packageManager yarn --ci -r", - "start:web-test": "npx rnv start -p web -s test --packageManager yarn --ci", + "run:android-test": "npx rnv run -p android -s test --packageManager -c harness yarn --ci -r", + "run:androidtv-test": "npx rnv run -p androidtv -s test --packageManager -c harness yarn --ci -r", + "run:ios-test": "npx rnv run -p ios -s test --packageManager -c harness yarn --ci -r", + "run:tvos-test": "npx rnv run -p tvos -s test --packageManager -c harness yarn --ci -r", + "start:web-test": "npx rnv start -p web -s test --packageManager -c harness yarn --ci", "tsc": "tsc --noEmit --composite false", "watch": "tsc --watch --preserveWatchOutput --noEmit" }, From 9dba8fc557ee0919ee6a68a8c3188474b4a60069 Mon Sep 17 00:00:00 2001 From: pauliusguzas Date: Wed, 27 Mar 2024 17:23:24 +0200 Subject: [PATCH 127/175] e2e fix --- packages/app-harness/package.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index 3efeb92dfb..2b40a33b39 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -16,11 +16,11 @@ }, "scripts": { "bootstrap": "cd ../.. && yarn bootstrap", - "build:android-test": "npx rnv build -p android -s test --packageManager -c harness yarn --ci -r", - "build:androidtv-test": "npx rnv build -p androidtv -s test --packageManager -c harness yarn --ci -r", - "build:ios-test": "npx rnv build -p ios -s test --packageManager -c harness yarn --ci -r", - "build:macos-test": "npx rnv build -p macos -s test --packageManager -c harness yarn --ci -r", - "build:tvos-test": "npx rnv build -p tvos -s test --packageManager -c harness yarn --ci -r", + "build:android-test": "npx rnv build -p android -s test -c harness --packageManager yarn --ci -r", + "build:androidtv-test": "npx rnv build -p androidtv -s test -c harness --packageManager yarn --ci -r", + "build:ios-test": "npx rnv build -p ios -s test -c harness --packageManager yarn --ci -r", + "build:macos-test": "npx rnv build -p macos -s test -c harness --packageManager yarn --ci -r", + "build:tvos-test": "npx rnv build -p tvos -s test -c harness --packageManager yarn --ci -r", "e2e:android": "APPIUM_HOME=./ PLATFORM=android JAVA_HOME=$(/usr/libexec/java_home) wdio wdio.conf.cjs", "e2e:androidtv": "APPIUM_HOME=./ PLATFORM=androidtv JAVA_HOME=$(/usr/libexec/java_home) wdio wdio.conf.cjs", "e2e:ios": "APPIUM_HOME=./ PLATFORM=ios wdio wdio.conf.cjs", @@ -30,11 +30,11 @@ "report": "yarn report:generate && yarn report:open", "report:generate": "npx allure generate --clean reporting/allure-results -o reporting/allure-report", "report:open": "npx allure open reporting/allure-report", - "run:android-test": "npx rnv run -p android -s test --packageManager -c harness yarn --ci -r", - "run:androidtv-test": "npx rnv run -p androidtv -s test --packageManager -c harness yarn --ci -r", - "run:ios-test": "npx rnv run -p ios -s test --packageManager -c harness yarn --ci -r", - "run:tvos-test": "npx rnv run -p tvos -s test --packageManager -c harness yarn --ci -r", - "start:web-test": "npx rnv start -p web -s test --packageManager -c harness yarn --ci", + "run:android-test": "npx rnv run -p android -s test -c harness --packageManager yarn --ci -r", + "run:androidtv-test": "npx rnv run -p androidtv -s test -c harness --packageManager yarn --ci -r", + "run:ios-test": "npx rnv run -p ios -s test -c harness --packageManager yarn --ci -r", + "run:tvos-test": "npx rnv run -p tvos -s test -c harness --packageManager yarn --ci -r", + "start:web-test": "npx rnv start -p web -s test -c harness --packageManager yarn --ci", "tsc": "tsc --noEmit --composite false", "watch": "tsc --watch --preserveWatchOutput --noEmit" }, From b89b1bd695589700c8878e1b9e499f9324380e24 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 16:24:32 +0100 Subject: [PATCH 128/175] better handling for unknown commands --- packages/core/src/tasks/wizard.ts | 255 +++++++++--------------------- 1 file changed, 73 insertions(+), 182 deletions(-) diff --git a/packages/core/src/tasks/wizard.ts b/packages/core/src/tasks/wizard.ts index 085c91d5c2..96f54b3d7c 100644 --- a/packages/core/src/tasks/wizard.ts +++ b/packages/core/src/tasks/wizard.ts @@ -11,12 +11,64 @@ type TaskOpt = { value: string; }; +const generateOptionPrompt = async (options: TaskOpt[]) => { + const ctx = getContext(); + + // const { selectedTask } = await inquirerPrompt({ + // type: 'list', + // // default: defaultCmd, + // name: 'selectedTask', + // message: `Pick a command`, + // choices: options, + // pageSize: 15, + // logMessage: 'Welcome to the brave new world...', + // }); + // const taskArr = selectedTask.split(' '); + // ctx.command = taskArr[0]; + // ctx.subCommand = taskArr[1] || null; + + // const initTask = await findSuitableTask(); + // return initializeTask(initTask); + + const { selectedTask } = await inquirerPrompt({ + type: 'list', + // default: defaultCmd, + name: 'selectedTask', + message: `Pick a command`, + choices: options, + pageSize: 15, + logMessage: 'Welcome to the brave new world...', + }); + + const taskArr = selectedTask.split(' '); + ctx.command = taskArr[0]; + ctx.subCommand = taskArr[1] || null; + + const initTask = await findSuitableTask(); + return initializeTask(initTask); +}; + export const runInteractiveWizardForSubTasks = async () => { const ctx = getContext(); const tasks = getRegisteredTasks(); const optionsMap: Record = {}; + const alternativeOptionsMap: Record = {}; + + const selectedEngineID = ctx.platform && ctx.runtime.enginesByPlatform[ctx.platform]?.config?.packageName; + Object.values(tasks).forEach((taskInstance) => { + if (ctx.platform) { + if (selectedEngineID && taskInstance.ownerID !== selectedEngineID) { + // If we already specified platform we can skip tasks registered to unsupported engines + return; + } + if (taskInstance.platforms && !taskInstance.platforms.includes(ctx.platform)) { + // We can also filter out tasks that are not supported on current platform + return; + } + } + const taskCmdName = taskInstance.task.split(' ')[0]; if (taskCmdName === ctx.command) { @@ -29,6 +81,16 @@ export const runInteractiveWizardForSubTasks = async () => { // If multiple tasks with same name we append ... to indicate there are more options coming optionsMap[taskInstance.task].name = `${taskInstance.task}${chalk().gray('...')}`; } + } else { + if (!alternativeOptionsMap[taskInstance.task]) { + alternativeOptionsMap[taskInstance.task] = { + name: `${taskInstance.task} ${chalk().gray(taskInstance.description)}`, + value: taskInstance.task, + }; + } else { + // If multiple tasks with same name we append ... to indicate there are more options coming + alternativeOptionsMap[taskInstance.task].name = `${taskInstance.task}${chalk().gray('...')}`; + } } }); @@ -36,52 +98,28 @@ export const runInteractiveWizardForSubTasks = async () => { if (options.length > 0) { if (ctx.subCommand) { - logInfo(`No sub task named ${chalk().red(ctx.subCommand)} found. Will look for available ones instead.`); + logInfo(`No sub task named "${chalk().red(ctx.subCommand)}" found. Will look for available ones instead.`); ctx.subCommand = null; - // throw new Error('Trying to run interactive wizard for subtasks'); } + return generateOptionPrompt(options); + } - const { selectedTask } = await inquirerPrompt({ - type: 'list', - // default: defaultCmd, - name: 'selectedTask', - message: `Pick a command`, - choices: options, - pageSize: 15, - logMessage: 'Welcome to the brave new world...', - }); - - const taskArr = selectedTask.split(' '); - ctx.command = taskArr[0]; - ctx.subCommand = taskArr[1] || null; - - const initTask = await findSuitableTask(); - return initializeTask(initTask); + const alternativeOptions: TaskOpt[] = Object.values(alternativeOptionsMap); + // No subtasks found but we found closest matches + if (alternativeOptions.length > 0) { + return generateOptionPrompt(alternativeOptions); } - // No subtasks found. let's resort to default wizard if (ctx.subCommand) { - logInfo(`No tasks found for ${chalk().red(getTaskNameFromCommand())}. Launching wizard...`); + logInfo(`No tasks found for "${chalk().red(getTaskNameFromCommand())}". Launching wizard...`); ctx.subCommand = null; - // throw new Error('Trying to run interactive wizard for subtasks'); } - return runInteractiveWizard(); - // Engines are bound to platform - // If we don't know the platform yet we need to load all engines - // await selectPlatformIfRequired(); - - // initTask = await findSuitableTask(); - // return initializeTask(initTask); + // If nothing could be found we resort to default wizard + return runInteractiveWizard(); }; export const runInteractiveWizard = async () => { - // for "rnv" we simply load all engines upfront - const ctx = getContext(); - - // const taskOptions = _getWizardOptions(); - // const { options, addendum, defaultCmd } = _getGroupedWizardOptions(taskOptions); - const tasks = getRegisteredTasks(); const options: TaskOpt[] = []; @@ -93,152 +131,5 @@ export const runInteractiveWizard = async () => { }); }); - const { selectedTask } = await inquirerPrompt({ - type: 'list', - // default: defaultCmd, - name: 'selectedTask', - message: `Pick a command`, - choices: options, - pageSize: 15, - logMessage: 'Welcome to the brave new world...', - }); - const taskArr = selectedTask.split(' '); - ctx.command = taskArr[0]; - ctx.subCommand = taskArr[1] || null; - - const initTask = await findSuitableTask(); - return initializeTask(initTask); + return generateOptionPrompt(options); }; - -// const _getGroupedWizardOptions = (taskInstances: TaskPromptOption[]) => { -// let tasks: TaskPromptOption[]; -// const c = getContext(); -// let defaultCmd: string | undefined = 'new'; -// let addendum = ''; -// if (!c.paths.project.configExists) { -// tasks = taskInstances.filter((v) => v.isGlobalScope && !v.isPrivate).sort(); -// addendum = ' (Not a ReNative project. options will be limited)'; -// } else { -// tasks = taskInstances.filter((v) => !v.isPrivate).sort(); -// defaultCmd = tasks.find((v) => v.value.taskName === 'run')?.name; -// } -// const commonTasks: TaskPromptOption[] = []; -// const ungroupedTasks: TaskPromptOption[] = []; -// const groupedTasks: TaskPromptOption[] = []; -// // const taskGroups: Record = {}; -// tasks.forEach((task) => { -// if (task.subTasks) { -// // if (!taskGroups[task.command]) { -// // const groupTask: TaskPromptOption = { -// // name: `${task.command}...`, -// // command: task.command, -// // value: task.command, -// // providers: [], -// // }; -// // taskGroups[task.command] = groupTask; -// // groupedTasks.push(groupTask); -// // } -// groupedTasks.push(task); -// } else if (task.isPriorityOrder) { -// commonTasks.push(task); -// } else { -// ungroupedTasks.push(task); -// } -// }); - -// const mergedTasks = [ -// inquirerSeparator('─────────── Common tasks ───────────'), -// ...commonTasks, -// inquirerSeparator('─────────── More tasks ─────────────'), -// ...ungroupedTasks, -// ...groupedTasks, -// ]; - -// return { options: mergedTasks, addendum, defaultCmd }; -// }; - -// const _getWizardOptions = () => { -// const tasks = getRegisteredTasks(); - -// console.log( -// 'DLJDLDKD:KD:LDKD', -// Object.values(tasks).map((v) => v.key) -// ); - -// const suitableTasks: Record = {}; -// Object.values(tasks).forEach((taskInstance) => { -// let taskObj: TaskPromptOption = _getTaskOption(_getTaskObj(taskInstance)); -// if (!suitableTasks[taskObj.value.taskName]) { -// suitableTasks[taskObj.value.taskName] = taskObj; -// } else { -// // In case of multiple competing tasks (same task name but coming from different engines) - -// taskObj = suitableTasks[taskObj.value.taskName]; -// if (!taskObj.subTasks) { -// taskObj.subTasks = [ -// { -// ...taskObj, -// }, -// ]; -// } -// taskObj.subTasks.push(taskObj); -// // We try to revert to generic description instead. -// taskObj.name = `${taskObj.value}...`; -// taskObj.description = DEFAULT_TASK_DESCRIPTIONS[taskObj.value.taskName] || taskObj.description; -// // In case of multiple competing tasks we assume they are "commonly used" -// taskObj.isPriorityOrder = true; -// if (taskInstance.ownerID) { -// taskObj.providers.push(taskInstance.ownerID); -// } -// taskObj.value.subTsks = taskObj.subTasks; -// } -// }); -// return Object.values(suitableTasks); -// }; - -// const _getTaskObj = (taskInstance: RnvTask) => { -// const key = taskInstance.task; -// const taskNameArr = key.split(' '); -// let parent: null | string = null; -// if (taskNameArr.length > 1) { -// taskNameArr.pop(); -// parent = taskNameArr.join(' '); -// } - -// return { -// key, -// taskInstance, -// parent, -// }; -// }; - -// const _getTaskOption = ({ taskInstance }: TaskObj, provider?: string): TaskPromptOption => { -// const asArray = taskInstance.task.split(' '); -// const output: TaskPromptOption = { -// value: { taskName: taskInstance.task }, -// command: '', -// name: ``, -// asArray, -// isPriorityOrder: taskInstance.isPriorityOrder, -// description: taskInstance.description, -// isGlobalScope: taskInstance.isGlobalScope, -// isPrivate: taskInstance.isPrivate, -// params: taskInstance.options, -// providers: [], -// }; - -// if (taskInstance.description && taskInstance.description !== '') { -// output.description = taskInstance.description; -// output.name = `${taskInstance.task} ${chalk().grey(`(${taskInstance.description})`)}`; -// } else { -// output.name = taskInstance.task; -// } -// output.command = asArray[0]; -// output.subCommand = asArray[1]; // TODO don't treat options like --myopt as subcommands - -// if (provider) { -// output.providers.push(provider); -// } - -// return output; -// }; From 55ecd3ee04f0d09a8a9283dec7de0af66d766dd9 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 16:45:20 +0100 Subject: [PATCH 129/175] fix tizen build sdk --- packages/core/src/tasks/taskFinder.ts | 2 +- packages/sdk-tizen/src/constants.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/tasks/taskFinder.ts b/packages/core/src/tasks/taskFinder.ts index a6d12a90ce..9da13544ab 100644 --- a/packages/core/src/tasks/taskFinder.ts +++ b/packages/core/src/tasks/taskFinder.ts @@ -31,7 +31,7 @@ export const findTasksByTaskName = (taskName: string) => { // If we found a task with platform restriction and it does not match current platform we skip it return; } - if (ctx.runtime.engine && v.ownerID !== ctx.runtime.engine?.config.packageName) { + if (ctx.runtime.engine && v.ownerID !== ctx.runtime.engine?.config?.packageName) { // If we already know specific engine to be used and task is not from that engine we skip it return; } diff --git a/packages/sdk-tizen/src/constants.ts b/packages/sdk-tizen/src/constants.ts index 5dc97b04ad..6d7e566060 100644 --- a/packages/sdk-tizen/src/constants.ts +++ b/packages/sdk-tizen/src/constants.ts @@ -4,4 +4,4 @@ export const CLI_TIZEN_EMULATOR = 'tizenEmulator'; export const CLI_TIZEN = 'tizen'; export const CLI_SDB_TIZEN = 'tizenSdb'; -export const SdkPlatforms: Array = ['kaios']; +export const SdkPlatforms: Array = ['tizen']; From 1f96a4864a48173c5d22fe259f2f2b28ba2aeb04 Mon Sep 17 00:00:00 2001 From: pauliusguzas Date: Wed, 27 Mar 2024 20:20:53 +0200 Subject: [PATCH 130/175] fix harness web e2e --- packages/app-harness/wdio.conf.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app-harness/wdio.conf.cjs b/packages/app-harness/wdio.conf.cjs index f456188826..cf2b88eb7a 100644 --- a/packages/app-harness/wdio.conf.cjs +++ b/packages/app-harness/wdio.conf.cjs @@ -165,7 +165,7 @@ exports.config = { // with `/`, the base url gets prepended, not including the path portion of your baseUrl. // If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url // gets prepended directly. - baseUrl: 'http://localhost:8080', + baseUrl: 'http://localhost:8090', // // Default timeout for all waitFor* commands. waitforTimeout: 10000, From 276f9521c5c6553dfbec9d24851d712ada5ead39 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 20:41:59 +0100 Subject: [PATCH 131/175] do not apply template copy on existing project root folders --- packages/core/src/templates/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index 59d5181c42..64aeb3ff90 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -211,9 +211,11 @@ const _copyIncludedPath = (c: RnvContext, name: string) => { const sourcePathOriginal = path.join(c.paths.template.dir, name); const sourceOverridePath = path.join(c.paths.template.dir, RnvFolderName.templateOverrides, name); const destPath = path.join(c.paths.project.dir, name); + // Make sure we do not override existing folders at root of project + const destRootPath = path.join(c.paths.project.dir, name.split('/')[0]); // If override exists use it, otherwise use original and continue with rest of the logic const sourcePath = fsExistsSync(sourceOverridePath) ? sourceOverridePath : sourcePathOriginal; - if (!fsExistsSync(destPath) && fsExistsSync(sourcePath)) { + if (!fsExistsSync(destRootPath) && !fsExistsSync(destPath) && fsExistsSync(sourcePath)) { try { if (fsLstatSync(sourcePath).isDirectory()) { logInfo(`Missing directory ${chalk().bold(`${destPath}.js`)}. COPYING from TEMPATE...DONE`); From 7eaf8c0b6c61a2ca441dcbc5caac786c613acff0 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 22:46:24 +0100 Subject: [PATCH 132/175] file mutations --- .../core/src/engines/dependencyResolver.ts | 89 +++++++++ packages/core/src/index.ts | 1 + packages/core/src/plugins/index.ts | 176 ++++++++++++------ packages/core/src/projects/dependencies.ts | 176 ++---------------- packages/core/src/projects/npm.ts | 6 +- packages/core/src/projects/package.ts | 11 ++ packages/core/src/projects/types.ts | 16 ++ packages/core/src/system/fs.ts | 16 +- .../tasks/platform/taskPlatformConfigure.ts | 40 ++-- packages/engine-rn-web/renative.engine.json | 1 + 10 files changed, 292 insertions(+), 240 deletions(-) create mode 100644 packages/core/src/engines/dependencyResolver.ts diff --git a/packages/core/src/engines/dependencyResolver.ts b/packages/core/src/engines/dependencyResolver.ts new file mode 100644 index 0000000000..254422fd01 --- /dev/null +++ b/packages/core/src/engines/dependencyResolver.ts @@ -0,0 +1,89 @@ +import merge from 'deepmerge'; +import { getContext } from '../context/provider'; +import { logDefault } from '../logger'; +import { getEngineRunnerByPlatform } from '.'; +import { NpmDepKey, NpmPackageFile } from '../configs/types'; +import { DependencyMutation } from '../projects/types'; +import { createDependencyMutation } from '../projects/dependencies'; + +export const resolveEngineDependencies = async () => { + logDefault('resolveEngineDependencies'); + const c = getContext(); + const { platform } = c; + const engine = getEngineRunnerByPlatform(platform); + const npmDepsBase = engine?.config?.npm || {}; + const npmDepsExt = platform ? engine?.config?.platforms?.[platform]?.npm || {} : {}; + + const npmDeps = merge>(npmDepsBase, npmDepsExt); + + if (npmDeps) { + const mutations: Array = []; + + Object.keys(npmDeps).forEach((t) => { + const depType = t as NpmDepKey; + const deps = npmDeps[depType]; + if (deps) { + Object.keys(deps).forEach((k) => { + const ver = c.files.project.package?.[depType]?.[k]; + if (!ver) { + mutations.push( + createDependencyMutation({ + name: k, + updated: { + version: deps[k], + }, + type: depType, + msg: 'Missing dependency', + source: 'engine.npm (renative.engine.json)', + targetPath: c.paths.project.package, + }) + ); + } else if (ver !== deps[k]) { + mutations.push( + createDependencyMutation({ + name: k, + original: { + version: ver, + }, + updated: { + version: deps[k], + }, + type: depType, + msg: 'Outdated dependency', + source: 'engine.npm (renative.engine.json)', + targetPath: c.paths.project.package, + }) + ); + } + }); + } + }); + + console.log('DDKDLKDLD', npmDeps, mutations); + + if (mutations.length) { + c._requiresNpmInstall = true; + } + } + + // add other deps that are not npm +}; + +// if (installed.some((i) => i === true)) { +// const { isMonorepo } = c.buildConfig; +// if (isMonorepo) { +// logInfo( +// `Found extra npm dependencies required by ${chalk().bold( +// engine.config.id +// )} engine. project marked as monorepo. SKIPPING` +// ); +// } else { +// // do npm i only if something new is added +// logInfo( +// `Found extra npm dependencies required by ${chalk().bold(engine.config.id)} engine. ADDING...DONE` +// ); +// if (handleExtraDepsCallback) { +// await handleExtraDepsCallback(); +// } +// } +// } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 9b5d080052..a99499e168 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -57,6 +57,7 @@ export * from './templates'; export * from './integrations'; export * from './runner'; export * from './engines'; +export * from './engines/dependencyResolver'; export * from './platforms'; export * from './plugins'; export * from './buildHooks'; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 01f2890541..f63b446de0 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -1,4 +1,3 @@ -import merge from 'deepmerge'; import path from 'path'; import { getAppConfigBuildsFolder, getAppFolder } from '../context/contextProps'; import { parseRenativeConfigs } from '../configs'; @@ -22,11 +21,12 @@ import { writeRenativeConfigFile } from '../configs/utils'; import { installPackageDependencies } from '../projects/npm'; import { OverridesOptions, ResolveOptions } from '../system/types'; import { ConfigFileOverrides, ConfigFilePlugin, ConfigFileTemplates } from '../schema/configFiles/types'; -import { NpmPackageFile } from '../configs/types'; import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; -import { AsyncCallback } from '../projects/types'; +import { AsyncCallback, DependencyMutation } from '../projects/types'; +import { createDependencyMutation } from '../projects/dependencies'; +import { updatePackage } from '../projects/package'; const _getPluginScope = (plugin: RenativeConfigPlugin | string): RnvPluginScope => { if (typeof plugin === 'string') { @@ -175,17 +175,20 @@ export const configurePlugins = async () => { c.files.project.package.dependencies = {}; } - let hasPackageChanged = false; + // let hasPackageChanged = false; if (!c.buildConfig?.plugins) { return; } - const isTemplate = c.buildConfig?.isTemplate; - const newDeps: Record = {}; - const newDevDeps: Record = {}; + // const isTemplate = c.buildConfig?.isTemplate; + // const newDeps: Record = {}; + // const newDevDeps: Record = {}; const { dependencies, devDependencies } = c.files.project.package; - const ovMsg = isTemplate ? 'This is template. NO ACTION' : 'package.json will be overriden'; + // const ovMsg = isTemplate ? 'This is template. NO ACTION' : 'package.json will be overriden'; + + const mutations: Array = []; + Object.keys(c.buildConfig.plugins).forEach((k) => { const plugin = getMergedPlugin(c, k); @@ -214,15 +217,30 @@ export const configurePlugins = async () => { logInfo(`Plugin ${k} not ready yet (waiting for scope ${plugin.scope}). SKIPPING...`); } } else if (dependencies[k] !== plugin.version) { - logWarning( - `Version mismatch of dependency ${chalk().bold(k)} between: - ${chalk().bold(c.paths.project.package)}: v(${chalk().red(dependencies[k])}) and - ${chalk().bold(c.paths.project.builds.config)}: v(${chalk().green(plugin.version)}). - ${ovMsg}` + // logWarning( + // `Version mismatch of dependency ${chalk().bold(k)} between: + // ${chalk().bold(c.paths.project.package)}: v(${chalk().red(dependencies[k])}) and + // ${chalk().bold(c.paths.project.builds.config)}: v(${chalk().green(plugin.version)}). + // ${ovMsg}` + // ); + mutations.push( + createDependencyMutation({ + name: k, + original: { + version: dependencies[k], + }, + updated: { + version: plugin.version, + }, + type: 'dependencies', + msg: 'Version mismatch', + source: 'plugin (renative.json)', + targetPath: c.paths.project.package, + }) ); - hasPackageChanged = true; - _applyPackageDependency(newDeps, k, plugin.version); + // hasPackageChanged = true; + // _applyPackageDependency(newDeps, k, plugin.version); } } else if (devDependencies && devDependencies[k]) { if (!plugin.version) { @@ -230,80 +248,134 @@ export const configurePlugins = async () => { logInfo(`Plugin ${k} not ready yet (waiting for scope ${plugin.scope}). SKIPPING...`); } } else if (devDependencies[k] !== plugin.version) { - logWarning( - `Version mismatch of devDependency ${chalk().bold(k)} between package.json: v(${chalk().red( - devDependencies[k] - )}) and plugins.json: v(${chalk().red(plugin.version)}). ${ovMsg}` + // logWarning( + // `Version mismatch of devDependency ${chalk().bold(k)} between package.json: v(${chalk().red( + // devDependencies[k] + // )}) and plugins.json: v(${chalk().red(plugin.version)}). ${ovMsg}` + // ); + mutations.push( + createDependencyMutation({ + name: k, + original: { + version: devDependencies[k], + }, + updated: { + version: plugin.version, + }, + type: 'devDependencies', + msg: 'Version mismatch', + source: 'plugin (renative.json)', + targetPath: c.paths.project.package, + }) ); - hasPackageChanged = true; - _applyPackageDependency(newDevDeps, k, plugin.version); + // hasPackageChanged = true; + // _applyPackageDependency(newDevDeps, k, plugin.version); } } else { // Dependency does not exists if (plugin.version) { - logInfo( - `Missing dependency ${chalk().bold(k)} v(${chalk().red( - plugin.version - )}) in package.json. ${ovMsg}` + // logInfo( + // `Missing dependency ${chalk().bold(k)} v(${chalk().red( + // plugin.version + // )}) in package.json. ${ovMsg}` + // ); + mutations.push( + createDependencyMutation({ + name: k, + updated: { + version: plugin.version, + }, + // TODO: should be controlled by plugin if this devDependency + type: 'dependencies', + msg: 'Missing dependency', + source: 'plugin (renative.json)', + targetPath: c.paths.project.package, + }) ); - hasPackageChanged = true; - if (plugin.version) { - _applyPackageDependency(newDeps, k, plugin.version); - } + // hasPackageChanged = true; + // if (plugin.version) { + // _applyPackageDependency(newDeps, k, plugin.version); + // } } } } if (plugin && plugin.npm) { Object.keys(plugin.npm).forEach((npmKey) => { + // const npmKey = _npmKey as NpmDepKey; const npmDep = plugin.npm?.[npmKey]; // IMPORTANT: Do not override top level override with plugin.npm ones const topLevelPlugin = getMergedPlugin(c, npmKey); if (topLevelPlugin && topLevelPlugin?.version !== npmDep) { - logInfo(`RNV Detected plugin dependency conflict. ${chalk().cyan('RESOLVING...')} + logWarning(`RNV Detected plugin dependency conflict. - ${npmKey}@${chalk().green(topLevelPlugin?.version)} ${chalk().cyan('<=')} - ${k} .npm sub dependencies: |- ${npmKey}@${chalk().red(npmDep)}`); } else if (!dependencies[npmKey]) { - logInfo(`Plugin ${chalk().bold(k)} requires npm dependency ${chalk().bold(npmKey)}. ${ovMsg}`); + // logInfo(`Plugin ${chalk().bold(k)} requires npm dependency ${chalk().bold(npmKey)}. ${ovMsg}`); if (npmDep) { - _applyPackageDependency(newDeps, npmKey, npmDep); - hasPackageChanged = true; + createDependencyMutation({ + name: npmKey, + updated: { + version: npmDep, + }, + // TODO: should be controlled by plugin if this devDependency + type: 'dependencies', + msg: 'Missing dependency', + source: 'plugin.npm (renative.json)', + targetPath: c.paths.project.package, + }); + // _applyPackageDependency(newDeps, npmKey, npmDep); + // hasPackageChanged = true; } } else if (dependencies[npmKey] !== npmDep) { - logWarning( - `Plugin ${chalk().bold(k)} npm dependency ${chalk().bold(npmKey)} mismatch (${chalk().red( - dependencies[npmKey] - )}) => (${chalk().green(npmDep)}) .${ovMsg}` - ); + // logWarning( + // `Plugin ${chalk().bold(k)} npm dependency ${chalk().bold(npmKey)} mismatch (${chalk().red( + // dependencies[npmKey] + // )}) => (${chalk().green(npmDep)}) .${ovMsg}` + // ); if (npmDep) { - _applyPackageDependency(newDeps, npmKey, npmDep); - hasPackageChanged = true; + createDependencyMutation({ + name: npmKey, + original: { + version: dependencies[npmKey], + }, + updated: { + version: npmDep, + }, + // TODO: should be controlled by plugin if this devDependency + type: 'dependencies', + msg: 'Version mismatch', + source: 'plugin.npm (renative.json)', + targetPath: c.paths.project.package, + }); + // _applyPackageDependency(newDeps, npmKey, npmDep); + // hasPackageChanged = true; } } }); } }); + if (mutations.length) { + c._requiresNpmInstall = true; + } + // When in template we want warnings but NOT file overrides - if (isTemplate) return true; + // if (isTemplate) return true; + + // console.log('SJSSJSLKJSSL', mutations); // c.runtime.skipPackageUpdate only reflects rnv version mismatch. should not prevent updating other deps - if (hasPackageChanged /*! c.runtime.skipPackageUpdate */ && !c.program.opts().skipDependencyCheck) { - _updatePackage(c, { dependencies: newDeps, devDependencies: newDevDeps }); - } + // + // if (hasPackageChanged /*! c.runtime.skipPackageUpdate */ && !c.program.opts().skipDependencyCheck) { + // _updatePackage(c, { dependencies: newDeps, devDependencies: newDevDeps }); + // } return true; }; -const _updatePackage = (c: RnvContext, override: Partial) => { - const newPackage: NpmPackageFile = merge(c.files.project.package, override); - writeRenativeConfigFile(c.paths.project.package, newPackage); - c.files.project.package = newPackage; - c._requiresNpmInstall = true; -}; - export const resolvePluginDependants = async () => { const c = getContext(); @@ -499,7 +571,7 @@ export const loadPluginTemplates = async () => { // CHECK IF paths.pluginTemplates SCOPES are INSTALLED // This must be installed to avoid scoped plugins errors if (hasPackageChanged) { - _updatePackage(c, { dependencies }); + updatePackage({ dependencies }); logInfo('Found missing dependency scopes. INSTALLING...'); await installPackageDependencies(); await loadPluginTemplates(); diff --git a/packages/core/src/projects/dependencies.ts b/packages/core/src/projects/dependencies.ts index 29a38fa038..ddf11dcace 100644 --- a/packages/core/src/projects/dependencies.ts +++ b/packages/core/src/projects/dependencies.ts @@ -1,17 +1,8 @@ -import semver from 'semver'; -import merge from 'deepmerge'; - -import { executeAsync } from '../system/exec'; import { installPackageDependencies } from './npm'; -import { chalk, logInfo, logDebug, logDefault } from '../logger'; -import { getEngineRunnerByPlatform } from '../engines'; -import { RnvContext } from '../context/types'; -import { inquirerPrompt } from '../api'; -import { writeRenativeConfigFile } from '../configs/utils'; +import { logInfo, logDefault, logWarning } from '../logger'; import { fsExistsSync } from '../system/fs'; -import { NpmDepKey, NpmPackageFile } from '../configs/types'; import { getContext } from '../context/provider'; -import { AsyncCallback } from './types'; +import { DependencyMutation } from './types'; export const checkIfProjectAndNodeModulesExists = async () => { logDefault('checkIfProjectAndNodeModulesExists'); @@ -25,158 +16,19 @@ export const checkIfProjectAndNodeModulesExists = async () => { } }; -const injectProjectDependency = async ( - c: RnvContext, - dependency: string, - version: string, - type: NpmDepKey, - skipInstall = false, - postInjectHandler: AsyncCallback | undefined -) => { - logDefault('injectProjectDependency'); - - const currentPackage = c.files.project.package; - if (currentPackage) { - const existingPath = c.paths.project.package; - const dep = currentPackage[type] || {}; - currentPackage[type] = dep; - dep[dependency] = version; - writeRenativeConfigFile(existingPath, currentPackage); - if (!skipInstall) { - if (postInjectHandler) { - await postInjectHandler(); - } - } - return true; - } - return false; -}; - -export const checkRequiredPackage = async ( - c: RnvContext, - pkg: string, - version = '', - type: NpmDepKey, - skipAsking = false, - skipInstall = false, - skipVersionCheck = false, - postInjectHandler: AsyncCallback | undefined -) => { - logDebug('checkRequiredPackage'); - if (!pkg) return false; - const projectConfig = c.files.project; - - if (!projectConfig.package?.[type]?.[pkg]) { - // package does not exist, adding it - let confirm = skipAsking; - if (!confirm) { - const resp = await inquirerPrompt({ - type: 'confirm', - message: `You do not have ${pkg} installed. Do you want to add it now?`, - }); - // eslint-disable-next-line prefer-destructuring - confirm = resp.confirm; - } - - if (confirm) { - let latestVersion = 'latest'; - if (version === '' && !skipVersionCheck) { - try { - latestVersion = await executeAsync(`npm show ${pkg} version`); - // eslint-disable-next-line no-empty - } catch (e) {} - } - return injectProjectDependency(c, pkg, version || latestVersion, type, skipInstall, postInjectHandler); - } - } else if (version === '') { - // package exists, checking version only if version is not - const currentVersion = projectConfig.package[type]?.[pkg]; - let latestVersion; - try { - latestVersion = await executeAsync(`npm show ${pkg} version`); - // eslint-disable-next-line no-empty - } catch (e) {} - if (latestVersion) { - let updateAvailable = false; - - try { - // semver might fail if you have a path instead of a version (like when you are developing) - if (currentVersion) { - updateAvailable = semver.lt(currentVersion, latestVersion); - } - } catch (e) { - //NOOP - } - - if (updateAvailable) { - let confirm = skipAsking; - if (!confirm) { - const resp = await inquirerPrompt({ - type: 'confirm', - message: `Seems like ${pkg}@${currentVersion} is installed while there is a newer version, ${pkg}@${latestVersion}. Do you want to upgrade?`, - }); - // eslint-disable-next-line prefer-destructuring - confirm = resp.confirm; - } - - if (confirm) { - return injectProjectDependency(c, pkg, latestVersion, type, skipInstall, postInjectHandler); - } - } - } - } - - return false; +export const createDependencyMutation = (opts: DependencyMutation) => { + return opts; }; -export const injectPlatformDependencies = async ( - handleExtraDepsCallback?: AsyncCallback, - postInjectHandler?: AsyncCallback -) => { - logDefault('injectPlatformDependencies'); +export const handleMutations = async (mutations: DependencyMutation[]) => { const c = getContext(); - const { platform } = c; - const engine = getEngineRunnerByPlatform(platform); - const npmDepsBase = engine?.config?.npm || {}; - const npmDepsExt = platform ? engine?.config?.platforms?.[platform]?.npm || {} : {}; - - const npmDeps = merge>(npmDepsBase, npmDepsExt); - - if (engine && npmDeps) { - const promises = (Object.keys(npmDeps) as NpmDepKey[]).reduce>>((acc, type) => { - // iterate over dependencies, devDepencencies or optionalDependencies - const deps = npmDeps[type]; - if (deps) { - Object.keys(deps).forEach((dep) => { - // iterate over deps - acc.push(checkRequiredPackage(c, dep, deps[dep], type, true, true, false, postInjectHandler)); - }); - } - - return acc; - }, []); - - const installed = await Promise.all(promises); - - if (installed.some((i) => i === true)) { - const { isMonorepo } = c.buildConfig; - if (isMonorepo) { - logInfo( - `Found extra npm dependencies required by ${chalk().bold( - engine.config.id - )} engine. project marked as monorepo. SKIPPING` - ); - } else { - // do npm i only if something new is added - logInfo( - `Found extra npm dependencies required by ${chalk().bold(engine.config.id)} engine. ADDING...DONE` - ); - if (handleExtraDepsCallback) { - await handleExtraDepsCallback(); - } - } - } - } - - // add other deps that are not npm + if (!mutations.length) return true; + logWarning('Dependency conflicts detected. Please resolve them before continuing'); + mutations.forEach((m) => { + logWarning(`- ${m.name} ${m.msg} (${m.original?.version || 'N/A'}) => (${m.updated.version})`); + }); + const isTemplate = c.buildConfig?.isTemplate; + if (isTemplate) return true; + //Check with user + return false; }; diff --git a/packages/core/src/projects/npm.ts b/packages/core/src/projects/npm.ts index 406cc5137c..9b6a259b11 100644 --- a/packages/core/src/projects/npm.ts +++ b/packages/core/src/projects/npm.ts @@ -1,6 +1,6 @@ import path from 'path'; import { executeAsync, commandExistsSync } from '../system/exec'; -import { fsExistsSync, invalidatePodsChecksum, removeDirs, writeFileSync } from '../system/fs'; +import { fsExistsSync, removeDirs, writeFileSync } from '../system/fs'; import { logDefault, logWarning, logError, logInfo, logDebug, logSuccess } from '../logger'; import { doResolve } from '../system/resolve'; import { RnvContext } from '../context/types'; @@ -171,7 +171,9 @@ export const installPackageDependencies = async (failOnError = false) => { try { await executeAsync(command); - await invalidatePodsChecksum(); + // This it too much of brute force. + // We should find a way to detect if node_modules was actually updated with relevant pod deps + // await invalidatePodsChecksum(); } catch (e) { if (failOnError) { logError(e); diff --git a/packages/core/src/projects/package.ts b/packages/core/src/projects/package.ts index ea46808cf6..861213f6ad 100644 --- a/packages/core/src/projects/package.ts +++ b/packages/core/src/projects/package.ts @@ -1,9 +1,20 @@ import path from 'path'; +import merge from 'deepmerge'; import { fsExistsSync, fsWriteFileSync, loadFile, readObjectSync } from '../system/fs'; import { logDefault, logWarning, logInfo } from '../logger'; import { ConfigFileTemplate } from '../schema/configFiles/types'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; +import { NpmPackageFile } from '../configs/types'; +import { writeRenativeConfigFile } from '../configs/utils'; + +export const updatePackage = (override: Partial) => { + const c = getContext(); + const newPackage: NpmPackageFile = merge(c.files.project.package, override); + writeRenativeConfigFile(c.paths.project.package, newPackage); + c.files.project.package = newPackage; + c._requiresNpmInstall = true; +}; const packageJsonIsValid = () => { const c = getContext(); diff --git a/packages/core/src/projects/types.ts b/packages/core/src/projects/types.ts index 3ae6f08c25..17c6e218be 100644 --- a/packages/core/src/projects/types.ts +++ b/packages/core/src/projects/types.ts @@ -1,3 +1,19 @@ +import { NpmDepKey } from '../configs/types'; + export type ParseFontsCallback = (font: string, dir: string) => void; export type AsyncCallback = () => Promise; + +export type DependencyMutation = { + name: string; + original?: { + version: string; + }; + updated: { + version: string; + }; + type: NpmDepKey; + msg: string; + source: string; + targetPath?: string; +}; diff --git a/packages/core/src/system/fs.ts b/packages/core/src/system/fs.ts index 5217867da1..bd5207c509 100755 --- a/packages/core/src/system/fs.ts +++ b/packages/core/src/system/fs.ts @@ -221,14 +221,14 @@ export const copyFileWithInjectSync = ( } }; -export const invalidatePodsChecksum = () => { - const c = getContext(); - const appFolder = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${c.platform}`); - const podChecksumPath = path.join(appFolder, 'Podfile.checksum'); - if (fs.existsSync(podChecksumPath)) { - fs.unlinkSync(podChecksumPath); - } -}; +// export const invalidatePodsChecksum = () => { +// const c = getContext(); +// const appFolder = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${c.platform}`); +// const podChecksumPath = path.join(appFolder, 'Podfile.checksum'); +// if (fs.existsSync(podChecksumPath)) { +// fs.unlinkSync(podChecksumPath); +// } +// }; export const copyFolderRecursiveSync = ( source: string, diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 4c11901591..5ad91fb288 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -7,16 +7,16 @@ import { isPlatformSupported, cleanPlatformBuild, createPlatformBuild, - injectPlatformDependencies, configureRuntimeDefaults, executeTask, createTask, RnvTaskName, - installPackageDependencies, - overrideTemplatePlugins, + // installPackageDependencies, + // overrideTemplatePlugins, + resolveEngineDependencies, } from '@rnv/core'; import { isBuildSchemeSupported } from '../../buildSchemes'; -import { configureFonts } from '@rnv/sdk-utils'; +// import { configureFonts } from '@rnv/sdk-utils'; export default createTask({ description: 'Low-level task used by engines to prepare platformBuilds folder', @@ -50,18 +50,26 @@ export default createTask({ } await createPlatformBuild(ctx.platform); - await injectPlatformDependencies( - async () => { - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); - }, - async () => { - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); - } - ); + await resolveEngineDependencies(); + // TODO: check if this is needed or can be handled down the line + // if not monorepo && mutations were found + // await installPackageDependencies(); + // await overrideTemplatePlugins(); + // await configureFonts(); + + // OLD STUFFF + // await injectPlatformDependencies( + // async () => { + // await installPackageDependencies(); + // await overrideTemplatePlugins(); + // await configureFonts(); + // }, + // async () => { + // await installPackageDependencies(); + // await overrideTemplatePlugins(); + // await configureFonts(); + // } + // ); // await _runCopyPlatforms(c); return true; }, diff --git a/packages/engine-rn-web/renative.engine.json b/packages/engine-rn-web/renative.engine.json index 7ab7cc87e3..5ab2744505 100644 --- a/packages/engine-rn-web/renative.engine.json +++ b/packages/engine-rn-web/renative.engine.json @@ -1,6 +1,7 @@ { "$schema": "../../.rnv/schema/rnv.engine.json", "id": "engine-rn-web", + "engineExtension": "rnw", "packageName": "@rnv/engine-rn-web", "overview": "React native based engine with web transpiler provided by react-native-web", "plugins": { From bc2a8139c047f31eac5d360e7c392d4799f90f56 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 27 Mar 2024 23:07:52 +0100 Subject: [PATCH 133/175] context mutations --- packages/core/src/context/defaults.ts | 3 ++ packages/core/src/context/types.ts | 16 +++++---- .../core/src/engines/dependencyResolver.ts | 2 +- packages/core/src/index.ts | 2 +- packages/core/src/plugins/index.ts | 2 +- packages/core/src/projects/dependencies.ts | 34 ------------------- packages/core/src/projects/mutations.ts | 25 ++++++++++++++ packages/core/src/projects/npm.ts | 12 +++++++ packages/core/src/tasks/taskExecutors.ts | 2 +- packages/core/src/templates/index.ts | 2 +- .../src/tasks/global/taskInstall.ts | 3 +- 11 files changed, 57 insertions(+), 46 deletions(-) delete mode 100644 packages/core/src/projects/dependencies.ts create mode 100644 packages/core/src/projects/mutations.ts diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 0938acb57e..23ec70f458 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -60,6 +60,9 @@ const runtime: RnvContext['runtime'] = { export const generateContextDefaults = (): RnvContext => ({ isDefault: true, isSystemWin: false, + mutations: { + pendingMutations: [], + }, logging: { logMessages: [], containsError: false, diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 5ca05ed729..6e81062a03 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -2,7 +2,7 @@ import type { ConfigProp, ConfigPropKey, PlatformKey } from '../schema/types'; import type { RnvEngine, RnvEnginePlatform } from '../engines/types'; import type { OverridesOptions } from '../system/types'; import type { RnvPlatform } from '../types'; -import { +import type { ConfigFileApp, ConfigFileLocal, ConfigFilePlugin, @@ -13,12 +13,13 @@ import { ConfigFileWorkspace, ConfigFileWorkspaces, } from '../schema/configFiles/types'; -import { NpmPackageFile } from '../configs/types'; -import { ConfigFileBuildConfig } from '../schema/configFiles/buildConfig'; +import type { NpmPackageFile } from '../configs/types'; +import type { ConfigFileBuildConfig } from '../schema/configFiles/buildConfig'; import type { ParamKeys, ProgramOptionsKey } from '../tasks/constants'; -import { ExecaChildProcess } from 'execa'; -import { RnvPlugin } from '../plugins/types'; -import { RnvIntegration } from '../integrations/types'; +import type { ExecaChildProcess } from 'execa'; +import type { RnvPlugin } from '../plugins/types'; +import type { RnvIntegration } from '../integrations/types'; +import type { DependencyMutation } from '../projects/types'; export type CreateContextOptions = { program: RnvContextProgram; @@ -58,6 +59,9 @@ export type RnvContext; + }; assetConfig: object; platform: RnvPlatform; process: NodeJS.Process; diff --git a/packages/core/src/engines/dependencyResolver.ts b/packages/core/src/engines/dependencyResolver.ts index 254422fd01..dcc1a26ba1 100644 --- a/packages/core/src/engines/dependencyResolver.ts +++ b/packages/core/src/engines/dependencyResolver.ts @@ -4,7 +4,7 @@ import { logDefault } from '../logger'; import { getEngineRunnerByPlatform } from '.'; import { NpmDepKey, NpmPackageFile } from '../configs/types'; import { DependencyMutation } from '../projects/types'; -import { createDependencyMutation } from '../projects/dependencies'; +import { createDependencyMutation } from '../projects/mutations'; export const resolveEngineDependencies = async () => { logDefault('resolveEngineDependencies'); diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index a99499e168..8ebd92fa2f 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -25,7 +25,7 @@ export * from './projects/bootstrap'; export * from './projects/version'; export * from './projects/npm'; export * from './projects/package'; -export * from './projects/dependencies'; +export * from './projects/mutations'; export * from './projects/fonts'; export * from './projects/utils'; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index f63b446de0..462fcf3c0c 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -25,7 +25,7 @@ import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; import { AsyncCallback, DependencyMutation } from '../projects/types'; -import { createDependencyMutation } from '../projects/dependencies'; +import { createDependencyMutation } from '../projects/mutations'; import { updatePackage } from '../projects/package'; const _getPluginScope = (plugin: RenativeConfigPlugin | string): RnvPluginScope => { diff --git a/packages/core/src/projects/dependencies.ts b/packages/core/src/projects/dependencies.ts deleted file mode 100644 index ddf11dcace..0000000000 --- a/packages/core/src/projects/dependencies.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { installPackageDependencies } from './npm'; -import { logInfo, logDefault, logWarning } from '../logger'; -import { fsExistsSync } from '../system/fs'; -import { getContext } from '../context/provider'; -import { DependencyMutation } from './types'; - -export const checkIfProjectAndNodeModulesExists = async () => { - logDefault('checkIfProjectAndNodeModulesExists'); - - const c = getContext(); - - if (c.paths.project.configExists && !fsExistsSync(c.paths.project.nodeModulesDir)) { - c._requiresNpmInstall = false; - logInfo('node_modules folder is missing. INSTALLING...'); - await installPackageDependencies(); - } -}; - -export const createDependencyMutation = (opts: DependencyMutation) => { - return opts; -}; - -export const handleMutations = async (mutations: DependencyMutation[]) => { - const c = getContext(); - if (!mutations.length) return true; - logWarning('Dependency conflicts detected. Please resolve them before continuing'); - mutations.forEach((m) => { - logWarning(`- ${m.name} ${m.msg} (${m.original?.version || 'N/A'}) => (${m.updated.version})`); - }); - const isTemplate = c.buildConfig?.isTemplate; - if (isTemplate) return true; - //Check with user - return false; -}; diff --git a/packages/core/src/projects/mutations.ts b/packages/core/src/projects/mutations.ts new file mode 100644 index 0000000000..094b8d810b --- /dev/null +++ b/packages/core/src/projects/mutations.ts @@ -0,0 +1,25 @@ +import { logInfo, logWarning } from '../logger'; +import { getContext } from '../context/provider'; +import { DependencyMutation } from './types'; + +export const createDependencyMutation = (opts: DependencyMutation) => { + const ctx = getContext(); + ctx.mutations.pendingMutations.push(opts); + return opts; +}; + +export const handleMutations = async () => { + const ctx = getContext(); + const mutations = ctx.mutations.pendingMutations; + if (!mutations.length) return true; + logWarning('Dependency conflicts detected. Please resolve them before continuing'); + mutations.forEach((m) => { + logInfo(`- ${m.name} ${m.msg} (${m.original?.version || 'N/A'}) => (${m.updated.version})`); + }); + const isTemplate = ctx.buildConfig?.isTemplate; + console.log('DJDJDJJDJDJD', mutations); + + if (isTemplate) return true; + //Check with user + return false; +}; diff --git a/packages/core/src/projects/npm.ts b/packages/core/src/projects/npm.ts index 9b6a259b11..687e9b0813 100644 --- a/packages/core/src/projects/npm.ts +++ b/packages/core/src/projects/npm.ts @@ -7,6 +7,18 @@ import { RnvContext } from '../context/types'; import { inquirerPrompt } from '../api'; import { getContext } from '../context/provider'; +export const checkIfProjectAndNodeModulesExists = async () => { + logDefault('checkIfProjectAndNodeModulesExists'); + + const c = getContext(); + + if (c.paths.project.configExists && !fsExistsSync(c.paths.project.nodeModulesDir)) { + c._requiresNpmInstall = false; + logInfo('node_modules folder is missing. INSTALLING...'); + await installPackageDependencies(); + } +}; + export const checkNpxIsInstalled = async () => { logDefault('checkNpxIsInstalled'); if (!commandExistsSync('npx')) { diff --git a/packages/core/src/tasks/taskExecutors.ts b/packages/core/src/tasks/taskExecutors.ts index a3277e7495..7a3fdc6a39 100644 --- a/packages/core/src/tasks/taskExecutors.ts +++ b/packages/core/src/tasks/taskExecutors.ts @@ -3,12 +3,12 @@ import { executePipe } from '../buildHooks'; import type { RnvContext } from '../context/types'; import type { RnvTask } from './types'; import { getApi } from '../api/provider'; -import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { getContext } from '../context/provider'; import { RnvTaskName } from '../enums/taskName'; import { generateStringFromTaskOption, shouldSkipTask } from './taskHelpers'; import { getEngineRunnerByOwnerID } from '../engines'; import { extractSingleExecutableTask, findTasksByTaskName } from './taskFinder'; +import { checkIfProjectAndNodeModulesExists } from '../projects/npm'; let executedTasks: Record = {}; const TASK_LIMIT = 20; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index 64aeb3ff90..a097d5d32b 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -20,13 +20,13 @@ import { PromptOptions } from '../api/types'; import { RnvPlatform } from '../types'; // import { listAppConfigsFoldersSync } from '../configs/appConfigs'; import { writeRenativeConfigFile } from '../configs/utils'; -import { checkIfProjectAndNodeModulesExists } from '../projects/dependencies'; import { ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; // import { PlatformKey } from '../schema/types'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; import { RnvFolderName } from '../enums/folderName'; +import { checkIfProjectAndNodeModulesExists } from '../projects/npm'; const _cleanProjectTemplateSync = (c: RnvContext) => { logDefault('_cleanProjectTemplateSync'); diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index dc024e9767..2849838a1e 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -1,4 +1,4 @@ -import { areNodeModulesInstalled, logInfo, createTask, RnvTaskName } from '@rnv/core'; +import { areNodeModulesInstalled, logInfo, createTask, RnvTaskName, handleMutations } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; export default createTask({ @@ -15,6 +15,7 @@ export default createTask({ logInfo('node_modules folder is out of date. INSTALLING...'); } ctx._requiresNpmInstall = false; + await handleMutations(); await installPackageDependenciesAndPlugins(); } return true; From 34811722170e5b795968f2a459895ffd4354413c Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 28 Mar 2024 00:26:58 +0100 Subject: [PATCH 134/175] handle mutations --- packages/core/src/configs/types.ts | 7 +- .../core/src/engines/dependencyResolver.ts | 59 +++++------- packages/core/src/engines/index.ts | 86 ++++++++++++----- packages/core/src/plugins/index.ts | 92 +++++++++---------- packages/core/src/projects/mutations.ts | 53 ++++++++++- packages/core/src/projects/npm.ts | 4 + .../src/tasks/global/taskInstall.ts | 4 +- 7 files changed, 186 insertions(+), 119 deletions(-) diff --git a/packages/core/src/configs/types.ts b/packages/core/src/configs/types.ts index 69b24ab01c..a074fc8d27 100644 --- a/packages/core/src/configs/types.ts +++ b/packages/core/src/configs/types.ts @@ -14,4 +14,9 @@ export type NpmPackageFile = { export type NpmPackageFileKey = keyof NpmPackageFile; -export type NpmDepKey = 'dependencies' | 'devDependencies' | 'peerDependencies'; +export type NpmDepKey = + | 'dependencies' + | 'devDependencies' + | 'peerDependencies' + | 'optionalDependencies' + | 'resolutions'; diff --git a/packages/core/src/engines/dependencyResolver.ts b/packages/core/src/engines/dependencyResolver.ts index dcc1a26ba1..88207124f8 100644 --- a/packages/core/src/engines/dependencyResolver.ts +++ b/packages/core/src/engines/dependencyResolver.ts @@ -3,7 +3,6 @@ import { getContext } from '../context/provider'; import { logDefault } from '../logger'; import { getEngineRunnerByPlatform } from '.'; import { NpmDepKey, NpmPackageFile } from '../configs/types'; -import { DependencyMutation } from '../projects/types'; import { createDependencyMutation } from '../projects/mutations'; export const resolveEngineDependencies = async () => { @@ -17,8 +16,6 @@ export const resolveEngineDependencies = async () => { const npmDeps = merge>(npmDepsBase, npmDepsExt); if (npmDeps) { - const mutations: Array = []; - Object.keys(npmDeps).forEach((t) => { const depType = t as NpmDepKey; const deps = npmDeps[depType]; @@ -26,44 +23,34 @@ export const resolveEngineDependencies = async () => { Object.keys(deps).forEach((k) => { const ver = c.files.project.package?.[depType]?.[k]; if (!ver) { - mutations.push( - createDependencyMutation({ - name: k, - updated: { - version: deps[k], - }, - type: depType, - msg: 'Missing dependency', - source: 'engine.npm (renative.engine.json)', - targetPath: c.paths.project.package, - }) - ); + createDependencyMutation({ + name: k, + updated: { + version: deps[k], + }, + type: depType, + msg: 'Missing dependency', + source: 'engine.npm (renative.engine.json)', + targetPath: c.paths.project.package, + }); } else if (ver !== deps[k]) { - mutations.push( - createDependencyMutation({ - name: k, - original: { - version: ver, - }, - updated: { - version: deps[k], - }, - type: depType, - msg: 'Outdated dependency', - source: 'engine.npm (renative.engine.json)', - targetPath: c.paths.project.package, - }) - ); + createDependencyMutation({ + name: k, + original: { + version: ver, + }, + updated: { + version: deps[k], + }, + type: depType, + msg: 'Outdated dependency', + source: 'engine.npm (renative.engine.json)', + targetPath: c.paths.project.package, + }); } }); } }); - - console.log('DDKDLKDLD', npmDeps, mutations); - - if (mutations.length) { - c._requiresNpmInstall = true; - } } // add other deps that are not npm diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 7cb6cf4c03..6d1aff4b0c 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -16,6 +16,7 @@ import { getEngineTemplateByPlatform } from '../configs/engines'; import { ConfigFileEngine } from '../schema/configFiles/types'; import { getConfigProp } from '../context/contextProps'; import { registerRnvTasks } from '../tasks/taskRegistry'; +import { createDependencyMutation } from '../projects/mutations'; export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, engConfig?: RnvEngineTemplate) => { const c = getContext(); @@ -220,7 +221,8 @@ export const loadEnginePackageDeps = async (engineConfigs: Array { const engineConfig = readObjectSync(ecf.configPath); c.buildConfig.defaults?.supportedPlatforms?.forEach((platform) => { @@ -236,13 +238,23 @@ export const loadEnginePackageDeps = async (engineConfigs: Array 0) { - writeFileSync(c.paths.project.package, c.files.project.package); - } + // if (addedDeps.length > 0) { + // writeFileSync(c.paths.project.package, c.files.project.package); + // } // } }); }); + return true; + console.log('KURVA'); - return addedDeps.length; + // return addedDeps.length; }; const _getFilteredEngines = (c: RnvContext) => { @@ -411,9 +445,11 @@ ${enginesToInstall.map((v) => `> ${v.key}@${v.version}`).join('\n')} return loadEngines(true); } const plugDepsCount = await loadEnginePluginDeps(engineConfigs); - const pkgDepsCount = await loadEnginePackageDeps(engineConfigs); + // const pkgDepsCount = await loadEnginePackageDeps(engineConfigs); + await loadEnginePackageDeps(engineConfigs); - if (plugDepsCount + pkgDepsCount > 0) { + if (plugDepsCount > 0) { + // if (plugDepsCount + pkgDepsCount > 0) { c.runtime._skipPluginScopeWarnings = true; await configurePlugins(); // TODO: This is too early as scoped plugin have not been installed c.runtime._skipPluginScopeWarnings = false; diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 462fcf3c0c..529e0f5567 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -24,7 +24,7 @@ import { ConfigFileOverrides, ConfigFilePlugin, ConfigFileTemplates } from '../s import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; -import { AsyncCallback, DependencyMutation } from '../projects/types'; +import { AsyncCallback } from '../projects/types'; import { createDependencyMutation } from '../projects/mutations'; import { updatePackage } from '../projects/package'; @@ -187,8 +187,6 @@ export const configurePlugins = async () => { const { dependencies, devDependencies } = c.files.project.package; // const ovMsg = isTemplate ? 'This is template. NO ACTION' : 'package.json will be overriden'; - const mutations: Array = []; - Object.keys(c.buildConfig.plugins).forEach((k) => { const plugin = getMergedPlugin(c, k); @@ -223,21 +221,20 @@ export const configurePlugins = async () => { // ${chalk().bold(c.paths.project.builds.config)}: v(${chalk().green(plugin.version)}). // ${ovMsg}` // ); - mutations.push( - createDependencyMutation({ - name: k, - original: { - version: dependencies[k], - }, - updated: { - version: plugin.version, - }, - type: 'dependencies', - msg: 'Version mismatch', - source: 'plugin (renative.json)', - targetPath: c.paths.project.package, - }) - ); + + createDependencyMutation({ + name: k, + original: { + version: dependencies[k], + }, + updated: { + version: plugin.version, + }, + type: 'dependencies', + msg: 'Version mismatch', + source: 'plugin (renative.json)', + targetPath: c.paths.project.package, + }); // hasPackageChanged = true; // _applyPackageDependency(newDeps, k, plugin.version); @@ -253,21 +250,21 @@ export const configurePlugins = async () => { // devDependencies[k] // )}) and plugins.json: v(${chalk().red(plugin.version)}). ${ovMsg}` // ); - mutations.push( - createDependencyMutation({ - name: k, - original: { - version: devDependencies[k], - }, - updated: { - version: plugin.version, - }, - type: 'devDependencies', - msg: 'Version mismatch', - source: 'plugin (renative.json)', - targetPath: c.paths.project.package, - }) - ); + + createDependencyMutation({ + name: k, + original: { + version: devDependencies[k], + }, + updated: { + version: plugin.version, + }, + type: 'devDependencies', + msg: 'Version mismatch', + source: 'plugin (renative.json)', + targetPath: c.paths.project.package, + }); + // hasPackageChanged = true; // _applyPackageDependency(newDevDeps, k, plugin.version); } @@ -279,19 +276,18 @@ export const configurePlugins = async () => { // plugin.version // )}) in package.json. ${ovMsg}` // ); - mutations.push( - createDependencyMutation({ - name: k, - updated: { - version: plugin.version, - }, - // TODO: should be controlled by plugin if this devDependency - type: 'dependencies', - msg: 'Missing dependency', - source: 'plugin (renative.json)', - targetPath: c.paths.project.package, - }) - ); + + createDependencyMutation({ + name: k, + updated: { + version: plugin.version, + }, + // TODO: should be controlled by plugin if this devDependency + type: 'dependencies', + msg: 'Missing dependency', + source: 'plugin (renative.json)', + targetPath: c.paths.project.package, + }); // hasPackageChanged = true; // if (plugin.version) { @@ -358,10 +354,6 @@ export const configurePlugins = async () => { } }); - if (mutations.length) { - c._requiresNpmInstall = true; - } - // When in template we want warnings but NOT file overrides // if (isTemplate) return true; diff --git a/packages/core/src/projects/mutations.ts b/packages/core/src/projects/mutations.ts index 094b8d810b..bb2f2b403e 100644 --- a/packages/core/src/projects/mutations.ts +++ b/packages/core/src/projects/mutations.ts @@ -1,10 +1,14 @@ -import { logInfo, logWarning } from '../logger'; +import { chalk, logRaw, logWarning } from '../logger'; import { getContext } from '../context/provider'; import { DependencyMutation } from './types'; +import { inquirerPrompt } from '../api'; +import { NpmPackageFile } from '../configs/types'; +import { updatePackage } from './package'; export const createDependencyMutation = (opts: DependencyMutation) => { const ctx = getContext(); ctx.mutations.pendingMutations.push(opts); + ctx._requiresNpmInstall = true; return opts; }; @@ -12,14 +16,53 @@ export const handleMutations = async () => { const ctx = getContext(); const mutations = ctx.mutations.pendingMutations; if (!mutations.length) return true; - logWarning('Dependency conflicts detected. Please resolve them before continuing'); + logWarning('Updates to package.json are required:'); + let msg = ''; mutations.forEach((m) => { - logInfo(`- ${m.name} ${m.msg} (${m.original?.version || 'N/A'}) => (${m.updated.version})`); + msg += `- ${chalk().bold(m.name)} (${chalk().red(m.original?.version || 'N/A')}) => (${chalk().green( + m.updated.version + )}) ${chalk().gray(`${m.msg} | ${m.source}`)}\n`; }); + logRaw(msg); const isTemplate = ctx.buildConfig?.isTemplate; - console.log('DJDJDJJDJDJD', mutations); if (isTemplate) return true; //Check with user - return false; + const choices = [ + 'Update package and install (recommended)', + 'Update package and skip install', + 'Continue without update or install', + ]; + const { confirm } = await inquirerPrompt({ + name: 'confirm', + type: 'list', + default: choices[0], + choices, + message: 'What to do?', + }); + + ctx.mutations.pendingMutations = []; + + if (confirm === choices[2]) { + // We skip the update and tell up stream to skip install + return false; + } + + const updateObj: Partial = {}; + mutations.forEach((m) => { + updateObj[m.type] = updateObj[m.type] || {}; + const dep = updateObj[m.type]; + if (dep) { + dep[m.name] = m.updated.version; + } + }); + + updatePackage(updateObj); + + if (confirm === choices[1]) { + // We update package butt tell up stream to skip install + return false; + } + + return true; }; diff --git a/packages/core/src/projects/npm.ts b/packages/core/src/projects/npm.ts index 687e9b0813..576e959e7f 100644 --- a/packages/core/src/projects/npm.ts +++ b/packages/core/src/projects/npm.ts @@ -6,6 +6,7 @@ import { doResolve } from '../system/resolve'; import { RnvContext } from '../context/types'; import { inquirerPrompt } from '../api'; import { getContext } from '../context/provider'; +import { handleMutations } from './mutations'; export const checkIfProjectAndNodeModulesExists = async () => { logDefault('checkIfProjectAndNodeModulesExists'); @@ -120,6 +121,9 @@ export const isYarnInstalled = () => commandExistsSync('yarn') || doResolve('yar export const installPackageDependencies = async (failOnError = false) => { const c = getContext(); + const result = await handleMutations(); + + if (!result) return; c.runtime.forceBuildHookRebuild = true; const customScript = _getInstallScript(c); diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts index 2849838a1e..3ccc753a63 100644 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ b/packages/engine-core/src/tasks/global/taskInstall.ts @@ -1,4 +1,4 @@ -import { areNodeModulesInstalled, logInfo, createTask, RnvTaskName, handleMutations } from '@rnv/core'; +import { areNodeModulesInstalled, logInfo, createTask, RnvTaskName } from '@rnv/core'; import { installPackageDependenciesAndPlugins } from '../../plugins'; export default createTask({ @@ -15,7 +15,7 @@ export default createTask({ logInfo('node_modules folder is out of date. INSTALLING...'); } ctx._requiresNpmInstall = false; - await handleMutations(); + // await handleMutations(); await installPackageDependenciesAndPlugins(); } return true; From 8de41d35ff15f91cab9e7394916ed486716de6e0 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 28 Mar 2024 06:37:47 +0100 Subject: [PATCH 135/175] handle task clashes, UT updates --- .../core/src/context/__tests__/index.test.ts | 1 + .../src/tasks/__tests__/taskFinder.test.ts | 96 +++++-------------- packages/core/src/tasks/taskFinder.ts | 20 +++- .../__tests__/taskPlatformList.test.ts | 10 +- .../src/tasks/__tests__/taskStart.test.ts | 6 +- 5 files changed, 53 insertions(+), 80 deletions(-) diff --git a/packages/core/src/context/__tests__/index.test.ts b/packages/core/src/context/__tests__/index.test.ts index f8923d10a0..321812127b 100644 --- a/packages/core/src/context/__tests__/index.test.ts +++ b/packages/core/src/context/__tests__/index.test.ts @@ -35,6 +35,7 @@ describe('Context tests', () => { 'isDefault', 'isSystemWin', 'logging', + 'mutations', 'paths', 'payload', 'platform', diff --git a/packages/core/src/tasks/__tests__/taskFinder.test.ts b/packages/core/src/tasks/__tests__/taskFinder.test.ts index 4a3509e56e..9bed6e8ead 100644 --- a/packages/core/src/tasks/__tests__/taskFinder.test.ts +++ b/packages/core/src/tasks/__tests__/taskFinder.test.ts @@ -1,19 +1,17 @@ import { findSuitableTask } from '../taskFinder'; -import { DEFAULT_TASK_DESCRIPTIONS } from '../constants'; import { getContext } from '../../context/provider'; import { generateContextDefaults } from '../../context/defaults'; import { getTaskNameFromCommand } from '../taskHelpers'; import { getRegisteredTasks } from '../taskRegistry'; +import { RnvTaskMap } from '../types'; +import { inquirerPrompt } from '../../api'; -jest.mock('../../engines'); jest.mock('../taskHelpers'); jest.mock('../taskRegistry'); jest.mock('chalk'); jest.mock('../../logger'); -jest.mock('../../api'); jest.mock('../../context/provider'); -jest.mock('../constants', () => ({ DEFAULT_TASK_DESCRIPTIONS: {} })); -jest.mock('../../projects/dependencies'); +jest.mock('../../api'); beforeEach(() => { // NOTE: do not call createRnvContext() in core library itself @@ -23,23 +21,11 @@ afterEach(() => { jest.resetAllMocks(); }); -// const ENGINE_MOCK_PROPS = { -// platforms: {}, -// config: { -// id: '', -// engineExtension: '', -// overview: '', -// packageName: '', -// }, -// projectDirName: '', -// runtimeExtraProps: {}, -// serverDirName: '', -// }; - -const MOCK_TASKS = { +const MOCK_TASKS: RnvTaskMap = { ['en1::mock-task']: { - description: 'mock task 1', + description: 'mock task 1 with ios', task: 'mock-task', + platforms: ['ios'], options: [], }, ['en1::mock-task-2']: { @@ -48,82 +34,50 @@ const MOCK_TASKS = { options: [], }, ['en2::mock-task']: { - description: 'mock task 1', + description: 'mock task 1 with android', task: 'mock-task', + platforms: ['android'], options: [], }, }; -// const rnvEngineMock1: RnvEngine = { -// ...ENGINE_MOCK_PROPS, -// tasks: { -// ['mock-task']: { -// description: 'mock task 1', -// task: 'mock-task', -// options: [], -// }, -// }, -// }; - -// const rnvEngineMock2: RnvEngine = { -// ...ENGINE_MOCK_PROPS, -// tasks: { -// //NOTE: order of task here is IMPORTANT -// ['mock-task-2']: { -// description: 'mock task 2', -// task: 'mock-task-2', -// options: [], -// }, -// ['mock-task']: { -// description: 'mock task 1', -// task: 'mock-task', -// options: [], -// }, -// }, -// }; - describe('Get suitable tasks', () => { - it('should return all tasks for given 1 engine', () => { + it('should return matching task for matching command', async () => { // GIVEN - jest.mocked(getTaskNameFromCommand).mockReturnValue(''); + jest.mocked(getTaskNameFromCommand).mockReturnValue('mock-task-2'); jest.mocked(getContext).mockReturnValue(generateContextDefaults()); jest.mocked(getRegisteredTasks).mockReturnValue({ ...MOCK_TASKS }); - // jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1]); - // jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); // WHEN - const result = findSuitableTask(); + const result = await findSuitableTask(); // THEN - expect(Object.keys(result)).toEqual(['mock-task']); - expect(result['mock-task'].description).toEqual('mock task 1'); + expect(result?.description).toEqual('mock task 2'); }); - it('should return common description for tasks from 2 different engines but same name', () => { + it('should return matching task filtered by command and platform out of 2 conflicting ones', async () => { // GIVEN jest.mocked(getTaskNameFromCommand).mockReturnValue('mock-task'); jest.mocked(getContext).mockReturnValue(generateContextDefaults()); - // jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock1, rnvEngineMock2]); + const ctx = getContext(); + ctx.platform = 'ios'; jest.mocked(getRegisteredTasks).mockReturnValue({ ...MOCK_TASKS }); - // jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); - DEFAULT_TASK_DESCRIPTIONS['mock-task'] = 'mock task common'; // WHEN - const result = findSuitableTask(); + const result = await findSuitableTask(); // THEN - expect(Object.keys(result)).toEqual(['mock-task', 'mock-task-2']); - expect(result['mock-task'].description).toEqual('mock task common'); + expect(result?.description).toEqual('mock task 1 with ios'); }); - it('should return first task description for tasks from 2 different engines but same name if common desc not available', () => { + it('should trigger inquirer if result is more than 1 task available', async () => { // GIVEN - jest.mocked(getTaskNameFromCommand).mockReturnValue(''); + jest.mocked(getTaskNameFromCommand).mockReturnValue('mock-task'); jest.mocked(getContext).mockReturnValue(generateContextDefaults()); + jest.mocked(inquirerPrompt).mockResolvedValue(MOCK_TASKS['en1::mock-task']); + const ctx = getContext(); + ctx.platform = null; jest.mocked(getRegisteredTasks).mockReturnValue({ ...MOCK_TASKS }); - // jest.mocked(getRegisteredEngines).mockReturnValue([rnvEngineMock2, rnvEngineMock1]); - // jest.mocked(checkIfProjectAndNodeModulesExists).mockResolvedValue(); - delete DEFAULT_TASK_DESCRIPTIONS['mock-task']; // WHEN - const result = findSuitableTask(); + const result = await findSuitableTask(); // THEN - expect(Object.keys(result)).toEqual(['mock-task-2', 'mock-task']); - expect(result['mock-task'].description).toEqual('mock task 1'); + expect(inquirerPrompt).toHaveBeenCalledTimes(1); + expect(result).toEqual(MOCK_TASKS['en1::mock-task']); }); }); diff --git a/packages/core/src/tasks/taskFinder.ts b/packages/core/src/tasks/taskFinder.ts index 9da13544ab..ba7fe11c2d 100644 --- a/packages/core/src/tasks/taskFinder.ts +++ b/packages/core/src/tasks/taskFinder.ts @@ -1,8 +1,9 @@ -import { logDefault } from '../logger'; +import { logDefault, logWarning } from '../logger'; import type { RnvTask } from './types'; import { getContext } from '../context/provider'; import { getRegisteredTasks } from './taskRegistry'; import { getTaskNameFromCommand, selectPlatformIfRequired } from './taskHelpers'; +import { inquirerPrompt } from '../api'; export const findSuitableTask = async (): Promise => { logDefault('findSuitableTask'); @@ -58,20 +59,31 @@ export const extractSingleExecutableTask = async ( hasPlatformAwareTasks = true; } }); + if (hasPlatformAwareTasks) { // Restart the process now we defined specific platform await selectPlatformIfRequired(); const newSuitableTasks = await findTasksByTaskName(taskName); if (newSuitableTasks.length === 0) { - throw new Error('TODO cannot find any suitable tasks after platform selection'); + logWarning('No suitable tasks found after platform selection'); + // throw new Error('TODO cannot find any suitable tasks after platform selection'); } else if (newSuitableTasks.length === 1) { return newSuitableTasks[0]; } } - throw new Error('TODO interactive selection multiple tasks'); + logWarning(`Multiple competing tasks found for ${taskName} task. Please select one:`); + const { result } = await inquirerPrompt({ + type: 'list', + name: 'result', + message: 'Select task', + choices: suitableTasks.map((v) => ({ + name: `${v.task} - registered to: ${v.ownerID}`, + value: v, + })), + }); + return result; } // Found no tasks - // throw new Error('TODO found no tasks'); return undefined; }; diff --git a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts index 485699b8be..55c49db8ee 100644 --- a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts +++ b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts @@ -1,4 +1,4 @@ -import { createRnvContext, executeTask, generatePlatformChoices, getContext } from '@rnv/core'; +import { createRnvContext, generatePlatformChoices, getContext, logToSummary } from '@rnv/core'; import taskPlatformList from '../taskPlatformList'; jest.mock('@rnv/core'); @@ -14,7 +14,9 @@ afterEach(() => { test('Execute task.rnv.platform.list', async () => { //GIVEN const ctx = getContext(); - jest.mocked(generatePlatformChoices).mockReturnValue([]); + jest.mocked(generatePlatformChoices).mockReturnValue([ + { name: 'MOCK_CHOICE', value: 'android', isConnected: false }, + ]); //WHEN await expect( taskPlatformList.fn?.({ @@ -26,5 +28,7 @@ test('Execute task.rnv.platform.list', async () => { }) ).resolves.toEqual(true); //THEN - expect(executeTask).toHaveBeenCalledWith('project configure', 'platform list', undefined); + expect(taskPlatformList.dependsOn).toEqual(['project configure']); + expect(generatePlatformChoices).toHaveBeenCalled(); + expect(logToSummary).toHaveBeenCalledWith(`Platforms:\n\nandroid\n`); }); diff --git a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts index 1f6fd4b514..a4a34d9997 100644 --- a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts +++ b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts @@ -1,4 +1,4 @@ -import { createRnvContext, doResolve, executeTask, getContext } from '@rnv/core'; +import { RnvTaskName, createRnvContext, doResolve, executeTask, getContext } from '@rnv/core'; import taskStart from '../taskStart'; import { startReactNative } from '../../metroRunner'; @@ -29,6 +29,8 @@ describe('taskStart', () => { shouldSkip: false, }); // THEN + expect(taskStart.dependsOn).toEqual([RnvTaskName.configureSoft]); + expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: true }); }); it('Execute task.rnv.start', async () => { @@ -60,7 +62,7 @@ describe('taskStart', () => { ctx, taskName: 'MOCK_taskName', originTaskName: 'MOCK_originTaskName', - parentTaskName: 'MOCK_parentTaskName', + parentTaskName: undefined, shouldSkip: false, }); // THEN From 13e7ff14cb7e3914e491162e22385288d5db0f66 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 28 Mar 2024 06:50:38 +0100 Subject: [PATCH 136/175] fix tizenwatch, tizenmobile support --- .../platform/__tests__/taskPlatformList.test.ts | 4 ++-- packages/sdk-react-native/src/constants.ts | 12 +++++++++++- packages/sdk-tizen/src/constants.ts | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts index 55c49db8ee..f5493d4cc2 100644 --- a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts +++ b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts @@ -15,7 +15,7 @@ test('Execute task.rnv.platform.list', async () => { //GIVEN const ctx = getContext(); jest.mocked(generatePlatformChoices).mockReturnValue([ - { name: 'MOCK_CHOICE', value: 'android', isConnected: false }, + { name: 'MOCK_PLATFORM', value: 'android', isConnected: false }, ]); //WHEN await expect( @@ -30,5 +30,5 @@ test('Execute task.rnv.platform.list', async () => { //THEN expect(taskPlatformList.dependsOn).toEqual(['project configure']); expect(generatePlatformChoices).toHaveBeenCalled(); - expect(logToSummary).toHaveBeenCalledWith(`Platforms:\n\nandroid\n`); + expect(logToSummary).toHaveBeenCalledWith(`Platforms:\n\n[1]> MOCK_PLATFORM\n`); }); diff --git a/packages/sdk-react-native/src/constants.ts b/packages/sdk-react-native/src/constants.ts index b7549e56a3..0872df9415 100644 --- a/packages/sdk-react-native/src/constants.ts +++ b/packages/sdk-react-native/src/constants.ts @@ -1,3 +1,13 @@ import { PlatformKey } from '@rnv/core'; -export const SdkPlatforms: Array = ['ios', 'android', 'androidtv', 'androidwear', 'firetv', 'macos']; +export const SdkPlatforms: Array = [ + 'ios', + 'android', + 'androidtv', + 'androidwear', + 'firetv', + 'macos', + 'xbox', + 'windows', + 'tvos', +]; diff --git a/packages/sdk-tizen/src/constants.ts b/packages/sdk-tizen/src/constants.ts index 6d7e566060..02235a76e8 100644 --- a/packages/sdk-tizen/src/constants.ts +++ b/packages/sdk-tizen/src/constants.ts @@ -4,4 +4,4 @@ export const CLI_TIZEN_EMULATOR = 'tizenEmulator'; export const CLI_TIZEN = 'tizen'; export const CLI_SDB_TIZEN = 'tizenSdb'; -export const SdkPlatforms: Array = ['tizen']; +export const SdkPlatforms: Array = ['tizen', 'tizenwatch', 'tizenmobile']; From 2ef34f7bd26639064efc5fb81ef27810c3e35188 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 28 Mar 2024 07:10:04 +0100 Subject: [PATCH 137/175] fix UTs --- __mocks__/@rnv/core.ts | 46 ++++++++++--------- .../src/tasks/__tests__/taskFinder.test.ts | 2 +- .../__tests__/taskPlatformList.test.ts | 2 +- .../src/tasks/__tests__/taskStart.test.ts | 5 +- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/__mocks__/@rnv/core.ts b/__mocks__/@rnv/core.ts index bc3ef95dca..d321ff2494 100644 --- a/__mocks__/@rnv/core.ts +++ b/__mocks__/@rnv/core.ts @@ -10,30 +10,32 @@ type Context = { const rnvcore: any = jest.createMockFromModule('@rnv/core'); +function mockChalk(v) { + return v; +} + const _chalkCols: any = { - white: (v) => v, - green: (v) => v, - red: (v) => v, - yellow: (v) => v, - default: (v) => v, - gray: (v) => v, - grey: (v) => v, - blue: (v) => v, - cyan: (v) => v, - magenta: (v) => v, - bold: (v) => v, - rgb: (v) => v, + white: mockChalk, + green: mockChalk, + red: mockChalk, + yellow: mockChalk, + default: mockChalk, + gray: mockChalk, + grey: mockChalk, + blue: mockChalk, + cyan: mockChalk, + magenta: mockChalk, + bold: mockChalk, + rgb: mockChalk, }; -function mockChalk() { - return _chalkCols; -} + Object.assign(mockChalk, _chalkCols); -Object.keys(_chalkCols).forEach((key) => { - _chalkCols[key] = mockChalk; -}); -const _chalkMono = { - ..._chalkCols, -}; +// Object.keys(_chalkCols).forEach((key) => { +// _chalkCols[key] = mockChalk; +// }); +// const _chalkMono = { +// ..._chalkCols, +// }; const generateRnvConfigPathObj = () => { return { @@ -255,7 +257,7 @@ const generateContextDefaults = (ctx?: Context) => { }; }; rnvcore.createTask = (task) => task; -rnvcore.chalk = () => _chalkMono; +rnvcore.chalk = () => _chalkCols; rnvcore.createRnvContext = (ctx?: Context) => { rnvcore.__MOCK_RNV_CONTEXT = generateContextDefaults(ctx); }; diff --git a/packages/core/src/tasks/__tests__/taskFinder.test.ts b/packages/core/src/tasks/__tests__/taskFinder.test.ts index 9bed6e8ead..1b4e4cecf6 100644 --- a/packages/core/src/tasks/__tests__/taskFinder.test.ts +++ b/packages/core/src/tasks/__tests__/taskFinder.test.ts @@ -70,7 +70,7 @@ describe('Get suitable tasks', () => { // GIVEN jest.mocked(getTaskNameFromCommand).mockReturnValue('mock-task'); jest.mocked(getContext).mockReturnValue(generateContextDefaults()); - jest.mocked(inquirerPrompt).mockResolvedValue(MOCK_TASKS['en1::mock-task']); + jest.mocked(inquirerPrompt).mockResolvedValue({ result: MOCK_TASKS['en1::mock-task'] }); const ctx = getContext(); ctx.platform = null; jest.mocked(getRegisteredTasks).mockReturnValue({ ...MOCK_TASKS }); diff --git a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts index f5493d4cc2..d7d67ea055 100644 --- a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts +++ b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformList.test.ts @@ -30,5 +30,5 @@ test('Execute task.rnv.platform.list', async () => { //THEN expect(taskPlatformList.dependsOn).toEqual(['project configure']); expect(generatePlatformChoices).toHaveBeenCalled(); - expect(logToSummary).toHaveBeenCalledWith(`Platforms:\n\n[1]> MOCK_PLATFORM\n`); + expect(logToSummary).toHaveBeenCalledWith(`Platforms:\n\n [1]> MOCK_PLATFORM`); }); diff --git a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts index a4a34d9997..f422274695 100644 --- a/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts +++ b/packages/sdk-react-native/src/tasks/__tests__/taskStart.test.ts @@ -1,4 +1,4 @@ -import { RnvTaskName, createRnvContext, doResolve, executeTask, getContext } from '@rnv/core'; +import { RnvTaskName, createRnvContext, doResolve, getContext } from '@rnv/core'; import taskStart from '../taskStart'; import { startReactNative } from '../../metroRunner'; @@ -19,7 +19,6 @@ describe('taskStart', () => { // GIVEN const ctx = getContext(); ctx.platform = 'ios'; - jest.mocked(executeTask).mockResolvedValueOnce(undefined); // WHEN await taskStart.fn?.({ ctx, @@ -30,7 +29,6 @@ describe('taskStart', () => { }); // THEN expect(taskStart.dependsOn).toEqual([RnvTaskName.configureSoft]); - expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: true }); }); it('Execute task.rnv.start', async () => { @@ -66,7 +64,6 @@ describe('taskStart', () => { shouldSkip: false, }); // THEN - expect(executeTask).toHaveBeenCalledTimes(1); expect(startReactNative).toHaveBeenCalledWith({ waitForBundler: true, customCliPath: 'MOCKED_PATH/local-cli/cli.js', From ec051206e2dbecc3dc7d898e1348823974406b87 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 28 Mar 2024 07:44:32 +0100 Subject: [PATCH 138/175] fix bootstrap --- packages/engine-rn-web/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/engine-rn-web/package.json b/packages/engine-rn-web/package.json index 0ffe5e2308..b857a5ca55 100644 --- a/packages/engine-rn-web/package.json +++ b/packages/engine-rn-web/package.json @@ -34,6 +34,7 @@ "dependencies": { "@react-native/babel-preset": "0.73.21", "@rnv/sdk-tizen": "1.0.0-rc.12", + "@rnv/sdk-kaios": "1.0.0-rc.12", "@rnv/sdk-utils": "1.0.0-rc.12", "@rnv/sdk-webos": "1.0.0-rc.12", "@rnv/sdk-webpack": "1.0.0-rc.12", From 6b96130e5240c2d858587bcba4ef4975000b69b9 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Thu, 28 Mar 2024 08:34:13 +0100 Subject: [PATCH 139/175] fix tvos --- packages/core/src/tasks/taskExecutors.ts | 1 + packages/core/src/tasks/taskHelpers.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/core/src/tasks/taskExecutors.ts b/packages/core/src/tasks/taskExecutors.ts index 7a3fdc6a39..32176db6de 100644 --- a/packages/core/src/tasks/taskExecutors.ts +++ b/packages/core/src/tasks/taskExecutors.ts @@ -57,6 +57,7 @@ export const initializeTask = async (taskInstance: RnvTask | undefined) => { // let's pick it based on task ownerID if (!c.runtime.engine) { c.runtime.engine = getEngineRunnerByOwnerID(taskInstance); + c.runtime.runtimeExtraProps = c.runtime.engine?.runtimeExtraProps || {}; } logInfo(`Current engine: ${chalk().bold(taskInstance.ownerID)} ${chalk().grey(`(${c.runtime.engine?.rootPath})`)}`); diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index b5b2a298bf..53e15b6d87 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -25,6 +25,7 @@ export const selectPlatformIfRequired = async () => { // TODO: move this to more generic place? c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; c.runtime.engine = getEngineRunnerByPlatform(c.platform); + c.runtime.runtimeExtraProps = c.runtime.engine?.runtimeExtraProps || {}; }; export const getTaskNameFromCommand = (): string | undefined => { From 4ac42d81c7725d427bf19ca6e068efb3dd39ed24 Mon Sep 17 00:00:00 2001 From: pauliusguzas Date: Thu, 28 Mar 2024 10:20:50 +0200 Subject: [PATCH 140/175] change e2e ports --- .github/workflows/e2e-harness-android.yml | 2 +- .github/workflows/e2e-harness-androidtv.yml | 2 +- .github/workflows/e2e-harness-ios.yml | 2 +- .github/workflows/e2e-harness-tvos.yml | 2 +- .github/workflows/e2e-harness-web.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/e2e-harness-android.yml b/.github/workflows/e2e-harness-android.yml index 3bf743db82..e6605bee95 100644 --- a/.github/workflows/e2e-harness-android.yml +++ b/.github/workflows/e2e-harness-android.yml @@ -36,7 +36,7 @@ jobs: cd packages/app-harness && yarn run:android-test & sleep 180 - name: E2E run: | - cd packages/app-harness && yarn e2e:android && kill $(lsof -t -i:8083) + cd packages/app-harness && yarn e2e:android && kill $(lsof -t -i:8093) # Commented because e2e tests would fail due to minion issues # - name: Post message to Slack via Webhook # if: ${{ github.event_name == 'push' && failure() }} diff --git a/.github/workflows/e2e-harness-androidtv.yml b/.github/workflows/e2e-harness-androidtv.yml index 0c42c3320b..6df3d3e6fb 100644 --- a/.github/workflows/e2e-harness-androidtv.yml +++ b/.github/workflows/e2e-harness-androidtv.yml @@ -36,7 +36,7 @@ jobs: cd packages/app-harness && yarn run:androidtv-test & sleep 180 - name: E2E run: | - cd packages/app-harness && yarn e2e:androidtv && kill $(lsof -t -i:8084) + cd packages/app-harness && yarn e2e:androidtv && kill $(lsof -t -i:8094) # Commented because e2e tests would fail due to minion issues # - name: Post message to Slack via Webhook # if: ${{ github.event_name == 'push' && failure() }} diff --git a/.github/workflows/e2e-harness-ios.yml b/.github/workflows/e2e-harness-ios.yml index e3bdd87ad9..7255f351f0 100644 --- a/.github/workflows/e2e-harness-ios.yml +++ b/.github/workflows/e2e-harness-ios.yml @@ -37,7 +37,7 @@ jobs: cd packages/app-harness && yarn run:ios-test & sleep 1200 - name: E2E run: | - cd packages/app-harness && yarn e2e:ios && kill $(lsof -t -i:8082) + cd packages/app-harness && yarn e2e:ios && kill $(lsof -t -i:8092) # Commented because e2e tests would fail due to minion issues # - name: Post message to Slack via Webhook # if: ${{ github.event_name == 'push' && failure() }} diff --git a/.github/workflows/e2e-harness-tvos.yml b/.github/workflows/e2e-harness-tvos.yml index 5d854aff81..3014aad99f 100644 --- a/.github/workflows/e2e-harness-tvos.yml +++ b/.github/workflows/e2e-harness-tvos.yml @@ -37,7 +37,7 @@ jobs: cd packages/app-harness && yarn run:tvos-test & sleep 1200 - name: E2E run: | - cd packages/app-harness && yarn e2e:tvos && kill $(lsof -t -i:8089) + cd packages/app-harness && yarn e2e:tvos && kill $(lsof -t -i:8099) # Commented because e2e tests would fail due to minion issues # - name: Post message to Slack via Webhook # if: ${{ github.event_name == 'push' && failure() }} diff --git a/.github/workflows/e2e-harness-web.yml b/.github/workflows/e2e-harness-web.yml index 04882bb0c2..50bebc0f52 100644 --- a/.github/workflows/e2e-harness-web.yml +++ b/.github/workflows/e2e-harness-web.yml @@ -36,7 +36,7 @@ jobs: cd packages/app-harness && yarn start:web-test & sleep 60 - name: E2E run: | - cd packages/app-harness && yarn e2e:web && kill $(lsof -t -i:8080) + cd packages/app-harness && yarn e2e:web && kill $(lsof -t -i:8090) # Commented because e2e tests would fail due to minion issues # - name: Post message to Slack via Webhook # if: ${{ github.event_name == 'push' && failure() }} From 82caba10b34e51cde419102a76e1f850c7ac0250 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 29 Mar 2024 14:22:00 +0100 Subject: [PATCH 141/175] fix rnv new --- packages/core/src/tasks/taskHelpers.ts | 10 +++++++--- .../integration-starter/src/tasks/taskStarterHello.ts | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index 53e15b6d87..558e42c100 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -5,6 +5,8 @@ import { RnvTask, RnvTaskMap, RnvTaskOption } from './types'; export const selectPlatformIfRequired = async () => { const c = getContext(); + // TODO: move this to more generic place? + c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; if (!c.platform) { const taskName = getTaskNameFromCommand(); const platforms = c.runtime.availablePlatforms; @@ -23,7 +25,6 @@ export const selectPlatformIfRequired = async () => { } } // TODO: move this to more generic place? - c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; c.runtime.engine = getEngineRunnerByPlatform(c.platform); c.runtime.runtimeExtraProps = c.runtime.engine?.runtimeExtraProps || {}; }; @@ -39,14 +40,17 @@ export const getTaskNameFromCommand = (): string | undefined => { return taskName; }; -export const generateRnvTaskMap = (taskArr: Array, config: { name: string }) => { +export const generateRnvTaskMap = (taskArr: Array, config: { name?: string; packageName?: string }) => { const tasks: RnvTaskMap = {}; + const ownerID = config.packageName || config.name; + if (!ownerID) throw new Error('generateRnvTaskMap() requires config. to be defined!'); + taskArr.forEach((taskBlueprint) => { const taskInstance = { ...taskBlueprint }; const plts = taskInstance.platforms || []; const key = `${config.name}:${plts.join('-')}:${taskInstance.task}`; - taskInstance.ownerID = config.name; + taskInstance.ownerID = ownerID; taskInstance.key = key; tasks[key] = taskInstance; }); diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index d2cac8720c..d736381891 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -1,7 +1,8 @@ -import { createTask, logSuccess } from '@rnv/core'; +import { RnvTaskName, createTask, logSuccess } from '@rnv/core'; export default createTask({ description: 'Prints hello message', + dependsOn: [RnvTaskName.package], fn: async ({ ctx }) => { //TODO: switch to typed options once Context generics are supported const opts: any = ctx.program.opts(); @@ -9,5 +10,6 @@ export default createTask({ --my-opt: "${opts.myOpt}"`); }, task: 'starter hello', + platforms: ['ios'], options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], }); From bd264b6d3282e6110aa7ab25c11baa2be66f606a Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 29 Mar 2024 14:29:49 +0100 Subject: [PATCH 142/175] add better logging --- packages/core/src/configs/templates.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts index c07f6bd8f3..9138a63297 100644 --- a/packages/core/src/configs/templates.ts +++ b/packages/core/src/configs/templates.ts @@ -26,7 +26,11 @@ export const checkIfTemplateConfigured = async () => { } if (c.files.project.package.devDependencies) { if (c.files.project.package.devDependencies[k] !== obj.version) { - logInfo(`Updating template ${chalk().bold(`${k}`)} => ${chalk().green(obj.version)}. ...DONE`); + logInfo( + `Updating template ${chalk().bold(`${k}`)} ${chalk().red( + c.files.project.package.devDependencies[k] + )} => ${chalk().green(obj.version)}. ...DONE` + ); } c.files.project.package.devDependencies[k] = obj.version; From 51bc0fa64c811dc3c1ea49a8f77636a57f8b987e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 29 Mar 2024 14:53:28 +0100 Subject: [PATCH 143/175] check empty assetsFolder --- packages/sdk-utils/src/fonts.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/sdk-utils/src/fonts.ts b/packages/sdk-utils/src/fonts.ts index 73ab141703..8e7478d4af 100644 --- a/packages/sdk-utils/src/fonts.ts +++ b/packages/sdk-utils/src/fonts.ts @@ -52,6 +52,9 @@ export const configureFonts = async () => { }); fontsObj += '];'; + if (!fsExistsSync(c.paths.project.assets.dir)) { + mkdirSync(c.paths.project.assets.dir); + } if (!fsExistsSync(c.paths.project.assets.runtimeDir)) { mkdirSync(c.paths.project.assets.runtimeDir); } From 3a61558fcf72c4d5d7a1fa4db102034355a988f7 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 29 Mar 2024 17:03:51 +0100 Subject: [PATCH 144/175] fix integration tasks platform management --- packages/core/src/engines/index.ts | 15 ++++++++------- packages/core/src/runner.ts | 17 ++++++++++++----- packages/core/src/tasks/taskExecutors.ts | 24 ++++++++++++++++++++---- packages/core/src/tasks/taskFinder.ts | 13 +++++++------ packages/core/src/tasks/taskHelpers.ts | 17 ++++++++++++----- 5 files changed, 59 insertions(+), 27 deletions(-) diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 6d1aff4b0c..5be307914f 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -127,7 +127,7 @@ export const registerMissingPlatformEngines = async (taskInstance?: RnvTask) => ) { const registerEngineList: Array> = []; c.buildConfig.defaults?.supportedPlatforms?.forEach((platform) => { - registerEngineList.push(_registerPlatformEngine(c, platform)); + registerEngineList.push(registerPlatformEngine(platform)); }); if (registerEngineList.length) { @@ -148,7 +148,7 @@ export const registerAllPlatformEngines = async () => { } const registerEngineList: Array> = []; c.buildConfig.defaults.supportedPlatforms.forEach((platform) => { - registerEngineList.push(_registerPlatformEngine(c, platform)); + registerEngineList.push(registerPlatformEngine(platform)); }); if (registerEngineList.length) { @@ -386,8 +386,8 @@ const getScopedVersion = ( return null; }; -export const loadEngines = async (failOnMissingDeps?: boolean): Promise => { - logDefault('loadEngines'); +export const installEngines = async (failOnMissingDeps?: boolean): Promise => { + logDefault('installEngines'); const c = getContext(); if (!fsExistsSync(c.paths.project.config)) return true; @@ -442,7 +442,7 @@ ${enginesToInstall.map((v) => `> ${v.key}@${v.version}`).join('\n')} writeFileSync(c.paths.project.package, c.files.project.package); await installPackageDependencies(); - return loadEngines(true); + return installEngines(true); } const plugDepsCount = await loadEnginePluginDeps(engineConfigs); // const pkgDepsCount = await loadEnginePackageDeps(engineConfigs); @@ -457,7 +457,7 @@ ${enginesToInstall.map((v) => `> ${v.key}@${v.version}`).join('\n')} } // All engines ready to be registered - _registerPlatformEngine(c, c.platform); + registerPlatformEngine(c.platform); return true; }; @@ -490,8 +490,9 @@ const _resolvePkgPath = (c: RnvContext, packageName: string) => { return pkgPath; }; -const _registerPlatformEngine = async (c: RnvContext, platform: RnvPlatform | boolean): Promise => { +export const registerPlatformEngine = async (platform: RnvPlatform | boolean): Promise => { // Only register active platform engine to be faster + const c = getContext(); if (platform === true || !platform) return; const selectedEngineTemplate = getEngineTemplateByPlatform(platform); diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index e42d4da60b..099956b436 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -1,5 +1,5 @@ import { getContext } from './context/provider'; -import { loadEngines, registerMissingPlatformEngines } from './engines'; +import { installEngines, registerMissingPlatformEngines } from './engines'; import { loadIntegrations } from './integrations'; import { checkAndMigrateProject } from './migrator'; import { configureRuntimeDefaults } from './context/runtime'; @@ -11,6 +11,7 @@ import { getApi } from './api/provider'; import { RnvTask } from './tasks/types'; import { runInteractiveWizard, runInteractiveWizardForSubTasks } from './tasks/wizard'; import { initializeTask } from './tasks/taskExecutors'; +import { selectPlatformIfRequired } from './tasks/taskHelpers'; export const exitRnvCore = async (code: number) => { const ctx = getContext(); @@ -23,8 +24,8 @@ export const exitRnvCore = async (code: number) => { } }; -const loadAllEngineTasks = async () => { - const result = await loadEngines(); +const _installAndRegisterAllEngines = async () => { + const result = await installEngines(); // If false make sure we reload configs as it means it's freshly installed if (!result) { await updateRenativeConfigs(); @@ -49,7 +50,7 @@ export const executeRnvCore = async () => { // for "rnv" we simply load all engines upfront const { configExists } = c.paths.project; if (!c.command && configExists) { - await loadAllEngineTasks(); + await _installAndRegisterAllEngines(); await loadIntegrations(); return runInteractiveWizard(); } @@ -68,11 +69,17 @@ export const executeRnvCore = async () => { await loadIntegrations(); initTask = await findSuitableTask(); if (initTask) { + if (initTask.platforms) { + // If integration task requires platform selection + // we do it here so correct engine is registered properly + await selectPlatformIfRequired(initTask, true); + } + return initializeTask(initTask); } // Still no task found. time to load all engines to see if anything matches - await loadAllEngineTasks(); + await _installAndRegisterAllEngines(); initTask = await findSuitableTask(); if (initTask) { return initializeTask(initTask); diff --git a/packages/core/src/tasks/taskExecutors.ts b/packages/core/src/tasks/taskExecutors.ts index 32176db6de..6dd60fe4a3 100644 --- a/packages/core/src/tasks/taskExecutors.ts +++ b/packages/core/src/tasks/taskExecutors.ts @@ -1,4 +1,4 @@ -import { logDefault, logInitTask, logExitTask, chalk, logRaw, logInfo } from '../logger'; +import { logDefault, logInitTask, logExitTask, chalk, logRaw, logInfo, logToSummary } from '../logger'; import { executePipe } from '../buildHooks'; import type { RnvContext } from '../context/types'; import type { RnvTask } from './types'; @@ -35,12 +35,20 @@ export const executeTask = async (opts: { const inOnlyMode = ctx.program.opts().only; if (skipInOnlyMode && inOnlyMode) { const availableTasks = findTasksByTaskName(alternativeTaskInOnlyMode || RnvTaskName.configureSoft); - const taskInstance = await extractSingleExecutableTask(availableTasks, taskName); + const taskInstance = await extractSingleExecutableTask(availableTasks.match, taskName); return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); } const availableTasks = findTasksByTaskName(taskName); - const taskInstance = await extractSingleExecutableTask(availableTasks, taskName); + + if (availableTasks.match.length === 0 && !isOptional) { + logToSummary(`Current task registry: +${availableTasks.available.map((t) => `${t.task} ${chalk().gray(t.ownerID)}`).join('\n')} +`); + return Promise.reject(`Task "${taskName}" not found in registry!`); + } + + const taskInstance = await extractSingleExecutableTask(availableTasks.match, taskName); return _executeTaskInstance({ taskInstance, parentTaskName, originTaskName, isOptional, isFirstTask }); }; @@ -60,7 +68,15 @@ export const initializeTask = async (taskInstance: RnvTask | undefined) => { c.runtime.runtimeExtraProps = c.runtime.engine?.runtimeExtraProps || {}; } - logInfo(`Current engine: ${chalk().bold(taskInstance.ownerID)} ${chalk().grey(`(${c.runtime.engine?.rootPath})`)}`); + if (c.runtime.engine?.config) { + logInfo( + `Current engine: ${chalk().bold(c.runtime.engine?.config?.id)} ${chalk().grey( + `(${c.runtime.engine?.rootPath})` + )}` + ); + } else { + logInfo(`Current engine: n/a`); + } c.runtime.task = task; executedTasks = {}; diff --git a/packages/core/src/tasks/taskFinder.ts b/packages/core/src/tasks/taskFinder.ts index ba7fe11c2d..e96fccad21 100644 --- a/packages/core/src/tasks/taskFinder.ts +++ b/packages/core/src/tasks/taskFinder.ts @@ -17,7 +17,7 @@ export const findSuitableTask = async (): Promise => { } const suitableTasks = findTasksByTaskName(taskName); - const taskInstance = await extractSingleExecutableTask(suitableTasks, taskName); + const taskInstance = await extractSingleExecutableTask(suitableTasks.match, taskName); return taskInstance; }; @@ -25,7 +25,8 @@ export const findTasksByTaskName = (taskName: string) => { const result: RnvTask[] = []; const ctx = getContext(); const tasks = getRegisteredTasks(); - Object.values(tasks).forEach((v) => { + const taskArr = Object.values(tasks); + taskArr.forEach((v) => { const plat = ctx.platform; if (v.platforms && plat) { if (!v.platforms.includes(plat)) { @@ -42,7 +43,7 @@ export const findTasksByTaskName = (taskName: string) => { result.push(v); } }); - return result; + return { match: result, available: taskArr }; }; export const extractSingleExecutableTask = async ( @@ -64,11 +65,11 @@ export const extractSingleExecutableTask = async ( // Restart the process now we defined specific platform await selectPlatformIfRequired(); const newSuitableTasks = await findTasksByTaskName(taskName); - if (newSuitableTasks.length === 0) { + if (newSuitableTasks.match.length === 0) { logWarning('No suitable tasks found after platform selection'); // throw new Error('TODO cannot find any suitable tasks after platform selection'); - } else if (newSuitableTasks.length === 1) { - return newSuitableTasks[0]; + } else if (newSuitableTasks.match.length === 1) { + return newSuitableTasks.match[0]; } } diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index 558e42c100..a66386b534 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -1,15 +1,18 @@ import { inquirerPrompt } from '../api'; import { getContext } from '../context/provider'; -import { getEngineRunnerByPlatform } from '../engines'; +import { getEngineRunnerByPlatform, registerPlatformEngine } from '../engines'; import { RnvTask, RnvTaskMap, RnvTaskOption } from './types'; -export const selectPlatformIfRequired = async () => { +export const selectPlatformIfRequired = async ( + knownTaskInstance?: RnvTask, + registerEngineIfPlatformSelected?: boolean +) => { const c = getContext(); // TODO: move this to more generic place? c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; if (!c.platform) { const taskName = getTaskNameFromCommand(); - const platforms = c.runtime.availablePlatforms; + const platforms = knownTaskInstance?.platforms || c.runtime.availablePlatforms; if (platforms) { if (platforms.length === 1) { c.platform = platforms[0]; @@ -17,14 +20,18 @@ export const selectPlatformIfRequired = async () => { const { platform } = await inquirerPrompt({ type: 'list', name: 'platform', - message: `Pick a platform for task: "rnv ${taskName}"`, + message: `Pick a platform for task: "rnv ${knownTaskInstance?.task || taskName}"`, choices: platforms, }); c.platform = platform; } } } - // TODO: move this to more generic place? + + // TODO: move all below to more generic place? + if (registerEngineIfPlatformSelected) { + await registerPlatformEngine(c.platform); + } c.runtime.engine = getEngineRunnerByPlatform(c.platform); c.runtime.runtimeExtraProps = c.runtime.engine?.runtimeExtraProps || {}; }; From 70f145b31c24ddf6f2126affa4e98bc064c0a50f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Fri, 29 Mar 2024 23:58:14 +0100 Subject: [PATCH 145/175] cleanup template system --- packages/cli/src/logger/index.ts | 4 +- packages/core/src/buildHooks/index.ts | 9 +- packages/core/src/configs/configProject.ts | 10 +- packages/core/src/configs/index.ts | 2 +- packages/core/src/configs/templates.ts | 43 --- packages/core/src/context/defaults.ts | 1 - packages/core/src/context/types.ts | 3 - packages/core/src/enums/folderName.ts | 2 + packages/core/src/enums/taskName.ts | 2 +- packages/core/src/index.ts | 2 - packages/core/src/platforms/index.ts | 19 - packages/core/src/projects/bootstrap.ts | 167 --------- packages/core/src/projects/package.ts | 5 +- packages/core/src/runner.ts | 3 +- packages/core/src/schema/configFiles/app.ts | 5 +- .../core/src/schema/configFiles/project.ts | 67 ++-- packages/core/src/schema/shared/index.ts | 2 + packages/core/src/templates/index.ts | 349 ++++-------------- packages/engine-core/src/index.ts | 6 +- .../src/tasks/app/taskAppCreate.ts | 41 +- .../tasks/platform/taskPlatformConfigure.ts | 17 + .../src/tasks/project/taskProjectConfigure.ts | 2 - .../taskProjectPlatforms.ts} | 2 +- .../src/tasks/template/taskTemplateAdd.ts | 52 --- .../src/tasks/template/taskTemplateApply.ts | 46 +-- .../src/tasks/template/taskTemplateList.ts | 14 - packages/engine-core/src/templates.ts | 17 - .../src/tasks/taskConfigure.ts | 3 +- .../engine-rn-web/src/tasks/taskConfigure.ts | 10 +- .../src/tasks/taskConfigure.ts | 3 +- .../sdk-android/src/tasks/taskConfigure.ts | 3 +- packages/sdk-apple/src/tasks/taskConfigure.ts | 5 +- 32 files changed, 169 insertions(+), 747 deletions(-) delete mode 100644 packages/core/src/configs/templates.ts delete mode 100644 packages/core/src/projects/bootstrap.ts rename packages/engine-core/src/tasks/{platform/taskPlatformSetup.ts => project/taskProjectPlatforms.ts} (95%) delete mode 100644 packages/engine-core/src/tasks/template/taskTemplateAdd.ts delete mode 100644 packages/engine-core/src/tasks/template/taskTemplateList.ts delete mode 100644 packages/engine-core/src/templates.ts diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index 097286ab51..cc64bf0ddf 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -277,8 +277,8 @@ export const logSummary = (opts?: { header?: string; headerStyle?: 'success' | ' // } str += printIntoBox(`Engine: ${currentChalk.gray(ctx.runtime?.engine?.config?.id || '')}`); } - if (ctx.runtime?.activeTemplate) { - str += printIntoBox(`Template: ${currentChalk.gray(ctx.runtime?.activeTemplate)}`); + if (ctx.runtime?.currentTemplate) { + str += printIntoBox(`Template: ${currentChalk.gray(ctx.runtime?.currentTemplate)}`); } if (ctx.buildConfig?._meta?.currentAppConfigId) { str += printIntoBox(`App Config (-c): ${_highlightColor(ctx.buildConfig._meta?.currentAppConfigId)}`); diff --git a/packages/core/src/buildHooks/index.ts b/packages/core/src/buildHooks/index.ts index d39e1bc61b..361c0a7f7c 100644 --- a/packages/core/src/buildHooks/index.ts +++ b/packages/core/src/buildHooks/index.ts @@ -2,10 +2,10 @@ import path from 'path'; import { build } from 'esbuild'; import { logDebug, logError, logHook, logInfo } from '../logger'; import { fsExistsSync, copyFolderContentsRecursiveSync } from '../system/fs'; -import { doResolve } from '../system/resolve'; import { inquirerPrompt } from '../api'; import { getConfigProp } from '../context/contextProps'; import { getContext } from '../context/provider'; +import { RnvFolderName } from '../enums/folderName'; export const executePipe = async (key: string) => { const c = getContext(); @@ -70,11 +70,10 @@ export const buildHooks = async () => { } if (confirmed) { - const templatePath = c.buildConfig.currentTemplate ? doResolve(c.buildConfig.currentTemplate) : null; - let buildHooksSource; + const templatePath = c.paths.template.dir; + let buildHooksSource = path.join(templatePath, RnvFolderName.buildHooks, 'src'); // if there is a template and has buildhooks folder, use that instead of the default - if (templatePath && fsExistsSync(`${templatePath}/buildHooks/src`)) { - buildHooksSource = path.join(templatePath, 'buildHooks/src'); + if (fsExistsSync(buildHooksSource)) { shouldBuildHook = true; } else { buildHooksSource = path.join(c.paths.rnvCore.templateFilesDir, 'buildHooksSrc'); diff --git a/packages/core/src/configs/configProject.ts b/packages/core/src/configs/configProject.ts index 028f9ecf2c..9ba151fd98 100644 --- a/packages/core/src/configs/configProject.ts +++ b/packages/core/src/configs/configProject.ts @@ -20,8 +20,6 @@ const SYNCED_DEPS = [ '@rnv/template-starter', ]; -const SYNCED_TEMPLATES = ['@rnv/template-starter']; - export const upgradeProjectDependencies = (version: string) => { logDefault('upgradeProjectDependencies'); @@ -55,11 +53,9 @@ export const upgradeDependencies = ( _fixDeps(packageFile?.devDependencies, version); _fixDeps(packageFile?.dependencies, version); _fixDeps(packageFile?.peerDependencies, version); - SYNCED_TEMPLATES.forEach((templ) => { - if (configFile?.templates?.[templ]?.version) { - configFile.templates[templ].version = version; - } - }); + if (configFile?.templateConfig) { + configFile.templateConfig.version = version; + } if (packageFile) { writeFileSync(packagesPath, packageFile); diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 17ea300df0..f8edb13de7 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -24,7 +24,7 @@ export const loadFileExtended = (fileObj: Record, pathObj: RnvConte const extendsTemplate = fileObj[key]?.extendsTemplate; if (key === 'config' && extendsTemplate) { // extendsTemplate only applies to standard 'config' - let currTemplate = c.files.project[key]?.currentTemplate || fileObj[key].currentTemplate; + let currTemplate = c.files.project[key]?.templateConfig?.name || fileObj[key].templateConfig?.name; if (!currTemplate) { if (extendsTemplate.startsWith('@')) { currTemplate = extendsTemplate.split('/').slice(0, 2).join('/'); diff --git a/packages/core/src/configs/templates.ts b/packages/core/src/configs/templates.ts deleted file mode 100644 index 9138a63297..0000000000 --- a/packages/core/src/configs/templates.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { getContext } from '../context/provider'; -import { chalk, logInfo, logDefault, logWarning } from '../logger'; -import { doResolve } from '../system/resolve'; -import { writeRenativeConfigFile } from './utils'; - -export const checkIfTemplateConfigured = async () => { - logDefault('checkIfTemplateConfigured'); - const c = getContext(); - if (c.program.opts().skipDependencyCheck || c.buildConfig?.isTemplate) return true; - if (!c.buildConfig.templates) { - logWarning( - `Your ${chalk().bold(c.paths.project.config)} does not contain ${chalk().bold( - 'templates' - )} object. ReNative will skip template generation` - ); - return false; - } - Object.keys(c.buildConfig.templates).forEach((k) => { - const obj = c.buildConfig.templates?.[k] || { version: 'unknown template version' }; - if (!doResolve(k, false, { basedir: '../' }) && !doResolve(k, false)) { - logInfo( - `Your ${chalk().bold(`${k}@${obj.version}`)} template is missing in renative.json. CONFIGURING...DONE` - ); - c._requiresNpmInstall = true; - c.runtime.requiresBootstrap = true; - } - if (c.files.project.package.devDependencies) { - if (c.files.project.package.devDependencies[k] !== obj.version) { - logInfo( - `Updating template ${chalk().bold(`${k}`)} ${chalk().red( - c.files.project.package.devDependencies[k] - )} => ${chalk().green(obj.version)}. ...DONE` - ); - } - - c.files.project.package.devDependencies[k] = obj.version; - } - }); - - writeRenativeConfigFile(c.paths.project.package, c.files.project.package); - - return true; -}; diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 23ec70f458..43b1a0e538 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -50,7 +50,6 @@ const runtime: RnvContext['runtime'] = { skipBuildHooks: false, skipActiveServerCheck: false, versionCheckCompleted: false, - requiresForcedTemplateApply: false, forceBuildHookRebuild: false, requiresBootstrap: false, port: 3000, diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 6e81062a03..49287ccda4 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -118,7 +118,6 @@ export type RnvContextRuntime = { forceBuildHookRebuild: boolean; disableReset: boolean; skipActiveServerCheck: boolean; - requiresForcedTemplateApply: boolean; isWSConfirmed: boolean; _skipNativeDepResolutions: boolean; versionCheckCompleted: boolean; @@ -131,7 +130,6 @@ export type RnvContextRuntime = { currentPlatform?: RnvEnginePlatform; currentEngine?: RnvEngine; skipPackageUpdate?: boolean; - selectedTemplate?: string; _platformBuildsSuffix?: string; platformBuildsProjectPath?: string; targetUDID?: string; @@ -143,7 +141,6 @@ export type RnvContextRuntime = { localhost?: string; scheme?: string; appDir?: string; - activeTemplate?: string; timestamp?: number; appConfigDir?: string; currentTemplate?: string; diff --git a/packages/core/src/enums/folderName.ts b/packages/core/src/enums/folderName.ts index 1d92ab0e2e..b0ada7c5e3 100644 --- a/packages/core/src/enums/folderName.ts +++ b/packages/core/src/enums/folderName.ts @@ -17,4 +17,6 @@ export const RnvFolderName = { npmCache: 'npm_cache', // Convention folder for storing secrets per projects managed by rnv crypto secrets: 'secrets', + // Special folder for storing all build hooks in your project + buildHooks: 'buildHooks', } as const; diff --git a/packages/core/src/enums/taskName.ts b/packages/core/src/enums/taskName.ts index a6cb59c48c..56a315fdc4 100644 --- a/packages/core/src/enums/taskName.ts +++ b/packages/core/src/enums/taskName.ts @@ -33,7 +33,7 @@ export const RnvTaskName = { platformConnect: 'platform connect', platformEject: 'platform eject', platformList: 'platform list', - platformSetup: 'platform setup', + projectPlatforms: 'project platforms', sdkConfigure: 'sdk configure', projectConfigure: 'project configure', projectUpgrade: 'project upgrade', diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 8ebd92fa2f..c1b9b091ee 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -14,14 +14,12 @@ export * from './configs/configLocal'; export * from './configs/engines'; export * from './configs/configProject'; export * from './configs/platformAssets'; -export * from './configs/templates'; export * from './context/contextProps'; export * from './configs/utils'; export * from './projects/appConfig'; export * from './projects/assets'; export * from './projects/fonts'; -export * from './projects/bootstrap'; export * from './projects/version'; export * from './projects/npm'; export * from './projects/package'; diff --git a/packages/core/src/platforms/index.ts b/packages/core/src/platforms/index.ts index 9820465a19..7d2a091a4b 100644 --- a/packages/core/src/platforms/index.ts +++ b/packages/core/src/platforms/index.ts @@ -4,7 +4,6 @@ import { cleanFolder, copyFolderContentsRecursiveSync } from '../system/fs'; import { getTimestampPathsConfig, getAppFolder } from '../context/contextProps'; import { generateOptions, inquirerPrompt } from '../api'; import type { RnvPlatform, RnvPlatformWithAll } from '../types'; -import { updateProjectPlatforms } from '../configs/configProject'; import { doResolve } from '../system/resolve'; import { getContext } from '../context/provider'; import { RnvPlatforms } from '../enums/platformName'; @@ -123,24 +122,6 @@ export const isPlatformSupported = async (isGlobalScope = false) => { c.platform = platform; } - const configuredPlatforms = c.files.project.config?.defaults?.supportedPlatforms; - - if (c.platform && Array.isArray(configuredPlatforms) && !configuredPlatforms.includes(c.platform)) { - const { confirm } = await inquirerPrompt({ - type: 'confirm', - message: `Platform ${c.platform} is not supported by your project. Would you like to enable it?`, - }); - - if (confirm) { - const newPlatforms = [...configuredPlatforms, c.platform]; - updateProjectPlatforms(newPlatforms); - c.buildConfig.defaults = c.buildConfig.defaults || {}; - c.buildConfig.defaults.supportedPlatforms = newPlatforms; - // await configureEntryPoints(c); - } else { - throw new Error('User canceled'); - } - } printCurrentPlatform(c.platform); return c.platform; }; diff --git a/packages/core/src/projects/bootstrap.ts b/packages/core/src/projects/bootstrap.ts deleted file mode 100644 index 22359ab522..0000000000 --- a/packages/core/src/projects/bootstrap.ts +++ /dev/null @@ -1,167 +0,0 @@ -import path from 'path'; -import { copyFolderContentsRecursiveSync, readObjectSync, writeFileSync, fsExistsSync } from '../system/fs'; -import { installPackageDependencies, isYarnInstalled } from './npm'; -import { executeAsync } from '../system/exec'; -import { logDefault, logInfo } from '../logger'; -import { configureTemplateFiles, configureEntryPoint } from '../templates'; -import { parseRenativeConfigs } from '../configs'; -import { ConfigFileApp, ConfigFileEngine, ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -import { RnvFileName } from '../enums/fileName'; -import { getContext } from '../context/provider'; - -export const checkAndBootstrapIfRequired = async () => { - logDefault('checkAndBootstrapIfRequired'); - const c = getContext(); - - const template: string = c.program?.opts().template; - if (!c.paths.project.configExists && template) { - await executeAsync(`${isYarnInstalled() ? 'yarn' : 'npm'} add ${template}`, { - cwd: c.paths.project.dir, - }); - - const templateArr = template.split('@').filter((v) => v !== ''); - const templateDir = template.startsWith('@') ? `@${templateArr[0]}` : templateArr[0]; - const templatePath = path.join(c.paths.project.dir, 'node_modules', templateDir); - - c.paths.template.dir = templatePath; - c.paths.template.configTemplate = path.join(templatePath, RnvFileName.renativeTemplate); - - const templateObj = readObjectSync(c.paths.template.configTemplate); - const appConfigPath = path.join(c.paths.project.appConfigsDir, c.program.opts().appConfigID, 'renative.json'); - //TODO: Investigate whether we really need to support this: supportedPlatforms inside appconfig - const appConfigObj = readObjectSync(appConfigPath); - const supportedPlatforms = appConfigObj?.defaults?.supportedPlatforms || []; - //========= - const engineTemplates = c.files.rnvConfigTemplates.config?.engineTemplates; - const rnvPlatforms = c.files.rnvConfigTemplates.config?.platformTemplates || {}; - const activeEngineKeys: Array = []; - - if (engineTemplates) { - supportedPlatforms.forEach((supPlat) => { - Object.keys(engineTemplates).forEach((eKey) => { - if (engineTemplates[eKey].id === rnvPlatforms[supPlat]?.engine) { - activeEngineKeys.push(eKey); - } - }); - }); - } - - if (!templateObj) { - return; - } - - const config = { - ...templateObj, - }; - - // Clean unused engines - if (config.engines) { - Object.keys(config.engines).forEach((k) => { - if (!activeEngineKeys.includes(k)) { - delete config.engines?.[k]; - } - }); - } - - if (config.templateConfig?.package_json) { - const pkgJson = config.templateConfig.package_json; - if (!pkgJson.devDependencies) pkgJson.devDependencies = {}; - if (!pkgJson.dependencies) pkgJson.dependencies = {}; - c.files.project.package = pkgJson; - - const installPromises: Array> = []; - Object.keys(pkgJson.devDependencies).forEach((devDepKey) => { - if (activeEngineKeys.includes(devDepKey)) { - installPromises.push( - executeAsync(`npx yarn add ${devDepKey}@${pkgJson.devDependencies?.[devDepKey]}`, { - cwd: c.paths.project.dir, - }) - ); - } - }); - - if (installPromises.length) { - await Promise.all(installPromises); - - logInfo('Installed engines DONE'); - - activeEngineKeys.forEach((aek) => { - const engineConfigPath = path.join( - c.paths.project.dir, - 'node_modules', - aek, - 'renative.engine.json' - ); - const eConfig = readObjectSync(engineConfigPath); - if (eConfig?.platforms) { - supportedPlatforms.forEach((supPlat) => { - const engPlatNpm = eConfig.platforms?.[supPlat]?.npm; - if (engPlatNpm) { - const engPlatDeps = engPlatNpm.dependencies; - const deps = pkgJson.dependencies || {}; - pkgJson.dependencies = deps; - if (engPlatDeps) { - Object.keys(engPlatDeps).forEach((engPlatDepKey) => { - if (!deps[engPlatDepKey]) { - logInfo(`Installing active engine dependency ${engPlatDepKey}`); - deps[engPlatDepKey] = engPlatDeps[engPlatDepKey]; - } - }); - } - - const engPlatDevDeps = engPlatNpm.devDependencies; - if (engPlatDevDeps) { - Object.keys(engPlatDevDeps).forEach((engPlatDevDepKey) => { - pkgJson.devDependencies = pkgJson.devDependencies || {}; - if (!pkgJson.devDependencies[engPlatDevDepKey]) { - logInfo(`Installing active engine dependency ${engPlatDevDepKey}`); - pkgJson.devDependencies[engPlatDevDepKey] = - engPlatDevDeps[engPlatDevDepKey]; - } - }); - } - - const engPlatOptDeps = engPlatNpm.optionalDependencies; - if (engPlatOptDeps) { - Object.keys(engPlatOptDeps).forEach((engPlatOptDepKey) => { - pkgJson.optionalDependencies = pkgJson.optionalDependencies || {}; - if (!pkgJson.optionalDependencies[engPlatOptDepKey]) { - logInfo(`Installing active engine dependency ${engPlatOptDepKey}`); - pkgJson.optionalDependencies[engPlatOptDepKey] = - engPlatOptDeps[engPlatOptDepKey]; - } - }); - } - } - }); - } - }); - } - - writeFileSync(c.paths.project.package, pkgJson); - } - - delete config.templateConfig; - writeFileSync(c.paths.project.config, config); - - const appConfigsPath = path.join(templatePath, 'appConfigs'); - if (fsExistsSync(appConfigsPath)) { - copyFolderContentsRecursiveSync(appConfigsPath, path.join(c.paths.project.appConfigsDir)); - } - - await installPackageDependencies(); - - if (c.program.opts().npxMode) { - return; - } - - await parseRenativeConfigs(); - - await configureTemplateFiles(); - await configureEntryPoint(); - // await applyTemplate(c); - - // copyFolderContentsRecursiveSync(templatePath, c.paths.project.dir); - } - return true; -}; diff --git a/packages/core/src/projects/package.ts b/packages/core/src/projects/package.ts index 861213f6ad..9bb89836ae 100644 --- a/packages/core/src/projects/package.ts +++ b/packages/core/src/projects/package.ts @@ -36,7 +36,7 @@ export const checkAndCreateProjectPackage = async () => { const packageName = c.files.project.config?.projectName || c.paths.project.dir.split('/').pop(); const packageVersion = c.files.project.config?.projectVersion || '0.1.0'; - const templateName = c.files.project.config?.currentTemplate; + const templateName = c.files.project.config?.templateConfig?.name; if (!templateName) { logWarning('You are missing currentTemplate in your renative.json'); } @@ -65,8 +65,7 @@ export const checkAndCreateProjectPackage = async () => { } if (templateName) { - pkgJson.devDependencies[templateName] = - c.files.project.config?.templates?.[templateName]?.version || 'latest'; + pkgJson.devDependencies[templateName] = c.files.project.config?.templateConfig?.version || 'latest'; } const pkgJsonStringClean = JSON.stringify(pkgJson, null, 2); fsWriteFileSync(c.paths.project.package, pkgJsonStringClean); diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index 099956b436..395350a5b7 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -5,7 +5,6 @@ import { checkAndMigrateProject } from './migrator'; import { configureRuntimeDefaults } from './context/runtime'; import { findSuitableTask } from './tasks/taskFinder'; import { updateRenativeConfigs } from './plugins'; -import { checkAndBootstrapIfRequired } from './projects/bootstrap'; import { loadDefaultConfigTemplates } from './configs'; import { getApi } from './api/provider'; import { RnvTask } from './tasks/types'; @@ -40,7 +39,7 @@ export const executeRnvCore = async () => { await configureRuntimeDefaults(); await checkAndMigrateProject(); await updateRenativeConfigs(); - await checkAndBootstrapIfRequired(); + // await checkAndBootstrapIfRequired(); // TODO: rename to something more meaningful or DEPRECATE entirely if (c.program.opts().npxMode) { diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index 7c30c5b909..2cf3be13d0 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -22,9 +22,8 @@ const RootAppBaseFragment = { id: z.optional(Id), custom: z.optional(Ext), hidden: z.optional(Hidden), - extendsTemplate: z.optional(ExtendTemplate), - extend: z.optional(Extend), - skipBootstrapCopy: z.boolean().optional(), + extendsTemplate: z.optional(ExtendTemplate), // TODO: rename to "extendsConfig" + extend: z.optional(Extend), // TODO: rename to "extendsAppConfigID" }; const RootAppBaseSchema = z.object(RootAppBaseFragment); diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index d0d37a5518..3711ca3a63 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -71,33 +71,10 @@ const Integrations = z .record(z.string(), z.object({})) .describe('Object containing integration configurations where key represents package name'); -// const Engine = z.union([ -// z.literal('source:rnv'), -// z.object({ -// version: z.optional(z.string()), -// }), -// ]); - const Engine = z.literal('source:rnv'); const IsMonoRepo = z.boolean().describe('Mark if your project is part of monorepo'); -const Template = z.object({ - version: z.string(), -}); - -const Templates = z - .record(z.string(), Template) - .describe( - 'Stores installed templates info in your project.\n\nNOTE: This prop will be updated by rnv if you run `rnv template install`' - ); - -const CurrentTemplate = z - .string() - .describe( - 'Currently active template used in this project. this allows you to re-bootstrap whole project by running `rnv template apply`' - ); - const Crypto = z .object({ path: z @@ -203,50 +180,56 @@ const Paths = z }) .describe('Define custom paths for RNV to look into'); -const UseTemplate = z.object({ - name: z.string(), - version: z.string(), - excludedPaths: z.optional(z.array(z.string())), -}); - //LEVEl 0 (ROOT) const RootProjectBaseFragment = { workspaceID: WorkspaceID.optional(), - projectVersion: z.string().optional(), + projectVersion: z.string().optional(), // TODO: if undefined it should infer from package.json projectName: ProjectName.optional(), - isMonorepo: z.optional(IsMonoRepo), - useTemplate: z.optional(UseTemplate), + isTemplate: z.boolean().optional(), defaults: z.optional(DefaultsSchema), pipes: z.optional(Pipes), - templates: Templates.optional(), - currentTemplate: CurrentTemplate.optional(), crypto: z.optional(Crypto), paths: z.optional(Paths), permissions: z.optional(Permissions), - engines: z.optional(EnginesSchema), - custom: z.optional(Ext), + engines: z.optional(EnginesSchema), // TODO: rename to mods (mods with type engine in the future) ? enableHookRebuild: z.optional(EnableHookRebuild), - monoRoot: z.optional(MonoRoot), - extendsTemplate: z.optional(ExtendTemplate), + extendsTemplate: z.optional(ExtendTemplate), // TODO: rename to "extendsConfig" tasks: z.optional(Tasks), - integrations: z.optional(Integrations), + integrations: z.optional(Integrations), // TODO: rename to mods env: z.optional(Env), runtime: z.optional(Runtime), templateConfig: TemplateConfig.optional(), + _meta: z.optional( + z.object({ + requires_first_template_apply: z.optional(SupportedPlatforms), + }) + ), + // DEPRECATED + + isMonorepo: z.optional(IsMonoRepo), // TODO: remove and use auto detection + monoRoot: z.optional(MonoRoot), // TODO: remove and use auto detection + custom: z.optional(Ext), // TODO: find better way to handle skipAutoUpdate: z .boolean() .optional() .describe( "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" ), + // REMOVED + // useTemplate: z.optional(UseTemplate), // isNew: z - // .boolean() - // .optional() - // .describe('Marker indicating that this project has just been bootstrapped. this prop is managed by rnv'), + // templates: Templates.optional(), + // currentTemplate: CurrentTemplate.optional(), }; +// const UseTemplate = z.object({ +// name: z.string(), +// version: z.string(), +// excludedPaths: z.optional(z.array(z.string())), +// }); + const RootProjectBaseSchema = z.object(RootProjectBaseFragment); const RootProjectCommonSchema = z.object({ common: z.optional(CommonSchema) }); const RootProjectPlatformsSchema = z.object({ platforms: z.optional(PlatformsSchema) }); diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index 62dbec5fdf..7bef5d750d 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -46,6 +46,8 @@ export const NpmDep = z.record(z.string(), z.string()); export const TemplateConfig = z .object({ + name: z.string().optional(), + version: z.string().optional(), disabled: z.boolean().optional(), includedPaths: z .array( diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index a097d5d32b..f8e1ecacc7 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -2,62 +2,86 @@ import path from 'path'; import { copyFolderContentsRecursiveSync, copyFileSync, - removeDirsSync, - removeFilesSync, mergeObjects, readObjectSync, fsExistsSync, fsLstatSync, - // fsUnlinkSync, - // removeDirSync, } from '../system/fs'; import { chalk, logError, logInfo, logWarning, logDefault, logDebug } from '../logger'; -// import { loadFileExtended } from '../configs'; import { doResolve } from '../system/resolve'; import { RnvContext } from '../context/types'; -import { generateOptions, inquirerPrompt } from '../api'; -import { PromptOptions } from '../api/types'; -import { RnvPlatform } from '../types'; -// import { listAppConfigsFoldersSync } from '../configs/appConfigs'; -import { writeRenativeConfigFile } from '../configs/utils'; import { ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; -// import { PlatformKey } from '../schema/types'; -import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; import { RnvFolderName } from '../enums/folderName'; import { checkIfProjectAndNodeModulesExists } from '../projects/npm'; -const _cleanProjectTemplateSync = (c: RnvContext) => { - logDefault('_cleanProjectTemplateSync'); - const dirsToRemove = [c.paths.project.appConfigBase.dir, c.paths.project.srcDir!, c.paths.project.appConfigsDir]; +export const configureTemplateFiles = async () => { + logDefault('configureTemplateFiles'); - const filesToRemove = c.buildConfig.defaults?.supportedPlatforms?.map((p) => - path.join(c.paths.project.dir, `index.${p}.js`) - ); + const c = getContext(); - removeDirsSync(dirsToRemove); - // TODO: NOT SERVED FROM TEMPLATE YET - if (filesToRemove) removeFilesSync(filesToRemove); -}; + const templateConfig = readObjectSync(c.paths.template.configTemplate); -const _applyTemplate = async (c: RnvContext) => { - logDefault('_applyTemplate', `current:${c.buildConfig.currentTemplate} selected:${c.runtime.selectedTemplate}`); + let mergedObj = _getProjectTemplateMergedConfig(templateConfig); + const includedPaths = mergedObj?.templateConfig?.includedPaths; + // includedPaths can contain paths with repeated base folders ie: ["src/dir1", "src/dir2", "src/dir3",...] + // We need to keep track of folders not allowed to be added into if they exist + // but allowed to be added into if they di not exist prior to configureTemplateFiles call + const folderOverrideLock: string[] = []; + if (includedPaths) { + includedPaths.forEach((pth) => { + if (c.paths.template.dir) { + if (typeof pth === 'string') { + _copyIncludedPaths(c, pth, folderOverrideLock); + } else { + const engId = c.runtime.engine?.config?.id; + if (!pth.engines || (engId && pth.engines?.includes?.(engId))) { + const incPaths = pth.paths; + if (incPaths.length > 0) { + incPaths.forEach((pth) => { + _copyIncludedPaths(c, pth, folderOverrideLock); + }); + } + } + } + } + }); + } +}; - if (c.runtime.selectedTemplate) { - _cleanProjectTemplateSync(c); +export const isTemplateInstalled = () => { + const ctx = getContext(); + const tplName = ctx.buildConfig.templateConfig?.name; + return tplName ? doResolve(tplName) : false; +}; - c.paths.template.dir = doResolve(c.runtime.selectedTemplate) || 'Error: unresolved'; - } else { - c.paths.template.dir = doResolve(c.buildConfig.currentTemplate) || 'Error: unresolved'; +export const applyTemplate = async () => { + const c = getContext(); + logDefault('applyTemplate'); + if (c.buildConfig?.isTemplate) return true; + if (!c.files.project.config) { + logError('Project config not loaded. cannot apply template'); + return false; + } + if (!isTemplateInstalled()) { + // We Need template to be installed before other dependency resolutions (due to scoping) + await checkIfProjectAndNodeModulesExists(); } + await _applyTemplate(c); +}; + +const _applyTemplate = async (c: RnvContext) => { + logDefault('_applyTemplate'); + + const tplName = c.buildConfig.templateConfig?.name; + c.paths.template.dir = doResolve(tplName) || 'Error: unresolved'; if (c.paths.template.dir) { c.paths.template.configTemplate = path.join(c.paths.template.dir, RnvFileName.renativeTemplate); c.paths.template.config = path.join(c.paths.template.dir, RnvFileName.renative); } - if (!fsExistsSync(c.paths.template.configTemplate)) { logWarning( `Template file ${chalk().bold(c.paths.template.configTemplate)} does not exist. check your ${chalk().bold( @@ -66,133 +90,17 @@ const _applyTemplate = async (c: RnvContext) => { ); return true; } - - logDebug(`_applyTemplate:${c.runtime.selectedTemplate}:${c.paths.template.dir}`); - - if (c.paths.template.dir) c.paths.template.appConfigsDir = path.join(c.paths.template.dir, 'appConfigs'); - c.paths.template.appConfigBase.dir = path.join(c.paths.template.appConfigsDir, 'base'); - c.runtime.currentTemplate = c.files.project.config?.currentTemplate || c.runtime.currentTemplate; - if (!c.runtime.currentTemplate) { - if (c.files.project.config?.templates) { - c.runtime.currentTemplate = Object.keys(c.files.project.config.templates)[0]; - } - - c.runtime.requiresForcedTemplateApply = true; - } - - if (c.buildConfig.currentTemplate) { - c.runtime.activeTemplate = `${c.buildConfig.currentTemplate}@${ - c.buildConfig.templates?.[c.buildConfig.currentTemplate]?.version - }`; + logDebug(`_applyTemplate:${c.paths.template.dir}`); + if (c.paths.template.dir) { + c.paths.template.appConfigsDir = path.join(c.paths.template.dir, 'appConfigs'); } + c.paths.template.appConfigBase.dir = path.join(c.paths.template.appConfigsDir, 'base'); + c.runtime.currentTemplate = tplName; return true; }; -// DEPRECATED - left here only for temporary reference -// const _configureAppConfigs = async (c: RnvContext) => { -// // Check appConfigs -// logDebug('configureProject:check appConfigs'); -// // -// if (!fsExistsSync(c.paths.project.appConfigsDir)) { -// logInfo( -// `Your appConfig folder ${chalk().bold( -// c.paths.project.appConfigsDir -// )} is missing! ReNative will create one from template.` -// ); - -// // TODO: GET CORRECT PROJECT TEMPLATE -// copyFolderContentsRecursiveSync(c.paths.template.appConfigsDir, c.paths.project.appConfigsDir); - -// const appConfigIds = listAppConfigsFoldersSync(false); - -// // Update App Title to match package.json -// try { -// const supPlats = c.files.project?.config?.defaults?.supportedPlatforms; -// appConfigIds.forEach((v) => { -// const appConfigPath = path.join(c.paths.project.appConfigsDir, v, RnvFileName.renative); -// const appConfig = readObjectSync(appConfigPath); -// if (appConfig) { -// if (appConfig.skipBootstrapCopy) { -// fsUnlinkSync(appConfigPath); -// if (v !== 'base') { -// removeDirSync(path.join(c.paths.project.appConfigsDir, v)); -// } -// } else if (!appConfig.hidden) { -// appConfig.common = appConfig.common || {}; -// //TODO: this needs to use bootstrap_metadata to work properly -// // appConfig.common.title = c.files.project.config?.defaults?.title; -// // appConfig.common.id = c.files.project.config?.defaults?.id; - -// if (supPlats && appConfig.platforms) { -// (Object.keys(appConfig.platforms) as PlatformKey[]).forEach((pk) => { -// if (!supPlats.includes(pk)) { -// delete appConfig.platforms?.[pk]; -// } -// }); -// } - -// writeRenativeConfigFile(appConfigPath, appConfig); -// } -// } -// }); -// } catch (e) { -// logError(e); -// } -// } -// }; - -// const _configureProjectConfig = (c: RnvContext) => -// new Promise((resolve) => { -// // Check projectConfigs -// logDebug('configureProject:check projectConfigs'); -// if (!fsExistsSync(c.paths.project.appConfigBase.dir)) { -// logInfo( -// `Your projectConfig folder ${chalk().bold( -// c.paths.project.appConfigBase.dir -// )} is missing! CREATING...DONE` -// ); -// copyFolderContentsRecursiveSync(c.paths.template.appConfigBase.dir, c.paths.project.appConfigBase.dir); -// } -// resolve(); -// }); - -// const _configureRenativeConfig = async (c: RnvContext) => { -// // renative.json -// const templateConfig = readObjectSync(c.paths.template.configTemplate); -// logDebug('configureProject:check renative.json'); - -// if (c.runtime.selectedTemplate || c.runtime.requiresForcedTemplateApply || c.files.project.config?.isNew) { -// logInfo( -// `Your ${c.paths.project.config} needs to be updated with ${c.paths.template.configTemplate}. UPDATING...DONE` -// ); -// const mergedObjBase = getProjectTemplateMergedConfig(templateConfig); -// if (mergedObjBase) { -// const mergedObj = { ...mergedObjBase, ...(mergedObjBase.templateConfig?.renative_json || {}) }; - -// // Do not override supportedPlatforms -// mergedObj.defaults = mergedObj.defaults || {}; -// mergedObj.defaults.supportedPlatforms = c.files.project.config_original?.defaults?.supportedPlatforms; -// // Do not override engines -// mergedObj.engines = c.files.project.config_original?.engines; -// // Set current template -// if (c.runtime.currentTemplate) { -// mergedObj.currentTemplate = c.runtime.currentTemplate; -// } - -// // mergedObj.isNew = null; -// delete mergedObj.isNew; -// delete mergedObj.templateConfig; -// // c.files.project.config = mergedObj; -// writeRenativeConfigFile(c.paths.project.config, mergedObj); -// loadFileExtended(c.files.project, c.paths.project, 'config'); -// } -// } - -// return true; -// }; - -const getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | null) => { +const _getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | null) => { const c = getContext(); if (c.files.project.config_original && templateConfig) { const mergedObj = mergeObjects( @@ -207,15 +115,22 @@ const getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | nul return null; }; -const _copyIncludedPath = (c: RnvContext, name: string) => { +const _copyIncludedPaths = (c: RnvContext, name: string, copyWhitelist: string[]) => { const sourcePathOriginal = path.join(c.paths.template.dir, name); const sourceOverridePath = path.join(c.paths.template.dir, RnvFolderName.templateOverrides, name); const destPath = path.join(c.paths.project.dir, name); // Make sure we do not override existing folders at root of project const destRootPath = path.join(c.paths.project.dir, name.split('/')[0]); + const rootDirExists = fsExistsSync(destRootPath); + if (!rootDirExists) { + copyWhitelist.push(destRootPath); + } + if (rootDirExists && !copyWhitelist.includes(destRootPath)) { + return; + } // If override exists use it, otherwise use original and continue with rest of the logic const sourcePath = fsExistsSync(sourceOverridePath) ? sourceOverridePath : sourcePathOriginal; - if (!fsExistsSync(destRootPath) && !fsExistsSync(destPath) && fsExistsSync(sourcePath)) { + if (!fsExistsSync(destPath) && fsExistsSync(sourcePath)) { try { if (fsLstatSync(sourcePath).isDirectory()) { logInfo(`Missing directory ${chalk().bold(`${destPath}.js`)}. COPYING from TEMPATE...DONE`); @@ -229,129 +144,3 @@ const _copyIncludedPath = (c: RnvContext, name: string) => { } } }; - -export const configureTemplateFiles = async () => { - logDefault('configureTemplateFiles'); - - const c = getContext(); - - const templateConfig = readObjectSync(c.paths.template.configTemplate); - - let mergedObj = getProjectTemplateMergedConfig(templateConfig); - const includedPaths = mergedObj?.templateConfig?.includedPaths; - - if (includedPaths) { - includedPaths.forEach((pth) => { - if (c.paths.template.dir) { - if (typeof pth === 'string') { - _copyIncludedPath(c, pth); - } else { - const engId = c.runtime.engine?.config?.id; - if (!pth.engines || (engId && pth.engines?.includes?.(engId))) { - const incPaths = pth.paths; - if (incPaths.length > 0) { - incPaths.forEach((pth) => { - _copyIncludedPath(c, pth); - }); - } - } - } - } - }); - } -}; - -export const configureEntryPoint = async () => { - logDefault('configureEntryPoint'); - const c = getContext(); - - if (c.buildConfig?.isTemplate) return true; - - const entryFile = getConfigProp('entryFile'); - - try { - const source = path.join(c.paths.template.dir, `${entryFile}.js`); - const dest = path.join(c.paths.project.dir, `${entryFile}.js`); - if (!fsExistsSync(dest)) { - if (!entryFile) { - logWarning( - `Missing entryFile key for ${chalk().bold(c.platform)} platform in your ${chalk().bold( - c.paths.appConfig.config - )}.` - ); - } else if (!fsExistsSync(source)) { - logWarning( - `Missing entry file ${chalk().bold( - `${entryFile}.js` - )}. Not available in your current template. You need to create one manually` - ); - } else { - logInfo(`Missing entry file ${chalk().bold(`${entryFile}.js`)}. COPYING from TEMPATE...DONE`); - copyFileSync(source, dest); - } - } - } catch (e) { - return Promise.reject(e); - } - - return true; -}; - -export const getInstalledTemplateOptions = (): PromptOptions | null => { - const c = getContext(); - if (c.buildConfig?.isTemplate) return null; - if (c.buildConfig.templates) { - return generateOptions(c.buildConfig.templates); - } - logError("You don't have any local templates installed", { skipAnalytics: true }); - return null; -}; - -export const isTemplateInstalled = () => { - const c = getContext(); - return c.buildConfig.currentTemplate ? doResolve(c.buildConfig.currentTemplate) : false; -}; - -export const applyTemplate = async (selectedTemplate?: string) => { - const c = getContext(); - logDefault('applyTemplate', `${c.buildConfig.currentTemplate}=>${selectedTemplate}`); - if (c.buildConfig?.isTemplate) return true; - - if (!c.files.project.config) { - logError('Project config not loaded. cannot apply template'); - - return false; - } - - c.runtime.selectedTemplate = selectedTemplate; - - if (!c.buildConfig.currentTemplate) { - logWarning("You don't have any current template selected"); - const opts = getInstalledTemplateOptions(); - - if (opts) { - const { template } = await inquirerPrompt({ - type: 'list', - name: 'template', - message: 'Pick which template to apply', - choices: opts.keysAsArray, - }); - c.buildConfig.currentTemplate = template; - c.files.project.config.currentTemplate = template; - writeRenativeConfigFile(c.paths.project.config, c.files.project.config); - } else { - logError('Could not find any installed templates'); - } - } - - const templateIsInstalled = doResolve(c.buildConfig.currentTemplate); - if (!templateIsInstalled) { - // We Need template to be installed before other dependency resolutions (due to scoping) - await checkIfProjectAndNodeModulesExists(); - } - - await _applyTemplate(c); - // await _configureAppConfigs(c); - // await _configureProjectConfig(c); - // await _configureRenativeConfig(c); -}; diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index d41c771134..443fec700a 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -6,10 +6,8 @@ import taskPlatformEject from './tasks/platform/taskPlatformEject'; import taskPlatformConnect from './tasks/platform/taskPlatformConnect'; import taskPlatformList from './tasks/platform/taskPlatformList'; import taskPlatformConfigure from './tasks/platform/taskPlatformConfigure'; -import taskPlatformSetup from './tasks/platform/taskPlatformSetup'; -import taskTemplateAdd from './tasks/template/taskTemplateAdd'; +import taskPlatformSetup from './tasks/project/taskProjectPlatforms'; import taskTemplateApply from './tasks/template/taskTemplateApply'; -import taskTemplateList from './tasks/template/taskTemplateList'; import taskPluginAdd from './tasks/plugin/taskPluginAdd'; import taskPluginList from './tasks/plugin/taskPluginList'; import taskPluginUpdate from './tasks/plugin/taskPluginUpdate'; @@ -63,9 +61,7 @@ const Engine: RnvEngine = { taskPlatformList, taskPlatformConfigure, taskPlatformSetup, - taskTemplateAdd, taskTemplateApply, - taskTemplateList, taskPluginAdd, taskPluginList, taskPluginUpdate, diff --git a/packages/engine-core/src/tasks/app/taskAppCreate.ts b/packages/engine-core/src/tasks/app/taskAppCreate.ts index 121d9c718a..cd57793c22 100644 --- a/packages/engine-core/src/tasks/app/taskAppCreate.ts +++ b/packages/engine-core/src/tasks/app/taskAppCreate.ts @@ -7,7 +7,6 @@ import { fsReaddirSync, readObjectSync, writeFileSync, - doResolve, configureRuntimeDefaults, inquirerPrompt, logInfo, @@ -36,14 +35,12 @@ export default createTask({ sourcePath = sourceAppConfigDirPath; } } else if (c.program.opts().ci) { - if (c.buildConfig.currentTemplate) { - const tacPath = doResolve(c.buildConfig.currentTemplate); - if (tacPath && fsExistsSync(tacPath)) { - const tacDirsPath = path.join(tacPath, 'appConfigs'); - const tacDirs = fsReaddirSync(tacDirsPath); + if (c.paths.template.appConfigsDir) { + if (fsExistsSync(c.paths.template.appConfigsDir)) { + const tacDirs = fsReaddirSync(c.paths.template.appConfigsDir); tacDirs.forEach((v) => { if (v !== 'base') { - const pth = path.join(tacDirsPath, v); + const pth = path.join(c.paths.template.appConfigsDir, v); if (fsLstatSync(pth).isDirectory()) { sourcePath = pth; } @@ -75,24 +72,20 @@ export default createTask({ }); // Template Configs - if (c.buildConfig.currentTemplate) { - const tacPath = doResolve(c.buildConfig.currentTemplate); - if (tacPath && fsExistsSync(tacPath)) { - const tacDirsPath = path.join(tacPath, 'appConfigs'); - const tacDirs = fsReaddirSync(tacDirsPath); - tacDirs.forEach((v) => { - if (v !== 'base') { - const pth = path.join(tacDirsPath, v); - if (fsLstatSync(pth).isDirectory()) { - const key = `template>${v}`; - appConfigChoices.push(key); - appConfigChoicesObj[key] = { - path: pth, - }; - } + if (c.paths.template.appConfigsDir) { + const tacDirs = fsReaddirSync(c.paths.template.appConfigsDir); + tacDirs.forEach((v) => { + if (v !== 'base') { + const pth = path.join(c.paths.template.appConfigsDir, v); + if (fsLstatSync(pth).isDirectory()) { + const key = `template>${v}`; + appConfigChoices.push(key); + appConfigChoicesObj[key] = { + path: pth, + }; } - }); - } + } + }); } const { sourceAppConfig } = await inquirerPrompt({ diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 5ad91fb288..6496a7d73f 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -14,18 +14,35 @@ import { // installPackageDependencies, // overrideTemplatePlugins, resolveEngineDependencies, + logWarning, + getConfigProp, } from '@rnv/core'; import { isBuildSchemeSupported } from '../../buildSchemes'; +import path from 'path'; // import { configureFonts } from '@rnv/sdk-utils'; export default createTask({ description: 'Low-level task used by engines to prepare platformBuilds folder', + isPrivate: true, dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx, taskName, originTaskName }) => { const { program } = ctx; await isPlatformSupported(); await isBuildSchemeSupported(); + const entryFile = getConfigProp('entryFile'); + + const dest = path.join(ctx.paths.project.dir, `${entryFile}.js`); + if (!fsExistsSync(dest)) { + if (!entryFile) { + logWarning( + `Missing ${chalk().red(entryFile)} key for ${chalk().bold( + ctx.platform + )} platform in your ${chalk().bold(ctx.paths.appConfig.config)}.` + ); + } + } + await executeTask({ taskName: RnvTaskName.sdkConfigure, parentTaskName: taskName, diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 2150fbe8e4..239bd15972 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -8,7 +8,6 @@ import { updateRenativeConfigs, configureRuntimeDefaults, applyTemplate, - checkIfTemplateConfigured, configureTemplateFiles, isTemplateInstalled, fsExistsSync, @@ -80,7 +79,6 @@ export default createTask({ return true; } - await checkIfTemplateConfigured(); await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); if (originTaskName !== RnvTaskName.cryptoDecrypt) { diff --git a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts b/packages/engine-core/src/tasks/project/taskProjectPlatforms.ts similarity index 95% rename from packages/engine-core/src/tasks/platform/taskPlatformSetup.ts rename to packages/engine-core/src/tasks/project/taskProjectPlatforms.ts index 541a56347a..3db1c52445 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformSetup.ts +++ b/packages/engine-core/src/tasks/project/taskProjectPlatforms.ts @@ -18,5 +18,5 @@ export default createTask({ updateProjectPlatforms(inputSupportedPlatforms); }, - task: RnvTaskName.platformSetup, + task: RnvTaskName.projectPlatforms, }); diff --git a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts b/packages/engine-core/src/tasks/template/taskTemplateAdd.ts deleted file mode 100644 index 5eb60f6b59..0000000000 --- a/packages/engine-core/src/tasks/template/taskTemplateAdd.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - writeFileSync, - logTask, - generateBuildConfig, - RnvContext, - inquirerPrompt, - createTask, - RnvTaskName, -} from '@rnv/core'; -import { getTemplateOptions } from '../../templates'; - -const _writeObjectSync = (p: string, s: object) => { - writeFileSync(p, s); - generateBuildConfig(); -}; - -export const _addTemplate = (c: RnvContext, template: string) => { - logTask('addTemplate'); - - const cnf = c.files.project.config; - if (!cnf) return; - - cnf.templates = cnf.templates || {}; - - if (!cnf.templates[template]) { - cnf.templates[template] = { - version: 'latest', - }; - } - - _writeObjectSync(c.paths.project.config, cnf); -}; - -export default createTask({ - description: 'Install additional template to the project', - dependsOn: [RnvTaskName.projectConfigure], - fn: async ({ ctx }) => { - const opts = getTemplateOptions(); - - const { template } = await inquirerPrompt({ - type: 'list', - message: 'Pick which template to install', - name: 'template', - choices: opts.keysAsArray, - }); - - _addTemplate(ctx, template); - - return true; - }, - task: RnvTaskName.templateAdd, -}); diff --git a/packages/engine-core/src/tasks/template/taskTemplateApply.ts b/packages/engine-core/src/tasks/template/taskTemplateApply.ts index 712bac5850..34f981d586 100644 --- a/packages/engine-core/src/tasks/template/taskTemplateApply.ts +++ b/packages/engine-core/src/tasks/template/taskTemplateApply.ts @@ -1,43 +1,25 @@ -import { - applyTemplate, - getInstalledTemplateOptions, - executeTask, - inquirerPrompt, - createTask, - RnvTaskName, -} from '@rnv/core'; +import { applyTemplate, createTask, RnvTaskName, logInfo, inquirerPrompt } from '@rnv/core'; export default createTask({ - description: 'Reset project to specific template', + description: 'Reapply template (if configured) to current project', dependsOn: [RnvTaskName.projectConfigure], - fn: async ({ ctx, taskName, originTaskName }) => { - const { buildConfig, program } = ctx; + fn: async ({ ctx }) => { + const { buildConfig } = ctx; if (buildConfig?.isTemplate) { return Promise.reject('Template projects cannot use template apply command'); } - - if (program.opts().template) { - await applyTemplate(program.opts().template); - if (program.opts().appConfigID) { - await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); - } - - return true; - } - const opts = await getInstalledTemplateOptions(); - - const { template } = await inquirerPrompt({ - type: 'list', - message: 'Pick which template to install', - name: 'template', - choices: opts?.keysAsArray, + logInfo( + 'This command will reapply template to current project. files will be overwritten. make sure you backed up your project before proceeding.' + ); + const { confirm } = await inquirerPrompt({ + type: 'confirm', + name: 'confirm', + message: 'Proceed?', }); - - await applyTemplate(template); - if (program.opts().appConfigID) { - await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); + if (!confirm) { + return; } - return true; + return applyTemplate(); }, task: RnvTaskName.templateApply, }); diff --git a/packages/engine-core/src/tasks/template/taskTemplateList.ts b/packages/engine-core/src/tasks/template/taskTemplateList.ts deleted file mode 100644 index 7a9187140a..0000000000 --- a/packages/engine-core/src/tasks/template/taskTemplateList.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { logToSummary, createTask, RnvTaskName } from '@rnv/core'; -import { getTemplateOptions } from '../../templates'; - -export default createTask({ - description: 'Show list of available templates', - dependsOn: [RnvTaskName.projectConfigure], - fn: async ({ ctx }) => { - const opts = getTemplateOptions(!ctx.paths.project.configExists); - logToSummary(`Templates:\n\n${opts.asString}`); - return true; - }, - task: RnvTaskName.templateList, - isGlobalScope: true, -}); diff --git a/packages/engine-core/src/templates.ts b/packages/engine-core/src/templates.ts deleted file mode 100644 index f454ce776a..0000000000 --- a/packages/engine-core/src/templates.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { chalk, generateOptions, getContext } from '@rnv/core'; - -export const getTemplateOptions = (isGlobalScope?: boolean) => { - const c = getContext(); - let defaultProjectTemplates; - if (isGlobalScope) { - defaultProjectTemplates = c.files.rnvConfigTemplates.config?.projectTemplates; - } else { - defaultProjectTemplates = c.buildConfig.projectTemplates || {}; - } - - return generateOptions(defaultProjectTemplates, false, null, (i, obj, mapping, defaultVal) => { - const exists = c.buildConfig.templates?.[defaultVal]; - const installed = exists ? chalk().yellow(' (installed)') : ''; - return ` [${chalk().grey(i + 1)}]> ${chalk().bold(defaultVal)}${installed} \n`; - }); -}; diff --git a/packages/engine-rn-electron/src/tasks/taskConfigure.ts b/packages/engine-rn-electron/src/tasks/taskConfigure.ts index fb49db7ed5..6780011869 100644 --- a/packages/engine-rn-electron/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-electron/src/tasks/taskConfigure.ts @@ -1,4 +1,4 @@ -import { copySharedPlatforms, configureEntryPoint, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { copySharedPlatforms, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { configureElectronProject } from '../sdk/runner'; import { SdkPlatforms } from '../sdk/constants'; @@ -6,7 +6,6 @@ export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async () => { - await configureEntryPoint(); await copySharedPlatforms(); return configureElectronProject(); }, diff --git a/packages/engine-rn-web/src/tasks/taskConfigure.ts b/packages/engine-rn-web/src/tasks/taskConfigure.ts index ebe4c73e2b..a143fd4110 100644 --- a/packages/engine-rn-web/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-web/src/tasks/taskConfigure.ts @@ -1,11 +1,4 @@ -import { - logErrorPlatform, - copySharedPlatforms, - RnvTaskOptionPresets, - configureEntryPoint, - createTask, - RnvTaskName, -} from '@rnv/core'; +import { logErrorPlatform, copySharedPlatforms, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { configureWebProject, configureChromecastProject } from '@rnv/sdk-webpack'; import { configureKaiOSProject } from '@rnv/sdk-kaios'; import { configureWebOSProject } from '@rnv/sdk-webos'; @@ -16,7 +9,6 @@ export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async ({ ctx }) => { - await configureEntryPoint(); await copySharedPlatforms(); switch (ctx.platform) { case 'web': diff --git a/packages/engine-rn-windows/src/tasks/taskConfigure.ts b/packages/engine-rn-windows/src/tasks/taskConfigure.ts index 4c983a6eac..87b6205904 100644 --- a/packages/engine-rn-windows/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-windows/src/tasks/taskConfigure.ts @@ -1,4 +1,4 @@ -import { copySharedPlatforms, RnvTaskOptionPresets, configureEntryPoint, createTask, RnvTaskName } from '@rnv/core'; +import { copySharedPlatforms, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { configureWindowsProject } from '../sdk'; import { SdkPlatforms } from '../sdk/constants'; @@ -6,7 +6,6 @@ export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async () => { - await configureEntryPoint(); await copySharedPlatforms(); return configureWindowsProject(); }, diff --git a/packages/sdk-android/src/tasks/taskConfigure.ts b/packages/sdk-android/src/tasks/taskConfigure.ts index 55bd790860..ef7b45a669 100644 --- a/packages/sdk-android/src/tasks/taskConfigure.ts +++ b/packages/sdk-android/src/tasks/taskConfigure.ts @@ -1,4 +1,4 @@ -import { configureEntryPoint, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { configureGradleProject } from '../runner'; import { jetifyIfRequired } from '../jetifier'; import { configureFontSources } from '@rnv/sdk-react-native'; @@ -7,7 +7,6 @@ import { SdkPlatforms } from '../constants'; export default createTask({ description: 'Configure current project', fn: async () => { - await configureEntryPoint(); await configureGradleProject(); await jetifyIfRequired(); return configureFontSources(); diff --git a/packages/sdk-apple/src/tasks/taskConfigure.ts b/packages/sdk-apple/src/tasks/taskConfigure.ts index a73426ee72..c096daf126 100644 --- a/packages/sdk-apple/src/tasks/taskConfigure.ts +++ b/packages/sdk-apple/src/tasks/taskConfigure.ts @@ -1,4 +1,4 @@ -import { configureEntryPoint, createTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { configureFontSources } from '@rnv/sdk-react-native'; import { configureXcodeProject } from '../runner'; import { SdkPlatforms } from '../common'; @@ -7,12 +7,9 @@ export default createTask({ description: 'Configure current project', dependsOn: [RnvTaskName.platformConfigure], fn: async ({ ctx, parentTaskName }) => { - await configureEntryPoint(); - if (ctx.program.opts().only && !!parentTaskName) { return true; } - await configureXcodeProject(); await configureFontSources(); }, From 0802555667156228953c6fb61f038133d226cb9f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 30 Mar 2024 02:17:19 +0100 Subject: [PATCH 146/175] template bootstrap --- packages/core/jsonSchema/rnv.app.json | 3 - packages/core/jsonSchema/rnv.project.json | 83 +++----- packages/core/jsonSchema/rnv.template.json | 10 + packages/core/src/context/defaults.ts | 1 + packages/core/src/context/types.ts | 2 + packages/core/src/engines/index.ts | 185 +++++++++--------- packages/core/src/schema/shared/index.ts | 9 +- packages/core/src/templates/index.ts | 41 ++-- .../src/tasks/bootstrap/taskNew.ts | 1 + .../src/tasks/hooks/taskHooksRun.ts | 4 +- .../src/tasks/project/taskProjectConfigure.ts | 5 +- packages/template-starter/renative.json | 8 +- .../template-starter/renative.template.json | 8 +- 13 files changed, 173 insertions(+), 187 deletions(-) diff --git a/packages/core/jsonSchema/rnv.app.json b/packages/core/jsonSchema/rnv.app.json index 0fb91f99a7..b053aa5bf2 100644 --- a/packages/core/jsonSchema/rnv.app.json +++ b/packages/core/jsonSchema/rnv.app.json @@ -23,9 +23,6 @@ "type": "string", "description": "extend another appConfig by id" }, - "skipBootstrapCopy": { - "type": "boolean" - }, "common": { "type": "object", "properties": { diff --git a/packages/core/jsonSchema/rnv.project.json b/packages/core/jsonSchema/rnv.project.json index 3a98fe20e4..9b3733cf46 100644 --- a/packages/core/jsonSchema/rnv.project.json +++ b/packages/core/jsonSchema/rnv.project.json @@ -15,32 +15,6 @@ "type": "string", "description": "Name of the project which will be used in workspace as folder name. this will also be used as part of the KEY in crypto env var generator" }, - "isMonorepo": { - "type": "boolean", - "description": "Mark if your project is part of monorepo" - }, - "useTemplate": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "excludedPaths": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "name", - "version" - ], - "additionalProperties": false - }, "isTemplate": { "type": "boolean" }, @@ -161,26 +135,6 @@ }, "description": "To avoid rnv building `buildHooks/src` every time you can specify which specific pipes should trigger recompile of buildHooks" }, - "templates": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "version": { - "type": "string" - } - }, - "required": [ - "version" - ], - "additionalProperties": false - }, - "description": "Stores installed templates info in your project.\n\nNOTE: This prop will be updated by rnv if you run `rnv template install`" - }, - "currentTemplate": { - "type": "string", - "description": "Currently active template used in this project. this allows you to re-bootstrap whole project by running `rnv template apply`" - }, "crypto": { "type": "object", "properties": { @@ -324,17 +278,10 @@ }, "description": "List of engines available in this project" }, - "custom": { - "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" - }, "enableHookRebuild": { "type": "boolean", "description": "If set to true in `./renative.json` build hooks will be compiled at each rnv command run. If set to `false` (default) rebuild will be triggered only if `dist` folder is missing, `-r` has been passed or you run `rnv hooks run` directly making your rnv commands faster" }, - "monoRoot": { - "type": "string", - "description": "Define custom path to monorepo root where starting point is project directory" - }, "extendsTemplate": { "type": "string", "description": "You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`" @@ -418,6 +365,12 @@ "templateConfig": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, "disabled": { "type": "boolean" }, @@ -442,6 +395,10 @@ "items": { "type": "string" } + }, + "platforms": { + "$ref": "#/definitions/rnv.project/properties/defaults/properties/supportedPlatforms", + "description": "Array list of all supported platforms in current project" } }, "required": [ @@ -496,6 +453,26 @@ "additionalProperties": false, "description": "Used in `renative.template.json` allows you to define template behaviour." }, + "_meta": { + "type": "object", + "properties": { + "requires_first_template_apply": { + "$ref": "#/definitions/rnv.project/properties/defaults/properties/supportedPlatforms" + } + }, + "additionalProperties": false + }, + "isMonorepo": { + "type": "boolean", + "description": "Mark if your project is part of monorepo" + }, + "monoRoot": { + "type": "string", + "description": "Define custom path to monorepo root where starting point is project directory" + }, + "custom": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, "skipAutoUpdate": { "type": "boolean", "description": "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" diff --git a/packages/core/jsonSchema/rnv.template.json b/packages/core/jsonSchema/rnv.template.json index c9e867775f..8df2363409 100644 --- a/packages/core/jsonSchema/rnv.template.json +++ b/packages/core/jsonSchema/rnv.template.json @@ -125,6 +125,12 @@ "templateConfig": { "type": "object", "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, "disabled": { "type": "boolean" }, @@ -149,6 +155,10 @@ "items": { "type": "string" } + }, + "platforms": { + "$ref": "#/definitions/rnv.template/properties/defaults/properties/supportedPlatforms", + "description": "Array list of all supported platforms in current project" } }, "required": [ diff --git a/packages/core/src/context/defaults.ts b/packages/core/src/context/defaults.ts index 43b1a0e538..003b91c7d3 100644 --- a/packages/core/src/context/defaults.ts +++ b/packages/core/src/context/defaults.ts @@ -59,6 +59,7 @@ const runtime: RnvContext['runtime'] = { export const generateContextDefaults = (): RnvContext => ({ isDefault: true, isSystemWin: false, + engineConfigs: [], mutations: { pendingMutations: [], }, diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 49287ccda4..289e2fc953 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -4,6 +4,7 @@ import type { OverridesOptions } from '../system/types'; import type { RnvPlatform } from '../types'; import type { ConfigFileApp, + ConfigFileEngine, ConfigFileLocal, ConfigFilePlugin, ConfigFilePrivate, @@ -62,6 +63,7 @@ export type RnvContext; }; + engineConfigs: ConfigFileEngine[]; assetConfig: object; platform: RnvPlatform; process: NodeJS.Process; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 5be307914f..8fc9d02a90 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -190,6 +190,7 @@ export const loadEnginePluginDeps = async (engineConfigs: Array v.key); const addedPluginsKeys = Object.keys(addedPlugins); @@ -222,112 +223,116 @@ export const loadEnginePackageDeps = async (engineConfigs: Array { const engineConfig = readObjectSync(ecf.configPath); - c.buildConfig.defaults?.supportedPlatforms?.forEach((platform) => { - const npm = engineConfig?.platforms?.[platform]?.npm || {}; - if (npm) { - if (npm.devDependencies) { - const deps = c.files.project.package.devDependencies || {}; - Object.keys(npm.devDependencies).forEach((k) => { - if (!deps[k]) { - const isMonorepo = getConfigProp('isMonorepo'); - if (isMonorepo) { - logInfo( - `Engine ${ecf.key} requires npm devDependency ${k} for platform ${platform}. project marked as monorepo. SKIPPING` - ); - } else { - // logInfo( - // `Engine ${ecf.key} requires npm devDependency ${k} for platform ${platform}. ADDING...DONE` - // ); - createDependencyMutation({ - name: k, - updated: { - version: npm.devDependencies?.[k] || 'N/A', - }, - type: 'devDependencies', - msg: `Missing dependency for platform ${platform}`, - source: `engine.npm (${ecf.key})`, - targetPath: c.paths.project.package, - }); - // if (npm.devDependencies?.[k]) { - // deps[k] = npm.devDependencies[k]; - // addedDeps.push(k); - // } - } - } - }); - c.files.project.package.devDependencies = deps; - } - if (npm.dependencies) { - const deps = c.files.project.package.dependencies || {}; - Object.keys(npm.dependencies).forEach((k) => { - if (!deps[k]) { - if (c.buildConfig?.isTemplate) { - if (!c.files.project.package.devDependencies?.[k]) { - logWarning( - `Engine ${ecf.key} requires npm dependency ${k} for platform ${platform}. which in template project should be placed in devDependencies` + if (engineConfig) { + engConfigs.push(engineConfig); + c.buildConfig.defaults?.supportedPlatforms?.forEach((platform) => { + const npm = engineConfig?.platforms?.[platform]?.npm || {}; + if (npm) { + if (npm.devDependencies) { + const deps = c.files.project.package.devDependencies || {}; + Object.keys(npm.devDependencies).forEach((k) => { + if (!deps[k]) { + const isMonorepo = getConfigProp('isMonorepo'); + if (isMonorepo) { + logInfo( + `Engine ${ecf.key} requires npm devDependency ${k} for platform ${platform}. project marked as monorepo. SKIPPING` ); + } else { + // logInfo( + // `Engine ${ecf.key} requires npm devDependency ${k} for platform ${platform}. ADDING...DONE` + // ); + createDependencyMutation({ + name: k, + updated: { + version: npm.devDependencies?.[k] || 'N/A', + }, + type: 'devDependencies', + msg: `Missing dependency for platform ${platform}`, + source: `engine.npm (${ecf.key})`, + targetPath: c.paths.project.package, + }); + // if (npm.devDependencies?.[k]) { + // deps[k] = npm.devDependencies[k]; + // addedDeps.push(k); + // } } - } else { - // logInfo( - // `Engine ${ecf.key} requires npm dependency ${k} for platform ${platform}. ADDING...DONE` - // ); + } + }); + c.files.project.package.devDependencies = deps; + } + if (npm.dependencies) { + const deps = c.files.project.package.dependencies || {}; + Object.keys(npm.dependencies).forEach((k) => { + if (!deps[k]) { + if (c.buildConfig?.isTemplate) { + if (!c.files.project.package.devDependencies?.[k]) { + logWarning( + `Engine ${ecf.key} requires npm dependency ${k} for platform ${platform}. which in template project should be placed in devDependencies` + ); + } + } else { + // logInfo( + // `Engine ${ecf.key} requires npm dependency ${k} for platform ${platform}. ADDING...DONE` + // ); + createDependencyMutation({ + name: k, + updated: { + version: npm.dependencies?.[k] || 'N/A', + }, + type: 'dependencies', + msg: `Missing dependency for platform ${platform}`, + source: `engine.npm (${ecf.key})`, + targetPath: c.paths.project.package, + }); + // if (npm.dependencies?.[k]) { + // deps[k] = npm.dependencies[k]; + // addedDeps.push(k); + // } + } + } + }); + c.files.project.package.dependencies = deps; + } + if (npm.optionalDependencies) { + const deps = c.files.project.package.optionalDependencies || {}; + Object.keys(npm.optionalDependencies).forEach((k) => { + if (!deps[k]) { + logInfo( + `Engine ${ecf.key} requires npm optionalDependency ${k} for platform ${platform}. ADDING...DONE` + ); createDependencyMutation({ name: k, updated: { - version: npm.dependencies?.[k] || 'N/A', + version: npm.optionalDependencies?.[k] || 'N/A', }, - type: 'dependencies', - msg: `Missing dependency for platform ${platform}`, + type: 'optionalDependencies', + msg: `Missing optionalDependency for platform ${platform}`, source: `engine.npm (${ecf.key})`, targetPath: c.paths.project.package, }); - // if (npm.dependencies?.[k]) { - // deps[k] = npm.dependencies[k]; + // if (npm.optionalDependencies?.[k]) { + // deps[k] = npm.optionalDependencies[k]; // addedDeps.push(k); // } } - } - }); - c.files.project.package.dependencies = deps; - } - if (npm.optionalDependencies) { - const deps = c.files.project.package.optionalDependencies || {}; - Object.keys(npm.optionalDependencies).forEach((k) => { - if (!deps[k]) { - logInfo( - `Engine ${ecf.key} requires npm optionalDependency ${k} for platform ${platform}. ADDING...DONE` - ); - createDependencyMutation({ - name: k, - updated: { - version: npm.optionalDependencies?.[k] || 'N/A', - }, - type: 'optionalDependencies', - msg: `Missing optionalDependency for platform ${platform}`, - source: `engine.npm (${ecf.key})`, - targetPath: c.paths.project.package, - }); - // if (npm.optionalDependencies?.[k]) { - // deps[k] = npm.optionalDependencies[k]; - // addedDeps.push(k); - // } - } - }); - c.files.project.package.optionalDependencies = deps; - } + }); + c.files.project.package.optionalDependencies = deps; + } - // if (addedDeps.length > 0) { - // writeFileSync(c.paths.project.package, c.files.project.package); - // } - // - } - }); + // if (addedDeps.length > 0) { + // writeFileSync(c.paths.project.package, c.files.project.package); + // } + // + } + }); + } }); + + c.engineConfigs = engConfigs; return true; - console.log('KURVA'); // return addedDeps.length; }; @@ -430,7 +435,7 @@ ${enginesToInstall.map((v) => `> ${v.key}@${v.version} path: ${v.engineRootPath} ${enginesToInstall.map((v) => `> ${v.key}@${v.version}`).join('\n')} ADDING TO PACKAGE.JSON...DONE`); - await checkAndCreateProjectPackage(); + await checkAndCreateProjectPackage(); //TODO: consider to move this to better location const pkg = c.files.project.package; const devDeps = pkg.devDependencies || {}; pkg.devDependencies = devDeps; diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index 7bef5d750d..7b94dde7f2 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -9,6 +9,10 @@ export const Runtime = z export const PlatformsKeys = z.enum(RnvPlatforms); +export const SupportedPlatforms = z + .array(PlatformsKeys) + .describe('Array list of all supported platforms in current project'); + export type _PlatformsKeysType = z.infer; export const HexColor = z.string().min(4).max(9).regex(/^#/); @@ -56,6 +60,7 @@ export const TemplateConfig = z z.object({ paths: z.array(z.string()), engines: z.array(z.string()).optional(), + platforms: SupportedPlatforms.optional(), }), ]) ) @@ -84,10 +89,6 @@ export const TemplateConfig = z }) .describe('Used in `renative.template.json` allows you to define template behaviour.'); -export const SupportedPlatforms = z - .array(PlatformsKeys) - .describe('Array list of all supported platforms in current project'); - export const ProjectTemplates = z.record( z.string(), z.object({ diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index f8e1ecacc7..da53e22196 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -25,25 +25,31 @@ export const configureTemplateFiles = async () => { let mergedObj = _getProjectTemplateMergedConfig(templateConfig); const includedPaths = mergedObj?.templateConfig?.includedPaths; - // includedPaths can contain paths with repeated base folders ie: ["src/dir1", "src/dir2", "src/dir3",...] - // We need to keep track of folders not allowed to be added into if they exist - // but allowed to be added into if they di not exist prior to configureTemplateFiles call - const folderOverrideLock: string[] = []; + if (includedPaths) { includedPaths.forEach((pth) => { if (c.paths.template.dir) { if (typeof pth === 'string') { - _copyIncludedPaths(c, pth, folderOverrideLock); + _copyIncludedPaths(c, pth); } else { - const engId = c.runtime.engine?.config?.id; - if (!pth.engines || (engId && pth.engines?.includes?.(engId))) { - const incPaths = pth.paths; - if (incPaths.length > 0) { - incPaths.forEach((pth) => { - _copyIncludedPaths(c, pth, folderOverrideLock); - }); + let matched: boolean = true; + const suPlats = c.buildConfig?.defaults?.supportedPlatforms || []; + if (pth.platforms && suPlats?.length) { + const match = pth.platforms.some((v) => suPlats.includes(v)); + if (!match) { + matched = false; + } + } else if (pth.engines?.length) { + const engId = c.runtime.engine?.config?.id; + if (engId && !pth.engines?.includes?.(engId)) { + matched = false; } } + if (matched) { + pth.paths.forEach((pth) => { + _copyIncludedPaths(c, pth); + }); + } } } }); @@ -115,19 +121,10 @@ const _getProjectTemplateMergedConfig = (templateConfig: ConfigFileTemplate | nu return null; }; -const _copyIncludedPaths = (c: RnvContext, name: string, copyWhitelist: string[]) => { +const _copyIncludedPaths = (c: RnvContext, name: string) => { const sourcePathOriginal = path.join(c.paths.template.dir, name); const sourceOverridePath = path.join(c.paths.template.dir, RnvFolderName.templateOverrides, name); const destPath = path.join(c.paths.project.dir, name); - // Make sure we do not override existing folders at root of project - const destRootPath = path.join(c.paths.project.dir, name.split('/')[0]); - const rootDirExists = fsExistsSync(destRootPath); - if (!rootDirExists) { - copyWhitelist.push(destRootPath); - } - if (rootDirExists && !copyWhitelist.includes(destRootPath)) { - return; - } // If override exists use it, otherwise use original and continue with rest of the logic const sourcePath = fsExistsSync(sourceOverridePath) ? sourceOverridePath : sourcePathOriginal; if (!fsExistsSync(destPath) && fsExistsSync(sourcePath)) { diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index 892919ad1b..4b59a88e6a 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -68,6 +68,7 @@ export default createTask({ await configureConfigOverrides(payload); await saveProgressIntoProjectConfig(payload); // Now we can apply template (required for appConfigs to be generated properly) + await updateRenativeConfigs(); await applyTemplate(); await configureTemplateFiles(); await generateLocalJsonSchemas(); diff --git a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts index 044718f6c1..61d5bd9aeb 100644 --- a/packages/engine-core/src/tasks/hooks/taskHooksRun.ts +++ b/packages/engine-core/src/tasks/hooks/taskHooksRun.ts @@ -3,10 +3,10 @@ import { executeTask, fsExistsSync, inquirerPrompt, - logInfo, createTask, RnvTaskName, RnvTaskOptions, + logDebug, } from '@rnv/core'; export default createTask({ @@ -16,7 +16,7 @@ export default createTask({ if (fsExistsSync(ctx.paths.project.config)) { await executeTask({ taskName: RnvTaskName.projectConfigure, parentTaskName: taskName, originTaskName }); } else { - logInfo('Your are running your buildHook outside of renative project. SKIPPING project configure'); + logDebug('Your are running your buildHook outside of renative project. SKIPPING project configure'); } await buildHooks(); diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 239bd15972..2b2c14c0f3 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -25,9 +25,6 @@ import { generateLocalJsonSchemas, RnvTaskName, getContext, - // parseRenativeConfigs, - // parseAppConfigs, - // loadFileExtended, } from '@rnv/core'; import { checkCrypto } from '../crypto/common'; import { installPackageDependenciesAndPlugins } from '../../plugins'; @@ -102,7 +99,7 @@ export default createTask({ } await applyTemplate(); // We need to ensure appConfigs are populated from template before proceeding further - await configureTemplateFiles(); + // await configureTemplateFiles(); // NOTE: We only do this during bootstrap once await configureRuntimeDefaults(); await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); diff --git a/packages/template-starter/renative.json b/packages/template-starter/renative.json index 12e791525d..1f498e73eb 100644 --- a/packages/template-starter/renative.json +++ b/packages/template-starter/renative.json @@ -40,12 +40,10 @@ }, "targets": {} }, - "templates": { - "@rnv/template-starter": { - "version": "1.0.0-rc.12" - } + "templateConfig": { + "name": "@rnv/template-starter", + "version": "1.0.0-rc.12" }, - "currentTemplate": "@rnv/template-starter", "platforms": { "android": { "minSdkVersion": 26, diff --git a/packages/template-starter/renative.template.json b/packages/template-starter/renative.template.json index 1a0e5643e7..cf4813f895 100644 --- a/packages/template-starter/renative.template.json +++ b/packages/template-starter/renative.template.json @@ -1,5 +1,5 @@ { - "$schema": ".rnv/schema/rnv.template.json", + "$schema": "../../.rnv/schema/rnv.template.json", "templateConfig": { "disabled": false, "includedPaths": [ @@ -21,15 +21,15 @@ }, { "paths": ["Gemfile", "metro.config.js", ".bundle", "react-native.config.js"], - "engines": ["engine-rn", "engine-rn-tvos"] + "platforms": ["ios", "android", "tvos", "firetv", "androidtv"] }, { "paths": ["next.config.js", "next-env.d.ts", "src/pages"], - "engines": ["engine-rn-next"] + "platforms": ["web"] }, { "paths": ["webpack.config.js"], - "engines": ["engine-web", "engine-rn-electron"] + "platforms": ["macos", "tizen", "webos", "tizenwatch", "tizenmobile"] } ], "renative_json": { From 1dc5060aac954180f80710ce82eead44fcbacb16 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 30 Mar 2024 11:53:46 +0100 Subject: [PATCH 147/175] update next runner --- packages/app-harness/package.json | 2 +- .../config-templates/renative.templates.json | 2 +- packages/engine-rn-next/src/sdk/runner.ts | 4 +- packages/sdk-utils/src/ipUtils.ts | 9 +- packages/template-starter/package.json | 2 +- yarn.lock | 126 +++++++++--------- 6 files changed, 75 insertions(+), 70 deletions(-) diff --git a/packages/app-harness/package.json b/packages/app-harness/package.json index 2b40a33b39..9c48705615 100644 --- a/packages/app-harness/package.json +++ b/packages/app-harness/package.json @@ -43,7 +43,7 @@ "@react-native-community/push-notification-ios": "1.11.0", "@react-native-firebase/app": "18.6.1", "@rnv/renative": "1.0.0-rc.12", - "next": "14.1.0", + "next": "14.1.4", "raf": "3.4.1", "react": "18.2.0", "react-art": "18.2.0", diff --git a/packages/config-templates/renative.templates.json b/packages/config-templates/renative.templates.json index 144dd35e47..04875fb05b 100644 --- a/packages/config-templates/renative.templates.json +++ b/packages/config-templates/renative.templates.json @@ -1506,7 +1506,7 @@ } }, "next": { - "version": "14.1.0" + "version": "14.1.4" }, "next-seo": "4.28.1", "RCTLinkingIOS": { diff --git a/packages/engine-rn-next/src/sdk/runner.ts b/packages/engine-rn-next/src/sdk/runner.ts index af46bbd3d5..63a9db0007 100644 --- a/packages/engine-rn-next/src/sdk/runner.ts +++ b/packages/engine-rn-next/src/sdk/runner.ts @@ -88,11 +88,13 @@ const _runWebBrowser = (devServerHost: string, port: number, alreadyStarted: boo const c = getContext(); logDefault('_runWebBrowser', `ip:${devServerHost} port:${port} openBrowser:${!!c.runtime.shouldOpenBrowser}`); if (!c.runtime.shouldOpenBrowser) return resolve(); - const wait = waitForHost('') + const wait = waitForHost('', { maxAttempts: 10, checkInterval: 1000 }) .then(() => { openBrowser(`http://${devServerHost}:${port}/`); }) .catch((e) => { + // Let's opent the browser anyway as sometimes we get timeout waiting for next to compile + openBrowser(`http://${devServerHost}:${port}/`); logWarning(e); }); if (alreadyStarted) return wait; // if it's already started, return the promise so it rnv will wait, otherwise it will exit before opening the browser diff --git a/packages/sdk-utils/src/ipUtils.ts b/packages/sdk-utils/src/ipUtils.ts index 8d214cec8a..c748471e4c 100644 --- a/packages/sdk-utils/src/ipUtils.ts +++ b/packages/sdk-utils/src/ipUtils.ts @@ -57,12 +57,15 @@ export const getDevServerHost = () => { return devServerHostFixed; }; -export const waitForHost = async (suffix = 'assets/bundle.js') => { +export const waitForHost = async ( + suffix = 'assets/bundle.js', + opts?: { maxAttempts: number; checkInterval: number } +) => { const c = getContext(); logDefault('waitForHost', `port:${c.runtime.port}`); let attempts = 0; - const maxAttempts = 10; - const CHECK_INTEVAL = 2000; + const maxAttempts = opts?.maxAttempts || 10; + const CHECK_INTEVAL = opts?.checkInterval || 2000; // const spinner = ora('Waiting for webpack to finish...').start(); const devServerHost = getDevServerHost(); diff --git a/packages/template-starter/package.json b/packages/template-starter/package.json index 5b584bde93..ee490286ec 100644 --- a/packages/template-starter/package.json +++ b/packages/template-starter/package.json @@ -114,7 +114,7 @@ "babel-jest": "29.6.3", "babel-loader": "9.1.3", "detox": "18.20.2", - "next": "14.1.0", + "next": "14.1.4", "raf": "3.4.1", "react": "18.2.0", "react-art": "18.2.0", diff --git a/yarn.lock b/yarn.lock index 2fdc495e34..fcf1b821b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2674,55 +2674,55 @@ resolved "https://registry.yarnpkg.com/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz#6bb788b2902e48bf5d460c38c6bb7fedd686ddd7" integrity sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ== -"@next/env@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.0.tgz#43d92ebb53bc0ae43dcc64fb4d418f8f17d7a341" - integrity sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw== - -"@next/swc-darwin-arm64@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz#70a57c87ab1ae5aa963a3ba0f4e59e18f4ecea39" - integrity sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ== - -"@next/swc-darwin-x64@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz#0863a22feae1540e83c249384b539069fef054e9" - integrity sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g== - -"@next/swc-linux-arm64-gnu@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz#893da533d3fce4aec7116fe772d4f9b95232423c" - integrity sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ== - -"@next/swc-linux-arm64-musl@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz#d81ddcf95916310b8b0e4ad32b637406564244c0" - integrity sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g== - -"@next/swc-linux-x64-gnu@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz#18967f100ec19938354332dcb0268393cbacf581" - integrity sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ== - -"@next/swc-linux-x64-musl@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz#77077cd4ba8dda8f349dc7ceb6230e68ee3293cf" - integrity sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg== - -"@next/swc-win32-arm64-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz#5f0b8cf955644104621e6d7cc923cad3a4c5365a" - integrity sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ== - -"@next/swc-win32-ia32-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz#21f4de1293ac5e5a168a412b139db5d3420a89d0" - integrity sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw== - -"@next/swc-win32-x64-msvc@14.1.0": - version "14.1.0" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz#e561fb330466d41807123d932b365cf3d33ceba2" - integrity sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg== +"@next/env@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz#432e80651733fbd67230bf262aee28be65252674" + integrity sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ== + +"@next/swc-darwin-arm64@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz#a3bca0dc4393ac4cf3169bbf24df63441de66bb7" + integrity sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg== + +"@next/swc-darwin-x64@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz#ba3683d4e2d30099f3f2864dd7349a4d9f440140" + integrity sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ== + +"@next/swc-linux-arm64-gnu@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz#3519969293f16379954b7e196deb0c1eecbb2f8b" + integrity sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA== + +"@next/swc-linux-arm64-musl@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz#4bb3196bd402b3f84cf5373ff1021f547264d62f" + integrity sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g== + +"@next/swc-linux-x64-gnu@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz#1b3372c98c83dcdab946cdb4ee06e068b8139ba3" + integrity sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw== + +"@next/swc-linux-x64-musl@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz#8459088bdc872648ff78f121db596f2533df5808" + integrity sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg== + +"@next/swc-win32-arm64-msvc@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz#84280a08c00cc3be24ddd3a12f4617b108e6dea6" + integrity sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag== + +"@next/swc-win32-ia32-msvc@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz#23ff7f4bd0a27177428669ef6fa5c3923c738031" + integrity sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw== + +"@next/swc-win32-x64-msvc@14.1.4": + version "14.1.4" + resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz#bccf5beccfde66d6c66fa4e2509118c796385eda" + integrity sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -15508,12 +15508,12 @@ next-images@1.8.4: file-loader "^6.2.0" url-loader "^4.1.0" -next@14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/next/-/next-14.1.0.tgz#b31c0261ff9caa6b4a17c5af019ed77387174b69" - integrity sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q== +next@14.1.4: + version "14.1.4" + resolved "https://registry.npmjs.org/next/-/next-14.1.4.tgz#203310f7310578563fd5c961f0db4729ce7a502d" + integrity sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ== dependencies: - "@next/env" "14.1.0" + "@next/env" "14.1.4" "@swc/helpers" "0.5.2" busboy "1.6.0" caniuse-lite "^1.0.30001579" @@ -15521,15 +15521,15 @@ next@14.1.0: postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.1.0" - "@next/swc-darwin-x64" "14.1.0" - "@next/swc-linux-arm64-gnu" "14.1.0" - "@next/swc-linux-arm64-musl" "14.1.0" - "@next/swc-linux-x64-gnu" "14.1.0" - "@next/swc-linux-x64-musl" "14.1.0" - "@next/swc-win32-arm64-msvc" "14.1.0" - "@next/swc-win32-ia32-msvc" "14.1.0" - "@next/swc-win32-x64-msvc" "14.1.0" + "@next/swc-darwin-arm64" "14.1.4" + "@next/swc-darwin-x64" "14.1.4" + "@next/swc-linux-arm64-gnu" "14.1.4" + "@next/swc-linux-arm64-musl" "14.1.4" + "@next/swc-linux-x64-gnu" "14.1.4" + "@next/swc-linux-x64-musl" "14.1.4" + "@next/swc-win32-arm64-msvc" "14.1.4" + "@next/swc-win32-ia32-msvc" "14.1.4" + "@next/swc-win32-x64-msvc" "14.1.4" nice-try@^1.0.4: version "1.0.5" From f048c47d7d50935b232ab1f8858473b3a64f61b3 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 30 Mar 2024 22:48:45 +0100 Subject: [PATCH 148/175] reduce def size pt1 --- packages/core/src/schema/common/index.ts | 36 +- .../core/src/schema/configFiles/master.ts | 461 ++++++++++++++++++ packages/core/src/schema/platforms/android.ts | 15 +- packages/core/src/schema/platforms/index.ts | 45 +- packages/core/src/schema/platforms/ios.ts | 15 +- packages/core/src/schema/platforms/macos.ts | 17 +- packages/core/src/schema/platforms/tizen.ts | 15 +- packages/core/src/schema/platforms/web.ts | 15 +- packages/core/src/schema/platforms/webos.ts | 15 +- packages/core/src/schema/platforms/windows.ts | 15 +- packages/core/src/schema/shared/index.ts | 5 +- packages/core/tsconfig.json | 35 ++ spec/schema_v2/config.ts | 58 +++ 13 files changed, 651 insertions(+), 96 deletions(-) create mode 100644 packages/core/src/schema/configFiles/master.ts create mode 100644 spec/schema_v2/config.ts diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index 49b13ea9b1..0a8a0036b6 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -130,7 +130,7 @@ IN: 1.0.23 OUT: 100230000 //LEVEl 1 -export const CommonSchemaFragment = { +export const CommonSchemaFragment = z.object({ includedPermissions: z.optional(IncludedPermissions), excludedPermissions: z.optional(ExcludedPermissions), id: z.optional(BundleId), @@ -153,34 +153,24 @@ export const CommonSchemaFragment = { excludedPlugins: z.optional(ExcludedPlugins), runtime: z.optional(Runtime), custom: z.optional(Ext), -}; +}); +export type RnvConfigCommonFragment = z.infer; -// const CommonSchemaFragmentSchema = z.object(CommonSchemaFragment); - -// type CommonSchemaFragmentTS = z.infer; - -// const CommonBuildSchemes = z.record(z.string(), BuildSchemeBase.merge(PlatformBaseFragment)); - -// export type _CommonBuildSchemesSchemaType = z.infer; - -export const CommonSchema = z - .object({ - ...CommonSchemaFragment, +export const CommonSchema: any = CommonSchemaFragment.merge( + z.object({ buildSchemes: z.optional( z.record( z.string(), - z.object({ - ...CommonSchemaFragment, - ...BuildSchemeFragment, - ...PlatformBaseFragment, - }) + CommonSchemaFragment.merge( + BuildSchemeFragment.merge( + z.object({ + ...PlatformBaseFragment, + }) + ) + ) ) ), }) - .describe('Common config props used as default props for all available buildSchemes'); - -// type CommonSchemaTS = CommonSchemaFragmentTS & { -// buildSchemes: Record; -// }; +).describe('Common config props used as default props for all available buildSchemes'); export type _CommonSchemaType = z.infer; diff --git a/packages/core/src/schema/configFiles/master.ts b/packages/core/src/schema/configFiles/master.ts new file mode 100644 index 0000000000..980280876f --- /dev/null +++ b/packages/core/src/schema/configFiles/master.ts @@ -0,0 +1,461 @@ +import { AnyZodObject, z } from 'zod'; + +import { PlatformsKeys, SupportedPlatforms } from '../shared'; + +const _generatePlatformsSchema = (schema: AnyZodObject) => { + return z.object({ + android: schema, + androidtv: schema, + androidwear: schema, + firetv: schema, + ios: schema, + tvos: schema, + tizen: schema, + tizenmobile: schema, + tizenwatch: schema, + webos: schema, + web: schema, + webtv: schema, + chromecast: schema, + kaios: schema, + macos: schema, + linux: schema, + windows: schema, + xbox: schema, + }); +}; + +const SchemaRuntime = z + .any() + .describe( + 'This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code' + ); + +const SchemaPluginPlatform = z.object({ + disabled: z.boolean().default(false).describe('Marks plugin platform disabled'), + forceLinking: z + .boolean() + .default(false) + .describe( + 'Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true' + ), + path: z + .string() + .describe( + 'Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used.' + ), +}); + +const SchemaPluginBase = z.object({ + supportedPlatforms: SupportedPlatforms.optional(), + disabled: z.boolean().default(false).describe('Marks plugin disabled'), + props: z.record(z.string(), z.string()).describe('Custom props passed to plugin'), + version: z.string().describe('Version of plugin. Typically package version'), + deprecated: z + .string() + .describe('Marks your plugin deprecated with warning showing in the console during rnv commands'), + source: z + .string() + .describe( + 'Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}' + ), + disableNpm: z.boolean().describe('Will skip including plugin in package.json and installing it via npm/yarn etc'), + skipMerge: z + .boolean() + .describe( + 'Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully' + ), + npm: z + .record(z.string(), z.string()) + .describe('Object of npm dependencies of this plugin. These will be injected into package.json'), //=> npmDependencies + pluginDependencies: z + .record(z.string(), z.string().nullable()) + .describe('List of other Renative plugins this plugin depends on'), + webpackConfig: z + .object({ + modulePaths: z.union([z.boolean(), z.array(z.string())]).optional(), + moduleAliases: z + .union([ + z.boolean(), + z.record( + z.string(), + z.union([ + z.string(), + z.object({ + projectPath: z.string(), + }), + ]) + ), + ]) + .optional(), + nextTranspileModules: z.optional(z.array(z.string())), + }) + .describe('Allows you to configure webpack bahaviour per each individual plugin'), //Should this be at root plugin??? + disablePluginTemplateOverrides: z.boolean().describe('Disables plugin overrides for selected plugin'), + fontSources: z.array(z.string()), +}); + +const SchemaPlugin: any = SchemaPluginBase.merge(_generatePlatformsSchema(SchemaPluginPlatform)); + +const SchemaPackageJson = z + .object({ + dependencies: z.record(z.string(), z.string()), + devDependencies: z.record(z.string(), z.string()), + peerDependencies: z.record(z.string(), z.string()), + optionalDependencies: z.record(z.string(), z.string()), + name: z.string(), + version: z.string(), + }) + .passthrough(); + +const SchemaPlatform = z.object({ + engine: z + .string() + .describe('ID of engine to be used for this platform. Note: engine must be registered in `engines` field'), + + extendPlatform: z.optional(PlatformsKeys), + assetFolderPlatform: z + .string() + .describe( + 'Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets' + ), +}); + +const SchemaCommon = z.object({ + includedPermissions: z + .array(z.string()) + .describe( + "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + ), + excludedPermissions: z + .array(z.string()) + .describe( + "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + ), + id: z.string().describe('Bundle ID of application. ie: com.example.myapp'), + idSuffix: z.string().optional(), + version: z.string().describe('Semver style version of your app'), + versionCode: z.string().describe('Manual verride of generated version code'), + versionFormat: z.string().describe(`Allows you to fine-tune app version defined in package.json or renative.json. + If you do not define versionFormat, no formatting will apply to version. + `), + versionCodeFormat: z.string().describe(`Allows you to fine-tune auto generated version codes. + Version code is autogenerated from app version defined in package.json or renative.json. + `), + versionCodeOffset: z.number().optional(), + title: z + .string() + .describe( + 'Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website' + ), + description: z + .string() + .describe( + 'General description of your app. This prop will be injected to actual projects where description field is applicable' + ), + author: z.string().describe('Author name'), + license: z.string().describe('Injects license information into app'), + includedFonts: z + .array(z.string()) + .describe( + 'Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all' + ), + backgroundColor: z + .string() + .min(4) + .max(9) + .regex(/^#/) + .describe('Defines root view backgroundColor for all platforms in HEX format'), + splashScreen: z.boolean().describe('Enable or disable splash screen'), + fontSources: z + .array(z.string()) + .describe( + 'Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`' + ), + assetSources: z + .array(z.string()) + .describe( + 'Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`' + ), + includedPlugins: z + .array(z.string()) + .describe( + "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + ), + excludedPlugins: z + .array(z.string()) + .describe( + "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + ), + runtime: SchemaRuntime, +}); + +const SchemaProject = z.object({ + workspaceID: z + .string() //TODO: no spaces + .describe( + 'Workspace ID your project belongs to. This will mach same folder name in the root of your user directory. ie `~/` on macOS' + ), + projectVersion: z.string().describe('Version of project'), // TODO: if undefined it should infer from package.json + projectName: z + .string() + .describe( + 'Name of the project which will be used in workspace as folder name. this will also be used as part of the KEY in crypto env var generator' + ), + isTemplate: z + .boolean() + .describe('Marks project as template. This disables certain user checks like version mismatch etc'), + defaults: z + .object({ + ports: z + .record(PlatformsKeys, z.number()) //TODO maxValue(65535) + .describe( + 'Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts' + ), + supportedPlatforms: SupportedPlatforms, + portOffset: z.number().describe('Offset each port default value by increment'), + defaultCommandSchemes: z + .record(z.enum(['run', 'export', 'build']), z.string()) + .describe( + 'List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`' + ), + targets: z + .record(PlatformsKeys, z.string()) + .describe('Override of default targets specific to this project'), + }) + .describe('Default system config for this project'), + common: SchemaCommon.merge( + z.object({ + buildSchemes: z.record(z.string(), SchemaCommon.merge(_generatePlatformsSchema(SchemaPlatform))), + }) + ).describe('Common config props used as default props for all available buildSchemes'), + pipes: z + .array(z.string()) + .describe( + 'To avoid rnv building `buildHooks/src` every time you can specify which specific pipes should trigger recompile of buildHooks' + ), + crypto: z + .object({ + path: z + .string() + .describe( + 'Relative path to encrypted file in your renative project. Example: "./secrets/mySecrets.enc"' + ), + isOptional: z.boolean().describe('Mark if crypto object should not checked every run'), + }) + .describe( + 'This prop enables automatic encrypt and decrypt of sensitive information in your project. \nRNV will generate new env variable with can be used to encrypt and decrypt. this env var is generated by combining (and sanitizing) 2 properties from your renative.json: \nworkspaceID + projectName.\nThese 2 properties are also used to generate path on your local machine where encrypted files will be decrypted into.' + ), + paths: z + .object({ + appConfigsDir: z.string().describe('Custom path to appConfigs. defaults to `./appConfigs`'), + platformTemplatesDirs: z + .record(PlatformsKeys, z.string()) + .describe( + 'Custom location of ejected platform templates. this is populated after you run `rnv platform eject`' + ), + appConfigsDirs: z.array(z.string()).describe('Array of custom location app configs directories`'), + platformAssetsDir: z + .string() + .describe('Custom path to platformAssets folder. defaults to `./platformAssets`'), + platformBuildsDir: z + .string() + .describe('Custom path to platformBuilds folder. defaults to `./platformBuilds`'), + pluginTemplates: z.record( + z.string(), + z.object({ + npm: z.string(), + path: z.string(), + }) + ).describe(` + Allows you to define custom plugin template scopes. default scope for all plugins is \`rnv\`.`), + }) + .describe('Define custom paths for RNV to look into'), + permissions: z + .object({ + android: z + .record( + z.string(), + z.object({ + key: z.string(), //TODO: type this + security: z.string(), //TODO: type this + }) + ) + .describe('Android SDK specific permissions'), + ios: z + .record( + z.string(), //TODO: type this + z.object({ + desc: z.string(), + }) + ) + .describe('iOS SDK specific permissions'), + }) + .describe( + 'Permission definititions which can be used by app configs via `includedPermissions` and `excludedPermissions` to customize permissions for each app' + ), + engines: z.record(z.string(), z.literal('source:rnv')).describe('List of engines available in this project'), // TODO: rename to mods (mods with type engine in the future) ? + enableHookRebuild: z + .boolean() + .describe( + 'If set to true in `./renative.json` build hooks will be compiled at each rnv command run. If set to `false` (default) rebuild will be triggered only if `dist` folder is missing, `-r` has been passed or you run `rnv hooks run` directly making your rnv commands faster' + ), + extendsTemplate: z + .string() + .describe( + 'You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`' + ), // TODO: rename to "extendsConfig" + tasks: z + .object({ + install: z.object({ + script: z.string(), + platform: z.record( + PlatformsKeys, + z.object({ + ignore: z.boolean(), + ignoreTasks: z.array(z.string()), + }) + ), + }), + }) + .describe( + 'Allows to override specific task within renative toolchain. (currently only `install` supported). this is useful if you want to change specific behaviour of built-in task. ie install task triggers yarn/npm install by default. but that might not be desirable installation trigger' + ), + integrations: z + .record(z.string(), z.object({})) + .describe('Object containing integration configurations where key represents package name'), // TODO: rename to mods + env: z.record(z.string(), z.any()).describe('Object containing injected env variables'), + platforms: _generatePlatformsSchema( + SchemaPlatform.extend({ + buildSchemes: z.record(z.string(), SchemaCommon.merge(_generatePlatformsSchema(SchemaPlatform))), + }) + ).describe('Object containing platform configurations'), + plugins: z + .record(z.string(), z.union([SchemaPlugin, z.string()]).nullable()) + .describe( + 'Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config' + ), +}); + +const SchemaTemplate = z + .object({ + name: z.string().optional(), + version: z.string().optional(), + disabled: z.boolean().optional(), + includedPaths: z + .array( + z.union([ + z.string(), + z.object({ + paths: z.array(z.string()), + engines: z.array(z.string()).optional(), + platforms: SupportedPlatforms.optional(), + }), + ]) + ) + .describe('Defines list of all file/dir paths you want to include in template') + .optional(), + // bootstrapQuestions: BootstrapQuestionsSchema.optional(), + renative_json: z + .object({ + $schema: z.string().optional(), + extendsTemplate: z.string().optional(), + }) + .passthrough() + .optional(), + package_json: SchemaPackageJson, + }) + .describe('Used in `renative.template.json` allows you to define template behaviour.'); + +const SchemaApp = z.object({ + id: z + .string() + .describe('ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder'), + custom: z + .any() + .describe( + 'Object used to extend your renative with custom props. This allows renative json schema to be validated' + ), + hidden: z + .boolean() + .describe( + 'If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`' + ), + extendsTemplate: z + .string() + .describe( + 'You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`' + ), // TODO: rename to "extendsConfig" + extend: z.string().describe('extend another appConfig by id'), // TODO: rename to "extendsAppConfigID" +}); + +export const SchemaConfig: any = z + .object({ + app: SchemaApp, + project: SchemaProject, + runtime: SchemaRuntime, + template: SchemaTemplate, + plugin: SchemaPlugin, + }) + .partial(); +type PlatformsMap = { + android: T; + androidtv: T; + androidwear: T; + firetv: T; + ios: T; + tvos: T; + tizen: T; + tizenmobile: T; + tizenwatch: T; + webos: T; + web: T; + webtv: T; + chromecast: T; + kaios: T; + macos: T; + linux: T; + windows: T; + xbox: T; +}; + +export type RnvConfig = { + app: z.infer; + // project: SchemaProject, + // runtime: SchemaRuntime, + runtime: z.infer; + template: z.infer; + plugin: z.infer & PlatformsMap>; + + // plugin: SchemaPlugin, +}; + +// const kk: RnvConfig; +// kk.plugin.android. + +// DEPRECATED? +// const SplashScreen = z.object({ +// backgroundColor: z +// .string() +// .min(4) +// .max(9) +// .regex(/^#/) +// .describe('Defines root view backgroundColor for all platforms in HEX format'), +// image: z +// .string() +// .describe( +// 'Path to splash screen image. This path should be relative to `./appConfigs/base/assets` folder' +// ), +// resizeMode: z +// .string() +// .optional() +// .describe( +// 'Resize mode of splash screen image. This is specific to each platform. ie: `cover`, `contain`, `center` etc' +// ), +// style: z +// .string() +// .optional() +// .describe( +// 'Custom style for splash screen. This is specific to each platform. ie: `light-content`, `dark-content` etc' +// ), +// }); diff --git a/packages/core/src/schema/platforms/android.ts b/packages/core/src/schema/platforms/android.ts index 4e76c66e04..ab3cdc588b 100644 --- a/packages/core/src/schema/platforms/android.ts +++ b/packages/core/src/schema/platforms/android.ts @@ -5,10 +5,11 @@ import { PlatformAndroidFragment } from './fragments/android'; import { TemplateAndroidFragment } from './fragments/templateAndroid'; import { PlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformAndroidSchema = z.object({ - ...CommonSchemaFragment, - ...PlatformBaseFragment, - ...PlatformAndroidFragment, - ...PlatformReactNativeFragment, - ...TemplateAndroidFragment, -}); +export const PlatformAndroidSchema = CommonSchemaFragment.merge( + z.object({ + ...PlatformBaseFragment, + ...PlatformAndroidFragment, + ...PlatformReactNativeFragment, + ...TemplateAndroidFragment, + }) +); diff --git a/packages/core/src/schema/platforms/index.ts b/packages/core/src/schema/platforms/index.ts index 3f150cdda7..fae3d9b5ed 100644 --- a/packages/core/src/schema/platforms/index.ts +++ b/packages/core/src/schema/platforms/index.ts @@ -22,27 +22,30 @@ import { PlatformiOSFragment } from './fragments/ios'; import { TemplateAndroidFragment } from './fragments/templateAndroid'; import { TemplateXcodeFragment } from './fragments/templateXcode'; -const MergedPlatformPlainObject = z.object({ - //BASE - ...CommonSchemaFragment, - ...PlatformBaseFragment, - //PLATFORMS - ...PlatformiOSFragment, - ...PlatformAndroidFragment, - ...PlatformWebFragment, - ...PlatformTizenFragment, - ...PlatformWindowsFragment, - ...PlatformWebOSFragment, - //ENGINES - ...PlatformLightningFragment, - ...PlatformReactNativeFragment, - ...PlatformWebpackFragment, - ...PlatformElectronFragment, - ...PlatformNextJsFragment, - ...TemplateAndroidFragment, - ...TemplateXcodeFragment, - ...PlatformLightningFragment, -}); +const MergedPlatformPlainObject = CommonSchemaFragment.merge( + CommonSchemaFragment.merge( + z.object({ + //BASE + ...PlatformBaseFragment, + //PLATFORMS + ...PlatformiOSFragment, + ...PlatformAndroidFragment, + ...PlatformWebFragment, + ...PlatformTizenFragment, + ...PlatformWindowsFragment, + ...PlatformWebOSFragment, + //ENGINES + ...PlatformLightningFragment, + ...PlatformReactNativeFragment, + ...PlatformWebpackFragment, + ...PlatformElectronFragment, + ...PlatformNextJsFragment, + ...TemplateAndroidFragment, + ...TemplateXcodeFragment, + ...PlatformLightningFragment, + }) + ) +); export type _MergedPlatformObjectType = z.infer; diff --git a/packages/core/src/schema/platforms/ios.ts b/packages/core/src/schema/platforms/ios.ts index 2bd7b242a8..b6902cef9f 100644 --- a/packages/core/src/schema/platforms/ios.ts +++ b/packages/core/src/schema/platforms/ios.ts @@ -5,10 +5,11 @@ import { CommonSchemaFragment } from '../common'; import { TemplateXcodeFragment } from './fragments/templateXcode'; import { PlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformiOSSchema = z.object({ - ...CommonSchemaFragment, - ...PlatformBaseFragment, - ...PlatformiOSFragment, - ...PlatformReactNativeFragment, - ...TemplateXcodeFragment, -}); +export const PlatformiOSSchema = CommonSchemaFragment.merge( + z.object({ + ...PlatformBaseFragment, + ...PlatformiOSFragment, + ...PlatformReactNativeFragment, + ...TemplateXcodeFragment, + }) +); diff --git a/packages/core/src/schema/platforms/macos.ts b/packages/core/src/schema/platforms/macos.ts index 965cd28718..0930993b75 100644 --- a/packages/core/src/schema/platforms/macos.ts +++ b/packages/core/src/schema/platforms/macos.ts @@ -6,11 +6,12 @@ import { PlatformElectronFragment } from './fragments/electron'; import { TemplateXcodeFragment } from './fragments/templateXcode'; import { PlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformMacosSchema = z.object({ - ...CommonSchemaFragment, - ...PlatformBaseFragment, - ...PlatformiOSFragment, - ...PlatformReactNativeFragment, - ...TemplateXcodeFragment, - ...PlatformElectronFragment, -}); +export const PlatformMacosSchema = CommonSchemaFragment.merge( + z.object({ + ...PlatformBaseFragment, + ...PlatformiOSFragment, + ...PlatformReactNativeFragment, + ...TemplateXcodeFragment, + ...PlatformElectronFragment, + }) +); diff --git a/packages/core/src/schema/platforms/tizen.ts b/packages/core/src/schema/platforms/tizen.ts index f556d91fca..cc2b61c562 100644 --- a/packages/core/src/schema/platforms/tizen.ts +++ b/packages/core/src/schema/platforms/tizen.ts @@ -5,10 +5,11 @@ import { CommonSchemaFragment } from '../common'; import { PlatformWebpackFragment } from './fragments/webpack'; import { PlatformWebFragment } from './fragments/web'; -export const PlatformTizenSchema = z.object({ - ...CommonSchemaFragment, - ...PlatformBaseFragment, - ...PlatformTizenFragment, - ...PlatformWebFragment, - ...PlatformWebpackFragment, -}); +export const PlatformTizenSchema = CommonSchemaFragment.merge( + z.object({ + ...PlatformBaseFragment, + ...PlatformTizenFragment, + ...PlatformWebFragment, + ...PlatformWebpackFragment, + }) +); diff --git a/packages/core/src/schema/platforms/web.ts b/packages/core/src/schema/platforms/web.ts index a6b8859046..376eb6d1e2 100644 --- a/packages/core/src/schema/platforms/web.ts +++ b/packages/core/src/schema/platforms/web.ts @@ -5,10 +5,11 @@ import { CommonSchemaFragment } from '../common'; import { PlatformWebFragment } from './fragments/web'; import { PlatformNextJsFragment } from './fragments/nextjs'; -export const PlatformWebSchema = z.object({ - ...CommonSchemaFragment, - ...PlatformBaseFragment, - ...PlatformWebpackFragment, - ...PlatformNextJsFragment, - ...PlatformWebFragment, -}); +export const PlatformWebSchema = CommonSchemaFragment.merge( + z.object({ + ...PlatformBaseFragment, + ...PlatformWebpackFragment, + ...PlatformNextJsFragment, + ...PlatformWebFragment, + }) +); diff --git a/packages/core/src/schema/platforms/webos.ts b/packages/core/src/schema/platforms/webos.ts index 3d0bb93674..d9e459467f 100644 --- a/packages/core/src/schema/platforms/webos.ts +++ b/packages/core/src/schema/platforms/webos.ts @@ -5,10 +5,11 @@ import { PlatformWebpackFragment } from './fragments/webpack'; import { PlatformWebFragment } from './fragments/web'; import { PlatformWebOSFragment } from './fragments/webos'; -export const PlatformWebosSchema = z.object({ - ...CommonSchemaFragment, - ...PlatformBaseFragment, - ...PlatformWebFragment, - ...PlatformWebpackFragment, - ...PlatformWebOSFragment, -}); +export const PlatformWebosSchema = CommonSchemaFragment.merge( + z.object({ + ...PlatformBaseFragment, + ...PlatformWebFragment, + ...PlatformWebpackFragment, + ...PlatformWebOSFragment, + }) +); diff --git a/packages/core/src/schema/platforms/windows.ts b/packages/core/src/schema/platforms/windows.ts index 31248a5722..9d709e0348 100644 --- a/packages/core/src/schema/platforms/windows.ts +++ b/packages/core/src/schema/platforms/windows.ts @@ -5,10 +5,11 @@ import { PlatformElectronFragment } from './fragments/electron'; import { PlatformWindowsFragment } from './fragments/windows'; import { PlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformWindowsSchema = z.object({ - ...CommonSchemaFragment, - ...PlatformBaseFragment, - ...PlatformElectronFragment, - ...PlatformReactNativeFragment, - ...PlatformWindowsFragment, -}); +export const PlatformWindowsSchema = CommonSchemaFragment.merge( + z.object({ + ...PlatformBaseFragment, + ...PlatformElectronFragment, + ...PlatformReactNativeFragment, + ...PlatformWindowsFragment, + }) +); diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index 7b94dde7f2..dc87d9eb38 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -35,7 +35,7 @@ export const DefaultTargets = z export const BundleId = z.string().describe('Bundle ID of application. ie: com.example.myapp'); -export const BuildSchemeFragment = { +export const BuildSchemeFragment = z.object({ enabled: z.optional(z.boolean().describe('Defines whether build scheme shows up in options to run')), description: z.optional( z @@ -44,7 +44,8 @@ export const BuildSchemeFragment = { 'Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`' ) ), -}; +}); +export type RnvConfigBuildSchemeFragment = z.infer; export const NpmDep = z.record(z.string(), z.string()); diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 1dc09ed8d6..cfb20bba6a 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -7,3 +7,38 @@ }, "exclude": ["./src/**/*.test.ts", "./lib/**/*", "./templateFiles/**/*"] } + +// { +// "compilerOptions": { +// "incremental": true, +// "removeComments": true, +// "preserveConstEnums": true, +// "sourceMap": true, +// "strict": true, +// "noImplicitReturns": true, +// "moduleResolution": "node", +// "stripInternal": true, +// "noEmit": true, +// "lib": ["esnext", "dom"], +// "target": "esnext", +// "baseUrl": ".", +// "paths": { +// "@rxjs/observable": ["../observable/src/index"], +// "rxjs": ["./src/index"], +// "rxjs/operators": ["./src/operators/index"], +// "rxjs/testing": ["./src/testing/index"], +// "rxjs/ajax": ["./src/ajax/index"], +// "rxjs/webSocket": ["./src/webSocket/index"], +// "rxjs/fetch": ["./src/fetch/index"], +// "rxjs/internal/*": ["./src/internal/*"] +// } +// } +// } + +// interface EnvironmentVars { +// NAME: string; +// OS: string; + +// // Unknown properties are covered by this index signature. +// [propName: string]: string; +// } diff --git a/spec/schema_v2/config.ts b/spec/schema_v2/config.ts new file mode 100644 index 0000000000..597665657b --- /dev/null +++ b/spec/schema_v2/config.ts @@ -0,0 +1,58 @@ +import { z } from 'zod'; + +const WorkspaceID = z + .string() //TODO: no spaces + .describe( + 'Workspace ID your project belongs to. This will mach same folder name in the root of your user directory. ie `~/` on macOS' + ); +type RnvConfigWorkspaceID = z.infer; + +type RnvConfigProject = { + workspaceID: string; +}; + +type RnvConfig = { + // reantive.app.json + app: { + id: string; + appConfigID: string; + common: {}; + }; + // reantive.project.json + project: { + projectName: string; + engines: {}; + extendsConfig: string; + supportedPlatforms: []; + platforms: { + android: { + buildSchemes: {}; + }; + }; + plugins: { + 'plugin-a': {}; + }; + }; + // reantive.template.json + template: {}; + // reantive.workspace.json + workspace: {}; + // reantive.engine.json + engine: {}; + // reantive.integration.json + integration: {}; + // reantive.solution.json + solution: {}; + // reantive.local.json + local: {}; + // reantive.private.json + private: {}; + // renative.runtime.json + runtime: {}; + // reantive.templates.json + configTemplates: { + plugins: {}; + templates: {}; + integrations: {}; + }; +}; From d4f0b2c3b3c57b0ed857ffac5c3726c87742b4e4 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sat, 30 Mar 2024 23:09:20 +0100 Subject: [PATCH 149/175] refactor pt2 --- packages/core/src/schema/common/index.ts | 46 +++++++------ packages/core/src/schema/configFiles/app.ts | 8 +-- .../core/src/schema/configFiles/project.ts | 8 +-- packages/core/src/schema/platforms/android.ts | 20 +++--- .../src/schema/platforms/fragments/android.ts | 2 +- .../src/schema/platforms/fragments/base.ts | 4 +- .../schema/platforms/fragments/electron.ts | 2 +- .../src/schema/platforms/fragments/ios.ts | 2 +- .../schema/platforms/fragments/lightning.ts | 2 +- .../src/schema/platforms/fragments/nextjs.ts | 2 +- .../schema/platforms/fragments/reactNative.ts | 2 +- .../platforms/fragments/templateAndroid.ts | 6 +- .../fragments/templateAndroidBase.ts | 2 +- .../platforms/fragments/templateXcode.ts | 6 +- .../platforms/fragments/templateXcodeBase.ts | 2 +- .../src/schema/platforms/fragments/tizen.ts | 2 +- .../src/schema/platforms/fragments/web.ts | 2 +- .../src/schema/platforms/fragments/webos.ts | 2 +- .../src/schema/platforms/fragments/webpack.ts | 2 +- .../src/schema/platforms/fragments/windows.ts | 2 +- packages/core/src/schema/platforms/index.ts | 64 +++++++++---------- packages/core/src/schema/platforms/ios.ts | 20 +++--- packages/core/src/schema/platforms/macos.ts | 24 +++---- packages/core/src/schema/platforms/tizen.ts | 20 +++--- packages/core/src/schema/platforms/web.ts | 20 +++--- packages/core/src/schema/platforms/webos.ts | 20 +++--- packages/core/src/schema/platforms/windows.ts | 20 +++--- .../core/src/schema/plugins/fragments/base.ts | 2 +- .../plugins/fragments/platformAndroid.ts | 6 +- .../schema/plugins/fragments/platformBase.ts | 2 +- .../schema/plugins/fragments/platformIos.ts | 6 +- packages/core/src/schema/plugins/index.ts | 26 ++++---- packages/core/src/schema/shared/index.ts | 4 +- packages/core/src/schema/types.ts | 21 ++++++ 34 files changed, 203 insertions(+), 176 deletions(-) diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index 0a8a0036b6..611855963f 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -import { BuildSchemeFragment, BundleId, Ext, HexColor, Runtime } from '../shared'; -import { PlatformBaseFragment } from '../platforms/fragments/base'; +import { zodBuildSchemeFragment, BundleId, Ext, HexColor, Runtime, RnvBuildSchemeFragment } from '../shared'; +import { zodPlatformBaseFragment } from '../platforms/fragments/base'; // DEPRECATED? export const SplashScreen = z.boolean().describe('Enable or disable splash screen'); @@ -130,7 +130,7 @@ IN: 1.0.23 OUT: 100230000 //LEVEl 1 -export const CommonSchemaFragment = z.object({ +export const zodCommonSchemaFragment = z.object({ includedPermissions: z.optional(IncludedPermissions), excludedPermissions: z.optional(ExcludedPermissions), id: z.optional(BundleId), @@ -154,23 +154,27 @@ export const CommonSchemaFragment = z.object({ runtime: z.optional(Runtime), custom: z.optional(Ext), }); -export type RnvConfigCommonFragment = z.infer; - -export const CommonSchema: any = CommonSchemaFragment.merge( - z.object({ - buildSchemes: z.optional( - z.record( - z.string(), - CommonSchemaFragment.merge( - BuildSchemeFragment.merge( - z.object({ - ...PlatformBaseFragment, - }) +export type RnvCommonSchemaFragment = z.infer; + +export const zodCommonSchema: any = zodCommonSchemaFragment + .merge( + z.object({ + buildSchemes: z.optional( + z.record( + z.string(), + zodCommonSchemaFragment.merge( + zodBuildSchemeFragment.merge( + z.object({ + ...zodPlatformBaseFragment, + }) + ) ) ) - ) - ), - }) -).describe('Common config props used as default props for all available buildSchemes'); - -export type _CommonSchemaType = z.infer; + ), + }) + ) + .describe('Common config props used as default props for all available buildSchemes'); + +export type _CommonSchemaType = RnvCommonSchemaFragment & { + buildSchemes?: Record; +}; diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index 2cf3be13d0..2bc20dcc82 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -1,5 +1,5 @@ import { AnyZodObject, z } from 'zod'; -import { CommonSchema } from '../common'; +import { zodCommonSchema } from '../common'; import { Ext, ExtendTemplate } from '../shared'; import { PlatformsSchema } from '../platforms'; import { PluginsSchema } from '../plugins'; @@ -18,7 +18,7 @@ const Hidden = z //LEVEl 0 (ROOT) -const RootAppBaseFragment = { +const zodRootAppBaseFragment = { id: z.optional(Id), custom: z.optional(Ext), hidden: z.optional(Hidden), @@ -26,8 +26,8 @@ const RootAppBaseFragment = { extend: z.optional(Extend), // TODO: rename to "extendsAppConfigID" }; -const RootAppBaseSchema = z.object(RootAppBaseFragment); -const RootAppCommonSchema = z.object({ common: z.optional(CommonSchema) }); +const RootAppBaseSchema = z.object(zodRootAppBaseFragment); +const RootAppCommonSchema = z.object({ common: z.optional(zodCommonSchema) }); const RootAppPlatformsSchema = z.object({ platforms: z.optional(PlatformsSchema) }); const RootAppPluginsSchema = z.object({ plugins: z.optional(PluginsSchema) }); diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 3711ca3a63..1d2af23b1e 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -1,5 +1,5 @@ import { AnyZodObject, z } from 'zod'; -import { CommonSchema } from '../common'; +import { zodCommonSchema } from '../common'; import { Ext, ExtendTemplate, PlatformsKeys, Runtime, SupportedPlatforms, TemplateConfig } from '../shared'; import { PlatformsSchema } from '../platforms'; import { PluginsSchema } from '../plugins'; @@ -182,7 +182,7 @@ const Paths = z //LEVEl 0 (ROOT) -const RootProjectBaseFragment = { +const zodRootProjectBaseFragment = { workspaceID: WorkspaceID.optional(), projectVersion: z.string().optional(), // TODO: if undefined it should infer from package.json projectName: ProjectName.optional(), @@ -230,8 +230,8 @@ const RootProjectBaseFragment = { // excludedPaths: z.optional(z.array(z.string())), // }); -const RootProjectBaseSchema = z.object(RootProjectBaseFragment); -const RootProjectCommonSchema = z.object({ common: z.optional(CommonSchema) }); +const RootProjectBaseSchema = z.object(zodRootProjectBaseFragment); +const RootProjectCommonSchema = z.object({ common: z.optional(zodCommonSchema) }); const RootProjectPlatformsSchema = z.object({ platforms: z.optional(PlatformsSchema) }); const RootProjectPluginsSchema = z.object({ plugins: z.optional(PluginsSchema) }); diff --git a/packages/core/src/schema/platforms/android.ts b/packages/core/src/schema/platforms/android.ts index ab3cdc588b..40e496e08c 100644 --- a/packages/core/src/schema/platforms/android.ts +++ b/packages/core/src/schema/platforms/android.ts @@ -1,15 +1,15 @@ import { z } from 'zod'; -import { CommonSchemaFragment } from '../common'; -import { PlatformBaseFragment } from './fragments/base'; -import { PlatformAndroidFragment } from './fragments/android'; -import { TemplateAndroidFragment } from './fragments/templateAndroid'; -import { PlatformReactNativeFragment } from './fragments/reactNative'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodPlatformAndroidFragment } from './fragments/android'; +import { zodTemplateAndroidFragment } from './fragments/templateAndroid'; +import { zodPlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformAndroidSchema = CommonSchemaFragment.merge( +export const PlatformAndroidSchema = zodCommonSchemaFragment.merge( z.object({ - ...PlatformBaseFragment, - ...PlatformAndroidFragment, - ...PlatformReactNativeFragment, - ...TemplateAndroidFragment, + ...zodPlatformBaseFragment, + ...zodPlatformAndroidFragment, + ...zodPlatformReactNativeFragment, + ...zodTemplateAndroidFragment, }) ); diff --git a/packages/core/src/schema/platforms/fragments/android.ts b/packages/core/src/schema/platforms/fragments/android.ts index 825219105e..d72ff3afce 100644 --- a/packages/core/src/schema/platforms/fragments/android.ts +++ b/packages/core/src/schema/platforms/fragments/android.ts @@ -4,7 +4,7 @@ import { DEFAULTS } from '../../defaults'; const EnableAndroidX = z.union([z.boolean(), z.string()]).default(true).describe('Enables new android X architecture'); const EnableJetifier = z.union([z.boolean(), z.string()]).default(true).describe('Enables Jetifier'); -export const PlatformAndroidFragment = { +export const zodPlatformAndroidFragment = { enableAndroidX: z.optional(EnableAndroidX), enableJetifier: z.optional(EnableJetifier), signingConfig: z.optional( diff --git a/packages/core/src/schema/platforms/fragments/base.ts b/packages/core/src/schema/platforms/fragments/base.ts index fe404b6973..9916df009d 100644 --- a/packages/core/src/schema/platforms/fragments/base.ts +++ b/packages/core/src/schema/platforms/fragments/base.ts @@ -28,7 +28,7 @@ export const AssetFolderPlatform = z 'Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets' ); -export const PlatformBaseFragment = { +export const zodPlatformBaseFragment = { extendPlatform: z.optional(PlatformsKeys), assetFolderPlatform: z.optional(AssetFolderPlatform), engine: z.optional(PlatformEngine), @@ -39,3 +39,5 @@ export const PlatformBaseFragment = { bundleIsDev: z.optional(BundleIsDev), getJsBundleFile: z.string().optional(), }; +const _zodPlatformBaseFragment = z.object(zodPlatformBaseFragment); +export type RnvCommonSchemaFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/electron.ts b/packages/core/src/schema/platforms/fragments/electron.ts index 405cfc64a4..97128a6251 100644 --- a/packages/core/src/schema/platforms/fragments/electron.ts +++ b/packages/core/src/schema/platforms/fragments/electron.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const PlatformElectronFragment = { +export const zodPlatformElectronFragment = { electronConfig: z .any() .optional() diff --git a/packages/core/src/schema/platforms/fragments/ios.ts b/packages/core/src/schema/platforms/fragments/ios.ts index 683d4358ef..347c622d93 100644 --- a/packages/core/src/schema/platforms/fragments/ios.ts +++ b/packages/core/src/schema/platforms/fragments/ios.ts @@ -34,7 +34,7 @@ const TeamID = z.string().describe('Apple teamID'); const SystemCapabilities = z.record(z.string(), z.boolean()); const provisioningProfiles = z.record(z.string()); -export const PlatformiOSFragment = { +export const zodPlatformiOSFragment = { ignoreWarnings: z.optional(IgnoreWarnings), ignoreLogs: z.optional(IgnoreLogs), deploymentTarget: z.optional(DeploymentTarget), diff --git a/packages/core/src/schema/platforms/fragments/lightning.ts b/packages/core/src/schema/platforms/fragments/lightning.ts index 889c2cb6fb..ee305f5d1c 100644 --- a/packages/core/src/schema/platforms/fragments/lightning.ts +++ b/packages/core/src/schema/platforms/fragments/lightning.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -export const PlatformLightningFragment = { +export const zodPlatformLightningFragment = { target: z.string().optional(), }; diff --git a/packages/core/src/schema/platforms/fragments/nextjs.ts b/packages/core/src/schema/platforms/fragments/nextjs.ts index 85e0856b4a..b86f49e9a0 100644 --- a/packages/core/src/schema/platforms/fragments/nextjs.ts +++ b/packages/core/src/schema/platforms/fragments/nextjs.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const PlatformNextJsFragment = { +export const zodPlatformNextJsFragment = { pagesDir: z.string().describe('Custom pages directory used by nextjs. Use relative paths').optional(), outputDir: z .string() diff --git a/packages/core/src/schema/platforms/fragments/reactNative.ts b/packages/core/src/schema/platforms/fragments/reactNative.ts index acde4cc960..7951fc454f 100644 --- a/packages/core/src/schema/platforms/fragments/reactNative.ts +++ b/packages/core/src/schema/platforms/fragments/reactNative.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const PlatformReactNativeFragment = { +export const zodPlatformReactNativeFragment = { reactNativeEngine: z.optional( z .enum(['jsc', 'v8-android', 'v8-android-nointl', 'v8-android-jit', 'v8-android-jit-nointl', 'hermes']) diff --git a/packages/core/src/schema/platforms/fragments/templateAndroid.ts b/packages/core/src/schema/platforms/fragments/templateAndroid.ts index c08e070a24..fea2e2461b 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroid.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroid.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -import { TemplateAndroidBaseFragment } from './templateAndroidBase'; +import { zodTemplateAndroidBaseFragment } from './templateAndroidBase'; -export const TemplateAndroidFragment = { +export const zodTemplateAndroidFragment = { templateAndroid: z.optional( z.object({ - ...TemplateAndroidBaseFragment, + ...zodTemplateAndroidBaseFragment, settings_gradle: z.optional(z.object({})), gradle_wrapper_properties: z.optional(z.object({})), SplashActivity_java: z.optional(z.object({})), diff --git a/packages/core/src/schema/platforms/fragments/templateAndroidBase.ts b/packages/core/src/schema/platforms/fragments/templateAndroidBase.ts index 9484a4e0e9..a6ead071c9 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroidBase.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroidBase.ts @@ -73,7 +73,7 @@ Injects / Overrides values in AndroidManifest.xml file of generated android base // }); -export const TemplateAndroidBaseFragment = { +export const zodTemplateAndroidBaseFragment = { gradle_properties: z.optional(GradleProperties), build_gradle: z.optional(BuildGradle), app_build_gradle: z.optional(AppBuildGradle), diff --git a/packages/core/src/schema/platforms/fragments/templateXcode.ts b/packages/core/src/schema/platforms/fragments/templateXcode.ts index d7894d2e86..224bba9dc4 100644 --- a/packages/core/src/schema/platforms/fragments/templateXcode.ts +++ b/packages/core/src/schema/platforms/fragments/templateXcode.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -import { TemplateXcodeBaseFragment } from './templateXcodeBase'; +import { zodTemplateXcodeBaseFragment } from './templateXcodeBase'; -export const TemplateXcodeFragment = { +export const zodTemplateXcodeFragment = { templateXcode: z.optional( z.object({ - ...TemplateXcodeBaseFragment, + ...zodTemplateXcodeBaseFragment, }) ), }; diff --git a/packages/core/src/schema/platforms/fragments/templateXcodeBase.ts b/packages/core/src/schema/platforms/fragments/templateXcodeBase.ts index 728a738ca7..0a3da7cdb8 100644 --- a/packages/core/src/schema/platforms/fragments/templateXcodeBase.ts +++ b/packages/core/src/schema/platforms/fragments/templateXcodeBase.ts @@ -77,7 +77,7 @@ const AppDelegateH = z.object({ const InfoPlist = z.object({}); -export const TemplateXcodeBaseFragment = { +export const zodTemplateXcodeBaseFragment = { Podfile: z.optional(Podfile), project_pbxproj: z.optional(XcodeProj), AppDelegate_mm: z.optional(AppDelegateMm), diff --git a/packages/core/src/schema/platforms/fragments/tizen.ts b/packages/core/src/schema/platforms/fragments/tizen.ts index 2e66601b0a..4fd30514e1 100644 --- a/packages/core/src/schema/platforms/fragments/tizen.ts +++ b/packages/core/src/schema/platforms/fragments/tizen.ts @@ -4,7 +4,7 @@ const AppName = z.string(); const CertificateProfile = z.string(); -export const PlatformTizenFragment = { +export const zodPlatformTizenFragment = { package: z.optional(z.string()), certificateProfile: z.optional(CertificateProfile), appName: z.optional(AppName), diff --git a/packages/core/src/schema/platforms/fragments/web.ts b/packages/core/src/schema/platforms/fragments/web.ts index f53068adb8..398db70887 100644 --- a/packages/core/src/schema/platforms/fragments/web.ts +++ b/packages/core/src/schema/platforms/fragments/web.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const PlatformWebFragment = { +export const zodPlatformWebFragment = { timestampBuildFiles: z.array(z.string()).optional(), devServerHost: z.string().optional(), environment: z.string().optional(), diff --git a/packages/core/src/schema/platforms/fragments/webos.ts b/packages/core/src/schema/platforms/fragments/webos.ts index 3ba0183911..3e5f5667c7 100644 --- a/packages/core/src/schema/platforms/fragments/webos.ts +++ b/packages/core/src/schema/platforms/fragments/webos.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -export const PlatformWebOSFragment = { +export const zodPlatformWebOSFragment = { iconColor: z.string().optional(), }; diff --git a/packages/core/src/schema/platforms/fragments/webpack.ts b/packages/core/src/schema/platforms/fragments/webpack.ts index 1bc5ab1d34..9608f10575 100644 --- a/packages/core/src/schema/platforms/fragments/webpack.ts +++ b/packages/core/src/schema/platforms/fragments/webpack.ts @@ -5,7 +5,7 @@ const WebpackConfig = z.object({ customScripts: z.array(z.string()).optional().describe('Allows you to inject custom script into html header'), }); -export const PlatformWebpackFragment = { +export const zodPlatformWebpackFragment = { webpackConfig: z.optional(WebpackConfig), // webpackConfig: { diff --git a/packages/core/src/schema/platforms/fragments/windows.ts b/packages/core/src/schema/platforms/fragments/windows.ts index d79a605460..12bb3b8158 100644 --- a/packages/core/src/schema/platforms/fragments/windows.ts +++ b/packages/core/src/schema/platforms/fragments/windows.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const PlatformWindowsFragment = { +export const zodPlatformWindowsFragment = { templateVSProject: z.optional( z.object({ language: z.string().describe('Specify generated project language: cpp for C++ or cs for C#').optional(), diff --git a/packages/core/src/schema/platforms/index.ts b/packages/core/src/schema/platforms/index.ts index fae3d9b5ed..dfebb8f6b6 100644 --- a/packages/core/src/schema/platforms/index.ts +++ b/packages/core/src/schema/platforms/index.ts @@ -1,48 +1,48 @@ import { z } from 'zod'; import { PlatformAndroidSchema } from './android'; import { PlatformiOSSchema } from './ios'; -import { PlatformElectronFragment } from './fragments/electron'; +import { zodPlatformElectronFragment } from './fragments/electron'; import { PlatformWindowsSchema } from './windows'; -import { PlatformWebpackFragment } from './fragments/webpack'; -import { PlatformNextJsFragment } from './fragments/nextjs'; -import { PlatformLightningFragment } from './fragments/lightning'; -import { PlatformReactNativeFragment } from './fragments/reactNative'; -import { PlatformBaseFragment } from './fragments/base'; +import { zodPlatformWebpackFragment } from './fragments/webpack'; +import { zodPlatformNextJsFragment } from './fragments/nextjs'; +import { zodPlatformLightningFragment } from './fragments/lightning'; +import { zodPlatformReactNativeFragment } from './fragments/reactNative'; +import { zodPlatformBaseFragment } from './fragments/base'; import { PlatformMacosSchema } from './macos'; import { PlatformWebSchema } from './web'; import { PlatformTizenSchema } from './tizen'; import { PlatformWebosSchema } from './webos'; -import { CommonSchemaFragment } from '../common'; -import { PlatformWebOSFragment } from './fragments/webos'; -import { PlatformWindowsFragment } from './fragments/windows'; -import { PlatformTizenFragment } from './fragments/tizen'; -import { PlatformWebFragment } from './fragments/web'; -import { PlatformAndroidFragment } from './fragments/android'; -import { PlatformiOSFragment } from './fragments/ios'; -import { TemplateAndroidFragment } from './fragments/templateAndroid'; -import { TemplateXcodeFragment } from './fragments/templateXcode'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformWebOSFragment } from './fragments/webos'; +import { zodPlatformWindowsFragment } from './fragments/windows'; +import { zodPlatformTizenFragment } from './fragments/tizen'; +import { zodPlatformWebFragment } from './fragments/web'; +import { zodPlatformAndroidFragment } from './fragments/android'; +import { zodPlatformiOSFragment } from './fragments/ios'; +import { zodTemplateAndroidFragment } from './fragments/templateAndroid'; +import { zodTemplateXcodeFragment } from './fragments/templateXcode'; -const MergedPlatformPlainObject = CommonSchemaFragment.merge( - CommonSchemaFragment.merge( +const MergedPlatformPlainObject = zodCommonSchemaFragment.merge( + zodCommonSchemaFragment.merge( z.object({ //BASE - ...PlatformBaseFragment, + ...zodPlatformBaseFragment, //PLATFORMS - ...PlatformiOSFragment, - ...PlatformAndroidFragment, - ...PlatformWebFragment, - ...PlatformTizenFragment, - ...PlatformWindowsFragment, - ...PlatformWebOSFragment, + ...zodPlatformiOSFragment, + ...zodPlatformAndroidFragment, + ...zodPlatformWebFragment, + ...zodPlatformTizenFragment, + ...zodPlatformWindowsFragment, + ...zodPlatformWebOSFragment, //ENGINES - ...PlatformLightningFragment, - ...PlatformReactNativeFragment, - ...PlatformWebpackFragment, - ...PlatformElectronFragment, - ...PlatformNextJsFragment, - ...TemplateAndroidFragment, - ...TemplateXcodeFragment, - ...PlatformLightningFragment, + ...zodPlatformLightningFragment, + ...zodPlatformReactNativeFragment, + ...zodPlatformWebpackFragment, + ...zodPlatformElectronFragment, + ...zodPlatformNextJsFragment, + ...zodTemplateAndroidFragment, + ...zodTemplateXcodeFragment, + ...zodPlatformLightningFragment, }) ) ); diff --git a/packages/core/src/schema/platforms/ios.ts b/packages/core/src/schema/platforms/ios.ts index b6902cef9f..5650c37d1d 100644 --- a/packages/core/src/schema/platforms/ios.ts +++ b/packages/core/src/schema/platforms/ios.ts @@ -1,15 +1,15 @@ import { z } from 'zod'; -import { PlatformBaseFragment } from './fragments/base'; -import { PlatformiOSFragment } from './fragments/ios'; -import { CommonSchemaFragment } from '../common'; -import { TemplateXcodeFragment } from './fragments/templateXcode'; -import { PlatformReactNativeFragment } from './fragments/reactNative'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodPlatformiOSFragment } from './fragments/ios'; +import { zodCommonSchemaFragment } from '../common'; +import { zodTemplateXcodeFragment } from './fragments/templateXcode'; +import { zodPlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformiOSSchema = CommonSchemaFragment.merge( +export const PlatformiOSSchema = zodCommonSchemaFragment.merge( z.object({ - ...PlatformBaseFragment, - ...PlatformiOSFragment, - ...PlatformReactNativeFragment, - ...TemplateXcodeFragment, + ...zodPlatformBaseFragment, + ...zodPlatformiOSFragment, + ...zodPlatformReactNativeFragment, + ...zodTemplateXcodeFragment, }) ); diff --git a/packages/core/src/schema/platforms/macos.ts b/packages/core/src/schema/platforms/macos.ts index 0930993b75..8bc162067e 100644 --- a/packages/core/src/schema/platforms/macos.ts +++ b/packages/core/src/schema/platforms/macos.ts @@ -1,17 +1,17 @@ import { z } from 'zod'; -import { PlatformBaseFragment } from './fragments/base'; -import { CommonSchemaFragment } from '../common'; -import { PlatformiOSFragment } from './fragments/ios'; -import { PlatformElectronFragment } from './fragments/electron'; -import { TemplateXcodeFragment } from './fragments/templateXcode'; -import { PlatformReactNativeFragment } from './fragments/reactNative'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformiOSFragment } from './fragments/ios'; +import { zodPlatformElectronFragment } from './fragments/electron'; +import { zodTemplateXcodeFragment } from './fragments/templateXcode'; +import { zodPlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformMacosSchema = CommonSchemaFragment.merge( +export const PlatformMacosSchema = zodCommonSchemaFragment.merge( z.object({ - ...PlatformBaseFragment, - ...PlatformiOSFragment, - ...PlatformReactNativeFragment, - ...TemplateXcodeFragment, - ...PlatformElectronFragment, + ...zodPlatformBaseFragment, + ...zodPlatformiOSFragment, + ...zodPlatformReactNativeFragment, + ...zodTemplateXcodeFragment, + ...zodPlatformElectronFragment, }) ); diff --git a/packages/core/src/schema/platforms/tizen.ts b/packages/core/src/schema/platforms/tizen.ts index cc2b61c562..47ba9658bd 100644 --- a/packages/core/src/schema/platforms/tizen.ts +++ b/packages/core/src/schema/platforms/tizen.ts @@ -1,15 +1,15 @@ import { z } from 'zod'; -import { PlatformBaseFragment } from './fragments/base'; -import { PlatformTizenFragment } from './fragments/tizen'; -import { CommonSchemaFragment } from '../common'; -import { PlatformWebpackFragment } from './fragments/webpack'; -import { PlatformWebFragment } from './fragments/web'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodPlatformTizenFragment } from './fragments/tizen'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformWebpackFragment } from './fragments/webpack'; +import { zodPlatformWebFragment } from './fragments/web'; -export const PlatformTizenSchema = CommonSchemaFragment.merge( +export const PlatformTizenSchema = zodCommonSchemaFragment.merge( z.object({ - ...PlatformBaseFragment, - ...PlatformTizenFragment, - ...PlatformWebFragment, - ...PlatformWebpackFragment, + ...zodPlatformBaseFragment, + ...zodPlatformTizenFragment, + ...zodPlatformWebFragment, + ...zodPlatformWebpackFragment, }) ); diff --git a/packages/core/src/schema/platforms/web.ts b/packages/core/src/schema/platforms/web.ts index 376eb6d1e2..05be77cfbc 100644 --- a/packages/core/src/schema/platforms/web.ts +++ b/packages/core/src/schema/platforms/web.ts @@ -1,15 +1,15 @@ import { z } from 'zod'; -import { PlatformBaseFragment } from './fragments/base'; -import { PlatformWebpackFragment } from './fragments/webpack'; -import { CommonSchemaFragment } from '../common'; -import { PlatformWebFragment } from './fragments/web'; -import { PlatformNextJsFragment } from './fragments/nextjs'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodPlatformWebpackFragment } from './fragments/webpack'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformWebFragment } from './fragments/web'; +import { zodPlatformNextJsFragment } from './fragments/nextjs'; -export const PlatformWebSchema = CommonSchemaFragment.merge( +export const PlatformWebSchema = zodCommonSchemaFragment.merge( z.object({ - ...PlatformBaseFragment, - ...PlatformWebpackFragment, - ...PlatformNextJsFragment, - ...PlatformWebFragment, + ...zodPlatformBaseFragment, + ...zodPlatformWebpackFragment, + ...zodPlatformNextJsFragment, + ...zodPlatformWebFragment, }) ); diff --git a/packages/core/src/schema/platforms/webos.ts b/packages/core/src/schema/platforms/webos.ts index d9e459467f..d08b2e511c 100644 --- a/packages/core/src/schema/platforms/webos.ts +++ b/packages/core/src/schema/platforms/webos.ts @@ -1,15 +1,15 @@ import { z } from 'zod'; -import { PlatformBaseFragment } from './fragments/base'; -import { CommonSchemaFragment } from '../common'; -import { PlatformWebpackFragment } from './fragments/webpack'; -import { PlatformWebFragment } from './fragments/web'; -import { PlatformWebOSFragment } from './fragments/webos'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformWebpackFragment } from './fragments/webpack'; +import { zodPlatformWebFragment } from './fragments/web'; +import { zodPlatformWebOSFragment } from './fragments/webos'; -export const PlatformWebosSchema = CommonSchemaFragment.merge( +export const PlatformWebosSchema = zodCommonSchemaFragment.merge( z.object({ - ...PlatformBaseFragment, - ...PlatformWebFragment, - ...PlatformWebpackFragment, - ...PlatformWebOSFragment, + ...zodPlatformBaseFragment, + ...zodPlatformWebFragment, + ...zodPlatformWebpackFragment, + ...zodPlatformWebOSFragment, }) ); diff --git a/packages/core/src/schema/platforms/windows.ts b/packages/core/src/schema/platforms/windows.ts index 9d709e0348..c6b5065116 100644 --- a/packages/core/src/schema/platforms/windows.ts +++ b/packages/core/src/schema/platforms/windows.ts @@ -1,15 +1,15 @@ import { z } from 'zod'; -import { PlatformBaseFragment } from './fragments/base'; -import { CommonSchemaFragment } from '../common'; -import { PlatformElectronFragment } from './fragments/electron'; -import { PlatformWindowsFragment } from './fragments/windows'; -import { PlatformReactNativeFragment } from './fragments/reactNative'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformElectronFragment } from './fragments/electron'; +import { zodPlatformWindowsFragment } from './fragments/windows'; +import { zodPlatformReactNativeFragment } from './fragments/reactNative'; -export const PlatformWindowsSchema = CommonSchemaFragment.merge( +export const PlatformWindowsSchema = zodCommonSchemaFragment.merge( z.object({ - ...PlatformBaseFragment, - ...PlatformElectronFragment, - ...PlatformReactNativeFragment, - ...PlatformWindowsFragment, + ...zodPlatformBaseFragment, + ...zodPlatformElectronFragment, + ...zodPlatformReactNativeFragment, + ...zodPlatformWindowsFragment, }) ); diff --git a/packages/core/src/schema/plugins/fragments/base.ts b/packages/core/src/schema/plugins/fragments/base.ts index 9eaa027969..0ad0156e48 100644 --- a/packages/core/src/schema/plugins/fragments/base.ts +++ b/packages/core/src/schema/plugins/fragments/base.ts @@ -50,7 +50,7 @@ const Deprecated = z const DisablePluginTemplateOverrides = z.boolean().describe('Disables plugin overrides for selected plugin'); -export const PluginBaseFragment = { +export const zodPluginBaseFragment = { supportedPlatforms: SupportedPlatforms.optional(), disabled: z.optional(Disabled), props: z.optional(Props), diff --git a/packages/core/src/schema/plugins/fragments/platformAndroid.ts b/packages/core/src/schema/plugins/fragments/platformAndroid.ts index e2d50fd540..4b18bcc189 100644 --- a/packages/core/src/schema/plugins/fragments/platformAndroid.ts +++ b/packages/core/src/schema/plugins/fragments/platformAndroid.ts @@ -1,11 +1,11 @@ import { z } from 'zod'; -import { TemplateAndroidBaseFragment } from '../../platforms/fragments/templateAndroidBase'; +import { zodTemplateAndroidBaseFragment } from '../../platforms/fragments/templateAndroidBase'; -export const PluginPlatformAndroidFragment = { +export const zodPluginPlatformAndroidFragment = { projectName: z.optional(z.string()), skipLinking: z.optional(z.boolean()), skipImplementation: z.optional(z.boolean()), implementation: z.optional(z.string()), package: z.optional(z.string()), - templateAndroid: z.optional(z.object(TemplateAndroidBaseFragment)), + templateAndroid: z.optional(z.object(zodTemplateAndroidBaseFragment)), }; diff --git a/packages/core/src/schema/plugins/fragments/platformBase.ts b/packages/core/src/schema/plugins/fragments/platformBase.ts index efde50d2e8..dd32d0f7ee 100644 --- a/packages/core/src/schema/plugins/fragments/platformBase.ts +++ b/packages/core/src/schema/plugins/fragments/platformBase.ts @@ -14,7 +14,7 @@ const Path = z 'Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used.' ); -export const PluginPlatformBaseFragment = { +export const zodPluginPlatformBaseFragment = { disabled: z.optional(Disabled), forceLinking: z.optional(ForceLinking), path: z.optional(Path), diff --git a/packages/core/src/schema/plugins/fragments/platformIos.ts b/packages/core/src/schema/plugins/fragments/platformIos.ts index bbdaeb4c83..9cbd882197 100644 --- a/packages/core/src/schema/plugins/fragments/platformIos.ts +++ b/packages/core/src/schema/plugins/fragments/platformIos.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { TemplateXcodeBaseFragment } from '../../platforms/fragments/templateXcodeBase'; +import { zodTemplateXcodeBaseFragment } from '../../platforms/fragments/templateXcodeBase'; const Git = z.string().describe('Alternative git url for pod instead of version'); @@ -9,14 +9,14 @@ const Version = z.string().describe('Version of pod'); const BuildType = z.enum(['dynamic', 'static']).describe('Build type of the pod'); -export const PluginPlatformiOSFragment = { +export const zodPluginPlatformiOSFragment = { git: z.optional(Git), commit: z.optional(Commit), version: z.optional(Version), podNames: z.optional(z.array(z.string())), podName: z.optional(z.string()), staticFrameworks: z.optional(z.array(z.string())), - templateXcode: z.optional(z.object(TemplateXcodeBaseFragment)), + templateXcode: z.optional(z.object(zodTemplateXcodeBaseFragment)), isStatic: z.boolean().optional(), buildType: z.optional(BuildType), }; diff --git a/packages/core/src/schema/plugins/index.ts b/packages/core/src/schema/plugins/index.ts index 649d021794..c89213df9f 100644 --- a/packages/core/src/schema/plugins/index.ts +++ b/packages/core/src/schema/plugins/index.ts @@ -1,31 +1,31 @@ import { z } from 'zod'; -import { PluginPlatformAndroidFragment } from './fragments/platformAndroid'; -import { PluginPlatformiOSFragment } from './fragments/platformIos'; -import { PluginPlatformBaseFragment } from './fragments/platformBase'; -import { PluginBaseFragment } from './fragments/base'; +import { zodPluginPlatformAndroidFragment } from './fragments/platformAndroid'; +import { zodPluginPlatformiOSFragment } from './fragments/platformIos'; +import { zodPluginPlatformBaseFragment } from './fragments/platformBase'; +import { zodPluginBaseFragment } from './fragments/base'; const androidSchema = z .object({ - ...PluginPlatformBaseFragment, - ...PluginPlatformAndroidFragment, + ...zodPluginPlatformBaseFragment, + ...zodPluginPlatformAndroidFragment, }) .optional(); const iosSchema = z .object({ - ...PluginPlatformBaseFragment, - ...PluginPlatformiOSFragment, + ...zodPluginPlatformBaseFragment, + ...zodPluginPlatformiOSFragment, }) .optional(); const genericSchema = z .object({ - ...PluginPlatformBaseFragment, + ...zodPluginPlatformBaseFragment, }) .optional(); export const PluginSchema = z.object({ - ...PluginBaseFragment, + ...zodPluginBaseFragment, android: androidSchema, androidtv: androidSchema, androidwear: androidSchema, @@ -47,9 +47,9 @@ export const PluginSchema = z.object({ }); const PluginPlatformMergedSchema = z.object({ - ...PluginPlatformBaseFragment, - ...PluginPlatformiOSFragment, - ...PluginPlatformAndroidFragment, + ...zodPluginPlatformBaseFragment, + ...zodPluginPlatformiOSFragment, + ...zodPluginPlatformAndroidFragment, }); export type _PluginPlatformMergedSchemaType = z.infer; diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index dc87d9eb38..a98750781a 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -35,7 +35,7 @@ export const DefaultTargets = z export const BundleId = z.string().describe('Bundle ID of application. ie: com.example.myapp'); -export const BuildSchemeFragment = z.object({ +export const zodBuildSchemeFragment = z.object({ enabled: z.optional(z.boolean().describe('Defines whether build scheme shows up in options to run')), description: z.optional( z @@ -45,7 +45,7 @@ export const BuildSchemeFragment = z.object({ ) ), }); -export type RnvConfigBuildSchemeFragment = z.infer; +export type RnvBuildSchemeFragment = z.infer; export const NpmDep = z.record(z.string(), z.string()); diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 685555cc04..75cc296251 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -52,3 +52,24 @@ export type AndroidManifest = _AndroidManifestType; // console.log(plugin); // } // }; + +export type PlatformsMapSchema = { + android: T; + androidtv: T; + androidwear: T; + firetv: T; + ios: T; + tvos: T; + tizen: T; + tizenmobile: T; + tizenwatch: T; + webos: T; + web: T; + webtv: T; + chromecast: T; + kaios: T; + macos: T; + linux: T; + windows: T; + xbox: T; +}; From a2a2f4d225221136633f11aa4635f64f9c058796 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 31 Mar 2024 01:07:07 +0100 Subject: [PATCH 150/175] refactor schemas --- packages/core/src/configs/buildConfig.ts | 20 ++++---- packages/core/src/context/contextProps.ts | 11 +++-- packages/core/src/engines/index.ts | 22 +++++---- packages/core/src/schema/common/index.ts | 10 ++-- packages/core/src/schema/configFiles/app.ts | 8 ++-- .../src/schema/configFiles/buildConfig.ts | 20 ++++---- .../core/src/schema/configFiles/plugin.ts | 4 +- .../core/src/schema/configFiles/project.ts | 47 ++++++++----------- .../core/src/schema/configFiles/templates.ts | 4 +- packages/core/src/schema/configFiles/types.ts | 4 +- packages/core/src/schema/index.ts | 2 +- .../src/schema/platforms/fragments/base.ts | 2 +- packages/core/src/schema/platforms/index.ts | 20 +++++--- .../core/src/schema/plugins/fragments/base.ts | 3 ++ packages/core/src/schema/plugins/index.ts | 19 ++++---- packages/core/src/schema/shared/index.ts | 20 ++++---- packages/core/src/schema/types.ts | 10 ++-- packages/core/src/schema/validators.ts | 4 +- 18 files changed, 119 insertions(+), 111 deletions(-) diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 6b39f029db..89cc1be07d 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -154,16 +154,18 @@ export const generateBuildConfig = () => { c.buildConfig = sanitizeDynamicProps(c.buildConfig, propConfig); //Merge extendPlatform - const platforms = c.buildConfig.platforms || {}; - (Object.keys(platforms) as PlatformKey[]).forEach((k) => { - const plat = platforms[k]; - if (plat?.extendPlatform) { - const extPlat = platforms[plat?.extendPlatform]; - if (extPlat) { - platforms[k] = merge(extPlat, plat); + if (c.buildConfig.platforms) { + const platforms = c.buildConfig.platforms || {}; + (Object.keys(platforms) as PlatformKey[]).forEach((k) => { + const plat = platforms[k]; + if (plat?.extendPlatform) { + const extPlat = platforms[plat?.extendPlatform]; + if (extPlat) { + platforms[k] = merge(extPlat, plat); + } } - } - }); + }); + } logDebug('BUILD_CONFIG', Object.keys(c.buildConfig)); diff --git a/packages/core/src/context/contextProps.ts b/packages/core/src/context/contextProps.ts index c35bd1ca42..8497deba9d 100644 --- a/packages/core/src/context/contextProps.ts +++ b/packages/core/src/context/contextProps.ts @@ -3,7 +3,7 @@ import { RnvContext } from './types'; import { chalk, logError, logWarning } from '../logger'; import { ConfigFileBuildConfig } from '../schema'; import { ConfigProp, ConfigPropKey } from '../schema/types'; -import { BuildConfigPropKey, BuildSchemePropKey, CommonPropKey, PlatPropKey } from '../types'; +import { BuildConfigPropKey, BuildSchemePropKey, CommonPropKey } from '../types'; import { TimestampPathsConfig } from '../system/types'; import path from 'path'; import { fsExistsSync } from '../system/fs'; @@ -56,16 +56,17 @@ export const _getConfigProp = ( let scheme; if (platformObj && ps) { scheme = platformObj.buildSchemes?.[ps] || {}; - resultPlatforms = getFlavouredProp(platformObj, key as PlatPropKey); + resultPlatforms = getFlavouredProp(platformObj, key as any); } else { scheme = {}; } const resultScheme = key && scheme[key as BuildSchemePropKey]; const resultCommonRoot = getFlavouredProp(sourceObj.common || {}, key as CommonPropKey); - const resultCommonScheme = - c.runtime.scheme && - getFlavouredProp(sourceObj.common?.buildSchemes?.[c.runtime.scheme] || {}, key as BuildSchemePropKey); + + const bs = (c.runtime.scheme && sourceObj.common?.buildSchemes?.[c.runtime.scheme]) || {}; + + const resultCommonScheme = c.runtime.scheme && getFlavouredProp(bs, key as any); const resultCommon = resultCommonScheme || resultCommonRoot; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 8fc9d02a90..cacd8602ef 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -350,18 +350,20 @@ const _getFilteredEngines = (c: RnvContext) => { const ENGINE_ID_MAP = c.files.rnvConfigTemplates.config?.engineIdMap || {}; supportedPlatforms.forEach((v) => { - const platforms = c.files.project.config?.platforms || {}; - const engineKey = platforms[v]?.engine || rnvPlatforms?.[v]?.engine; - - if (engineKey) { - const engKey = ENGINE_ID_MAP[engineKey] || engineKey; - if (engines[engKey]) { - filteredEngines[engKey] = engines[engKey]; + if (c.files.project.config) { + const platforms = c.files.project.config?.platforms || {}; + const engineKey = platforms[v]?.engine || rnvPlatforms?.[v]?.engine; + + if (engineKey) { + const engKey = ENGINE_ID_MAP[engineKey] || engineKey; + if (engines[engKey]) { + filteredEngines[engKey] = engines[engKey]; + } else { + logWarning(`Platform ${v} requires engine ${engKey} which is not available in engines list`); + } } else { - logWarning(`Platform ${v} requires engine ${engKey} which is not available in engines list`); + logWarning(`Platform ${v} has no engine configured`); } - } else { - logWarning(`Platform ${v} has no engine configured`); } }); return filteredEngines; diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index 611855963f..b5bdfe1aa5 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -1,6 +1,6 @@ -import { z } from 'zod'; +import { AnyZodObject, z } from 'zod'; import { zodBuildSchemeFragment, BundleId, Ext, HexColor, Runtime, RnvBuildSchemeFragment } from '../shared'; -import { zodPlatformBaseFragment } from '../platforms/fragments/base'; +import { RnvPlatformBaseFragment, zodPlatformBaseFragment } from '../platforms/fragments/base'; // DEPRECATED? export const SplashScreen = z.boolean().describe('Enable or disable splash screen'); @@ -156,7 +156,7 @@ export const zodCommonSchemaFragment = z.object({ }); export type RnvCommonSchemaFragment = z.infer; -export const zodCommonSchema: any = zodCommonSchemaFragment +export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment .merge( z.object({ buildSchemes: z.optional( @@ -175,6 +175,6 @@ export const zodCommonSchema: any = zodCommonSchemaFragment ) .describe('Common config props used as default props for all available buildSchemes'); -export type _CommonSchemaType = RnvCommonSchemaFragment & { - buildSchemes?: Record; +export type RnvCommonSchema = RnvCommonSchemaFragment & { + buildSchemes?: Record; }; diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index 2bc20dcc82..23191be651 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -1,8 +1,8 @@ import { AnyZodObject, z } from 'zod'; import { zodCommonSchema } from '../common'; import { Ext, ExtendTemplate } from '../shared'; -import { PlatformsSchema } from '../platforms'; -import { PluginsSchema } from '../plugins'; +import { zodPlatformsSchema } from '../platforms'; +import { zodPluginsSchema } from '../plugins'; export const Extend = z.string().describe('extend another appConfig by id'); @@ -28,8 +28,8 @@ const zodRootAppBaseFragment = { const RootAppBaseSchema = z.object(zodRootAppBaseFragment); const RootAppCommonSchema = z.object({ common: z.optional(zodCommonSchema) }); -const RootAppPlatformsSchema = z.object({ platforms: z.optional(PlatformsSchema) }); -const RootAppPluginsSchema = z.object({ plugins: z.optional(PluginsSchema) }); +const RootAppPlatformsSchema = z.object({ platforms: z.optional(zodPlatformsSchema) }); +const RootAppPluginsSchema = z.object({ plugins: z.optional(zodPluginsSchema) }); // NOTE: Need to explictly type this to generic zod object to avoid TS error: // The inferred type of this node exceeds the maximum length the compiler will serialize... diff --git a/packages/core/src/schema/configFiles/buildConfig.ts b/packages/core/src/schema/configFiles/buildConfig.ts index f6311fa5fc..d527ada0a8 100644 --- a/packages/core/src/schema/configFiles/buildConfig.ts +++ b/packages/core/src/schema/configFiles/buildConfig.ts @@ -1,9 +1,9 @@ -import { _CommonSchemaType } from '../common'; -import { _PlatformsSchemaType } from '../platforms'; -import { _PluginType } from '../plugins'; +import { RnvCommonSchema } from '../common'; +import { RnvPlatformsSchema } from '../platforms'; +import { RnvPluginsSchema } from '../plugins'; import { _RootAppBaseSchemalType } from './app'; import { _RootLocalSchemaType } from './local'; -import { _RootProjectBaseSchemaType } from './project'; +import { RnvRootProjectBaseFragment } from './project'; import { _RootTemplatesSchemaType } from './templates'; import { _RootWorkspaceSchemaType } from './workspace'; @@ -17,18 +17,18 @@ type RootPluginsMerged = { }; type Common = { - common: _CommonSchemaType; + common: RnvCommonSchema; }; type PluginsMap = { - plugins: Record; + plugins: RnvPluginsSchema; }; type PlatformsMap = { - platforms: _PlatformsSchemaType; + platforms: RnvPlatformsSchema; }; -type _ConfigRootMerged = +export type ConfigFileBuildConfig = //Templates _RootTemplatesSchemaType & //Global @@ -36,11 +36,9 @@ type _ConfigRootMerged = //Plugins (multiple roots merged under scope object) RootPluginsMerged & //Project + App - Required<_RootProjectBaseSchemaType> & + Required & _RootLocalSchemaType & _RootAppBaseSchemalType & Common & PluginsMap & PlatformsMap; - -export type ConfigFileBuildConfig = _ConfigRootMerged; diff --git a/packages/core/src/schema/configFiles/plugin.ts b/packages/core/src/schema/configFiles/plugin.ts index 7cfcdc96c6..12774dd8e7 100644 --- a/packages/core/src/schema/configFiles/plugin.ts +++ b/packages/core/src/schema/configFiles/plugin.ts @@ -1,8 +1,8 @@ import { z } from 'zod'; import { Ext } from '../shared'; -import { PluginSchema } from '../plugins'; +import { zodPluginSchema } from '../plugins'; -export const RootPluginSchema = PluginSchema.extend({ +export const RootPluginSchema = zodPluginSchema.extend({ custom: z.optional(Ext), }); diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 1d2af23b1e..f9db564a83 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -1,8 +1,8 @@ import { AnyZodObject, z } from 'zod'; -import { zodCommonSchema } from '../common'; +import { RnvCommonSchema, zodCommonSchema } from '../common'; import { Ext, ExtendTemplate, PlatformsKeys, Runtime, SupportedPlatforms, TemplateConfig } from '../shared'; -import { PlatformsSchema } from '../platforms'; -import { PluginsSchema } from '../plugins'; +import { RnvPlatformsSchema, zodPlatformsSchema as zodPlatformsSchema } from '../platforms'; +import { RnvPluginsSchema, zodPluginsSchema } from '../plugins'; const DefaultCommandSchemes = z .record(z.enum(['run', 'export', 'build']), z.string()) @@ -182,7 +182,7 @@ const Paths = z //LEVEl 0 (ROOT) -const zodRootProjectBaseFragment = { +const zodRootProjectBaseFragment = z.object({ workspaceID: WorkspaceID.optional(), projectVersion: z.string().optional(), // TODO: if undefined it should infer from package.json projectName: ProjectName.optional(), @@ -200,7 +200,7 @@ const zodRootProjectBaseFragment = { integrations: z.optional(Integrations), // TODO: rename to mods env: z.optional(Env), runtime: z.optional(Runtime), - templateConfig: TemplateConfig.optional(), + templateConfig: TemplateConfig, _meta: z.optional( z.object({ requires_first_template_apply: z.optional(SupportedPlatforms), @@ -222,29 +222,22 @@ const zodRootProjectBaseFragment = { // isNew: z // templates: Templates.optional(), // currentTemplate: CurrentTemplate.optional(), -}; - -// const UseTemplate = z.object({ -// name: z.string(), -// version: z.string(), -// excludedPaths: z.optional(z.array(z.string())), -// }); - -const RootProjectBaseSchema = z.object(zodRootProjectBaseFragment); -const RootProjectCommonSchema = z.object({ common: z.optional(zodCommonSchema) }); -const RootProjectPlatformsSchema = z.object({ platforms: z.optional(PlatformsSchema) }); -const RootProjectPluginsSchema = z.object({ plugins: z.optional(PluginsSchema) }); +}); +export type RnvRootProjectBaseFragment = z.infer; // NOTE: Need to explictly type this to generic zod object to avoid TS error: // The inferred type of this node exceeds the maximum length the compiler will serialize... // This is ok we only use this full schema for runtime validations. actual types -export const RootProjectSchema: AnyZodObject = RootProjectBaseSchema.merge(RootProjectCommonSchema) - .merge(RootProjectPlatformsSchema) - .merge(RootProjectPluginsSchema); - -export type _RootProjectBaseSchemaType = z.infer; - -export type _RootProjectSchemaType = z.infer & - z.infer & - z.infer & - z.infer; +const zodRootProjectCommonSchema: AnyZodObject = z.object({ common: z.optional(zodCommonSchema) }); +const zodRootProjectPlatformsSchema: AnyZodObject = z.object({ platforms: z.optional(zodPlatformsSchema) }); +const zodRootProjectPluginsSchema: AnyZodObject = z.object({ plugins: z.optional(zodPluginsSchema) }); +export const zodRootProjectSchema: AnyZodObject = zodRootProjectBaseFragment + .merge(zodRootProjectCommonSchema) + .merge(zodRootProjectPlatformsSchema) + .merge(zodRootProjectPluginsSchema); + +export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { + common: RnvCommonSchema; + platforms: RnvPlatformsSchema; + plugins: RnvPluginsSchema; +}; diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index d1ba5d99c5..3cfa35824d 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -1,9 +1,9 @@ import { z } from 'zod'; import { PlatformsKeys, ProjectTemplates } from '../shared'; -import { PluginSchema } from '../plugins'; +import { zodPluginSchema } from '../plugins'; export const PluginTemplates = z - .record(z.string(), PluginSchema) + .record(z.string(), zodPluginSchema) .describe('Define all plugins available to be merged with project plugins'); export const DisableRnvDefaultOverrides = z diff --git a/packages/core/src/schema/configFiles/types.ts b/packages/core/src/schema/configFiles/types.ts index ceb0373a9f..7c3b45584d 100644 --- a/packages/core/src/schema/configFiles/types.ts +++ b/packages/core/src/schema/configFiles/types.ts @@ -5,7 +5,7 @@ import { _RootIntegrationSchemaType } from './integration'; import { _RootLocalSchemaType } from './local'; import { _RootPluginSchemaType } from './plugin'; import { _RootPrivateSchemaType } from './private'; -import { _RootProjectSchemaType } from './project'; +import { RnvRootProjectSchema } from './project'; import { _RootTemplateSchemaType } from './template'; import { _RootTemplatesSchemaType } from './templates'; import { _RootWorkspacesSchemaType } from './workspaces'; @@ -13,7 +13,7 @@ import { _RootRuntimeSchemaType } from './runtime'; import { _RootOverridesSchemaType } from './overrides'; // renative.json -export type ConfigFileProject = _RootProjectSchemaType; +export type ConfigFileProject = RnvRootProjectSchema; // appConfigs/**/renative.json export type ConfigFileApp = _RootAppSchemaType; diff --git a/packages/core/src/schema/index.ts b/packages/core/src/schema/index.ts index 8e9cd40947..ed49950e50 100644 --- a/packages/core/src/schema/index.ts +++ b/packages/core/src/schema/index.ts @@ -1,5 +1,5 @@ export { RootAppSchema } from './configFiles/app'; -export { RootProjectSchema } from './configFiles/project'; +export { zodRootProjectSchema as RootProjectSchema } from './configFiles/project'; export { RootEngineSchema } from './configFiles/engine'; export { RootWorkspaceSchema } from './configFiles/workspace'; export { RootLocalSchema } from './configFiles/local'; diff --git a/packages/core/src/schema/platforms/fragments/base.ts b/packages/core/src/schema/platforms/fragments/base.ts index 9916df009d..9e30bef827 100644 --- a/packages/core/src/schema/platforms/fragments/base.ts +++ b/packages/core/src/schema/platforms/fragments/base.ts @@ -40,4 +40,4 @@ export const zodPlatformBaseFragment = { getJsBundleFile: z.string().optional(), }; const _zodPlatformBaseFragment = z.object(zodPlatformBaseFragment); -export type RnvCommonSchemaFragment = z.infer; +export type RnvPlatformBaseFragment = z.infer; diff --git a/packages/core/src/schema/platforms/index.ts b/packages/core/src/schema/platforms/index.ts index dfebb8f6b6..21f263d66c 100644 --- a/packages/core/src/schema/platforms/index.ts +++ b/packages/core/src/schema/platforms/index.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { AnyZodObject, z } from 'zod'; import { PlatformAndroidSchema } from './android'; import { PlatformiOSSchema } from './ios'; import { zodPlatformElectronFragment } from './fragments/electron'; @@ -12,7 +12,7 @@ import { PlatformMacosSchema } from './macos'; import { PlatformWebSchema } from './web'; import { PlatformTizenSchema } from './tizen'; import { PlatformWebosSchema } from './webos'; -import { zodCommonSchemaFragment } from '../common'; +import { RnvCommonSchemaFragment, zodCommonSchemaFragment } from '../common'; import { zodPlatformWebOSFragment } from './fragments/webos'; import { zodPlatformWindowsFragment } from './fragments/windows'; import { zodPlatformTizenFragment } from './fragments/tizen'; @@ -21,8 +21,10 @@ import { zodPlatformAndroidFragment } from './fragments/android'; import { zodPlatformiOSFragment } from './fragments/ios'; import { zodTemplateAndroidFragment } from './fragments/templateAndroid'; import { zodTemplateXcodeFragment } from './fragments/templateXcode'; +import { RnvPlatformNameKey } from '../../enums/platformName'; +import { RnvBuildSchemeFragment } from '../shared'; -const MergedPlatformPlainObject = zodCommonSchemaFragment.merge( +const zodMergedPlatformPlainObject = zodCommonSchemaFragment.merge( zodCommonSchemaFragment.merge( z.object({ //BASE @@ -47,7 +49,7 @@ const MergedPlatformPlainObject = zodCommonSchemaFragment.merge( ) ); -export type _MergedPlatformObjectType = z.infer; +export type _MergedPlatformObjectType = z.infer; const desc = 'Allows to customize platforms configurations based on chosen build scheme `-s`'; @@ -75,7 +77,7 @@ const webosSchema = z .optional(PlatformWebosSchema.extend({ buildSchemes: z.record(z.string(), PlatformWebosSchema).optional() })) .describe(desc); -export const PlatformsSchema = z +export const zodPlatformsSchema: AnyZodObject = z .object({ android: androidSchema, androidtv: androidSchema, @@ -98,4 +100,10 @@ export const PlatformsSchema = z }) .describe('Object containing platform configurations'); -export type _PlatformsSchemaType = z.infer; +// export type RnvPlatformsSchema = z.infer; +export type RnvPlatformsSchema = Record< + RnvPlatformNameKey, + _MergedPlatformObjectType & { + buildSchemes?: Record; + } +>; diff --git a/packages/core/src/schema/plugins/fragments/base.ts b/packages/core/src/schema/plugins/fragments/base.ts index 0ad0156e48..9eb6f2b384 100644 --- a/packages/core/src/schema/plugins/fragments/base.ts +++ b/packages/core/src/schema/plugins/fragments/base.ts @@ -69,3 +69,6 @@ export const zodPluginBaseFragment = { // webpack: z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED // 'engine-rn-next': z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED }; +const _zodPluginBaseFragment = z.object(zodPluginBaseFragment); + +export type RnvPluginBaseFragment = z.infer; diff --git a/packages/core/src/schema/plugins/index.ts b/packages/core/src/schema/plugins/index.ts index c89213df9f..39dbc40fa7 100644 --- a/packages/core/src/schema/plugins/index.ts +++ b/packages/core/src/schema/plugins/index.ts @@ -1,8 +1,9 @@ -import { z } from 'zod'; +import { AnyZodObject, z } from 'zod'; import { zodPluginPlatformAndroidFragment } from './fragments/platformAndroid'; import { zodPluginPlatformiOSFragment } from './fragments/platformIos'; import { zodPluginPlatformBaseFragment } from './fragments/platformBase'; -import { zodPluginBaseFragment } from './fragments/base'; +import { RnvPluginBaseFragment, zodPluginBaseFragment } from './fragments/base'; +import { PlatformKey } from '../types'; const androidSchema = z .object({ @@ -24,7 +25,7 @@ const genericSchema = z }) .optional(); -export const PluginSchema = z.object({ +export const zodPluginSchema: AnyZodObject = z.object({ ...zodPluginBaseFragment, android: androidSchema, androidtv: androidSchema, @@ -46,18 +47,20 @@ export const PluginSchema = z.object({ xbox: genericSchema, }); -const PluginPlatformMergedSchema = z.object({ +// TODO: don't create new zod object. use native types +const zodPluginPlatformMergedSchema = z.object({ ...zodPluginPlatformBaseFragment, ...zodPluginPlatformiOSFragment, ...zodPluginPlatformAndroidFragment, }); -export type _PluginPlatformMergedSchemaType = z.infer; +export type RnvPluginSchema = RnvPluginBaseFragment & + Record>; -export type _PluginType = z.infer; +export type RnvPluginsSchema = Record; -export const PluginsSchema = z - .record(z.string(), z.union([PluginSchema, z.string()]).nullable()) +export const zodPluginsSchema = z + .record(z.string(), z.union([zodPluginSchema, z.string()]).nullable()) .describe( 'Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config' ); diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index a98750781a..fbc7e2ccbd 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -73,19 +73,17 @@ export const TemplateConfig = z $schema: z.string().optional(), extendsTemplate: z.string().optional(), }) - .passthrough() + .optional(), package_json: z.optional( - z - .object({ - dependencies: z.optional(NpmDep), - devDependencies: z.optional(NpmDep), - peerDependencies: z.optional(NpmDep), - optionalDependencies: z.optional(NpmDep), - name: z.string().optional(), - version: z.string().optional(), - }) - .passthrough() + z.object({ + dependencies: z.optional(NpmDep), + devDependencies: z.optional(NpmDep), + peerDependencies: z.optional(NpmDep), + optionalDependencies: z.optional(NpmDep), + name: z.string().optional(), + version: z.string().optional(), + }) ), }) .describe('Used in `renative.template.json` allows you to define template behaviour.'); diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 75cc296251..a841c905a9 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -1,9 +1,9 @@ -import type { _PluginPlatformMergedSchemaType } from './plugins'; +import type { RnvPluginSchema } from './plugins'; import type { _AppDelegateMethodType } from './platforms/fragments/templateXcodeBase'; import type { _MergedPlatformObjectType } from './platforms'; import type { _RootAppBaseSchemalType } from './configFiles/app'; -import type { _RootProjectBaseSchemaType } from './configFiles/project'; +import type { RnvRootProjectBaseFragment } from './configFiles/project'; import type { _AndroidManifestType, _ManifestChildWithChildrenType } from './platforms/fragments/templateAndroidBase'; import type { _MergedPlatformPrivateObjectType } from './configFiles/private'; import type { ConfigFileBuildConfig } from './configFiles/buildConfig'; @@ -13,7 +13,7 @@ import { type RnvPlatformNameKey } from '../enums/platformName'; // NORMALIZED (MERGED+NORMALIZED) //=============================== -export type ConfigProp = _RootProjectBaseSchemaType & +export type ConfigProp = RnvRootProjectBaseFragment & _RootAppBaseSchemalType & _MergedPlatformPrivateObjectType & _MergedPlatformObjectType; @@ -24,11 +24,11 @@ export type ConfigPropKey = keyof ConfigProp; // SUB-TYPES //=============================== -export type RenativeConfigPlugin = Exclude; +export type RenativeConfigPlugin = Partial>; export type RenativeConfigPaths = ConfigFileBuildConfig['paths']; -export type RenativeConfigPluginPlatform = _PluginPlatformMergedSchemaType; +export type RenativeConfigPluginPlatform = RnvPluginSchema[PlatformKey]; export type RenativeWebpackConfig = RenativeConfigPlugin['webpackConfig']; diff --git a/packages/core/src/schema/validators.ts b/packages/core/src/schema/validators.ts index 905570753b..d225f82d9e 100644 --- a/packages/core/src/schema/validators.ts +++ b/packages/core/src/schema/validators.ts @@ -1,5 +1,5 @@ -import { RootProjectSchema } from './configFiles/project'; +import { zodRootProjectSchema } from './configFiles/project'; export const validateRenativeProjectSchema = (inputJson: unknown) => { - return RootProjectSchema.safeParse(inputJson); + return zodRootProjectSchema.safeParse(inputJson); }; From becbda8e01d260da4dc7fb250f5fa112e9a004d0 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Sun, 31 Mar 2024 23:33:56 +0200 Subject: [PATCH 151/175] type fixes --- .../core/src/context/__tests__/index.test.ts | 1 + packages/core/src/context/contextProps.ts | 8 +- packages/core/src/platforms/index.ts | 6 +- packages/core/src/schema/common/index.ts | 4 +- .../core/src/schema/configFiles/project.ts | 88 ++++++++++--------- packages/core/src/schema/platforms/index.ts | 15 ++-- packages/core/src/schema/plugins/index.ts | 6 +- packages/core/src/schema/types.ts | 10 +-- packages/core/src/types.ts | 14 +-- .../src/tasks/project/taskProjectConfigure.ts | 1 - 10 files changed, 78 insertions(+), 75 deletions(-) diff --git a/packages/core/src/context/__tests__/index.test.ts b/packages/core/src/context/__tests__/index.test.ts index 321812127b..809f0be7b1 100644 --- a/packages/core/src/context/__tests__/index.test.ts +++ b/packages/core/src/context/__tests__/index.test.ts @@ -29,6 +29,7 @@ describe('Context tests', () => { 'cli', 'command', 'configPropsInjects', + 'engineConfigs', 'files', 'injectableConfigProps', 'isBuildHooksReady', diff --git a/packages/core/src/context/contextProps.ts b/packages/core/src/context/contextProps.ts index 8497deba9d..ea884fb090 100644 --- a/packages/core/src/context/contextProps.ts +++ b/packages/core/src/context/contextProps.ts @@ -3,7 +3,7 @@ import { RnvContext } from './types'; import { chalk, logError, logWarning } from '../logger'; import { ConfigFileBuildConfig } from '../schema'; import { ConfigProp, ConfigPropKey } from '../schema/types'; -import { BuildConfigPropKey, BuildSchemePropKey, CommonPropKey } from '../types'; +import { BuildConfigKey, PlatformBuildSchemeKey, CommonPropKey, CommonBuildSchemeKey } from '../types'; import { TimestampPathsConfig } from '../system/types'; import path from 'path'; import { fsExistsSync } from '../system/fs'; @@ -61,18 +61,18 @@ export const _getConfigProp = ( scheme = {}; } - const resultScheme = key && scheme[key as BuildSchemePropKey]; const resultCommonRoot = getFlavouredProp(sourceObj.common || {}, key as CommonPropKey); const bs = (c.runtime.scheme && sourceObj.common?.buildSchemes?.[c.runtime.scheme]) || {}; - const resultCommonScheme = c.runtime.scheme && getFlavouredProp(bs, key as any); + const resultCommonScheme = c.runtime.scheme && getFlavouredProp(bs, key as CommonBuildSchemeKey); const resultCommon = resultCommonScheme || resultCommonRoot; + const resultScheme = key && scheme[key as PlatformBuildSchemeKey]; let result = _getValueOrMergedObject(resultScheme, resultPlatforms, resultCommon); if (result === undefined) { - result = getFlavouredProp(sourceObj, key as BuildConfigPropKey); + result = getFlavouredProp(sourceObj, key as BuildConfigKey); } if (result === undefined) result = defaultVal; // default the value only if it's not specified in any of the files. i.e. undefined diff --git a/packages/core/src/platforms/index.ts b/packages/core/src/platforms/index.ts index 7d2a091a4b..0a0d6cc6c7 100644 --- a/packages/core/src/platforms/index.ts +++ b/packages/core/src/platforms/index.ts @@ -3,7 +3,7 @@ import { chalk, logDefault, logError, logWarning, logDebug, logInfo } from '../l import { cleanFolder, copyFolderContentsRecursiveSync } from '../system/fs'; import { getTimestampPathsConfig, getAppFolder } from '../context/contextProps'; import { generateOptions, inquirerPrompt } from '../api'; -import type { RnvPlatform, RnvPlatformWithAll } from '../types'; +import type { RnvPlatform } from '../types'; import { doResolve } from '../system/resolve'; import { getContext } from '../context/provider'; import { RnvPlatforms } from '../enums/platformName'; @@ -27,14 +27,14 @@ export const generatePlatformChoices = () => { return options; }; -export const cleanPlatformBuild = async (platform: RnvPlatform) => { +export const cleanPlatformBuild = async (platform: RnvPlatform, cleanAllPlatforms?: boolean) => { logDebug('cleanPlatformBuild'); const c = getContext(); const cleanTasks = []; - if ((platform as RnvPlatformWithAll) === 'all' && c.buildConfig.platforms) { + if (cleanAllPlatforms && c.buildConfig.platforms) { Object.keys(c.buildConfig.platforms).forEach((k) => { if (isPlatformSupportedSync(k as RnvPlatform)) { const pPath = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${k}`); diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index b5bdfe1aa5..d19ee8ece2 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -175,6 +175,8 @@ export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment ) .describe('Common config props used as default props for all available buildSchemes'); +export type RnvCommonBuildSchemeSchema = RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformBaseFragment; + export type RnvCommonSchema = RnvCommonSchemaFragment & { - buildSchemes?: Record; + buildSchemes?: Record; }; diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index f9db564a83..8830e2c617 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -182,47 +182,49 @@ const Paths = z //LEVEl 0 (ROOT) -const zodRootProjectBaseFragment = z.object({ - workspaceID: WorkspaceID.optional(), - projectVersion: z.string().optional(), // TODO: if undefined it should infer from package.json - projectName: ProjectName.optional(), - - isTemplate: z.boolean().optional(), - defaults: z.optional(DefaultsSchema), - pipes: z.optional(Pipes), - crypto: z.optional(Crypto), - paths: z.optional(Paths), - permissions: z.optional(Permissions), - engines: z.optional(EnginesSchema), // TODO: rename to mods (mods with type engine in the future) ? - enableHookRebuild: z.optional(EnableHookRebuild), - extendsTemplate: z.optional(ExtendTemplate), // TODO: rename to "extendsConfig" - tasks: z.optional(Tasks), - integrations: z.optional(Integrations), // TODO: rename to mods - env: z.optional(Env), - runtime: z.optional(Runtime), - templateConfig: TemplateConfig, - _meta: z.optional( - z.object({ - requires_first_template_apply: z.optional(SupportedPlatforms), - }) - ), - // DEPRECATED - - isMonorepo: z.optional(IsMonoRepo), // TODO: remove and use auto detection - monoRoot: z.optional(MonoRoot), // TODO: remove and use auto detection - custom: z.optional(Ext), // TODO: find better way to handle - skipAutoUpdate: z - .boolean() - .optional() - .describe( - "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" +const zodRootProjectBaseFragment = z + .object({ + workspaceID: WorkspaceID, + projectVersion: z.string(), // TODO: if undefined it should infer from package.json + projectName: ProjectName, + + isTemplate: z.boolean(), + defaults: z.optional(DefaultsSchema), + pipes: z.optional(Pipes), + crypto: z.optional(Crypto), + paths: z.optional(Paths), + permissions: z.optional(Permissions), + engines: z.optional(EnginesSchema), // TODO: rename to mods (mods with type engine in the future) ? + enableHookRebuild: z.optional(EnableHookRebuild), + extendsTemplate: z.optional(ExtendTemplate), // TODO: rename to "extendsConfig" + tasks: z.optional(Tasks), + integrations: z.optional(Integrations), // TODO: rename to mods + env: z.optional(Env), + runtime: z.optional(Runtime), + templateConfig: z.optional(TemplateConfig), + _meta: z.optional( + z.object({ + requires_first_template_apply: z.optional(SupportedPlatforms), + }) ), - // REMOVED - // useTemplate: z.optional(UseTemplate), - // isNew: z - // templates: Templates.optional(), - // currentTemplate: CurrentTemplate.optional(), -}); + // DEPRECATED + + isMonorepo: z.optional(IsMonoRepo), // TODO: remove and use auto detection + monoRoot: z.optional(MonoRoot), // TODO: remove and use auto detection + custom: z.optional(Ext), // TODO: find better way to handle + skipAutoUpdate: z + .boolean() + + .describe( + "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" + ), + // REMOVED + // useTemplate: z.optional(UseTemplate), + // isNew: z + // templates: Templates, + // currentTemplate: CurrentTemplate, + }) + .partial(); export type RnvRootProjectBaseFragment = z.infer; // NOTE: Need to explictly type this to generic zod object to avoid TS error: @@ -237,7 +239,7 @@ export const zodRootProjectSchema: AnyZodObject = zodRootProjectBaseFragment .merge(zodRootProjectPluginsSchema); export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { - common: RnvCommonSchema; - platforms: RnvPlatformsSchema; - plugins: RnvPluginsSchema; + common?: RnvCommonSchema; + platforms?: RnvPlatformsSchema; + plugins?: RnvPluginsSchema; }; diff --git a/packages/core/src/schema/platforms/index.ts b/packages/core/src/schema/platforms/index.ts index 21f263d66c..e58a4ed173 100644 --- a/packages/core/src/schema/platforms/index.ts +++ b/packages/core/src/schema/platforms/index.ts @@ -49,14 +49,13 @@ const zodMergedPlatformPlainObject = zodCommonSchemaFragment.merge( ) ); -export type _MergedPlatformObjectType = z.infer; +export type RnvPlatformSchemaFragment = z.infer; const desc = 'Allows to customize platforms configurations based on chosen build scheme `-s`'; const androidSchema = z .optional(PlatformAndroidSchema.extend({ buildSchemes: z.record(z.string(), PlatformAndroidSchema).optional() })) .describe(desc); -// const androidSchema = generatePlatform(PlatformAndroid); const iosSchema = z .optional(PlatformiOSSchema.extend({ buildSchemes: z.record(z.string(), PlatformiOSSchema).optional() })) .describe(desc); @@ -101,9 +100,9 @@ export const zodPlatformsSchema: AnyZodObject = z .describe('Object containing platform configurations'); // export type RnvPlatformsSchema = z.infer; -export type RnvPlatformsSchema = Record< - RnvPlatformNameKey, - _MergedPlatformObjectType & { - buildSchemes?: Record; - } ->; +export type RnvPlatformBuildSchemeSchema = RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformSchemaFragment; + +export type RnvPlatformSchema = RnvPlatformSchemaFragment & { + buildSchemes?: Record; +}; +export type RnvPlatformsSchema = Partial>; diff --git a/packages/core/src/schema/plugins/index.ts b/packages/core/src/schema/plugins/index.ts index 39dbc40fa7..e45063f12c 100644 --- a/packages/core/src/schema/plugins/index.ts +++ b/packages/core/src/schema/plugins/index.ts @@ -54,9 +54,9 @@ const zodPluginPlatformMergedSchema = z.object({ ...zodPluginPlatformAndroidFragment, }); -export type RnvPluginSchema = RnvPluginBaseFragment & - Record>; - +export type RnvPluginPlatformSchema = z.infer; +export type RnvPluginPlatformsSchema = Record; +export type RnvPluginSchema = RnvPluginBaseFragment & Partial; export type RnvPluginsSchema = Record; export const zodPluginsSchema = z diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index a841c905a9..8e04dd9c94 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -1,6 +1,6 @@ -import type { RnvPluginSchema } from './plugins'; +import type { RnvPluginPlatformSchema, RnvPluginSchema } from './plugins'; import type { _AppDelegateMethodType } from './platforms/fragments/templateXcodeBase'; -import type { _MergedPlatformObjectType } from './platforms'; +import type { RnvPlatformSchemaFragment } from './platforms'; import type { _RootAppBaseSchemalType } from './configFiles/app'; import type { RnvRootProjectBaseFragment } from './configFiles/project'; @@ -16,7 +16,7 @@ import { type RnvPlatformNameKey } from '../enums/platformName'; export type ConfigProp = RnvRootProjectBaseFragment & _RootAppBaseSchemalType & _MergedPlatformPrivateObjectType & - _MergedPlatformObjectType; + RnvPlatformSchemaFragment; export type ConfigPropKey = keyof ConfigProp; @@ -24,11 +24,11 @@ export type ConfigPropKey = keyof ConfigProp; // SUB-TYPES //=============================== -export type RenativeConfigPlugin = Partial>; +export type RenativeConfigPlugin = RnvPluginSchema; export type RenativeConfigPaths = ConfigFileBuildConfig['paths']; -export type RenativeConfigPluginPlatform = RnvPluginSchema[PlatformKey]; +export type RenativeConfigPluginPlatform = RnvPluginPlatformSchema; export type RenativeWebpackConfig = RenativeConfigPlugin['webpackConfig']; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index fb2e37305d..758b17b372 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,20 +1,20 @@ import type { ConfigFileBuildConfig } from './schema'; +import { RnvCommonBuildSchemeSchema, RnvCommonSchemaFragment } from './schema/common'; +import { RnvPlatformBuildSchemeSchema, RnvPlatformSchemaFragment } from './schema/platforms'; import type { PlatformKey } from './schema/types'; export * from './schema/configFiles/types'; export type RnvPlatform = PlatformKey | null; -export type RnvPlatformWithAll = PlatformKey | 'all'; - export type RenativeConfigVersion = string | { version: string }; export type RnvError = any; export type Env = Record; -type Plat = Required['platforms']>[PlatformKey]; -export type PlatPropKey = keyof Plat; -export type BuildSchemePropKey = keyof Required['buildSchemes'][string]; -export type CommonPropKey = keyof ConfigFileBuildConfig['common']; -export type BuildConfigPropKey = keyof ConfigFileBuildConfig; +export type PlatPropKey = keyof RnvPlatformSchemaFragment; // We Request keys excluding buildScheme (not RnvPlatformSchema) +export type PlatformBuildSchemeKey = keyof RnvPlatformBuildSchemeSchema; +export type CommonBuildSchemeKey = keyof RnvCommonBuildSchemeSchema; +export type CommonPropKey = keyof RnvCommonSchemaFragment; // We Request keys excluding buildScheme (not RnvCommonSchema) +export type BuildConfigKey = keyof ConfigFileBuildConfig; diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 2b2c14c0f3..50a728676e 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -8,7 +8,6 @@ import { updateRenativeConfigs, configureRuntimeDefaults, applyTemplate, - configureTemplateFiles, isTemplateInstalled, fsExistsSync, fsMkdirSync, From 9bb3faa6d28c068bebfd442ec68cb8c72994ad72 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 02:29:10 +0200 Subject: [PATCH 152/175] refactor schema types --- packages/core/src/schema/common/index.ts | 223 ++++------- packages/core/src/schema/configFiles/app.ts | 75 ++-- .../src/schema/configFiles/buildConfig.ts | 42 +-- .../core/src/schema/configFiles/engine.ts | 50 +-- .../src/schema/configFiles/integration.ts | 4 +- packages/core/src/schema/configFiles/local.ts | 4 +- .../core/src/schema/configFiles/plugin.ts | 14 +- .../core/src/schema/configFiles/project.ts | 353 ++++++++---------- .../core/src/schema/configFiles/template.ts | 36 +- .../core/src/schema/configFiles/templates.ts | 72 ++-- packages/core/src/schema/configFiles/types.ts | 16 +- .../core/src/schema/configFiles/workspace.ts | 6 +- .../core/src/schema/configFiles/workspaces.ts | 4 +- packages/core/src/schema/platforms/android.ts | 15 - .../src/schema/platforms/fragments/android.ts | 150 ++++---- .../src/schema/platforms/fragments/base.ts | 65 ++-- .../schema/platforms/fragments/electron.ts | 12 +- .../src/schema/platforms/fragments/ios.ts | 126 +++---- .../schema/platforms/fragments/lightning.ts | 8 +- .../src/schema/platforms/fragments/nextjs.ts | 14 +- .../schema/platforms/fragments/reactNative.ts | 16 +- .../platforms/fragments/templateAndroid.ts | 145 ++++++- .../fragments/templateAndroidBase.ts | 129 ------- .../platforms/fragments/templateXcode.ts | 94 ++++- .../platforms/fragments/templateXcodeBase.ts | 89 ----- .../src/schema/platforms/fragments/tizen.ts | 14 +- .../src/schema/platforms/fragments/web.ts | 12 +- .../src/schema/platforms/fragments/webos.ts | 8 +- .../src/schema/platforms/fragments/webpack.ts | 16 +- .../src/schema/platforms/fragments/windows.ts | 6 +- packages/core/src/schema/platforms/index.ts | 132 +++---- packages/core/src/schema/platforms/ios.ts | 15 - packages/core/src/schema/platforms/macos.ts | 17 - packages/core/src/schema/platforms/tizen.ts | 15 - packages/core/src/schema/platforms/web.ts | 15 - packages/core/src/schema/platforms/webos.ts | 15 - packages/core/src/schema/platforms/windows.ts | 15 - .../core/src/schema/plugins/fragments/base.ts | 4 +- packages/core/src/schema/shared/index.ts | 33 +- .../master.ts => spec/zod_schema_master.ts | 18 +- 40 files changed, 867 insertions(+), 1230 deletions(-) delete mode 100644 packages/core/src/schema/platforms/android.ts delete mode 100644 packages/core/src/schema/platforms/fragments/templateAndroidBase.ts delete mode 100644 packages/core/src/schema/platforms/fragments/templateXcodeBase.ts delete mode 100644 packages/core/src/schema/platforms/ios.ts delete mode 100644 packages/core/src/schema/platforms/macos.ts delete mode 100644 packages/core/src/schema/platforms/tizen.ts delete mode 100644 packages/core/src/schema/platforms/web.ts delete mode 100644 packages/core/src/schema/platforms/webos.ts delete mode 100644 packages/core/src/schema/platforms/windows.ts rename packages/core/src/schema/configFiles/master.ts => spec/zod_schema_master.ts (97%) diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index d19ee8ece2..a3eb8c5c5d 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -1,158 +1,75 @@ import { AnyZodObject, z } from 'zod'; -import { zodBuildSchemeFragment, BundleId, Ext, HexColor, Runtime, RnvBuildSchemeFragment } from '../shared'; +import { zodBuildSchemeFragment, zodExt, zodRuntime, RnvBuildSchemeFragment } from '../shared'; import { RnvPlatformBaseFragment, zodPlatformBaseFragment } from '../platforms/fragments/base'; -// DEPRECATED? -export const SplashScreen = z.boolean().describe('Enable or disable splash screen'); - -const IncludedPermissions = z - .array(z.string()) - .describe( - "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" - ); - -//DEPRECATED?? -const ExcludedPermissions = z - .array(z.string()) - .describe( - "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" - ); - -const IncludedPlugins = z - .array(z.string()) - .describe( - "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" - ); - -const ExcludedPlugins = z - .array(z.string()) - .describe( - "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" - ); - -const Title = z - .string() - .describe( - 'Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website' - ); - -const Description = z - .string() - .describe( - 'General description of your app. This prop will be injected to actual projects where description field is applicable' - ); - -const Author = z.string().describe('Author name'); - -const IncludedFonts = z - .array(z.string()) - .describe( - 'Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all' - ); - -const BackgroundColor = HexColor.describe('Defines root view backgroundColor for all platforms in HEX format'); - -const FontSources = z - .array(z.string()) - .describe( - 'Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`' - ); - -const AssetSources = z - .array(z.string()) - .describe( - 'Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`' - ); - -export const License = z.string().describe('Injects license information into app'); - -const Version = z.string().describe('Semver style version of your app'); - -const VersionCode = z.string().describe('Manual verride of generated version code'); - -const VersionFormat = z.string().describe(`Allows you to fine-tune app version defined in package.json or renative.json. - -If you do not define versionFormat, no formatting will apply to version. - -"versionFormat" : "0.0.0" - -IN: 1.2.3-rc.4+build.56 OUT: 1.2.3 - -IN: 1.2.3 OUT: 1.2.3 - - - -"versionFormat" : "0.0.0.0.0" - -IN: 1.2.3-rc.4+build.56 OUT: 1.2.3.4.56 - -IN: 1.2.3 OUT: 1.2.3 - -"versionFormat" : "0.0.0.x.x.x.x" - -IN: 1.2.3-rc.4+build.56 OUT: 1.2.3.rc.4.build.56 - -IN: 1.2.3 OUT: 1.2.3 - -`); - -const VersionCodeFormat = z.string().describe(`Allows you to fine-tune auto generated version codes. - -Version code is autogenerated from app version defined in package.json or renative.json. - -NOTE: If you define versionCode manually this formatting will not apply. - -EXAMPLE 1: - -default value: 00.00.00 - -IN: 1.2.3-rc.4+build.56 OUT: 102030456 - -IN: 1.2.3 OUT: 10203 - -EXAMPLE 2: - -"versionCodeFormat" : "00.00.00.00.00" - -IN: 1.2.3-rc.4+build.56 OUT: 102030456 - -IN: 1.2.3 OUT: 102030000 - -EXAMPLE 3: - -"versionCodeFormat" : "00.00.00.0000" - -IN: 1.0.23-rc.15 OUT: 100230015 - -IN: 1.0.23 OUT: 100230000 - -`); - -//LEVEl 1 - export const zodCommonSchemaFragment = z.object({ - includedPermissions: z.optional(IncludedPermissions), - excludedPermissions: z.optional(ExcludedPermissions), - id: z.optional(BundleId), + includedPermissions: z + .array(z.string()) + .describe( + "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + ), + excludedPermissions: z + .array(z.string()) + .describe( + "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + ), + id: z.string().describe('Bundle ID of application. ie: com.example.myapp'), idSuffix: z.string().optional(), - version: z.optional(Version), - versionCode: z.optional(VersionCode), - versionFormat: z.optional(VersionFormat), - versionCodeFormat: z.optional(VersionCodeFormat), + version: z.string().describe('Semver style version of your app'), + versionCode: z.string().describe('Manual verride of generated version code'), + versionFormat: z.string().describe(`Allows you to fine-tune app version defined in package.json or renative.json. + If you do not define versionFormat, no formatting will apply to version. + `), + versionCodeFormat: z.string().describe(`Allows you to fine-tune auto generated version codes. + Version code is autogenerated from app version defined in package.json or renative.json. + `), versionCodeOffset: z.number().optional(), - title: z.optional(Title), - description: z.optional(Description), - author: z.optional(Author), - license: z.optional(License), - includedFonts: z.optional(IncludedFonts), - backgroundColor: z.optional(BackgroundColor), - splashScreen: z.optional(SplashScreen), - fontSources: z.optional(FontSources), - assetSources: z.optional(AssetSources), - includedPlugins: z.optional(IncludedPlugins), - excludedPlugins: z.optional(ExcludedPlugins), - runtime: z.optional(Runtime), - custom: z.optional(Ext), + title: z + .string() + .describe( + 'Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website' + ), + description: z + .string() + .describe( + 'General description of your app. This prop will be injected to actual projects where description field is applicable' + ), + author: z.string().describe('Author name'), + license: z.string().describe('Injects license information into app'), + includedFonts: z + .array(z.string()) + .describe( + 'Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all' + ), + backgroundColor: z + .string() + .min(4) + .max(9) + .regex(/^#/) + .describe('Defines root view backgroundColor for all platforms in HEX format'), + splashScreen: z.boolean().describe('Enable or disable splash screen'), + fontSources: z + .array(z.string()) + .describe( + 'Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`' + ), + assetSources: z + .array(z.string()) + .describe( + 'Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`' + ), + includedPlugins: z + .array(z.string()) + .describe( + "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + ), + excludedPlugins: z + .array(z.string()) + .describe( + "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + ), + runtime: z.optional(zodRuntime), + custom: z.optional(zodExt), }); export type RnvCommonSchemaFragment = z.infer; @@ -162,13 +79,7 @@ export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment buildSchemes: z.optional( z.record( z.string(), - zodCommonSchemaFragment.merge( - zodBuildSchemeFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - }) - ) - ) + zodCommonSchemaFragment.merge(zodBuildSchemeFragment.merge(zodPlatformBaseFragment)) ) ), }) diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index 23191be651..c3584cf8b3 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -1,46 +1,39 @@ import { AnyZodObject, z } from 'zod'; -import { zodCommonSchema } from '../common'; -import { Ext, ExtendTemplate } from '../shared'; -import { zodPlatformsSchema } from '../platforms'; -import { zodPluginsSchema } from '../plugins'; - -export const Extend = z.string().describe('extend another appConfig by id'); - -const Id = z - .string() - .describe('ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder'); - -const Hidden = z - .boolean() - .describe( - 'If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`' - ); - -//LEVEl 0 (ROOT) - -const zodRootAppBaseFragment = { - id: z.optional(Id), - custom: z.optional(Ext), - hidden: z.optional(Hidden), - extendsTemplate: z.optional(ExtendTemplate), // TODO: rename to "extendsConfig" - extend: z.optional(Extend), // TODO: rename to "extendsAppConfigID" -}; - -const RootAppBaseSchema = z.object(zodRootAppBaseFragment); -const RootAppCommonSchema = z.object({ common: z.optional(zodCommonSchema) }); -const RootAppPlatformsSchema = z.object({ platforms: z.optional(zodPlatformsSchema) }); -const RootAppPluginsSchema = z.object({ plugins: z.optional(zodPluginsSchema) }); +import { RnvCommonSchema } from '../common'; +import { zodExt } from '../shared'; +import { RnvPlatformsSchema } from '../platforms'; +import { RnvPluginsSchema } from '../plugins'; +import { zodRootProjectCommonSchema, zodRootProjectPlatformsSchema, zodRootProjectPluginsSchema } from './project'; + +const zodRootAppBaseFragment = z.object({ + id: z + .string() + .describe('ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder'), + custom: z.optional(zodExt), + hidden: z + .boolean() + .describe( + 'If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`' + ), + extendsTemplate: z + .string() + .describe( + 'You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`' + ), // TODO: rename to "extendsConfig" + extend: z.string().describe('extend another appConfig by id'), // TODO: rename to "extendsAppConfigID" +}); +export type RnvRootAppBaseFragment = z.infer; // NOTE: Need to explictly type this to generic zod object to avoid TS error: // The inferred type of this node exceeds the maximum length the compiler will serialize... // This is ok we only use this full schema for runtime validations. actual types -export const RootAppSchema: AnyZodObject = RootAppBaseSchema.merge(RootAppCommonSchema) - .merge(RootAppPlatformsSchema) - .merge(RootAppPluginsSchema); - -export type _RootAppBaseSchemalType = z.infer; - -export type _RootAppSchemaType = z.infer & - z.infer & - z.infer & - z.infer; +export const RootAppSchema: AnyZodObject = zodRootAppBaseFragment + .merge(zodRootProjectCommonSchema) + .merge(zodRootProjectPlatformsSchema) + .merge(zodRootProjectPluginsSchema); + +export type RnvRootAppSchemaType = RnvRootAppBaseFragment & { + common?: RnvCommonSchema; + platforms?: RnvPlatformsSchema; + plugins?: RnvPluginsSchema; +}; diff --git a/packages/core/src/schema/configFiles/buildConfig.ts b/packages/core/src/schema/configFiles/buildConfig.ts index d527ada0a8..95172846b0 100644 --- a/packages/core/src/schema/configFiles/buildConfig.ts +++ b/packages/core/src/schema/configFiles/buildConfig.ts @@ -1,11 +1,8 @@ -import { RnvCommonSchema } from '../common'; -import { RnvPlatformsSchema } from '../platforms'; -import { RnvPluginsSchema } from '../plugins'; -import { _RootAppBaseSchemalType } from './app'; -import { _RootLocalSchemaType } from './local'; -import { RnvRootProjectBaseFragment } from './project'; -import { _RootTemplatesSchemaType } from './templates'; -import { _RootWorkspaceSchemaType } from './workspace'; +import { type RnvRootAppBaseFragment } from './app'; +import { type _RootLocalSchemaType } from './local'; +import { type RnvRootProjectBaseFragment } from './project'; +import { type _RootTemplatesSchemaType } from './templates'; +import { type _RootWorkspaceSchemaType } from './workspace'; // NOTE: Why am I bothered with all this nonsense instead of just exporting root schema types? // because infering full schema (complex zod types & unions) impacts TS server performance @@ -16,17 +13,17 @@ type RootPluginsMerged = { scopedPluginTemplates: Record; }; -type Common = { - common: RnvCommonSchema; -}; +// type Common = { +// common: RnvCommonSchema; +// }; -type PluginsMap = { - plugins: RnvPluginsSchema; -}; +// type PluginsMap = { +// plugins: RnvPluginsSchema; +// }; -type PlatformsMap = { - platforms: RnvPlatformsSchema; -}; +// type PlatformsMap = { +// platforms: RnvPlatformsSchema; +// }; export type ConfigFileBuildConfig = //Templates @@ -36,9 +33,10 @@ export type ConfigFileBuildConfig = //Plugins (multiple roots merged under scope object) RootPluginsMerged & //Project + App - Required & + // Required & + RnvRootProjectBaseFragment & _RootLocalSchemaType & - _RootAppBaseSchemalType & - Common & - PluginsMap & - PlatformsMap; + RnvRootAppBaseFragment; +// Common & +// PluginsMap & +// PlatformsMap; diff --git a/packages/core/src/schema/configFiles/engine.ts b/packages/core/src/schema/configFiles/engine.ts index fd6d529218..7735ca7cc0 100644 --- a/packages/core/src/schema/configFiles/engine.ts +++ b/packages/core/src/schema/configFiles/engine.ts @@ -1,46 +1,32 @@ import { z } from 'zod'; -import { Ext, PlatformsKeys } from '../shared'; +import { zodExt, zodPlatformsKeys } from '../shared'; -const NpmDep = z.record(z.string(), z.string()); +const zodNpmDep = z.record(z.string(), z.string()); -const Npm = z +const zodEngineNpm = z .object({ - dependencies: z.optional(NpmDep), - devDependencies: z.optional(NpmDep), - peerDependencies: z.optional(NpmDep), - optionalDependencies: z.optional(NpmDep), + dependencies: z.optional(zodNpmDep), + devDependencies: z.optional(zodNpmDep), + peerDependencies: z.optional(zodNpmDep), + optionalDependencies: z.optional(zodNpmDep), }) .describe('Npm dependencies required for this plugin to work'); -const EnginePlatform = z.object({ +const zodEnginePlatform = z.object({ engine: z.optional(z.string()), - npm: z.optional(Npm), + npm: z.optional(zodNpmDep), }); -//LEVEl 0 (ROOT) - -const Id = z.string().describe('ID of engine'); - -const EngineExtension = z.string().describe('Engine extension ised by rnv during compilation'); - -const Plugins = z.record(z.string(), z.string()).describe('List of required plugins for this engine to work properly'); - -const Overview = z.string().describe('Overview description of engine'); - -const Platforms = z.record(PlatformsKeys, EnginePlatform); - -const Extends = z.string().describe('ID of engine to extend. Not being used yet'); - export const RootEngineSchema = z.object({ - custom: z.optional(Ext), - id: Id, + custom: z.optional(zodExt), + id: z.string().describe('ID of engine'), packageName: z.string(), - engineExtension: EngineExtension, - extends: z.optional(Extends), - overview: Overview, - plugins: z.optional(Plugins), - npm: z.optional(Npm), - platforms: z.optional(Platforms), + engineExtension: z.string().describe('Engine extension ised by rnv during compilation'), + // extends: z.string().describe('ID of engine to extend. Not being used yet'), + overview: z.string().describe('Overview description of engine'), + plugins: z.record(z.string(), z.string()).describe('List of required plugins for this engine to work properly'), + npm: zodEngineNpm, + platforms: z.record(zodPlatformsKeys, zodEnginePlatform), }); -export type _ConfigRootEngineType = z.infer; +export type RnvRootEngineSchema = z.infer; diff --git a/packages/core/src/schema/configFiles/integration.ts b/packages/core/src/schema/configFiles/integration.ts index f0d52191e1..9e7316bab6 100644 --- a/packages/core/src/schema/configFiles/integration.ts +++ b/packages/core/src/schema/configFiles/integration.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -export const RootIntegrationSchema = z.object({ +export const zodRootIntegrationSchema = z.object({ packageName: z.string(), }); -export type _RootIntegrationSchemaType = z.infer; +export type RnvRootIntegrationSchema = z.infer; diff --git a/packages/core/src/schema/configFiles/local.ts b/packages/core/src/schema/configFiles/local.ts index 22dfc4c4ca..190bdbcd4a 100644 --- a/packages/core/src/schema/configFiles/local.ts +++ b/packages/core/src/schema/configFiles/local.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { DefaultTargets } from '../shared'; +import { zodDefaultTargets } from '../shared'; const WorkspaceAppConfigsDir = z.string().describe('Defines app configs dir outside of current project'); @@ -12,7 +12,7 @@ const Meta = z.object({ export const RootLocalSchema = z.object({ workspaceAppConfigsDir: z.optional(WorkspaceAppConfigsDir), - defaultTargets: z.optional(DefaultTargets), + defaultTargets: z.optional(zodDefaultTargets), _meta: z.optional(Meta), // extend: z.optional(z.string()), }); diff --git a/packages/core/src/schema/configFiles/plugin.ts b/packages/core/src/schema/configFiles/plugin.ts index 12774dd8e7..361ce6f115 100644 --- a/packages/core/src/schema/configFiles/plugin.ts +++ b/packages/core/src/schema/configFiles/plugin.ts @@ -1,9 +1,11 @@ -import { z } from 'zod'; -import { Ext } from '../shared'; -import { zodPluginSchema } from '../plugins'; +import { AnyZodObject, z } from 'zod'; +import { zodExt } from '../shared'; +import { RnvPluginSchema, zodPluginSchema } from '../plugins'; -export const RootPluginSchema = zodPluginSchema.extend({ - custom: z.optional(Ext), +const zodPluginFragment = z.object({ + custom: z.optional(zodExt), }); -export type _RootPluginSchemaType = z.infer; +export const RootPluginSchema: AnyZodObject = zodPluginSchema.merge(zodPluginFragment); + +export type _RootPluginSchemaType = RnvPluginSchema & z.infer; diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 8830e2c617..2a2b625358 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -1,223 +1,160 @@ import { AnyZodObject, z } from 'zod'; -import { RnvCommonSchema, zodCommonSchema } from '../common'; -import { Ext, ExtendTemplate, PlatformsKeys, Runtime, SupportedPlatforms, TemplateConfig } from '../shared'; -import { RnvPlatformsSchema, zodPlatformsSchema as zodPlatformsSchema } from '../platforms'; -import { RnvPluginsSchema, zodPluginsSchema } from '../plugins'; +import { type RnvCommonSchema, zodCommonSchema } from '../common'; +import { + type RnvTemplateConfigFragment, + zodExt, + zodPlatformsKeys, + zodRuntime, + zodSupportedPlatforms, + zodTemplateConfigFragment, +} from '../shared'; +import { type RnvPlatformsSchema, zodPlatformsSchema } from '../platforms'; +import { type RnvPluginsSchema, zodPluginsSchema } from '../plugins'; -const DefaultCommandSchemes = z - .record(z.enum(['run', 'export', 'build']), z.string()) - .describe( - 'List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`' - ); - -const Targets = z.record(PlatformsKeys, z.string()).describe('Override of default targets specific to this project'); - -const Ports = z - .record(PlatformsKeys, z.number()) //TODO maxValue(65535) - .describe( - 'Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts' - ); - -const PortOffset = z.number().describe('Offset each port default value by increment'); - -const MonoRoot = z.string().describe('Define custom path to monorepo root where starting point is project directory'); - -const Env = z.record(z.string(), z.any()).describe('Object containing injected env variables'); - -export const DefaultsSchema = z - .object({ - ports: z.optional(Ports), - supportedPlatforms: z.optional(SupportedPlatforms), - portOffset: z.optional(PortOffset), - defaultCommandSchemes: z.optional(DefaultCommandSchemes), - targets: z.optional(Targets), - }) - .describe('Default system config for this project'); - -const Pipes = z - .array(z.string()) - .describe( - 'To avoid rnv building `buildHooks/src` every time you can specify which specific pipes should trigger recompile of buildHooks' - ); - -const WorkspaceID = z - .string() //TODO: no spaces - .describe( - 'Workspace ID your project belongs to. This will mach same folder name in the root of your user directory. ie `~/` on macOS' - ); - -const Tasks = z +const zodRootProjectBaseFragment = z .object({ - install: z.optional( - z.object({ - script: z.string(), - platform: z.optional( - z.record( - PlatformsKeys, + workspaceID: z + .string() //TODO: no spaces + .describe( + 'Workspace ID your project belongs to. This will mach same folder name in the root of your user directory. ie `~/` on macOS' + ), + projectVersion: z.string().describe('Version of project'), // TODO: if undefined it should infer from package.json + projectName: z + .string() + .describe( + 'Name of the project which will be used in workspace as folder name. this will also be used as part of the KEY in crypto env var generator' + ), + isTemplate: z + .boolean() + .describe('Marks project as template. This disables certain user checks like version mismatch etc'), + defaults: z + .object({ + ports: z + .record(zodPlatformsKeys, z.number()) //TODO maxValue(65535) + .describe( + 'Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts' + ), + supportedPlatforms: zodSupportedPlatforms, + portOffset: z.number().describe('Offset each port default value by increment'), + defaultCommandSchemes: z + .record(z.enum(['run', 'export', 'build']), z.string()) + .describe( + 'List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`' + ), + targets: z + .record(zodPlatformsKeys, z.string()) + .describe('Override of default targets specific to this project'), + }) + .describe('Default system config for this project'), + pipes: z + .array(z.string()) + .describe( + 'To avoid rnv building `buildHooks/src` every time you can specify which specific pipes should trigger recompile of buildHooks' + ), + crypto: z + .object({ + path: z + .string() + .describe( + 'Relative path to encrypted file in your renative project. Example: "./secrets/mySecrets.enc"' + ), + isOptional: z.boolean().describe('Mark if crypto object should not checked every run'), + }) + .describe( + 'This prop enables automatic encrypt and decrypt of sensitive information in your project. \nRNV will generate new env variable with can be used to encrypt and decrypt. this env var is generated by combining (and sanitizing) 2 properties from your renative.json: \nworkspaceID + projectName.\nThese 2 properties are also used to generate path on your local machine where encrypted files will be decrypted into.' + ), + paths: z + .object({ + appConfigsDir: z.string().describe('Custom path to appConfigs. defaults to `./appConfigs`'), + platformTemplatesDirs: z + .record(zodPlatformsKeys, z.string()) + .describe( + 'Custom location of ejected platform templates. this is populated after you run `rnv platform eject`' + ), + appConfigsDirs: z.array(z.string()).describe('Array of custom location app configs directories`'), + platformAssetsDir: z + .string() + .describe('Custom path to platformAssets folder. defaults to `./platformAssets`'), + platformBuildsDir: z + .string() + .describe('Custom path to platformBuilds folder. defaults to `./platformBuilds`'), + pluginTemplates: z.record( + z.string(), + z.object({ + npm: z.string(), + path: z.string(), + }) + ).describe(` + Allows you to define custom plugin template scopes. default scope for all plugins is \`rnv\`.`), + }) + .describe('Define custom paths for RNV to look into'), + permissions: z + .object({ + android: z + .record( + z.string(), + z.object({ + key: z.string(), //TODO: type this + security: z.string(), //TODO: type this + }) + ) + .describe('Android SDK specific permissions'), + ios: z + .record( + z.string(), //TODO: type this z.object({ - ignore: z.optional(z.boolean()), - ignoreTasks: z.optional(z.array(z.string())), + desc: z.string(), }) ) - ), + .describe('iOS SDK specific permissions'), }) - ), - }) - .describe( - 'Allows to override specific task within renative toolchain. (currently only `install` supported). this is useful if you want to change specific behaviour of built-in task. ie install task triggers yarn/npm install by default. but that might not be desirable installation trigger' - ); - -const Integrations = z - .record(z.string(), z.object({})) - .describe('Object containing integration configurations where key represents package name'); - -const Engine = z.literal('source:rnv'); - -const IsMonoRepo = z.boolean().describe('Mark if your project is part of monorepo'); - -const Crypto = z - .object({ - path: z + .describe( + 'Permission definititions which can be used by app configs via `includedPermissions` and `excludedPermissions` to customize permissions for each app' + ), + engines: z.record(z.string(), z.literal('source:rnv')).describe('List of engines available in this project'), // TODO: rename to mods (mods with type engine in the future) ? + enableHookRebuild: z + .boolean() + .describe( + 'If set to true in `./renative.json` build hooks will be compiled at each rnv command run. If set to `false` (default) rebuild will be triggered only if `dist` folder is missing, `-r` has been passed or you run `rnv hooks run` directly making your rnv commands faster' + ), + extendsTemplate: z .string() - .describe('Relative path to encrypted file in your renative project. Example: "./secrets/mySecrets.enc"'), - isOptional: z.boolean().optional().describe('Mark if crypto object should not checked every run'), - }) - .describe( - 'This prop enables automatic encrypt and decrypt of sensitive information in your project. \nRNV will generate new env variable with can be used to encrypt and decrypt. this env var is generated by combining (and sanitizing) 2 properties from your renative.json: \nworkspaceID + projectName.\nThese 2 properties are also used to generate path on your local machine where encrypted files will be decrypted into.' - ); - -const Permissions = z - .object({ - android: z.optional( - z - .record( - z.string(), - z.object({ - key: z.string(), //TODO: type this - security: z.string(), //TODO: type this - }) - ) - .describe('Android SDK specific permissions') - ), - ios: z.optional( - z - .record( - z.string(), //TODO: type this - z.object({ - desc: z.string(), - }) - ) - .describe('iOS SDK specific permissions') - ), - }) - .describe( - 'Permission definititions which can be used by app configs via `includedPermissions` and `excludedPermissions` to customize permissions for each app' - ); - -export const EnginesSchema = z.record(z.string(), Engine).describe('List of engines available in this project'); - -const EnableHookRebuild = z - .boolean() - .describe( - 'If set to true in `./renative.json` build hooks will be compiled at each rnv command run. If set to `false` (default) rebuild will be triggered only if `dist` folder is missing, `-r` has been passed or you run `rnv hooks run` directly making your rnv commands faster' - ); - -const ProjectName = z - .string() - .describe( - 'Name of the project which will be used in workspace as folder name. this will also be used as part of the KEY in crypto env var generator' - ); - -const Paths = z - .object({ - appConfigsDir: z.optional(z.string().describe('Custom path to appConfigs. defaults to `./appConfigs`')), - platformTemplatesDirs: z.optional( - z - .record(PlatformsKeys, z.string()) - .describe( - 'Custom location of ejected platform templates. this is populated after you run `rnv platform eject`' - ) - ), - appConfigsDirs: z.optional(z.array(z.string()).describe('Array of custom location app configs directories`')), - platformAssetsDir: z.optional( - z.string().describe('Custom path to platformAssets folder. defaults to `./platformAssets`') - ), - platformBuildsDir: z.optional( - z.string().describe('Custom path to platformBuilds folder. defaults to `./platformBuilds`') - ), - pluginTemplates: z.optional( - z.record( - z.string(), - z.object({ - npm: z.optional(z.string()), - path: z.string(), - }) - ).describe(` - Allows you to define custom plugin template scopes. default scope for all plugins is \`rnv\`. - this custom scope can then be used by plugin via \`"source:myCustomScope"\` value - - those will allow you to use direct pointer to preconfigured plugin: - - \`\`\` - "plugin-name": "source:myCustomScope" - \`\`\` - - NOTE: by default every plugin you define with scope will also merge any - files defined in overrides automatically to your project. - To skip file overrides coming from source plugin you need to detach it from the scope: - - \`\`\` - { - "plugins": { - "plugin-name": { - "source": "" - } - } - } - \`\`\` - `) - ), - }) - .describe('Define custom paths for RNV to look into'); - -//LEVEl 0 (ROOT) - -const zodRootProjectBaseFragment = z - .object({ - workspaceID: WorkspaceID, - projectVersion: z.string(), // TODO: if undefined it should infer from package.json - projectName: ProjectName, - - isTemplate: z.boolean(), - defaults: z.optional(DefaultsSchema), - pipes: z.optional(Pipes), - crypto: z.optional(Crypto), - paths: z.optional(Paths), - permissions: z.optional(Permissions), - engines: z.optional(EnginesSchema), // TODO: rename to mods (mods with type engine in the future) ? - enableHookRebuild: z.optional(EnableHookRebuild), - extendsTemplate: z.optional(ExtendTemplate), // TODO: rename to "extendsConfig" - tasks: z.optional(Tasks), - integrations: z.optional(Integrations), // TODO: rename to mods - env: z.optional(Env), - runtime: z.optional(Runtime), - templateConfig: z.optional(TemplateConfig), - _meta: z.optional( - z.object({ - requires_first_template_apply: z.optional(SupportedPlatforms), + .describe( + 'You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`' + ), // TODO: rename to "extendsConfig" + tasks: z + .object({ + install: z.object({ + script: z.string(), + platform: z.record( + zodPlatformsKeys, + z.object({ + ignore: z.boolean(), + ignoreTasks: z.array(z.string()), + }) + ), + }), }) - ), + .describe( + 'Allows to override specific task within renative toolchain. (currently only `install` supported). this is useful if you want to change specific behaviour of built-in task. ie install task triggers yarn/npm install by default. but that might not be desirable installation trigger' + ), + integrations: z + .record(z.string(), z.object({})) + .describe('Object containing integration configurations where key represents package name'), // TODO: rename to mods + env: z.record(z.string(), z.any()).describe('Object containing injected env variables'), + runtime: zodRuntime, // DEPRECATED - isMonorepo: z.optional(IsMonoRepo), // TODO: remove and use auto detection - monoRoot: z.optional(MonoRoot), // TODO: remove and use auto detection - custom: z.optional(Ext), // TODO: find better way to handle + isMonorepo: z.boolean().describe('Mark if your project is part of monorepo'), // TODO: remove and use auto detection + monoRoot: z.string().describe('Define custom path to monorepo root where starting point is project directory'), // TODO: remove and use auto detection + custom: zodExt, // TODO: find better way to handle skipAutoUpdate: z .boolean() .describe( "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" ), + // REMOVED // useTemplate: z.optional(UseTemplate), // isNew: z @@ -230,16 +167,18 @@ export type RnvRootProjectBaseFragment = z.infer; + +export const RootTemplateSchema: AnyZodObject = z.object({ + // defaults: z.optional(DefaultsSchema), + // engines: z.optional(EnginesSchema), + templateConfig: zodTemplateConfigFragment.optional(), + bootstrapConfig: zodBootstrapConfig.optional(), }); +export type RnvRootTemplateSchema = { + // defaults: RnvDefault, + // engines: z.optional(EnginesSchema), + templateConfig: RnvTemplateConfigFragment; + bootstrapConfig: RnvBootstrapConfig; +}; + // { // title: 'Which service to use?', // type: 'list', @@ -85,4 +93,4 @@ export const RootTemplateSchema = z.object({ // ], // }, -export type _RootTemplateSchemaType = z.infer; +// export type _RootTemplateSchemaType = z.infer; diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index 3cfa35824d..75f0fcf483 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -1,48 +1,38 @@ import { z } from 'zod'; -import { PlatformsKeys, ProjectTemplates } from '../shared'; +import { zodPlatformsKeys, zodProjectTemplates } from '../shared'; import { zodPluginSchema } from '../plugins'; -export const PluginTemplates = z - .record(z.string(), zodPluginSchema) - .describe('Define all plugins available to be merged with project plugins'); - -export const DisableRnvDefaultOverrides = z - .boolean() - .describe( - 'Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list' - ); - export const RootTemplatesSchema = z.object({ - projectTemplates: ProjectTemplates.optional(), - engineIdMap: z.record(z.string(), z.string()).optional(), - engineTemplates: z - .record( - z.string(), - z.object({ - version: z.string(), - id: z.string(), - key: z.string().optional(), - }) - ) - .optional(), - integrationTemplates: z - .record( - z.string(), - z.object({ - version: z.string(), - }) - ) - .optional(), - platformTemplates: z - .record( - PlatformsKeys, - z.object({ - engine: z.string(), - }) - ) - .optional(), - pluginTemplates: PluginTemplates.optional(), - disableRnvDefaultOverrides: z.optional(DisableRnvDefaultOverrides), + projectTemplates: zodProjectTemplates, + engineIdMap: z.record(z.string(), z.string()), + engineTemplates: z.record( + z.string(), + z.object({ + version: z.string(), + id: z.string(), + key: z.string(), + }) + ), + integrationTemplates: z.record( + z.string(), + z.object({ + version: z.string(), + }) + ), + platformTemplates: z.record( + zodPlatformsKeys, + z.object({ + engine: z.string(), + }) + ), + pluginTemplates: z + .record(z.string(), zodPluginSchema) + .describe('Define all plugins available to be merged with project plugins'), + disableRnvDefaultOverrides: z + .boolean() + .describe( + 'Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list' + ), }); export type _RootTemplatesSchemaType = z.infer; diff --git a/packages/core/src/schema/configFiles/types.ts b/packages/core/src/schema/configFiles/types.ts index 7c3b45584d..74c597151e 100644 --- a/packages/core/src/schema/configFiles/types.ts +++ b/packages/core/src/schema/configFiles/types.ts @@ -1,14 +1,14 @@ -import { _RootAppSchemaType } from './app'; -import { _ConfigRootEngineType } from './engine'; +import { RnvRootAppSchemaType } from './app'; +import { RnvRootEngineSchema } from './engine'; import { _RootWorkspaceSchemaType } from './workspace'; -import { _RootIntegrationSchemaType } from './integration'; +import { RnvRootIntegrationSchema } from './integration'; import { _RootLocalSchemaType } from './local'; import { _RootPluginSchemaType } from './plugin'; import { _RootPrivateSchemaType } from './private'; import { RnvRootProjectSchema } from './project'; import { _RootTemplateSchemaType } from './template'; import { _RootTemplatesSchemaType } from './templates'; -import { _RootWorkspacesSchemaType } from './workspaces'; +import { RnvRootWorkspacesSchema } from './workspaces'; import { _RootRuntimeSchemaType } from './runtime'; import { _RootOverridesSchemaType } from './overrides'; @@ -16,10 +16,10 @@ import { _RootOverridesSchemaType } from './overrides'; export type ConfigFileProject = RnvRootProjectSchema; // appConfigs/**/renative.json -export type ConfigFileApp = _RootAppSchemaType; +export type ConfigFileApp = RnvRootAppSchemaType; // renative.engine.json -export type ConfigFileEngine = _ConfigRootEngineType; +export type ConfigFileEngine = RnvRootEngineSchema; // renative.plugin.json export type ConfigFilePlugin = _RootPluginSchemaType; @@ -40,10 +40,10 @@ export type ConfigFileTemplates = _RootTemplatesSchemaType; export type ConfigFileWorkspace = _RootWorkspaceSchemaType; // renative.workspaces.json -export type ConfigFileWorkspaces = _RootWorkspacesSchemaType; +export type ConfigFileWorkspaces = RnvRootWorkspacesSchema; // renative.integration.json -export type ConfigFileIntegration = _RootIntegrationSchemaType; +export type ConfigFileIntegration = RnvRootIntegrationSchema; // renative.runtime.json export type ConfigFileRuntime = _RootRuntimeSchemaType; diff --git a/packages/core/src/schema/configFiles/workspace.ts b/packages/core/src/schema/configFiles/workspace.ts index ab42b56d1b..d5b0e3054f 100644 --- a/packages/core/src/schema/configFiles/workspace.ts +++ b/packages/core/src/schema/configFiles/workspace.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { DefaultTargets, ProjectTemplates } from '../shared'; +import { zodDefaultTargets, zodProjectTemplates } from '../shared'; const SDKsSchema = z .object({ @@ -19,9 +19,9 @@ const SDKsSchema = z //LEVEl 0 (ROOT) export const RootWorkspaceSchema = z.object({ - defaultTargets: z.optional(DefaultTargets), + defaultTargets: z.optional(zodDefaultTargets), sdks: z.optional(SDKsSchema), - projectTemplates: ProjectTemplates.optional(), + projectTemplates: zodProjectTemplates.optional(), disableTelemetry: z .boolean() .optional() diff --git a/packages/core/src/schema/configFiles/workspaces.ts b/packages/core/src/schema/configFiles/workspaces.ts index fbf9a172bf..9ad68009a5 100644 --- a/packages/core/src/schema/configFiles/workspaces.ts +++ b/packages/core/src/schema/configFiles/workspaces.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const RootWorkspacesSchema = z.object({ +export const zodRootWorkspacesSchema = z.object({ workspaces: z.record( z.string(), z.object({ @@ -15,4 +15,4 @@ export const RootWorkspacesSchema = z.object({ ), }); -export type _RootWorkspacesSchemaType = z.infer; +export type RnvRootWorkspacesSchema = z.infer; diff --git a/packages/core/src/schema/platforms/android.ts b/packages/core/src/schema/platforms/android.ts deleted file mode 100644 index 40e496e08c..0000000000 --- a/packages/core/src/schema/platforms/android.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { z } from 'zod'; -import { zodCommonSchemaFragment } from '../common'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { zodPlatformAndroidFragment } from './fragments/android'; -import { zodTemplateAndroidFragment } from './fragments/templateAndroid'; -import { zodPlatformReactNativeFragment } from './fragments/reactNative'; - -export const PlatformAndroidSchema = zodCommonSchemaFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - ...zodPlatformAndroidFragment, - ...zodPlatformReactNativeFragment, - ...zodTemplateAndroidFragment, - }) -); diff --git a/packages/core/src/schema/platforms/fragments/android.ts b/packages/core/src/schema/platforms/fragments/android.ts index d72ff3afce..d59cb67864 100644 --- a/packages/core/src/schema/platforms/fragments/android.ts +++ b/packages/core/src/schema/platforms/fragments/android.ts @@ -1,91 +1,67 @@ import { z } from 'zod'; import { DEFAULTS } from '../../defaults'; -const EnableAndroidX = z.union([z.boolean(), z.string()]).default(true).describe('Enables new android X architecture'); -const EnableJetifier = z.union([z.boolean(), z.string()]).default(true).describe('Enables Jetifier'); +export const zodPlatformAndroidFragment = z.object({ + enableAndroidX: z.union([z.boolean(), z.string()]).default(true).describe('Enables new android X architecture'), + enableJetifier: z.union([z.boolean(), z.string()]).default(true).describe('Enables Jetifier'), + signingConfig: z + .string() + .default('Debug') + .describe('Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`'), + minSdkVersion: z + .number() + .default(28) + .describe('Minimum Android SDK version device has to have in order for app to run'), + multipleAPKs: z + .boolean() + .describe( + 'If set to `true`, apk will be split into multiple ones for each architecture: "armeabi-v7a", "x86", "arm64-v8a", "x86_64"' + ), + aab: z.boolean().describe('If set to true, android project will generate app.aab instead of apk'), + extraGradleParams: z.string().describe('Allows passing extra params to gradle command'), //assembleAndroidTest -DtestBuildType=debug + minifyEnabled: z.boolean().describe('Sets minifyEnabled buildType property in app/build.gradle'), + targetSdkVersion: z + .number() + .describe( + 'Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle' + ), + compileSdkVersion: z + .number() + .describe( + 'Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle' + ), + kotlinVersion: z.string().default('1.7.10').describe('Allows you define custom kotlin version'), + ndkVersion: z + .string() + .describe('Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle'), + supportLibVersion: z + .string() + .describe( + 'Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle' + ), + googleServicesVersion: z + .string() + .describe( + 'Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle' + ), + gradleBuildToolsVersion: z + .string() + .describe( + "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + ), + gradleWrapperVersion: z + .string() + .describe( + 'Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`' + ), + excludedFeatures: z.array(z.string()).describe('Override features definitions in AndroidManifest.xml by exclusion'), + includedFeatures: z.array(z.string()).describe('Override features definitions in AndroidManifest.xml by inclusion'), + buildToolsVersion: z.string().default(DEFAULTS.buildToolsVersion).describe('Override android build tools version'), + disableSigning: z.boolean(), + storeFile: z.string().describe('Name of the store file in android project'), + keyAlias: z.string().describe('Key alias of the store file in android project'), + newArchEnabled: z.boolean().describe('Enables new arch for android. Default: false'), + flipperEnabled: z.boolean().describe('Enables flipper for ios. Default: true'), +}); -export const zodPlatformAndroidFragment = { - enableAndroidX: z.optional(EnableAndroidX), - enableJetifier: z.optional(EnableJetifier), - signingConfig: z.optional( - z - .string() - .default('Debug') - .describe('Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`') - ), - minSdkVersion: z.optional( - z.number().default(28).describe('Minimum Android SDK version device has to have in order for app to run') - ), - multipleAPKs: z.optional( - z - .boolean() - .describe( - 'If set to `true`, apk will be split into multiple ones for each architecture: "armeabi-v7a", "x86", "arm64-v8a", "x86_64"' - ) - ), - aab: z.optional(z.boolean().describe('If set to true, android project will generate app.aab instead of apk')), - extraGradleParams: z.optional(z.string().describe('Allows passing extra params to gradle command')), //assembleAndroidTest -DtestBuildType=debug - minifyEnabled: z.optional(z.boolean().describe('Sets minifyEnabled buildType property in app/build.gradle')), - targetSdkVersion: z.optional( - z - .number() - .describe( - 'Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle' - ) - ), - compileSdkVersion: z.optional( - z - .number() - .describe( - 'Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle' - ) - ), - kotlinVersion: z.optional(z.string().default('1.7.10').describe('Allows you define custom kotlin version')), - ndkVersion: z.optional( - z - .string() - .describe('Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle') - ), - supportLibVersion: z.optional( - z - .string() - .describe( - 'Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle' - ) - ), - googleServicesVersion: z.optional( - z - .string() - .describe( - 'Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle' - ) - ), - gradleBuildToolsVersion: z.optional( - z - .string() - .describe( - "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" - ) - ), - gradleWrapperVersion: z.optional( - z - .string() - .describe( - 'Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`' - ) - ), - excludedFeatures: z.optional( - z.array(z.string()).describe('Override features definitions in AndroidManifest.xml by exclusion') - ), - includedFeatures: z.optional( - z.array(z.string()).describe('Override features definitions in AndroidManifest.xml by inclusion') - ), - buildToolsVersion: z.optional( - z.string().default(DEFAULTS.buildToolsVersion).describe('Override android build tools version') - ), - disableSigning: z.boolean().optional(), - storeFile: z.string().describe('Name of the store file in android project').optional(), - keyAlias: z.string().describe('Key alias of the store file in android project').optional(), - newArchEnabled: z.boolean().optional().describe('Enables new arch for android. Default: false'), - flipperEnabled: z.boolean().optional().describe('Enables flipper for ios. Default: true'), -}; +export type RnvPlatformAndroidFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/base.ts b/packages/core/src/schema/platforms/fragments/base.ts index 9e30bef827..40026bacfa 100644 --- a/packages/core/src/schema/platforms/fragments/base.ts +++ b/packages/core/src/schema/platforms/fragments/base.ts @@ -1,43 +1,28 @@ import { z } from 'zod'; -import { PlatformsKeys } from '../../shared'; +import { zodPlatformsKeys } from '../../shared'; -export const PlatformEngine = z - .string() - .describe('ID of engine to be used for this platform. Note: engine must be registered in `engines` field'); - -export const PlatformEntryFile = z - .string() - .default('index') - .describe('Alternative name of the entry file without `.js` extension'); - -export const BundleAssets = z - .boolean() - .describe( - 'If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds' - ); - -export const EnableSourceMaps = z - .boolean() - .describe('If set to `true` dedicated source map file will be generated alongside of compiled js bundle'); - -export const BundleIsDev = z.boolean().describe('If set to `true` debug build will be generated'); - -export const AssetFolderPlatform = z - .string() - .describe( - 'Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets' - ); - -export const zodPlatformBaseFragment = { - extendPlatform: z.optional(PlatformsKeys), - assetFolderPlatform: z.optional(AssetFolderPlatform), - engine: z.optional(PlatformEngine), +export const zodPlatformBaseFragment = z.object({ + extendPlatform: z.optional(zodPlatformsKeys), + assetFolderPlatform: z + .string() + .describe( + 'Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets' + ), + engine: z + .string() + .describe('ID of engine to be used for this platform. Note: engine must be registered in `engines` field'), //ReactNative specific? - entryFile: z.optional(PlatformEntryFile), - bundleAssets: z.optional(BundleAssets), - enableSourceMaps: z.optional(EnableSourceMaps), - bundleIsDev: z.optional(BundleIsDev), - getJsBundleFile: z.string().optional(), -}; -const _zodPlatformBaseFragment = z.object(zodPlatformBaseFragment); -export type RnvPlatformBaseFragment = z.infer; + entryFile: z.string().default('index').describe('Alternative name of the entry file without `.js` extension'), + bundleAssets: z + .boolean() + .describe( + 'If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds' + ), + enableSourceMaps: z + .boolean() + .describe('If set to `true` dedicated source map file will be generated alongside of compiled js bundle'), + bundleIsDev: z.boolean().describe('If set to `true` debug build will be generated'), + getJsBundleFile: z.string(), +}); + +export type RnvPlatformBaseFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/electron.ts b/packages/core/src/schema/platforms/fragments/electron.ts index 97128a6251..113bafddae 100644 --- a/packages/core/src/schema/platforms/fragments/electron.ts +++ b/packages/core/src/schema/platforms/fragments/electron.ts @@ -1,10 +1,7 @@ import { z } from 'zod'; -export const zodPlatformElectronFragment = { - electronConfig: z - .any() - .optional() - .describe('Allows you to configure electron app as per https://www.electron.build/'), +export const zodPlatformElectronFragment = z.object({ + electronConfig: z.any().describe('Allows you to configure electron app as per https://www.electron.build/'), BrowserWindow: z .object({ width: z.number().optional(), @@ -16,7 +13,6 @@ export const zodPlatformElectronFragment = { .optional() .describe('Extra web preferences of electron app'), }) - .optional() .describe('Allows you to configure electron wrapper app window'), // electronTemplate: z.optional(z.object({})), // electronConfig: { @@ -75,4 +71,6 @@ export const zodPlatformElectronFragment = { // }, // }, // }, -}; +}); + +export type RnvPlatformElectronFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/ios.ts b/packages/core/src/schema/platforms/fragments/ios.ts index 347c622d93..ed8f3d8cf1 100644 --- a/packages/core/src/schema/platforms/fragments/ios.ts +++ b/packages/core/src/schema/platforms/fragments/ios.ts @@ -1,81 +1,61 @@ import { z } from 'zod'; -const IgnoreWarnings = z.boolean().describe('Injects `inhibit_all_warnings` into Podfile'); - -const IgnoreLogs = z.boolean().describe('Passes `-quiet` to xcodebuild command'); - -const DeploymentTarget = z.string().describe('Deployment target for xcodepoj'); - -const OrientationSupport = z.object({ - phone: z.optional(z.array(z.string())), - // phone: [ - // 'UIInterfaceOrientationPortrait', - // 'UIInterfaceOrientationPortraitUpsideDown', - // 'UIInterfaceOrientationLandscapeLeft', - // 'UIInterfaceOrientationLandscapeRight', - // ], - tab: z.optional(z.array(z.string())), - // tab: [ - // 'UIInterfaceOrientationPortrait', - // 'UIInterfaceOrientationPortraitUpsideDown', - // 'UIInterfaceOrientationLandscapeLeft', - // 'UIInterfaceOrientationLandscapeRight', - // ], -}); - -const ExcludedArchs = z - .array(z.string()) - .describe('Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=""`'); //['arm64'] - -const URLScheme = z.string().describe('URL Scheme for the app used for deeplinking'); - -const TeamID = z.string().describe('Apple teamID'); - -const SystemCapabilities = z.record(z.string(), z.boolean()); -const provisioningProfiles = z.record(z.string()); - -export const zodPlatformiOSFragment = { - ignoreWarnings: z.optional(IgnoreWarnings), - ignoreLogs: z.optional(IgnoreLogs), - deploymentTarget: z.optional(DeploymentTarget), - orientationSupport: z.optional(OrientationSupport), - teamID: z.optional(TeamID), - excludedArchs: z.optional(ExcludedArchs), - urlScheme: z.optional(URLScheme), - teamIdentifier: z.optional(z.string().describe('Apple developer team ID')), - scheme: z.string().optional(), - schemeTarget: z.string().optional(), - appleId: z.string().optional(), - provisioningStyle: z.string().optional(), - newArchEnabled: z.boolean().optional().describe('Enables new archs for iOS. Default: false'), - codeSignIdentity: z.string().describe('Special property which tells Xcode how to build your project').optional(), - commandLineArguments: z +export const zodPlatformiOSFragment = z.object({ + ignoreWarnings: z.boolean().describe('Injects `inhibit_all_warnings` into Podfile'), + ignoreLogs: z.boolean().describe('Passes `-quiet` to xcodebuild command'), + deploymentTarget: z.string().describe('Deployment target for xcodepoj'), + orientationSupport: z.object({ + phone: z.optional(z.array(z.string())), + // phone: [ + // 'UIInterfaceOrientationPortrait', + // 'UIInterfaceOrientationPortraitUpsideDown', + // 'UIInterfaceOrientationLandscapeLeft', + // 'UIInterfaceOrientationLandscapeRight', + // ], + tab: z.optional(z.array(z.string())), + // tab: [ + // 'UIInterfaceOrientationPortrait', + // 'UIInterfaceOrientationPortraitUpsideDown', + // 'UIInterfaceOrientationLandscapeLeft', + // 'UIInterfaceOrientationLandscapeRight', + // ], + }), + teamID: z.string().describe('Apple teamID'), + excludedArchs: z .array(z.string()) - .describe('Allows you to pass launch arguments to active scheme') - .optional(), - provisionProfileSpecifier: z.string().optional(), - provisionProfileSpecifiers: z.record(z.string(), z.string()).optional(), - allowProvisioningUpdates: z.boolean().optional(), - provisioningProfiles: z.optional(provisioningProfiles), + .describe('Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=""`'), + urlScheme: z.string().describe('URL Scheme for the app used for deeplinking'), + teamIdentifier: z.optional(z.string().describe('Apple developer team ID')), + scheme: z.string(), + schemeTarget: z.string(), + appleId: z.string(), + provisioningStyle: z.string(), + newArchEnabled: z.boolean().describe('Enables new archs for iOS. Default: false'), + codeSignIdentity: z.string().describe('Special property which tells Xcode how to build your project'), + commandLineArguments: z.array(z.string()).describe('Allows you to pass launch arguments to active scheme'), + provisionProfileSpecifier: z.string(), + provisionProfileSpecifiers: z.record(z.string(), z.string()), + allowProvisioningUpdates: z.boolean(), + provisioningProfiles: z.record(z.string()), codeSignIdentities: z.optional(z.record(z.string(), z.string())), - systemCapabilities: z.optional(SystemCapabilities), - entitlements: z.record(z.string()).optional(), - runScheme: z.string().optional(), - sdk: z.string().optional(), - testFlightId: z.string().optional(), - firebaseId: z.string().optional(), + systemCapabilities: z.record(z.string(), z.boolean()), + entitlements: z.record(z.string()), + runScheme: z.string(), + sdk: z.string(), + testFlightId: z.string(), + firebaseId: z.string(), exportOptions: z .object({ - method: z.string().optional(), - teamID: z.string().optional(), - uploadBitcode: z.boolean().optional(), - compileBitcode: z.boolean().optional(), - uploadSymbols: z.boolean().optional(), - signingStyle: z.string().optional(), - signingCertificate: z.string().optional(), - provisioningProfiles: z.record(z.string()).optional(), + method: z.string(), + teamID: z.string(), + uploadBitcode: z.boolean(), + compileBitcode: z.boolean(), + uploadSymbols: z.boolean(), + signingStyle: z.string(), + signingCertificate: z.string(), + provisioningProfiles: z.record(z.string()), }) - .optional(), + .partial(), // systemCapabilities: { // additionalProperties: true, // type: 'object', @@ -109,4 +89,6 @@ export const zodPlatformiOSFragment = { // }, // ], // }, -}; +}); + +export type RnvPlatformiOSFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/lightning.ts b/packages/core/src/schema/platforms/fragments/lightning.ts index ee305f5d1c..d892950a09 100644 --- a/packages/core/src/schema/platforms/fragments/lightning.ts +++ b/packages/core/src/schema/platforms/fragments/lightning.ts @@ -1,5 +1,7 @@ import { z } from 'zod'; -export const zodPlatformLightningFragment = { - target: z.string().optional(), -}; +export const zodPlatformLightningFragment = z.object({ + target: z.string(), +}); + +export type RnvPlatformLightningFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/nextjs.ts b/packages/core/src/schema/platforms/fragments/nextjs.ts index b86f49e9a0..08fec7cb86 100644 --- a/packages/core/src/schema/platforms/fragments/nextjs.ts +++ b/packages/core/src/schema/platforms/fragments/nextjs.ts @@ -1,18 +1,18 @@ import { z } from 'zod'; -export const zodPlatformNextJsFragment = { - pagesDir: z.string().describe('Custom pages directory used by nextjs. Use relative paths').optional(), +export const zodPlatformNextJsFragment = z.object({ + pagesDir: z.string().describe('Custom pages directory used by nextjs. Use relative paths'), outputDir: z .string() .describe( 'Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths' - ) - .optional(), + ), exportDir: z .string() .describe( 'Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths' - ) - .optional(), + ), nextTranspileModules: z.optional(z.array(z.string())), -}; +}); + +export type RnvPlatformNextJsFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/reactNative.ts b/packages/core/src/schema/platforms/fragments/reactNative.ts index 7951fc454f..9ade313ff5 100644 --- a/packages/core/src/schema/platforms/fragments/reactNative.ts +++ b/packages/core/src/schema/platforms/fragments/reactNative.ts @@ -1,10 +1,10 @@ import { z } from 'zod'; -export const zodPlatformReactNativeFragment = { - reactNativeEngine: z.optional( - z - .enum(['jsc', 'v8-android', 'v8-android-nointl', 'v8-android-jit', 'v8-android-jit-nointl', 'hermes']) - .default('hermes') - .describe('Allows you to define specific native render engine to be used') - ), -}; +export const zodPlatformReactNativeFragment = z.object({ + reactNativeEngine: z + .enum(['jsc', 'v8-android', 'v8-android-nointl', 'v8-android-jit', 'v8-android-jit-nointl', 'hermes']) + .default('hermes') + .describe('Allows you to define specific native render engine to be used'), +}); + +export type RnvPlatformReactNativeFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateAndroid.ts b/packages/core/src/schema/platforms/fragments/templateAndroid.ts index fea2e2461b..87caa2fc2e 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroid.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroid.ts @@ -1,17 +1,138 @@ import { z } from 'zod'; -import { zodTemplateAndroidBaseFragment } from './templateAndroidBase'; -export const zodTemplateAndroidFragment = { - templateAndroid: z.optional( +const GradleProperties = z + .record(z.string(), z.union([z.string(), z.boolean(), z.number()])) + .describe('Overrides values in `gradle.properties` file of generated android based project'); + +const BuildGradle = z + .object({ + allprojects: z.object({ + repositories: z.record(z.string(), z.boolean()).describe('Customize repositories section of build.gradle'), + }), + plugins: z.array(z.string()), + buildscript: z.object({ + repositories: z.record(z.string(), z.boolean()), + dependencies: z.record(z.string(), z.boolean()), + }), + dexOptions: z.record(z.string(), z.boolean()), + injectAfterAll: z.array(z.string()), + }) + .describe('Overrides values in `build.gradle` file of generated android based project'); + +const AppBuildGradle = z + .object({ + apply: z.array(z.string()), + defaultConfig: z.array(z.string()), + buildTypes: z.optional( + z.object({ + debug: z.optional(z.array(z.string())), + release: z.optional(z.array(z.string())), + }) + ), + afterEvaluate: z.optional(z.array(z.string())), + implementations: z.optional(z.array(z.string())), + implementation: z.optional(z.string()), + }) + .describe('Overrides values in `app/build.gradle` file of generated android based project'); + +const ManifestChildBase = z.object({ + tag: z.string(), + 'android:name': z.string(), + 'android:required': z.optional(z.boolean()), + // 'android:name': '.MainApplication', + // 'android:allowBackup': true, + // 'android:largeHeap': true, + // 'android:usesCleartextTraffic': true, + // 'tools:targetApi': 28, +}); + +// type ManifestFeature = { +// tag: string; +// 'android:name': string; +// 'android:required': boolean; +// children?: Array; +// }; + +export type _ManifestChildType = z.infer & { + children?: _ManifestChildType[]; +}; + +const ManifestChildWithChildren: z.ZodType<_ManifestChildType> = ManifestChildBase.extend({ + children: z.lazy(() => ManifestChildWithChildren.array()), +}); + +const AndroidManifest = ManifestChildBase.extend({ + package: z.string().optional(), + children: z.array(ManifestChildWithChildren), +}).describe(`Allows you to directly manipulate \`AndroidManifest.xml\` via json override mechanism +Injects / Overrides values in AndroidManifest.xml file of generated android based project +> IMPORTANT: always ensure that your object contains \`tag\` and \`android:name\` to target correct tag to merge into + `); + +// const Gradle = z.object({ + +// }); + +export const zodTemplateAndroidFragment = z.object({ + gradle_properties: z.optional(GradleProperties), + build_gradle: z.optional(BuildGradle), + app_build_gradle: z.optional(AppBuildGradle), + AndroidManifest_xml: z.optional(AndroidManifest), + strings_xml: z.optional( z.object({ - ...zodTemplateAndroidBaseFragment, - settings_gradle: z.optional(z.object({})), - gradle_wrapper_properties: z.optional(z.object({})), - SplashActivity_java: z.optional(z.object({})), - styles_xml: z.optional(z.object({})), - colors_xml: z.optional(z.object({})), - strings_xml: z.optional(z.object({})), - proguard_rules_pro: z.optional(z.object({})), + children: z.optional( + z.array( + z.object({ + tag: z.string(), + name: z.string(), + child_value: z.string(), + }) + ) + ), }) ), -}; + MainActivity_kt: z.optional( + z.object({ + onCreate: z + .string({}) + .optional() + .default('super.onCreate(savedInstanceState)') + .describe('Overrides super.onCreate method handler of MainActivity.java'), + imports: z.array(z.string()).optional(), + methods: z.array(z.string()).optional(), + createMethods: z.array(z.string()).optional(), + resultMethods: z.array(z.string()).optional(), + }) + ), + MainApplication_kt: z.optional( + z + .object({ + imports: z.array(z.string()).optional(), + methods: z.array(z.string()).optional(), + createMethods: z.array(z.string()).optional(), + packages: z.array(z.string()).optional(), + packageParams: z.array(z.string()).optional(), + + // onCreate: z + // .string({}) + // .optional() + // .default('super.onCreate(savedInstanceState)') + // .describe('Overrides super.onCreate method handler of MainActivity.java'), + }) + .describe('Allows you to configure behaviour of MainActivity') + ), + + settings_gradle: z.optional(z.object({})), + gradle_wrapper_properties: z.optional(z.object({})), + SplashActivity_java: z.optional(z.object({})), + styles_xml: z.optional(z.object({})), + colors_xml: z.optional(z.object({})), + proguard_rules_pro: z.optional(z.object({})), +}); +// .describe('Allows more advanced modifications to Android based project template'); + +export type _ManifestChildWithChildrenType = z.infer; + +export type _AndroidManifestType = z.infer; + +export type RnvTemplateAndroidFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateAndroidBase.ts b/packages/core/src/schema/platforms/fragments/templateAndroidBase.ts deleted file mode 100644 index a6ead071c9..0000000000 --- a/packages/core/src/schema/platforms/fragments/templateAndroidBase.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { z } from 'zod'; - -const GradleProperties = z - .record(z.string(), z.union([z.string(), z.boolean(), z.number()])) - .describe('Overrides values in `gradle.properties` file of generated android based project'); - -const BuildGradle = z - .object({ - allprojects: z.object({ - repositories: z.record(z.string(), z.boolean()).describe('Customize repositories section of build.gradle'), - }), - plugins: z.array(z.string()), - buildscript: z.object({ - repositories: z.record(z.string(), z.boolean()), - dependencies: z.record(z.string(), z.boolean()), - }), - dexOptions: z.record(z.string(), z.boolean()), - injectAfterAll: z.array(z.string()), - }) - .describe('Overrides values in `build.gradle` file of generated android based project'); - -const AppBuildGradle = z - .object({ - apply: z.array(z.string()), - defaultConfig: z.array(z.string()), - buildTypes: z.optional( - z.object({ - debug: z.optional(z.array(z.string())), - release: z.optional(z.array(z.string())), - }) - ), - afterEvaluate: z.optional(z.array(z.string())), - implementations: z.optional(z.array(z.string())), - implementation: z.optional(z.string()), - }) - .describe('Overrides values in `app/build.gradle` file of generated android based project'); - -const ManifestChildBase = z.object({ - tag: z.string(), - 'android:name': z.string(), - 'android:required': z.optional(z.boolean()), - // 'android:name': '.MainApplication', - // 'android:allowBackup': true, - // 'android:largeHeap': true, - // 'android:usesCleartextTraffic': true, - // 'tools:targetApi': 28, -}); - -// type ManifestFeature = { -// tag: string; -// 'android:name': string; -// 'android:required': boolean; -// children?: Array; -// }; - -export type _ManifestChildType = z.infer & { - children?: _ManifestChildType[]; -}; - -const ManifestChildWithChildren: z.ZodType<_ManifestChildType> = ManifestChildBase.extend({ - children: z.lazy(() => ManifestChildWithChildren.array()), -}); - -const AndroidManifest = ManifestChildBase.extend({ - package: z.string().optional(), - children: z.array(ManifestChildWithChildren), -}).describe(`Allows you to directly manipulate \`AndroidManifest.xml\` via json override mechanism -Injects / Overrides values in AndroidManifest.xml file of generated android based project -> IMPORTANT: always ensure that your object contains \`tag\` and \`android:name\` to target correct tag to merge into - `); - -// const Gradle = z.object({ - -// }); - -export const zodTemplateAndroidBaseFragment = { - gradle_properties: z.optional(GradleProperties), - build_gradle: z.optional(BuildGradle), - app_build_gradle: z.optional(AppBuildGradle), - AndroidManifest_xml: z.optional(AndroidManifest), - strings_xml: z.optional( - z.object({ - children: z.optional( - z.array( - z.object({ - tag: z.string(), - name: z.string(), - child_value: z.string(), - }) - ) - ), - }) - ), - MainActivity_kt: z.optional( - z.object({ - onCreate: z - .string({}) - .optional() - .default('super.onCreate(savedInstanceState)') - .describe('Overrides super.onCreate method handler of MainActivity.java'), - imports: z.array(z.string()).optional(), - methods: z.array(z.string()).optional(), - createMethods: z.array(z.string()).optional(), - resultMethods: z.array(z.string()).optional(), - }) - ), - MainApplication_kt: z.optional( - z - .object({ - imports: z.array(z.string()).optional(), - methods: z.array(z.string()).optional(), - createMethods: z.array(z.string()).optional(), - packages: z.array(z.string()).optional(), - packageParams: z.array(z.string()).optional(), - - // onCreate: z - // .string({}) - // .optional() - // .default('super.onCreate(savedInstanceState)') - // .describe('Overrides super.onCreate method handler of MainActivity.java'), - }) - .describe('Allows you to configure behaviour of MainActivity') - ), -}; -// .describe('Allows more advanced modifications to Android based project template'); - -export type _ManifestChildWithChildrenType = z.infer; - -export type _AndroidManifestType = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateXcode.ts b/packages/core/src/schema/platforms/fragments/templateXcode.ts index 224bba9dc4..a3117b7ca3 100644 --- a/packages/core/src/schema/platforms/fragments/templateXcode.ts +++ b/packages/core/src/schema/platforms/fragments/templateXcode.ts @@ -1,10 +1,94 @@ import { z } from 'zod'; -import { zodTemplateXcodeBaseFragment } from './templateXcodeBase'; -export const zodTemplateXcodeFragment = { - templateXcode: z.optional( +const Podfile = z + .object({ + injectLines: z.optional(z.array(z.string())), + post_install: z.optional(z.array(z.string())), + sources: z + .optional(z.array(z.string())) + .describe('Array of URLs that will be injected on top of the Podfile as sources'), + podDependencies: z.optional(z.array(z.string())), + staticPods: z.optional(z.array(z.string())), + header: z + .optional(z.array(z.string())) + .describe('Array of strings that will be injected on top of the Podfile'), + }) + .describe('Allows to manipulate Podfile'); + +const XcodeProj = z.object({ + sourceFiles: z.optional(z.array(z.string())), + resourceFiles: z.optional(z.array(z.string())), + headerFiles: z.optional(z.array(z.string())), + buildPhases: z.optional( + z.array( + z.object({ + shellPath: z.string(), + shellScript: z.string(), + inputPaths: z.array(z.string()), + }) + ) + ), + frameworks: z.optional(z.array(z.string())), + buildSettings: z.optional(z.record(z.string(), z.string())), +}); + +const AppDelegateMethod = z.union([ + z.string(), + z.object({ + order: z.number(), + value: z.string(), + weight: z.number(), + }), +]); + +const AppDelegateMm = z.object({ + appDelegateMethods: z.optional( z.object({ - ...zodTemplateXcodeBaseFragment, + application: z + .object({ + didFinishLaunchingWithOptions: z.array(AppDelegateMethod).optional(), + applicationDidBecomeActive: z.array(AppDelegateMethod).optional(), + open: z.array(AppDelegateMethod).optional(), + supportedInterfaceOrientationsFor: z.array(AppDelegateMethod).optional(), + didReceiveRemoteNotification: z.array(AppDelegateMethod).optional(), + didFailToRegisterForRemoteNotificationsWithError: z.array(AppDelegateMethod).optional(), + didReceive: z.array(AppDelegateMethod).optional(), + didRegister: z.array(AppDelegateMethod).optional(), + didRegisterForRemoteNotificationsWithDeviceToken: z.array(AppDelegateMethod).optional(), + continue: z.array(AppDelegateMethod).optional(), + didConnectCarInterfaceController: z.array(AppDelegateMethod).optional(), + didDisconnectCarInterfaceController: z.array(AppDelegateMethod).optional(), + }) + .optional(), + userNotificationCenter: z + .object({ + willPresent: z.array(AppDelegateMethod).optional(), + didReceiveNotificationResponse: z.array(AppDelegateMethod).optional(), + }) + .optional(), }) ), -}; + appDelegateImports: z.optional(z.array(z.string())), +}); +const AppDelegateH = z.object({ + appDelegateImports: z.optional(z.array(z.string())), + appDelegateExtensions: z.optional(z.array(z.string())), +}); + +const InfoPlist = z.object({}); + +// .describe('Allows more advanced modifications to Xcode based project template'); + +export type _AppDelegateMethodType = z.infer; + +export const zodTemplateXcodeFragment = z.object({ + templateXcode: z.object({ + Podfile: z.optional(Podfile), + project_pbxproj: z.optional(XcodeProj), + AppDelegate_mm: z.optional(AppDelegateMm), + AppDelegate_h: z.optional(AppDelegateH), + Info_plist: z.optional(InfoPlist), + }), +}); + +export type RnvTemplateXcodeFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateXcodeBase.ts b/packages/core/src/schema/platforms/fragments/templateXcodeBase.ts deleted file mode 100644 index 0a3da7cdb8..0000000000 --- a/packages/core/src/schema/platforms/fragments/templateXcodeBase.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { z } from 'zod'; - -const Podfile = z - .object({ - injectLines: z.optional(z.array(z.string())), - post_install: z.optional(z.array(z.string())), - sources: z - .optional(z.array(z.string())) - .describe('Array of URLs that will be injected on top of the Podfile as sources'), - podDependencies: z.optional(z.array(z.string())), - staticPods: z.optional(z.array(z.string())), - header: z - .optional(z.array(z.string())) - .describe('Array of strings that will be injected on top of the Podfile'), - }) - .describe('Allows to manipulate Podfile'); - -const XcodeProj = z.object({ - sourceFiles: z.optional(z.array(z.string())), - resourceFiles: z.optional(z.array(z.string())), - headerFiles: z.optional(z.array(z.string())), - buildPhases: z.optional( - z.array( - z.object({ - shellPath: z.string(), - shellScript: z.string(), - inputPaths: z.array(z.string()), - }) - ) - ), - frameworks: z.optional(z.array(z.string())), - buildSettings: z.optional(z.record(z.string(), z.string())), -}); - -const AppDelegateMethod = z.union([ - z.string(), - z.object({ - order: z.number(), - value: z.string(), - weight: z.number(), - }), -]); - -const AppDelegateMm = z.object({ - appDelegateMethods: z.optional( - z.object({ - application: z - .object({ - didFinishLaunchingWithOptions: z.array(AppDelegateMethod).optional(), - applicationDidBecomeActive: z.array(AppDelegateMethod).optional(), - open: z.array(AppDelegateMethod).optional(), - supportedInterfaceOrientationsFor: z.array(AppDelegateMethod).optional(), - didReceiveRemoteNotification: z.array(AppDelegateMethod).optional(), - didFailToRegisterForRemoteNotificationsWithError: z.array(AppDelegateMethod).optional(), - didReceive: z.array(AppDelegateMethod).optional(), - didRegister: z.array(AppDelegateMethod).optional(), - didRegisterForRemoteNotificationsWithDeviceToken: z.array(AppDelegateMethod).optional(), - continue: z.array(AppDelegateMethod).optional(), - didConnectCarInterfaceController: z.array(AppDelegateMethod).optional(), - didDisconnectCarInterfaceController: z.array(AppDelegateMethod).optional(), - }) - .optional(), - userNotificationCenter: z - .object({ - willPresent: z.array(AppDelegateMethod).optional(), - didReceiveNotificationResponse: z.array(AppDelegateMethod).optional(), - }) - .optional(), - }) - ), - appDelegateImports: z.optional(z.array(z.string())), -}); -const AppDelegateH = z.object({ - appDelegateImports: z.optional(z.array(z.string())), - appDelegateExtensions: z.optional(z.array(z.string())), -}); - -const InfoPlist = z.object({}); - -export const zodTemplateXcodeBaseFragment = { - Podfile: z.optional(Podfile), - project_pbxproj: z.optional(XcodeProj), - AppDelegate_mm: z.optional(AppDelegateMm), - AppDelegate_h: z.optional(AppDelegateH), - Info_plist: z.optional(InfoPlist), -}; -// .describe('Allows more advanced modifications to Xcode based project template'); - -export type _AppDelegateMethodType = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/tizen.ts b/packages/core/src/schema/platforms/fragments/tizen.ts index 4fd30514e1..3a8c13fec2 100644 --- a/packages/core/src/schema/platforms/fragments/tizen.ts +++ b/packages/core/src/schema/platforms/fragments/tizen.ts @@ -1,11 +1,9 @@ import { z } from 'zod'; -const AppName = z.string(); +export const zodPlatformTizenFragment = z.object({ + package: z.string(), + certificateProfile: z.string(), + appName: z.string(), +}); -const CertificateProfile = z.string(); - -export const zodPlatformTizenFragment = { - package: z.optional(z.string()), - certificateProfile: z.optional(CertificateProfile), - appName: z.optional(AppName), -}; +export type RnvPlatformTizenFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/web.ts b/packages/core/src/schema/platforms/fragments/web.ts index 398db70887..2f4d313310 100644 --- a/packages/core/src/schema/platforms/fragments/web.ts +++ b/packages/core/src/schema/platforms/fragments/web.ts @@ -1,7 +1,9 @@ import { z } from 'zod'; -export const zodPlatformWebFragment = { - timestampBuildFiles: z.array(z.string()).optional(), - devServerHost: z.string().optional(), - environment: z.string().optional(), -}; +export const zodPlatformWebFragment = z.object({ + timestampBuildFiles: z.array(z.string()), + devServerHost: z.string(), + environment: z.string(), +}); + +export type RnvPlatformWebFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/webos.ts b/packages/core/src/schema/platforms/fragments/webos.ts index 3e5f5667c7..7d1c71ed94 100644 --- a/packages/core/src/schema/platforms/fragments/webos.ts +++ b/packages/core/src/schema/platforms/fragments/webos.ts @@ -1,5 +1,7 @@ import { z } from 'zod'; -export const zodPlatformWebOSFragment = { - iconColor: z.string().optional(), -}; +export const zodPlatformWebOSFragment = z.object({ + iconColor: z.string(), +}); + +export type RnvPlatformWebOSFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/webpack.ts b/packages/core/src/schema/platforms/fragments/webpack.ts index 9608f10575..49ab4ae59c 100644 --- a/packages/core/src/schema/platforms/fragments/webpack.ts +++ b/packages/core/src/schema/platforms/fragments/webpack.ts @@ -1,12 +1,10 @@ import { z } from 'zod'; -const WebpackConfig = z.object({ - publicUrl: z.string().optional(), - customScripts: z.array(z.string()).optional().describe('Allows you to inject custom script into html header'), -}); - -export const zodPlatformWebpackFragment = { - webpackConfig: z.optional(WebpackConfig), +export const zodPlatformWebpackFragment = z.object({ + webpackConfig: z.object({ + publicUrl: z.string().optional(), + customScripts: z.array(z.string()).optional().describe('Allows you to inject custom script into html header'), + }), // webpackConfig: { // additionalProperties: true, @@ -45,4 +43,6 @@ export const zodPlatformWebpackFragment = { // }, // }, // }, -}; +}); + +export type RnvPlatformWebpackFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/windows.ts b/packages/core/src/schema/platforms/fragments/windows.ts index 12bb3b8158..e692eff095 100644 --- a/packages/core/src/schema/platforms/fragments/windows.ts +++ b/packages/core/src/schema/platforms/fragments/windows.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const zodPlatformWindowsFragment = { +export const zodPlatformWindowsFragment = z.object({ templateVSProject: z.optional( z.object({ language: z.string().describe('Specify generated project language: cpp for C++ or cs for C#').optional(), @@ -64,4 +64,6 @@ export const zodPlatformWindowsFragment = { packageExtension: z.string().optional(), }) ), -}; +}); + +export type RnvPlatformWindowsFragment = z.infer; diff --git a/packages/core/src/schema/platforms/index.ts b/packages/core/src/schema/platforms/index.ts index e58a4ed173..06d7844364 100644 --- a/packages/core/src/schema/platforms/index.ts +++ b/packages/core/src/schema/platforms/index.ts @@ -1,80 +1,56 @@ import { AnyZodObject, z } from 'zod'; -import { PlatformAndroidSchema } from './android'; -import { PlatformiOSSchema } from './ios'; -import { zodPlatformElectronFragment } from './fragments/electron'; -import { PlatformWindowsSchema } from './windows'; -import { zodPlatformWebpackFragment } from './fragments/webpack'; -import { zodPlatformNextJsFragment } from './fragments/nextjs'; -import { zodPlatformLightningFragment } from './fragments/lightning'; -import { zodPlatformReactNativeFragment } from './fragments/reactNative'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { PlatformMacosSchema } from './macos'; -import { PlatformWebSchema } from './web'; -import { PlatformTizenSchema } from './tizen'; -import { PlatformWebosSchema } from './webos'; -import { RnvCommonSchemaFragment, zodCommonSchemaFragment } from '../common'; -import { zodPlatformWebOSFragment } from './fragments/webos'; -import { zodPlatformWindowsFragment } from './fragments/windows'; -import { zodPlatformTizenFragment } from './fragments/tizen'; -import { zodPlatformWebFragment } from './fragments/web'; -import { zodPlatformAndroidFragment } from './fragments/android'; -import { zodPlatformiOSFragment } from './fragments/ios'; -import { zodTemplateAndroidFragment } from './fragments/templateAndroid'; -import { zodTemplateXcodeFragment } from './fragments/templateXcode'; -import { RnvPlatformNameKey } from '../../enums/platformName'; -import { RnvBuildSchemeFragment } from '../shared'; +import { type RnvPlatformElectronFragment, zodPlatformElectronFragment } from './fragments/electron'; +import { type RnvPlatformWebpackFragment, zodPlatformWebpackFragment } from './fragments/webpack'; +import { type RnvPlatformNextJsFragment, zodPlatformNextJsFragment } from './fragments/nextjs'; +import { type RnvPlatformLightningFragment } from './fragments/lightning'; +import { type RnvPlatformReactNativeFragment, zodPlatformReactNativeFragment } from './fragments/reactNative'; +import { type RnvPlatformBaseFragment, zodPlatformBaseFragment } from './fragments/base'; +import { type RnvCommonSchemaFragment, zodCommonSchemaFragment } from '../common'; +import { type RnvPlatformWebOSFragment, zodPlatformWebOSFragment } from './fragments/webos'; +import { type RnvPlatformWindowsFragment, zodPlatformWindowsFragment } from './fragments/windows'; +import { type RnvPlatformTizenFragment, zodPlatformTizenFragment } from './fragments/tizen'; +import { type RnvPlatformWebFragment, zodPlatformWebFragment } from './fragments/web'; +import { type RnvPlatformAndroidFragment, zodPlatformAndroidFragment } from './fragments/android'; +import { type RnvPlatformiOSFragment, zodPlatformiOSFragment } from './fragments/ios'; +import { type RnvTemplateAndroidFragment, zodTemplateAndroidFragment } from './fragments/templateAndroid'; +import { type RnvTemplateXcodeFragment, zodTemplateXcodeFragment } from './fragments/templateXcode'; +import { type RnvPlatformNameKey } from '../../enums/platformName'; +import { type RnvBuildSchemeFragment } from '../shared'; -const zodMergedPlatformPlainObject = zodCommonSchemaFragment.merge( - zodCommonSchemaFragment.merge( - z.object({ - //BASE - ...zodPlatformBaseFragment, - //PLATFORMS - ...zodPlatformiOSFragment, - ...zodPlatformAndroidFragment, - ...zodPlatformWebFragment, - ...zodPlatformTizenFragment, - ...zodPlatformWindowsFragment, - ...zodPlatformWebOSFragment, - //ENGINES - ...zodPlatformLightningFragment, - ...zodPlatformReactNativeFragment, - ...zodPlatformWebpackFragment, - ...zodPlatformElectronFragment, - ...zodPlatformNextJsFragment, - ...zodTemplateAndroidFragment, - ...zodTemplateXcodeFragment, - ...zodPlatformLightningFragment, - }) - ) +const createPlatformSchema = (obj: AnyZodObject): AnyZodObject => { + const zodPlatformSchema = zodCommonSchemaFragment.merge(zodPlatformBaseFragment).merge(obj); + return z.object({ buildSchemes: z.record(z.string(), zodPlatformSchema) }); +}; + +const androidSchema = createPlatformSchema( + zodPlatformAndroidFragment.merge(zodPlatformReactNativeFragment.merge(zodTemplateAndroidFragment)) ); -export type RnvPlatformSchemaFragment = z.infer; +const iosSchema = createPlatformSchema( + zodPlatformiOSFragment.merge(zodPlatformReactNativeFragment.merge(zodTemplateXcodeFragment)) +); -const desc = 'Allows to customize platforms configurations based on chosen build scheme `-s`'; +const tizenSchema = createPlatformSchema( + zodPlatformTizenFragment.merge(zodPlatformWebFragment.merge(zodPlatformWebpackFragment)) +); -const androidSchema = z - .optional(PlatformAndroidSchema.extend({ buildSchemes: z.record(z.string(), PlatformAndroidSchema).optional() })) - .describe(desc); -const iosSchema = z - .optional(PlatformiOSSchema.extend({ buildSchemes: z.record(z.string(), PlatformiOSSchema).optional() })) - .describe(desc); -const macosSchema = z - .optional(PlatformMacosSchema.extend({ buildSchemes: z.record(z.string(), PlatformMacosSchema).optional() })) - .describe(desc); -const windowsSchema = z - .optional(PlatformWindowsSchema.extend({ buildSchemes: z.record(z.string(), PlatformWindowsSchema).optional() })) - .describe(desc); -const tizenSchema = z - .optional(PlatformTizenSchema.extend({ buildSchemes: z.record(z.string(), PlatformTizenSchema).optional() })) - .describe(desc); -const webSchema = z - .optional(PlatformWebSchema.extend({ buildSchemes: z.record(z.string(), PlatformWebSchema).optional() })) - .describe(desc); +const webosSchema = createPlatformSchema( + zodPlatformWebOSFragment.merge(zodPlatformWebFragment.merge(zodPlatformWebpackFragment)) +); -const webosSchema = z - .optional(PlatformWebosSchema.extend({ buildSchemes: z.record(z.string(), PlatformWebosSchema).optional() })) - .describe(desc); +const webSchema = createPlatformSchema( + zodPlatformWebpackFragment.merge(zodPlatformNextJsFragment.merge(zodPlatformWebFragment)) +); + +const macosSchema = createPlatformSchema( + zodPlatformiOSFragment.merge( + zodPlatformReactNativeFragment.merge(zodTemplateXcodeFragment.merge(zodPlatformElectronFragment)) + ) +); + +const windowsSchema = createPlatformSchema( + zodPlatformElectronFragment.merge(zodPlatformReactNativeFragment.merge(zodPlatformWindowsFragment)) +); export const zodPlatformsSchema: AnyZodObject = z .object({ @@ -99,6 +75,22 @@ export const zodPlatformsSchema: AnyZodObject = z }) .describe('Object containing platform configurations'); +export type RnvPlatformSchemaFragment = RnvCommonSchemaFragment & + RnvPlatformBaseFragment & + RnvPlatformiOSFragment & + RnvPlatformAndroidFragment & + RnvPlatformWebFragment & + RnvPlatformTizenFragment & + RnvPlatformWindowsFragment & + RnvPlatformWebOSFragment & + RnvPlatformLightningFragment & + RnvPlatformReactNativeFragment & + RnvPlatformWebpackFragment & + RnvPlatformElectronFragment & + RnvPlatformNextJsFragment & + RnvTemplateAndroidFragment & + RnvTemplateXcodeFragment; + // export type RnvPlatformsSchema = z.infer; export type RnvPlatformBuildSchemeSchema = RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformSchemaFragment; diff --git a/packages/core/src/schema/platforms/ios.ts b/packages/core/src/schema/platforms/ios.ts deleted file mode 100644 index 5650c37d1d..0000000000 --- a/packages/core/src/schema/platforms/ios.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { z } from 'zod'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { zodPlatformiOSFragment } from './fragments/ios'; -import { zodCommonSchemaFragment } from '../common'; -import { zodTemplateXcodeFragment } from './fragments/templateXcode'; -import { zodPlatformReactNativeFragment } from './fragments/reactNative'; - -export const PlatformiOSSchema = zodCommonSchemaFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - ...zodPlatformiOSFragment, - ...zodPlatformReactNativeFragment, - ...zodTemplateXcodeFragment, - }) -); diff --git a/packages/core/src/schema/platforms/macos.ts b/packages/core/src/schema/platforms/macos.ts deleted file mode 100644 index 8bc162067e..0000000000 --- a/packages/core/src/schema/platforms/macos.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { z } from 'zod'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { zodCommonSchemaFragment } from '../common'; -import { zodPlatformiOSFragment } from './fragments/ios'; -import { zodPlatformElectronFragment } from './fragments/electron'; -import { zodTemplateXcodeFragment } from './fragments/templateXcode'; -import { zodPlatformReactNativeFragment } from './fragments/reactNative'; - -export const PlatformMacosSchema = zodCommonSchemaFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - ...zodPlatformiOSFragment, - ...zodPlatformReactNativeFragment, - ...zodTemplateXcodeFragment, - ...zodPlatformElectronFragment, - }) -); diff --git a/packages/core/src/schema/platforms/tizen.ts b/packages/core/src/schema/platforms/tizen.ts deleted file mode 100644 index 47ba9658bd..0000000000 --- a/packages/core/src/schema/platforms/tizen.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { z } from 'zod'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { zodPlatformTizenFragment } from './fragments/tizen'; -import { zodCommonSchemaFragment } from '../common'; -import { zodPlatformWebpackFragment } from './fragments/webpack'; -import { zodPlatformWebFragment } from './fragments/web'; - -export const PlatformTizenSchema = zodCommonSchemaFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - ...zodPlatformTizenFragment, - ...zodPlatformWebFragment, - ...zodPlatformWebpackFragment, - }) -); diff --git a/packages/core/src/schema/platforms/web.ts b/packages/core/src/schema/platforms/web.ts deleted file mode 100644 index 05be77cfbc..0000000000 --- a/packages/core/src/schema/platforms/web.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { z } from 'zod'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { zodPlatformWebpackFragment } from './fragments/webpack'; -import { zodCommonSchemaFragment } from '../common'; -import { zodPlatformWebFragment } from './fragments/web'; -import { zodPlatformNextJsFragment } from './fragments/nextjs'; - -export const PlatformWebSchema = zodCommonSchemaFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - ...zodPlatformWebpackFragment, - ...zodPlatformNextJsFragment, - ...zodPlatformWebFragment, - }) -); diff --git a/packages/core/src/schema/platforms/webos.ts b/packages/core/src/schema/platforms/webos.ts deleted file mode 100644 index d08b2e511c..0000000000 --- a/packages/core/src/schema/platforms/webos.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { z } from 'zod'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { zodCommonSchemaFragment } from '../common'; -import { zodPlatformWebpackFragment } from './fragments/webpack'; -import { zodPlatformWebFragment } from './fragments/web'; -import { zodPlatformWebOSFragment } from './fragments/webos'; - -export const PlatformWebosSchema = zodCommonSchemaFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - ...zodPlatformWebFragment, - ...zodPlatformWebpackFragment, - ...zodPlatformWebOSFragment, - }) -); diff --git a/packages/core/src/schema/platforms/windows.ts b/packages/core/src/schema/platforms/windows.ts deleted file mode 100644 index c6b5065116..0000000000 --- a/packages/core/src/schema/platforms/windows.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { z } from 'zod'; -import { zodPlatformBaseFragment } from './fragments/base'; -import { zodCommonSchemaFragment } from '../common'; -import { zodPlatformElectronFragment } from './fragments/electron'; -import { zodPlatformWindowsFragment } from './fragments/windows'; -import { zodPlatformReactNativeFragment } from './fragments/reactNative'; - -export const PlatformWindowsSchema = zodCommonSchemaFragment.merge( - z.object({ - ...zodPlatformBaseFragment, - ...zodPlatformElectronFragment, - ...zodPlatformReactNativeFragment, - ...zodPlatformWindowsFragment, - }) -); diff --git a/packages/core/src/schema/plugins/fragments/base.ts b/packages/core/src/schema/plugins/fragments/base.ts index 9eb6f2b384..78d06f697c 100644 --- a/packages/core/src/schema/plugins/fragments/base.ts +++ b/packages/core/src/schema/plugins/fragments/base.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { SupportedPlatforms } from '../../shared'; +import { zodSupportedPlatforms } from '../../shared'; const Disabled = z.boolean().default(false).describe('Marks plugin disabled'); @@ -51,7 +51,7 @@ const Deprecated = z const DisablePluginTemplateOverrides = z.boolean().describe('Disables plugin overrides for selected plugin'); export const zodPluginBaseFragment = { - supportedPlatforms: SupportedPlatforms.optional(), + supportedPlatforms: zodSupportedPlatforms.optional(), disabled: z.optional(Disabled), props: z.optional(Props), version: z.optional(Version), diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index fbc7e2ccbd..f0a02143cb 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -1,40 +1,30 @@ import { z } from 'zod'; import { RnvPlatforms } from '../../enums/platformName'; -export const Runtime = z +export const zodRuntime = z .any() .describe( 'This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code' ); -export const PlatformsKeys = z.enum(RnvPlatforms); +export const zodPlatformsKeys = z.enum(RnvPlatforms); -export const SupportedPlatforms = z - .array(PlatformsKeys) +export const zodSupportedPlatforms = z + .array(zodPlatformsKeys) .describe('Array list of all supported platforms in current project'); -export type _PlatformsKeysType = z.infer; +export type _PlatformsKeysType = z.infer; -export const HexColor = z.string().min(4).max(9).regex(/^#/); - -export const Ext = z +export const zodExt = z .any() .describe( 'Object used to extend your renative with custom props. This allows renative json schema to be validated' ); -export const ExtendTemplate = z - .string() - .describe( - 'You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`' - ); - -export const DefaultTargets = z - .record(PlatformsKeys, z.string()) +export const zodDefaultTargets = z + .record(zodPlatformsKeys, z.string()) .describe('Define targets to be used when -t is not set on any project run'); -export const BundleId = z.string().describe('Bundle ID of application. ie: com.example.myapp'); - export const zodBuildSchemeFragment = z.object({ enabled: z.optional(z.boolean().describe('Defines whether build scheme shows up in options to run')), description: z.optional( @@ -49,7 +39,7 @@ export type RnvBuildSchemeFragment = z.infer; export const NpmDep = z.record(z.string(), z.string()); -export const TemplateConfig = z +export const zodTemplateConfigFragment = z .object({ name: z.string().optional(), version: z.string().optional(), @@ -61,7 +51,7 @@ export const TemplateConfig = z z.object({ paths: z.array(z.string()), engines: z.array(z.string()).optional(), - platforms: SupportedPlatforms.optional(), + platforms: zodSupportedPlatforms.optional(), }), ]) ) @@ -87,8 +77,9 @@ export const TemplateConfig = z ), }) .describe('Used in `renative.template.json` allows you to define template behaviour.'); +export type RnvTemplateConfigFragment = z.infer; -export const ProjectTemplates = z.record( +export const zodProjectTemplates = z.record( z.string(), z.object({ packageName: z.string().optional(), diff --git a/packages/core/src/schema/configFiles/master.ts b/spec/zod_schema_master.ts similarity index 97% rename from packages/core/src/schema/configFiles/master.ts rename to spec/zod_schema_master.ts index 980280876f..c6441d83db 100644 --- a/packages/core/src/schema/configFiles/master.ts +++ b/spec/zod_schema_master.ts @@ -1,6 +1,6 @@ import { AnyZodObject, z } from 'zod'; -import { PlatformsKeys, SupportedPlatforms } from '../shared'; +import { zodPlatformsKeys, zodSupportedPlatforms } from '../shared'; const _generatePlatformsSchema = (schema: AnyZodObject) => { return z.object({ @@ -47,7 +47,7 @@ const SchemaPluginPlatform = z.object({ }); const SchemaPluginBase = z.object({ - supportedPlatforms: SupportedPlatforms.optional(), + supportedPlatforms: zodSupportedPlatforms.optional(), disabled: z.boolean().default(false).describe('Marks plugin disabled'), props: z.record(z.string(), z.string()).describe('Custom props passed to plugin'), version: z.string().describe('Version of plugin. Typically package version'), @@ -113,7 +113,7 @@ const SchemaPlatform = z.object({ .string() .describe('ID of engine to be used for this platform. Note: engine must be registered in `engines` field'), - extendPlatform: z.optional(PlatformsKeys), + extendPlatform: z.optional(zodPlatformsKeys), assetFolderPlatform: z .string() .describe( @@ -208,11 +208,11 @@ const SchemaProject = z.object({ defaults: z .object({ ports: z - .record(PlatformsKeys, z.number()) //TODO maxValue(65535) + .record(zodPlatformsKeys, z.number()) //TODO maxValue(65535) .describe( 'Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts' ), - supportedPlatforms: SupportedPlatforms, + supportedPlatforms: zodSupportedPlatforms, portOffset: z.number().describe('Offset each port default value by increment'), defaultCommandSchemes: z .record(z.enum(['run', 'export', 'build']), z.string()) @@ -220,7 +220,7 @@ const SchemaProject = z.object({ 'List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`' ), targets: z - .record(PlatformsKeys, z.string()) + .record(zodPlatformsKeys, z.string()) .describe('Override of default targets specific to this project'), }) .describe('Default system config for this project'), @@ -250,7 +250,7 @@ const SchemaProject = z.object({ .object({ appConfigsDir: z.string().describe('Custom path to appConfigs. defaults to `./appConfigs`'), platformTemplatesDirs: z - .record(PlatformsKeys, z.string()) + .record(zodPlatformsKeys, z.string()) .describe( 'Custom location of ejected platform templates. this is populated after you run `rnv platform eject`' ), @@ -310,7 +310,7 @@ const SchemaProject = z.object({ install: z.object({ script: z.string(), platform: z.record( - PlatformsKeys, + zodPlatformsKeys, z.object({ ignore: z.boolean(), ignoreTasks: z.array(z.string()), @@ -349,7 +349,7 @@ const SchemaTemplate = z z.object({ paths: z.array(z.string()), engines: z.array(z.string()).optional(), - platforms: SupportedPlatforms.optional(), + platforms: zodSupportedPlatforms.optional(), }), ]) ) From 3b172532c214cd7c9bcef2373946d6bc42b279bd Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 03:17:29 +0200 Subject: [PATCH 153/175] type fixes --- packages/core/src/api/types.ts | 5 ++++- packages/core/src/context/contextProps.ts | 11 +++++------ packages/core/src/schema/common/index.ts | 6 ++++-- packages/core/src/schema/configFiles/app.ts | 2 +- .../core/src/schema/configFiles/buildConfig.ts | 4 ++-- packages/core/src/schema/configFiles/engine.ts | 2 +- .../core/src/schema/configFiles/integration.ts | 2 +- .../core/src/schema/configFiles/overrides.ts | 4 ++-- packages/core/src/schema/configFiles/project.ts | 6 ++++-- packages/core/src/schema/configFiles/types.ts | 12 ++++++------ packages/core/src/schema/index.ts | 2 +- .../schema/plugins/fragments/platformAndroid.ts | 4 ++-- .../src/schema/plugins/fragments/platformIos.ts | 4 ++-- packages/core/src/schema/types.ts | 17 ++++++++--------- 14 files changed, 43 insertions(+), 38 deletions(-) diff --git a/packages/core/src/api/types.ts b/packages/core/src/api/types.ts index fb4d3a289b..ec313f4483 100644 --- a/packages/core/src/api/types.ts +++ b/packages/core/src/api/types.ts @@ -113,4 +113,7 @@ export type PromptParams = { export type PromptRenderFn = (i: number, obj: any, mapping: any, defaultVal: string) => string; -export type GetConfigPropFn = (key: T, defaultVal?: ConfigProp[T]) => ConfigProp[T]; +export type GetConfigPropFn = ( + key: T, + defaultVal?: ConfigProp[T] +) => ConfigProp[T] | undefined; diff --git a/packages/core/src/context/contextProps.ts b/packages/core/src/context/contextProps.ts index ea884fb090..6488a145e1 100644 --- a/packages/core/src/context/contextProps.ts +++ b/packages/core/src/context/contextProps.ts @@ -8,6 +8,7 @@ import { TimestampPathsConfig } from '../system/types'; import path from 'path'; import { fsExistsSync } from '../system/fs'; import { getContext } from './provider'; +import { RnvCommonBuildSchemeSchema } from '../schema/common'; const _getValueOrMergedObject = (resultScheme: object, resultPlatforms: object, resultCommon: object) => { if (resultScheme !== undefined) { @@ -27,10 +28,7 @@ const _getValueOrMergedObject = (resultScheme: object, resultPlatforms: object, return resultCommon; }; -export const getConfigProp: GetConfigPropFn = ( - key: T, - defaultVal?: ConfigProp[T] -): ConfigProp[T] => { +export const getConfigProp: GetConfigPropFn = (key: T, defaultVal?: ConfigProp[T]) => { const c = getContext(); if (!c.buildConfig) { logError('getConfigProp: c.buildConfig is undefined!'); @@ -44,7 +42,7 @@ export const _getConfigProp = ( key: T, defaultVal?: ConfigProp[T], sourceObj?: Partial -): ConfigProp[T] => { +): ConfigProp[T] | undefined => { const { platform } = c; if (!sourceObj || !platform) return undefined; @@ -63,7 +61,8 @@ export const _getConfigProp = ( const resultCommonRoot = getFlavouredProp(sourceObj.common || {}, key as CommonPropKey); - const bs = (c.runtime.scheme && sourceObj.common?.buildSchemes?.[c.runtime.scheme]) || {}; + const bs: RnvCommonBuildSchemeSchema = + (!!c.runtime.scheme && sourceObj.common?.buildSchemes?.[c.runtime.scheme]) || {}; const resultCommonScheme = c.runtime.scheme && getFlavouredProp(bs, key as CommonBuildSchemeKey); diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index a3eb8c5c5d..09a62287ba 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -86,8 +86,10 @@ export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment ) .describe('Common config props used as default props for all available buildSchemes'); -export type RnvCommonBuildSchemeSchema = RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformBaseFragment; +export type RnvCommonBuildSchemeSchema = Partial< + RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformBaseFragment +>; -export type RnvCommonSchema = RnvCommonSchemaFragment & { +export type RnvCommonSchema = Partial & { buildSchemes?: Record; }; diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index c3584cf8b3..b54c5cd57f 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -32,7 +32,7 @@ export const RootAppSchema: AnyZodObject = zodRootAppBaseFragment .merge(zodRootProjectPlatformsSchema) .merge(zodRootProjectPluginsSchema); -export type RnvRootAppSchemaType = RnvRootAppBaseFragment & { +export type RnvRootAppSchema = RnvRootAppBaseFragment & { common?: RnvCommonSchema; platforms?: RnvPlatformsSchema; plugins?: RnvPluginsSchema; diff --git a/packages/core/src/schema/configFiles/buildConfig.ts b/packages/core/src/schema/configFiles/buildConfig.ts index 95172846b0..b2530d7a41 100644 --- a/packages/core/src/schema/configFiles/buildConfig.ts +++ b/packages/core/src/schema/configFiles/buildConfig.ts @@ -1,6 +1,6 @@ import { type RnvRootAppBaseFragment } from './app'; import { type _RootLocalSchemaType } from './local'; -import { type RnvRootProjectBaseFragment } from './project'; +import { type RnvRootProjectSchema } from './project'; import { type _RootTemplatesSchemaType } from './templates'; import { type _RootWorkspaceSchemaType } from './workspace'; @@ -34,7 +34,7 @@ export type ConfigFileBuildConfig = RootPluginsMerged & //Project + App // Required & - RnvRootProjectBaseFragment & + RnvRootProjectSchema & _RootLocalSchemaType & RnvRootAppBaseFragment; // Common & diff --git a/packages/core/src/schema/configFiles/engine.ts b/packages/core/src/schema/configFiles/engine.ts index 7735ca7cc0..1d93364931 100644 --- a/packages/core/src/schema/configFiles/engine.ts +++ b/packages/core/src/schema/configFiles/engine.ts @@ -14,7 +14,7 @@ const zodEngineNpm = z const zodEnginePlatform = z.object({ engine: z.optional(z.string()), - npm: z.optional(zodNpmDep), + npm: z.optional(zodEngineNpm), }); export const RootEngineSchema = z.object({ diff --git a/packages/core/src/schema/configFiles/integration.ts b/packages/core/src/schema/configFiles/integration.ts index 9e7316bab6..6a485e6349 100644 --- a/packages/core/src/schema/configFiles/integration.ts +++ b/packages/core/src/schema/configFiles/integration.ts @@ -3,5 +3,5 @@ import { z } from 'zod'; export const zodRootIntegrationSchema = z.object({ packageName: z.string(), }); - +// export type RnvRootIntegrationSchema = z.infer; diff --git a/packages/core/src/schema/configFiles/overrides.ts b/packages/core/src/schema/configFiles/overrides.ts index 387f08c8fb..a5e8fc8ec8 100644 --- a/packages/core/src/schema/configFiles/overrides.ts +++ b/packages/core/src/schema/configFiles/overrides.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; -export const RootOverridesSchema = z.object({ +export const zodRootOverridesSchema = z.object({ overrides: z.record(z.string(), z.record(z.string(), z.string())), }); -export type _RootOverridesSchemaType = z.infer; +export type RnvRootOverridesSchema = z.infer; diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 2a2b625358..ff3d99d81f 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -87,6 +87,7 @@ const zodRootProjectBaseFragment = z ).describe(` Allows you to define custom plugin template scopes. default scope for all plugins is \`rnv\`.`), }) + .partial() .describe('Define custom paths for RNV to look into'), permissions: z .object({ @@ -162,7 +163,9 @@ const zodRootProjectBaseFragment = z // currentTemplate: CurrentTemplate, }) .partial(); -export type RnvRootProjectBaseFragment = z.infer; +export type RnvRootProjectBaseFragment = z.infer & { + templateConfig: RnvTemplateConfigFragment; +}; // NOTE: Need to explictly type this to generic zod object to avoid TS error: // The inferred type of this node exceeds the maximum length the compiler will serialize... @@ -180,5 +183,4 @@ export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { common?: RnvCommonSchema; platforms?: RnvPlatformsSchema; plugins?: RnvPluginsSchema; - templateConfig: RnvTemplateConfigFragment; }; diff --git a/packages/core/src/schema/configFiles/types.ts b/packages/core/src/schema/configFiles/types.ts index 74c597151e..dffa3bc196 100644 --- a/packages/core/src/schema/configFiles/types.ts +++ b/packages/core/src/schema/configFiles/types.ts @@ -1,4 +1,4 @@ -import { RnvRootAppSchemaType } from './app'; +import { RnvRootAppSchema } from './app'; import { RnvRootEngineSchema } from './engine'; import { _RootWorkspaceSchemaType } from './workspace'; import { RnvRootIntegrationSchema } from './integration'; @@ -6,17 +6,17 @@ import { _RootLocalSchemaType } from './local'; import { _RootPluginSchemaType } from './plugin'; import { _RootPrivateSchemaType } from './private'; import { RnvRootProjectSchema } from './project'; -import { _RootTemplateSchemaType } from './template'; import { _RootTemplatesSchemaType } from './templates'; import { RnvRootWorkspacesSchema } from './workspaces'; import { _RootRuntimeSchemaType } from './runtime'; -import { _RootOverridesSchemaType } from './overrides'; +import { RnvRootOverridesSchema } from './overrides'; +import { RnvRootTemplateSchema } from './template'; // renative.json export type ConfigFileProject = RnvRootProjectSchema; // appConfigs/**/renative.json -export type ConfigFileApp = RnvRootAppSchemaType; +export type ConfigFileApp = RnvRootAppSchema; // renative.engine.json export type ConfigFileEngine = RnvRootEngineSchema; @@ -31,7 +31,7 @@ export type ConfigFileLocal = _RootLocalSchemaType; export type ConfigFilePrivate = _RootPrivateSchemaType; // renative.template.json -export type ConfigFileTemplate = _RootTemplateSchemaType; +export type ConfigFileTemplate = RnvRootTemplateSchema; // renative.templates.json export type ConfigFileTemplates = _RootTemplatesSchemaType; @@ -49,4 +49,4 @@ export type ConfigFileIntegration = RnvRootIntegrationSchema; export type ConfigFileRuntime = _RootRuntimeSchemaType; //overrides.json -export type ConfigFileOverrides = _RootOverridesSchemaType; +export type ConfigFileOverrides = RnvRootOverridesSchema; diff --git a/packages/core/src/schema/index.ts b/packages/core/src/schema/index.ts index ed49950e50..d9f0559820 100644 --- a/packages/core/src/schema/index.ts +++ b/packages/core/src/schema/index.ts @@ -7,7 +7,7 @@ export { RootPluginSchema } from './configFiles/plugin'; export { RootPrivateSchema } from './configFiles/private'; export { RootTemplateSchema } from './configFiles/template'; export { RootTemplatesSchema } from './configFiles/templates'; -export { RootIntegrationSchema } from './configFiles/integration'; +export { zodRootIntegrationSchema } from './configFiles/integration'; export { ConfigFileBuildConfig } from './configFiles/buildConfig'; diff --git a/packages/core/src/schema/plugins/fragments/platformAndroid.ts b/packages/core/src/schema/plugins/fragments/platformAndroid.ts index 4b18bcc189..a522d8bce7 100644 --- a/packages/core/src/schema/plugins/fragments/platformAndroid.ts +++ b/packages/core/src/schema/plugins/fragments/platformAndroid.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { zodTemplateAndroidBaseFragment } from '../../platforms/fragments/templateAndroidBase'; +import { zodTemplateAndroidFragment } from '../../platforms/fragments/templateAndroid'; export const zodPluginPlatformAndroidFragment = { projectName: z.optional(z.string()), @@ -7,5 +7,5 @@ export const zodPluginPlatformAndroidFragment = { skipImplementation: z.optional(z.boolean()), implementation: z.optional(z.string()), package: z.optional(z.string()), - templateAndroid: z.optional(z.object(zodTemplateAndroidBaseFragment)), + templateAndroid: zodTemplateAndroidFragment, }; diff --git a/packages/core/src/schema/plugins/fragments/platformIos.ts b/packages/core/src/schema/plugins/fragments/platformIos.ts index 9cbd882197..36deae395f 100644 --- a/packages/core/src/schema/plugins/fragments/platformIos.ts +++ b/packages/core/src/schema/plugins/fragments/platformIos.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { zodTemplateXcodeBaseFragment } from '../../platforms/fragments/templateXcodeBase'; +import { zodTemplateXcodeFragment } from '../../platforms/fragments/templateXcode'; const Git = z.string().describe('Alternative git url for pod instead of version'); @@ -16,7 +16,7 @@ export const zodPluginPlatformiOSFragment = { podNames: z.optional(z.array(z.string())), podName: z.optional(z.string()), staticFrameworks: z.optional(z.array(z.string())), - templateXcode: z.optional(z.object(zodTemplateXcodeBaseFragment)), + templateXcode: zodTemplateXcodeFragment, isStatic: z.boolean().optional(), buildType: z.optional(BuildType), }; diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 8e04dd9c94..f8f5cc4aad 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -1,22 +1,21 @@ import type { RnvPluginPlatformSchema, RnvPluginSchema } from './plugins'; -import type { _AppDelegateMethodType } from './platforms/fragments/templateXcodeBase'; +import type { _AppDelegateMethodType } from './platforms/fragments/templateXcode'; import type { RnvPlatformSchemaFragment } from './platforms'; -import type { _RootAppBaseSchemalType } from './configFiles/app'; - import type { RnvRootProjectBaseFragment } from './configFiles/project'; -import type { _AndroidManifestType, _ManifestChildWithChildrenType } from './platforms/fragments/templateAndroidBase'; +import type { _AndroidManifestType, _ManifestChildWithChildrenType } from './platforms/fragments/templateAndroid'; import type { _MergedPlatformPrivateObjectType } from './configFiles/private'; import type { ConfigFileBuildConfig } from './configFiles/buildConfig'; import { type RnvPlatformNameKey } from '../enums/platformName'; +import { RnvRootAppBaseFragment } from './configFiles/app'; //=============================== // NORMALIZED (MERGED+NORMALIZED) //=============================== -export type ConfigProp = RnvRootProjectBaseFragment & - _RootAppBaseSchemalType & - _MergedPlatformPrivateObjectType & - RnvPlatformSchemaFragment; +export type ConfigProp = Required & + Required & + Required<_MergedPlatformPrivateObjectType> & + Required; export type ConfigPropKey = keyof ConfigProp; @@ -26,7 +25,7 @@ export type ConfigPropKey = keyof ConfigProp; export type RenativeConfigPlugin = RnvPluginSchema; -export type RenativeConfigPaths = ConfigFileBuildConfig['paths']; +export type RenativeConfigPaths = RnvRootProjectBaseFragment['paths']; export type RenativeConfigPluginPlatform = RnvPluginPlatformSchema; From d79a254402dd41df8a73dd05b646b5bd2f66fd60 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 04:03:50 +0200 Subject: [PATCH 154/175] update schemas --- packages/build-hooks-schema/src/schema.ts | 4 +- packages/core/src/engines/index.ts | 10 +- packages/core/src/plugins/index.ts | 3 +- packages/core/src/schema/common/index.ts | 133 ++++++------- packages/core/src/schema/configFiles/app.ts | 36 ++-- .../core/src/schema/configFiles/engine.ts | 24 +-- .../core/src/schema/configFiles/project.ts | 8 +- .../core/src/schema/configFiles/template.ts | 4 +- .../core/src/schema/configFiles/templates.ts | 64 +++--- .../src/schema/platforms/fragments/android.ts | 133 +++++++------ .../src/schema/platforms/fragments/base.ts | 48 ++--- .../schema/platforms/fragments/electron.ts | 146 +++++++------- .../src/schema/platforms/fragments/ios.ts | 182 +++++++++--------- .../schema/platforms/fragments/lightning.ts | 8 +- .../src/schema/platforms/fragments/nextjs.ts | 30 +-- .../schema/platforms/fragments/reactNative.ts | 14 +- .../platforms/fragments/templateAndroid.ts | 112 ++++++----- .../platforms/fragments/templateXcode.ts | 22 ++- .../src/schema/platforms/fragments/tizen.ts | 12 +- .../src/schema/platforms/fragments/web.ts | 12 +- .../src/schema/platforms/fragments/webos.ts | 8 +- .../src/schema/platforms/fragments/webpack.ts | 91 ++++----- .../src/schema/platforms/fragments/windows.ts | 138 +++++++------ .../core/src/schema/plugins/fragments/base.ts | 43 +++-- .../plugins/fragments/platformAndroid.ts | 7 +- .../schema/plugins/fragments/platformBase.ts | 5 +- .../schema/plugins/fragments/platformIos.ts | 7 +- packages/core/src/schema/plugins/index.ts | 80 +++----- packages/core/src/schema/types.ts | 2 +- .../bootstrap/questions/supportedPlatforms.ts | 5 +- packages/sdk-android/src/manifestParser.ts | 2 +- 31 files changed, 724 insertions(+), 669 deletions(-) diff --git a/packages/build-hooks-schema/src/schema.ts b/packages/build-hooks-schema/src/schema.ts index ad139ac3d0..53c33f73d3 100644 --- a/packages/build-hooks-schema/src/schema.ts +++ b/packages/build-hooks-schema/src/schema.ts @@ -1,7 +1,6 @@ import { RootAppSchema, RootEngineSchema, - RootIntegrationSchema, RootLocalSchema, RootPluginSchema, RootPrivateSchema, @@ -11,6 +10,7 @@ import { RootWorkspaceSchema, getContext, logSuccess, + zodRootIntegrationSchema, } from '@rnv/core'; import { zodToJsonSchema } from 'zod-to-json-schema'; import { z } from 'zod'; @@ -27,7 +27,7 @@ export const generateSchema = async () => { _generateSchemaFile({ schema: RootPrivateSchema, schemaId: 'rnv.private' }); _generateSchemaFile({ schema: RootPluginSchema, schemaId: 'rnv.plugin' }); _generateSchemaFile({ schema: RootTemplatesSchema, schemaId: 'rnv.templates' }); - _generateSchemaFile({ schema: RootIntegrationSchema, schemaId: 'rnv.integration' }); + _generateSchemaFile({ schema: zodRootIntegrationSchema, schemaId: 'rnv.integration' }); logSuccess('Sucessfully exported renative.project.json schema'); }; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index cacd8602ef..d763e2e40a 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -22,7 +22,9 @@ export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, const c = getContext(); logDefault(`registerEngine:${engine.config.id}`); - c.runtime.enginesById[engine.config.id] = engine; + if (engine.config.id) { + c.runtime.enginesById[engine.config.id] = engine; + } c.runtime.enginesByIndex.push(engine); if (engConfig?.packageName) { @@ -68,7 +70,11 @@ export const registerEngineExtension = (ext: string | null, eExt?: string | null export const generateEngineExtensions = (exts: Array, config: ConfigFileEngine) => { const { id, engineExtension } = config; - let extArr = [...registerEngineExtension(id)]; + let extArr: string[] = []; + if (id) { + extArr = [...registerEngineExtension(id)]; + } + exts.forEach((ext) => { extArr = extArr.concat(registerEngineExtension(ext, engineExtension)); }); diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 529e0f5567..1471e6762b 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -27,6 +27,7 @@ import { RnvFileName } from '../enums/fileName'; import { AsyncCallback } from '../projects/types'; import { createDependencyMutation } from '../projects/mutations'; import { updatePackage } from '../projects/package'; +import { RnvPluginPlatformSchema } from '../schema/plugins'; const _getPluginScope = (plugin: RenativeConfigPlugin | string): RnvPluginScope => { if (typeof plugin === 'string') { @@ -484,7 +485,7 @@ export const parsePlugins = ( (includedPlugins.includes('*') || includedPlugins.includes(key)) && !excludedPlugins.includes(key) ) { - const pluginPlat = plugin[platform] || {}; + const pluginPlat: RnvPluginPlatformSchema = plugin[platform] || {}; // NOTE: we do not want to disable plugin just because object is missing. instead we will let people to do it explicitly // { diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index 09a62287ba..c9668499c8 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -2,75 +2,78 @@ import { AnyZodObject, z } from 'zod'; import { zodBuildSchemeFragment, zodExt, zodRuntime, RnvBuildSchemeFragment } from '../shared'; import { RnvPlatformBaseFragment, zodPlatformBaseFragment } from '../platforms/fragments/base'; -export const zodCommonSchemaFragment = z.object({ - includedPermissions: z - .array(z.string()) - .describe( - "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" - ), - excludedPermissions: z - .array(z.string()) - .describe( - "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" - ), - id: z.string().describe('Bundle ID of application. ie: com.example.myapp'), - idSuffix: z.string().optional(), - version: z.string().describe('Semver style version of your app'), - versionCode: z.string().describe('Manual verride of generated version code'), - versionFormat: z.string().describe(`Allows you to fine-tune app version defined in package.json or renative.json. +export const zodCommonSchemaFragment = z + .object({ + includedPermissions: z + .array(z.string()) + .describe( + "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + ), + excludedPermissions: z + .array(z.string()) + .describe( + "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + ), + id: z.string().describe('Bundle ID of application. ie: com.example.myapp'), + idSuffix: z.string().optional(), + version: z.string().describe('Semver style version of your app'), + versionCode: z.string().describe('Manual verride of generated version code'), + versionFormat: z.string() + .describe(`Allows you to fine-tune app version defined in package.json or renative.json. If you do not define versionFormat, no formatting will apply to version. `), - versionCodeFormat: z.string().describe(`Allows you to fine-tune auto generated version codes. + versionCodeFormat: z.string().describe(`Allows you to fine-tune auto generated version codes. Version code is autogenerated from app version defined in package.json or renative.json. `), - versionCodeOffset: z.number().optional(), - title: z - .string() - .describe( - 'Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website' - ), - description: z - .string() - .describe( - 'General description of your app. This prop will be injected to actual projects where description field is applicable' - ), - author: z.string().describe('Author name'), - license: z.string().describe('Injects license information into app'), - includedFonts: z - .array(z.string()) - .describe( - 'Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all' - ), - backgroundColor: z - .string() - .min(4) - .max(9) - .regex(/^#/) - .describe('Defines root view backgroundColor for all platforms in HEX format'), - splashScreen: z.boolean().describe('Enable or disable splash screen'), - fontSources: z - .array(z.string()) - .describe( - 'Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`' - ), - assetSources: z - .array(z.string()) - .describe( - 'Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`' - ), - includedPlugins: z - .array(z.string()) - .describe( - "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" - ), - excludedPlugins: z - .array(z.string()) - .describe( - "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" - ), - runtime: z.optional(zodRuntime), - custom: z.optional(zodExt), -}); + versionCodeOffset: z.number().optional(), + title: z + .string() + .describe( + 'Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website' + ), + description: z + .string() + .describe( + 'General description of your app. This prop will be injected to actual projects where description field is applicable' + ), + author: z.string().describe('Author name'), + license: z.string().describe('Injects license information into app'), + includedFonts: z + .array(z.string()) + .describe( + 'Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all' + ), + backgroundColor: z + .string() + .min(4) + .max(9) + .regex(/^#/) + .describe('Defines root view backgroundColor for all platforms in HEX format'), + splashScreen: z.boolean().describe('Enable or disable splash screen'), + fontSources: z + .array(z.string()) + .describe( + 'Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`' + ), + assetSources: z + .array(z.string()) + .describe( + 'Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`' + ), + includedPlugins: z + .array(z.string()) + .describe( + "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + ), + excludedPlugins: z + .array(z.string()) + .describe( + "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + ), + runtime: z.optional(zodRuntime), + custom: z.optional(zodExt), + }) + .partial(); export type RnvCommonSchemaFragment = z.infer; export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index b54c5cd57f..e343fcba31 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -5,23 +5,25 @@ import { RnvPlatformsSchema } from '../platforms'; import { RnvPluginsSchema } from '../plugins'; import { zodRootProjectCommonSchema, zodRootProjectPlatformsSchema, zodRootProjectPluginsSchema } from './project'; -const zodRootAppBaseFragment = z.object({ - id: z - .string() - .describe('ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder'), - custom: z.optional(zodExt), - hidden: z - .boolean() - .describe( - 'If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`' - ), - extendsTemplate: z - .string() - .describe( - 'You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`' - ), // TODO: rename to "extendsConfig" - extend: z.string().describe('extend another appConfig by id'), // TODO: rename to "extendsAppConfigID" -}); +const zodRootAppBaseFragment = z + .object({ + id: z + .string() + .describe('ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder'), + custom: z.optional(zodExt), + hidden: z + .boolean() + .describe( + 'If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`' + ), + extendsTemplate: z + .string() + .describe( + 'You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`' + ), // TODO: rename to "extendsConfig" + extend: z.string().describe('extend another appConfig by id'), // TODO: rename to "extendsAppConfigID" + }) + .partial(); export type RnvRootAppBaseFragment = z.infer; // NOTE: Need to explictly type this to generic zod object to avoid TS error: diff --git a/packages/core/src/schema/configFiles/engine.ts b/packages/core/src/schema/configFiles/engine.ts index 1d93364931..2a95691f5c 100644 --- a/packages/core/src/schema/configFiles/engine.ts +++ b/packages/core/src/schema/configFiles/engine.ts @@ -17,16 +17,18 @@ const zodEnginePlatform = z.object({ npm: z.optional(zodEngineNpm), }); -export const RootEngineSchema = z.object({ - custom: z.optional(zodExt), - id: z.string().describe('ID of engine'), - packageName: z.string(), - engineExtension: z.string().describe('Engine extension ised by rnv during compilation'), - // extends: z.string().describe('ID of engine to extend. Not being used yet'), - overview: z.string().describe('Overview description of engine'), - plugins: z.record(z.string(), z.string()).describe('List of required plugins for this engine to work properly'), - npm: zodEngineNpm, - platforms: z.record(zodPlatformsKeys, zodEnginePlatform), -}); +export const RootEngineSchema = z + .object({ + custom: z.optional(zodExt), + id: z.string().describe('ID of engine'), + packageName: z.string(), + engineExtension: z.string().describe('Engine extension ised by rnv during compilation'), + // extends: z.string().describe('ID of engine to extend. Not being used yet'), + overview: z.string().describe('Overview description of engine'), + plugins: z.record(z.string(), z.string()).describe('List of required plugins for this engine to work properly'), + npm: zodEngineNpm, + platforms: z.record(zodPlatformsKeys, zodEnginePlatform), + }) + .partial(); export type RnvRootEngineSchema = z.infer; diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index ff3d99d81f..99bac78bec 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -45,6 +45,7 @@ const zodRootProjectBaseFragment = z .record(zodPlatformsKeys, z.string()) .describe('Override of default targets specific to this project'), }) + .partial() .describe('Default system config for this project'), pipes: z .array(z.string()) @@ -58,7 +59,7 @@ const zodRootProjectBaseFragment = z .describe( 'Relative path to encrypted file in your renative project. Example: "./secrets/mySecrets.enc"' ), - isOptional: z.boolean().describe('Mark if crypto object should not checked every run'), + isOptional: z.boolean().describe('Mark if crypto object should not checked every run').optional(), }) .describe( 'This prop enables automatic encrypt and decrypt of sensitive information in your project. \nRNV will generate new env variable with can be used to encrypt and decrypt. this env var is generated by combining (and sanitizing) 2 properties from your renative.json: \nworkspaceID + projectName.\nThese 2 properties are also used to generate path on your local machine where encrypted files will be decrypted into.' @@ -164,7 +165,7 @@ const zodRootProjectBaseFragment = z }) .partial(); export type RnvRootProjectBaseFragment = z.infer & { - templateConfig: RnvTemplateConfigFragment; + templateConfig?: RnvTemplateConfigFragment; }; // NOTE: Need to explictly type this to generic zod object to avoid TS error: @@ -177,7 +178,8 @@ export const zodRootProjectSchema: AnyZodObject = zodRootProjectBaseFragment .merge(zodRootProjectCommonSchema) .merge(zodRootProjectPlatformsSchema) .merge(zodRootProjectPluginsSchema) - .extend({ templateConfig: zodTemplateConfigFragment }); + .extend({ templateConfig: zodTemplateConfigFragment }) + .partial(); export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { common?: RnvCommonSchema; diff --git a/packages/core/src/schema/configFiles/template.ts b/packages/core/src/schema/configFiles/template.ts index ee0ec51dc3..c477aaab15 100644 --- a/packages/core/src/schema/configFiles/template.ts +++ b/packages/core/src/schema/configFiles/template.ts @@ -66,8 +66,8 @@ export const RootTemplateSchema: AnyZodObject = z.object({ export type RnvRootTemplateSchema = { // defaults: RnvDefault, // engines: z.optional(EnginesSchema), - templateConfig: RnvTemplateConfigFragment; - bootstrapConfig: RnvBootstrapConfig; + templateConfig?: RnvTemplateConfigFragment; + bootstrapConfig?: RnvBootstrapConfig; }; // { diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index 75f0fcf483..f9636fdc60 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -2,37 +2,39 @@ import { z } from 'zod'; import { zodPlatformsKeys, zodProjectTemplates } from '../shared'; import { zodPluginSchema } from '../plugins'; -export const RootTemplatesSchema = z.object({ - projectTemplates: zodProjectTemplates, - engineIdMap: z.record(z.string(), z.string()), - engineTemplates: z.record( - z.string(), - z.object({ - version: z.string(), - id: z.string(), - key: z.string(), - }) - ), - integrationTemplates: z.record( - z.string(), - z.object({ - version: z.string(), - }) - ), - platformTemplates: z.record( - zodPlatformsKeys, - z.object({ - engine: z.string(), - }) - ), - pluginTemplates: z - .record(z.string(), zodPluginSchema) - .describe('Define all plugins available to be merged with project plugins'), - disableRnvDefaultOverrides: z - .boolean() - .describe( - 'Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list' +export const RootTemplatesSchema = z + .object({ + projectTemplates: zodProjectTemplates, + engineIdMap: z.record(z.string(), z.string()), + engineTemplates: z.record( + z.string(), + z.object({ + version: z.string(), + id: z.string(), + key: z.string(), + }) ), -}); + integrationTemplates: z.record( + z.string(), + z.object({ + version: z.string(), + }) + ), + platformTemplates: z.record( + zodPlatformsKeys, + z.object({ + engine: z.string(), + }) + ), + pluginTemplates: z + .record(z.string(), zodPluginSchema) + .describe('Define all plugins available to be merged with project plugins'), + disableRnvDefaultOverrides: z + .boolean() + .describe( + 'Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list' + ), + }) + .partial(); export type _RootTemplatesSchemaType = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/android.ts b/packages/core/src/schema/platforms/fragments/android.ts index d59cb67864..31caa39020 100644 --- a/packages/core/src/schema/platforms/fragments/android.ts +++ b/packages/core/src/schema/platforms/fragments/android.ts @@ -1,67 +1,76 @@ import { z } from 'zod'; import { DEFAULTS } from '../../defaults'; -export const zodPlatformAndroidFragment = z.object({ - enableAndroidX: z.union([z.boolean(), z.string()]).default(true).describe('Enables new android X architecture'), - enableJetifier: z.union([z.boolean(), z.string()]).default(true).describe('Enables Jetifier'), - signingConfig: z - .string() - .default('Debug') - .describe('Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`'), - minSdkVersion: z - .number() - .default(28) - .describe('Minimum Android SDK version device has to have in order for app to run'), - multipleAPKs: z - .boolean() - .describe( - 'If set to `true`, apk will be split into multiple ones for each architecture: "armeabi-v7a", "x86", "arm64-v8a", "x86_64"' - ), - aab: z.boolean().describe('If set to true, android project will generate app.aab instead of apk'), - extraGradleParams: z.string().describe('Allows passing extra params to gradle command'), //assembleAndroidTest -DtestBuildType=debug - minifyEnabled: z.boolean().describe('Sets minifyEnabled buildType property in app/build.gradle'), - targetSdkVersion: z - .number() - .describe( - 'Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle' - ), - compileSdkVersion: z - .number() - .describe( - 'Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle' - ), - kotlinVersion: z.string().default('1.7.10').describe('Allows you define custom kotlin version'), - ndkVersion: z - .string() - .describe('Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle'), - supportLibVersion: z - .string() - .describe( - 'Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle' - ), - googleServicesVersion: z - .string() - .describe( - 'Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle' - ), - gradleBuildToolsVersion: z - .string() - .describe( - "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" - ), - gradleWrapperVersion: z - .string() - .describe( - 'Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`' - ), - excludedFeatures: z.array(z.string()).describe('Override features definitions in AndroidManifest.xml by exclusion'), - includedFeatures: z.array(z.string()).describe('Override features definitions in AndroidManifest.xml by inclusion'), - buildToolsVersion: z.string().default(DEFAULTS.buildToolsVersion).describe('Override android build tools version'), - disableSigning: z.boolean(), - storeFile: z.string().describe('Name of the store file in android project'), - keyAlias: z.string().describe('Key alias of the store file in android project'), - newArchEnabled: z.boolean().describe('Enables new arch for android. Default: false'), - flipperEnabled: z.boolean().describe('Enables flipper for ios. Default: true'), -}); +export const zodPlatformAndroidFragment = z + .object({ + enableAndroidX: z.union([z.boolean(), z.string()]).default(true).describe('Enables new android X architecture'), + enableJetifier: z.union([z.boolean(), z.string()]).default(true).describe('Enables Jetifier'), + signingConfig: z + .string() + .default('Debug') + .describe('Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`'), + minSdkVersion: z + .number() + .default(28) + .describe('Minimum Android SDK version device has to have in order for app to run'), + multipleAPKs: z + .boolean() + .describe( + 'If set to `true`, apk will be split into multiple ones for each architecture: "armeabi-v7a", "x86", "arm64-v8a", "x86_64"' + ), + aab: z.boolean().describe('If set to true, android project will generate app.aab instead of apk'), + extraGradleParams: z.string().describe('Allows passing extra params to gradle command'), //assembleAndroidTest -DtestBuildType=debug + minifyEnabled: z.boolean().describe('Sets minifyEnabled buildType property in app/build.gradle'), + targetSdkVersion: z + .number() + .describe( + 'Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle' + ), + compileSdkVersion: z + .number() + .describe( + 'Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle' + ), + kotlinVersion: z.string().default('1.7.10').describe('Allows you define custom kotlin version'), + ndkVersion: z + .string() + .describe('Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle'), + supportLibVersion: z + .string() + .describe( + 'Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle' + ), + googleServicesVersion: z + .string() + .describe( + 'Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle' + ), + gradleBuildToolsVersion: z + .string() + .describe( + "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + ), + gradleWrapperVersion: z + .string() + .describe( + 'Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`' + ), + excludedFeatures: z + .array(z.string()) + .describe('Override features definitions in AndroidManifest.xml by exclusion'), + includedFeatures: z + .array(z.string()) + .describe('Override features definitions in AndroidManifest.xml by inclusion'), + buildToolsVersion: z + .string() + .default(DEFAULTS.buildToolsVersion) + .describe('Override android build tools version'), + disableSigning: z.boolean(), + storeFile: z.string().describe('Name of the store file in android project'), + keyAlias: z.string().describe('Key alias of the store file in android project'), + newArchEnabled: z.boolean().describe('Enables new arch for android. Default: false'), + flipperEnabled: z.boolean().describe('Enables flipper for ios. Default: true'), + }) + .partial(); export type RnvPlatformAndroidFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/base.ts b/packages/core/src/schema/platforms/fragments/base.ts index 40026bacfa..248b7a319a 100644 --- a/packages/core/src/schema/platforms/fragments/base.ts +++ b/packages/core/src/schema/platforms/fragments/base.ts @@ -1,28 +1,30 @@ import { z } from 'zod'; import { zodPlatformsKeys } from '../../shared'; -export const zodPlatformBaseFragment = z.object({ - extendPlatform: z.optional(zodPlatformsKeys), - assetFolderPlatform: z - .string() - .describe( - 'Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets' - ), - engine: z - .string() - .describe('ID of engine to be used for this platform. Note: engine must be registered in `engines` field'), - //ReactNative specific? - entryFile: z.string().default('index').describe('Alternative name of the entry file without `.js` extension'), - bundleAssets: z - .boolean() - .describe( - 'If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds' - ), - enableSourceMaps: z - .boolean() - .describe('If set to `true` dedicated source map file will be generated alongside of compiled js bundle'), - bundleIsDev: z.boolean().describe('If set to `true` debug build will be generated'), - getJsBundleFile: z.string(), -}); +export const zodPlatformBaseFragment = z + .object({ + extendPlatform: z.optional(zodPlatformsKeys), + assetFolderPlatform: z + .string() + .describe( + 'Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets' + ), + engine: z + .string() + .describe('ID of engine to be used for this platform. Note: engine must be registered in `engines` field'), + //ReactNative specific? + entryFile: z.string().default('index').describe('Alternative name of the entry file without `.js` extension'), + bundleAssets: z + .boolean() + .describe( + 'If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds' + ), + enableSourceMaps: z + .boolean() + .describe('If set to `true` dedicated source map file will be generated alongside of compiled js bundle'), + bundleIsDev: z.boolean().describe('If set to `true` debug build will be generated'), + getJsBundleFile: z.string(), + }) + .partial(); export type RnvPlatformBaseFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/electron.ts b/packages/core/src/schema/platforms/fragments/electron.ts index 113bafddae..c865fe661e 100644 --- a/packages/core/src/schema/platforms/fragments/electron.ts +++ b/packages/core/src/schema/platforms/fragments/electron.ts @@ -1,76 +1,78 @@ import { z } from 'zod'; -export const zodPlatformElectronFragment = z.object({ - electronConfig: z.any().describe('Allows you to configure electron app as per https://www.electron.build/'), - BrowserWindow: z - .object({ - width: z.number().optional(), - height: z.number().optional(), - webPreferences: z - .object({ - devTools: z.boolean().optional(), - }) - .optional() - .describe('Extra web preferences of electron app'), - }) - .describe('Allows you to configure electron wrapper app window'), - // electronTemplate: z.optional(z.object({})), - // electronConfig: { - // additionalProperties: true, - // type: 'object', - // description: 'Allows you to configure electron app as per https://www.electron.build/', - // examples: [ - // { - // mac: { - // target: ['dmg', 'mas', 'mas-dev'], - // hardenedRuntime: true, - // }, - // dmg: { - // sign: false, - // }, - // mas: { - // type: 'distribution', - // hardenedRuntime: false, - // }, - // mainInjection: 'console.log("Hello from main.js!");', - // mainHeadInjection: 'console.log("Hello from main.js!");', - // }, - // ], - // }, - // BrowserWindow: { - // type: 'object', - // additionalProperties: false, - // description: 'Allows you to configure electron wrapper app window', - // examples: [ - // { - // width: 1310, - // height: 800, - // webPreferences: { - // devTools: true, - // }, - // }, - // ], - // properties: { - // width: { - // type: 'integer', - // description: 'Default width of electron app', - // }, - // height: { - // type: 'integer', - // description: 'Default height of electron app', - // }, - // webPreferences: { - // additionalProperties: true, - // type: 'object', - // description: 'Extra web preferences of electron app', - // examples: [ - // { - // devTools: true, - // }, - // ], - // }, - // }, - // }, -}); +export const zodPlatformElectronFragment = z + .object({ + electronConfig: z.any().describe('Allows you to configure electron app as per https://www.electron.build/'), + BrowserWindow: z + .object({ + width: z.number().optional(), + height: z.number().optional(), + webPreferences: z + .object({ + devTools: z.boolean().optional(), + }) + .optional() + .describe('Extra web preferences of electron app'), + }) + .describe('Allows you to configure electron wrapper app window'), + // electronTemplate: z.optional(z.object({})), + // electronConfig: { + // additionalProperties: true, + // type: 'object', + // description: 'Allows you to configure electron app as per https://www.electron.build/', + // examples: [ + // { + // mac: { + // target: ['dmg', 'mas', 'mas-dev'], + // hardenedRuntime: true, + // }, + // dmg: { + // sign: false, + // }, + // mas: { + // type: 'distribution', + // hardenedRuntime: false, + // }, + // mainInjection: 'console.log("Hello from main.js!");', + // mainHeadInjection: 'console.log("Hello from main.js!");', + // }, + // ], + // }, + // BrowserWindow: { + // type: 'object', + // additionalProperties: false, + // description: 'Allows you to configure electron wrapper app window', + // examples: [ + // { + // width: 1310, + // height: 800, + // webPreferences: { + // devTools: true, + // }, + // }, + // ], + // properties: { + // width: { + // type: 'integer', + // description: 'Default width of electron app', + // }, + // height: { + // type: 'integer', + // description: 'Default height of electron app', + // }, + // webPreferences: { + // additionalProperties: true, + // type: 'object', + // description: 'Extra web preferences of electron app', + // examples: [ + // { + // devTools: true, + // }, + // ], + // }, + // }, + // }, + }) + .partial(); export type RnvPlatformElectronFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/ios.ts b/packages/core/src/schema/platforms/fragments/ios.ts index ed8f3d8cf1..3dc1922558 100644 --- a/packages/core/src/schema/platforms/fragments/ios.ts +++ b/packages/core/src/schema/platforms/fragments/ios.ts @@ -1,94 +1,96 @@ import { z } from 'zod'; -export const zodPlatformiOSFragment = z.object({ - ignoreWarnings: z.boolean().describe('Injects `inhibit_all_warnings` into Podfile'), - ignoreLogs: z.boolean().describe('Passes `-quiet` to xcodebuild command'), - deploymentTarget: z.string().describe('Deployment target for xcodepoj'), - orientationSupport: z.object({ - phone: z.optional(z.array(z.string())), - // phone: [ - // 'UIInterfaceOrientationPortrait', - // 'UIInterfaceOrientationPortraitUpsideDown', - // 'UIInterfaceOrientationLandscapeLeft', - // 'UIInterfaceOrientationLandscapeRight', - // ], - tab: z.optional(z.array(z.string())), - // tab: [ - // 'UIInterfaceOrientationPortrait', - // 'UIInterfaceOrientationPortraitUpsideDown', - // 'UIInterfaceOrientationLandscapeLeft', - // 'UIInterfaceOrientationLandscapeRight', - // ], - }), - teamID: z.string().describe('Apple teamID'), - excludedArchs: z - .array(z.string()) - .describe('Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=""`'), - urlScheme: z.string().describe('URL Scheme for the app used for deeplinking'), - teamIdentifier: z.optional(z.string().describe('Apple developer team ID')), - scheme: z.string(), - schemeTarget: z.string(), - appleId: z.string(), - provisioningStyle: z.string(), - newArchEnabled: z.boolean().describe('Enables new archs for iOS. Default: false'), - codeSignIdentity: z.string().describe('Special property which tells Xcode how to build your project'), - commandLineArguments: z.array(z.string()).describe('Allows you to pass launch arguments to active scheme'), - provisionProfileSpecifier: z.string(), - provisionProfileSpecifiers: z.record(z.string(), z.string()), - allowProvisioningUpdates: z.boolean(), - provisioningProfiles: z.record(z.string()), - codeSignIdentities: z.optional(z.record(z.string(), z.string())), - systemCapabilities: z.record(z.string(), z.boolean()), - entitlements: z.record(z.string()), - runScheme: z.string(), - sdk: z.string(), - testFlightId: z.string(), - firebaseId: z.string(), - exportOptions: z - .object({ - method: z.string(), - teamID: z.string(), - uploadBitcode: z.boolean(), - compileBitcode: z.boolean(), - uploadSymbols: z.boolean(), - signingStyle: z.string(), - signingCertificate: z.string(), - provisioningProfiles: z.record(z.string()), - }) - .partial(), - // systemCapabilities: { - // additionalProperties: true, - // type: 'object', - // examples: [ - // { - // 'com.apple.SafariKeychain': false, - // 'com.apple.Wallet': false, - // 'com.apple.HealthKit': false, - // 'com.apple.ApplicationGroups.iOS': false, - // 'com.apple.iCloud': true, - // 'com.apple.DataProtection': false, - // 'com.apple.HomeKit': false, - // 'com.apple.ClassKit': false, - // 'com.apple.VPNLite': false, - // 'com.apple.AutoFillCredentialProvider': false, - // 'com.apple.AccessWiFi': false, - // 'com.apple.InAppPurchase': false, - // 'com.apple.HotspotConfiguration': false, - // 'com.apple.Multipath': false, - // 'com.apple.GameCenter.iOS': false, - // 'com.apple.BackgroundModes': false, - // 'com.apple.InterAppAudio': false, - // 'com.apple.WAC': false, - // 'com.apple.Push': true, - // 'com.apple.NearFieldCommunicationTagReading': false, - // 'com.apple.ApplePay': false, - // 'com.apple.Keychain': false, - // 'com.apple.Maps.iOS': false, - // 'com.apple.Siri': false, - // 'com.apple.NetworkExtensions.iOS': false, - // }, - // ], - // }, -}); +export const zodPlatformiOSFragment = z + .object({ + ignoreWarnings: z.boolean().describe('Injects `inhibit_all_warnings` into Podfile'), + ignoreLogs: z.boolean().describe('Passes `-quiet` to xcodebuild command'), + deploymentTarget: z.string().describe('Deployment target for xcodepoj'), + orientationSupport: z.object({ + phone: z.optional(z.array(z.string())), + // phone: [ + // 'UIInterfaceOrientationPortrait', + // 'UIInterfaceOrientationPortraitUpsideDown', + // 'UIInterfaceOrientationLandscapeLeft', + // 'UIInterfaceOrientationLandscapeRight', + // ], + tab: z.optional(z.array(z.string())), + // tab: [ + // 'UIInterfaceOrientationPortrait', + // 'UIInterfaceOrientationPortraitUpsideDown', + // 'UIInterfaceOrientationLandscapeLeft', + // 'UIInterfaceOrientationLandscapeRight', + // ], + }), + teamID: z.string().describe('Apple teamID'), + excludedArchs: z + .array(z.string()) + .describe('Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=""`'), + urlScheme: z.string().describe('URL Scheme for the app used for deeplinking'), + teamIdentifier: z.optional(z.string().describe('Apple developer team ID')), + scheme: z.string(), + schemeTarget: z.string(), + appleId: z.string(), + provisioningStyle: z.string(), + newArchEnabled: z.boolean().describe('Enables new archs for iOS. Default: false'), + codeSignIdentity: z.string().describe('Special property which tells Xcode how to build your project'), + commandLineArguments: z.array(z.string()).describe('Allows you to pass launch arguments to active scheme'), + provisionProfileSpecifier: z.string(), + provisionProfileSpecifiers: z.record(z.string(), z.string()), + allowProvisioningUpdates: z.boolean(), + provisioningProfiles: z.record(z.string()), + codeSignIdentities: z.optional(z.record(z.string(), z.string())), + systemCapabilities: z.record(z.string(), z.boolean()), + entitlements: z.record(z.string()), + runScheme: z.string(), + sdk: z.string(), + testFlightId: z.string(), + firebaseId: z.string(), + exportOptions: z + .object({ + method: z.string(), + teamID: z.string(), + uploadBitcode: z.boolean(), + compileBitcode: z.boolean(), + uploadSymbols: z.boolean(), + signingStyle: z.string(), + signingCertificate: z.string(), + provisioningProfiles: z.record(z.string()), + }) + .partial(), + // systemCapabilities: { + // additionalProperties: true, + // type: 'object', + // examples: [ + // { + // 'com.apple.SafariKeychain': false, + // 'com.apple.Wallet': false, + // 'com.apple.HealthKit': false, + // 'com.apple.ApplicationGroups.iOS': false, + // 'com.apple.iCloud': true, + // 'com.apple.DataProtection': false, + // 'com.apple.HomeKit': false, + // 'com.apple.ClassKit': false, + // 'com.apple.VPNLite': false, + // 'com.apple.AutoFillCredentialProvider': false, + // 'com.apple.AccessWiFi': false, + // 'com.apple.InAppPurchase': false, + // 'com.apple.HotspotConfiguration': false, + // 'com.apple.Multipath': false, + // 'com.apple.GameCenter.iOS': false, + // 'com.apple.BackgroundModes': false, + // 'com.apple.InterAppAudio': false, + // 'com.apple.WAC': false, + // 'com.apple.Push': true, + // 'com.apple.NearFieldCommunicationTagReading': false, + // 'com.apple.ApplePay': false, + // 'com.apple.Keychain': false, + // 'com.apple.Maps.iOS': false, + // 'com.apple.Siri': false, + // 'com.apple.NetworkExtensions.iOS': false, + // }, + // ], + // }, + }) + .partial(); export type RnvPlatformiOSFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/lightning.ts b/packages/core/src/schema/platforms/fragments/lightning.ts index d892950a09..91cae651cf 100644 --- a/packages/core/src/schema/platforms/fragments/lightning.ts +++ b/packages/core/src/schema/platforms/fragments/lightning.ts @@ -1,7 +1,9 @@ import { z } from 'zod'; -export const zodPlatformLightningFragment = z.object({ - target: z.string(), -}); +export const zodPlatformLightningFragment = z + .object({ + target: z.string(), + }) + .partial(); export type RnvPlatformLightningFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/nextjs.ts b/packages/core/src/schema/platforms/fragments/nextjs.ts index 08fec7cb86..c61b2c596f 100644 --- a/packages/core/src/schema/platforms/fragments/nextjs.ts +++ b/packages/core/src/schema/platforms/fragments/nextjs.ts @@ -1,18 +1,20 @@ import { z } from 'zod'; -export const zodPlatformNextJsFragment = z.object({ - pagesDir: z.string().describe('Custom pages directory used by nextjs. Use relative paths'), - outputDir: z - .string() - .describe( - 'Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths' - ), - exportDir: z - .string() - .describe( - 'Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths' - ), - nextTranspileModules: z.optional(z.array(z.string())), -}); +export const zodPlatformNextJsFragment = z + .object({ + pagesDir: z.string().describe('Custom pages directory used by nextjs. Use relative paths'), + outputDir: z + .string() + .describe( + 'Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths' + ), + exportDir: z + .string() + .describe( + 'Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths' + ), + nextTranspileModules: z.optional(z.array(z.string())), + }) + .partial(); export type RnvPlatformNextJsFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/reactNative.ts b/packages/core/src/schema/platforms/fragments/reactNative.ts index 9ade313ff5..3601f40a66 100644 --- a/packages/core/src/schema/platforms/fragments/reactNative.ts +++ b/packages/core/src/schema/platforms/fragments/reactNative.ts @@ -1,10 +1,12 @@ import { z } from 'zod'; -export const zodPlatformReactNativeFragment = z.object({ - reactNativeEngine: z - .enum(['jsc', 'v8-android', 'v8-android-nointl', 'v8-android-jit', 'v8-android-jit-nointl', 'hermes']) - .default('hermes') - .describe('Allows you to define specific native render engine to be used'), -}); +export const zodPlatformReactNativeFragment = z + .object({ + reactNativeEngine: z + .enum(['jsc', 'v8-android', 'v8-android-nointl', 'v8-android-jit', 'v8-android-jit-nointl', 'hermes']) + .default('hermes') + .describe('Allows you to define specific native render engine to be used'), + }) + .partial(); export type RnvPlatformReactNativeFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateAndroid.ts b/packages/core/src/schema/platforms/fragments/templateAndroid.ts index 87caa2fc2e..00ca55f3ba 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroid.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroid.ts @@ -73,62 +73,68 @@ Injects / Overrides values in AndroidManifest.xml file of generated android base // }); -export const zodTemplateAndroidFragment = z.object({ - gradle_properties: z.optional(GradleProperties), - build_gradle: z.optional(BuildGradle), - app_build_gradle: z.optional(AppBuildGradle), - AndroidManifest_xml: z.optional(AndroidManifest), - strings_xml: z.optional( - z.object({ - children: z.optional( - z.array( +export const zodTemplateAndroidFragment = z + .object({ + templateAndroid: z + .object({ + gradle_properties: z.optional(GradleProperties), + build_gradle: z.optional(BuildGradle), + app_build_gradle: z.optional(AppBuildGradle), + AndroidManifest_xml: z.optional(AndroidManifest), + strings_xml: z.optional( z.object({ - tag: z.string(), - name: z.string(), - child_value: z.string(), + children: z.optional( + z.array( + z.object({ + tag: z.string(), + name: z.string(), + child_value: z.string(), + }) + ) + ), }) - ) - ), - }) - ), - MainActivity_kt: z.optional( - z.object({ - onCreate: z - .string({}) - .optional() - .default('super.onCreate(savedInstanceState)') - .describe('Overrides super.onCreate method handler of MainActivity.java'), - imports: z.array(z.string()).optional(), - methods: z.array(z.string()).optional(), - createMethods: z.array(z.string()).optional(), - resultMethods: z.array(z.string()).optional(), - }) - ), - MainApplication_kt: z.optional( - z - .object({ - imports: z.array(z.string()).optional(), - methods: z.array(z.string()).optional(), - createMethods: z.array(z.string()).optional(), - packages: z.array(z.string()).optional(), - packageParams: z.array(z.string()).optional(), - - // onCreate: z - // .string({}) - // .optional() - // .default('super.onCreate(savedInstanceState)') - // .describe('Overrides super.onCreate method handler of MainActivity.java'), + ), + MainActivity_kt: z.optional( + z.object({ + onCreate: z + .string({}) + .optional() + .default('super.onCreate(savedInstanceState)') + .describe('Overrides super.onCreate method handler of MainActivity.java'), + imports: z.array(z.string()).optional(), + methods: z.array(z.string()).optional(), + createMethods: z.array(z.string()).optional(), + resultMethods: z.array(z.string()).optional(), + }) + ), + MainApplication_kt: z.optional( + z + .object({ + imports: z.array(z.string()).optional(), + methods: z.array(z.string()).optional(), + createMethods: z.array(z.string()).optional(), + packages: z.array(z.string()).optional(), + packageParams: z.array(z.string()).optional(), + + // onCreate: z + // .string({}) + // .optional() + // .default('super.onCreate(savedInstanceState)') + // .describe('Overrides super.onCreate method handler of MainActivity.java'), + }) + .describe('Allows you to configure behaviour of MainActivity') + ), + + settings_gradle: z.optional(z.object({})), + gradle_wrapper_properties: z.optional(z.object({})), + SplashActivity_java: z.optional(z.object({})), + styles_xml: z.optional(z.object({})), + colors_xml: z.optional(z.object({})), + proguard_rules_pro: z.optional(z.object({})), }) - .describe('Allows you to configure behaviour of MainActivity') - ), - - settings_gradle: z.optional(z.object({})), - gradle_wrapper_properties: z.optional(z.object({})), - SplashActivity_java: z.optional(z.object({})), - styles_xml: z.optional(z.object({})), - colors_xml: z.optional(z.object({})), - proguard_rules_pro: z.optional(z.object({})), -}); + .partial(), + }) + .partial(); // .describe('Allows more advanced modifications to Android based project template'); export type _ManifestChildWithChildrenType = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateXcode.ts b/packages/core/src/schema/platforms/fragments/templateXcode.ts index a3117b7ca3..f5dbf762ac 100644 --- a/packages/core/src/schema/platforms/fragments/templateXcode.ts +++ b/packages/core/src/schema/platforms/fragments/templateXcode.ts @@ -81,14 +81,18 @@ const InfoPlist = z.object({}); export type _AppDelegateMethodType = z.infer; -export const zodTemplateXcodeFragment = z.object({ - templateXcode: z.object({ - Podfile: z.optional(Podfile), - project_pbxproj: z.optional(XcodeProj), - AppDelegate_mm: z.optional(AppDelegateMm), - AppDelegate_h: z.optional(AppDelegateH), - Info_plist: z.optional(InfoPlist), - }), -}); +export const zodTemplateXcodeFragment = z + .object({ + templateXcode: z + .object({ + Podfile: z.optional(Podfile), + project_pbxproj: z.optional(XcodeProj), + AppDelegate_mm: z.optional(AppDelegateMm), + AppDelegate_h: z.optional(AppDelegateH), + Info_plist: z.optional(InfoPlist), + }) + .partial(), + }) + .partial(); export type RnvTemplateXcodeFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/tizen.ts b/packages/core/src/schema/platforms/fragments/tizen.ts index 3a8c13fec2..66aaf0b91c 100644 --- a/packages/core/src/schema/platforms/fragments/tizen.ts +++ b/packages/core/src/schema/platforms/fragments/tizen.ts @@ -1,9 +1,11 @@ import { z } from 'zod'; -export const zodPlatformTizenFragment = z.object({ - package: z.string(), - certificateProfile: z.string(), - appName: z.string(), -}); +export const zodPlatformTizenFragment = z + .object({ + package: z.string(), + certificateProfile: z.string(), + appName: z.string(), + }) + .partial(); export type RnvPlatformTizenFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/web.ts b/packages/core/src/schema/platforms/fragments/web.ts index 2f4d313310..c248553a36 100644 --- a/packages/core/src/schema/platforms/fragments/web.ts +++ b/packages/core/src/schema/platforms/fragments/web.ts @@ -1,9 +1,11 @@ import { z } from 'zod'; -export const zodPlatformWebFragment = z.object({ - timestampBuildFiles: z.array(z.string()), - devServerHost: z.string(), - environment: z.string(), -}); +export const zodPlatformWebFragment = z + .object({ + timestampBuildFiles: z.array(z.string()), + devServerHost: z.string(), + environment: z.string(), + }) + .partial(); export type RnvPlatformWebFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/webos.ts b/packages/core/src/schema/platforms/fragments/webos.ts index 7d1c71ed94..69cf568c31 100644 --- a/packages/core/src/schema/platforms/fragments/webos.ts +++ b/packages/core/src/schema/platforms/fragments/webos.ts @@ -1,7 +1,9 @@ import { z } from 'zod'; -export const zodPlatformWebOSFragment = z.object({ - iconColor: z.string(), -}); +export const zodPlatformWebOSFragment = z + .object({ + iconColor: z.string(), + }) + .partial(); export type RnvPlatformWebOSFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/webpack.ts b/packages/core/src/schema/platforms/fragments/webpack.ts index 49ab4ae59c..e90c1da4c7 100644 --- a/packages/core/src/schema/platforms/fragments/webpack.ts +++ b/packages/core/src/schema/platforms/fragments/webpack.ts @@ -1,48 +1,53 @@ import { z } from 'zod'; -export const zodPlatformWebpackFragment = z.object({ - webpackConfig: z.object({ - publicUrl: z.string().optional(), - customScripts: z.array(z.string()).optional().describe('Allows you to inject custom script into html header'), - }), +export const zodPlatformWebpackFragment = z + .object({ + webpackConfig: z.object({ + publicUrl: z.string().optional(), + customScripts: z + .array(z.string()) + .optional() + .describe('Allows you to inject custom script into html header'), + }), - // webpackConfig: { - // additionalProperties: true, - // type: 'object', - // properties: { - // publicUrl: { - // type: 'string', - // }, - // metaTags: { - // additionalProperties: true, - // type: 'object', - // }, - // customScripts: { - // type: 'array', - // }, - // extend: { - // additionalProperties: true, - // type: 'object', - // description: 'Allows you to directly extend/override webpack config of your current platform', - // examples: [ - // { - // devtool: 'source-map', - // }, - // { - // module: { - // rules: [ - // { - // test: /\.js$/, - // use: ['source-map-loader'], - // enforce: 'pre', - // }, - // ], - // }, - // }, - // ], - // }, - // }, - // }, -}); + // webpackConfig: { + // additionalProperties: true, + // type: 'object', + // properties: { + // publicUrl: { + // type: 'string', + // }, + // metaTags: { + // additionalProperties: true, + // type: 'object', + // }, + // customScripts: { + // type: 'array', + // }, + // extend: { + // additionalProperties: true, + // type: 'object', + // description: 'Allows you to directly extend/override webpack config of your current platform', + // examples: [ + // { + // devtool: 'source-map', + // }, + // { + // module: { + // rules: [ + // { + // test: /\.js$/, + // use: ['source-map-loader'], + // enforce: 'pre', + // }, + // ], + // }, + // }, + // ], + // }, + // }, + // }, + }) + .partial(); export type RnvPlatformWebpackFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/windows.ts b/packages/core/src/schema/platforms/fragments/windows.ts index e692eff095..d941e08949 100644 --- a/packages/core/src/schema/platforms/fragments/windows.ts +++ b/packages/core/src/schema/platforms/fragments/windows.ts @@ -1,69 +1,79 @@ import { z } from 'zod'; -export const zodPlatformWindowsFragment = z.object({ - templateVSProject: z.optional( - z.object({ - language: z.string().describe('Specify generated project language: cpp for C++ or cs for C#').optional(), - arch: z.string().describe('Specification of targeted architecture').optional(), - experimentalNuGetDependency: z.boolean().optional(), - useWinUI3: z.boolean().optional(), - nuGetTestVersion: z.string().optional(), - reactNativeEngine: z.string().optional(), - nuGetTestFeed: z.string().optional(), - overwrite: z - .boolean() - .describe('Whether to attempt to override the existing builds files when running a build once more') - .optional(), - release: z.boolean().describe('Enables full packaging of the app for release').optional(), - root: z - .string() - .describe('Project root folder location (not the app itself, which is in platformBuilds)') - .optional(), +export const zodPlatformWindowsFragment = z + .object({ + templateVSProject: z.optional( + z.object({ + language: z + .string() + .describe('Specify generated project language: cpp for C++ or cs for C#') + .optional(), + arch: z.string().describe('Specification of targeted architecture').optional(), + experimentalNuGetDependency: z.boolean().optional(), + useWinUI3: z.boolean().optional(), + nuGetTestVersion: z.string().optional(), + reactNativeEngine: z.string().optional(), + nuGetTestFeed: z.string().optional(), + overwrite: z + .boolean() + .describe('Whether to attempt to override the existing builds files when running a build once more') + .optional(), + release: z.boolean().describe('Enables full packaging of the app for release').optional(), + root: z + .string() + .describe('Project root folder location (not the app itself, which is in platformBuilds)') + .optional(), - singleproc: z - .boolean() - .describe( - 'Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)' - ) - .optional(), - emulator: z.boolean().optional(), - device: z.boolean().optional(), - target: z.string().optional(), - remoteDebugging: z.boolean().optional(), - logging: z.boolean().describe('Logging all the build proccesses to console').optional(), - packager: z.boolean().optional(), - bundle: z.boolean().optional(), - launch: z.boolean().describe('Launches the application once the build process is finished').optional(), - autolink: z.boolean().describe('Launches the application once the build process is finished').optional(), - build: z.boolean().describe('Builds the application before launching it').optional(), - sln: z - .string() - .describe('Location of Visual Studio solution .sln file (wraps multiple projects)') - .optional(), - proj: z - .string() - .describe('Root project directory for your React Native Windows project (not Visual Studio project)') - .optional(), - appPath: z.string().describe('Full path to windows plaform build directory').optional(), - msbuildprops: z - .string() - .describe('Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2') - .optional(), - buildLogDirectory: z - .string() - .describe('Full path to directory where builds logs should be stored, default - project path') - .optional(), - info: z.boolean().describe('Print information about the build machine to console').optional(), - directDebugging: z.boolean().optional(), - telemetry: z - .boolean() - .describe('Send analytics data of @react-native-windows/cli usage to Microsoft') - .optional(), - devPort: z.string().optional(), - additionalMetroOptions: z.record(z.any()).optional(), - packageExtension: z.string().optional(), - }) - ), -}); + singleproc: z + .boolean() + .describe( + 'Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)' + ) + .optional(), + emulator: z.boolean().optional(), + device: z.boolean().optional(), + target: z.string().optional(), + remoteDebugging: z.boolean().optional(), + logging: z.boolean().describe('Logging all the build proccesses to console').optional(), + packager: z.boolean().optional(), + bundle: z.boolean().optional(), + launch: z.boolean().describe('Launches the application once the build process is finished').optional(), + autolink: z + .boolean() + .describe('Launches the application once the build process is finished') + .optional(), + build: z.boolean().describe('Builds the application before launching it').optional(), + sln: z + .string() + .describe('Location of Visual Studio solution .sln file (wraps multiple projects)') + .optional(), + proj: z + .string() + .describe( + 'Root project directory for your React Native Windows project (not Visual Studio project)' + ) + .optional(), + appPath: z.string().describe('Full path to windows plaform build directory').optional(), + msbuildprops: z + .string() + .describe('Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2') + .optional(), + buildLogDirectory: z + .string() + .describe('Full path to directory where builds logs should be stored, default - project path') + .optional(), + info: z.boolean().describe('Print information about the build machine to console').optional(), + directDebugging: z.boolean().optional(), + telemetry: z + .boolean() + .describe('Send analytics data of @react-native-windows/cli usage to Microsoft') + .optional(), + devPort: z.string().optional(), + additionalMetroOptions: z.record(z.any()).optional(), + packageExtension: z.string().optional(), + }) + ), + }) + .partial(); export type RnvPlatformWindowsFragment = z.infer; diff --git a/packages/core/src/schema/plugins/fragments/base.ts b/packages/core/src/schema/plugins/fragments/base.ts index 78d06f697c..77fc3c545c 100644 --- a/packages/core/src/schema/plugins/fragments/base.ts +++ b/packages/core/src/schema/plugins/fragments/base.ts @@ -50,25 +50,26 @@ const Deprecated = z const DisablePluginTemplateOverrides = z.boolean().describe('Disables plugin overrides for selected plugin'); -export const zodPluginBaseFragment = { - supportedPlatforms: zodSupportedPlatforms.optional(), - disabled: z.optional(Disabled), - props: z.optional(Props), - version: z.optional(Version), - deprecated: z.optional(Deprecated), - source: z.optional(Source), - disableNpm: z.optional(NoNpm), - skipMerge: z.optional(SkipMerge), - npm: z.optional(Npm), //=> npmDependencies - pluginDependencies: z.optional(PluginDependencies), - webpackConfig: z.optional(Webpack), //Should this be at root plugin??? - disablePluginTemplateOverrides: z.optional(DisablePluginTemplateOverrides), - fontSources: z.array(z.string()).optional(), - // 'no-npm': z.optional(NoNpm),//DEPRECATED => disableNpm - // plugins: z.optional(PluginDependencies), //DEPRECATED => pluginDependencies - // webpack: z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED - // 'engine-rn-next': z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED -}; -const _zodPluginBaseFragment = z.object(zodPluginBaseFragment); +export const zodPluginBaseFragment = z + .object({ + supportedPlatforms: zodSupportedPlatforms.optional(), + disabled: z.optional(Disabled), + props: z.optional(Props), + version: z.optional(Version), + deprecated: z.optional(Deprecated), + source: z.optional(Source), + disableNpm: z.optional(NoNpm), + skipMerge: z.optional(SkipMerge), + npm: z.optional(Npm), //=> npmDependencies + pluginDependencies: z.optional(PluginDependencies), + webpackConfig: z.optional(Webpack), //Should this be at root plugin??? + disablePluginTemplateOverrides: z.optional(DisablePluginTemplateOverrides), + fontSources: z.array(z.string()).optional(), + // 'no-npm': z.optional(NoNpm),//DEPRECATED => disableNpm + // plugins: z.optional(PluginDependencies), //DEPRECATED => pluginDependencies + // webpack: z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED + // 'engine-rn-next': z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED + }) + .partial(); -export type RnvPluginBaseFragment = z.infer; +export type RnvPluginBaseFragment = z.infer; diff --git a/packages/core/src/schema/plugins/fragments/platformAndroid.ts b/packages/core/src/schema/plugins/fragments/platformAndroid.ts index a522d8bce7..5699086b83 100644 --- a/packages/core/src/schema/plugins/fragments/platformAndroid.ts +++ b/packages/core/src/schema/plugins/fragments/platformAndroid.ts @@ -1,11 +1,12 @@ import { z } from 'zod'; import { zodTemplateAndroidFragment } from '../../platforms/fragments/templateAndroid'; -export const zodPluginPlatformAndroidFragment = { +export const zodPluginPlatformAndroidFragment = zodTemplateAndroidFragment.extend({ projectName: z.optional(z.string()), skipLinking: z.optional(z.boolean()), skipImplementation: z.optional(z.boolean()), implementation: z.optional(z.string()), package: z.optional(z.string()), - templateAndroid: zodTemplateAndroidFragment, -}; +}); + +export type RnvPluginPlatformAndroidFragment = Partial>; diff --git a/packages/core/src/schema/plugins/fragments/platformBase.ts b/packages/core/src/schema/plugins/fragments/platformBase.ts index dd32d0f7ee..887bcb6d8b 100644 --- a/packages/core/src/schema/plugins/fragments/platformBase.ts +++ b/packages/core/src/schema/plugins/fragments/platformBase.ts @@ -14,8 +14,9 @@ const Path = z 'Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used.' ); -export const zodPluginPlatformBaseFragment = { +export const zodPluginPlatformBaseFragment = z.object({ disabled: z.optional(Disabled), forceLinking: z.optional(ForceLinking), path: z.optional(Path), -}; +}); +export type RnvPluginPlatformBaseFragment = Partial>; diff --git a/packages/core/src/schema/plugins/fragments/platformIos.ts b/packages/core/src/schema/plugins/fragments/platformIos.ts index 36deae395f..8cfa367e29 100644 --- a/packages/core/src/schema/plugins/fragments/platformIos.ts +++ b/packages/core/src/schema/plugins/fragments/platformIos.ts @@ -9,14 +9,15 @@ const Version = z.string().describe('Version of pod'); const BuildType = z.enum(['dynamic', 'static']).describe('Build type of the pod'); -export const zodPluginPlatformiOSFragment = { +export const zodPluginPlatformiOSFragment = zodTemplateXcodeFragment.extend({ git: z.optional(Git), commit: z.optional(Commit), version: z.optional(Version), podNames: z.optional(z.array(z.string())), podName: z.optional(z.string()), staticFrameworks: z.optional(z.array(z.string())), - templateXcode: zodTemplateXcodeFragment, isStatic: z.boolean().optional(), buildType: z.optional(BuildType), -}; +}); + +export type RnvPluginPlatformiOSFragment = Partial>; diff --git a/packages/core/src/schema/plugins/index.ts b/packages/core/src/schema/plugins/index.ts index e45063f12c..648a2d0eb7 100644 --- a/packages/core/src/schema/plugins/index.ts +++ b/packages/core/src/schema/plugins/index.ts @@ -1,60 +1,42 @@ import { AnyZodObject, z } from 'zod'; -import { zodPluginPlatformAndroidFragment } from './fragments/platformAndroid'; -import { zodPluginPlatformiOSFragment } from './fragments/platformIos'; -import { zodPluginPlatformBaseFragment } from './fragments/platformBase'; +import { RnvPluginPlatformAndroidFragment, zodPluginPlatformAndroidFragment } from './fragments/platformAndroid'; +import { RnvPluginPlatformiOSFragment, zodPluginPlatformiOSFragment } from './fragments/platformIos'; +import { RnvPluginPlatformBaseFragment, zodPluginPlatformBaseFragment } from './fragments/platformBase'; import { RnvPluginBaseFragment, zodPluginBaseFragment } from './fragments/base'; import { PlatformKey } from '../types'; -const androidSchema = z - .object({ - ...zodPluginPlatformBaseFragment, - ...zodPluginPlatformAndroidFragment, - }) - .optional(); +const androidSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformAndroidFragment); -const iosSchema = z - .object({ - ...zodPluginPlatformBaseFragment, - ...zodPluginPlatformiOSFragment, - }) - .optional(); +const iosSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformiOSFragment); -const genericSchema = z - .object({ - ...zodPluginPlatformBaseFragment, - }) - .optional(); +const genericSchema = zodPluginPlatformBaseFragment; -export const zodPluginSchema: AnyZodObject = z.object({ - ...zodPluginBaseFragment, - android: androidSchema, - androidtv: androidSchema, - androidwear: androidSchema, - firetv: androidSchema, - ios: iosSchema, - tvos: iosSchema, - tizen: genericSchema, - tizenmobile: genericSchema, - tizenwatch: genericSchema, - webos: genericSchema, - web: genericSchema, - webtv: genericSchema, - chromecast: genericSchema, - kaios: genericSchema, - macos: genericSchema, - linux: genericSchema, - windows: genericSchema, - xbox: genericSchema, -}); - -// TODO: don't create new zod object. use native types -const zodPluginPlatformMergedSchema = z.object({ - ...zodPluginPlatformBaseFragment, - ...zodPluginPlatformiOSFragment, - ...zodPluginPlatformAndroidFragment, -}); +export const zodPluginSchema: AnyZodObject = zodPluginBaseFragment.merge( + z.object({ + android: androidSchema, + androidtv: androidSchema, + androidwear: androidSchema, + firetv: androidSchema, + ios: iosSchema, + tvos: iosSchema, + tizen: genericSchema, + tizenmobile: genericSchema, + tizenwatch: genericSchema, + webos: genericSchema, + web: genericSchema, + webtv: genericSchema, + chromecast: genericSchema, + kaios: genericSchema, + macos: genericSchema, + linux: genericSchema, + windows: genericSchema, + xbox: genericSchema, + }) +); -export type RnvPluginPlatformSchema = z.infer; +export type RnvPluginPlatformSchema = RnvPluginPlatformBaseFragment & + RnvPluginPlatformAndroidFragment & + RnvPluginPlatformiOSFragment; export type RnvPluginPlatformsSchema = Record; export type RnvPluginSchema = RnvPluginBaseFragment & Partial; export type RnvPluginsSchema = Record; diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index f8f5cc4aad..679688c289 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -25,7 +25,7 @@ export type ConfigPropKey = keyof ConfigProp; export type RenativeConfigPlugin = RnvPluginSchema; -export type RenativeConfigPaths = RnvRootProjectBaseFragment['paths']; +export type RenativeConfigPaths = Required['paths']; export type RenativeConfigPluginPlatform = RnvPluginPlatformSchema; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts index 66a12bb6f9..3a8bcc28bf 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts @@ -40,9 +40,8 @@ const Question = async (data: NewProjectData) => { // ] const supportedPlatforms = - files.template.renativeTemplateConfig?.defaults?.supportedPlatforms || - files.template.renativeConfig?.defaults?.supportedPlatforms || - []; + // files.template.renativeTemplateConfig?.templateConfig?.renative_json?..supportedPlatforms || + files.template.renativeConfig?.defaults?.supportedPlatforms || []; supportedPlatforms.sort((a, b) => RnvPlatforms.indexOf(a) - RnvPlatforms.indexOf(b)); diff --git a/packages/sdk-android/src/manifestParser.ts b/packages/sdk-android/src/manifestParser.ts index a7b6c716f7..60417e4355 100644 --- a/packages/sdk-android/src/manifestParser.ts +++ b/packages/sdk-android/src/manifestParser.ts @@ -203,7 +203,7 @@ const getConfigPropArray = (c: RnvContext, platform: Rn configArr.forEach((config) => { if (config) { //TODO: this is bit of a hack. _getConfigProp expectes already merged obj needs to be redone - const val = _getConfigProp(c, key, null, config as ConfigFileBuildConfig); + const val = _getConfigProp(c, key, undefined, config as ConfigFileBuildConfig); if (val) { result.push(val); } From 65205def3c841c723817042181403272864732bc Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 14:49:26 +0200 Subject: [PATCH 155/175] types refactor --- packages/core/src/configs/appConfigs.ts | 2 +- packages/core/src/configs/buildConfig.ts | 2 +- packages/core/src/configs/configProject.ts | 8 +-- packages/core/src/configs/index.ts | 4 +- packages/core/src/configs/workspaces.ts | 5 +- packages/core/src/context/contextProps.ts | 15 ++--- packages/core/src/context/types.ts | 45 +++++++------ packages/core/src/engines/index.ts | 10 +-- packages/core/src/engines/types.ts | 4 +- packages/core/src/enums/platformName.ts | 1 + packages/core/src/index.ts | 1 + packages/core/src/integrations/types.ts | 2 +- packages/core/src/plugins/index.ts | 28 +++++---- packages/core/src/plugins/types.ts | 8 +-- packages/core/src/projects/package.ts | 4 +- packages/core/src/schema/common/index.ts | 2 + packages/core/src/schema/configFiles/app.ts | 2 + .../src/schema/configFiles/buildConfig.ts | 5 ++ .../core/src/schema/configFiles/engine.ts | 2 + .../src/schema/configFiles/integration.ts | 3 + packages/core/src/schema/configFiles/local.ts | 3 + .../core/src/schema/configFiles/overrides.ts | 3 + .../core/src/schema/configFiles/plugin.ts | 3 + .../core/src/schema/configFiles/private.ts | 3 + .../core/src/schema/configFiles/project.ts | 4 ++ .../core/src/schema/configFiles/runtime.ts | 3 + .../core/src/schema/configFiles/template.ts | 3 + .../core/src/schema/configFiles/templates.ts | 3 + packages/core/src/schema/configFiles/types.ts | 52 --------------- .../core/src/schema/configFiles/workspace.ts | 3 + .../core/src/schema/configFiles/workspaces.ts | 3 + .../platforms/fragments/templateAndroid.ts | 4 +- .../platforms/fragments/templateXcode.ts | 25 ++++---- packages/core/src/schema/platforms/index.ts | 2 + packages/core/src/schema/plugins/index.ts | 15 ++--- packages/core/src/schema/types.ts | 63 ------------------- packages/core/src/tasks/types.ts | 2 +- packages/core/src/templates/index.ts | 3 +- packages/core/src/types.ts | 16 +---- .../src/tasks/plugin/taskPluginAdd.ts | 4 +- packages/sdk-android/src/gradleParser.ts | 6 +- packages/sdk-android/src/kotlinParser.ts | 6 +- packages/sdk-android/src/types.ts | 4 +- packages/sdk-android/src/xmlValuesParser.ts | 4 +- packages/sdk-apple/src/objectiveCParser.ts | 10 +-- packages/sdk-apple/src/podfileParser.ts | 4 +- packages/sdk-apple/src/swiftParser.ts | 4 +- packages/sdk-apple/src/types.ts | 4 +- 48 files changed, 170 insertions(+), 242 deletions(-) delete mode 100644 packages/core/src/schema/configFiles/types.ts diff --git a/packages/core/src/configs/appConfigs.ts b/packages/core/src/configs/appConfigs.ts index 86c1e55f1f..6c077a4f01 100644 --- a/packages/core/src/configs/appConfigs.ts +++ b/packages/core/src/configs/appConfigs.ts @@ -2,9 +2,9 @@ import path from 'path'; import { fsExistsSync, fsReaddirSync, fsLstatSync, readObjectSync } from '../system/fs'; import { logDefault, logWarning } from '../logger'; -import { ConfigFileApp } from '../schema/configFiles/types'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; +import { type ConfigFileApp } from '../schema/configFiles/app'; const IGNORE_FOLDERS = ['.git']; diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 89cc1be07d..322c7ccd93 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -13,7 +13,7 @@ import { chalk, logDefault, logWarning, logDebug } from '../logger'; import { getContext } from '../context/provider'; import type { RnvContext, RnvContextBuildConfig } from '../context/types'; import { FileUtilsPropConfig } from '../system/types'; -import { PlatformKey } from '../schema/types'; +import { PlatformKey } from '../enums/platformName'; const _arrayMergeOverride = (_destinationArray: Array, sourceArray: Array) => sourceArray; diff --git a/packages/core/src/configs/configProject.ts b/packages/core/src/configs/configProject.ts index 9ba151fd98..7027a80f39 100644 --- a/packages/core/src/configs/configProject.ts +++ b/packages/core/src/configs/configProject.ts @@ -1,10 +1,10 @@ import { getRealPath, writeFileSync } from '../system/fs'; import { chalk, logDefault, logWarning } from '../logger'; -import { RnvPlatform } from '../types'; -import { PlatformKey } from '../schema/types'; -import { NpmPackageFile } from './types'; -import { ConfigFileProject } from '../schema/configFiles/types'; +import { type RnvPlatform } from '../types'; +import { type NpmPackageFile } from './types'; import { getContext } from '../context/provider'; +import { PlatformKey } from '../enums/platformName'; +import { type ConfigFileProject } from '../schema/configFiles/project'; const SYNCED_DEPS = [ 'rnv', diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index f8edb13de7..78f6b68221 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -3,17 +3,17 @@ import path from 'path'; import { mergeObjects, fsExistsSync, fsReaddirSync, getRealPath, readObjectSync, loadFile } from '../system/fs'; import { logWarning, logDebug, logDefault, chalk } from '../logger'; import { doResolve } from '../system/resolve'; -import { RnvContextFileObj, RnvContextPathObj, RnvContextFileKey } from '../context/types'; +import { type RnvContextFileObj, type RnvContextPathObj, type RnvContextFileKey } from '../context/types'; import { generateRnvConfigPathObj } from '../context/defaults'; import { generateContextPaths } from '../context'; import { generateBuildConfig } from './buildConfig'; import { generateLocalConfig } from './configLocal'; import { getWorkspaceDirPath } from './workspaces'; import { generatePlatformTemplatePaths } from './configProject'; -import { ConfigFileTemplates } from '../schema/configFiles/types'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; import { RnvFolderName } from '../enums/folderName'; +import { type ConfigFileTemplates } from '../schema/configFiles/templates'; export const loadFileExtended = (fileObj: Record, pathObj: RnvContextPathObj, key: RnvContextFileKey) => { const c = getContext(); diff --git a/packages/core/src/configs/workspaces.ts b/packages/core/src/configs/workspaces.ts index 52b0ddda63..dabeb945cf 100644 --- a/packages/core/src/configs/workspaces.ts +++ b/packages/core/src/configs/workspaces.ts @@ -4,9 +4,10 @@ import { getContext } from '../context/provider'; import path from 'path'; import { chalk, logDefault, logDebug, logInfo, logWarning } from '../logger'; -import { RnvContext } from '../context/types'; +import { type RnvContext } from '../context/types'; import { generateOptions, inquirerPrompt } from '../api'; -import { ConfigFileWorkspace, ConfigFileWorkspaces } from '../schema/configFiles/types'; +import { type ConfigFileWorkspace } from '../schema/configFiles/workspace'; +import { type ConfigFileWorkspaces } from '../schema/configFiles/workspaces'; export const createWorkspace = async (workspaceID: string, workspacePath: string) => { const c = getContext(); diff --git a/packages/core/src/context/contextProps.ts b/packages/core/src/context/contextProps.ts index 6488a145e1..6967851607 100644 --- a/packages/core/src/context/contextProps.ts +++ b/packages/core/src/context/contextProps.ts @@ -1,14 +1,15 @@ -import { GetConfigPropFn } from '../api/types'; -import { RnvContext } from './types'; +import { type GetConfigPropFn } from '../api/types'; +import { type RnvContext } from './types'; import { chalk, logError, logWarning } from '../logger'; -import { ConfigFileBuildConfig } from '../schema'; -import { ConfigProp, ConfigPropKey } from '../schema/types'; -import { BuildConfigKey, PlatformBuildSchemeKey, CommonPropKey, CommonBuildSchemeKey } from '../types'; -import { TimestampPathsConfig } from '../system/types'; +import { type ConfigFileBuildConfig } from '../schema'; +import { type ConfigProp, type ConfigPropKey } from '../schema/types'; +import { type TimestampPathsConfig } from '../system/types'; import path from 'path'; import { fsExistsSync } from '../system/fs'; import { getContext } from './provider'; -import { RnvCommonBuildSchemeSchema } from '../schema/common'; +import { type CommonBuildSchemeKey, type CommonPropKey, type RnvCommonBuildSchemeSchema } from '../schema/common'; +import { type PlatformBuildSchemeKey } from '../schema/platforms'; +import { type BuildConfigKey } from '../schema/configFiles/buildConfig'; const _getValueOrMergedObject = (resultScheme: object, resultPlatforms: object, resultCommon: object) => { if (resultScheme !== undefined) { diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 289e2fc953..8875d4bc0c 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -1,26 +1,25 @@ -import type { ConfigProp, ConfigPropKey, PlatformKey } from '../schema/types'; -import type { RnvEngine, RnvEnginePlatform } from '../engines/types'; -import type { OverridesOptions } from '../system/types'; -import type { RnvPlatform } from '../types'; -import type { - ConfigFileApp, - ConfigFileEngine, - ConfigFileLocal, - ConfigFilePlugin, - ConfigFilePrivate, - ConfigFileProject, - ConfigFileRuntime, - ConfigFileTemplates, - ConfigFileWorkspace, - ConfigFileWorkspaces, -} from '../schema/configFiles/types'; -import type { NpmPackageFile } from '../configs/types'; -import type { ConfigFileBuildConfig } from '../schema/configFiles/buildConfig'; -import type { ParamKeys, ProgramOptionsKey } from '../tasks/constants'; -import type { ExecaChildProcess } from 'execa'; -import type { RnvPlugin } from '../plugins/types'; -import type { RnvIntegration } from '../integrations/types'; -import type { DependencyMutation } from '../projects/types'; +import { type ConfigProp, type ConfigPropKey } from '../schema/types'; +import { type RnvEngine, type RnvEnginePlatform } from '../engines/types'; +import { type OverridesOptions } from '../system/types'; +import { type RnvPlatform } from '../types'; +import { type NpmPackageFile } from '../configs/types'; +import { type ConfigFileBuildConfig } from '../schema/configFiles/buildConfig'; +import { type ParamKeys, type ProgramOptionsKey } from '../tasks/constants'; +import { type ExecaChildProcess } from 'execa'; +import { type RnvPlugin } from '../plugins/types'; +import { type RnvIntegration } from '../integrations/types'; +import { type DependencyMutation } from '../projects/types'; +import { PlatformKey } from '../enums/platformName'; +import { type ConfigFileWorkspaces } from '../schema/configFiles/workspaces'; +import { type ConfigFileWorkspace } from '../schema/configFiles/workspace'; +import { type ConfigFileTemplates } from '../schema/configFiles/templates'; +import { type ConfigFileRuntime } from '../schema/configFiles/runtime'; +import { type ConfigFileProject } from '../schema/configFiles/project'; +import { type ConfigFileApp } from '../schema/configFiles/app'; +import { type ConfigFileLocal } from '../schema/configFiles/local'; +import { type ConfigFilePrivate } from '../schema/configFiles/private'; +import { type ConfigFilePlugin } from '../schema/configFiles/plugin'; +import { type ConfigFileEngine } from '../schema/configFiles/engine'; export type CreateContextOptions = { program: RnvContextProgram; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index d763e2e40a..8e0c1ed378 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -4,19 +4,19 @@ import { installPackageDependencies } from '../projects/npm'; import { logDebug, logDefault, chalk, logInfo, logWarning, logError } from '../logger'; import { doResolve } from '../system/resolve'; import { configurePlugins } from '../plugins'; -import { RnvContext } from '../context/types'; -import { RnvTask } from '../tasks/types'; -import { RenativeConfigVersion, RnvPlatform } from '../types'; -import { RnvEngine, RnvEngineInstallConfig, RnvEngineTemplate } from './types'; +import { type RnvContext } from '../context/types'; +import { type RnvTask } from '../tasks/types'; +import { type RenativeConfigVersion, type RnvPlatform } from '../types'; +import { type RnvEngine, type RnvEngineInstallConfig, type RnvEngineTemplate } from './types'; import { inquirerPrompt } from '../api'; import { getContext } from '../context/provider'; import { writeRenativeConfigFile } from '../configs/utils'; import { checkAndCreateProjectPackage } from '../projects/package'; import { getEngineTemplateByPlatform } from '../configs/engines'; -import { ConfigFileEngine } from '../schema/configFiles/types'; import { getConfigProp } from '../context/contextProps'; import { registerRnvTasks } from '../tasks/taskRegistry'; import { createDependencyMutation } from '../projects/mutations'; +import { type ConfigFileEngine } from '../schema/configFiles/engine'; export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, engConfig?: RnvEngineTemplate) => { const c = getContext(); diff --git a/packages/core/src/engines/types.ts b/packages/core/src/engines/types.ts index 57debba1d0..81223afc59 100644 --- a/packages/core/src/engines/types.ts +++ b/packages/core/src/engines/types.ts @@ -1,5 +1,5 @@ -import { ConfigFileEngine } from '../schema/configFiles/types'; -import type { PlatformKey } from '../schema/types'; +import { PlatformKey } from '../enums/platformName'; +import { type ConfigFileEngine } from '../schema/configFiles/engine'; import type { RnvTaskMap } from '../tasks/types'; export type RnvEngine = { diff --git a/packages/core/src/enums/platformName.ts b/packages/core/src/enums/platformName.ts index 3f5ab97808..6f4b7b9b60 100644 --- a/packages/core/src/enums/platformName.ts +++ b/packages/core/src/enums/platformName.ts @@ -81,3 +81,4 @@ export const RnvPlatforms = [ type RnvPlatformName = typeof RnvPlatformName; export type RnvPlatformNameKey = keyof RnvPlatformName; +export type PlatformKey = RnvPlatformNameKey; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c1b9b091ee..ab577beb11 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -37,6 +37,7 @@ export * from './tasks/taskCreator'; export * from './schema'; export * from './schema/defaults'; export * from './schema/schemaManager'; +export * from './schema/common'; export * from './system/exec'; export * from './system/fs'; diff --git a/packages/core/src/integrations/types.ts b/packages/core/src/integrations/types.ts index a6d6effdfb..4c14b5fef0 100644 --- a/packages/core/src/integrations/types.ts +++ b/packages/core/src/integrations/types.ts @@ -1,4 +1,4 @@ -import { ConfigFileIntegration } from '../schema/configFiles/types'; +import { type ConfigFileIntegration } from '../schema/configFiles/integration'; import { RnvTask } from '../tasks/types'; export type RnvIntegration = { diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 1471e6762b..0f5a0633fc 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -13,23 +13,25 @@ import { } from '../system/fs'; import { chalk, logDebug, logError, logInfo, logSuccess, logDefault, logWarning } from '../logger'; import { doResolve } from '../system/resolve'; -import { RnvContext } from '../context/types'; -import { PluginCallback, RnvPlugin, RnvPluginScope } from './types'; -import { RenativeConfigPaths, RenativeConfigPlugin, RenativeConfigPluginPlatform } from '../schema/types'; +import { type RnvContext } from '../context/types'; +import { type PluginCallback, type RnvPlugin, type RnvPluginScope } from './types'; import { inquirerPrompt } from '../api'; import { writeRenativeConfigFile } from '../configs/utils'; import { installPackageDependencies } from '../projects/npm'; -import { OverridesOptions, ResolveOptions } from '../system/types'; -import { ConfigFileOverrides, ConfigFilePlugin, ConfigFileTemplates } from '../schema/configFiles/types'; +import { type OverridesOptions, type ResolveOptions } from '../system/types'; import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; -import { AsyncCallback } from '../projects/types'; +import { type AsyncCallback } from '../projects/types'; import { createDependencyMutation } from '../projects/mutations'; import { updatePackage } from '../projects/package'; -import { RnvPluginPlatformSchema } from '../schema/plugins'; +import { type RnvPluginPlatformSchema, type RnvPluginSchema } from '../schema/plugins'; +import { type ConfigProjectPaths } from '../schema/configFiles/project'; +import { type ConfigFileTemplates } from '../schema/configFiles/templates'; +import { type ConfigFileOverrides } from '../schema/configFiles/overrides'; +import { type ConfigFilePlugin } from '../schema/configFiles/plugin'; -const _getPluginScope = (plugin: RenativeConfigPlugin | string): RnvPluginScope => { +const _getPluginScope = (plugin: RnvPluginSchema | string): RnvPluginScope => { if (typeof plugin === 'string') { if (plugin.startsWith('source:')) { return { scope: plugin.split(':').pop() || 'rnv' }; @@ -60,7 +62,7 @@ export const getMergedPlugin = (c: RnvContext, key: string) => { const _getMergedPlugin = ( c: RnvContext, - plugin: RenativeConfigPlugin | string | undefined, + plugin: RnvPluginSchema | string | undefined, pluginKey: string, parentScope?: string, scopes?: Array, @@ -111,7 +113,7 @@ const _getMergedPlugin = ( scopes, true ); - let currentPlugin: RenativeConfigPlugin; + let currentPlugin: RnvPluginSchema; if (typeof plugin === 'string' || plugin instanceof String) { currentPlugin = {}; } else { @@ -389,7 +391,7 @@ export const resolvePluginDependants = async () => { const _resolvePluginDependencies = async ( c: RnvContext, key: string, - keyScope: RenativeConfigPlugin | string, + keyScope: RnvPluginSchema | string, parentKey?: string ) => { // IMPORTANT: Do not cache this valuse as they need to be refreshed every @@ -458,7 +460,7 @@ export const parsePlugins = ( const excludedPlugins = getConfigProp('excludedPlugins') || []; - const handleActivePlugin = (plugin: RnvPlugin, pluginPlat: RenativeConfigPluginPlatform, key: string) => { + const handleActivePlugin = (plugin: RnvPlugin, pluginPlat: RnvPluginPlatformSchema, key: string) => { // log deprecated if present if (plugin.deprecated) { logWarning(plugin.deprecated); @@ -581,7 +583,7 @@ export const loadPluginTemplates = async () => { const _parsePluginTemplateDependencies = ( c: RnvContext, - customPluginTemplates: RenativeConfigPaths['pluginTemplates'], + customPluginTemplates: ConfigProjectPaths['pluginTemplates'], scope = 'root' ) => { logDefault('_parsePluginTemplateDependencies', `scope:${scope}`); diff --git a/packages/core/src/plugins/types.ts b/packages/core/src/plugins/types.ts index 64f9f855ad..cb4572c08d 100644 --- a/packages/core/src/plugins/types.ts +++ b/packages/core/src/plugins/types.ts @@ -1,7 +1,7 @@ -import { ConfigFilePlugin } from '../schema/configFiles/types'; -import { RenativeConfigPlugin, RenativeConfigPluginPlatform } from '../schema/types'; +import { ConfigFilePlugin } from '../schema/configFiles/plugin'; +import { type RnvPluginPlatformSchema, type RnvPluginSchema } from '../schema/plugins'; -export type PluginCallback = (plugin: RnvPlugin, pluginPlat: RenativeConfigPluginPlatform, key: string) => void; +export type PluginCallback = (plugin: RnvPlugin, pluginPlat: RnvPluginPlatformSchema, key: string) => void; export type PluginListResponse = { asString: string; @@ -23,7 +23,7 @@ export type RnvPluginScope = { scope: string; }; -export type RnvPlugin = RenativeConfigPlugin & { +export type RnvPlugin = RnvPluginSchema & { packageName?: string; scope?: string; _scopes?: Array; diff --git a/packages/core/src/projects/package.ts b/packages/core/src/projects/package.ts index 9bb89836ae..ab6df1ad5a 100644 --- a/packages/core/src/projects/package.ts +++ b/packages/core/src/projects/package.ts @@ -2,11 +2,11 @@ import path from 'path'; import merge from 'deepmerge'; import { fsExistsSync, fsWriteFileSync, loadFile, readObjectSync } from '../system/fs'; import { logDefault, logWarning, logInfo } from '../logger'; -import { ConfigFileTemplate } from '../schema/configFiles/types'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; -import { NpmPackageFile } from '../configs/types'; +import { type NpmPackageFile } from '../configs/types'; import { writeRenativeConfigFile } from '../configs/utils'; +import { type ConfigFileTemplate } from '../schema/configFiles/template'; export const updatePackage = (override: Partial) => { const c = getContext(); diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index c9668499c8..9ab99da232 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -75,6 +75,7 @@ export const zodCommonSchemaFragment = z }) .partial(); export type RnvCommonSchemaFragment = z.infer; +export type CommonPropKey = keyof RnvCommonSchemaFragment; // We Request keys excluding buildScheme (not RnvCommonSchema) export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment .merge( @@ -92,6 +93,7 @@ export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment export type RnvCommonBuildSchemeSchema = Partial< RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformBaseFragment >; +export type CommonBuildSchemeKey = keyof RnvCommonBuildSchemeSchema; export type RnvCommonSchema = Partial & { buildSchemes?: Record; diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index e343fcba31..8c869ecc0e 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -39,3 +39,5 @@ export type RnvRootAppSchema = RnvRootAppBaseFragment & { platforms?: RnvPlatformsSchema; plugins?: RnvPluginsSchema; }; +// appConfigs/**/renative.json +export type ConfigFileApp = RnvRootAppSchema; diff --git a/packages/core/src/schema/configFiles/buildConfig.ts b/packages/core/src/schema/configFiles/buildConfig.ts index b2530d7a41..848ece6dbe 100644 --- a/packages/core/src/schema/configFiles/buildConfig.ts +++ b/packages/core/src/schema/configFiles/buildConfig.ts @@ -37,6 +37,11 @@ export type ConfigFileBuildConfig = RnvRootProjectSchema & _RootLocalSchemaType & RnvRootAppBaseFragment; + +export type BuildConfigKey = keyof ConfigFileBuildConfig; + // Common & // PluginsMap & // PlatformsMap; + +// export type RenativeConfigRnvTaskName = keyof Required['tasks']>; diff --git a/packages/core/src/schema/configFiles/engine.ts b/packages/core/src/schema/configFiles/engine.ts index 2a95691f5c..d8f37989ed 100644 --- a/packages/core/src/schema/configFiles/engine.ts +++ b/packages/core/src/schema/configFiles/engine.ts @@ -32,3 +32,5 @@ export const RootEngineSchema = z .partial(); export type RnvRootEngineSchema = z.infer; +// renative.engine.json +export type ConfigFileEngine = RnvRootEngineSchema; diff --git a/packages/core/src/schema/configFiles/integration.ts b/packages/core/src/schema/configFiles/integration.ts index 6a485e6349..9bd85cad3e 100644 --- a/packages/core/src/schema/configFiles/integration.ts +++ b/packages/core/src/schema/configFiles/integration.ts @@ -5,3 +5,6 @@ export const zodRootIntegrationSchema = z.object({ }); // export type RnvRootIntegrationSchema = z.infer; + +// renative.integration.json +export type ConfigFileIntegration = RnvRootIntegrationSchema; diff --git a/packages/core/src/schema/configFiles/local.ts b/packages/core/src/schema/configFiles/local.ts index 190bdbcd4a..e8fa93bac6 100644 --- a/packages/core/src/schema/configFiles/local.ts +++ b/packages/core/src/schema/configFiles/local.ts @@ -18,3 +18,6 @@ export const RootLocalSchema = z.object({ }); export type _RootLocalSchemaType = z.infer; + +// renative.local.json +export type ConfigFileLocal = _RootLocalSchemaType; diff --git a/packages/core/src/schema/configFiles/overrides.ts b/packages/core/src/schema/configFiles/overrides.ts index a5e8fc8ec8..87cc6cf534 100644 --- a/packages/core/src/schema/configFiles/overrides.ts +++ b/packages/core/src/schema/configFiles/overrides.ts @@ -5,3 +5,6 @@ export const zodRootOverridesSchema = z.object({ }); export type RnvRootOverridesSchema = z.infer; + +//overrides.json +export type ConfigFileOverrides = RnvRootOverridesSchema; diff --git a/packages/core/src/schema/configFiles/plugin.ts b/packages/core/src/schema/configFiles/plugin.ts index 361ce6f115..32973d0b57 100644 --- a/packages/core/src/schema/configFiles/plugin.ts +++ b/packages/core/src/schema/configFiles/plugin.ts @@ -9,3 +9,6 @@ const zodPluginFragment = z.object({ export const RootPluginSchema: AnyZodObject = zodPluginSchema.merge(zodPluginFragment); export type _RootPluginSchemaType = RnvPluginSchema & z.infer; + +// renative.plugin.json +export type ConfigFilePlugin = _RootPluginSchemaType; diff --git a/packages/core/src/schema/configFiles/private.ts b/packages/core/src/schema/configFiles/private.ts index e4ea91364e..593c8c2156 100644 --- a/packages/core/src/schema/configFiles/private.ts +++ b/packages/core/src/schema/configFiles/private.ts @@ -47,4 +47,7 @@ export const RootPrivateSchema = z.object({ export type _RootPrivateSchemaType = z.infer; +// renative.private.json +export type ConfigFilePrivate = _RootPrivateSchemaType; + export type _MergedPlatformPrivateObjectType = z.infer; diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 99bac78bec..9fa18e1b2e 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -186,3 +186,7 @@ export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { platforms?: RnvPlatformsSchema; plugins?: RnvPluginsSchema; }; +// renative.json +export type ConfigFileProject = RnvRootProjectSchema; + +export type ConfigProjectPaths = Required['paths']; diff --git a/packages/core/src/schema/configFiles/runtime.ts b/packages/core/src/schema/configFiles/runtime.ts index a25f70e0f6..9190c31934 100644 --- a/packages/core/src/schema/configFiles/runtime.ts +++ b/packages/core/src/schema/configFiles/runtime.ts @@ -5,3 +5,6 @@ export const RootRuntimeSchema = z.object({ }); export type _RootRuntimeSchemaType = z.infer; + +// renative.runtime.json +export type ConfigFileRuntime = _RootRuntimeSchemaType; diff --git a/packages/core/src/schema/configFiles/template.ts b/packages/core/src/schema/configFiles/template.ts index c477aaab15..af4b9a753d 100644 --- a/packages/core/src/schema/configFiles/template.ts +++ b/packages/core/src/schema/configFiles/template.ts @@ -70,6 +70,9 @@ export type RnvRootTemplateSchema = { bootstrapConfig?: RnvBootstrapConfig; }; +// renative.template.json +export type ConfigFileTemplate = RnvRootTemplateSchema; + // { // title: 'Which service to use?', // type: 'list', diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index f9636fdc60..e00d1d44b3 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -38,3 +38,6 @@ export const RootTemplatesSchema = z .partial(); export type _RootTemplatesSchemaType = z.infer; + +// renative.templates.json +export type ConfigFileTemplates = _RootTemplatesSchemaType; diff --git a/packages/core/src/schema/configFiles/types.ts b/packages/core/src/schema/configFiles/types.ts deleted file mode 100644 index dffa3bc196..0000000000 --- a/packages/core/src/schema/configFiles/types.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { RnvRootAppSchema } from './app'; -import { RnvRootEngineSchema } from './engine'; -import { _RootWorkspaceSchemaType } from './workspace'; -import { RnvRootIntegrationSchema } from './integration'; -import { _RootLocalSchemaType } from './local'; -import { _RootPluginSchemaType } from './plugin'; -import { _RootPrivateSchemaType } from './private'; -import { RnvRootProjectSchema } from './project'; -import { _RootTemplatesSchemaType } from './templates'; -import { RnvRootWorkspacesSchema } from './workspaces'; -import { _RootRuntimeSchemaType } from './runtime'; -import { RnvRootOverridesSchema } from './overrides'; -import { RnvRootTemplateSchema } from './template'; - -// renative.json -export type ConfigFileProject = RnvRootProjectSchema; - -// appConfigs/**/renative.json -export type ConfigFileApp = RnvRootAppSchema; - -// renative.engine.json -export type ConfigFileEngine = RnvRootEngineSchema; - -// renative.plugin.json -export type ConfigFilePlugin = _RootPluginSchemaType; - -// renative.local.json -export type ConfigFileLocal = _RootLocalSchemaType; - -// renative.private.json -export type ConfigFilePrivate = _RootPrivateSchemaType; - -// renative.template.json -export type ConfigFileTemplate = RnvRootTemplateSchema; - -// renative.templates.json -export type ConfigFileTemplates = _RootTemplatesSchemaType; - -// renative.workspace.json -export type ConfigFileWorkspace = _RootWorkspaceSchemaType; - -// renative.workspaces.json -export type ConfigFileWorkspaces = RnvRootWorkspacesSchema; - -// renative.integration.json -export type ConfigFileIntegration = RnvRootIntegrationSchema; - -// renative.runtime.json -export type ConfigFileRuntime = _RootRuntimeSchemaType; - -//overrides.json -export type ConfigFileOverrides = RnvRootOverridesSchema; diff --git a/packages/core/src/schema/configFiles/workspace.ts b/packages/core/src/schema/configFiles/workspace.ts index d5b0e3054f..995b4e49b2 100644 --- a/packages/core/src/schema/configFiles/workspace.ts +++ b/packages/core/src/schema/configFiles/workspace.ts @@ -33,3 +33,6 @@ export const RootWorkspaceSchema = z.object({ }); export type _RootWorkspaceSchemaType = z.infer; + +// renative.workspace.json +export type ConfigFileWorkspace = _RootWorkspaceSchemaType; diff --git a/packages/core/src/schema/configFiles/workspaces.ts b/packages/core/src/schema/configFiles/workspaces.ts index 9ad68009a5..997ac79acd 100644 --- a/packages/core/src/schema/configFiles/workspaces.ts +++ b/packages/core/src/schema/configFiles/workspaces.ts @@ -16,3 +16,6 @@ export const zodRootWorkspacesSchema = z.object({ }); export type RnvRootWorkspacesSchema = z.infer; + +// renative.workspaces.json +export type ConfigFileWorkspaces = RnvRootWorkspacesSchema; diff --git a/packages/core/src/schema/platforms/fragments/templateAndroid.ts b/packages/core/src/schema/platforms/fragments/templateAndroid.ts index 00ca55f3ba..4e638e872c 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroid.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroid.ts @@ -137,8 +137,8 @@ export const zodTemplateAndroidFragment = z .partial(); // .describe('Allows more advanced modifications to Android based project template'); -export type _ManifestChildWithChildrenType = z.infer; +export type AndroidManifestNode = z.infer; -export type _AndroidManifestType = z.infer; +export type AndroidManifest = z.infer; export type RnvTemplateAndroidFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateXcode.ts b/packages/core/src/schema/platforms/fragments/templateXcode.ts index f5dbf762ac..a961eb3410 100644 --- a/packages/core/src/schema/platforms/fragments/templateXcode.ts +++ b/packages/core/src/schema/platforms/fragments/templateXcode.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -const Podfile = z +const zodPodfile = z .object({ injectLines: z.optional(z.array(z.string())), post_install: z.optional(z.array(z.string())), @@ -15,7 +15,9 @@ const Podfile = z }) .describe('Allows to manipulate Podfile'); -const XcodeProj = z.object({ +// type RnvPodfile = z.infer; + +const zodXcodeProj = z.object({ sourceFiles: z.optional(z.array(z.string())), resourceFiles: z.optional(z.array(z.string())), headerFiles: z.optional(z.array(z.string())), @@ -31,6 +33,7 @@ const XcodeProj = z.object({ frameworks: z.optional(z.array(z.string())), buildSettings: z.optional(z.record(z.string(), z.string())), }); +// type RnvXcodeProj = z.infer; const AppDelegateMethod = z.union([ z.string(), @@ -41,7 +44,7 @@ const AppDelegateMethod = z.union([ }), ]); -const AppDelegateMm = z.object({ +const zodAppDelegateMm = z.object({ appDelegateMethods: z.optional( z.object({ application: z @@ -70,26 +73,26 @@ const AppDelegateMm = z.object({ ), appDelegateImports: z.optional(z.array(z.string())), }); -const AppDelegateH = z.object({ +const zodAppDelegateH = z.object({ appDelegateImports: z.optional(z.array(z.string())), appDelegateExtensions: z.optional(z.array(z.string())), }); -const InfoPlist = z.object({}); +const zodInfoPlist = z.object({}); // .describe('Allows more advanced modifications to Xcode based project template'); -export type _AppDelegateMethodType = z.infer; +export type ConfigAppDelegateMethod = z.infer; export const zodTemplateXcodeFragment = z .object({ templateXcode: z .object({ - Podfile: z.optional(Podfile), - project_pbxproj: z.optional(XcodeProj), - AppDelegate_mm: z.optional(AppDelegateMm), - AppDelegate_h: z.optional(AppDelegateH), - Info_plist: z.optional(InfoPlist), + Podfile: z.optional(zodPodfile), + project_pbxproj: z.optional(zodXcodeProj), + AppDelegate_mm: z.optional(zodAppDelegateMm), + AppDelegate_h: z.optional(zodAppDelegateH), + Info_plist: z.optional(zodInfoPlist), }) .partial(), }) diff --git a/packages/core/src/schema/platforms/index.ts b/packages/core/src/schema/platforms/index.ts index 06d7844364..046f9b2e8b 100644 --- a/packages/core/src/schema/platforms/index.ts +++ b/packages/core/src/schema/platforms/index.ts @@ -90,9 +90,11 @@ export type RnvPlatformSchemaFragment = RnvCommonSchemaFragment & RnvPlatformNextJsFragment & RnvTemplateAndroidFragment & RnvTemplateXcodeFragment; +export type PlatPropKey = keyof RnvPlatformSchemaFragment; // We Request keys excluding buildScheme (not RnvPlatformSchema) // export type RnvPlatformsSchema = z.infer; export type RnvPlatformBuildSchemeSchema = RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformSchemaFragment; +export type PlatformBuildSchemeKey = keyof RnvPlatformBuildSchemeSchema; export type RnvPlatformSchema = RnvPlatformSchemaFragment & { buildSchemes?: Record; diff --git a/packages/core/src/schema/plugins/index.ts b/packages/core/src/schema/plugins/index.ts index 648a2d0eb7..c51fea54d8 100644 --- a/packages/core/src/schema/plugins/index.ts +++ b/packages/core/src/schema/plugins/index.ts @@ -3,7 +3,7 @@ import { RnvPluginPlatformAndroidFragment, zodPluginPlatformAndroidFragment } fr import { RnvPluginPlatformiOSFragment, zodPluginPlatformiOSFragment } from './fragments/platformIos'; import { RnvPluginPlatformBaseFragment, zodPluginPlatformBaseFragment } from './fragments/platformBase'; import { RnvPluginBaseFragment, zodPluginBaseFragment } from './fragments/base'; -import { PlatformKey } from '../types'; +import { PlatformKey } from '../../enums/platformName'; const androidSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformAndroidFragment); @@ -34,15 +34,16 @@ export const zodPluginSchema: AnyZodObject = zodPluginBaseFragment.merge( }) ); +export const zodPluginsSchema = z + .record(z.string(), z.union([zodPluginSchema, z.string()]).nullable()) + .describe( + 'Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config' + ); + export type RnvPluginPlatformSchema = RnvPluginPlatformBaseFragment & RnvPluginPlatformAndroidFragment & RnvPluginPlatformiOSFragment; export type RnvPluginPlatformsSchema = Record; export type RnvPluginSchema = RnvPluginBaseFragment & Partial; export type RnvPluginsSchema = Record; - -export const zodPluginsSchema = z - .record(z.string(), z.union([zodPluginSchema, z.string()]).nullable()) - .describe( - 'Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config' - ); +// export type RenativeWebpackConfig = RnvPluginSchema['webpackConfig']; diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 679688c289..06643ad140 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -1,74 +1,11 @@ -import type { RnvPluginPlatformSchema, RnvPluginSchema } from './plugins'; -import type { _AppDelegateMethodType } from './platforms/fragments/templateXcode'; import type { RnvPlatformSchemaFragment } from './platforms'; import type { RnvRootProjectBaseFragment } from './configFiles/project'; -import type { _AndroidManifestType, _ManifestChildWithChildrenType } from './platforms/fragments/templateAndroid'; import type { _MergedPlatformPrivateObjectType } from './configFiles/private'; -import type { ConfigFileBuildConfig } from './configFiles/buildConfig'; -import { type RnvPlatformNameKey } from '../enums/platformName'; import { RnvRootAppBaseFragment } from './configFiles/app'; -//=============================== -// NORMALIZED (MERGED+NORMALIZED) -//=============================== - export type ConfigProp = Required & Required & Required<_MergedPlatformPrivateObjectType> & Required; export type ConfigPropKey = keyof ConfigProp; - -//=============================== -// SUB-TYPES -//=============================== - -export type RenativeConfigPlugin = RnvPluginSchema; - -export type RenativeConfigPaths = Required['paths']; - -export type RenativeConfigPluginPlatform = RnvPluginPlatformSchema; - -export type RenativeWebpackConfig = RenativeConfigPlugin['webpackConfig']; - -export type PlatformKey = RnvPlatformNameKey; - -export type RenativeConfigRnvTaskName = keyof Required['tasks']>; - -export type RenativeConfigAppDelegateMethod = _AppDelegateMethodType; - -export type AndroidManifestNode = _ManifestChildWithChildrenType; - -export type AndroidManifest = _AndroidManifestType; - -// export type ManifestNode = _ManifestChildType; - -// export const test = (test: _ConfigRootMerged) => { -// console.log(test); - -// const plugin = test.plugins['ss']; -// if (typeof plugin !== 'string') { -// console.log(plugin); -// } -// }; - -export type PlatformsMapSchema = { - android: T; - androidtv: T; - androidwear: T; - firetv: T; - ios: T; - tvos: T; - tizen: T; - tizenmobile: T; - tizenwatch: T; - webos: T; - web: T; - webtv: T; - chromecast: T; - kaios: T; - macos: T; - linux: T; - windows: T; - xbox: T; -}; diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index 241697d0b1..60f42122a3 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -1,5 +1,5 @@ import { RnvContext } from '../context/types'; -import type { PlatformKey } from '../schema/types'; +import { PlatformKey } from '../enums/platformName'; export type RnvTask = { task: string; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index da53e22196..80abf2a56f 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -10,11 +10,12 @@ import { import { chalk, logError, logInfo, logWarning, logDefault, logDebug } from '../logger'; import { doResolve } from '../system/resolve'; import { RnvContext } from '../context/types'; -import { ConfigFileProject, ConfigFileTemplate } from '../schema/configFiles/types'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; import { RnvFolderName } from '../enums/folderName'; import { checkIfProjectAndNodeModulesExists } from '../projects/npm'; +import { type ConfigFileTemplate } from '../schema/configFiles/template'; +import { type ConfigFileProject } from '../schema/configFiles/project'; export const configureTemplateFiles = async () => { logDefault('configureTemplateFiles'); diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 758b17b372..a941427ff0 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,20 +1,6 @@ -import type { ConfigFileBuildConfig } from './schema'; -import { RnvCommonBuildSchemeSchema, RnvCommonSchemaFragment } from './schema/common'; -import { RnvPlatformBuildSchemeSchema, RnvPlatformSchemaFragment } from './schema/platforms'; -import type { PlatformKey } from './schema/types'; - -export * from './schema/configFiles/types'; +import { PlatformKey } from './enums/platformName'; export type RnvPlatform = PlatformKey | null; - export type RenativeConfigVersion = string | { version: string }; - export type RnvError = any; - export type Env = Record; - -export type PlatPropKey = keyof RnvPlatformSchemaFragment; // We Request keys excluding buildScheme (not RnvPlatformSchema) -export type PlatformBuildSchemeKey = keyof RnvPlatformBuildSchemeSchema; -export type CommonBuildSchemeKey = keyof RnvCommonBuildSchemeSchema; -export type CommonPropKey = keyof RnvCommonSchemaFragment; // We Request keys excluding buildScheme (not RnvCommonSchema) -export type BuildConfigKey = keyof ConfigFileBuildConfig; diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index 1f1ea72a95..5639383c9e 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -7,7 +7,7 @@ import { PluginListResponseItem, getApi, inquirerPrompt, - RenativeConfigPlugin, + RnvPluginSchema, createTask, RnvTaskName, } from '@rnv/core'; @@ -75,7 +75,7 @@ export default createTask({ }); finalProps[pluginProps[i2]] = propValue; } - const pluginToAdd: RenativeConfigPlugin = {}; + const pluginToAdd: RnvPluginSchema = {}; pluginToAdd.props = finalProps; cnfPlugins[pluginKey] = pluginToAdd; } diff --git a/packages/sdk-android/src/gradleParser.ts b/packages/sdk-android/src/gradleParser.ts index c48fa2ecd8..19b7e58b8e 100644 --- a/packages/sdk-android/src/gradleParser.ts +++ b/packages/sdk-android/src/gradleParser.ts @@ -1,6 +1,6 @@ import { OverridesOptions, - RenativeConfigPluginPlatform, + RnvPluginPlatformSchema, RnvContext, RnvPlugin, chalk, @@ -583,7 +583,7 @@ export const parseGradlePropertiesSync = () => { writeCleanFile(getBuildFilePath(gradleProperties), path.join(appFolder, gradleProperties), injects, undefined, c); }; -export const injectPluginGradleSync = (pluginRoot: RnvPlugin, plugin: RenativeConfigPluginPlatform, key: string) => { +export const injectPluginGradleSync = (pluginRoot: RnvPlugin, plugin: RnvPluginPlatformSchema, key: string) => { // const keyFixed = key.replace(/\//g, '-').replace(/@/g, ''); // const packagePath = plugin.path ?? `${key}/android`; // let pathAbsolute; @@ -628,7 +628,7 @@ export const injectPluginGradleSync = (pluginRoot: RnvPlugin, plugin: RenativeCo } }; -export const parseAndroidConfigObject = (plugin?: RenativeConfigPluginPlatform, key = '') => { +export const parseAndroidConfigObject = (plugin?: RnvPluginPlatformSchema, key = '') => { // APP/BUILD.GRADLE const c = getContext(); const templateAndroid = plugin?.templateAndroid; diff --git a/packages/sdk-android/src/kotlinParser.ts b/packages/sdk-android/src/kotlinParser.ts index d025a4d0a4..c2858ca3e9 100644 --- a/packages/sdk-android/src/kotlinParser.ts +++ b/packages/sdk-android/src/kotlinParser.ts @@ -1,6 +1,6 @@ import { OverridesOptions, - RenativeConfigPluginPlatform, + RnvPluginPlatformSchema, RnvContext, getAppFolder, getConfigProp, @@ -184,7 +184,7 @@ export const parseSplashActivitySync = () => { ); }; -export const injectPluginKotlinSync = (plugin: RenativeConfigPluginPlatform, key: string, pkg: string | undefined) => { +export const injectPluginKotlinSync = (plugin: RnvPluginPlatformSchema, key: string, pkg: string | undefined) => { const c = getContext(); const templ = plugin.templateAndroid; const mainActivity = templ?.MainActivity_kt; @@ -243,7 +243,7 @@ export const injectPluginKotlinSync = (plugin: RenativeConfigPluginPlatform, key } }; -const _injectPackage = (c: RnvContext, plugin: RenativeConfigPluginPlatform, pkg: string | undefined) => { +const _injectPackage = (c: RnvContext, plugin: RnvPluginPlatformSchema, pkg: string | undefined) => { if (pkg && !plugin?.forceLinking) { c.payload.pluginConfigAndroid.pluginApplicationImports += `import ${pkg}\n`; } diff --git a/packages/sdk-android/src/types.ts b/packages/sdk-android/src/types.ts index 5d63bcb526..e251cab064 100644 --- a/packages/sdk-android/src/types.ts +++ b/packages/sdk-android/src/types.ts @@ -1,4 +1,4 @@ -import { RenativeConfigPluginPlatform, RnvContext } from '@rnv/core'; +import { RnvPluginPlatformSchema, RnvContext } from '@rnv/core'; export type Payload = { pluginConfigAndroid: { @@ -89,7 +89,7 @@ export type AndroidDevice = { isRunning?: boolean; }; -export type TemplateAndroid = Required['templateAndroid']>; +export type TemplateAndroid = Required['templateAndroid']>; // export type AndroidManifestJSONNode = { // tag: string; diff --git a/packages/sdk-android/src/xmlValuesParser.ts b/packages/sdk-android/src/xmlValuesParser.ts index 12925ada61..413588c1b2 100644 --- a/packages/sdk-android/src/xmlValuesParser.ts +++ b/packages/sdk-android/src/xmlValuesParser.ts @@ -1,6 +1,6 @@ import path from 'path'; import { - RenativeConfigPluginPlatform, + RnvPluginPlatformSchema, getAppFolder, getConfigProp, writeFileSync, @@ -40,7 +40,7 @@ export const parseValuesColorsSync = () => { writeCleanFile(getBuildFilePath(stringsPath), path.join(appFolder, stringsPath), injects, undefined, c); }; -export const injectPluginXmlValuesSync = (plugin: RenativeConfigPluginPlatform) => { +export const injectPluginXmlValuesSync = (plugin: RnvPluginPlatformSchema) => { const rStrings = plugin.templateAndroid?.strings_xml?.children; if (rStrings) { const c = getContext(); diff --git a/packages/sdk-apple/src/objectiveCParser.ts b/packages/sdk-apple/src/objectiveCParser.ts index 167ea14ac3..783f86825e 100644 --- a/packages/sdk-apple/src/objectiveCParser.ts +++ b/packages/sdk-apple/src/objectiveCParser.ts @@ -1,6 +1,6 @@ import path from 'path'; import { - RenativeConfigPluginPlatform, + type RnvPluginPlatformSchema, getConfigProp, getFlavouredProp, chalk, @@ -9,7 +9,7 @@ import { logWarning, parsePlugins, writeCleanFile, - RenativeConfigAppDelegateMethod, + type ConfigAppDelegateMethod, getContext, } from '@rnv/core'; import { @@ -282,7 +282,7 @@ export const parseAppDelegate = ( resolve(); }); -export const injectPluginObjectiveCSync = (c: Context, plugin: RenativeConfigPluginPlatform, key: string) => { +export const injectPluginObjectiveCSync = (c: Context, plugin: RnvPluginPlatformSchema, key: string) => { logDebug(`injectPluginObjectiveCSync:${c.platform}:${key}`); const templateXcode = getFlavouredProp(plugin, 'templateXcode'); const appDelegateMmImports = templateXcode?.AppDelegate_mm?.appDelegateImports; @@ -319,12 +319,12 @@ export const injectPluginObjectiveCSync = (c: Context, plugin: RenativeConfigPlu if (apDelMet) { const amdk2 = Object.keys(apDelMet) as Array; amdk2.forEach((key2) => { - const plugArr: Array = + const plugArr: Array = c.payload.pluginConfigiOS.appDelegateMmMethods[delKey][key2]; if (!plugArr) { logWarning(`appDelegateMethods.${delKey}.${chalk().red(key2)} not supported. SKIPPING.`); } else { - const plugVal: Array = apDelMet[key2]; + const plugVal: Array = apDelMet[key2]; if (plugVal) { plugVal.forEach((v) => { const isString = typeof v === 'string'; diff --git a/packages/sdk-apple/src/podfileParser.ts b/packages/sdk-apple/src/podfileParser.ts index b8c34fb8bf..e22ce8d160 100644 --- a/packages/sdk-apple/src/podfileParser.ts +++ b/packages/sdk-apple/src/podfileParser.ts @@ -1,7 +1,6 @@ import path from 'path'; import { RnvPlugin, - RenativeConfigPluginPlatform, OverridesOptions, getAppFolder, getConfigProp, @@ -11,6 +10,7 @@ import { writeCleanFile, DEFAULTS, getContext, + type RnvPluginPlatformSchema, } from '@rnv/core'; import { addSystemInjects, getAppTemplateFolder } from '@rnv/sdk-utils'; @@ -162,7 +162,7 @@ export const parsePodFile = async () => { const _injectPod = ( podName: string, - pluginPlat: RenativeConfigPluginPlatform | undefined, + pluginPlat: RnvPluginPlatformSchema | undefined, _plugin: RnvPlugin, _key: string ) => { diff --git a/packages/sdk-apple/src/swiftParser.ts b/packages/sdk-apple/src/swiftParser.ts index 6161f78b39..f63245b720 100644 --- a/packages/sdk-apple/src/swiftParser.ts +++ b/packages/sdk-apple/src/swiftParser.ts @@ -1,6 +1,6 @@ // import path from 'path'; // import { -// RenativeConfigPluginPlatform, +// RnvPluginPlatformSchema, // getEntryFile, // getAppTemplateFolder, // getConfigProp, @@ -256,7 +256,7 @@ // resolve(); // }); -// export const injectPluginSwiftSync = (c: Context, plugin: RenativeConfigPluginPlatform, key: string) => { +// export const injectPluginSwiftSync = (c: Context, plugin: RnvPluginPlatformSchema, key: string) => { // logDebug(`injectPluginSwiftSync:${c.platform}:${key}`); // const templateXcode = getFlavouredProp(plugin, 'templateXcode'); // const appDelegateImports = templateXcode?.AppDelegate_mm?.appDelegateImports; diff --git a/packages/sdk-apple/src/types.ts b/packages/sdk-apple/src/types.ts index c046602129..0327bef455 100644 --- a/packages/sdk-apple/src/types.ts +++ b/packages/sdk-apple/src/types.ts @@ -1,4 +1,4 @@ -import { RenativeConfigPluginPlatform, RnvContext } from '@rnv/core'; +import { RnvPluginPlatformSchema, RnvContext } from '@rnv/core'; export type AppleDevice = { udid?: string; @@ -154,7 +154,7 @@ export type ObjectiveCAppDelegateSubKey = keyof ObjectiveCAppDelegate['applicati export type ObjectiveCAppDelegateKey = keyof ObjectiveCAppDelegate; -export type TemplateXcode = Required['templateXcode']>; +export type TemplateXcode = Required['templateXcode']>; export type FilePlistJSON = { CFBundleDisplayName?: string; From 70b49354351e25fccd62e167ad928b792f20e362 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 15:39:10 +0200 Subject: [PATCH 156/175] types refactor --- packages/build-hooks-schema/src/schema.ts | 36 +-- packages/core/src/configs/appConfigs.ts | 2 +- packages/core/src/configs/configProject.ts | 6 +- packages/core/src/configs/index.ts | 4 +- packages/core/src/configs/workspaces.ts | 7 +- packages/core/src/context/contextProps.ts | 21 +- packages/core/src/context/types.ts | 39 +-- packages/core/src/engines/index.ts | 10 +- packages/core/src/engines/types.ts | 2 +- packages/core/src/index.ts | 17 +- packages/core/src/integrations/types.ts | 2 +- packages/core/src/plugins/index.ts | 21 +- packages/core/src/plugins/types.ts | 3 +- packages/core/src/projects/package.ts | 2 +- packages/core/src/schema/common/index.ts | 15 +- packages/core/src/schema/configFiles/app.ts | 16 +- .../src/schema/configFiles/buildConfig.ts | 47 ---- .../core/src/schema/configFiles/engine.ts | 6 +- .../src/schema/configFiles/integration.ts | 4 - packages/core/src/schema/configFiles/local.ts | 7 +- .../core/src/schema/configFiles/overrides.ts | 5 - .../core/src/schema/configFiles/plugin.ts | 11 +- .../core/src/schema/configFiles/private.ts | 49 ++-- .../core/src/schema/configFiles/project.ts | 30 +- .../core/src/schema/configFiles/runtime.ts | 7 +- .../core/src/schema/configFiles/template.ts | 20 +- .../core/src/schema/configFiles/templates.ts | 7 +- .../core/src/schema/configFiles/workspace.ts | 7 +- .../core/src/schema/configFiles/workspaces.ts | 5 - packages/core/src/schema/index.ts | 14 - .../src/schema/platforms/fragments/android.ts | 2 - .../src/schema/platforms/fragments/base.ts | 2 - .../schema/platforms/fragments/electron.ts | 2 - .../src/schema/platforms/fragments/ios.ts | 2 - .../schema/platforms/fragments/lightning.ts | 2 - .../src/schema/platforms/fragments/nextjs.ts | 2 - .../schema/platforms/fragments/reactNative.ts | 2 - .../platforms/fragments/templateAndroid.ts | 23 +- .../platforms/fragments/templateXcode.ts | 34 +-- .../src/schema/platforms/fragments/tizen.ts | 2 - .../src/schema/platforms/fragments/web.ts | 2 - .../src/schema/platforms/fragments/webos.ts | 2 - .../src/schema/platforms/fragments/webpack.ts | 2 - .../src/schema/platforms/fragments/windows.ts | 2 - packages/core/src/schema/platforms/index.ts | 57 +--- .../core/src/schema/plugins/fragments/base.ts | 2 - .../plugins/fragments/platformAndroid.ts | 2 - .../schema/plugins/fragments/platformBase.ts | 1 - .../schema/plugins/fragments/platformIos.ts | 2 - packages/core/src/schema/plugins/index.ts | 15 +- packages/core/src/schema/shared/index.ts | 12 +- packages/core/src/schema/types.ts | 257 +++++++++++++++++- packages/core/src/templates/index.ts | 3 +- 53 files changed, 436 insertions(+), 418 deletions(-) delete mode 100644 packages/core/src/schema/configFiles/buildConfig.ts delete mode 100644 packages/core/src/schema/index.ts diff --git a/packages/build-hooks-schema/src/schema.ts b/packages/build-hooks-schema/src/schema.ts index 53c33f73d3..e55b18e4a0 100644 --- a/packages/build-hooks-schema/src/schema.ts +++ b/packages/build-hooks-schema/src/schema.ts @@ -1,13 +1,13 @@ import { - RootAppSchema, - RootEngineSchema, - RootLocalSchema, - RootPluginSchema, - RootPrivateSchema, - RootProjectSchema, - RootTemplateSchema, - RootTemplatesSchema, - RootWorkspaceSchema, + zodRootAppSchema, + zodRootEngineSchema, + zodRootLocalSchema, + zodRootPluginSchema, + zodRootPrivateSchema, + zodRootProjectSchema, + zodRootTemplateSchema, + zodRootTemplatesSchema, + zodRootWorkspaceSchema, getContext, logSuccess, zodRootIntegrationSchema, @@ -18,15 +18,15 @@ import path from 'path'; import fs from 'fs'; export const generateSchema = async () => { - _generateSchemaFile({ schema: RootProjectSchema, schemaId: 'rnv.project' }); - _generateSchemaFile({ schema: RootAppSchema, schemaId: 'rnv.app' }); - _generateSchemaFile({ schema: RootLocalSchema, schemaId: 'rnv.local' }); - _generateSchemaFile({ schema: RootEngineSchema, schemaId: 'rnv.engine' }); - _generateSchemaFile({ schema: RootWorkspaceSchema, schemaId: 'rnv.workspace' }); - _generateSchemaFile({ schema: RootTemplateSchema, schemaId: 'rnv.template' }); - _generateSchemaFile({ schema: RootPrivateSchema, schemaId: 'rnv.private' }); - _generateSchemaFile({ schema: RootPluginSchema, schemaId: 'rnv.plugin' }); - _generateSchemaFile({ schema: RootTemplatesSchema, schemaId: 'rnv.templates' }); + _generateSchemaFile({ schema: zodRootProjectSchema, schemaId: 'rnv.project' }); + _generateSchemaFile({ schema: zodRootAppSchema, schemaId: 'rnv.app' }); + _generateSchemaFile({ schema: zodRootLocalSchema, schemaId: 'rnv.local' }); + _generateSchemaFile({ schema: zodRootEngineSchema, schemaId: 'rnv.engine' }); + _generateSchemaFile({ schema: zodRootWorkspaceSchema, schemaId: 'rnv.workspace' }); + _generateSchemaFile({ schema: zodRootTemplateSchema, schemaId: 'rnv.template' }); + _generateSchemaFile({ schema: zodRootPrivateSchema, schemaId: 'rnv.private' }); + _generateSchemaFile({ schema: zodRootPluginSchema, schemaId: 'rnv.plugin' }); + _generateSchemaFile({ schema: zodRootTemplatesSchema, schemaId: 'rnv.templates' }); _generateSchemaFile({ schema: zodRootIntegrationSchema, schemaId: 'rnv.integration' }); logSuccess('Sucessfully exported renative.project.json schema'); diff --git a/packages/core/src/configs/appConfigs.ts b/packages/core/src/configs/appConfigs.ts index 6c077a4f01..b926190b87 100644 --- a/packages/core/src/configs/appConfigs.ts +++ b/packages/core/src/configs/appConfigs.ts @@ -4,7 +4,7 @@ import { fsExistsSync, fsReaddirSync, fsLstatSync, readObjectSync } from '../sys import { logDefault, logWarning } from '../logger'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; -import { type ConfigFileApp } from '../schema/configFiles/app'; +import { ConfigFileApp } from '../schema/types'; const IGNORE_FOLDERS = ['.git']; diff --git a/packages/core/src/configs/configProject.ts b/packages/core/src/configs/configProject.ts index 7027a80f39..41eab465ac 100644 --- a/packages/core/src/configs/configProject.ts +++ b/packages/core/src/configs/configProject.ts @@ -1,10 +1,10 @@ import { getRealPath, writeFileSync } from '../system/fs'; import { chalk, logDefault, logWarning } from '../logger'; -import { type RnvPlatform } from '../types'; -import { type NpmPackageFile } from './types'; +import type { RnvPlatform } from '../types'; +import type { NpmPackageFile } from './types'; import { getContext } from '../context/provider'; import { PlatformKey } from '../enums/platformName'; -import { type ConfigFileProject } from '../schema/configFiles/project'; +import type { ConfigFileProject } from '../schema/types'; const SYNCED_DEPS = [ 'rnv', diff --git a/packages/core/src/configs/index.ts b/packages/core/src/configs/index.ts index 78f6b68221..b3d0b474c0 100644 --- a/packages/core/src/configs/index.ts +++ b/packages/core/src/configs/index.ts @@ -3,7 +3,7 @@ import path from 'path'; import { mergeObjects, fsExistsSync, fsReaddirSync, getRealPath, readObjectSync, loadFile } from '../system/fs'; import { logWarning, logDebug, logDefault, chalk } from '../logger'; import { doResolve } from '../system/resolve'; -import { type RnvContextFileObj, type RnvContextPathObj, type RnvContextFileKey } from '../context/types'; +import type { RnvContextFileObj, RnvContextPathObj, RnvContextFileKey } from '../context/types'; import { generateRnvConfigPathObj } from '../context/defaults'; import { generateContextPaths } from '../context'; import { generateBuildConfig } from './buildConfig'; @@ -13,7 +13,7 @@ import { generatePlatformTemplatePaths } from './configProject'; import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; import { RnvFolderName } from '../enums/folderName'; -import { type ConfigFileTemplates } from '../schema/configFiles/templates'; +import type { ConfigFileTemplates } from '../schema/types'; export const loadFileExtended = (fileObj: Record, pathObj: RnvContextPathObj, key: RnvContextFileKey) => { const c = getContext(); diff --git a/packages/core/src/configs/workspaces.ts b/packages/core/src/configs/workspaces.ts index dabeb945cf..ec64f16d26 100644 --- a/packages/core/src/configs/workspaces.ts +++ b/packages/core/src/configs/workspaces.ts @@ -1,13 +1,10 @@ import { fsExistsSync, writeFileSync, readObjectSync, mkdirSync } from '../system/fs'; - import { getContext } from '../context/provider'; - import path from 'path'; import { chalk, logDefault, logDebug, logInfo, logWarning } from '../logger'; -import { type RnvContext } from '../context/types'; +import type { RnvContext } from '../context/types'; import { generateOptions, inquirerPrompt } from '../api'; -import { type ConfigFileWorkspace } from '../schema/configFiles/workspace'; -import { type ConfigFileWorkspaces } from '../schema/configFiles/workspaces'; +import type { ConfigFileWorkspace, ConfigFileWorkspaces } from '../schema/types'; export const createWorkspace = async (workspaceID: string, workspacePath: string) => { const c = getContext(); diff --git a/packages/core/src/context/contextProps.ts b/packages/core/src/context/contextProps.ts index 6967851607..3c60dd99e3 100644 --- a/packages/core/src/context/contextProps.ts +++ b/packages/core/src/context/contextProps.ts @@ -1,15 +1,20 @@ -import { type GetConfigPropFn } from '../api/types'; -import { type RnvContext } from './types'; +import type { GetConfigPropFn } from '../api/types'; +import type { RnvContext } from './types'; import { chalk, logError, logWarning } from '../logger'; -import { type ConfigFileBuildConfig } from '../schema'; -import { type ConfigProp, type ConfigPropKey } from '../schema/types'; -import { type TimestampPathsConfig } from '../system/types'; +import type { + BuildConfigKey, + CommonBuildSchemeKey, + CommonPropKey, + ConfigFileBuildConfig, + ConfigProp, + ConfigPropKey, + PlatformBuildSchemeKey, + RnvCommonBuildSchemeSchema, +} from '../schema/types'; +import type { TimestampPathsConfig } from '../system/types'; import path from 'path'; import { fsExistsSync } from '../system/fs'; import { getContext } from './provider'; -import { type CommonBuildSchemeKey, type CommonPropKey, type RnvCommonBuildSchemeSchema } from '../schema/common'; -import { type PlatformBuildSchemeKey } from '../schema/platforms'; -import { type BuildConfigKey } from '../schema/configFiles/buildConfig'; const _getValueOrMergedObject = (resultScheme: object, resultPlatforms: object, resultCommon: object) => { if (resultScheme !== undefined) { diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 8875d4bc0c..31a2ddcb82 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -1,25 +1,28 @@ -import { type ConfigProp, type ConfigPropKey } from '../schema/types'; -import { type RnvEngine, type RnvEnginePlatform } from '../engines/types'; -import { type OverridesOptions } from '../system/types'; -import { type RnvPlatform } from '../types'; -import { type NpmPackageFile } from '../configs/types'; -import { type ConfigFileBuildConfig } from '../schema/configFiles/buildConfig'; +import type { + ConfigFileApp, + ConfigFileBuildConfig, + ConfigFileEngine, + ConfigFileLocal, + ConfigFilePlugin, + ConfigFilePrivate, + ConfigFileProject, + ConfigFileRuntime, + ConfigFileTemplates, + ConfigFileWorkspace, + ConfigFileWorkspaces, + ConfigProp, + ConfigPropKey, +} from '../schema/types'; +import type { RnvEngine, RnvEnginePlatform } from '../engines/types'; +import type { OverridesOptions } from '../system/types'; +import type { RnvPlatform } from '../types'; +import type { NpmPackageFile } from '../configs/types'; import { type ParamKeys, type ProgramOptionsKey } from '../tasks/constants'; import { type ExecaChildProcess } from 'execa'; import { type RnvPlugin } from '../plugins/types'; -import { type RnvIntegration } from '../integrations/types'; -import { type DependencyMutation } from '../projects/types'; +import type { RnvIntegration } from '../integrations/types'; +import type { DependencyMutation } from '../projects/types'; import { PlatformKey } from '../enums/platformName'; -import { type ConfigFileWorkspaces } from '../schema/configFiles/workspaces'; -import { type ConfigFileWorkspace } from '../schema/configFiles/workspace'; -import { type ConfigFileTemplates } from '../schema/configFiles/templates'; -import { type ConfigFileRuntime } from '../schema/configFiles/runtime'; -import { type ConfigFileProject } from '../schema/configFiles/project'; -import { type ConfigFileApp } from '../schema/configFiles/app'; -import { type ConfigFileLocal } from '../schema/configFiles/local'; -import { type ConfigFilePrivate } from '../schema/configFiles/private'; -import { type ConfigFilePlugin } from '../schema/configFiles/plugin'; -import { type ConfigFileEngine } from '../schema/configFiles/engine'; export type CreateContextOptions = { program: RnvContextProgram; diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 8e0c1ed378..8cc4f353df 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -4,10 +4,10 @@ import { installPackageDependencies } from '../projects/npm'; import { logDebug, logDefault, chalk, logInfo, logWarning, logError } from '../logger'; import { doResolve } from '../system/resolve'; import { configurePlugins } from '../plugins'; -import { type RnvContext } from '../context/types'; -import { type RnvTask } from '../tasks/types'; -import { type RenativeConfigVersion, type RnvPlatform } from '../types'; -import { type RnvEngine, type RnvEngineInstallConfig, type RnvEngineTemplate } from './types'; +import type { RnvContext } from '../context/types'; +import type { RnvTask } from '../tasks/types'; +import type { RenativeConfigVersion, RnvPlatform } from '../types'; +import type { RnvEngine, RnvEngineInstallConfig, RnvEngineTemplate } from './types'; import { inquirerPrompt } from '../api'; import { getContext } from '../context/provider'; import { writeRenativeConfigFile } from '../configs/utils'; @@ -16,7 +16,7 @@ import { getEngineTemplateByPlatform } from '../configs/engines'; import { getConfigProp } from '../context/contextProps'; import { registerRnvTasks } from '../tasks/taskRegistry'; import { createDependencyMutation } from '../projects/mutations'; -import { type ConfigFileEngine } from '../schema/configFiles/engine'; +import type { ConfigFileEngine } from '../schema/types'; export const registerEngine = async (engine: RnvEngine, platform?: RnvPlatform, engConfig?: RnvEngineTemplate) => { const c = getContext(); diff --git a/packages/core/src/engines/types.ts b/packages/core/src/engines/types.ts index 81223afc59..11207667bc 100644 --- a/packages/core/src/engines/types.ts +++ b/packages/core/src/engines/types.ts @@ -1,5 +1,5 @@ import { PlatformKey } from '../enums/platformName'; -import { type ConfigFileEngine } from '../schema/configFiles/engine'; +import type { ConfigFileEngine } from '../schema/types'; import type { RnvTaskMap } from '../tasks/types'; export type RnvEngine = { diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index ab577beb11..07fc2089e6 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -34,10 +34,22 @@ export * from './tasks/taskRegistry'; export * from './tasks/constants'; export * from './tasks/taskCreator'; -export * from './schema'; export * from './schema/defaults'; export * from './schema/schemaManager'; -export * from './schema/common'; +export * from './schema/validators'; +export * from './schema/configFiles/app'; +export * from './schema/configFiles/engine'; +export * from './schema/configFiles/integration'; +export * from './schema/configFiles/local'; +export * from './schema/configFiles/overrides'; +export * from './schema/configFiles/plugin'; +export * from './schema/configFiles/private'; +export * from './schema/configFiles/project'; +export * from './schema/configFiles/runtime'; +export * from './schema/configFiles/template'; +export * from './schema/configFiles/templates'; +export * from './schema/configFiles/workspace'; +export * from './schema/configFiles/workspaces'; export * from './system/exec'; export * from './system/fs'; @@ -79,5 +91,4 @@ export * from './configs/types'; export * from './env/types'; export * from './api/types'; export * from './types'; -export * from './schema/types'; export * from './integrations/types'; diff --git a/packages/core/src/integrations/types.ts b/packages/core/src/integrations/types.ts index 4c14b5fef0..0b5afa8170 100644 --- a/packages/core/src/integrations/types.ts +++ b/packages/core/src/integrations/types.ts @@ -1,4 +1,4 @@ -import { type ConfigFileIntegration } from '../schema/configFiles/integration'; +import type { ConfigFileIntegration } from '../schema/types'; import { RnvTask } from '../tasks/types'; export type RnvIntegration = { diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 0f5a0633fc..65c2d97f9b 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -13,23 +13,26 @@ import { } from '../system/fs'; import { chalk, logDebug, logError, logInfo, logSuccess, logDefault, logWarning } from '../logger'; import { doResolve } from '../system/resolve'; -import { type RnvContext } from '../context/types'; -import { type PluginCallback, type RnvPlugin, type RnvPluginScope } from './types'; +import type { RnvContext } from '../context/types'; +import type { PluginCallback, RnvPlugin, RnvPluginScope } from './types'; import { inquirerPrompt } from '../api'; import { writeRenativeConfigFile } from '../configs/utils'; import { installPackageDependencies } from '../projects/npm'; -import { type OverridesOptions, type ResolveOptions } from '../system/types'; +import type { OverridesOptions, ResolveOptions } from '../system/types'; import { getContext } from '../context/provider'; import { getConfigProp } from '../context/contextProps'; import { RnvFileName } from '../enums/fileName'; -import { type AsyncCallback } from '../projects/types'; +import type { AsyncCallback } from '../projects/types'; import { createDependencyMutation } from '../projects/mutations'; import { updatePackage } from '../projects/package'; -import { type RnvPluginPlatformSchema, type RnvPluginSchema } from '../schema/plugins'; -import { type ConfigProjectPaths } from '../schema/configFiles/project'; -import { type ConfigFileTemplates } from '../schema/configFiles/templates'; -import { type ConfigFileOverrides } from '../schema/configFiles/overrides'; -import { type ConfigFilePlugin } from '../schema/configFiles/plugin'; +import type { + ConfigFileOverrides, + ConfigFilePlugin, + ConfigFileTemplates, + ConfigProjectPaths, + RnvPluginPlatformSchema, + RnvPluginSchema, +} from '../schema/types'; const _getPluginScope = (plugin: RnvPluginSchema | string): RnvPluginScope => { if (typeof plugin === 'string') { diff --git a/packages/core/src/plugins/types.ts b/packages/core/src/plugins/types.ts index cb4572c08d..a485fed63d 100644 --- a/packages/core/src/plugins/types.ts +++ b/packages/core/src/plugins/types.ts @@ -1,5 +1,4 @@ -import { ConfigFilePlugin } from '../schema/configFiles/plugin'; -import { type RnvPluginPlatformSchema, type RnvPluginSchema } from '../schema/plugins'; +import type { ConfigFilePlugin, RnvPluginPlatformSchema, RnvPluginSchema } from '../schema/types'; export type PluginCallback = (plugin: RnvPlugin, pluginPlat: RnvPluginPlatformSchema, key: string) => void; diff --git a/packages/core/src/projects/package.ts b/packages/core/src/projects/package.ts index ab6df1ad5a..46c745b309 100644 --- a/packages/core/src/projects/package.ts +++ b/packages/core/src/projects/package.ts @@ -6,7 +6,7 @@ import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; import { type NpmPackageFile } from '../configs/types'; import { writeRenativeConfigFile } from '../configs/utils'; -import { type ConfigFileTemplate } from '../schema/configFiles/template'; +import type { ConfigFileTemplate } from '../schema/types'; export const updatePackage = (override: Partial) => { const c = getContext(); diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index 9ab99da232..707af93f2a 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -1,6 +1,6 @@ import { AnyZodObject, z } from 'zod'; -import { zodBuildSchemeFragment, zodExt, zodRuntime, RnvBuildSchemeFragment } from '../shared'; -import { RnvPlatformBaseFragment, zodPlatformBaseFragment } from '../platforms/fragments/base'; +import { zodBuildSchemeFragment, zodExt, zodRuntime } from '../shared'; +import { zodPlatformBaseFragment } from '../platforms/fragments/base'; export const zodCommonSchemaFragment = z .object({ @@ -74,8 +74,6 @@ export const zodCommonSchemaFragment = z custom: z.optional(zodExt), }) .partial(); -export type RnvCommonSchemaFragment = z.infer; -export type CommonPropKey = keyof RnvCommonSchemaFragment; // We Request keys excluding buildScheme (not RnvCommonSchema) export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment .merge( @@ -89,12 +87,3 @@ export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment }) ) .describe('Common config props used as default props for all available buildSchemes'); - -export type RnvCommonBuildSchemeSchema = Partial< - RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformBaseFragment ->; -export type CommonBuildSchemeKey = keyof RnvCommonBuildSchemeSchema; - -export type RnvCommonSchema = Partial & { - buildSchemes?: Record; -}; diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index 8c869ecc0e..d64b2c94d1 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -1,11 +1,8 @@ import { AnyZodObject, z } from 'zod'; -import { RnvCommonSchema } from '../common'; import { zodExt } from '../shared'; -import { RnvPlatformsSchema } from '../platforms'; -import { RnvPluginsSchema } from '../plugins'; import { zodRootProjectCommonSchema, zodRootProjectPlatformsSchema, zodRootProjectPluginsSchema } from './project'; -const zodRootAppBaseFragment = z +export const zodRootAppBaseFragment = z .object({ id: z .string() @@ -24,20 +21,11 @@ const zodRootAppBaseFragment = z extend: z.string().describe('extend another appConfig by id'), // TODO: rename to "extendsAppConfigID" }) .partial(); -export type RnvRootAppBaseFragment = z.infer; // NOTE: Need to explictly type this to generic zod object to avoid TS error: // The inferred type of this node exceeds the maximum length the compiler will serialize... // This is ok we only use this full schema for runtime validations. actual types -export const RootAppSchema: AnyZodObject = zodRootAppBaseFragment +export const zodRootAppSchema: AnyZodObject = zodRootAppBaseFragment .merge(zodRootProjectCommonSchema) .merge(zodRootProjectPlatformsSchema) .merge(zodRootProjectPluginsSchema); - -export type RnvRootAppSchema = RnvRootAppBaseFragment & { - common?: RnvCommonSchema; - platforms?: RnvPlatformsSchema; - plugins?: RnvPluginsSchema; -}; -// appConfigs/**/renative.json -export type ConfigFileApp = RnvRootAppSchema; diff --git a/packages/core/src/schema/configFiles/buildConfig.ts b/packages/core/src/schema/configFiles/buildConfig.ts deleted file mode 100644 index 848ece6dbe..0000000000 --- a/packages/core/src/schema/configFiles/buildConfig.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { type RnvRootAppBaseFragment } from './app'; -import { type _RootLocalSchemaType } from './local'; -import { type RnvRootProjectSchema } from './project'; -import { type _RootTemplatesSchemaType } from './templates'; -import { type _RootWorkspaceSchemaType } from './workspace'; - -// NOTE: Why am I bothered with all this nonsense instead of just exporting root schema types? -// because infering full schema (complex zod types & unions) impacts TS server performance -// here I'm giving TS hand by offloading some of the heavy computations to predefined types and removing unions -// When all reantive json get merged into one file this happens conceptually anyway - -type RootPluginsMerged = { - scopedPluginTemplates: Record; -}; - -// type Common = { -// common: RnvCommonSchema; -// }; - -// type PluginsMap = { -// plugins: RnvPluginsSchema; -// }; - -// type PlatformsMap = { -// platforms: RnvPlatformsSchema; -// }; - -export type ConfigFileBuildConfig = - //Templates - _RootTemplatesSchemaType & - //Global - _RootWorkspaceSchemaType & - //Plugins (multiple roots merged under scope object) - RootPluginsMerged & - //Project + App - // Required & - RnvRootProjectSchema & - _RootLocalSchemaType & - RnvRootAppBaseFragment; - -export type BuildConfigKey = keyof ConfigFileBuildConfig; - -// Common & -// PluginsMap & -// PlatformsMap; - -// export type RenativeConfigRnvTaskName = keyof Required['tasks']>; diff --git a/packages/core/src/schema/configFiles/engine.ts b/packages/core/src/schema/configFiles/engine.ts index d8f37989ed..29ff925432 100644 --- a/packages/core/src/schema/configFiles/engine.ts +++ b/packages/core/src/schema/configFiles/engine.ts @@ -17,7 +17,7 @@ const zodEnginePlatform = z.object({ npm: z.optional(zodEngineNpm), }); -export const RootEngineSchema = z +export const zodRootEngineSchema = z .object({ custom: z.optional(zodExt), id: z.string().describe('ID of engine'), @@ -30,7 +30,3 @@ export const RootEngineSchema = z platforms: z.record(zodPlatformsKeys, zodEnginePlatform), }) .partial(); - -export type RnvRootEngineSchema = z.infer; -// renative.engine.json -export type ConfigFileEngine = RnvRootEngineSchema; diff --git a/packages/core/src/schema/configFiles/integration.ts b/packages/core/src/schema/configFiles/integration.ts index 9bd85cad3e..31b8f18fe7 100644 --- a/packages/core/src/schema/configFiles/integration.ts +++ b/packages/core/src/schema/configFiles/integration.ts @@ -4,7 +4,3 @@ export const zodRootIntegrationSchema = z.object({ packageName: z.string(), }); // -export type RnvRootIntegrationSchema = z.infer; - -// renative.integration.json -export type ConfigFileIntegration = RnvRootIntegrationSchema; diff --git a/packages/core/src/schema/configFiles/local.ts b/packages/core/src/schema/configFiles/local.ts index e8fa93bac6..74810d6df3 100644 --- a/packages/core/src/schema/configFiles/local.ts +++ b/packages/core/src/schema/configFiles/local.ts @@ -10,14 +10,9 @@ const Meta = z.object({ //LEVEl 0 (ROOT) -export const RootLocalSchema = z.object({ +export const zodRootLocalSchema = z.object({ workspaceAppConfigsDir: z.optional(WorkspaceAppConfigsDir), defaultTargets: z.optional(zodDefaultTargets), _meta: z.optional(Meta), // extend: z.optional(z.string()), }); - -export type _RootLocalSchemaType = z.infer; - -// renative.local.json -export type ConfigFileLocal = _RootLocalSchemaType; diff --git a/packages/core/src/schema/configFiles/overrides.ts b/packages/core/src/schema/configFiles/overrides.ts index 87cc6cf534..2fd9bb2eae 100644 --- a/packages/core/src/schema/configFiles/overrides.ts +++ b/packages/core/src/schema/configFiles/overrides.ts @@ -3,8 +3,3 @@ import { z } from 'zod'; export const zodRootOverridesSchema = z.object({ overrides: z.record(z.string(), z.record(z.string(), z.string())), }); - -export type RnvRootOverridesSchema = z.infer; - -//overrides.json -export type ConfigFileOverrides = RnvRootOverridesSchema; diff --git a/packages/core/src/schema/configFiles/plugin.ts b/packages/core/src/schema/configFiles/plugin.ts index 32973d0b57..db71b6df5c 100644 --- a/packages/core/src/schema/configFiles/plugin.ts +++ b/packages/core/src/schema/configFiles/plugin.ts @@ -1,14 +1,9 @@ import { AnyZodObject, z } from 'zod'; import { zodExt } from '../shared'; -import { RnvPluginSchema, zodPluginSchema } from '../plugins'; +import { zodPluginSchema } from '../plugins'; -const zodPluginFragment = z.object({ +export const zodPluginFragment = z.object({ custom: z.optional(zodExt), }); -export const RootPluginSchema: AnyZodObject = zodPluginSchema.merge(zodPluginFragment); - -export type _RootPluginSchemaType = RnvPluginSchema & z.infer; - -// renative.plugin.json -export type ConfigFilePlugin = _RootPluginSchemaType; +export const zodRootPluginSchema: AnyZodObject = zodPluginSchema.merge(zodPluginFragment); diff --git a/packages/core/src/schema/configFiles/private.ts b/packages/core/src/schema/configFiles/private.ts index 593c8c2156..05f3230484 100644 --- a/packages/core/src/schema/configFiles/private.ts +++ b/packages/core/src/schema/configFiles/private.ts @@ -3,7 +3,7 @@ import { z } from 'zod'; const SENSITIVE = '> WARNING. this prop is sensitive and should not be stored in standard `renative.json` configs. use `renative.private.json` files instead!\n\n'; -const PlatformAndroid = z +export const zodPrivatePlatformAndroid = z .object({ storePassword: z.string().describe(`${SENSITIVE}storePassword for keystore file`).optional(), keyPassword: z.string().describe(`${SENSITIVE}keyPassword for keystore file`).optional(), @@ -12,9 +12,9 @@ const PlatformAndroid = z }) .optional(); -const PlatformGeneric = z.object({}).optional(); +const zodPrivatePlatformGeneric = z.object({}).optional(); -export const RootPrivateSchema = z.object({ +export const zodRootPrivateSchema = z.object({ private: z .record(z.any()) .describe( @@ -23,31 +23,24 @@ export const RootPrivateSchema = z.object({ .optional(), platforms: z .object({ - android: PlatformAndroid, - androidtv: PlatformAndroid, - androidwear: PlatformAndroid, - firetv: PlatformAndroid, - ios: PlatformGeneric, - tvos: PlatformGeneric, - tizen: PlatformGeneric, - tizenmobile: PlatformGeneric, - tizenwatch: PlatformGeneric, - webos: PlatformGeneric, - web: PlatformGeneric, - webtv: PlatformGeneric, - chromecast: PlatformGeneric, - kaios: PlatformGeneric, - macos: PlatformGeneric, - linux: PlatformGeneric, - windows: PlatformGeneric, - xbox: PlatformGeneric, + android: zodPrivatePlatformAndroid, + androidtv: zodPrivatePlatformAndroid, + androidwear: zodPrivatePlatformAndroid, + firetv: zodPrivatePlatformAndroid, + ios: zodPrivatePlatformGeneric, + tvos: zodPrivatePlatformGeneric, + tizen: zodPrivatePlatformGeneric, + tizenmobile: zodPrivatePlatformGeneric, + tizenwatch: zodPrivatePlatformGeneric, + webos: zodPrivatePlatformGeneric, + web: zodPrivatePlatformGeneric, + webtv: zodPrivatePlatformGeneric, + chromecast: zodPrivatePlatformGeneric, + kaios: zodPrivatePlatformGeneric, + macos: zodPrivatePlatformGeneric, + linux: zodPrivatePlatformGeneric, + windows: zodPrivatePlatformGeneric, + xbox: zodPrivatePlatformGeneric, }) .optional(), }); - -export type _RootPrivateSchemaType = z.infer; - -// renative.private.json -export type ConfigFilePrivate = _RootPrivateSchemaType; - -export type _MergedPlatformPrivateObjectType = z.infer; diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 9fa18e1b2e..85a05cd8bb 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -1,17 +1,10 @@ import { AnyZodObject, z } from 'zod'; -import { type RnvCommonSchema, zodCommonSchema } from '../common'; -import { - type RnvTemplateConfigFragment, - zodExt, - zodPlatformsKeys, - zodRuntime, - zodSupportedPlatforms, - zodTemplateConfigFragment, -} from '../shared'; -import { type RnvPlatformsSchema, zodPlatformsSchema } from '../platforms'; -import { type RnvPluginsSchema, zodPluginsSchema } from '../plugins'; +import { zodCommonSchema } from '../common'; +import { zodExt, zodPlatformsKeys, zodRuntime, zodSupportedPlatforms, zodTemplateConfigFragment } from '../shared'; +import { zodPlatformsSchema } from '../platforms'; +import { zodPluginsSchema } from '../plugins'; -const zodRootProjectBaseFragment = z +export const zodRootProjectBaseFragment = z .object({ workspaceID: z .string() //TODO: no spaces @@ -164,9 +157,6 @@ const zodRootProjectBaseFragment = z // currentTemplate: CurrentTemplate, }) .partial(); -export type RnvRootProjectBaseFragment = z.infer & { - templateConfig?: RnvTemplateConfigFragment; -}; // NOTE: Need to explictly type this to generic zod object to avoid TS error: // The inferred type of this node exceeds the maximum length the compiler will serialize... @@ -180,13 +170,3 @@ export const zodRootProjectSchema: AnyZodObject = zodRootProjectBaseFragment .merge(zodRootProjectPluginsSchema) .extend({ templateConfig: zodTemplateConfigFragment }) .partial(); - -export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { - common?: RnvCommonSchema; - platforms?: RnvPlatformsSchema; - plugins?: RnvPluginsSchema; -}; -// renative.json -export type ConfigFileProject = RnvRootProjectSchema; - -export type ConfigProjectPaths = Required['paths']; diff --git a/packages/core/src/schema/configFiles/runtime.ts b/packages/core/src/schema/configFiles/runtime.ts index 9190c31934..123900edc8 100644 --- a/packages/core/src/schema/configFiles/runtime.ts +++ b/packages/core/src/schema/configFiles/runtime.ts @@ -1,10 +1,5 @@ import { z } from 'zod'; -export const RootRuntimeSchema = z.object({ +export const zodRootRuntimeSchema = z.object({ // extend: z.optional(z.string()), }); - -export type _RootRuntimeSchemaType = z.infer; - -// renative.runtime.json -export type ConfigFileRuntime = _RootRuntimeSchemaType; diff --git a/packages/core/src/schema/configFiles/template.ts b/packages/core/src/schema/configFiles/template.ts index af4b9a753d..faa160344c 100644 --- a/packages/core/src/schema/configFiles/template.ts +++ b/packages/core/src/schema/configFiles/template.ts @@ -1,5 +1,5 @@ import { AnyZodObject, z } from 'zod'; -import { NpmDep, RnvTemplateConfigFragment, zodSupportedPlatforms, zodTemplateConfigFragment } from '../shared'; +import { zodNpmDep, zodSupportedPlatforms, zodTemplateConfigFragment } from '../shared'; const zodBootstrapQuestionsSchema = z .array( @@ -33,11 +33,11 @@ const zodBootstrapQuestionsSchema = z ) .describe('Defines list of custom bootstrap questions'); -const zodBootstrapConfig = z +export const zodBootstrapConfig = z .object({ bootstrapQuestions: zodBootstrapQuestionsSchema, rnvNewPatchDependencies: z - .optional(NpmDep) + .optional(zodNpmDep) .describe( 'This ensures that the correct version of the npm packages will be used to run the project for the first time after creation' ), @@ -54,25 +54,13 @@ const zodBootstrapConfig = z }) .partial(); -type RnvBootstrapConfig = z.infer; - -export const RootTemplateSchema: AnyZodObject = z.object({ +export const zodRootTemplateSchema: AnyZodObject = z.object({ // defaults: z.optional(DefaultsSchema), // engines: z.optional(EnginesSchema), templateConfig: zodTemplateConfigFragment.optional(), bootstrapConfig: zodBootstrapConfig.optional(), }); -export type RnvRootTemplateSchema = { - // defaults: RnvDefault, - // engines: z.optional(EnginesSchema), - templateConfig?: RnvTemplateConfigFragment; - bootstrapConfig?: RnvBootstrapConfig; -}; - -// renative.template.json -export type ConfigFileTemplate = RnvRootTemplateSchema; - // { // title: 'Which service to use?', // type: 'list', diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index e00d1d44b3..b00002c092 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; import { zodPlatformsKeys, zodProjectTemplates } from '../shared'; import { zodPluginSchema } from '../plugins'; -export const RootTemplatesSchema = z +export const zodRootTemplatesSchema = z .object({ projectTemplates: zodProjectTemplates, engineIdMap: z.record(z.string(), z.string()), @@ -36,8 +36,3 @@ export const RootTemplatesSchema = z ), }) .partial(); - -export type _RootTemplatesSchemaType = z.infer; - -// renative.templates.json -export type ConfigFileTemplates = _RootTemplatesSchemaType; diff --git a/packages/core/src/schema/configFiles/workspace.ts b/packages/core/src/schema/configFiles/workspace.ts index 995b4e49b2..6c3abc2851 100644 --- a/packages/core/src/schema/configFiles/workspace.ts +++ b/packages/core/src/schema/configFiles/workspace.ts @@ -18,7 +18,7 @@ const SDKsSchema = z //LEVEl 0 (ROOT) -export const RootWorkspaceSchema = z.object({ +export const zodRootWorkspaceSchema = z.object({ defaultTargets: z.optional(zodDefaultTargets), sdks: z.optional(SDKsSchema), projectTemplates: zodProjectTemplates.optional(), @@ -31,8 +31,3 @@ export const RootWorkspaceSchema = z.object({ .optional() .describe('Enables you to define custom global appConfigs location that every project will automatically use'), }); - -export type _RootWorkspaceSchemaType = z.infer; - -// renative.workspace.json -export type ConfigFileWorkspace = _RootWorkspaceSchemaType; diff --git a/packages/core/src/schema/configFiles/workspaces.ts b/packages/core/src/schema/configFiles/workspaces.ts index 997ac79acd..0753dfcbe5 100644 --- a/packages/core/src/schema/configFiles/workspaces.ts +++ b/packages/core/src/schema/configFiles/workspaces.ts @@ -14,8 +14,3 @@ export const zodRootWorkspacesSchema = z.object({ }) ), }); - -export type RnvRootWorkspacesSchema = z.infer; - -// renative.workspaces.json -export type ConfigFileWorkspaces = RnvRootWorkspacesSchema; diff --git a/packages/core/src/schema/index.ts b/packages/core/src/schema/index.ts deleted file mode 100644 index d9f0559820..0000000000 --- a/packages/core/src/schema/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -export { RootAppSchema } from './configFiles/app'; -export { zodRootProjectSchema as RootProjectSchema } from './configFiles/project'; -export { RootEngineSchema } from './configFiles/engine'; -export { RootWorkspaceSchema } from './configFiles/workspace'; -export { RootLocalSchema } from './configFiles/local'; -export { RootPluginSchema } from './configFiles/plugin'; -export { RootPrivateSchema } from './configFiles/private'; -export { RootTemplateSchema } from './configFiles/template'; -export { RootTemplatesSchema } from './configFiles/templates'; -export { zodRootIntegrationSchema } from './configFiles/integration'; - -export { ConfigFileBuildConfig } from './configFiles/buildConfig'; - -export * from './validators'; diff --git a/packages/core/src/schema/platforms/fragments/android.ts b/packages/core/src/schema/platforms/fragments/android.ts index 31caa39020..df53e81f2a 100644 --- a/packages/core/src/schema/platforms/fragments/android.ts +++ b/packages/core/src/schema/platforms/fragments/android.ts @@ -72,5 +72,3 @@ export const zodPlatformAndroidFragment = z flipperEnabled: z.boolean().describe('Enables flipper for ios. Default: true'), }) .partial(); - -export type RnvPlatformAndroidFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/base.ts b/packages/core/src/schema/platforms/fragments/base.ts index 248b7a319a..81d8b4b476 100644 --- a/packages/core/src/schema/platforms/fragments/base.ts +++ b/packages/core/src/schema/platforms/fragments/base.ts @@ -26,5 +26,3 @@ export const zodPlatformBaseFragment = z getJsBundleFile: z.string(), }) .partial(); - -export type RnvPlatformBaseFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/electron.ts b/packages/core/src/schema/platforms/fragments/electron.ts index c865fe661e..86ecae456a 100644 --- a/packages/core/src/schema/platforms/fragments/electron.ts +++ b/packages/core/src/schema/platforms/fragments/electron.ts @@ -74,5 +74,3 @@ export const zodPlatformElectronFragment = z // }, }) .partial(); - -export type RnvPlatformElectronFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/ios.ts b/packages/core/src/schema/platforms/fragments/ios.ts index 3dc1922558..469786e8d1 100644 --- a/packages/core/src/schema/platforms/fragments/ios.ts +++ b/packages/core/src/schema/platforms/fragments/ios.ts @@ -92,5 +92,3 @@ export const zodPlatformiOSFragment = z // }, }) .partial(); - -export type RnvPlatformiOSFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/lightning.ts b/packages/core/src/schema/platforms/fragments/lightning.ts index 91cae651cf..1af04c98d6 100644 --- a/packages/core/src/schema/platforms/fragments/lightning.ts +++ b/packages/core/src/schema/platforms/fragments/lightning.ts @@ -5,5 +5,3 @@ export const zodPlatformLightningFragment = z target: z.string(), }) .partial(); - -export type RnvPlatformLightningFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/nextjs.ts b/packages/core/src/schema/platforms/fragments/nextjs.ts index c61b2c596f..e85bb2d6ca 100644 --- a/packages/core/src/schema/platforms/fragments/nextjs.ts +++ b/packages/core/src/schema/platforms/fragments/nextjs.ts @@ -16,5 +16,3 @@ export const zodPlatformNextJsFragment = z nextTranspileModules: z.optional(z.array(z.string())), }) .partial(); - -export type RnvPlatformNextJsFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/reactNative.ts b/packages/core/src/schema/platforms/fragments/reactNative.ts index 3601f40a66..7d5cd0df6e 100644 --- a/packages/core/src/schema/platforms/fragments/reactNative.ts +++ b/packages/core/src/schema/platforms/fragments/reactNative.ts @@ -8,5 +8,3 @@ export const zodPlatformReactNativeFragment = z .describe('Allows you to define specific native render engine to be used'), }) .partial(); - -export type RnvPlatformReactNativeFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateAndroid.ts b/packages/core/src/schema/platforms/fragments/templateAndroid.ts index 4e638e872c..143db69b71 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroid.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroid.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import type { ConfigAndroidManifestChildType } from '../../types'; const GradleProperties = z .record(z.string(), z.union([z.string(), z.boolean(), z.number()])) @@ -35,7 +36,7 @@ const AppBuildGradle = z }) .describe('Overrides values in `app/build.gradle` file of generated android based project'); -const ManifestChildBase = z.object({ +export const zodManifestChildBase = z.object({ tag: z.string(), 'android:name': z.string(), 'android:required': z.optional(z.boolean()), @@ -53,17 +54,13 @@ const ManifestChildBase = z.object({ // children?: Array; // }; -export type _ManifestChildType = z.infer & { - children?: _ManifestChildType[]; -}; - -const ManifestChildWithChildren: z.ZodType<_ManifestChildType> = ManifestChildBase.extend({ - children: z.lazy(() => ManifestChildWithChildren.array()), +export const zodManifestChildWithChildren: z.ZodType = zodManifestChildBase.extend({ + children: z.lazy(() => zodManifestChildWithChildren.array()), }); -const AndroidManifest = ManifestChildBase.extend({ +export const zodAndroidManifest = zodManifestChildBase.extend({ package: z.string().optional(), - children: z.array(ManifestChildWithChildren), + children: z.array(zodManifestChildWithChildren), }).describe(`Allows you to directly manipulate \`AndroidManifest.xml\` via json override mechanism Injects / Overrides values in AndroidManifest.xml file of generated android based project > IMPORTANT: always ensure that your object contains \`tag\` and \`android:name\` to target correct tag to merge into @@ -80,7 +77,7 @@ export const zodTemplateAndroidFragment = z gradle_properties: z.optional(GradleProperties), build_gradle: z.optional(BuildGradle), app_build_gradle: z.optional(AppBuildGradle), - AndroidManifest_xml: z.optional(AndroidManifest), + AndroidManifest_xml: z.optional(zodAndroidManifest), strings_xml: z.optional( z.object({ children: z.optional( @@ -136,9 +133,3 @@ export const zodTemplateAndroidFragment = z }) .partial(); // .describe('Allows more advanced modifications to Android based project template'); - -export type AndroidManifestNode = z.infer; - -export type AndroidManifest = z.infer; - -export type RnvTemplateAndroidFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/templateXcode.ts b/packages/core/src/schema/platforms/fragments/templateXcode.ts index a961eb3410..6768bc28bf 100644 --- a/packages/core/src/schema/platforms/fragments/templateXcode.ts +++ b/packages/core/src/schema/platforms/fragments/templateXcode.ts @@ -35,7 +35,7 @@ const zodXcodeProj = z.object({ }); // type RnvXcodeProj = z.infer; -const AppDelegateMethod = z.union([ +export const zodAppDelegateMethod = z.union([ z.string(), z.object({ order: z.number(), @@ -49,24 +49,24 @@ const zodAppDelegateMm = z.object({ z.object({ application: z .object({ - didFinishLaunchingWithOptions: z.array(AppDelegateMethod).optional(), - applicationDidBecomeActive: z.array(AppDelegateMethod).optional(), - open: z.array(AppDelegateMethod).optional(), - supportedInterfaceOrientationsFor: z.array(AppDelegateMethod).optional(), - didReceiveRemoteNotification: z.array(AppDelegateMethod).optional(), - didFailToRegisterForRemoteNotificationsWithError: z.array(AppDelegateMethod).optional(), - didReceive: z.array(AppDelegateMethod).optional(), - didRegister: z.array(AppDelegateMethod).optional(), - didRegisterForRemoteNotificationsWithDeviceToken: z.array(AppDelegateMethod).optional(), - continue: z.array(AppDelegateMethod).optional(), - didConnectCarInterfaceController: z.array(AppDelegateMethod).optional(), - didDisconnectCarInterfaceController: z.array(AppDelegateMethod).optional(), + didFinishLaunchingWithOptions: z.array(zodAppDelegateMethod).optional(), + applicationDidBecomeActive: z.array(zodAppDelegateMethod).optional(), + open: z.array(zodAppDelegateMethod).optional(), + supportedInterfaceOrientationsFor: z.array(zodAppDelegateMethod).optional(), + didReceiveRemoteNotification: z.array(zodAppDelegateMethod).optional(), + didFailToRegisterForRemoteNotificationsWithError: z.array(zodAppDelegateMethod).optional(), + didReceive: z.array(zodAppDelegateMethod).optional(), + didRegister: z.array(zodAppDelegateMethod).optional(), + didRegisterForRemoteNotificationsWithDeviceToken: z.array(zodAppDelegateMethod).optional(), + continue: z.array(zodAppDelegateMethod).optional(), + didConnectCarInterfaceController: z.array(zodAppDelegateMethod).optional(), + didDisconnectCarInterfaceController: z.array(zodAppDelegateMethod).optional(), }) .optional(), userNotificationCenter: z .object({ - willPresent: z.array(AppDelegateMethod).optional(), - didReceiveNotificationResponse: z.array(AppDelegateMethod).optional(), + willPresent: z.array(zodAppDelegateMethod).optional(), + didReceiveNotificationResponse: z.array(zodAppDelegateMethod).optional(), }) .optional(), }) @@ -82,8 +82,6 @@ const zodInfoPlist = z.object({}); // .describe('Allows more advanced modifications to Xcode based project template'); -export type ConfigAppDelegateMethod = z.infer; - export const zodTemplateXcodeFragment = z .object({ templateXcode: z @@ -97,5 +95,3 @@ export const zodTemplateXcodeFragment = z .partial(), }) .partial(); - -export type RnvTemplateXcodeFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/tizen.ts b/packages/core/src/schema/platforms/fragments/tizen.ts index 66aaf0b91c..08776a8b89 100644 --- a/packages/core/src/schema/platforms/fragments/tizen.ts +++ b/packages/core/src/schema/platforms/fragments/tizen.ts @@ -7,5 +7,3 @@ export const zodPlatformTizenFragment = z appName: z.string(), }) .partial(); - -export type RnvPlatformTizenFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/web.ts b/packages/core/src/schema/platforms/fragments/web.ts index c248553a36..b52a831d07 100644 --- a/packages/core/src/schema/platforms/fragments/web.ts +++ b/packages/core/src/schema/platforms/fragments/web.ts @@ -7,5 +7,3 @@ export const zodPlatformWebFragment = z environment: z.string(), }) .partial(); - -export type RnvPlatformWebFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/webos.ts b/packages/core/src/schema/platforms/fragments/webos.ts index 69cf568c31..027122406a 100644 --- a/packages/core/src/schema/platforms/fragments/webos.ts +++ b/packages/core/src/schema/platforms/fragments/webos.ts @@ -5,5 +5,3 @@ export const zodPlatformWebOSFragment = z iconColor: z.string(), }) .partial(); - -export type RnvPlatformWebOSFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/webpack.ts b/packages/core/src/schema/platforms/fragments/webpack.ts index e90c1da4c7..58e7db81e5 100644 --- a/packages/core/src/schema/platforms/fragments/webpack.ts +++ b/packages/core/src/schema/platforms/fragments/webpack.ts @@ -49,5 +49,3 @@ export const zodPlatformWebpackFragment = z // }, }) .partial(); - -export type RnvPlatformWebpackFragment = z.infer; diff --git a/packages/core/src/schema/platforms/fragments/windows.ts b/packages/core/src/schema/platforms/fragments/windows.ts index d941e08949..cd99404160 100644 --- a/packages/core/src/schema/platforms/fragments/windows.ts +++ b/packages/core/src/schema/platforms/fragments/windows.ts @@ -75,5 +75,3 @@ export const zodPlatformWindowsFragment = z ), }) .partial(); - -export type RnvPlatformWindowsFragment = z.infer; diff --git a/packages/core/src/schema/platforms/index.ts b/packages/core/src/schema/platforms/index.ts index 046f9b2e8b..4fb7eb943f 100644 --- a/packages/core/src/schema/platforms/index.ts +++ b/packages/core/src/schema/platforms/index.ts @@ -1,21 +1,18 @@ import { AnyZodObject, z } from 'zod'; -import { type RnvPlatformElectronFragment, zodPlatformElectronFragment } from './fragments/electron'; -import { type RnvPlatformWebpackFragment, zodPlatformWebpackFragment } from './fragments/webpack'; -import { type RnvPlatformNextJsFragment, zodPlatformNextJsFragment } from './fragments/nextjs'; -import { type RnvPlatformLightningFragment } from './fragments/lightning'; -import { type RnvPlatformReactNativeFragment, zodPlatformReactNativeFragment } from './fragments/reactNative'; -import { type RnvPlatformBaseFragment, zodPlatformBaseFragment } from './fragments/base'; -import { type RnvCommonSchemaFragment, zodCommonSchemaFragment } from '../common'; -import { type RnvPlatformWebOSFragment, zodPlatformWebOSFragment } from './fragments/webos'; -import { type RnvPlatformWindowsFragment, zodPlatformWindowsFragment } from './fragments/windows'; -import { type RnvPlatformTizenFragment, zodPlatformTizenFragment } from './fragments/tizen'; -import { type RnvPlatformWebFragment, zodPlatformWebFragment } from './fragments/web'; -import { type RnvPlatformAndroidFragment, zodPlatformAndroidFragment } from './fragments/android'; -import { type RnvPlatformiOSFragment, zodPlatformiOSFragment } from './fragments/ios'; -import { type RnvTemplateAndroidFragment, zodTemplateAndroidFragment } from './fragments/templateAndroid'; -import { type RnvTemplateXcodeFragment, zodTemplateXcodeFragment } from './fragments/templateXcode'; -import { type RnvPlatformNameKey } from '../../enums/platformName'; -import { type RnvBuildSchemeFragment } from '../shared'; +import { zodPlatformElectronFragment } from './fragments/electron'; +import { zodPlatformWebpackFragment } from './fragments/webpack'; +import { zodPlatformNextJsFragment } from './fragments/nextjs'; +import { zodPlatformReactNativeFragment } from './fragments/reactNative'; +import { zodPlatformBaseFragment } from './fragments/base'; +import { zodCommonSchemaFragment } from '../common'; +import { zodPlatformWebOSFragment } from './fragments/webos'; +import { zodPlatformWindowsFragment } from './fragments/windows'; +import { zodPlatformTizenFragment } from './fragments/tizen'; +import { zodPlatformWebFragment } from './fragments/web'; +import { zodPlatformAndroidFragment } from './fragments/android'; +import { zodPlatformiOSFragment } from './fragments/ios'; +import { zodTemplateAndroidFragment } from './fragments/templateAndroid'; +import { zodTemplateXcodeFragment } from './fragments/templateXcode'; const createPlatformSchema = (obj: AnyZodObject): AnyZodObject => { const zodPlatformSchema = zodCommonSchemaFragment.merge(zodPlatformBaseFragment).merge(obj); @@ -74,29 +71,3 @@ export const zodPlatformsSchema: AnyZodObject = z xbox: windowsSchema, }) .describe('Object containing platform configurations'); - -export type RnvPlatformSchemaFragment = RnvCommonSchemaFragment & - RnvPlatformBaseFragment & - RnvPlatformiOSFragment & - RnvPlatformAndroidFragment & - RnvPlatformWebFragment & - RnvPlatformTizenFragment & - RnvPlatformWindowsFragment & - RnvPlatformWebOSFragment & - RnvPlatformLightningFragment & - RnvPlatformReactNativeFragment & - RnvPlatformWebpackFragment & - RnvPlatformElectronFragment & - RnvPlatformNextJsFragment & - RnvTemplateAndroidFragment & - RnvTemplateXcodeFragment; -export type PlatPropKey = keyof RnvPlatformSchemaFragment; // We Request keys excluding buildScheme (not RnvPlatformSchema) - -// export type RnvPlatformsSchema = z.infer; -export type RnvPlatformBuildSchemeSchema = RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformSchemaFragment; -export type PlatformBuildSchemeKey = keyof RnvPlatformBuildSchemeSchema; - -export type RnvPlatformSchema = RnvPlatformSchemaFragment & { - buildSchemes?: Record; -}; -export type RnvPlatformsSchema = Partial>; diff --git a/packages/core/src/schema/plugins/fragments/base.ts b/packages/core/src/schema/plugins/fragments/base.ts index 77fc3c545c..a3cbc50334 100644 --- a/packages/core/src/schema/plugins/fragments/base.ts +++ b/packages/core/src/schema/plugins/fragments/base.ts @@ -71,5 +71,3 @@ export const zodPluginBaseFragment = z // 'engine-rn-next': z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED }) .partial(); - -export type RnvPluginBaseFragment = z.infer; diff --git a/packages/core/src/schema/plugins/fragments/platformAndroid.ts b/packages/core/src/schema/plugins/fragments/platformAndroid.ts index 5699086b83..dbe7c2a467 100644 --- a/packages/core/src/schema/plugins/fragments/platformAndroid.ts +++ b/packages/core/src/schema/plugins/fragments/platformAndroid.ts @@ -8,5 +8,3 @@ export const zodPluginPlatformAndroidFragment = zodTemplateAndroidFragment.exten implementation: z.optional(z.string()), package: z.optional(z.string()), }); - -export type RnvPluginPlatformAndroidFragment = Partial>; diff --git a/packages/core/src/schema/plugins/fragments/platformBase.ts b/packages/core/src/schema/plugins/fragments/platformBase.ts index 887bcb6d8b..6643a1388f 100644 --- a/packages/core/src/schema/plugins/fragments/platformBase.ts +++ b/packages/core/src/schema/plugins/fragments/platformBase.ts @@ -19,4 +19,3 @@ export const zodPluginPlatformBaseFragment = z.object({ forceLinking: z.optional(ForceLinking), path: z.optional(Path), }); -export type RnvPluginPlatformBaseFragment = Partial>; diff --git a/packages/core/src/schema/plugins/fragments/platformIos.ts b/packages/core/src/schema/plugins/fragments/platformIos.ts index 8cfa367e29..569086dd8f 100644 --- a/packages/core/src/schema/plugins/fragments/platformIos.ts +++ b/packages/core/src/schema/plugins/fragments/platformIos.ts @@ -19,5 +19,3 @@ export const zodPluginPlatformiOSFragment = zodTemplateXcodeFragment.extend({ isStatic: z.boolean().optional(), buildType: z.optional(BuildType), }); - -export type RnvPluginPlatformiOSFragment = Partial>; diff --git a/packages/core/src/schema/plugins/index.ts b/packages/core/src/schema/plugins/index.ts index c51fea54d8..0d13cb23cc 100644 --- a/packages/core/src/schema/plugins/index.ts +++ b/packages/core/src/schema/plugins/index.ts @@ -1,9 +1,8 @@ import { AnyZodObject, z } from 'zod'; -import { RnvPluginPlatformAndroidFragment, zodPluginPlatformAndroidFragment } from './fragments/platformAndroid'; -import { RnvPluginPlatformiOSFragment, zodPluginPlatformiOSFragment } from './fragments/platformIos'; -import { RnvPluginPlatformBaseFragment, zodPluginPlatformBaseFragment } from './fragments/platformBase'; -import { RnvPluginBaseFragment, zodPluginBaseFragment } from './fragments/base'; -import { PlatformKey } from '../../enums/platformName'; +import { zodPluginPlatformAndroidFragment } from './fragments/platformAndroid'; +import { zodPluginPlatformiOSFragment } from './fragments/platformIos'; +import { zodPluginPlatformBaseFragment } from './fragments/platformBase'; +import { zodPluginBaseFragment } from './fragments/base'; const androidSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformAndroidFragment); @@ -40,10 +39,4 @@ export const zodPluginsSchema = z 'Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config' ); -export type RnvPluginPlatformSchema = RnvPluginPlatformBaseFragment & - RnvPluginPlatformAndroidFragment & - RnvPluginPlatformiOSFragment; -export type RnvPluginPlatformsSchema = Record; -export type RnvPluginSchema = RnvPluginBaseFragment & Partial; -export type RnvPluginsSchema = Record; // export type RenativeWebpackConfig = RnvPluginSchema['webpackConfig']; diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index f0a02143cb..af17e383b2 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -35,9 +35,8 @@ export const zodBuildSchemeFragment = z.object({ ) ), }); -export type RnvBuildSchemeFragment = z.infer; -export const NpmDep = z.record(z.string(), z.string()); +export const zodNpmDep = z.record(z.string(), z.string()); export const zodTemplateConfigFragment = z .object({ @@ -67,17 +66,16 @@ export const zodTemplateConfigFragment = z .optional(), package_json: z.optional( z.object({ - dependencies: z.optional(NpmDep), - devDependencies: z.optional(NpmDep), - peerDependencies: z.optional(NpmDep), - optionalDependencies: z.optional(NpmDep), + dependencies: z.optional(zodNpmDep), + devDependencies: z.optional(zodNpmDep), + peerDependencies: z.optional(zodNpmDep), + optionalDependencies: z.optional(zodNpmDep), name: z.string().optional(), version: z.string().optional(), }) ), }) .describe('Used in `renative.template.json` allows you to define template behaviour.'); -export type RnvTemplateConfigFragment = z.infer; export const zodProjectTemplates = z.record( z.string(), diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 06643ad140..af3007a294 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -1,7 +1,43 @@ -import type { RnvPlatformSchemaFragment } from './platforms'; -import type { RnvRootProjectBaseFragment } from './configFiles/project'; -import type { _MergedPlatformPrivateObjectType } from './configFiles/private'; -import { RnvRootAppBaseFragment } from './configFiles/app'; +import { z } from 'zod'; +import { zodBuildSchemeFragment, zodTemplateConfigFragment } from './shared'; +import { zodCommonSchemaFragment } from './common'; +import { zodPlatformAndroidFragment } from './platforms/fragments/android'; +import { zodPlatformBaseFragment } from './platforms/fragments/base'; +import { zodPlatformElectronFragment } from './platforms/fragments/electron'; +import { zodPlatformiOSFragment } from './platforms/fragments/ios'; +import { zodPlatformLightningFragment } from './platforms/fragments/lightning'; +import { zodPlatformNextJsFragment } from './platforms/fragments/nextjs'; +import { zodPlatformReactNativeFragment } from './platforms/fragments/reactNative'; +import { + zodAndroidManifest, + zodManifestChildBase, + zodManifestChildWithChildren, + zodTemplateAndroidFragment, +} from './platforms/fragments/templateAndroid'; +import { zodAppDelegateMethod, zodTemplateXcodeFragment } from './platforms/fragments/templateXcode'; +import { zodPlatformTizenFragment } from './platforms/fragments/tizen'; +import { zodPlatformWebFragment } from './platforms/fragments/web'; +import { zodPlatformWebOSFragment } from './platforms/fragments/webos'; +import { zodPlatformWebpackFragment } from './platforms/fragments/webpack'; +import { zodPlatformWindowsFragment } from './platforms/fragments/windows'; +import { PlatformKey, RnvPlatformNameKey } from '../enums/platformName'; +import { zodRootAppBaseFragment } from './configFiles/app'; +import { zodRootEngineSchema } from './configFiles/engine'; +import { zodRootIntegrationSchema } from './configFiles/integration'; +import { zodRootLocalSchema } from './configFiles/local'; +import { zodRootOverridesSchema } from './configFiles/overrides'; +import { zodPluginBaseFragment } from './plugins/fragments/base'; +import { zodPluginPlatformAndroidFragment } from './plugins/fragments/platformAndroid'; +import { zodPluginPlatformBaseFragment } from './plugins/fragments/platformBase'; +import { zodPluginPlatformiOSFragment } from './plugins/fragments/platformIos'; +import { zodPluginFragment } from './configFiles/plugin'; +import { zodPrivatePlatformAndroid, zodRootPrivateSchema } from './configFiles/private'; +import { zodRootRuntimeSchema } from './configFiles/runtime'; +import { zodBootstrapConfig } from './configFiles/template'; +import { zodRootProjectBaseFragment } from './configFiles/project'; +import { zodRootTemplatesSchema } from './configFiles/templates'; +import { zodRootWorkspaceSchema } from './configFiles/workspace'; +import { zodRootWorkspacesSchema } from './configFiles/workspaces'; export type ConfigProp = Required & Required & @@ -9,3 +45,216 @@ export type ConfigProp = Required & Required; export type ConfigPropKey = keyof ConfigProp; + +// Shared ----------------------- +// +export type RnvBuildSchemeFragment = z.infer; +export type RnvTemplateConfigFragment = z.infer; + +// Common ----------------------- +// +export type RnvCommonSchemaFragment = z.infer; +export type CommonPropKey = keyof RnvCommonSchemaFragment; // We Request keys excluding buildScheme (not RnvCommonSchema) + +export type RnvCommonBuildSchemeSchema = Partial< + RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformBaseFragment +>; +export type CommonBuildSchemeKey = keyof RnvCommonBuildSchemeSchema; + +export type RnvCommonSchema = Partial & { + buildSchemes?: Record; +}; + +// Platform ----------------------- +// +export type RnvPlatformAndroidFragment = z.infer; +export type RnvPlatformBaseFragment = z.infer; +export type RnvPlatformElectronFragment = z.infer; +export type RnvPlatformiOSFragment = z.infer; +export type RnvPlatformLightningFragment = z.infer; +export type RnvPlatformNextJsFragment = z.infer; +export type RnvPlatformReactNativeFragment = z.infer; +export type AndroidManifestNode = z.infer; +export type ConfigAndroidManifestChildType = z.infer & { + children?: ConfigAndroidManifestChildType[]; +}; +export type AndroidManifest = z.infer; +export type RnvTemplateAndroidFragment = z.infer; +export type RnvTemplateXcodeFragment = z.infer; +export type ConfigAppDelegateMethod = z.infer; +export type RnvPlatformTizenFragment = z.infer; +export type RnvPlatformWebFragment = z.infer; +export type RnvPlatformWebOSFragment = z.infer; +export type RnvPlatformWebpackFragment = z.infer; +export type RnvPlatformWindowsFragment = z.infer; + +export type RnvPlatformSchemaFragment = RnvCommonSchemaFragment & + RnvPlatformBaseFragment & + RnvPlatformiOSFragment & + RnvPlatformAndroidFragment & + RnvPlatformWebFragment & + RnvPlatformTizenFragment & + RnvPlatformWindowsFragment & + RnvPlatformWebOSFragment & + RnvPlatformLightningFragment & + RnvPlatformReactNativeFragment & + RnvPlatformWebpackFragment & + RnvPlatformElectronFragment & + RnvPlatformNextJsFragment & + RnvTemplateAndroidFragment & + RnvTemplateXcodeFragment; +export type PlatPropKey = keyof RnvPlatformSchemaFragment; // We Request keys excluding buildScheme (not RnvPlatformSchema) + +// export type RnvPlatformsSchema = z.infer; +export type RnvPlatformBuildSchemeSchema = RnvCommonSchemaFragment & RnvBuildSchemeFragment & RnvPlatformSchemaFragment; +export type PlatformBuildSchemeKey = keyof RnvPlatformBuildSchemeSchema; + +export type RnvPlatformSchema = RnvPlatformSchemaFragment & { + buildSchemes?: Record; +}; +export type RnvPlatformsSchema = Partial>; + +// App ----------------------- +// +export type RnvRootAppBaseFragment = z.infer; + +export type RnvRootAppSchema = RnvRootAppBaseFragment & { + common?: RnvCommonSchema; + platforms?: RnvPlatformsSchema; + plugins?: RnvPluginsSchema; +}; +// appConfigs/**/renative.json +export type ConfigFileApp = RnvRootAppSchema; + +// BuildConfig ----------------------- +// +type RootPluginsMerged = { + scopedPluginTemplates: Record; +}; + +export type ConfigFileBuildConfig = + //Templates + _RootTemplatesSchemaType & + //Global + _RootWorkspaceSchemaType & + //Plugins (multiple roots merged under scope object) + RootPluginsMerged & + //Project + App + // Required & + RnvRootProjectSchema & + _RootLocalSchemaType & + RnvRootAppBaseFragment; + +export type BuildConfigKey = keyof ConfigFileBuildConfig; + +// Engine ----------------------- +// +export type RnvRootEngineSchema = z.infer; +// renative.engine.json +export type ConfigFileEngine = RnvRootEngineSchema; + +// Integration ----------------------- +// +export type RnvRootIntegrationSchema = z.infer; + +// renative.integration.json +export type ConfigFileIntegration = RnvRootIntegrationSchema; + +// Local ----------------------- +// +export type _RootLocalSchemaType = z.infer; + +// renative.local.json +export type ConfigFileLocal = _RootLocalSchemaType; + +// Overrides ----------------------- +// +export type RnvRootOverridesSchema = z.infer; + +//overrides.json +export type ConfigFileOverrides = RnvRootOverridesSchema; + +// Plugin ----------------------- +// +export type RnvPluginBaseFragment = z.infer; +export type RnvPluginPlatformAndroidFragment = Partial>; +export type RnvPluginPlatformBaseFragment = Partial>; +export type RnvPluginPlatformiOSFragment = Partial>; + +export type RnvPluginPlatformSchema = RnvPluginPlatformBaseFragment & + RnvPluginPlatformAndroidFragment & + RnvPluginPlatformiOSFragment; +export type RnvPluginPlatformsSchema = Record; +export type RnvPluginSchema = RnvPluginBaseFragment & Partial; +export type RnvPluginsSchema = Record; + +export type _RootPluginSchemaType = RnvPluginSchema & z.infer; + +// renative.plugin.json +export type ConfigFilePlugin = _RootPluginSchemaType; + +// Private ----------------------- +// +export type _RootPrivateSchemaType = z.infer; + +// renative.private.json +export type ConfigFilePrivate = _RootPrivateSchemaType; + +export type _MergedPlatformPrivateObjectType = z.infer; + +// Project ----------------------- +// +export type RnvRootProjectBaseFragment = z.infer & { + templateConfig?: RnvTemplateConfigFragment; +}; +export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { + common?: RnvCommonSchema; + platforms?: RnvPlatformsSchema; + plugins?: RnvPluginsSchema; +}; +// renative.json +export type ConfigFileProject = RnvRootProjectSchema; + +export type ConfigProjectPaths = Required['paths']; + +// Runtime ----------------------- +// +export type _RootRuntimeSchemaType = z.infer; + +// renative.runtime.json +export type ConfigFileRuntime = _RootRuntimeSchemaType; + +// Template ----------------------- +// +type RnvBootstrapConfig = z.infer; + +export type RnvRootTemplateSchema = { + // defaults: RnvDefault, + // engines: z.optional(EnginesSchema), + templateConfig?: RnvTemplateConfigFragment; + bootstrapConfig?: RnvBootstrapConfig; +}; + +// renative.template.json +export type ConfigFileTemplate = RnvRootTemplateSchema; + +// Templates ----------------------- +// +export type _RootTemplatesSchemaType = z.infer; + +// renative.templates.json +export type ConfigFileTemplates = _RootTemplatesSchemaType; + +// Workspace ----------------------- +// +export type _RootWorkspaceSchemaType = z.infer; + +// renative.workspace.json +export type ConfigFileWorkspace = _RootWorkspaceSchemaType; + +// Workspaces ----------------------- +// +export type RnvRootWorkspacesSchema = z.infer; + +// renative.workspaces.json +export type ConfigFileWorkspaces = RnvRootWorkspacesSchema; diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index 80abf2a56f..da06167cda 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -14,8 +14,7 @@ import { RnvFileName } from '../enums/fileName'; import { getContext } from '../context/provider'; import { RnvFolderName } from '../enums/folderName'; import { checkIfProjectAndNodeModulesExists } from '../projects/npm'; -import { type ConfigFileTemplate } from '../schema/configFiles/template'; -import { type ConfigFileProject } from '../schema/configFiles/project'; +import type { ConfigFileProject, ConfigFileTemplate } from '../schema/types'; export const configureTemplateFiles = async () => { logDefault('configureTemplateFiles'); From 26ddc1e3c0c422e87e957ebbd89daad11dc22323 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 15:55:24 +0200 Subject: [PATCH 157/175] update schema types --- packages/build-hooks-schema/src/schema.ts | 4 +- packages/core/src/schema/configFiles/local.ts | 28 +++--- .../core/src/schema/configFiles/workspace.ts | 2 +- .../core/src/schema/configFiles/workspaces.ts | 2 +- packages/core/src/schema/types.ts | 98 ++++++------------- 5 files changed, 48 insertions(+), 86 deletions(-) diff --git a/packages/build-hooks-schema/src/schema.ts b/packages/build-hooks-schema/src/schema.ts index e55b18e4a0..d8e63e3faa 100644 --- a/packages/build-hooks-schema/src/schema.ts +++ b/packages/build-hooks-schema/src/schema.ts @@ -7,7 +7,7 @@ import { zodRootProjectSchema, zodRootTemplateSchema, zodRootTemplatesSchema, - zodRootWorkspaceSchema, + zodConfigFileWorkspace, getContext, logSuccess, zodRootIntegrationSchema, @@ -22,7 +22,7 @@ export const generateSchema = async () => { _generateSchemaFile({ schema: zodRootAppSchema, schemaId: 'rnv.app' }); _generateSchemaFile({ schema: zodRootLocalSchema, schemaId: 'rnv.local' }); _generateSchemaFile({ schema: zodRootEngineSchema, schemaId: 'rnv.engine' }); - _generateSchemaFile({ schema: zodRootWorkspaceSchema, schemaId: 'rnv.workspace' }); + _generateSchemaFile({ schema: zodConfigFileWorkspace, schemaId: 'rnv.workspace' }); _generateSchemaFile({ schema: zodRootTemplateSchema, schemaId: 'rnv.template' }); _generateSchemaFile({ schema: zodRootPrivateSchema, schemaId: 'rnv.private' }); _generateSchemaFile({ schema: zodRootPluginSchema, schemaId: 'rnv.plugin' }); diff --git a/packages/core/src/schema/configFiles/local.ts b/packages/core/src/schema/configFiles/local.ts index 74810d6df3..493cef69fe 100644 --- a/packages/core/src/schema/configFiles/local.ts +++ b/packages/core/src/schema/configFiles/local.ts @@ -1,18 +1,16 @@ import { z } from 'zod'; import { zodDefaultTargets } from '../shared'; -const WorkspaceAppConfigsDir = z.string().describe('Defines app configs dir outside of current project'); - -const Meta = z.object({ - currentAppConfigId: z.optional(z.string()), - requiresJetify: z.optional(z.boolean()), -}); - -//LEVEl 0 (ROOT) - -export const zodRootLocalSchema = z.object({ - workspaceAppConfigsDir: z.optional(WorkspaceAppConfigsDir), - defaultTargets: z.optional(zodDefaultTargets), - _meta: z.optional(Meta), - // extend: z.optional(z.string()), -}); +export const zodRootLocalSchema = z + .object({ + workspaceAppConfigsDir: z.string().describe('Defines app configs dir outside of current project'), + defaultTargets: zodDefaultTargets, + _meta: z + .object({ + currentAppConfigId: z.optional(z.string()), + requiresJetify: z.optional(z.boolean()), + }) + .partial(), + // extend: z.optional(z.string()), + }) + .partial(); diff --git a/packages/core/src/schema/configFiles/workspace.ts b/packages/core/src/schema/configFiles/workspace.ts index 6c3abc2851..e765ca5547 100644 --- a/packages/core/src/schema/configFiles/workspace.ts +++ b/packages/core/src/schema/configFiles/workspace.ts @@ -18,7 +18,7 @@ const SDKsSchema = z //LEVEl 0 (ROOT) -export const zodRootWorkspaceSchema = z.object({ +export const zodConfigFileWorkspace = z.object({ defaultTargets: z.optional(zodDefaultTargets), sdks: z.optional(SDKsSchema), projectTemplates: zodProjectTemplates.optional(), diff --git a/packages/core/src/schema/configFiles/workspaces.ts b/packages/core/src/schema/configFiles/workspaces.ts index 0753dfcbe5..e98e1b875b 100644 --- a/packages/core/src/schema/configFiles/workspaces.ts +++ b/packages/core/src/schema/configFiles/workspaces.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const zodRootWorkspacesSchema = z.object({ +export const zodFileWorkspaces = z.object({ workspaces: z.record( z.string(), z.object({ diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index af3007a294..64ef02def2 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -36,15 +36,8 @@ import { zodRootRuntimeSchema } from './configFiles/runtime'; import { zodBootstrapConfig } from './configFiles/template'; import { zodRootProjectBaseFragment } from './configFiles/project'; import { zodRootTemplatesSchema } from './configFiles/templates'; -import { zodRootWorkspaceSchema } from './configFiles/workspace'; -import { zodRootWorkspacesSchema } from './configFiles/workspaces'; - -export type ConfigProp = Required & - Required & - Required<_MergedPlatformPrivateObjectType> & - Required; - -export type ConfigPropKey = keyof ConfigProp; +import { zodConfigFileWorkspace } from './configFiles/workspace'; +import { zodFileWorkspaces } from './configFiles/workspaces'; // Shared ----------------------- // @@ -129,50 +122,41 @@ export type ConfigFileApp = RnvRootAppSchema; // BuildConfig ----------------------- // type RootPluginsMerged = { - scopedPluginTemplates: Record; + scopedPluginTemplates: Record; }; - -export type ConfigFileBuildConfig = - //Templates - _RootTemplatesSchemaType & - //Global - _RootWorkspaceSchemaType & - //Plugins (multiple roots merged under scope object) - RootPluginsMerged & - //Project + App - // Required & - RnvRootProjectSchema & - _RootLocalSchemaType & - RnvRootAppBaseFragment; - +export type ConfigProp = Required & + Required & + Required & + Required; +export type ConfigPropKey = keyof ConfigProp; export type BuildConfigKey = keyof ConfigFileBuildConfig; +// renative.build.json +export type ConfigFileBuildConfig = ConfigFileTemplates & + ConfigFileWorkspace & + RootPluginsMerged & + ConfigFileProject & + ConfigFileLocal & + RnvRootAppBaseFragment; // Engine ----------------------- // -export type RnvRootEngineSchema = z.infer; // renative.engine.json -export type ConfigFileEngine = RnvRootEngineSchema; +export type ConfigFileEngine = z.infer; // Integration ----------------------- // -export type RnvRootIntegrationSchema = z.infer; - // renative.integration.json -export type ConfigFileIntegration = RnvRootIntegrationSchema; +export type ConfigFileIntegration = z.infer; // Local ----------------------- // -export type _RootLocalSchemaType = z.infer; - // renative.local.json -export type ConfigFileLocal = _RootLocalSchemaType; +export type ConfigFileLocal = z.infer; // Overrides ----------------------- // -export type RnvRootOverridesSchema = z.infer; - //overrides.json -export type ConfigFileOverrides = RnvRootOverridesSchema; +export type ConfigFileOverrides = z.infer; // Plugin ----------------------- // @@ -180,81 +164,61 @@ export type RnvPluginBaseFragment = z.infer; export type RnvPluginPlatformAndroidFragment = Partial>; export type RnvPluginPlatformBaseFragment = Partial>; export type RnvPluginPlatformiOSFragment = Partial>; - export type RnvPluginPlatformSchema = RnvPluginPlatformBaseFragment & RnvPluginPlatformAndroidFragment & RnvPluginPlatformiOSFragment; export type RnvPluginPlatformsSchema = Record; export type RnvPluginSchema = RnvPluginBaseFragment & Partial; export type RnvPluginsSchema = Record; - -export type _RootPluginSchemaType = RnvPluginSchema & z.infer; - // renative.plugin.json -export type ConfigFilePlugin = _RootPluginSchemaType; +export type ConfigFilePlugin = RnvPluginSchema & z.infer; // Private ----------------------- // -export type _RootPrivateSchemaType = z.infer; - +export type ConfigPrivatePlatformAndroid = z.infer; // renative.private.json -export type ConfigFilePrivate = _RootPrivateSchemaType; - -export type _MergedPlatformPrivateObjectType = z.infer; +export type ConfigFilePrivate = z.infer; // Project ----------------------- // export type RnvRootProjectBaseFragment = z.infer & { templateConfig?: RnvTemplateConfigFragment; }; -export type RnvRootProjectSchema = RnvRootProjectBaseFragment & { +export type ConfigProjectPaths = Required['paths']; +// renative.json +export type ConfigFileProject = RnvRootProjectBaseFragment & { common?: RnvCommonSchema; platforms?: RnvPlatformsSchema; plugins?: RnvPluginsSchema; }; -// renative.json -export type ConfigFileProject = RnvRootProjectSchema; - -export type ConfigProjectPaths = Required['paths']; // Runtime ----------------------- // -export type _RootRuntimeSchemaType = z.infer; - // renative.runtime.json -export type ConfigFileRuntime = _RootRuntimeSchemaType; +export type ConfigFileRuntime = z.infer; // Template ----------------------- // type RnvBootstrapConfig = z.infer; - -export type RnvRootTemplateSchema = { +// renative.template.json +export type ConfigFileTemplate = { // defaults: RnvDefault, // engines: z.optional(EnginesSchema), templateConfig?: RnvTemplateConfigFragment; bootstrapConfig?: RnvBootstrapConfig; }; -// renative.template.json -export type ConfigFileTemplate = RnvRootTemplateSchema; - // Templates ----------------------- // -export type _RootTemplatesSchemaType = z.infer; - // renative.templates.json -export type ConfigFileTemplates = _RootTemplatesSchemaType; +export type ConfigFileTemplates = z.infer; // Workspace ----------------------- // -export type _RootWorkspaceSchemaType = z.infer; - // renative.workspace.json -export type ConfigFileWorkspace = _RootWorkspaceSchemaType; +export type ConfigFileWorkspace = z.infer; // Workspaces ----------------------- // -export type RnvRootWorkspacesSchema = z.infer; - // renative.workspaces.json -export type ConfigFileWorkspaces = RnvRootWorkspacesSchema; +export type ConfigFileWorkspaces = z.infer; From accce28247dd8fa35bd985beb32d7796dcd77efa Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 21:59:14 +0200 Subject: [PATCH 158/175] update schema types --- packages/build-hooks-schema/src/schema.ts | 36 +++--- packages/core/src/schema/common/index.ts | 18 +-- packages/core/src/schema/configFiles/app.ts | 2 +- .../core/src/schema/configFiles/engine.ts | 2 +- .../src/schema/configFiles/integration.ts | 8 +- packages/core/src/schema/configFiles/local.ts | 2 +- .../core/src/schema/configFiles/overrides.ts | 8 +- .../core/src/schema/configFiles/plugin.ts | 2 +- .../core/src/schema/configFiles/private.ts | 73 +++++------ .../core/src/schema/configFiles/project.ts | 6 +- .../core/src/schema/configFiles/runtime.ts | 2 +- .../core/src/schema/configFiles/template.ts | 20 +-- .../core/src/schema/configFiles/templates.ts | 2 +- .../core/src/schema/configFiles/workspace.ts | 48 ++++---- .../core/src/schema/configFiles/workspaces.ts | 2 +- .../src/schema/platforms/fragments/base.ts | 2 +- .../schema/platforms/fragments/electron.ts | 9 +- .../src/schema/platforms/fragments/ios.ts | 38 +++--- .../src/schema/platforms/fragments/nextjs.ts | 2 +- .../platforms/fragments/templateAndroid.ts | 116 +++++++++--------- .../platforms/fragments/templateXcode.ts | 68 +++++----- .../src/schema/platforms/fragments/webpack.ts | 16 +-- .../src/schema/platforms/fragments/windows.ts | 91 ++++++-------- .../core/src/schema/plugins/fragments/base.ts | 110 +++++++---------- .../schema/plugins/fragments/platformBase.ts | 35 +++--- .../schema/plugins/fragments/platformIos.ts | 24 ++-- packages/core/src/schema/plugins/index.ts | 44 +++---- packages/core/src/schema/shared/index.ts | 2 - packages/core/src/schema/types.ts | 38 +++--- packages/core/src/schema/validators.ts | 4 +- 30 files changed, 393 insertions(+), 437 deletions(-) diff --git a/packages/build-hooks-schema/src/schema.ts b/packages/build-hooks-schema/src/schema.ts index d8e63e3faa..e9c107fe18 100644 --- a/packages/build-hooks-schema/src/schema.ts +++ b/packages/build-hooks-schema/src/schema.ts @@ -1,16 +1,16 @@ import { - zodRootAppSchema, - zodRootEngineSchema, - zodRootLocalSchema, - zodRootPluginSchema, - zodRootPrivateSchema, - zodRootProjectSchema, - zodRootTemplateSchema, - zodRootTemplatesSchema, + zodConfigFilePlugin, + zodConfigFilePrivate, + zodConfigFileProject, + zodConfigFileTemplate, + zodConfigFileTemplates, zodConfigFileWorkspace, getContext, logSuccess, - zodRootIntegrationSchema, + zodConfigFileIntergation, + zodConfigFileApp, + zodConfigFileLocal, + zodConfigFileEngine, } from '@rnv/core'; import { zodToJsonSchema } from 'zod-to-json-schema'; import { z } from 'zod'; @@ -18,16 +18,16 @@ import path from 'path'; import fs from 'fs'; export const generateSchema = async () => { - _generateSchemaFile({ schema: zodRootProjectSchema, schemaId: 'rnv.project' }); - _generateSchemaFile({ schema: zodRootAppSchema, schemaId: 'rnv.app' }); - _generateSchemaFile({ schema: zodRootLocalSchema, schemaId: 'rnv.local' }); - _generateSchemaFile({ schema: zodRootEngineSchema, schemaId: 'rnv.engine' }); + _generateSchemaFile({ schema: zodConfigFileProject, schemaId: 'rnv.project' }); + _generateSchemaFile({ schema: zodConfigFileApp, schemaId: 'rnv.app' }); + _generateSchemaFile({ schema: zodConfigFileLocal, schemaId: 'rnv.local' }); + _generateSchemaFile({ schema: zodConfigFileEngine, schemaId: 'rnv.engine' }); _generateSchemaFile({ schema: zodConfigFileWorkspace, schemaId: 'rnv.workspace' }); - _generateSchemaFile({ schema: zodRootTemplateSchema, schemaId: 'rnv.template' }); - _generateSchemaFile({ schema: zodRootPrivateSchema, schemaId: 'rnv.private' }); - _generateSchemaFile({ schema: zodRootPluginSchema, schemaId: 'rnv.plugin' }); - _generateSchemaFile({ schema: zodRootTemplatesSchema, schemaId: 'rnv.templates' }); - _generateSchemaFile({ schema: zodRootIntegrationSchema, schemaId: 'rnv.integration' }); + _generateSchemaFile({ schema: zodConfigFileTemplate, schemaId: 'rnv.template' }); + _generateSchemaFile({ schema: zodConfigFilePrivate, schemaId: 'rnv.private' }); + _generateSchemaFile({ schema: zodConfigFilePlugin, schemaId: 'rnv.plugin' }); + _generateSchemaFile({ schema: zodConfigFileTemplates, schemaId: 'rnv.templates' }); + _generateSchemaFile({ schema: zodConfigFileIntergation, schemaId: 'rnv.integration' }); logSuccess('Sucessfully exported renative.project.json schema'); }; diff --git a/packages/core/src/schema/common/index.ts b/packages/core/src/schema/common/index.ts index 707af93f2a..4d4c0c6ca9 100644 --- a/packages/core/src/schema/common/index.ts +++ b/packages/core/src/schema/common/index.ts @@ -77,13 +77,15 @@ export const zodCommonSchemaFragment = z export const zodCommonSchema: AnyZodObject = zodCommonSchemaFragment .merge( - z.object({ - buildSchemes: z.optional( - z.record( - z.string(), - zodCommonSchemaFragment.merge(zodBuildSchemeFragment.merge(zodPlatformBaseFragment)) - ) - ), - }) + z + .object({ + buildSchemes: z.optional( + z.record( + z.string(), + zodCommonSchemaFragment.merge(zodBuildSchemeFragment.merge(zodPlatformBaseFragment)) + ) + ), + }) + .partial() ) .describe('Common config props used as default props for all available buildSchemes'); diff --git a/packages/core/src/schema/configFiles/app.ts b/packages/core/src/schema/configFiles/app.ts index d64b2c94d1..9f4b66d2bb 100644 --- a/packages/core/src/schema/configFiles/app.ts +++ b/packages/core/src/schema/configFiles/app.ts @@ -25,7 +25,7 @@ export const zodRootAppBaseFragment = z // NOTE: Need to explictly type this to generic zod object to avoid TS error: // The inferred type of this node exceeds the maximum length the compiler will serialize... // This is ok we only use this full schema for runtime validations. actual types -export const zodRootAppSchema: AnyZodObject = zodRootAppBaseFragment +export const zodConfigFileApp: AnyZodObject = zodRootAppBaseFragment .merge(zodRootProjectCommonSchema) .merge(zodRootProjectPlatformsSchema) .merge(zodRootProjectPluginsSchema); diff --git a/packages/core/src/schema/configFiles/engine.ts b/packages/core/src/schema/configFiles/engine.ts index 29ff925432..da245fe57a 100644 --- a/packages/core/src/schema/configFiles/engine.ts +++ b/packages/core/src/schema/configFiles/engine.ts @@ -17,7 +17,7 @@ const zodEnginePlatform = z.object({ npm: z.optional(zodEngineNpm), }); -export const zodRootEngineSchema = z +export const zodConfigFileEngine = z .object({ custom: z.optional(zodExt), id: z.string().describe('ID of engine'), diff --git a/packages/core/src/schema/configFiles/integration.ts b/packages/core/src/schema/configFiles/integration.ts index 31b8f18fe7..379a0a8a90 100644 --- a/packages/core/src/schema/configFiles/integration.ts +++ b/packages/core/src/schema/configFiles/integration.ts @@ -1,6 +1,8 @@ import { z } from 'zod'; -export const zodRootIntegrationSchema = z.object({ - packageName: z.string(), -}); +export const zodConfigFileIntergation = z + .object({ + packageName: z.string(), + }) + .partial(); // diff --git a/packages/core/src/schema/configFiles/local.ts b/packages/core/src/schema/configFiles/local.ts index 493cef69fe..e720d128d3 100644 --- a/packages/core/src/schema/configFiles/local.ts +++ b/packages/core/src/schema/configFiles/local.ts @@ -1,7 +1,7 @@ import { z } from 'zod'; import { zodDefaultTargets } from '../shared'; -export const zodRootLocalSchema = z +export const zodConfigFileLocal = z .object({ workspaceAppConfigsDir: z.string().describe('Defines app configs dir outside of current project'), defaultTargets: zodDefaultTargets, diff --git a/packages/core/src/schema/configFiles/overrides.ts b/packages/core/src/schema/configFiles/overrides.ts index 2fd9bb2eae..8050243d54 100644 --- a/packages/core/src/schema/configFiles/overrides.ts +++ b/packages/core/src/schema/configFiles/overrides.ts @@ -1,5 +1,7 @@ import { z } from 'zod'; -export const zodRootOverridesSchema = z.object({ - overrides: z.record(z.string(), z.record(z.string(), z.string())), -}); +export const zodConfigFileOverrides = z + .object({ + overrides: z.record(z.string(), z.record(z.string(), z.string())), + }) + .partial(); diff --git a/packages/core/src/schema/configFiles/plugin.ts b/packages/core/src/schema/configFiles/plugin.ts index db71b6df5c..5a1cb2df8d 100644 --- a/packages/core/src/schema/configFiles/plugin.ts +++ b/packages/core/src/schema/configFiles/plugin.ts @@ -6,4 +6,4 @@ export const zodPluginFragment = z.object({ custom: z.optional(zodExt), }); -export const zodRootPluginSchema: AnyZodObject = zodPluginSchema.merge(zodPluginFragment); +export const zodConfigFilePlugin: AnyZodObject = zodPluginSchema.merge(zodPluginFragment).partial(); diff --git a/packages/core/src/schema/configFiles/private.ts b/packages/core/src/schema/configFiles/private.ts index 05f3230484..a5eaa0fdbf 100644 --- a/packages/core/src/schema/configFiles/private.ts +++ b/packages/core/src/schema/configFiles/private.ts @@ -5,42 +5,43 @@ const SENSITIVE = export const zodPrivatePlatformAndroid = z .object({ - storePassword: z.string().describe(`${SENSITIVE}storePassword for keystore file`).optional(), - keyPassword: z.string().describe(`${SENSITIVE}keyPassword for keystore file`).optional(), - storeFile: z.string().describe('Name of the store file in android project').optional(), //TODO: Duplicate from config - keyAlias: z.string().describe('Key alias of the store file in android project').optional(), + storePassword: z.string().describe(`${SENSITIVE}storePassword for keystore file`), + keyPassword: z.string().describe(`${SENSITIVE}keyPassword for keystore file`), + storeFile: z.string().describe('Name of the store file in android project'), //TODO: Duplicate from config + keyAlias: z.string().describe('Key alias of the store file in android project'), }) - .optional(); + .partial(); -const zodPrivatePlatformGeneric = z.object({}).optional(); +const zodPrivatePlatformGeneric = z.any({}); -export const zodRootPrivateSchema = z.object({ - private: z - .record(z.any()) - .describe( - 'Special object which contains private info. this object should be used only in `renative.private.json` files and never commited to your repository. Private files usually reside in your workspace and are subject to crypto encryption if enabled. RNV will warn you if it finds private key in your regular `renative.json` file' - ) - .optional(), - platforms: z - .object({ - android: zodPrivatePlatformAndroid, - androidtv: zodPrivatePlatformAndroid, - androidwear: zodPrivatePlatformAndroid, - firetv: zodPrivatePlatformAndroid, - ios: zodPrivatePlatformGeneric, - tvos: zodPrivatePlatformGeneric, - tizen: zodPrivatePlatformGeneric, - tizenmobile: zodPrivatePlatformGeneric, - tizenwatch: zodPrivatePlatformGeneric, - webos: zodPrivatePlatformGeneric, - web: zodPrivatePlatformGeneric, - webtv: zodPrivatePlatformGeneric, - chromecast: zodPrivatePlatformGeneric, - kaios: zodPrivatePlatformGeneric, - macos: zodPrivatePlatformGeneric, - linux: zodPrivatePlatformGeneric, - windows: zodPrivatePlatformGeneric, - xbox: zodPrivatePlatformGeneric, - }) - .optional(), -}); +export const zodConfigFilePrivate = z + .object({ + private: z + .record(z.any()) + .describe( + 'Special object which contains private info. this object should be used only in `renative.private.json` files and never commited to your repository. Private files usually reside in your workspace and are subject to crypto encryption if enabled. RNV will warn you if it finds private key in your regular `renative.json` file' + ), + platforms: z + .object({ + android: zodPrivatePlatformAndroid, + androidtv: zodPrivatePlatformAndroid, + androidwear: zodPrivatePlatformAndroid, + firetv: zodPrivatePlatformAndroid, + ios: zodPrivatePlatformGeneric, + tvos: zodPrivatePlatformGeneric, + tizen: zodPrivatePlatformGeneric, + tizenmobile: zodPrivatePlatformGeneric, + tizenwatch: zodPrivatePlatformGeneric, + webos: zodPrivatePlatformGeneric, + web: zodPrivatePlatformGeneric, + webtv: zodPrivatePlatformGeneric, + chromecast: zodPrivatePlatformGeneric, + kaios: zodPrivatePlatformGeneric, + macos: zodPrivatePlatformGeneric, + linux: zodPrivatePlatformGeneric, + windows: zodPrivatePlatformGeneric, + xbox: zodPrivatePlatformGeneric, + }) + .partial(), + }) + .partial(); diff --git a/packages/core/src/schema/configFiles/project.ts b/packages/core/src/schema/configFiles/project.ts index 85a05cd8bb..0e0bc9c6e2 100644 --- a/packages/core/src/schema/configFiles/project.ts +++ b/packages/core/src/schema/configFiles/project.ts @@ -138,8 +138,7 @@ export const zodRootProjectBaseFragment = z .describe('Object containing integration configurations where key represents package name'), // TODO: rename to mods env: z.record(z.string(), z.any()).describe('Object containing injected env variables'), runtime: zodRuntime, - // DEPRECATED - + // DEPRECATED -------------- isMonorepo: z.boolean().describe('Mark if your project is part of monorepo'), // TODO: remove and use auto detection monoRoot: z.string().describe('Define custom path to monorepo root where starting point is project directory'), // TODO: remove and use auto detection custom: zodExt, // TODO: find better way to handle @@ -149,7 +148,6 @@ export const zodRootProjectBaseFragment = z .describe( "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" ), - // REMOVED // useTemplate: z.optional(UseTemplate), // isNew: z @@ -164,7 +162,7 @@ export const zodRootProjectBaseFragment = z export const zodRootProjectCommonSchema: AnyZodObject = z.object({ common: z.optional(zodCommonSchema) }); export const zodRootProjectPlatformsSchema: AnyZodObject = z.object({ platforms: z.optional(zodPlatformsSchema) }); export const zodRootProjectPluginsSchema: AnyZodObject = z.object({ plugins: z.optional(zodPluginsSchema) }); -export const zodRootProjectSchema: AnyZodObject = zodRootProjectBaseFragment +export const zodConfigFileProject: AnyZodObject = zodRootProjectBaseFragment .merge(zodRootProjectCommonSchema) .merge(zodRootProjectPlatformsSchema) .merge(zodRootProjectPluginsSchema) diff --git a/packages/core/src/schema/configFiles/runtime.ts b/packages/core/src/schema/configFiles/runtime.ts index 123900edc8..81616914a5 100644 --- a/packages/core/src/schema/configFiles/runtime.ts +++ b/packages/core/src/schema/configFiles/runtime.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -export const zodRootRuntimeSchema = z.object({ +export const zodConfigFileRuntime = z.object({ // extend: z.optional(z.string()), }); diff --git a/packages/core/src/schema/configFiles/template.ts b/packages/core/src/schema/configFiles/template.ts index faa160344c..b54d454871 100644 --- a/packages/core/src/schema/configFiles/template.ts +++ b/packages/core/src/schema/configFiles/template.ts @@ -33,7 +33,7 @@ const zodBootstrapQuestionsSchema = z ) .describe('Defines list of custom bootstrap questions'); -export const zodBootstrapConfig = z +export const zodConfigTemplateBootstrapConfig = z .object({ bootstrapQuestions: zodBootstrapQuestionsSchema, rnvNewPatchDependencies: z @@ -50,16 +50,18 @@ export const zodBootstrapConfig = z }) ), }), - defaultSelectedPlatforms: zodSupportedPlatforms.optional(), + defaultSelectedPlatforms: zodSupportedPlatforms, }) .partial(); -export const zodRootTemplateSchema: AnyZodObject = z.object({ - // defaults: z.optional(DefaultsSchema), - // engines: z.optional(EnginesSchema), - templateConfig: zodTemplateConfigFragment.optional(), - bootstrapConfig: zodBootstrapConfig.optional(), -}); +export const zodConfigFileTemplate: AnyZodObject = z + .object({ + // defaults: z.optional(DefaultsSchema), + // engines: z.optional(EnginesSchema), + templateConfig: zodTemplateConfigFragment, + bootstrapConfig: zodConfigTemplateBootstrapConfig, + }) + .partial(); // { // title: 'Which service to use?', @@ -83,5 +85,3 @@ export const zodRootTemplateSchema: AnyZodObject = z.object({ // }, // ], // }, - -// export type _RootTemplateSchemaType = z.infer; diff --git a/packages/core/src/schema/configFiles/templates.ts b/packages/core/src/schema/configFiles/templates.ts index b00002c092..bed543c2af 100644 --- a/packages/core/src/schema/configFiles/templates.ts +++ b/packages/core/src/schema/configFiles/templates.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; import { zodPlatformsKeys, zodProjectTemplates } from '../shared'; import { zodPluginSchema } from '../plugins'; -export const zodRootTemplatesSchema = z +export const zodConfigFileTemplates = z .object({ projectTemplates: zodProjectTemplates, engineIdMap: z.record(z.string(), z.string()), diff --git a/packages/core/src/schema/configFiles/workspace.ts b/packages/core/src/schema/configFiles/workspace.ts index e765ca5547..a420f6c274 100644 --- a/packages/core/src/schema/configFiles/workspace.ts +++ b/packages/core/src/schema/configFiles/workspace.ts @@ -1,33 +1,33 @@ import { z } from 'zod'; import { zodDefaultTargets, zodProjectTemplates } from '../shared'; -const SDKsSchema = z - .object({ - ANDROID_SDK: z.string().optional(), - ANDROID_NDK: z.string().optional(), - TIZEN_SDK: z.string().optional(), - WEBOS_SDK: z.string().optional(), - KAIOS_SDK: z.string().optional(), - }) - .describe('Define your sdk configurations'); // ANDROID_SDK: '~/Library/Android/sdk', // ANDROID_NDK: '~/Library/Android/sdk/ndk-bundle', // TIZEN_SDK: '~/tizen-studio', // WEBOS_SDK: '/opt/webOS_TV_SDK', // KAIOS_SDK: '~/Applications/KaiosSimulators', -//LEVEl 0 (ROOT) - -export const zodConfigFileWorkspace = z.object({ - defaultTargets: z.optional(zodDefaultTargets), - sdks: z.optional(SDKsSchema), - projectTemplates: zodProjectTemplates.optional(), - disableTelemetry: z - .boolean() - .optional() - .describe('Opt-out from renative telemetry program. More info at https://renative.org/telemetry'), - appConfigsPath: z - .string() - .optional() - .describe('Enables you to define custom global appConfigs location that every project will automatically use'), -}); +export const zodConfigFileWorkspace = z + .object({ + defaultTargets: zodDefaultTargets, + sdks: z + .object({ + ANDROID_SDK: z.string(), + ANDROID_NDK: z.string(), + TIZEN_SDK: z.string(), + WEBOS_SDK: z.string(), + KAIOS_SDK: z.string(), + }) + .partial() + .describe('Define your sdk configurations'), + projectTemplates: zodProjectTemplates, + disableTelemetry: z + .boolean() + .describe('Opt-out from renative telemetry program. More info at https://renative.org/telemetry'), + appConfigsPath: z + .string() + .describe( + 'Enables you to define custom global appConfigs location that every project will automatically use' + ), + }) + .partial(); diff --git a/packages/core/src/schema/configFiles/workspaces.ts b/packages/core/src/schema/configFiles/workspaces.ts index e98e1b875b..a1046b63c3 100644 --- a/packages/core/src/schema/configFiles/workspaces.ts +++ b/packages/core/src/schema/configFiles/workspaces.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -export const zodFileWorkspaces = z.object({ +export const zodConfigFileWorkspaces = z.object({ workspaces: z.record( z.string(), z.object({ diff --git a/packages/core/src/schema/platforms/fragments/base.ts b/packages/core/src/schema/platforms/fragments/base.ts index 81d8b4b476..3b2eb69996 100644 --- a/packages/core/src/schema/platforms/fragments/base.ts +++ b/packages/core/src/schema/platforms/fragments/base.ts @@ -3,7 +3,7 @@ import { zodPlatformsKeys } from '../../shared'; export const zodPlatformBaseFragment = z .object({ - extendPlatform: z.optional(zodPlatformsKeys), + extendPlatform: zodPlatformsKeys, assetFolderPlatform: z .string() .describe( diff --git a/packages/core/src/schema/platforms/fragments/electron.ts b/packages/core/src/schema/platforms/fragments/electron.ts index 86ecae456a..c3216ab8b6 100644 --- a/packages/core/src/schema/platforms/fragments/electron.ts +++ b/packages/core/src/schema/platforms/fragments/electron.ts @@ -5,15 +5,16 @@ export const zodPlatformElectronFragment = z electronConfig: z.any().describe('Allows you to configure electron app as per https://www.electron.build/'), BrowserWindow: z .object({ - width: z.number().optional(), - height: z.number().optional(), + width: z.number(), + height: z.number(), webPreferences: z .object({ - devTools: z.boolean().optional(), + devTools: z.boolean(), }) - .optional() + .describe('Extra web preferences of electron app'), }) + .partial() .describe('Allows you to configure electron wrapper app window'), // electronTemplate: z.optional(z.object({})), // electronConfig: { diff --git a/packages/core/src/schema/platforms/fragments/ios.ts b/packages/core/src/schema/platforms/fragments/ios.ts index 469786e8d1..e2e57c4738 100644 --- a/packages/core/src/schema/platforms/fragments/ios.ts +++ b/packages/core/src/schema/platforms/fragments/ios.ts @@ -5,28 +5,30 @@ export const zodPlatformiOSFragment = z ignoreWarnings: z.boolean().describe('Injects `inhibit_all_warnings` into Podfile'), ignoreLogs: z.boolean().describe('Passes `-quiet` to xcodebuild command'), deploymentTarget: z.string().describe('Deployment target for xcodepoj'), - orientationSupport: z.object({ - phone: z.optional(z.array(z.string())), - // phone: [ - // 'UIInterfaceOrientationPortrait', - // 'UIInterfaceOrientationPortraitUpsideDown', - // 'UIInterfaceOrientationLandscapeLeft', - // 'UIInterfaceOrientationLandscapeRight', - // ], - tab: z.optional(z.array(z.string())), - // tab: [ - // 'UIInterfaceOrientationPortrait', - // 'UIInterfaceOrientationPortraitUpsideDown', - // 'UIInterfaceOrientationLandscapeLeft', - // 'UIInterfaceOrientationLandscapeRight', - // ], - }), + orientationSupport: z + .object({ + phone: z.array(z.string()), + // phone: [ + // 'UIInterfaceOrientationPortrait', + // 'UIInterfaceOrientationPortraitUpsideDown', + // 'UIInterfaceOrientationLandscapeLeft', + // 'UIInterfaceOrientationLandscapeRight', + // ], + tab: z.array(z.string()), + // tab: [ + // 'UIInterfaceOrientationPortrait', + // 'UIInterfaceOrientationPortraitUpsideDown', + // 'UIInterfaceOrientationLandscapeLeft', + // 'UIInterfaceOrientationLandscapeRight', + // ], + }) + .partial(), teamID: z.string().describe('Apple teamID'), excludedArchs: z .array(z.string()) .describe('Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=""`'), urlScheme: z.string().describe('URL Scheme for the app used for deeplinking'), - teamIdentifier: z.optional(z.string().describe('Apple developer team ID')), + teamIdentifier: z.string().describe('Apple developer team ID'), scheme: z.string(), schemeTarget: z.string(), appleId: z.string(), @@ -38,7 +40,7 @@ export const zodPlatformiOSFragment = z provisionProfileSpecifiers: z.record(z.string(), z.string()), allowProvisioningUpdates: z.boolean(), provisioningProfiles: z.record(z.string()), - codeSignIdentities: z.optional(z.record(z.string(), z.string())), + codeSignIdentities: z.record(z.string(), z.string()), systemCapabilities: z.record(z.string(), z.boolean()), entitlements: z.record(z.string()), runScheme: z.string(), diff --git a/packages/core/src/schema/platforms/fragments/nextjs.ts b/packages/core/src/schema/platforms/fragments/nextjs.ts index e85bb2d6ca..5b934906c9 100644 --- a/packages/core/src/schema/platforms/fragments/nextjs.ts +++ b/packages/core/src/schema/platforms/fragments/nextjs.ts @@ -13,6 +13,6 @@ export const zodPlatformNextJsFragment = z .describe( 'Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths' ), - nextTranspileModules: z.optional(z.array(z.string())), + nextTranspileModules: z.array(z.string()), }) .partial(); diff --git a/packages/core/src/schema/platforms/fragments/templateAndroid.ts b/packages/core/src/schema/platforms/fragments/templateAndroid.ts index 143db69b71..e6d3d4b91c 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroid.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroid.ts @@ -18,28 +18,29 @@ const BuildGradle = z dexOptions: z.record(z.string(), z.boolean()), injectAfterAll: z.array(z.string()), }) + .partial() .describe('Overrides values in `build.gradle` file of generated android based project'); const AppBuildGradle = z .object({ apply: z.array(z.string()), defaultConfig: z.array(z.string()), - buildTypes: z.optional( - z.object({ - debug: z.optional(z.array(z.string())), - release: z.optional(z.array(z.string())), - }) - ), - afterEvaluate: z.optional(z.array(z.string())), - implementations: z.optional(z.array(z.string())), - implementation: z.optional(z.string()), + buildTypes: z.object({ + debug: z.optional(z.array(z.string())), + release: z.optional(z.array(z.string())), + }), + + afterEvaluate: z.array(z.string()), + implementations: z.array(z.string()), + implementation: z.string(), }) + .partial() .describe('Overrides values in `app/build.gradle` file of generated android based project'); export const zodManifestChildBase = z.object({ tag: z.string(), 'android:name': z.string(), - 'android:required': z.optional(z.boolean()), + 'android:required': z.boolean().optional(), // 'android:name': '.MainApplication', // 'android:allowBackup': true, // 'android:largeHeap': true, @@ -60,7 +61,7 @@ export const zodManifestChildWithChildren: z.ZodType IMPORTANT: always ensure that your object contains \`tag\` and \`android:name\` to target correct tag to merge into @@ -74,62 +75,57 @@ export const zodTemplateAndroidFragment = z .object({ templateAndroid: z .object({ - gradle_properties: z.optional(GradleProperties), - build_gradle: z.optional(BuildGradle), - app_build_gradle: z.optional(AppBuildGradle), - AndroidManifest_xml: z.optional(zodAndroidManifest), - strings_xml: z.optional( - z.object({ - children: z.optional( - z.array( - z.object({ - tag: z.string(), - name: z.string(), - child_value: z.string(), - }) - ) - ), - }) - ), - MainActivity_kt: z.optional( - z.object({ + gradle_properties: GradleProperties, + build_gradle: BuildGradle, + app_build_gradle: AppBuildGradle, + AndroidManifest_xml: zodAndroidManifest, + strings_xml: z.object({ + children: z.array( + z.object({ + tag: z.string(), + name: z.string().optional(), + child_value: z.string().optional(), + }) + ), + }), + MainActivity_kt: z + .object({ onCreate: z .string({}) - .optional() + .default('super.onCreate(savedInstanceState)') .describe('Overrides super.onCreate method handler of MainActivity.java'), - imports: z.array(z.string()).optional(), - methods: z.array(z.string()).optional(), - createMethods: z.array(z.string()).optional(), - resultMethods: z.array(z.string()).optional(), + imports: z.array(z.string()), + methods: z.array(z.string()), + createMethods: z.array(z.string()), + resultMethods: z.array(z.string()), }) - ), - MainApplication_kt: z.optional( - z - .object({ - imports: z.array(z.string()).optional(), - methods: z.array(z.string()).optional(), - createMethods: z.array(z.string()).optional(), - packages: z.array(z.string()).optional(), - packageParams: z.array(z.string()).optional(), + .partial(), + MainApplication_kt: z + .object({ + imports: z.array(z.string()), + methods: z.array(z.string()), + createMethods: z.array(z.string()), + packages: z.array(z.string()), + packageParams: z.array(z.string()), - // onCreate: z - // .string({}) - // .optional() - // .default('super.onCreate(savedInstanceState)') - // .describe('Overrides super.onCreate method handler of MainActivity.java'), - }) - .describe('Allows you to configure behaviour of MainActivity') - ), + // onCreate: z + // .string({}) + // + // .default('super.onCreate(savedInstanceState)') + // .describe('Overrides super.onCreate method handler of MainActivity.java'), + }) + .partial() + .describe('Allows you to configure behaviour of MainActivity'), - settings_gradle: z.optional(z.object({})), - gradle_wrapper_properties: z.optional(z.object({})), - SplashActivity_java: z.optional(z.object({})), - styles_xml: z.optional(z.object({})), - colors_xml: z.optional(z.object({})), - proguard_rules_pro: z.optional(z.object({})), + settings_gradle: z.object({}), + gradle_wrapper_properties: z.object({}), + SplashActivity_java: z.object({}), + styles_xml: z.object({}), + colors_xml: z.object({}), + proguard_rules_pro: z.object({}), }) .partial(), }) - .partial(); -// .describe('Allows more advanced modifications to Android based project template'); + .partial() + .describe('Allows more advanced modifications to Android based project template'); diff --git a/packages/core/src/schema/platforms/fragments/templateXcode.ts b/packages/core/src/schema/platforms/fragments/templateXcode.ts index 6768bc28bf..1b9b73c303 100644 --- a/packages/core/src/schema/platforms/fragments/templateXcode.ts +++ b/packages/core/src/schema/platforms/fragments/templateXcode.ts @@ -2,37 +2,38 @@ import { z } from 'zod'; const zodPodfile = z .object({ - injectLines: z.optional(z.array(z.string())), - post_install: z.optional(z.array(z.string())), + injectLines: z.array(z.string()), + post_install: z.array(z.string()), sources: z .optional(z.array(z.string())) .describe('Array of URLs that will be injected on top of the Podfile as sources'), - podDependencies: z.optional(z.array(z.string())), - staticPods: z.optional(z.array(z.string())), + podDependencies: z.array(z.string()), + staticPods: z.array(z.string()), header: z .optional(z.array(z.string())) .describe('Array of strings that will be injected on top of the Podfile'), }) + .partial() .describe('Allows to manipulate Podfile'); // type RnvPodfile = z.infer; -const zodXcodeProj = z.object({ - sourceFiles: z.optional(z.array(z.string())), - resourceFiles: z.optional(z.array(z.string())), - headerFiles: z.optional(z.array(z.string())), - buildPhases: z.optional( - z.array( +const zodXcodeProj = z + .object({ + sourceFiles: z.array(z.string()), + resourceFiles: z.array(z.string()), + headerFiles: z.array(z.string()), + buildPhases: z.array( z.object({ shellPath: z.string(), shellScript: z.string(), inputPaths: z.array(z.string()), }) - ) - ), - frameworks: z.optional(z.array(z.string())), - buildSettings: z.optional(z.record(z.string(), z.string())), -}); + ), + frameworks: z.array(z.string()), + buildSettings: z.record(z.string(), z.string()), + }) + .partial(); // type RnvXcodeProj = z.infer; export const zodAppDelegateMethod = z.union([ @@ -44,9 +45,9 @@ export const zodAppDelegateMethod = z.union([ }), ]); -const zodAppDelegateMm = z.object({ - appDelegateMethods: z.optional( - z.object({ +const zodAppDelegateMm = z + .object({ + appDelegateMethods: z.object({ application: z .object({ didFinishLaunchingWithOptions: z.array(zodAppDelegateMethod).optional(), @@ -69,28 +70,29 @@ const zodAppDelegateMm = z.object({ didReceiveNotificationResponse: z.array(zodAppDelegateMethod).optional(), }) .optional(), - }) - ), - appDelegateImports: z.optional(z.array(z.string())), -}); -const zodAppDelegateH = z.object({ - appDelegateImports: z.optional(z.array(z.string())), - appDelegateExtensions: z.optional(z.array(z.string())), -}); + }), -const zodInfoPlist = z.object({}); + appDelegateImports: z.array(z.string()), + }) + .partial(); +const zodAppDelegateH = z + .object({ + appDelegateImports: z.array(z.string()), + appDelegateExtensions: z.array(z.string()), + }) + .partial(); -// .describe('Allows more advanced modifications to Xcode based project template'); +const zodInfoPlist = z.object({}); export const zodTemplateXcodeFragment = z .object({ templateXcode: z .object({ - Podfile: z.optional(zodPodfile), - project_pbxproj: z.optional(zodXcodeProj), - AppDelegate_mm: z.optional(zodAppDelegateMm), - AppDelegate_h: z.optional(zodAppDelegateH), - Info_plist: z.optional(zodInfoPlist), + Podfile: zodPodfile, + project_pbxproj: zodXcodeProj, + AppDelegate_mm: zodAppDelegateMm, + AppDelegate_h: zodAppDelegateH, + Info_plist: zodInfoPlist, }) .partial(), }) diff --git a/packages/core/src/schema/platforms/fragments/webpack.ts b/packages/core/src/schema/platforms/fragments/webpack.ts index 58e7db81e5..b1dcd91aa7 100644 --- a/packages/core/src/schema/platforms/fragments/webpack.ts +++ b/packages/core/src/schema/platforms/fragments/webpack.ts @@ -2,13 +2,15 @@ import { z } from 'zod'; export const zodPlatformWebpackFragment = z .object({ - webpackConfig: z.object({ - publicUrl: z.string().optional(), - customScripts: z - .array(z.string()) - .optional() - .describe('Allows you to inject custom script into html header'), - }), + webpackConfig: z + .object({ + publicUrl: z.string(), + customScripts: z + .array(z.string()) + + .describe('Allows you to inject custom script into html header'), + }) + .partial(), // webpackConfig: { // additionalProperties: true, diff --git a/packages/core/src/schema/platforms/fragments/windows.ts b/packages/core/src/schema/platforms/fragments/windows.ts index cd99404160..22a2d71c31 100644 --- a/packages/core/src/schema/platforms/fragments/windows.ts +++ b/packages/core/src/schema/platforms/fragments/windows.ts @@ -2,76 +2,59 @@ import { z } from 'zod'; export const zodPlatformWindowsFragment = z .object({ - templateVSProject: z.optional( - z.object({ - language: z - .string() - .describe('Specify generated project language: cpp for C++ or cs for C#') - .optional(), - arch: z.string().describe('Specification of targeted architecture').optional(), - experimentalNuGetDependency: z.boolean().optional(), - useWinUI3: z.boolean().optional(), - nuGetTestVersion: z.string().optional(), - reactNativeEngine: z.string().optional(), - nuGetTestFeed: z.string().optional(), + templateVSProject: z + .object({ + language: z.string().describe('Specify generated project language: cpp for C++ or cs for C#'), + arch: z.string().describe('Specification of targeted architecture'), + experimentalNuGetDependency: z.boolean(), + useWinUI3: z.boolean(), + nuGetTestVersion: z.string(), + reactNativeEngine: z.string(), + nuGetTestFeed: z.string(), overwrite: z .boolean() - .describe('Whether to attempt to override the existing builds files when running a build once more') - .optional(), - release: z.boolean().describe('Enables full packaging of the app for release').optional(), + .describe( + 'Whether to attempt to override the existing builds files when running a build once more' + ), + release: z.boolean().describe('Enables full packaging of the app for release'), root: z .string() - .describe('Project root folder location (not the app itself, which is in platformBuilds)') - .optional(), - + .describe('Project root folder location (not the app itself, which is in platformBuilds)'), singleproc: z .boolean() .describe( 'Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)' - ) - .optional(), - emulator: z.boolean().optional(), - device: z.boolean().optional(), - target: z.string().optional(), - remoteDebugging: z.boolean().optional(), - logging: z.boolean().describe('Logging all the build proccesses to console').optional(), - packager: z.boolean().optional(), - bundle: z.boolean().optional(), - launch: z.boolean().describe('Launches the application once the build process is finished').optional(), - autolink: z - .boolean() - .describe('Launches the application once the build process is finished') - .optional(), - build: z.boolean().describe('Builds the application before launching it').optional(), - sln: z - .string() - .describe('Location of Visual Studio solution .sln file (wraps multiple projects)') - .optional(), + ), + emulator: z.boolean(), + device: z.boolean(), + target: z.string(), + remoteDebugging: z.boolean(), + logging: z.boolean().describe('Logging all the build proccesses to console'), + packager: z.boolean(), + bundle: z.boolean(), + launch: z.boolean().describe('Launches the application once the build process is finished'), + autolink: z.boolean().describe('Launches the application once the build process is finished'), + build: z.boolean().describe('Builds the application before launching it'), + sln: z.string().describe('Location of Visual Studio solution .sln file (wraps multiple projects)'), proj: z .string() .describe( 'Root project directory for your React Native Windows project (not Visual Studio project)' - ) - .optional(), - appPath: z.string().describe('Full path to windows plaform build directory').optional(), + ), + appPath: z.string().describe('Full path to windows plaform build directory'), msbuildprops: z .string() - .describe('Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2') - .optional(), + .describe('Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2'), buildLogDirectory: z .string() - .describe('Full path to directory where builds logs should be stored, default - project path') - .optional(), - info: z.boolean().describe('Print information about the build machine to console').optional(), - directDebugging: z.boolean().optional(), - telemetry: z - .boolean() - .describe('Send analytics data of @react-native-windows/cli usage to Microsoft') - .optional(), - devPort: z.string().optional(), - additionalMetroOptions: z.record(z.any()).optional(), - packageExtension: z.string().optional(), + .describe('Full path to directory where builds logs should be stored, default - project path'), + info: z.boolean().describe('Print information about the build machine to console'), + directDebugging: z.boolean(), + telemetry: z.boolean().describe('Send analytics data of @react-native-windows/cli usage to Microsoft'), + devPort: z.string(), + additionalMetroOptions: z.record(z.any()), + packageExtension: z.string(), }) - ), + .partial(), }) .partial(); diff --git a/packages/core/src/schema/plugins/fragments/base.ts b/packages/core/src/schema/plugins/fragments/base.ts index a3cbc50334..dd8d677dc6 100644 --- a/packages/core/src/schema/plugins/fragments/base.ts +++ b/packages/core/src/schema/plugins/fragments/base.ts @@ -1,73 +1,55 @@ import { z } from 'zod'; import { zodSupportedPlatforms } from '../../shared'; -const Disabled = z.boolean().default(false).describe('Marks plugin disabled'); - -const Props = z.record(z.string(), z.string()).describe('Custom props passed to plugin'); -const Version = z.string().describe('Version of plugin. Typically package version'); -const Source = z - .string() - .describe( - 'Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}' - ); -const NoNpm = z.boolean().describe('Will skip including plugin in package.json and installing it via npm/yarn etc'); -const SkipMerge = z - .boolean() - .describe( - 'Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully' - ); -const Npm = z - .record(z.string(), z.string()) - .describe('Object of npm dependencies of this plugin. These will be injected into package.json'); -const PluginDependencies = z - .record(z.string(), z.string().nullable()) - .describe('List of other Renative plugins this plugin depends on'); - -const Webpack = z - .object({ - modulePaths: z.union([z.boolean(), z.array(z.string())]).optional(), - moduleAliases: z - .union([ - z.boolean(), - z.record( - z.string(), - z.union([ - z.string(), - z.object({ - projectPath: z.string(), - }), - ]) - ), - ]) - .optional(), - nextTranspileModules: z.optional(z.array(z.string())), - }) - .describe('Allows you to configure webpack bahaviour per each individual plugin'); - -const Deprecated = z - .string() - .describe('Marks your plugin deprecated with warning showing in the console during rnv commands'); - -const DisablePluginTemplateOverrides = z.boolean().describe('Disables plugin overrides for selected plugin'); - export const zodPluginBaseFragment = z .object({ supportedPlatforms: zodSupportedPlatforms.optional(), - disabled: z.optional(Disabled), - props: z.optional(Props), - version: z.optional(Version), - deprecated: z.optional(Deprecated), - source: z.optional(Source), - disableNpm: z.optional(NoNpm), - skipMerge: z.optional(SkipMerge), - npm: z.optional(Npm), //=> npmDependencies - pluginDependencies: z.optional(PluginDependencies), - webpackConfig: z.optional(Webpack), //Should this be at root plugin??? - disablePluginTemplateOverrides: z.optional(DisablePluginTemplateOverrides), + disabled: z.boolean().default(false).describe('Marks plugin disabled'), + props: z.record(z.string(), z.string()).describe('Custom props passed to plugin'), + version: z.string().describe('Version of plugin. Typically package version'), + deprecated: z + .string() + .describe('Marks your plugin deprecated with warning showing in the console during rnv commands'), + source: z + .string() + .describe( + 'Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}' + ), + disableNpm: z + .boolean() + .describe('Will skip including plugin in package.json and installing it via npm/yarn etc'), + skipMerge: z + .boolean() + .describe( + 'Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully' + ), + npm: z + .record(z.string(), z.string()) + .describe('Object of npm dependencies of this plugin. These will be injected into package.json'), //=> npmDependencies + pluginDependencies: z + .record(z.string(), z.string().nullable()) + .describe('List of other Renative plugins this plugin depends on'), + webpackConfig: z + .object({ + modulePaths: z.union([z.boolean(), z.array(z.string())]).optional(), + moduleAliases: z + .union([ + z.boolean(), + z.record( + z.string(), + z.union([ + z.string(), + z.object({ + projectPath: z.string(), + }), + ]) + ), + ]) + .optional(), + nextTranspileModules: z.optional(z.array(z.string())), + }) + .describe('Allows you to configure webpack bahaviour per each individual plugin'), //Should this be at root plugin??? + disablePluginTemplateOverrides: z.boolean().describe('Disables plugin overrides for selected plugin'), fontSources: z.array(z.string()).optional(), - // 'no-npm': z.optional(NoNpm),//DEPRECATED => disableNpm - // plugins: z.optional(PluginDependencies), //DEPRECATED => pluginDependencies - // webpack: z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED - // 'engine-rn-next': z.optional(Webpack), //Should this be at root plugin??? // DEPRECATED }) .partial(); diff --git a/packages/core/src/schema/plugins/fragments/platformBase.ts b/packages/core/src/schema/plugins/fragments/platformBase.ts index 6643a1388f..dd51b316f5 100644 --- a/packages/core/src/schema/plugins/fragments/platformBase.ts +++ b/packages/core/src/schema/plugins/fragments/platformBase.ts @@ -1,21 +1,18 @@ import { z } from 'zod'; -// DEPRECATED? -const Disabled = z.boolean().default(false).describe('Marks plugin platform disabled'); -const ForceLinking = z - .boolean() - .default(false) - .describe( - 'Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true' - ); -const Path = z - .string() - .describe( - 'Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used.' - ); - -export const zodPluginPlatformBaseFragment = z.object({ - disabled: z.optional(Disabled), - forceLinking: z.optional(ForceLinking), - path: z.optional(Path), -}); +export const zodPluginPlatformBaseFragment = z + .object({ + disabled: z.boolean().default(false).describe('Marks plugin platform disabled'), + forceLinking: z + .boolean() + .default(false) + .describe( + 'Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true' + ), + path: z + .string() + .describe( + 'Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used.' + ), + }) + .partial(); diff --git a/packages/core/src/schema/plugins/fragments/platformIos.ts b/packages/core/src/schema/plugins/fragments/platformIos.ts index 569086dd8f..950ce646f1 100644 --- a/packages/core/src/schema/plugins/fragments/platformIos.ts +++ b/packages/core/src/schema/plugins/fragments/platformIos.ts @@ -1,21 +1,13 @@ import { z } from 'zod'; import { zodTemplateXcodeFragment } from '../../platforms/fragments/templateXcode'; -const Git = z.string().describe('Alternative git url for pod instead of version'); - -const Commit = z.string().describe('Alternative git commit reference string'); - -const Version = z.string().describe('Version of pod'); - -const BuildType = z.enum(['dynamic', 'static']).describe('Build type of the pod'); - export const zodPluginPlatformiOSFragment = zodTemplateXcodeFragment.extend({ - git: z.optional(Git), - commit: z.optional(Commit), - version: z.optional(Version), - podNames: z.optional(z.array(z.string())), - podName: z.optional(z.string()), - staticFrameworks: z.optional(z.array(z.string())), - isStatic: z.boolean().optional(), - buildType: z.optional(BuildType), + git: z.string().describe('Alternative git url for pod instead of version'), + commit: z.string().describe('Alternative git commit reference string'), + version: z.string().describe('Version of pod'), + podNames: z.array(z.string()), + podName: z.string(), + staticFrameworks: z.array(z.string()), + isStatic: z.boolean(), + buildType: z.enum(['dynamic', 'static']).describe('Build type of the pod'), }); diff --git a/packages/core/src/schema/plugins/index.ts b/packages/core/src/schema/plugins/index.ts index 0d13cb23cc..6cbc8c302f 100644 --- a/packages/core/src/schema/plugins/index.ts +++ b/packages/core/src/schema/plugins/index.ts @@ -4,32 +4,30 @@ import { zodPluginPlatformiOSFragment } from './fragments/platformIos'; import { zodPluginPlatformBaseFragment } from './fragments/platformBase'; import { zodPluginBaseFragment } from './fragments/base'; -const androidSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformAndroidFragment); +const zodAndroidSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformAndroidFragment); -const iosSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformiOSFragment); - -const genericSchema = zodPluginPlatformBaseFragment; +const zodIOSSchema = zodPluginPlatformBaseFragment.merge(zodPluginPlatformiOSFragment); export const zodPluginSchema: AnyZodObject = zodPluginBaseFragment.merge( z.object({ - android: androidSchema, - androidtv: androidSchema, - androidwear: androidSchema, - firetv: androidSchema, - ios: iosSchema, - tvos: iosSchema, - tizen: genericSchema, - tizenmobile: genericSchema, - tizenwatch: genericSchema, - webos: genericSchema, - web: genericSchema, - webtv: genericSchema, - chromecast: genericSchema, - kaios: genericSchema, - macos: genericSchema, - linux: genericSchema, - windows: genericSchema, - xbox: genericSchema, + android: zodAndroidSchema, + androidtv: zodAndroidSchema, + androidwear: zodAndroidSchema, + firetv: zodAndroidSchema, + ios: zodIOSSchema, + tvos: zodIOSSchema, + tizen: zodPluginPlatformBaseFragment, + tizenmobile: zodPluginPlatformBaseFragment, + tizenwatch: zodPluginPlatformBaseFragment, + webos: zodPluginPlatformBaseFragment, + web: zodPluginPlatformBaseFragment, + webtv: zodPluginPlatformBaseFragment, + chromecast: zodPluginPlatformBaseFragment, + kaios: zodPluginPlatformBaseFragment, + macos: zodPluginPlatformBaseFragment, + linux: zodPluginPlatformBaseFragment, + windows: zodPluginPlatformBaseFragment, + xbox: zodPluginPlatformBaseFragment, }) ); @@ -38,5 +36,3 @@ export const zodPluginsSchema = z .describe( 'Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config' ); - -// export type RenativeWebpackConfig = RnvPluginSchema['webpackConfig']; diff --git a/packages/core/src/schema/shared/index.ts b/packages/core/src/schema/shared/index.ts index af17e383b2..3ff6555ef3 100644 --- a/packages/core/src/schema/shared/index.ts +++ b/packages/core/src/schema/shared/index.ts @@ -13,8 +13,6 @@ export const zodSupportedPlatforms = z .array(zodPlatformsKeys) .describe('Array list of all supported platforms in current project'); -export type _PlatformsKeysType = z.infer; - export const zodExt = z .any() .describe( diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 64ef02def2..7d2815ab48 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -22,22 +22,22 @@ import { zodPlatformWebpackFragment } from './platforms/fragments/webpack'; import { zodPlatformWindowsFragment } from './platforms/fragments/windows'; import { PlatformKey, RnvPlatformNameKey } from '../enums/platformName'; import { zodRootAppBaseFragment } from './configFiles/app'; -import { zodRootEngineSchema } from './configFiles/engine'; -import { zodRootIntegrationSchema } from './configFiles/integration'; -import { zodRootLocalSchema } from './configFiles/local'; -import { zodRootOverridesSchema } from './configFiles/overrides'; +import { zodConfigFileEngine } from './configFiles/engine'; +import { zodConfigFileIntergation } from './configFiles/integration'; +import { zodConfigFileLocal } from './configFiles/local'; +import { zodConfigFileOverrides } from './configFiles/overrides'; import { zodPluginBaseFragment } from './plugins/fragments/base'; import { zodPluginPlatformAndroidFragment } from './plugins/fragments/platformAndroid'; import { zodPluginPlatformBaseFragment } from './plugins/fragments/platformBase'; import { zodPluginPlatformiOSFragment } from './plugins/fragments/platformIos'; import { zodPluginFragment } from './configFiles/plugin'; -import { zodPrivatePlatformAndroid, zodRootPrivateSchema } from './configFiles/private'; -import { zodRootRuntimeSchema } from './configFiles/runtime'; -import { zodBootstrapConfig } from './configFiles/template'; +import { zodPrivatePlatformAndroid, zodConfigFilePrivate } from './configFiles/private'; +import { zodConfigFileRuntime } from './configFiles/runtime'; +import { zodConfigTemplateBootstrapConfig } from './configFiles/template'; import { zodRootProjectBaseFragment } from './configFiles/project'; -import { zodRootTemplatesSchema } from './configFiles/templates'; +import { zodConfigFileTemplates } from './configFiles/templates'; import { zodConfigFileWorkspace } from './configFiles/workspace'; -import { zodFileWorkspaces } from './configFiles/workspaces'; +import { zodConfigFileWorkspaces } from './configFiles/workspaces'; // Shared ----------------------- // @@ -141,22 +141,22 @@ export type ConfigFileBuildConfig = ConfigFileTemplates & // Engine ----------------------- // // renative.engine.json -export type ConfigFileEngine = z.infer; +export type ConfigFileEngine = z.infer; // Integration ----------------------- // // renative.integration.json -export type ConfigFileIntegration = z.infer; +export type ConfigFileIntegration = z.infer; // Local ----------------------- // // renative.local.json -export type ConfigFileLocal = z.infer; +export type ConfigFileLocal = z.infer; // Overrides ----------------------- // //overrides.json -export type ConfigFileOverrides = z.infer; +export type ConfigFileOverrides = z.infer; // Plugin ----------------------- // @@ -177,7 +177,7 @@ export type ConfigFilePlugin = RnvPluginSchema & z.infer; // renative.private.json -export type ConfigFilePrivate = z.infer; +export type ConfigFilePrivate = z.infer; // Project ----------------------- // @@ -195,23 +195,23 @@ export type ConfigFileProject = RnvRootProjectBaseFragment & { // Runtime ----------------------- // // renative.runtime.json -export type ConfigFileRuntime = z.infer; +export type ConfigFileRuntime = z.infer; // Template ----------------------- // -type RnvBootstrapConfig = z.infer; +type ConfigTemplateBootstrapConfig = z.infer; // renative.template.json export type ConfigFileTemplate = { // defaults: RnvDefault, // engines: z.optional(EnginesSchema), templateConfig?: RnvTemplateConfigFragment; - bootstrapConfig?: RnvBootstrapConfig; + bootstrapConfig?: ConfigTemplateBootstrapConfig; }; // Templates ----------------------- // // renative.templates.json -export type ConfigFileTemplates = z.infer; +export type ConfigFileTemplates = z.infer; // Workspace ----------------------- // @@ -221,4 +221,4 @@ export type ConfigFileWorkspace = z.infer; // Workspaces ----------------------- // // renative.workspaces.json -export type ConfigFileWorkspaces = z.infer; +export type ConfigFileWorkspaces = z.infer; diff --git a/packages/core/src/schema/validators.ts b/packages/core/src/schema/validators.ts index d225f82d9e..e406f4d076 100644 --- a/packages/core/src/schema/validators.ts +++ b/packages/core/src/schema/validators.ts @@ -1,5 +1,5 @@ -import { zodRootProjectSchema } from './configFiles/project'; +import { zodConfigFileProject } from './configFiles/project'; export const validateRenativeProjectSchema = (inputJson: unknown) => { - return zodRootProjectSchema.safeParse(inputJson); + return zodConfigFileProject.safeParse(inputJson); }; From e1af1ef4e4ce7af0a23073ed445ff315459d1605 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 22:08:28 +0200 Subject: [PATCH 159/175] update types, cleanup --- packages/core/src/enums/platformName.ts | 3 +- .../platforms/fragments/templateAndroid.ts | 80 ++++++++----------- packages/core/src/types.ts | 2 +- 3 files changed, 37 insertions(+), 48 deletions(-) diff --git a/packages/core/src/enums/platformName.ts b/packages/core/src/enums/platformName.ts index 6f4b7b9b60..ce034acc80 100644 --- a/packages/core/src/enums/platformName.ts +++ b/packages/core/src/enums/platformName.ts @@ -79,6 +79,5 @@ export const RnvPlatforms = [ RnvPlatformName.xbox, ] as const; -type RnvPlatformName = typeof RnvPlatformName; -export type RnvPlatformNameKey = keyof RnvPlatformName; +export type RnvPlatformNameKey = keyof typeof RnvPlatformName; export type PlatformKey = RnvPlatformNameKey; diff --git a/packages/core/src/schema/platforms/fragments/templateAndroid.ts b/packages/core/src/schema/platforms/fragments/templateAndroid.ts index e6d3d4b91c..d588a649f2 100644 --- a/packages/core/src/schema/platforms/fragments/templateAndroid.ts +++ b/packages/core/src/schema/platforms/fragments/templateAndroid.ts @@ -1,42 +1,6 @@ import { z } from 'zod'; import type { ConfigAndroidManifestChildType } from '../../types'; -const GradleProperties = z - .record(z.string(), z.union([z.string(), z.boolean(), z.number()])) - .describe('Overrides values in `gradle.properties` file of generated android based project'); - -const BuildGradle = z - .object({ - allprojects: z.object({ - repositories: z.record(z.string(), z.boolean()).describe('Customize repositories section of build.gradle'), - }), - plugins: z.array(z.string()), - buildscript: z.object({ - repositories: z.record(z.string(), z.boolean()), - dependencies: z.record(z.string(), z.boolean()), - }), - dexOptions: z.record(z.string(), z.boolean()), - injectAfterAll: z.array(z.string()), - }) - .partial() - .describe('Overrides values in `build.gradle` file of generated android based project'); - -const AppBuildGradle = z - .object({ - apply: z.array(z.string()), - defaultConfig: z.array(z.string()), - buildTypes: z.object({ - debug: z.optional(z.array(z.string())), - release: z.optional(z.array(z.string())), - }), - - afterEvaluate: z.array(z.string()), - implementations: z.array(z.string()), - implementation: z.string(), - }) - .partial() - .describe('Overrides values in `app/build.gradle` file of generated android based project'); - export const zodManifestChildBase = z.object({ tag: z.string(), 'android:name': z.string(), @@ -67,17 +31,45 @@ Injects / Overrides values in AndroidManifest.xml file of generated android base > IMPORTANT: always ensure that your object contains \`tag\` and \`android:name\` to target correct tag to merge into `); -// const Gradle = z.object({ - -// }); - export const zodTemplateAndroidFragment = z .object({ templateAndroid: z .object({ - gradle_properties: GradleProperties, - build_gradle: BuildGradle, - app_build_gradle: AppBuildGradle, + gradle_properties: z + .record(z.string(), z.union([z.string(), z.boolean(), z.number()])) + .describe('Overrides values in `gradle.properties` file of generated android based project'), + build_gradle: z + .object({ + allprojects: z.object({ + repositories: z + .record(z.string(), z.boolean()) + .describe('Customize repositories section of build.gradle'), + }), + plugins: z.array(z.string()), + buildscript: z.object({ + repositories: z.record(z.string(), z.boolean()), + dependencies: z.record(z.string(), z.boolean()), + }), + dexOptions: z.record(z.string(), z.boolean()), + injectAfterAll: z.array(z.string()), + }) + .partial() + .describe('Overrides values in `build.gradle` file of generated android based project'), + app_build_gradle: z + .object({ + apply: z.array(z.string()), + defaultConfig: z.array(z.string()), + buildTypes: z.object({ + debug: z.optional(z.array(z.string())), + release: z.optional(z.array(z.string())), + }), + + afterEvaluate: z.array(z.string()), + implementations: z.array(z.string()), + implementation: z.string(), + }) + .partial() + .describe('Overrides values in `app/build.gradle` file of generated android based project'), AndroidManifest_xml: zodAndroidManifest, strings_xml: z.object({ children: z.array( @@ -108,10 +100,8 @@ export const zodTemplateAndroidFragment = z createMethods: z.array(z.string()), packages: z.array(z.string()), packageParams: z.array(z.string()), - // onCreate: z // .string({}) - // // .default('super.onCreate(savedInstanceState)') // .describe('Overrides super.onCreate method handler of MainActivity.java'), }) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index a941427ff0..9ce67e794d 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,4 +1,4 @@ -import { PlatformKey } from './enums/platformName'; +import { type PlatformKey } from './enums/platformName'; export type RnvPlatform = PlatformKey | null; export type RenativeConfigVersion = string | { version: string }; From c036cbd651f2b7bb6569444f20104b96d5891b89 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Mon, 1 Apr 2024 22:25:44 +0200 Subject: [PATCH 160/175] cleanup platform key types --- packages/core/src/configs/buildConfig.ts | 6 +++--- packages/core/src/configs/configProject.ts | 5 ++--- packages/core/src/context/types.ts | 7 +++---- packages/core/src/engines/types.ts | 4 ++-- packages/core/src/enums/platformName.ts | 3 --- packages/core/src/schema/types.ts | 6 +++--- packages/core/src/tasks/constants.ts | 2 +- packages/core/src/tasks/types.ts | 6 +++--- packages/core/src/types.ts | 5 +++-- .../engine-core/src/tasks/bootstrap/questionHelpers.ts | 4 ++-- packages/engine-core/src/tasks/bootstrap/types.ts | 4 ++-- packages/engine-core/src/tasks/global/taskKill.ts | 4 ++-- .../engine-core/src/tasks/platform/taskPlatformConnect.ts | 4 ++-- .../engine-core/src/tasks/platform/taskPlatformEject.ts | 4 ++-- packages/engine-lightning/src/sdk/constants.ts | 4 ++-- packages/engine-rn-electron/src/sdk/constants.ts | 4 ++-- packages/engine-rn-next/src/sdk/constants.ts | 4 ++-- packages/engine-rn-web/src/constants.ts | 4 ++-- packages/engine-rn-windows/src/sdk/constants.ts | 4 ++-- packages/sdk-android/src/constants.ts | 4 ++-- packages/sdk-android/src/deviceManager.ts | 4 ++-- packages/sdk-android/src/kotlinParser.ts | 2 +- packages/sdk-android/src/runner.ts | 4 ++-- packages/sdk-apple/src/common.ts | 4 ++-- packages/sdk-kaios/src/constants.ts | 4 ++-- packages/sdk-react-native/src/constants.ts | 4 ++-- packages/sdk-react-native/src/metroRunner.ts | 4 ++-- packages/sdk-tizen/src/constants.ts | 4 ++-- packages/sdk-utils/src/constants.ts | 4 ++-- packages/sdk-webos/src/constants.ts | 4 ++-- 30 files changed, 61 insertions(+), 65 deletions(-) diff --git a/packages/core/src/configs/buildConfig.ts b/packages/core/src/configs/buildConfig.ts index 322c7ccd93..6c70f3fbce 100644 --- a/packages/core/src/configs/buildConfig.ts +++ b/packages/core/src/configs/buildConfig.ts @@ -12,8 +12,8 @@ import { import { chalk, logDefault, logWarning, logDebug } from '../logger'; import { getContext } from '../context/provider'; import type { RnvContext, RnvContextBuildConfig } from '../context/types'; -import { FileUtilsPropConfig } from '../system/types'; -import { PlatformKey } from '../enums/platformName'; +import type { FileUtilsPropConfig } from '../system/types'; +import type { RnvPlatformKey } from '../types'; const _arrayMergeOverride = (_destinationArray: Array, sourceArray: Array) => sourceArray; @@ -156,7 +156,7 @@ export const generateBuildConfig = () => { //Merge extendPlatform if (c.buildConfig.platforms) { const platforms = c.buildConfig.platforms || {}; - (Object.keys(platforms) as PlatformKey[]).forEach((k) => { + (Object.keys(platforms) as RnvPlatformKey[]).forEach((k) => { const plat = platforms[k]; if (plat?.extendPlatform) { const extPlat = platforms[plat?.extendPlatform]; diff --git a/packages/core/src/configs/configProject.ts b/packages/core/src/configs/configProject.ts index 41eab465ac..1b6aef78f4 100644 --- a/packages/core/src/configs/configProject.ts +++ b/packages/core/src/configs/configProject.ts @@ -1,9 +1,8 @@ import { getRealPath, writeFileSync } from '../system/fs'; import { chalk, logDefault, logWarning } from '../logger'; -import type { RnvPlatform } from '../types'; +import type { RnvPlatform, RnvPlatformKey } from '../types'; import type { NpmPackageFile } from './types'; import { getContext } from '../context/provider'; -import { PlatformKey } from '../enums/platformName'; import type { ConfigFileProject } from '../schema/types'; const SYNCED_DEPS = [ @@ -79,7 +78,7 @@ const _fixDeps = (deps: Record | undefined, version: string) => }); }; -export const updateProjectPlatforms = (platforms: Array) => { +export const updateProjectPlatforms = (platforms: Array) => { const c = getContext(); const { diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 31a2ddcb82..74e64da7cb 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -15,14 +15,13 @@ import type { } from '../schema/types'; import type { RnvEngine, RnvEnginePlatform } from '../engines/types'; import type { OverridesOptions } from '../system/types'; -import type { RnvPlatform } from '../types'; +import type { RnvPlatform, RnvPlatformKey } from '../types'; import type { NpmPackageFile } from '../configs/types'; import { type ParamKeys, type ProgramOptionsKey } from '../tasks/constants'; import { type ExecaChildProcess } from 'execa'; import { type RnvPlugin } from '../plugins/types'; import type { RnvIntegration } from '../integrations/types'; import type { DependencyMutation } from '../projects/types'; -import { PlatformKey } from '../enums/platformName'; export type CreateContextOptions = { program: RnvContextProgram; @@ -113,7 +112,7 @@ export type RnvContextRuntime = { missingEnginePlugins: Record; supportedPlatforms: Array; runtimeExtraProps: Record; - availablePlatforms: Array; + availablePlatforms: Array; platform: RnvPlatform; isTargetTrue: boolean; bundleAssets: boolean; @@ -339,7 +338,7 @@ export type RnvContextPathObj = { }; export type RnvContextPlatform = { - platform: PlatformKey; + platform: RnvPlatformKey; isConnected: boolean; engine?: RnvEngine; port?: number; diff --git a/packages/core/src/engines/types.ts b/packages/core/src/engines/types.ts index 11207667bc..1fcec7dcb2 100644 --- a/packages/core/src/engines/types.ts +++ b/packages/core/src/engines/types.ts @@ -1,10 +1,10 @@ -import { PlatformKey } from '../enums/platformName'; import type { ConfigFileEngine } from '../schema/types'; import type { RnvTaskMap } from '../tasks/types'; +import type { RnvPlatformKey } from '../types'; export type RnvEngine = { originalTemplatePlatformsDir?: string; - platforms: Partial>; + platforms: Partial>; config: ConfigFileEngine; tasks: RnvTaskMap; rootPath?: string; diff --git a/packages/core/src/enums/platformName.ts b/packages/core/src/enums/platformName.ts index ce034acc80..97f6f5ffb3 100644 --- a/packages/core/src/enums/platformName.ts +++ b/packages/core/src/enums/platformName.ts @@ -78,6 +78,3 @@ export const RnvPlatforms = [ RnvPlatformName.tizenmobile, RnvPlatformName.xbox, ] as const; - -export type RnvPlatformNameKey = keyof typeof RnvPlatformName; -export type PlatformKey = RnvPlatformNameKey; diff --git a/packages/core/src/schema/types.ts b/packages/core/src/schema/types.ts index 7d2815ab48..427fc56fbd 100644 --- a/packages/core/src/schema/types.ts +++ b/packages/core/src/schema/types.ts @@ -20,7 +20,6 @@ import { zodPlatformWebFragment } from './platforms/fragments/web'; import { zodPlatformWebOSFragment } from './platforms/fragments/webos'; import { zodPlatformWebpackFragment } from './platforms/fragments/webpack'; import { zodPlatformWindowsFragment } from './platforms/fragments/windows'; -import { PlatformKey, RnvPlatformNameKey } from '../enums/platformName'; import { zodRootAppBaseFragment } from './configFiles/app'; import { zodConfigFileEngine } from './configFiles/engine'; import { zodConfigFileIntergation } from './configFiles/integration'; @@ -38,6 +37,7 @@ import { zodRootProjectBaseFragment } from './configFiles/project'; import { zodConfigFileTemplates } from './configFiles/templates'; import { zodConfigFileWorkspace } from './configFiles/workspace'; import { zodConfigFileWorkspaces } from './configFiles/workspaces'; +import type { RnvPlatformKey } from '../types'; // Shared ----------------------- // @@ -105,7 +105,7 @@ export type PlatformBuildSchemeKey = keyof RnvPlatformBuildSchemeSchema; export type RnvPlatformSchema = RnvPlatformSchemaFragment & { buildSchemes?: Record; }; -export type RnvPlatformsSchema = Partial>; +export type RnvPlatformsSchema = Partial>; // App ----------------------- // @@ -167,7 +167,7 @@ export type RnvPluginPlatformiOSFragment = Partial; +export type RnvPluginPlatformsSchema = Record; export type RnvPluginSchema = RnvPluginBaseFragment & Partial; export type RnvPluginsSchema = Record; // renative.plugin.json diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 55f717e690..bf386437ba 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -282,7 +282,7 @@ const _RnvTaskOptions = { description: 'Forces to reset android adb', }, - // DEPRECATED -------------------------------- + // DEPRECATED & REMOVED -------------------------------- // global: { // shortcut: 'G', diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index 60f42122a3..3df0343c05 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -1,12 +1,12 @@ -import { RnvContext } from '../context/types'; -import { PlatformKey } from '../enums/platformName'; +import type { RnvContext } from '../context/types'; +import type { RnvPlatformKey } from '../types'; export type RnvTask = { task: string; dependsOn?: string[]; options?: Array; isGlobalScope?: boolean; - platforms?: Array; + platforms?: Array; description: string; forceBuildHookRebuild?: boolean; beforeDependsOn?: RnvTaskFn; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 9ce67e794d..220a48c40b 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,6 +1,7 @@ -import { type PlatformKey } from './enums/platformName'; +import { RnvPlatformName } from './enums/platformName'; -export type RnvPlatform = PlatformKey | null; +export type RnvPlatformKey = keyof typeof RnvPlatformName; +export type RnvPlatform = RnvPlatformKey | null; export type RenativeConfigVersion = string | { version: string }; export type RnvError = any; export type Env = Record; diff --git a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts index a3abc8c216..3ec24482f3 100644 --- a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts +++ b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts @@ -1,5 +1,5 @@ import { - PlatformKey, + RnvPlatformKey, RnvFileName, chalk, getApi, @@ -110,7 +110,7 @@ export const configureConfigOverrides = async (data: NewProjectData) => { // In case of copied config instead of extended we want to cleanup unused platforms if (renativeConfig.platforms) { Object.keys(renativeConfig.platforms).forEach((k) => { - const key = k as PlatformKey; + const key = k as RnvPlatformKey; if (!supPlats.includes(key) && renativeConfig.platforms) { delete renativeConfig.platforms[key]; } diff --git a/packages/engine-core/src/tasks/bootstrap/types.ts b/packages/engine-core/src/tasks/bootstrap/types.ts index 86cf739526..0a90671899 100644 --- a/packages/engine-core/src/tasks/bootstrap/types.ts +++ b/packages/engine-core/src/tasks/bootstrap/types.ts @@ -4,7 +4,7 @@ import type { ConfigFileTemplate, ConfigFileTemplates, NpmPackageFile, - PlatformKey, + RnvPlatformKey, } from '@rnv/core'; export type NewProjectData = { @@ -29,7 +29,7 @@ export type NewProjectData = { workspaceID?: string; packageName?: string; tepmplate?: TemplateOptionValue; - supportedPlatforms?: Array; + supportedPlatforms?: Array; }; files: { template: { diff --git a/packages/engine-core/src/tasks/global/taskKill.ts b/packages/engine-core/src/tasks/global/taskKill.ts index f77087c0dd..a40544fda0 100644 --- a/packages/engine-core/src/tasks/global/taskKill.ts +++ b/packages/engine-core/src/tasks/global/taskKill.ts @@ -1,5 +1,5 @@ import { - PlatformKey, + RnvPlatformKey, RnvContext, createTask, RnvTaskName, @@ -18,7 +18,7 @@ export default createTask({ const usedPorts: RnvContext['runtime']['supportedPlatforms'] = []; let platArray: RnvContext['runtime']['supportedPlatforms'] = []; const results = []; - let ports: Partial> = {}; + let ports: Partial> = {}; await configureRuntimeDefaults(); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts index 687f14283f..cd1f51b01f 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConnect.ts @@ -7,7 +7,7 @@ import { removeDirs, generatePlatformChoices, inquirerPrompt, - PlatformKey, + RnvPlatformKey, createTask, RnvTaskName, } from '@rnv/core'; @@ -26,7 +26,7 @@ export default createTask({ return; } - let selectedPlatforms: Array; + let selectedPlatforms: Array; if (ctx.platform) { selectedPlatforms = [ctx.platform]; } else { diff --git a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts index f476635897..92354289c1 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformEject.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformEject.ts @@ -7,7 +7,7 @@ import { generatePlatformChoices, ejectPlatform, inquirerPrompt, - PlatformKey, + RnvPlatformKey, createTask, RnvTaskName, } from '@rnv/core'; @@ -21,7 +21,7 @@ export default createTask({ return; } - let selectedPlatforms: Array; + let selectedPlatforms: Array; if (ctx.platform) { selectedPlatforms = [ctx.platform]; } else { diff --git a/packages/engine-lightning/src/sdk/constants.ts b/packages/engine-lightning/src/sdk/constants.ts index ea9fcbf5ee..ecc74d68cb 100644 --- a/packages/engine-lightning/src/sdk/constants.ts +++ b/packages/engine-lightning/src/sdk/constants.ts @@ -1,3 +1,3 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; -export const SdkPlatforms: Array = ['tizen', 'webos']; +export const SdkPlatforms: Array = ['tizen', 'webos']; diff --git a/packages/engine-rn-electron/src/sdk/constants.ts b/packages/engine-rn-electron/src/sdk/constants.ts index ec22676190..8d8c8cd58f 100644 --- a/packages/engine-rn-electron/src/sdk/constants.ts +++ b/packages/engine-rn-electron/src/sdk/constants.ts @@ -1,3 +1,3 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; -export const SdkPlatforms: Array = ['macos', 'windows', 'linux']; +export const SdkPlatforms: Array = ['macos', 'windows', 'linux']; diff --git a/packages/engine-rn-next/src/sdk/constants.ts b/packages/engine-rn-next/src/sdk/constants.ts index 32d22a7027..26478ffb70 100644 --- a/packages/engine-rn-next/src/sdk/constants.ts +++ b/packages/engine-rn-next/src/sdk/constants.ts @@ -1,3 +1,3 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; -export const SdkPlatforms: Array = ['web', 'chromecast']; +export const SdkPlatforms: Array = ['web', 'chromecast']; diff --git a/packages/engine-rn-web/src/constants.ts b/packages/engine-rn-web/src/constants.ts index 5b946ba80f..344ae343f1 100644 --- a/packages/engine-rn-web/src/constants.ts +++ b/packages/engine-rn-web/src/constants.ts @@ -1,6 +1,6 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; -export const EnginePlatforms: Array = [ +export const EnginePlatforms: Array = [ 'web', 'webtv', 'tizen', diff --git a/packages/engine-rn-windows/src/sdk/constants.ts b/packages/engine-rn-windows/src/sdk/constants.ts index d2e8790724..7075f1f5c9 100644 --- a/packages/engine-rn-windows/src/sdk/constants.ts +++ b/packages/engine-rn-windows/src/sdk/constants.ts @@ -1,3 +1,3 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; -export const SdkPlatforms: Array = ['windows', 'xbox']; +export const SdkPlatforms: Array = ['windows', 'xbox']; diff --git a/packages/sdk-android/src/constants.ts b/packages/sdk-android/src/constants.ts index 5d2cd64e14..0fb60d8aa0 100644 --- a/packages/sdk-android/src/constants.ts +++ b/packages/sdk-android/src/constants.ts @@ -1,8 +1,8 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; export const CLI_ANDROID_EMULATOR = 'androidEmulator'; export const CLI_ANDROID_ADB = 'androidAdb'; export const CLI_ANDROID_AVDMANAGER = 'androidAvdManager'; export const CLI_ANDROID_SDKMANAGER = 'androidSdkManager'; -export const SdkPlatforms: Array = ['android', 'androidtv', 'androidwear', 'firetv']; +export const SdkPlatforms: Array = ['android', 'androidtv', 'androidwear', 'firetv']; diff --git a/packages/sdk-android/src/deviceManager.ts b/packages/sdk-android/src/deviceManager.ts index 50ffd2fe8c..83c1b4b864 100644 --- a/packages/sdk-android/src/deviceManager.ts +++ b/packages/sdk-android/src/deviceManager.ts @@ -22,7 +22,7 @@ import { inquirerPrompt, executeAsync, ExecOptionsPresets, - PlatformKey, + RnvPlatformKey, getContext, } from '@rnv/core'; import { CLI_ANDROID_EMULATOR, CLI_ANDROID_ADB, CLI_ANDROID_AVDMANAGER, CLI_ANDROID_SDKMANAGER } from './constants'; @@ -688,7 +688,7 @@ export const checkForActiveEmulator = (emulatorName?: string) => } else { logRaw(`looking for active emulators: attempt ${attempts}/${maxAttempts}`); attempts++; - const check: PlatformKey[] = ['androidtv', 'firetv', 'androidwear']; + const check: RnvPlatformKey[] = ['androidtv', 'firetv', 'androidwear']; if (check.includes(platform) && attempts === 2) { await resetAdb(true); // from time to time adb reports a recently started atv emu as being offline. Restarting adb fixes it } diff --git a/packages/sdk-android/src/kotlinParser.ts b/packages/sdk-android/src/kotlinParser.ts index c2858ca3e9..106f66352f 100644 --- a/packages/sdk-android/src/kotlinParser.ts +++ b/packages/sdk-android/src/kotlinParser.ts @@ -10,7 +10,7 @@ import { import path from 'path'; import { getBuildFilePath, getEntryFile, getAppId, addSystemInjects } from '@rnv/sdk-utils'; -// const JS_BUNDLE_DEFAULTS: Partial> = { +// const JS_BUNDLE_DEFAULTS: Partial> = { // // Android Wear does not support webview required for connecting to packager. this is hack to prevent RN connectiing to running bundler // androidwear: '"assets://index.androidwear.bundle"', // }; diff --git a/packages/sdk-android/src/runner.ts b/packages/sdk-android/src/runner.ts index 03fe99f7c1..483ac18faf 100644 --- a/packages/sdk-android/src/runner.ts +++ b/packages/sdk-android/src/runner.ts @@ -29,7 +29,7 @@ import { DEFAULTS, RnvPlatform, logInfo, - PlatformKey, + RnvPlatformKey, getContext, } from '@rnv/core'; import { parseAndroidManifestSync, injectPluginManifestSync } from './manifestParser'; @@ -228,7 +228,7 @@ const _checkSigningCerts = async (c: Context) => { const platforms = c.files.workspace.appConfig.configPrivate?.platforms || {}; if (c.files.workspace.appConfig.configPrivate) { - const platCandidates: PlatformKey[] = ['androidwear', 'androidtv', 'android', 'firetv']; + const platCandidates: RnvPlatformKey[] = ['androidwear', 'androidtv', 'android', 'firetv']; platCandidates.forEach((v) => { if (c.files.workspace.appConfig.configPrivate?.platforms?.[v]) { diff --git a/packages/sdk-apple/src/common.ts b/packages/sdk-apple/src/common.ts index e391af0f21..6146dc29a1 100644 --- a/packages/sdk-apple/src/common.ts +++ b/packages/sdk-apple/src/common.ts @@ -1,4 +1,4 @@ -import { PlatformKey, getConfigProp, getContext } from '@rnv/core'; +import { RnvPlatformKey, getConfigProp, getContext } from '@rnv/core'; export const getAppFolderName = () => { const c = getContext(); @@ -16,4 +16,4 @@ export const getAppFolderName = () => { return 'RNVApp'; }; -export const SdkPlatforms: Array = ['ios', 'tvos', 'macos']; +export const SdkPlatforms: Array = ['ios', 'tvos', 'macos']; diff --git a/packages/sdk-kaios/src/constants.ts b/packages/sdk-kaios/src/constants.ts index 82cefb807f..b424266be4 100644 --- a/packages/sdk-kaios/src/constants.ts +++ b/packages/sdk-kaios/src/constants.ts @@ -1,5 +1,5 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; export const CLI_KAIOS_EMULATOR = 'kaiosEmulator'; -export const SdkPlatforms: Array = ['kaios']; +export const SdkPlatforms: Array = ['kaios']; diff --git a/packages/sdk-react-native/src/constants.ts b/packages/sdk-react-native/src/constants.ts index 0872df9415..3f49080228 100644 --- a/packages/sdk-react-native/src/constants.ts +++ b/packages/sdk-react-native/src/constants.ts @@ -1,6 +1,6 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; -export const SdkPlatforms: Array = [ +export const SdkPlatforms: Array = [ 'ios', 'android', 'androidtv', diff --git a/packages/sdk-react-native/src/metroRunner.ts b/packages/sdk-react-native/src/metroRunner.ts index a9941fe5a5..f7b76a6072 100644 --- a/packages/sdk-react-native/src/metroRunner.ts +++ b/packages/sdk-react-native/src/metroRunner.ts @@ -1,6 +1,6 @@ import { CoreEnvVars, - PlatformKey, + RnvPlatformKey, chalk, executeAsync, logError, @@ -14,7 +14,7 @@ import { isBundlerActive } from './common'; import { EnvVars } from './env'; import { confirmActiveBundler, getEntryFile } from '@rnv/sdk-utils'; -const BUNDLER_PLATFORMS: Partial> = {}; +const BUNDLER_PLATFORMS: Partial> = {}; BUNDLER_PLATFORMS['ios'] = 'ios'; BUNDLER_PLATFORMS['tvos'] = 'ios'; diff --git a/packages/sdk-tizen/src/constants.ts b/packages/sdk-tizen/src/constants.ts index 02235a76e8..b23d504690 100644 --- a/packages/sdk-tizen/src/constants.ts +++ b/packages/sdk-tizen/src/constants.ts @@ -1,7 +1,7 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; export const CLI_TIZEN_EMULATOR = 'tizenEmulator'; export const CLI_TIZEN = 'tizen'; export const CLI_SDB_TIZEN = 'tizenSdb'; -export const SdkPlatforms: Array = ['tizen', 'tizenwatch', 'tizenmobile']; +export const SdkPlatforms: Array = ['tizen', 'tizenwatch', 'tizenmobile']; diff --git a/packages/sdk-utils/src/constants.ts b/packages/sdk-utils/src/constants.ts index 4bc4e05454..dcfe070635 100644 --- a/packages/sdk-utils/src/constants.ts +++ b/packages/sdk-utils/src/constants.ts @@ -1,3 +1,3 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; -export const REMOTE_DEBUGGER_ENABLED_PLATFORMS: PlatformKey[] = ['tizen', 'tizenmobile', 'tizenwatch']; +export const REMOTE_DEBUGGER_ENABLED_PLATFORMS: RnvPlatformKey[] = ['tizen', 'tizenmobile', 'tizenwatch']; diff --git a/packages/sdk-webos/src/constants.ts b/packages/sdk-webos/src/constants.ts index 6acccc8474..7d91d28f37 100644 --- a/packages/sdk-webos/src/constants.ts +++ b/packages/sdk-webos/src/constants.ts @@ -1,4 +1,4 @@ -import { PlatformKey } from '@rnv/core'; +import { RnvPlatformKey } from '@rnv/core'; export const CLI_WEBOS_ARES = 'webosAres'; export const CLI_WEBOS_ARES_PACKAGE = 'webosAresPackage'; @@ -8,4 +8,4 @@ export const CLI_WEBOS_ARES_SETUP_DEVICE = 'webosAresSetup'; export const CLI_WEBOS_ARES_DEVICE_INFO = 'webosAresDeviceInfo'; export const CLI_WEBOS_ARES_NOVACOM = 'webosAresNovacom'; -export const SdkPlatforms: Array = ['webos']; +export const SdkPlatforms: Array = ['webos']; From 0b9b08afec9b4363f97aab8fe0cf3229709dda2f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 2 Apr 2024 08:29:01 +0200 Subject: [PATCH 161/175] engine creator with task options infering --- packages/core/src/engines/engineCreator.ts | 8 ++ packages/core/src/engines/types.ts | 30 ++++- packages/core/src/index.ts | 6 +- packages/core/src/tasks/constants.ts | 44 ------- packages/core/src/tasks/taskCreator.ts | 9 +- packages/core/src/tasks/taskHelpers.ts | 2 +- packages/core/src/tasks/types.ts | 21 +++- packages/engine-core/src/getContext.ts | 4 + packages/engine-core/src/index.ts | 113 ++++++++++-------- packages/engine-core/src/playground.ts | 60 ++++++++++ .../tasks/bootstrap/questions/workspace.ts | 3 +- .../src/tasks/bootstrap/taskNew.ts | 75 ++++++++++-- 12 files changed, 263 insertions(+), 112 deletions(-) create mode 100644 packages/core/src/engines/engineCreator.ts create mode 100644 packages/engine-core/src/getContext.ts create mode 100644 packages/engine-core/src/playground.ts diff --git a/packages/core/src/engines/engineCreator.ts b/packages/core/src/engines/engineCreator.ts new file mode 100644 index 0000000000..c6261727de --- /dev/null +++ b/packages/core/src/engines/engineCreator.ts @@ -0,0 +1,8 @@ +import { generateRnvTaskMap } from '../tasks/taskHelpers'; +import { RnvTask } from '../tasks/types'; +import type { CreateRnvEngineOpts, RnvEngine } from './types'; + +export const createRnvEngine = (opts: CreateRnvEngineOpts) => { + const engine: T = { ...opts, tasks: generateRnvTaskMap(opts.tasks, opts.config) }; + return engine; +}; diff --git a/packages/core/src/engines/types.ts b/packages/core/src/engines/types.ts index 1fcec7dcb2..35a1446c3e 100644 --- a/packages/core/src/engines/types.ts +++ b/packages/core/src/engines/types.ts @@ -1,7 +1,21 @@ +// import type { RnvContext } from '../context/types'; import type { ConfigFileEngine } from '../schema/types'; -import type { RnvTaskMap } from '../tasks/types'; +import type { RnvTask, RnvTaskMap } from '../tasks/types'; import type { RnvPlatformKey } from '../types'; +export type CreateRnvEngineOpts> = { + originalTemplatePlatformsDir?: string; + platforms: Partial>; + config: ConfigFileEngine; + tasks: T; + rootPath?: string; + originalTemplatePlatformProjectDir?: string; + projectDirName: string; + runtimeExtraProps: Record; + outputDirName?: string; + serverDirName: string; +}; + export type RnvEngine = { originalTemplatePlatformsDir?: string; platforms: Partial>; @@ -34,3 +48,17 @@ export type RnvEngineInstallConfig = { engineRootPath?: string; configPath?: string; }; + +// export type GetContextType = () => RnvContext< +// any, +// Extract['options'], string> +// >; + +// export type GetContextType = () => RnvContext< +// any, +// Extract['options']>[number]['key'], string> +// >; + +// Readonly < Required < Eng['tasks'][string] > ['options'] > [number]['key']; + +// type Booo = Readonly['options']>[number]['key']; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 07fc2089e6..cc5e636442 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -51,6 +51,10 @@ export * from './schema/configFiles/templates'; export * from './schema/configFiles/workspace'; export * from './schema/configFiles/workspaces'; +export * from './engines'; +export * from './engines/engineCreator'; +export * from './engines/dependencyResolver'; + export * from './system/exec'; export * from './system/fs'; export * from './system/is'; @@ -67,8 +71,6 @@ export * from './formatter'; export * from './templates'; export * from './integrations'; export * from './runner'; -export * from './engines'; -export * from './engines/dependencyResolver'; export * from './platforms'; export * from './plugins'; export * from './buildHooks'; diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index bf386437ba..3abb401d99 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -154,50 +154,6 @@ const _RnvTaskOptions = { }, // ENGINE-CORE -------------------------------- - gitEnabled: { - description: 'Enable git in your newly created project', - isValueType: true, - }, - answer: { - isValueType: true, - isVariadic: true, - description: 'Pass in answers to prompts', - examples: ['--answer question=response question2=response2', '--answer question=\'{"some": "json"}\''], - }, - workspace: { - isValueType: true, - description: 'select the workspace for the new project', - }, - template: { - shortcut: 'T', - isValueType: true, - isRequired: true, - description: 'select specific template', - }, - projectName: { - isValueType: true, - description: 'select the name of the new project', - }, - projectTemplate: { - isValueType: true, - description: 'select the template of new project', - }, - templateVersion: { - isValueType: true, - description: 'select the template version', - }, - title: { - isValueType: true, - description: 'select the title of the app', - }, - appVersion: { - isValueType: true, - description: 'select the version of the app', - }, - id: { - isValueType: true, - description: 'select the id of the app', - }, // ENGINE-CORE + SDK-APPLE -------------------------------- key: { shortcut: 'k', diff --git a/packages/core/src/tasks/taskCreator.ts b/packages/core/src/tasks/taskCreator.ts index 46da120b6a..0c9a6cc271 100644 --- a/packages/core/src/tasks/taskCreator.ts +++ b/packages/core/src/tasks/taskCreator.ts @@ -2,5 +2,12 @@ import { RnvTask } from './types'; export const createTask = (task: RnvTask) => { // TODO: Implement generics later on - return task; + // const opts = {}; + // if(task.options) { + // task.options.forEach(v => { + // opts[] + // }) + // } + + return { ...task }; }; diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index a66386b534..43f299a580 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -47,7 +47,7 @@ export const getTaskNameFromCommand = (): string | undefined => { return taskName; }; -export const generateRnvTaskMap = (taskArr: Array, config: { name?: string; packageName?: string }) => { +export const generateRnvTaskMap = (taskArr: RnvTask[], config: { name?: string; packageName?: string }) => { const tasks: RnvTaskMap = {}; const ownerID = config.packageName || config.name; diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index 3df0343c05..df436cf12c 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -1,7 +1,7 @@ import type { RnvContext } from '../context/types'; import type { RnvPlatformKey } from '../types'; -export type RnvTask = { +export type CreateRnvTaskOpt = { task: string; dependsOn?: string[]; options?: Array; @@ -15,8 +15,25 @@ export type RnvTask = { isPrivate?: boolean; isPriorityOrder?: boolean; ignoreEngines?: boolean; +}; + +export type RnvTask = { + task: string; + dependsOn?: string[]; + options?: ReadonlyArray; + // options?: Record; + isGlobalScope?: boolean; + platforms?: Array; + description: string; + forceBuildHookRebuild?: boolean; + beforeDependsOn?: RnvTaskFn; + fn?: RnvTaskFn; + fnHelp?: RnvTaskHelpFn; + isPrivate?: boolean; + isPriorityOrder?: boolean; + ignoreEngines?: boolean; ownerID?: string; - key?: string; + key: string; }; export type TaskPromptOption = { diff --git a/packages/engine-core/src/getContext.ts b/packages/engine-core/src/getContext.ts new file mode 100644 index 0000000000..1452348a6a --- /dev/null +++ b/packages/engine-core/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; + +export const getContext = _getContext as GetContext; diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index 443fec700a..a250f70842 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -1,4 +1,4 @@ -import { RnvEngine, generateRnvTaskMap } from '@rnv/core'; +import { createRnvEngine, ConfigFileEngine } from '@rnv/core'; import taskCryptoDecrypt from './tasks/crypto/taskCryptoDecrypt'; import taskCryptoEncrypt from './tasks/crypto/taskCryptoEncrypt'; @@ -37,10 +37,8 @@ import taskTelemetryStatus from './tasks/telemetry/taskTelemetryStatus'; import taskTelemetryEnable from './tasks/telemetry/taskTelemetryEnable'; import taskTelemetryDisable from './tasks/telemetry/taskTelemetryDisable'; import taskSwitch from './tasks/app/taskAppSwitch'; -//@ts-ignore -import PKG from '../package.json'; -const CNF = { - // title: 'Engine Core', + +const CNF: ConfigFileEngine = { id: 'engine-core', platforms: {}, npm: {}, @@ -49,57 +47,74 @@ const CNF = { packageName: '@rnv/engine-core', }; -const Engine: RnvEngine = { +const Engine = createRnvEngine({ runtimeExtraProps: {}, serverDirName: '', - tasks: generateRnvTaskMap( - [ - taskCryptoDecrypt, - taskCryptoEncrypt, - taskPlatformEject, - taskPlatformConnect, - taskPlatformList, - taskPlatformConfigure, - taskPlatformSetup, - taskTemplateApply, - taskPluginAdd, - taskPluginList, - taskPluginUpdate, - taskWorkspaceList, - taskWorkspaceAdd, - taskWorkspaceConnect, - taskHooksList, - taskHooksRun, - taskHooksPipes, - taskClean, - taskStatus, - taskConfig, - taskHelp, - taskNew, - taskInstall, - taskProjectConfigure, - taskProjectUpgrade, - taskAppConfigure, - taskAppCreate, - taskWorkspaceConfigure, - taskConfigureSoft, - taskRvnKill, - taskRvnDoctor, - taskLink, - taskUnlink, - taskTelemetryStatus, - taskTelemetryEnable, - taskTelemetryDisable, - taskSwitch, - ], - PKG - ), + tasks: [ + taskCryptoDecrypt, + taskCryptoEncrypt, + taskPlatformEject, + taskPlatformConnect, + taskPlatformList, + taskPlatformConfigure, + taskPlatformSetup, + taskTemplateApply, + taskPluginAdd, + taskPluginList, + taskPluginUpdate, + taskWorkspaceList, + taskWorkspaceAdd, + taskWorkspaceConnect, + taskHooksList, + taskHooksRun, + taskHooksPipes, + taskClean, + taskStatus, + taskConfig, + taskHelp, + taskNew, + taskInstall, + taskProjectConfigure, + taskProjectUpgrade, + taskAppConfigure, + taskAppCreate, + taskWorkspaceConfigure, + taskConfigureSoft, + taskRvnKill, + taskRvnDoctor, + taskLink, + taskUnlink, + taskTelemetryStatus, + taskTelemetryEnable, + taskTelemetryDisable, + taskSwitch, + ], config: CNF, // package: '', projectDirName: '', // ejectPlatform: null, platforms: {}, rootPath: __dirname, -}; +}); + +export type GetContext = GetContextType; + +type Eng = typeof Engine; +type EngTasks = Eng['tasks']; +type EngOpts = Required['options'][number]>['key']; + +// type Booo = T['tasks'][string]; + +// type Booo2 = Readonly['options']>; + +// type Booo2 = Readonly['options']> +// type Booo2 = Readonly['options']> +// type Booo2 = Readonly['options']> + +// type Booo3 = Readonly>[number] + +const xxx: EngOpts = 'dsdfsdfsdfsd'; +const xxx2: EngTasks; +console.log('DDJDJD', xxx, xxx2['ddd'].beforeDependsOn); export default Engine; diff --git a/packages/engine-core/src/playground.ts b/packages/engine-core/src/playground.ts new file mode 100644 index 0000000000..664fc9dd7b --- /dev/null +++ b/packages/engine-core/src/playground.ts @@ -0,0 +1,60 @@ +// type Obj = { +// key: T; +// }; + +type Obj2 = { + key2: T; +}; + +type Obj = { + key: T; + opts: ReadonlyArray>; +}; + +const getMagicKeys = (): K => { + const koko: K = 'ddd' as K; + return koko; +}; + +const createObjFromArr = (arr: ReadonlyArray>) => { + const response: Partial>> = {}; + arr.forEach((v) => { + response[v.key] = v; + }); + return { + response, + getMagic: () => getMagicKeys(), + }; +}; + +// const createObjFromArr = >>(arr: ReadonlyArray>) => { +// const response: Record> = { +// fff: { key: '' }, +// }; +// arr.forEach((v) => { +// response[v.key as K] = v; +// }); +// return response; +// }; + +const payloadArr = [ + { key: 'key1', opts: [{ key2: 'hoooo' }] }, + { key: 'key2', opts: [{ key2: 'hoooo2' }, { key2: 'hoooo3' }] }, +] as const; + +const koko = createObjFromArr(payloadArr); + +type GetReturnType = Type extends (...args: never[]) => infer Return ? Return : never; + +type Type1 = GetReturnType; + +type Flatten = Type extends Array ? Item : Type; + +type MyTyp = Flatten; + +type Shite = typeof koko; +// type Bookla = +// type Bookla>> = T +// const loko: Shite; +// const koo: MyTyp +console.log('JFJFJFJ', koko.getMagic()); diff --git a/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts b/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts index f06f51d9ae..49c790eda2 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/workspace.ts @@ -1,6 +1,7 @@ -import { getContext, getWorkspaceOptions, inquirerPrompt } from '@rnv/core'; +import { getWorkspaceOptions, inquirerPrompt } from '@rnv/core'; import type { NewProjectData } from '../types'; import { checkInputValue } from '../questionHelpers'; +import { getContext } from '../../../getContext'; const Question = async (data: NewProjectData) => { const c = getContext(); diff --git a/packages/engine-core/src/tasks/bootstrap/taskNew.ts b/packages/engine-core/src/tasks/bootstrap/taskNew.ts index 4b59a88e6a..7324825009 100644 --- a/packages/engine-core/src/tasks/bootstrap/taskNew.ts +++ b/packages/engine-core/src/tasks/bootstrap/taskNew.ts @@ -5,7 +5,6 @@ import { applyTemplate, configureTemplateFiles, generateLocalJsonSchemas, - RnvTaskOptions, createTask, } from '@rnv/core'; import inquiryProjectFolder from './questions/projectFolder'; @@ -83,16 +82,70 @@ export default createTask({ }, task: RnvTaskName.new, options: [ - RnvTaskOptions.gitEnabled, - RnvTaskOptions.answer, - RnvTaskOptions.workspace, - RnvTaskOptions.template, - RnvTaskOptions.projectName, - RnvTaskOptions.projectTemplate, - RnvTaskOptions.templateVersion, - RnvTaskOptions.title, - RnvTaskOptions.appVersion, - RnvTaskOptions.id, + { + key: 'gitEnabled', + description: 'Enable git in your newly created project', + isValueType: true, + }, + { + key: 'answer', + isValueType: true, + isVariadic: true, + description: 'Pass in answers to prompts', + examples: ['--answer question=response question2=response2', '--answer question=\'{"some": "json"}\''], + }, + { + key: 'workspace', + isValueType: true, + description: 'select the workspace for the new project', + }, + { + key: 'template', + shortcut: 'T', + isValueType: true, + isRequired: true, + description: 'select specific template', + }, + { + key: 'projectName', + isValueType: true, + description: 'select the name of the new project', + }, + { + key: 'projectTemplate', + isValueType: true, + description: 'select the template of new project', + }, + { + key: 'templateVersion', + isValueType: true, + description: 'select the template version', + }, + { + key: 'title', + isValueType: true, + description: 'select the title of the app', + }, + { + key: 'appVersion', + isValueType: true, + description: 'select the version of the app', + }, + { + key: 'id', + isValueType: true, + description: 'select the id of the app', + }, + // RnvTaskOptions.gitEnabled, + // RnvTaskOptions.answer, + // RnvTaskOptions.workspace, + // RnvTaskOptions.template, + // RnvTaskOptions.projectName, + // RnvTaskOptions.projectTemplate, + // RnvTaskOptions.templateVersion, + // RnvTaskOptions.title, + // RnvTaskOptions.appVersion, + // RnvTaskOptions.id, ], isGlobalScope: true, isPriorityOrder: true, From bbbfb65b69967ae6b89afb7595cfd8789ee63fa6 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 2 Apr 2024 10:53:15 +0200 Subject: [PATCH 162/175] task logic updates --- packages/core/src/platforms/index.ts | 57 ++----------------- packages/core/src/runner.ts | 4 +- packages/core/src/tasks/taskFinder.ts | 7 +-- packages/core/src/tasks/taskHelpers.ts | 17 +++++- .../tasks/platform/taskPlatformConfigure.ts | 2 - .../src/tasks/project/taskConfigureSoft.ts | 4 +- packages/engine-rn-web/src/tasks/taskBuild.ts | 4 +- .../engine-rn-web/src/tasks/taskConfigure.ts | 4 +- packages/engine-rn-web/src/tasks/taskRun.ts | 3 +- packages/engine-rn-web/src/tasks/taskStart.ts | 17 +----- .../src/tasks/taskSingleCommand.ts | 6 +- .../src/tasks/taskStarterHello.ts | 2 +- packages/sdk-react-native/src/metroRunner.ts | 2 - 13 files changed, 38 insertions(+), 91 deletions(-) diff --git a/packages/core/src/platforms/index.ts b/packages/core/src/platforms/index.ts index 0a0d6cc6c7..1548a64bdf 100644 --- a/packages/core/src/platforms/index.ts +++ b/packages/core/src/platforms/index.ts @@ -1,18 +1,10 @@ import path from 'path'; -import { chalk, logDefault, logError, logWarning, logDebug, logInfo } from '../logger'; +import { chalk, logDefault, logError, logWarning, logDebug } from '../logger'; import { cleanFolder, copyFolderContentsRecursiveSync } from '../system/fs'; import { getTimestampPathsConfig, getAppFolder } from '../context/contextProps'; -import { generateOptions, inquirerPrompt } from '../api'; import type { RnvPlatform } from '../types'; import { doResolve } from '../system/resolve'; import { getContext } from '../context/provider'; -import { RnvPlatforms } from '../enums/platformName'; - -export const logErrorPlatform = () => { - const c = getContext(); - - return Promise.reject(`Platform: ${chalk().bold(c.platform)} doesn't support command: ${chalk().bold(c.command)}`); -}; export const generatePlatformChoices = () => { const c = getContext(); @@ -36,12 +28,12 @@ export const cleanPlatformBuild = async (platform: RnvPlatform, cleanAllPlatform if (cleanAllPlatforms && c.buildConfig.platforms) { Object.keys(c.buildConfig.platforms).forEach((k) => { - if (isPlatformSupportedSync(k as RnvPlatform)) { + if (_isPlatformSupportedSync(k as RnvPlatform)) { const pPath = path.join(c.paths.project.builds.dir, `${c.runtime.appId}_${k}`); cleanTasks.push(cleanFolder(pPath)); } }); - } else if (isPlatformSupportedSync(platform)) { + } else if (_isPlatformSupportedSync(platform)) { const pPath = getAppFolder(); cleanTasks.push(cleanFolder(pPath)); } @@ -54,7 +46,7 @@ export const createPlatformBuild = (platform: RnvPlatform) => logDefault('createPlatformBuild'); const c = getContext(); - if (!platform || !isPlatformSupportedSync(platform, undefined, reject)) return; + if (!platform || !_isPlatformSupportedSync(platform, undefined, reject)) return; const ptDir = c.paths.project.platformTemplatesDirs[platform]; if (!ptDir) { @@ -87,46 +79,7 @@ export const createPlatformBuild = (platform: RnvPlatform) => resolve(); }); -const printCurrentPlatform = (platform: RnvPlatform) => { - const msg = `Current platform: ${chalk().white.bold(platform)}`; - logInfo(msg); -}; - -export const isPlatformSupported = async (isGlobalScope = false) => { - const c = getContext(); - - if (c.platform && c.program.opts().platform !== true && isGlobalScope) { - printCurrentPlatform(c.platform); - return c.platform; - } - - let platformsAsObj; - if (isGlobalScope) { - platformsAsObj = RnvPlatforms; - } else { - platformsAsObj = c.buildConfig ? c.buildConfig.platforms : c.supportedPlatforms; - } - - if (!platformsAsObj) platformsAsObj = c.runtime.availablePlatforms; - const opts = generateOptions(platformsAsObj); - - if (!c.platform || c.program.opts().platform === true || !c.runtime.availablePlatforms?.includes?.(c.platform)) { - const { platform } = await inquirerPrompt({ - name: 'platform', - type: 'list', - message: 'Pick one of available platforms', - choices: opts.keysAsArray, - logMessage: 'You need to specify platform', - }); - - c.platform = platform; - } - - printCurrentPlatform(c.platform); - return c.platform; -}; - -export const isPlatformSupportedSync = (platform: RnvPlatform, resolve?: () => void, reject?: (e: string) => void) => { +const _isPlatformSupportedSync = (platform: RnvPlatform, resolve?: () => void, reject?: (e: string) => void) => { if (!platform) { if (reject) { reject( diff --git a/packages/core/src/runner.ts b/packages/core/src/runner.ts index 395350a5b7..079db9fcc1 100644 --- a/packages/core/src/runner.ts +++ b/packages/core/src/runner.ts @@ -10,7 +10,8 @@ import { getApi } from './api/provider'; import { RnvTask } from './tasks/types'; import { runInteractiveWizard, runInteractiveWizardForSubTasks } from './tasks/wizard'; import { initializeTask } from './tasks/taskExecutors'; -import { selectPlatformIfRequired } from './tasks/taskHelpers'; +import { getTaskNameFromCommand, selectPlatformIfRequired } from './tasks/taskHelpers'; +import { logInfo } from './logger'; export const exitRnvCore = async (code: number) => { const ctx = getContext(); @@ -85,5 +86,6 @@ export const executeRnvCore = async () => { } // Still no task found. time to check sub tasks options via wizard + logInfo(`Did not find exact match for ${getTaskNameFromCommand()}. Running interactive wizard for sub-tasks`); return runInteractiveWizardForSubTasks(); }; diff --git a/packages/core/src/tasks/taskFinder.ts b/packages/core/src/tasks/taskFinder.ts index e96fccad21..8a60995b19 100644 --- a/packages/core/src/tasks/taskFinder.ts +++ b/packages/core/src/tasks/taskFinder.ts @@ -7,12 +7,9 @@ import { inquirerPrompt } from '../api'; export const findSuitableTask = async (): Promise => { logDefault('findSuitableTask'); - // const c = getContext(); - const taskName = getTaskNameFromCommand(); if (!taskName) { // Trigger auto selection outside of this function - // throw new Error('TODO interactive selection offer all tasks'); return undefined; } const suitableTasks = findTasksByTaskName(taskName); @@ -28,7 +25,8 @@ export const findTasksByTaskName = (taskName: string) => { const taskArr = Object.values(tasks); taskArr.forEach((v) => { const plat = ctx.platform; - if (v.platforms && plat) { + + if (v.platforms && typeof plat === 'string') { if (!v.platforms.includes(plat)) { // If we found a task with platform restriction and it does not match current platform we skip it return; @@ -38,7 +36,6 @@ export const findTasksByTaskName = (taskName: string) => { return; } } - if (v.task === taskName) { result.push(v); } diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index a66386b534..3db0e904fc 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -1,8 +1,15 @@ import { inquirerPrompt } from '../api'; import { getContext } from '../context/provider'; import { getEngineRunnerByPlatform, registerPlatformEngine } from '../engines'; +import { chalk, logInfo } from '../logger'; import { RnvTask, RnvTaskMap, RnvTaskOption } from './types'; +const printCurrentPlatform = () => { + const ctx = getContext(); + const msg = `Current platform: ${chalk().white.bold(ctx.platform)}`; + logInfo(msg); +}; + export const selectPlatformIfRequired = async ( knownTaskInstance?: RnvTask, registerEngineIfPlatformSelected?: boolean @@ -10,12 +17,16 @@ export const selectPlatformIfRequired = async ( const c = getContext(); // TODO: move this to more generic place? c.runtime.availablePlatforms = c.buildConfig.defaults?.supportedPlatforms || []; - if (!c.platform) { + if (typeof c.platform !== 'string') { const taskName = getTaskNameFromCommand(); const platforms = knownTaskInstance?.platforms || c.runtime.availablePlatforms; if (platforms) { if (platforms.length === 1) { + logInfo( + `Task "${knownTaskInstance?.task}" has only one supported platform: "${platforms[0]}". Automatically selecting it.` + ); c.platform = platforms[0]; + c.program.opts().platform = c.platform; } else { const { platform } = await inquirerPrompt({ type: 'list', @@ -25,9 +36,11 @@ export const selectPlatformIfRequired = async ( }); c.platform = platform; } + printCurrentPlatform(); } + } else { + printCurrentPlatform(); } - // TODO: move all below to more generic place? if (registerEngineIfPlatformSelected) { await registerPlatformEngine(c.platform); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 6496a7d73f..7c17eb7c40 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -4,7 +4,6 @@ import { logInfo, fsExistsSync, getAppFolder, - isPlatformSupported, cleanPlatformBuild, createPlatformBuild, configureRuntimeDefaults, @@ -27,7 +26,6 @@ export default createTask({ dependsOn: [RnvTaskName.projectConfigure], fn: async ({ ctx, taskName, originTaskName }) => { const { program } = ctx; - await isPlatformSupported(); await isBuildSchemeSupported(); const entryFile = getConfigProp('entryFile'); diff --git a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts index 72b045c968..ae8834624c 100644 --- a/packages/engine-core/src/tasks/project/taskConfigureSoft.ts +++ b/packages/engine-core/src/tasks/project/taskConfigureSoft.ts @@ -1,4 +1,4 @@ -import { executeTask, configureRuntimeDefaults, isPlatformSupported, createTask, RnvTaskName } from '@rnv/core'; +import { executeTask, configureRuntimeDefaults, createTask, RnvTaskName } from '@rnv/core'; import { isBuildSchemeSupported } from '../../buildSchemes'; export default createTask({ @@ -6,8 +6,6 @@ export default createTask({ fn: async ({ taskName, originTaskName }) => { await configureRuntimeDefaults(); await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); - - await isPlatformSupported(); await isBuildSchemeSupported(); await executeTask({ diff --git a/packages/engine-rn-web/src/tasks/taskBuild.ts b/packages/engine-rn-web/src/tasks/taskBuild.ts index a4f56d228e..c03b874e6e 100644 --- a/packages/engine-rn-web/src/tasks/taskBuild.ts +++ b/packages/engine-rn-web/src/tasks/taskBuild.ts @@ -1,4 +1,4 @@ -import { logErrorPlatform, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; +import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { buildWeb } from '@rnv/sdk-webpack'; import { buildTizenProject } from '@rnv/sdk-tizen'; import { buildWebOSProject } from '@rnv/sdk-webos'; @@ -27,7 +27,7 @@ export default createTask({ await buildWebOSProject(); return; default: - logErrorPlatform(); + // DO nothing } }, task: RnvTaskName.build, diff --git a/packages/engine-rn-web/src/tasks/taskConfigure.ts b/packages/engine-rn-web/src/tasks/taskConfigure.ts index a143fd4110..e148d5a312 100644 --- a/packages/engine-rn-web/src/tasks/taskConfigure.ts +++ b/packages/engine-rn-web/src/tasks/taskConfigure.ts @@ -1,4 +1,4 @@ -import { logErrorPlatform, copySharedPlatforms, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; +import { copySharedPlatforms, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { configureWebProject, configureChromecastProject } from '@rnv/sdk-webpack'; import { configureKaiOSProject } from '@rnv/sdk-kaios'; import { configureWebOSProject } from '@rnv/sdk-webos'; @@ -25,7 +25,7 @@ export default createTask({ case 'kaios': return configureKaiOSProject(); default: - return logErrorPlatform(); + // DO nothing } }, task: RnvTaskName.configure, diff --git a/packages/engine-rn-web/src/tasks/taskRun.ts b/packages/engine-rn-web/src/tasks/taskRun.ts index d97146098c..5562c16c68 100644 --- a/packages/engine-rn-web/src/tasks/taskRun.ts +++ b/packages/engine-rn-web/src/tasks/taskRun.ts @@ -1,7 +1,6 @@ import { RnvContext, RnvTaskOptionPresets, - logErrorPlatform, logTask, logDebug, getConfigProp, @@ -107,7 +106,7 @@ export default createTask({ } return runChromecast(ctx); default: - return logErrorPlatform(); + // Do nothing } }, task: RnvTaskName.run, diff --git a/packages/engine-rn-web/src/tasks/taskStart.ts b/packages/engine-rn-web/src/tasks/taskStart.ts index d73ccb9802..42c9a2d9b1 100644 --- a/packages/engine-rn-web/src/tasks/taskStart.ts +++ b/packages/engine-rn-web/src/tasks/taskStart.ts @@ -1,5 +1,5 @@ import { runWebpackServer } from '@rnv/sdk-webpack'; -import { getConfigProp, logErrorPlatform, logError, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; +import { getConfigProp, logError, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; import { REMOTE_DEBUGGER_ENABLED_PLATFORMS, openBrowser, waitForHost } from '@rnv/sdk-utils'; import { EnginePlatforms } from '../constants'; @@ -20,20 +20,7 @@ export default createTask({ const isWeinreEnabled = (platform && REMOTE_DEBUGGER_ENABLED_PLATFORMS.includes(platform) && !bundleAssets && !hosted) || undefined; - switch (platform) { - case 'web': - case 'webtv': - case 'tizen': - case 'webos': - case 'tizenmobile': - case 'tizenwatch': - return runWebpackServer(isWeinreEnabled); - default: - if (hosted) { - return Promise.reject('This platform does not support hosted mode'); - } - return logErrorPlatform(); - } + return runWebpackServer(isWeinreEnabled); }, task: RnvTaskName.start, options: RnvTaskOptionPresets.withConfigure(), diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index ecc3242339..b5e4cd002b 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -1,13 +1,15 @@ -import { createTask, logSuccess } from '@rnv/core'; +import { RnvTaskName, createTask, logSuccess } from '@rnv/core'; export default createTask({ description: 'Prints hello message', + dependsOn: [RnvTaskName.package], fn: async ({ ctx }) => { //TODO: switch to typed options once Context generics are supported const opts: any = ctx.program.opts(); logSuccess(`Hello from Integration Starter single command! - --my-opt: "${opts.myOpt}"`); + --my-opt value: ${opts.myOpt}`); }, task: 'starter-single-command', + platforms: ['ios', 'android'], options: [{ key: 'my-opt', description: 'Hello', isValueType: true }], }); diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index d736381891..6993539d9a 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -7,7 +7,7 @@ export default createTask({ //TODO: switch to typed options once Context generics are supported const opts: any = ctx.program.opts(); logSuccess(`Hello from Integration Starter! ---my-opt: "${opts.myOpt}"`); +--my-opt value: ${opts.myOpt}`); }, task: 'starter hello', platforms: ['ios'], diff --git a/packages/sdk-react-native/src/metroRunner.ts b/packages/sdk-react-native/src/metroRunner.ts index f7b76a6072..46cd60dd15 100644 --- a/packages/sdk-react-native/src/metroRunner.ts +++ b/packages/sdk-react-native/src/metroRunner.ts @@ -4,7 +4,6 @@ import { chalk, executeAsync, logError, - logErrorPlatform, logInfo, logRaw, logDefault, @@ -33,7 +32,6 @@ export const startReactNative = async (opts: { logDefault('startReactNative'); if (!c.platform) { - logErrorPlatform(); return false; } From c502a77af0c69f3b5f24a77b4312d00502805f2a Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 2 Apr 2024 15:47:40 +0200 Subject: [PATCH 163/175] add compatibility support for legacy plugin templates --- packages/core/src/plugins/index.ts | 17 +++++++++++++---- packages/core/src/templates/index.ts | 11 ++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/core/src/plugins/index.ts b/packages/core/src/plugins/index.ts index 65c2d97f9b..6f4f21ab66 100644 --- a/packages/core/src/plugins/index.ts +++ b/packages/core/src/plugins/index.ts @@ -553,6 +553,7 @@ export const loadPluginTemplates = async () => { const customPluginTemplates = c.files.project.config?.paths?.pluginTemplates; if (customPluginTemplates) { const missingDeps = _parsePluginTemplateDependencies(c, customPluginTemplates); + if (missingDeps.length) { const dependencies = c.files.project.package.dependencies || {}; c.files.project.package.dependencies = dependencies; @@ -601,15 +602,23 @@ const _parsePluginTemplateDependencies = ( if (npmDep) { let ptPath; + let ptConfig; + let ptRootPath; if (npmDep.startsWith('file:')) { ptPath = path.join(c.paths.project.dir, npmDep.replace('file:', ''), val.path || ''); } else { - // ptPath = path.join(c.paths.project.nodeModulesDir, val.npm, val.path || ''); - ptPath = `${doResolve(val.npm)}/${val.path}`; + ptRootPath = doResolve(val.npm); + } + if (ptRootPath) { + ptPath = path.join(ptRootPath, val.path); + c.paths.scopedConfigTemplates.pluginTemplatesDirs[k] = ptPath; + ptConfig = path.join(ptRootPath, RnvFileName.renativeTemplates); + if (!fsExistsSync(ptConfig)) { + // DEPRECATED Legacy Support + ptConfig = path.join(ptRootPath, val.path, 'renative.plugins.json'); + } } - const ptConfig = path.join(ptPath, RnvFileName.renativeTemplates); - c.paths.scopedConfigTemplates.pluginTemplatesDirs[k] = ptPath; if (fsExistsSync(ptConfig)) { const ptConfigs = c.files.scopedConfigTemplates; const ptConfigFile = readObjectSync(ptConfig); diff --git a/packages/core/src/templates/index.ts b/packages/core/src/templates/index.ts index da06167cda..ed771b1a36 100644 --- a/packages/core/src/templates/index.ts +++ b/packages/core/src/templates/index.ts @@ -81,7 +81,16 @@ const _applyTemplate = async (c: RnvContext) => { logDefault('_applyTemplate'); const tplName = c.buildConfig.templateConfig?.name; - c.paths.template.dir = doResolve(tplName) || 'Error: unresolved'; + if (!tplName) { + logError(`Template config missing. Make sure renative.json >> templateConfig.name is set`); + return; + } + const tpPath = doResolve(tplName); + if (!tpPath) { + logError(`Template ${tplName} not found. Make sure it's installed`); + return; + } + c.paths.template.dir = tpPath; if (c.paths.template.dir) { c.paths.template.configTemplate = path.join(c.paths.template.dir, RnvFileName.renativeTemplate); From e0bd1c2f0ac7066affbd4e5b7cf90337794d0b68 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 2 Apr 2024 16:35:17 +0200 Subject: [PATCH 164/175] fix beforeDependsOn --- packages/cli/src/logger/index.ts | 10 +++++----- packages/core/src/engines/index.ts | 2 +- packages/core/src/tasks/taskExecutors.ts | 9 +++++++++ .../integration-starter/src/tasks/taskSingleCommand.ts | 3 +++ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index cc64bf0ddf..34e35a9625 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -300,11 +300,11 @@ export const logSummary = (opts?: { header?: string; headerStyle?: 'success' | ' if (ctx.program?.opts()?.resetHard) { str += printIntoBox(`Reset Project and Assets (-R): ${_highlightColor(!!ctx.program?.opts()?.resetHard)}`); } - if (ctx.runtime?.supportedPlatforms?.length) { - const plats = ctx.runtime.supportedPlatforms.map( - (v) => `${currentChalk.gray(v.platform)}${v.isConnected ? '' : '(ejected)'}` - ); - str += printArrIntoBox(plats, 'Supported Platforms: '); + if (ctx.runtime?.availablePlatforms?.length) { + // const plats = ctx.runtime.availablePlatforms.map((v) => `${currentChalk.gray(v)}`); + // str += printArrIntoBox(plats, 'Supported Platforms: '); + + str += printIntoBox(`Supported Platforms: ${currentChalk.gray(ctx.runtime.availablePlatforms.join(', '))}`); } if (ctx.process) { diff --git a/packages/core/src/engines/index.ts b/packages/core/src/engines/index.ts index 8cc4f353df..dc9a33e44d 100644 --- a/packages/core/src/engines/index.ts +++ b/packages/core/src/engines/index.ts @@ -425,7 +425,7 @@ export const installEngines = async (failOnMissingDeps?: boolean): Promise { + console.log('>>> beforeDependsOn called!!!'); + }, fn: async ({ ctx }) => { //TODO: switch to typed options once Context generics are supported const opts: any = ctx.program.opts(); From ac02b52b6fee3f8cf08ff944523df247314b0dc8 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 2 Apr 2024 18:14:33 +0200 Subject: [PATCH 165/175] update install logic --- packages/cli/src/logger/index.ts | 2 +- packages/core/src/enums/taskName.ts | 1 - packages/engine-core/src/index.ts | 2 - packages/engine-core/src/taskHelpers.ts | 38 +++++++++++++++++++ .../src/tasks/global/taskInstall.ts | 24 ------------ .../tasks/platform/taskPlatformConfigure.ts | 4 +- .../plugin/taskHelpers.ts} | 26 +------------ .../src/tasks/plugin/taskPluginAdd.ts | 9 ++--- .../src/tasks/plugin/taskPluginList.ts | 2 +- .../src/tasks/project/taskProjectConfigure.ts | 6 +-- .../src/tasks/project/taskProjectUpgrade.ts | 2 +- 11 files changed, 51 insertions(+), 65 deletions(-) create mode 100644 packages/engine-core/src/taskHelpers.ts delete mode 100644 packages/engine-core/src/tasks/global/taskInstall.ts rename packages/engine-core/src/{plugins.ts => tasks/plugin/taskHelpers.ts} (82%) diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index 34e35a9625..f9d57c4ffa 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -522,7 +522,7 @@ export const logWarning = (msg: string | boolean | unknown) => { }); } ctx.logging.containsWarning = true; - logAndSave(currentChalk.yellow(`warn:${_getCurrentTask()} ${msgSn}`)); + logAndSave(currentChalk.yellow(`warn: ${_getCurrentTask()} ${msgSn}`)); }; export const logInfo = (msg: string) => { diff --git a/packages/core/src/enums/taskName.ts b/packages/core/src/enums/taskName.ts index 56a315fdc4..15bb39d860 100644 --- a/packages/core/src/enums/taskName.ts +++ b/packages/core/src/enums/taskName.ts @@ -15,7 +15,6 @@ export const RnvTaskName = { clean: 'clean', link: 'link', unlink: 'unlink', - install: 'install', publish: 'publish', status: 'status', switch: 'switch', diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index 443fec700a..86fc167160 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -22,7 +22,6 @@ import taskStatus from './tasks/global/taskStatus'; import taskConfig from './tasks/global/taskConfig'; import taskHelp from './tasks/global/taskHelp'; import taskNew from './tasks/bootstrap/taskNew'; -import taskInstall from './tasks/global/taskInstall'; import taskProjectConfigure from './tasks/project/taskProjectConfigure'; import taskProjectUpgrade from './tasks/project/taskProjectUpgrade'; import taskAppConfigure from './tasks/app/taskAppConfigure'; @@ -76,7 +75,6 @@ const Engine: RnvEngine = { taskConfig, taskHelp, taskNew, - taskInstall, taskProjectConfigure, taskProjectUpgrade, taskAppConfigure, diff --git a/packages/engine-core/src/taskHelpers.ts b/packages/engine-core/src/taskHelpers.ts new file mode 100644 index 0000000000..98e90f99a2 --- /dev/null +++ b/packages/engine-core/src/taskHelpers.ts @@ -0,0 +1,38 @@ +import { + areNodeModulesInstalled, + checkForPluginDependencies, + getContext, + installPackageDependencies, + logDefault, + logInfo, + overrideTemplatePlugins, +} from '@rnv/core'; +import { configureFonts } from '@rnv/sdk-utils'; + +export const installPackageDependenciesAndPlugins = async () => { + logDefault('installPackageDependenciesAndPlugins'); + + await installPackageDependencies(); + await overrideTemplatePlugins(); + await configureFonts(); + await checkForPluginDependencies(async () => { + await installPackageDependenciesAndPlugins(); + }); +}; + +export const checkAndInstallIfRequired = async () => { + const ctx = getContext(); + if (ctx.program.opts().skipDependencyCheck) return true; + const isNmInstalled = areNodeModulesInstalled(); + if (isNmInstalled && !ctx._requiresNpmInstall) { + return true; + } + if (!isNmInstalled) { + logInfo('node_modules folder is missing. INSTALLING...'); + } else if (ctx._requiresNpmInstall) { + logInfo('node_modules folder is out of date. INSTALLING...'); + } + + ctx._requiresNpmInstall = false; + await installPackageDependenciesAndPlugins(); +}; diff --git a/packages/engine-core/src/tasks/global/taskInstall.ts b/packages/engine-core/src/tasks/global/taskInstall.ts deleted file mode 100644 index 3ccc753a63..0000000000 --- a/packages/engine-core/src/tasks/global/taskInstall.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { areNodeModulesInstalled, logInfo, createTask, RnvTaskName } from '@rnv/core'; -import { installPackageDependenciesAndPlugins } from '../../plugins'; - -export default createTask({ - description: 'Install package node_modules via yarn or npm', - fn: async ({ ctx }) => { - if (ctx.program.opts().skipDependencyCheck) return true; - - // Check node_modules - // c.runtime.skipPackageUpdate only reflects rnv version mismatch. should not prevent updating other deps - if (!areNodeModulesInstalled() || ctx._requiresNpmInstall /* && !c.runtime.skipPackageUpdate */) { - if (!areNodeModulesInstalled()) { - logInfo('node_modules folder is missing. INSTALLING...'); - } else { - logInfo('node_modules folder is out of date. INSTALLING...'); - } - ctx._requiresNpmInstall = false; - // await handleMutations(); - await installPackageDependenciesAndPlugins(); - } - return true; - }, - task: RnvTaskName.install, -}); diff --git a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts index 7c17eb7c40..f715721eb7 100644 --- a/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts +++ b/packages/engine-core/src/tasks/platform/taskPlatformConfigure.ts @@ -18,6 +18,7 @@ import { } from '@rnv/core'; import { isBuildSchemeSupported } from '../../buildSchemes'; import path from 'path'; +import { checkAndInstallIfRequired } from '../../taskHelpers'; // import { configureFonts } from '@rnv/sdk-utils'; export default createTask({ @@ -49,8 +50,7 @@ export default createTask({ }); await configureRuntimeDefaults(); - - await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); + await checkAndInstallIfRequired(); const hasBuild = fsExistsSync(ctx.paths.project.builds.dir); logTask('', `taskPlatformConfigure hasBuildFolderPresent:${hasBuild}`); diff --git a/packages/engine-core/src/plugins.ts b/packages/engine-core/src/tasks/plugin/taskHelpers.ts similarity index 82% rename from packages/engine-core/src/plugins.ts rename to packages/engine-core/src/tasks/plugin/taskHelpers.ts index e87f11e8b9..36cca370e1 100644 --- a/packages/engine-core/src/plugins.ts +++ b/packages/engine-core/src/tasks/plugin/taskHelpers.ts @@ -1,30 +1,6 @@ -import { - PluginListResponse, - chalk, - checkForPluginDependencies, - getContext, - installPackageDependencies, - logDefault, - overrideTemplatePlugins, -} from '@rnv/core'; -import { configureFonts } from '@rnv/sdk-utils'; +import { PluginListResponse, chalk, getContext } from '@rnv/core'; import intersection from 'lodash/intersection'; -// export const configurePlugins = async () => { -// await installPackageDependenciesAndPlugins(); -// } - -export const installPackageDependenciesAndPlugins = async () => { - logDefault('installPackageDependenciesAndPlugins'); - - await installPackageDependencies(); - await overrideTemplatePlugins(); - await configureFonts(); - await checkForPluginDependencies(async () => { - await installPackageDependenciesAndPlugins(); - }); -}; - export const getPluginList = (isUpdate = false) => { const c = getContext(); diff --git a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts index 5639383c9e..60cf0467da 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginAdd.ts @@ -3,7 +3,6 @@ import { chalk, logSuccess, resolvePluginDependants, - executeTask, PluginListResponseItem, getApi, inquirerPrompt, @@ -11,12 +10,13 @@ import { createTask, RnvTaskName, } from '@rnv/core'; -import { getPluginList } from '../../plugins'; +import { checkAndInstallIfRequired } from '../../taskHelpers'; +import { getPluginList } from './taskHelpers'; export default createTask({ description: 'Add selected plugin to the project', dependsOn: [RnvTaskName.projectConfigure], - fn: async ({ ctx, taskName, originTaskName }) => { + fn: async ({ ctx }) => { const selPluginKey = ctx.program.rawArgs?.[4]; const o = getPluginList(); @@ -87,8 +87,7 @@ export default createTask({ writeRenativeConfigFile(ctx.paths.project.config, cnfOriginal); await resolvePluginDependants(); - - await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); + await checkAndInstallIfRequired(); spinner.succeed('All plugins installed!'); logSuccess('Plugins installed successfully!'); diff --git a/packages/engine-core/src/tasks/plugin/taskPluginList.ts b/packages/engine-core/src/tasks/plugin/taskPluginList.ts index 2a2b2903ad..811584d0b7 100644 --- a/packages/engine-core/src/tasks/plugin/taskPluginList.ts +++ b/packages/engine-core/src/tasks/plugin/taskPluginList.ts @@ -1,5 +1,5 @@ import { logToSummary, createTask, RnvTaskName } from '@rnv/core'; -import { getPluginList } from '../../plugins'; +import { getPluginList } from './taskHelpers'; export default createTask({ description: 'Show list of all available plugins', diff --git a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts index 50a728676e..14fab37026 100644 --- a/packages/engine-core/src/tasks/project/taskProjectConfigure.ts +++ b/packages/engine-core/src/tasks/project/taskProjectConfigure.ts @@ -26,7 +26,7 @@ import { getContext, } from '@rnv/core'; import { checkCrypto } from '../crypto/common'; -import { installPackageDependenciesAndPlugins } from '../../plugins'; +import { checkAndInstallIfRequired, installPackageDependenciesAndPlugins } from '../../taskHelpers'; import { configureFonts } from '@rnv/sdk-utils'; const checkIsRenativeProject = async () => { @@ -75,7 +75,7 @@ export default createTask({ return true; } - await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); + await checkAndInstallIfRequired(); if (originTaskName !== RnvTaskName.cryptoDecrypt) { //If we explicitly running rnv crypto decrypt there is no need to check crypto @@ -100,7 +100,7 @@ export default createTask({ // We need to ensure appConfigs are populated from template before proceeding further // await configureTemplateFiles(); // NOTE: We only do this during bootstrap once await configureRuntimeDefaults(); - await executeTask({ taskName: RnvTaskName.install, parentTaskName: taskName, originTaskName }); + await checkAndInstallIfRequired(); await executeTask({ taskName: RnvTaskName.appConfigure, parentTaskName: taskName, originTaskName }); diff --git a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts index 5302fd37cd..39031f2555 100644 --- a/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts +++ b/packages/engine-core/src/tasks/project/taskProjectUpgrade.ts @@ -15,7 +15,7 @@ import { ConfigFileProject, RnvFileName, } from '@rnv/core'; -import { installPackageDependenciesAndPlugins } from '../../plugins'; +import { installPackageDependenciesAndPlugins } from '../../taskHelpers'; export default createTask({ description: 'Upgrade or downgrade RNV dependencies in your ReNative project', From 3cda06591dc7f0a70afbe4d9b2eaa6dae88b4d6c Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 2 Apr 2024 20:39:44 +0200 Subject: [PATCH 166/175] logging, install flag fixes --- packages/cli/src/logger/index.ts | 6 ++--- packages/core/src/projects/mutations.ts | 2 +- packages/core/src/projects/npm.ts | 5 +++- packages/engine-core/src/taskHelpers.ts | 12 ++++------ .../__tests__/taskPlatformConfigure.test.ts | 23 ++++++++++++++----- 5 files changed, 30 insertions(+), 18 deletions(-) diff --git a/packages/cli/src/logger/index.ts b/packages/cli/src/logger/index.ts index f9d57c4ffa..4e17405f92 100644 --- a/packages/cli/src/logger/index.ts +++ b/packages/cli/src/logger/index.ts @@ -453,7 +453,7 @@ const getLogCounter = (task: string, skipAddition = false) => { TASK_COUNTER[task] += 1; } - const taskCount = currentChalk.grey(`[${TASK_COUNTER[task]}]`); + const taskCount = currentChalk.grey(`(${TASK_COUNTER[task]}x)`); return taskCount; }; @@ -493,8 +493,8 @@ export const logExitTask = (task: string) => { message: stripAnsi(_sanitizePaths(task)), }); } - const taskCount = getLogCounter(task, true); - const msg = `${currentChalk.green('task:')} ${currentChalk.green('✔')} ${task} ${taskCount}`; + // const taskCount = getLogCounter(task, true); + const msg = `${currentChalk.green('task:')} ${currentChalk.green('✔')} ${task}`; console.log(msg); }; diff --git a/packages/core/src/projects/mutations.ts b/packages/core/src/projects/mutations.ts index bb2f2b403e..3ed035a509 100644 --- a/packages/core/src/projects/mutations.ts +++ b/packages/core/src/projects/mutations.ts @@ -60,7 +60,7 @@ export const handleMutations = async () => { updatePackage(updateObj); if (confirm === choices[1]) { - // We update package butt tell up stream to skip install + // We update package but tell up stream to skip install return false; } diff --git a/packages/core/src/projects/npm.ts b/packages/core/src/projects/npm.ts index 576e959e7f..8f18d10fed 100644 --- a/packages/core/src/projects/npm.ts +++ b/packages/core/src/projects/npm.ts @@ -123,7 +123,10 @@ export const installPackageDependencies = async (failOnError = false) => { const c = getContext(); const result = await handleMutations(); - if (!result) return; + if (!result) { + c._requiresNpmInstall = false; + return; + } c.runtime.forceBuildHookRebuild = true; const customScript = _getInstallScript(c); diff --git a/packages/engine-core/src/taskHelpers.ts b/packages/engine-core/src/taskHelpers.ts index 98e90f99a2..5765839a43 100644 --- a/packages/engine-core/src/taskHelpers.ts +++ b/packages/engine-core/src/taskHelpers.ts @@ -4,7 +4,6 @@ import { getContext, installPackageDependencies, logDefault, - logInfo, overrideTemplatePlugins, } from '@rnv/core'; import { configureFonts } from '@rnv/sdk-utils'; @@ -27,12 +26,11 @@ export const checkAndInstallIfRequired = async () => { if (isNmInstalled && !ctx._requiresNpmInstall) { return true; } - if (!isNmInstalled) { - logInfo('node_modules folder is missing. INSTALLING...'); - } else if (ctx._requiresNpmInstall) { - logInfo('node_modules folder is out of date. INSTALLING...'); - } + // if (!isNmInstalled) { + // logInfo('node_modules folder is missing. INSTALLING...'); + // } else if (ctx._requiresNpmInstall) { + // logInfo('node_modules folder is out of date. INSTALLING...'); + // } - ctx._requiresNpmInstall = false; await installPackageDependenciesAndPlugins(); }; diff --git a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts index 56f7d2efff..cfcec76931 100644 --- a/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts +++ b/packages/engine-core/src/tasks/platform/__tests__/taskPlatformConfigure.test.ts @@ -1,7 +1,17 @@ -import { createRnvContext, executeTask, getContext } from '@rnv/core'; +import { + configureRuntimeDefaults, + createPlatformBuild, + createRnvContext, + executeTask, + getContext, + resolveEngineDependencies, +} from '@rnv/core'; import taskPlatformConfigure from '../taskPlatformConfigure'; +import { checkAndInstallIfRequired } from '../../../taskHelpers'; +import { isBuildSchemeSupported } from '../../../buildSchemes'; jest.mock('../../../buildSchemes'); +jest.mock('../../../taskHelpers'); jest.mock('@rnv/core'); beforeEach(() => { @@ -15,6 +25,7 @@ afterEach(() => { test('Execute task.rnv.platform.configure', async () => { //GIVEN const ctx = getContext(); + jest.mocked(checkAndInstallIfRequired).mockResolvedValue(true); //WHEN await expect( taskPlatformConfigure.fn?.({ @@ -32,9 +43,9 @@ test('Execute task.rnv.platform.configure', async () => { parentTaskName: 'MOCK_taskName', taskName: 'sdk configure', }); - expect(executeTask).toHaveBeenCalledWith({ - originTaskName: 'MOCK_originTaskName', - parentTaskName: 'MOCK_taskName', - taskName: 'install', - }); + expect(isBuildSchemeSupported).toHaveBeenCalled(); + expect(configureRuntimeDefaults).toHaveBeenCalled(); + expect(createPlatformBuild).toHaveBeenCalled(); + expect(resolveEngineDependencies).toHaveBeenCalled(); + expect(checkAndInstallIfRequired).toHaveBeenCalled(); }); From b84546de058a4db0899825088e3fcec7224697a4 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Tue, 2 Apr 2024 22:22:48 +0200 Subject: [PATCH 167/175] refactor engine generators --- packages/core/src/engines/engineCreator.ts | 17 ++++++- packages/core/src/engines/types.ts | 12 +++-- packages/core/src/tasks/constants.ts | 42 ++++++++++++++++ packages/engine-core/src/index.ts | 26 ++-------- packages/engine-lightning/src/config.ts | 4 ++ packages/engine-lightning/src/getContext.ts | 4 ++ packages/engine-lightning/src/index.ts | 23 ++++----- packages/engine-rn-electron/src/config.ts | 4 ++ packages/engine-rn-electron/src/getContext.ts | 4 ++ packages/engine-rn-electron/src/index.ts | 37 +++++--------- packages/engine-rn-macos/src/config.ts | 4 ++ packages/engine-rn-macos/src/getContext.ts | 4 ++ packages/engine-rn-macos/src/index.ts | 22 ++++----- packages/engine-rn-next/src/config.ts | 4 ++ packages/engine-rn-next/src/getContext.ts | 4 ++ packages/engine-rn-next/src/index.ts | 27 ++++------- packages/engine-rn-tvos/src/config.ts | 4 ++ packages/engine-rn-tvos/src/getContext.ts | 4 ++ packages/engine-rn-tvos/src/index.ts | 29 +++++------ packages/engine-rn-web/src/config.ts | 4 ++ packages/engine-rn-web/src/getContext.ts | 4 ++ packages/engine-rn-web/src/index.ts | 46 +++++++----------- packages/engine-rn-windows/src/config.ts | 4 ++ packages/engine-rn-windows/src/getContext.ts | 4 ++ packages/engine-rn-windows/src/index.ts | 27 ++++------- packages/engine-rn/src/config.ts | 4 ++ packages/engine-rn/src/getContext.ts | 4 ++ packages/engine-rn/src/index.ts | 48 ++++++------------- packages/integration-docker/src/config.ts | 4 ++ packages/integration-docker/src/index.ts | 9 ++-- packages/integration-starter/src/config.ts | 4 ++ packages/integration-starter/src/index.ts | 9 ++-- 32 files changed, 238 insertions(+), 208 deletions(-) create mode 100644 packages/engine-lightning/src/config.ts create mode 100644 packages/engine-lightning/src/getContext.ts create mode 100644 packages/engine-rn-electron/src/config.ts create mode 100644 packages/engine-rn-electron/src/getContext.ts create mode 100644 packages/engine-rn-macos/src/config.ts create mode 100644 packages/engine-rn-macos/src/getContext.ts create mode 100644 packages/engine-rn-next/src/config.ts create mode 100644 packages/engine-rn-next/src/getContext.ts create mode 100644 packages/engine-rn-tvos/src/config.ts create mode 100644 packages/engine-rn-tvos/src/getContext.ts create mode 100644 packages/engine-rn-web/src/config.ts create mode 100644 packages/engine-rn-web/src/getContext.ts create mode 100644 packages/engine-rn-windows/src/config.ts create mode 100644 packages/engine-rn-windows/src/getContext.ts create mode 100644 packages/engine-rn/src/config.ts create mode 100644 packages/engine-rn/src/getContext.ts create mode 100644 packages/integration-docker/src/config.ts create mode 100644 packages/integration-starter/src/config.ts diff --git a/packages/core/src/engines/engineCreator.ts b/packages/core/src/engines/engineCreator.ts index 97b3e54fd7..bd154494d7 100644 --- a/packages/core/src/engines/engineCreator.ts +++ b/packages/core/src/engines/engineCreator.ts @@ -1,10 +1,25 @@ +import { generateEngineExtensions } from '.'; import { getContext } from '../context/provider'; import { generateRnvTaskMap } from '../tasks/taskHelpers'; -import type { CreateRnvEngineOpts, RnvEngine } from './types'; +import { RnvPlatformKey } from '../types'; +import type { CreateRnvEngineOpts, RnvEngine, RnvEnginePlatforms } from './types'; export const createRnvEngine = (opts: CreateRnvEngineOpts) => { + const platforms: RnvEnginePlatforms = opts?.platforms; + Object.keys(platforms).forEach((k) => { + const p = k as RnvPlatformKey; + const plat = platforms[p]; + if (plat) { + plat.extensions = generateEngineExtensions(plat.extensions, opts.config); + } + }); + const engine: RnvEngine = { ...opts, + platforms, + serverDirName: opts.serverDirName || '', + projectDirName: opts.projectDirName || '', + runtimeExtraProps: opts.runtimeExtraProps || {}, tasks: generateRnvTaskMap(opts.tasks, opts.config), getContext: () => getContext(), }; diff --git a/packages/core/src/engines/types.ts b/packages/core/src/engines/types.ts index f5a75025eb..b0911c04b6 100644 --- a/packages/core/src/engines/types.ts +++ b/packages/core/src/engines/types.ts @@ -4,22 +4,24 @@ import type { ConfigFileEngine } from '../schema/types'; import type { RnvTask, RnvTaskMap } from '../tasks/types'; import type { RnvPlatformKey } from '../types'; +export type RnvEnginePlatforms = Partial>; + export type CreateRnvEngineOpts = { originalTemplatePlatformsDir?: string; - platforms: Partial>; + platforms: RnvEnginePlatforms; config: ConfigFileEngine; tasks: ReadonlyArray>; rootPath?: string; originalTemplatePlatformProjectDir?: string; - projectDirName: string; - runtimeExtraProps: Record; + projectDirName?: string; + runtimeExtraProps?: Record; outputDirName?: string; - serverDirName: string; + serverDirName?: string; }; export type RnvEngine = { originalTemplatePlatformsDir?: string; - platforms: Partial>; + platforms: RnvEnginePlatforms; config: ConfigFileEngine; tasks: RnvTaskMap; rootPath?: string; diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index 3abb401d99..cc2c5bdca5 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -13,10 +13,12 @@ export const DEFAULT_TASK_DESCRIPTIONS: Record = { const _RnvTaskOptions = { // CORE -------------------------------- help: { + key: 'help', shortcut: 'h', description: 'Displays help info for particular command', }, info: { + key: 'info', shortcut: 'i', isValueType: true, description: 'Show full debug Info', @@ -26,6 +28,7 @@ const _RnvTaskOptions = { description: 'Print exec commands in full', }, platform: { + key: 'platform', shortcut: 'p', isValueType: true, description: 'select specific Platform', @@ -38,13 +41,16 @@ const _RnvTaskOptions = { examples: ['--skipTasks "configure,export"', '--skipTasks deploy'], }, only: { + key: 'only', shortcut: 'o', description: 'run Only top command (Skip dependencies)', }, ci: { + key: 'ci', description: 'CI/CD flag so it wont ask questions', }, mono: { + key: 'mono', description: 'Monochrome console output without chalk', }, maxErrorLength: { @@ -54,17 +60,21 @@ const _RnvTaskOptions = { description: 'Specify how many characters each error should display. Default 200', }, json: { + key: 'json', description: 'Outputs the result as json', }, yes: { + key: 'yes', description: 'Default all prompts to yes', }, telemetryDebug: { + key: 'telemetry-debug', description: 'If you have telemetry enabled, will print out exactly what is being collected into the console', }, // OTHERS 1st -------------------------------- // Still present in core packageManager: { + key: 'package-manager', isValueType: true, isRequired: true, options: ['yarn', 'npm'], @@ -76,86 +86,104 @@ const _RnvTaskOptions = { description: 'Ensures you can use local npx rnv version after the command is done', }, unlinked: { + key: 'unlinked', description: 'Force engines to be loaded from node_modules rather than locally', }, configName: { + key: 'config-name', isValueType: true, isRequired: true, description: 'Use custom name for ./renative.json. (applies only at root level)', }, skipDependencyCheck: { + key: 'skip-dependency-check', description: 'Skips auto update of npm dependencies if mismatch found', }, appConfigID: { + key: 'app-config-id', shortcut: 'c', isValueType: true, description: 'select specific app Config id', }, skipRnvCheck: { + key: 'skip-rnv-check', description: 'Skips auto update of rnv dependencies if mismatch found', }, scheme: { + key: 'scheme', shortcut: 's', isValueType: true, description: 'select build Scheme', }, engine: { + key: 'engine', shortcut: 'e', isValueType: true, isRequired: true, description: 'engine to be used ie "engine-rn"', }, exeMethod: { + key: 'exe-method', shortcut: 'x', isValueType: true, description: 'eXecutable method in buildHooks', }, reset: { + key: 'reset', shortcut: 'r', description: 'also perform reset of platform build', }, resetHard: { + key: 'reset-hard', shortcut: 'R', description: 'also perform reset of platform platform and platform assets', }, resetAssets: { + key: 'reset-assets', shortcut: 'a', description: 'also perform reset of platform assets', }, hooks: { + key: 'hooks', description: 'Force rebuild hooks', }, // OTHERS 2nd -------------------------------- // Still present in core but ONLY in runtime defaults hostIp: { + key: 'host-ip', isValueType: true, isRequired: true, description: 'Custom IP override', }, target: { + key: 'target', shortcut: 't', isValueType: true, description: 'select specific Target device/simulator', }, host: { + key: 'host', shortcut: 'H', isValueType: true, isRequired: true, description: 'custom Host ip', }, port: { + key: 'port', shortcut: 'P', isValueType: true, isRequired: true, description: 'custom Port', }, hosted: { + key: 'hosted', description: 'Run in a hosted environment (skip budleAssets)', }, // ENGINE-CORE -------------------------------- // ENGINE-CORE + SDK-APPLE -------------------------------- key: { + key: 'key', shortcut: 'k', isValueType: true, isRequired: true, @@ -163,11 +191,13 @@ const _RnvTaskOptions = { }, // SDK-WEBPACK -------------------------------- debugIp: { + key: 'debug-ip', isValueType: true, isRequired: true, description: '(optional) overwrite the ip to which the remote debugger will connect', }, debug: { + key: 'debug', shortcut: 'D', isValueType: true, description: 'enable or disable remote debugger.', @@ -180,61 +210,73 @@ const _RnvTaskOptions = { }, // SDK-APPLE -------------------------------- updatePods: { + key: 'update-pods', shortcut: 'u', description: 'Force update dependencies (iOS only)', }, keychain: { + key: 'keychain', isValueType: true, isRequired: true, description: 'Name of the keychain', }, provisioningStyle: { + key: 'provisioning-style', isValueType: true, isRequired: true, description: 'Set provisioningStyle (Automatic | Manual)', }, codeSignIdentity: { + key: 'code-sign-identity', isValueType: true, isRequired: true, description: 'Set codeSignIdentity (ie iPhone Distribution)', }, provisionProfileSpecifier: { + key: 'provision-profile-specifier', isValueType: true, isRequired: true, description: 'Name of provisionProfile', }, xcodebuildArgs: { + key: 'xcodebuild-args', isValueType: true, isRequired: true, description: 'pass down custom xcodebuild arguments', }, xcodebuildArchiveArgs: { + key: 'xcodebuild-archive-args', isValueType: true, isRequired: true, description: 'pass down custom xcodebuild arguments', }, xcodebuildExportArgs: { + key: 'xcodebuild-export-args', isValueType: true, isRequired: true, description: 'pass down custom xcodebuild arguments', }, // SDK-APPLE + SDK-ANDROID -------------------------------- skipTargetCheck: { + key: 'skip-target-check', description: 'Skip Android target check, just display the raw adb devices to choose from', }, filter: { + key: 'filter', shortcut: 'f', isValueType: true, isRequired: true, description: 'Filter value', }, device: { + key: 'device', shortcut: 'd', isValueType: true, description: 'select connected Device', }, // SDK-ANDROID -------------------------------- resetAdb: { + key: 'reset-adb', description: 'Forces to reset android adb', }, diff --git a/packages/engine-core/src/index.ts b/packages/engine-core/src/index.ts index 899a9ced50..c076842b09 100644 --- a/packages/engine-core/src/index.ts +++ b/packages/engine-core/src/index.ts @@ -37,7 +37,7 @@ import taskTelemetryEnable from './tasks/telemetry/taskTelemetryEnable'; import taskTelemetryDisable from './tasks/telemetry/taskTelemetryDisable'; import taskSwitch from './tasks/app/taskAppSwitch'; -const CNF: ConfigFileEngine = { +const Config: ConfigFileEngine = { id: 'engine-core', platforms: {}, npm: {}, @@ -47,7 +47,6 @@ const CNF: ConfigFileEngine = { }; const Engine = createRnvEngine({ - runtimeExtraProps: {}, serverDirName: '', tasks: [ taskCryptoDecrypt, @@ -87,34 +86,15 @@ const Engine = createRnvEngine({ taskTelemetryDisable, taskSwitch, ], - config: CNF, + config: Config, // package: '', projectDirName: '', // ejectPlatform: null, platforms: {}, rootPath: __dirname, }); + // export newly decorated type for getContext proxy with decorated types export type GetContext = GetContextType; -// export type GetContext = GetContextType; - -// type Eng = typeof Engine; -// type EngTasks = Eng['tasks']; -// type EngOpts = Required['options'][number]>['key']; - -// type Booo = T['tasks'][string]; - -// type Booo2 = Readonly['options']>; - -// type Booo2 = Readonly['options']> -// type Booo2 = Readonly['options']> -// type Booo2 = Readonly['options']> - -// type Booo3 = Readonly>[number] - -// const xxx: EngOpts = 'dsdfsdfsdfsd'; -// const xxx2: EngTasks; -// console.log('DDJDJD', xxx, xxx2['ddd'].beforeDependsOn); - export default Engine; diff --git a/packages/engine-lightning/src/config.ts b/packages/engine-lightning/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-lightning/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-lightning/src/getContext.ts b/packages/engine-lightning/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-lightning/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-lightning/src/index.ts b/packages/engine-lightning/src/index.ts index 54c88e9bdd..f7b933bae5 100644 --- a/packages/engine-lightning/src/index.ts +++ b/packages/engine-lightning/src/index.ts @@ -1,33 +1,30 @@ -import { RnvEngine, generateEngineExtensions, generateRnvTaskMap } from '@rnv/core'; +import { GetContextType, createRnvEngine } from '@rnv/core'; import { Tasks as TasksSdkWebOS } from '@rnv/sdk-webos'; import { Tasks as TasksSdkTizen } from '@rnv/sdk-tizen'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; -//@ts-ignore -import CNF from '../renative.engine.json'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; -const Engine: RnvEngine = { - tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen], PKG), - config: CNF, +const Engine = createRnvEngine({ + tasks: [taskRun, taskBuild, taskConfigure, ...TasksSdkWebOS, ...TasksSdkTizen], + config: Config, projectDirName: 'project', serverDirName: 'server', - runtimeExtraProps: {}, - // ejectPlatform: null, platforms: { tizen: { defaultPort: 8087, isWebHosted: true, - extensions: generateEngineExtensions(['lng', 'tizen.tv', 'web.tv', 'tv', 'tizen', 'tv.web', 'web'], CNF), + extensions: ['lng', 'tizen.tv', 'web.tv', 'tv', 'tizen', 'tv.web', 'web'], }, webos: { defaultPort: 8088, isWebHosted: true, - extensions: generateEngineExtensions(['lng', 'webos.tv', 'web.tv', 'tv', 'webos', 'tv.web', 'web'], CNF), + extensions: ['lng', 'webos.tv', 'web.tv', 'tv', 'webos', 'tv.web', 'web'], }, }, -}; +}); + +export type GetContext = GetContextType; export default Engine; diff --git a/packages/engine-rn-electron/src/config.ts b/packages/engine-rn-electron/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-rn-electron/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-rn-electron/src/getContext.ts b/packages/engine-rn-electron/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-rn-electron/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-rn-electron/src/index.ts b/packages/engine-rn-electron/src/index.ts index ca5c30ac1b..1fb6529f34 100644 --- a/packages/engine-rn-electron/src/index.ts +++ b/packages/engine-rn-electron/src/index.ts @@ -1,50 +1,35 @@ -import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; -//@ts-ignore -import CNF from '../renative.engine.json'; +import { createRnvEngine, GetContextType } from '@rnv/core'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskExport from './tasks/taskExport'; import taskRun from './tasks/taskRun'; import taskStart from './tasks/taskStart'; import { withRNVBabel } from './adapter'; +import { Config } from './config'; -//@ts-ignore -import PKG from '../package.json'; - -const Engine: RnvEngine = { - tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], PKG), - config: CNF, - projectDirName: '', - serverDirName: '', - // ejectPlatform: null, - runtimeExtraProps: {}, +const Engine = createRnvEngine({ + tasks: [taskRun, taskBuild, taskConfigure, taskStart, taskExport], + config: Config, platforms: { macos: { defaultPort: 8086, isWebHosted: true, - extensions: generateEngineExtensions( - ['macos.desktop', 'desktop', 'macos', 'desktop.web', 'electron', 'web'], - CNF - ), + extensions: ['macos.desktop', 'desktop', 'macos', 'desktop.web', 'electron', 'web'], }, windows: { defaultPort: 8092, isWebHosted: true, - extensions: generateEngineExtensions( - ['windows.desktop', 'desktop', 'windows', 'desktop.web', 'electron', 'web'], - CNF - ), + extensions: ['windows.desktop', 'desktop', 'windows', 'desktop.web', 'electron', 'web'], }, linux: { defaultPort: 8100, isWebHosted: true, - extensions: generateEngineExtensions( - ['linux.desktop', 'desktop', 'linux', 'desktop.web', 'electron', 'web'], - CNF - ), + extensions: ['linux.desktop', 'desktop', 'linux', 'desktop.web', 'electron', 'web'], }, }, -}; +}); + +export type GetContext = GetContextType; export { withRNVBabel }; diff --git a/packages/engine-rn-macos/src/config.ts b/packages/engine-rn-macos/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-rn-macos/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-rn-macos/src/getContext.ts b/packages/engine-rn-macos/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-rn-macos/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-rn-macos/src/index.ts b/packages/engine-rn-macos/src/index.ts index 5bf56fb361..2278c5c038 100644 --- a/packages/engine-rn-macos/src/index.ts +++ b/packages/engine-rn-macos/src/index.ts @@ -1,17 +1,14 @@ -import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; +import { createRnvEngine, GetContextType } from '@rnv/core'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; -//@ts-ignore -import CNF from '../renative.engine.json'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; -const Engine: RnvEngine = { - tasks: generateRnvTaskMap([...TasksSdkApple, ...TasksSdkReactNative], PKG), - config: CNF, +const Engine = createRnvEngine({ + tasks: [...TasksSdkApple, ...TasksSdkReactNative], + config: Config, runtimeExtraProps: { reactNativePackageName: 'react-native', reactNativeMetroConfigName: 'metro.config.js', @@ -22,13 +19,12 @@ const Engine: RnvEngine = { platforms: { macos: { defaultPort: 8086, - extensions: generateEngineExtensions( - ['macos.desktop', 'desktop', 'macos', 'desktop.native', 'native'], - CNF - ), + extensions: ['macos.desktop', 'desktop', 'macos', 'desktop.native', 'native'], }, }, -}; +}); + +export type GetContext = GetContextType; export { withRNVMetro, withRNVBabel, withRNVRNConfig }; diff --git a/packages/engine-rn-next/src/config.ts b/packages/engine-rn-next/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-rn-next/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-rn-next/src/getContext.ts b/packages/engine-rn-next/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-rn-next/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-rn-next/src/index.ts b/packages/engine-rn-next/src/index.ts index c2e8d5dce2..03fe18bbe0 100644 --- a/packages/engine-rn-next/src/index.ts +++ b/packages/engine-rn-next/src/index.ts @@ -1,4 +1,4 @@ -import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; +import { createRnvEngine, GetContextType } from '@rnv/core'; import { withRNVNext } from './adapters/nextAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import taskRun from './tasks/taskRun'; @@ -6,33 +6,26 @@ import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskExport from './tasks/taskExport'; -//@ts-ignore -import CNF from '../renative.engine.json'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; -const Engine: RnvEngine = { - tasks: generateRnvTaskMap([taskRun, taskBuild, taskConfigure, taskStart, taskExport], PKG), - config: CNF, - projectDirName: '', - runtimeExtraProps: {}, - serverDirName: '', +const Engine = createRnvEngine({ + tasks: [taskRun, taskBuild, taskConfigure, taskStart, taskExport], + config: Config, platforms: { web: { defaultPort: 8080, isWebHosted: true, - extensions: generateEngineExtensions( - ['web.browser', 'browser', 'server.next', 'server.web', 'next', 'browser.web', 'web'], - CNF - ), + extensions: ['web.browser', 'browser', 'server.next', 'server.web', 'next', 'browser.web', 'web'], }, chromecast: { defaultPort: 8095, isWebHosted: true, - extensions: generateEngineExtensions(['chromecast.tv', 'web.tv', 'tv', 'chromecast', 'tv.web', 'web'], CNF), + extensions: ['chromecast.tv', 'web.tv', 'tv', 'chromecast', 'tv.web', 'web'], }, }, -}; +}); + +export type GetContext = GetContextType; export { withRNVNext, withRNVBabel }; diff --git a/packages/engine-rn-tvos/src/config.ts b/packages/engine-rn-tvos/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-rn-tvos/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-rn-tvos/src/getContext.ts b/packages/engine-rn-tvos/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-rn-tvos/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-rn-tvos/src/index.ts b/packages/engine-rn-tvos/src/index.ts index f19c464457..0dc5050764 100644 --- a/packages/engine-rn-tvos/src/index.ts +++ b/packages/engine-rn-tvos/src/index.ts @@ -1,18 +1,15 @@ -import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; +import { createRnvEngine, GetContextType } from '@rnv/core'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import { Tasks as TasksSdkReactNative } from '@rnv/sdk-react-native'; import { withRNVBabel } from './adapters/babelAdapter'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVRNConfig } from '@rnv/sdk-react-native'; -//@ts-ignore -import CNF from '../renative.engine.json'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; -const Engine: RnvEngine = { - tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], PKG), - config: CNF, +const Engine = createRnvEngine({ + tasks: [...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], + config: Config, runtimeExtraProps: { reactNativePackageName: 'react-native-tvos', reactNativeMetroConfigName: 'metro.config.js', @@ -23,24 +20,20 @@ const Engine: RnvEngine = { platforms: { tvos: { defaultPort: 8089, - extensions: generateEngineExtensions(['tvos.tv', 'tv', 'tvos', 'tv.native', 'native'], CNF), + extensions: ['tvos.tv', 'tv', 'tvos', 'tv.native', 'native'], }, androidtv: { defaultPort: 8084, - extensions: generateEngineExtensions( - ['androidtv.tv', 'tv', 'androidtv', 'android', 'tv.native', 'native'], - CNF - ), + extensions: ['androidtv.tv', 'tv', 'androidtv', 'android', 'tv.native', 'native'], }, firetv: { defaultPort: 8098, - extensions: generateEngineExtensions( - ['firetv.tv', 'androidtv.tv', 'tv', 'firetv', 'androidtv', 'android', 'tv.native', 'native'], - CNF - ), + extensions: ['firetv.tv', 'androidtv.tv', 'tv', 'firetv', 'androidtv', 'android', 'tv.native', 'native'], }, }, -}; +}); + +export type GetContext = GetContextType; export { withRNVMetro, withRNVBabel, withRNVRNConfig }; diff --git a/packages/engine-rn-web/src/config.ts b/packages/engine-rn-web/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-rn-web/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-rn-web/src/getContext.ts b/packages/engine-rn-web/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-rn-web/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-rn-web/src/index.ts b/packages/engine-rn-web/src/index.ts index b1dccc6540..8a5c40f415 100644 --- a/packages/engine-rn-web/src/index.ts +++ b/packages/engine-rn-web/src/index.ts @@ -1,76 +1,64 @@ -import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; +import { createRnvEngine, GetContextType } from '@rnv/core'; import { Tasks as TasksSdkWebOS } from '@rnv/sdk-webos'; import { Tasks as TasksSdkTizen } from '@rnv/sdk-tizen'; import { withRNVBabel, withRNVWebpack } from './adapter'; -//@ts-ignore -import CNF from '../renative.engine.json'; import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; import taskConfigure from './tasks/taskConfigure'; import taskStart from './tasks/taskStart'; import taskDebug from './tasks/taskDebug'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; -const Engine: RnvEngine = { - tasks: generateRnvTaskMap( - [taskRun, taskBuild, taskConfigure, taskStart, taskDebug, ...TasksSdkWebOS, ...TasksSdkTizen], - PKG - ), - config: CNF, - projectDirName: '', - serverDirName: '', - runtimeExtraProps: {}, +const Engine = createRnvEngine({ + tasks: [taskRun, taskBuild, taskConfigure, taskStart, taskDebug, ...TasksSdkWebOS, ...TasksSdkTizen], + config: Config, platforms: { web: { defaultPort: 8080, isWebHosted: true, - extensions: generateEngineExtensions(['web.browser', 'browser', 'browser.web', 'web'], CNF), + extensions: ['web.browser', 'browser', 'browser.web', 'web'], }, chromecast: { defaultPort: 8095, isWebHosted: true, - extensions: generateEngineExtensions(['chromecast.tv', 'web.tv', 'tv', 'chromecast', 'tv.web', 'web'], CNF), + extensions: ['chromecast.tv', 'web.tv', 'tv', 'chromecast', 'tv.web', 'web'], }, tizen: { defaultPort: 8087, isWebHosted: true, - extensions: generateEngineExtensions(['tizen.tv', 'web.tv', 'tv', 'tizen', 'tv.web', 'web'], CNF), + extensions: ['tizen.tv', 'web.tv', 'tv', 'tizen', 'tv.web', 'web'], }, webtv: { defaultPort: 8096, isWebHosted: true, - extensions: generateEngineExtensions(['webtv.tv', 'web.tv', 'tv', 'webtv', 'tv.web', 'web'], CNF), + extensions: ['webtv.tv', 'web.tv', 'tv', 'webtv', 'tv.web', 'web'], }, tizenmobile: { defaultPort: 8091, isWebHosted: true, - extensions: generateEngineExtensions( - ['tizenmobile.mobile', 'mobile', 'tizenmobile', 'mobile.web', 'native'], - CNF - ), + extensions: ['tizenmobile.mobile', 'mobile', 'tizenmobile', 'mobile.web', 'native'], }, tizenwatch: { defaultPort: 8090, isWebHosted: true, - extensions: generateEngineExtensions( - ['tizenwatch.watch', 'web.watch', 'watch', 'tizenwatch', 'watch.web', 'web'], - CNF - ), + extensions: ['tizenwatch.watch', 'web.watch', 'watch', 'tizenwatch', 'watch.web', 'web'], }, webos: { defaultPort: 8088, isWebHosted: true, - extensions: generateEngineExtensions(['webos.tv', 'web.tv', 'tv', 'webos', 'tv.web', 'web'], CNF), + extensions: ['webos.tv', 'web.tv', 'tv', 'webos', 'tv.web', 'web'], }, kaios: { defaultPort: 8093, isWebHosted: true, - extensions: generateEngineExtensions(['kaios.mobile', 'mobile', 'kaios', 'mobile.web', 'native'], CNF), + extensions: ['kaios.mobile', 'mobile', 'kaios', 'mobile.web', 'native'], }, }, -}; +}); +export type GetContext = GetContextType; + +//TODO: export this withing engine export { withRNVBabel, withRNVWebpack }; export default Engine; diff --git a/packages/engine-rn-windows/src/config.ts b/packages/engine-rn-windows/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-rn-windows/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-rn-windows/src/getContext.ts b/packages/engine-rn-windows/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-rn-windows/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-rn-windows/src/index.ts b/packages/engine-rn-windows/src/index.ts index 7c6cb50013..39f3cdd7fb 100644 --- a/packages/engine-rn-windows/src/index.ts +++ b/packages/engine-rn-windows/src/index.ts @@ -1,4 +1,4 @@ -import { RnvEngine, generateRnvTaskMap, generateEngineExtensions } from '@rnv/core'; +import { createRnvEngine, GetContextType } from '@rnv/core'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; import taskBuild from './tasks/taskBuild'; @@ -7,32 +7,25 @@ import taskExport from './tasks/taskExport'; import taskPackage from './tasks/taskPackage'; import taskRun from './tasks/taskRun'; import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-native'; -//@ts-ignore -import CNF from '../renative.engine.json'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; -const Engine: RnvEngine = { - tasks: generateRnvTaskMap( - [taskRun, taskPackage, taskBuild, taskConfigure, taskExport, ...TasksSdkReactNative], - PKG - ), - config: CNF, - projectDirName: '', - runtimeExtraProps: {}, - serverDirName: '', +const Engine = createRnvEngine({ + tasks: [taskRun, taskPackage, taskBuild, taskConfigure, taskExport, ...TasksSdkReactNative], + config: Config, platforms: { windows: { defaultPort: 8092, - extensions: generateEngineExtensions(['windows.desktop', 'windows', 'win', 'desktop'], CNF), + extensions: ['windows.desktop', 'windows', 'win', 'desktop'], }, xbox: { defaultPort: 8099, // What works on windows will work on xbox, but it needs to be scaled as for TVs - extensions: generateEngineExtensions(['xbox', 'windows', 'win', 'tv', 'desktop'], CNF), + extensions: ['xbox', 'windows', 'win', 'tv', 'desktop'], }, }, -}; +}); + +export type GetContext = GetContextType; export { withRNVMetro, withRNVBabel, withRNVRNConfig }; diff --git a/packages/engine-rn/src/config.ts b/packages/engine-rn/src/config.ts new file mode 100644 index 0000000000..6eadb226bb --- /dev/null +++ b/packages/engine-rn/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileEngine } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.engine.json'; +export const Config: ConfigFileEngine = CNF; diff --git a/packages/engine-rn/src/getContext.ts b/packages/engine-rn/src/getContext.ts new file mode 100644 index 0000000000..f04c039d3a --- /dev/null +++ b/packages/engine-rn/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from '.'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/engine-rn/src/index.ts b/packages/engine-rn/src/index.ts index 0ec1e3573a..af6e8034bb 100644 --- a/packages/engine-rn/src/index.ts +++ b/packages/engine-rn/src/index.ts @@ -1,68 +1,48 @@ -import { generateEngineExtensions, generateRnvTaskMap, RnvEngine } from '@rnv/core'; +import { createRnvEngine, GetContextType } from '@rnv/core'; import { Tasks as TasksSdkAndroid } from '@rnv/sdk-android'; import { Tasks as TasksSdkApple } from '@rnv/sdk-apple'; import { Tasks as TasksSdkReactNative, withRNVRNConfig } from '@rnv/sdk-react-native'; import { withRNVMetro } from './adapters/metroAdapter'; import { withRNVBabel } from './adapters/babelAdapter'; -//@ts-ignore -import CNF from '../renative.engine.json'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; -const Engine: RnvEngine = { - tasks: generateRnvTaskMap([...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], PKG), - config: CNF, +const Engine = createRnvEngine({ + tasks: [...TasksSdkAndroid, ...TasksSdkApple, ...TasksSdkReactNative], + config: Config, runtimeExtraProps: { reactNativePackageName: 'react-native', reactNativeMetroConfigName: 'metro.config.js', xcodeProjectName: 'RNVApp', }, - projectDirName: '', - serverDirName: '', - // package: '', - // ejectPlatform: null, platforms: { ios: { defaultPort: 8082, - extensions: generateEngineExtensions(['ios.mobile', 'mobile', 'ios', 'mobile.native', 'native'], CNF), + extensions: ['ios.mobile', 'mobile', 'ios', 'mobile.native', 'native'], }, android: { defaultPort: 8083, - extensions: generateEngineExtensions( - ['android.mobile', 'mobile', 'android', 'mobile.native', 'native'], - CNF - ), + extensions: ['android.mobile', 'mobile', 'android', 'mobile.native', 'native'], }, androidtv: { defaultPort: 8084, - extensions: generateEngineExtensions( - ['androidtv.tv', 'tv', 'androidtv', 'android', 'tv.native', 'native'], - CNF - ), + extensions: ['androidtv.tv', 'tv', 'androidtv', 'android', 'tv.native', 'native'], }, firetv: { defaultPort: 8098, - extensions: generateEngineExtensions( - ['firetv.tv', 'androidtv.tv', 'tv', 'firetv', 'androidtv', 'android', 'tv.native', 'native'], - CNF - ), + extensions: ['firetv.tv', 'androidtv.tv', 'tv', 'firetv', 'androidtv', 'android', 'tv.native', 'native'], }, androidwear: { defaultPort: 8084, - extensions: generateEngineExtensions( - ['androidwear.watch', 'watch', 'androidwear', 'android', 'watch.native', 'native'], - CNF - ), + extensions: ['androidwear.watch', 'watch', 'androidwear', 'android', 'watch.native', 'native'], }, macos: { defaultPort: 8086, - extensions: generateEngineExtensions( - ['macos.desktop', 'desktop', 'macos', 'ios', 'desktop.native', 'native'], - CNF - ), + extensions: ['macos.desktop', 'desktop', 'macos', 'ios', 'desktop.native', 'native'], }, }, -}; +}); + +export type GetContext = GetContextType; export default Engine; diff --git a/packages/integration-docker/src/config.ts b/packages/integration-docker/src/config.ts new file mode 100644 index 0000000000..282475cf5e --- /dev/null +++ b/packages/integration-docker/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileIntegration } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.integration.json'; +export const Config: ConfigFileIntegration = CNF; diff --git a/packages/integration-docker/src/index.ts b/packages/integration-docker/src/index.ts index 87ee310f87..23771efa83 100644 --- a/packages/integration-docker/src/index.ts +++ b/packages/integration-docker/src/index.ts @@ -1,14 +1,11 @@ import taskDockerDeploy from './tasks/taskDockerDeploy'; import taskDockerExport from './tasks/taskDockerExport'; import { RnvIntegration, generateRnvTaskMap } from '@rnv/core'; -//@ts-ignore -import CNF from '../renative.integration.json'; -//@ts-ignore -import PKG from '../package.json'; +import { Config } from './config'; const Integration: RnvIntegration = { - tasks: generateRnvTaskMap([taskDockerExport, taskDockerDeploy], PKG), - config: CNF, + tasks: generateRnvTaskMap([taskDockerExport, taskDockerDeploy], Config), + config: Config, }; export default Integration; diff --git a/packages/integration-starter/src/config.ts b/packages/integration-starter/src/config.ts new file mode 100644 index 0000000000..282475cf5e --- /dev/null +++ b/packages/integration-starter/src/config.ts @@ -0,0 +1,4 @@ +import type { ConfigFileIntegration } from '@rnv/core'; +//@ts-ignore +import CNF from '../renative.integration.json'; +export const Config: ConfigFileIntegration = CNF; diff --git a/packages/integration-starter/src/index.ts b/packages/integration-starter/src/index.ts index aa2af4d779..6836a86eb9 100644 --- a/packages/integration-starter/src/index.ts +++ b/packages/integration-starter/src/index.ts @@ -1,14 +1,11 @@ import taskStarterHello from './tasks/taskStarterHello'; import taskSingleCommand from './tasks/taskSingleCommand'; -//@ts-ignore -import CNF from '../renative.integration.json'; -//@ts-ignore -import PKG from '../package.json'; import { RnvIntegration, generateRnvTaskMap } from '@rnv/core'; +import { Config } from './config'; const Integration: RnvIntegration = { - tasks: generateRnvTaskMap([taskStarterHello, taskSingleCommand], PKG), - config: CNF, + tasks: generateRnvTaskMap([taskStarterHello, taskSingleCommand], Config), + config: Config, }; export default Integration; From c197fcf561a974f3fa1c7b1c0ae1e77f75e4c183 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 00:01:18 +0200 Subject: [PATCH 168/175] migrate options to sdks / engines --- packages/core/src/context/types.ts | 4 + packages/core/src/engines/types.ts | 7 +- packages/core/src/index.ts | 3 + packages/core/src/sdks/sdkCreator.ts | 8 ++ packages/core/src/sdks/types.ts | 11 +++ packages/core/src/tasks/constants.ts | 83 +------------------ packages/core/src/tasks/types.ts | 4 +- .../engine-core/src/tasks/crypto/common.ts | 10 +++ .../src/tasks/crypto/taskCryptoDecrypt.ts | 3 +- .../src/tasks/crypto/taskCryptoEncrypt.ts | 11 +-- packages/sdk-apple/src/common.ts | 74 ++++++++++++++++- packages/sdk-apple/src/getContext.ts | 4 + packages/sdk-apple/src/index.ts | 8 ++ packages/sdk-apple/src/runner.ts | 10 +-- packages/sdk-apple/src/tasks/taskBuild.ts | 6 +- packages/sdk-apple/src/tasks/taskConfigure.ts | 3 +- packages/sdk-apple/src/tasks/taskEject.ts | 6 +- packages/sdk-apple/src/tasks/taskExport.ts | 6 +- packages/sdk-apple/src/tasks/taskPackage.ts | 6 +- packages/sdk-apple/src/tasks/taskRun.ts | 6 +- packages/sdk-apple/src/xcodeParser.ts | 2 +- packages/sdk-react-native/src/iosRunner.ts | 15 ++-- 22 files changed, 165 insertions(+), 125 deletions(-) create mode 100644 packages/core/src/sdks/sdkCreator.ts create mode 100644 packages/core/src/sdks/types.ts create mode 100644 packages/sdk-apple/src/getContext.ts diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 74e64da7cb..06207e9dd5 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -346,3 +346,7 @@ export type RnvContextPlatform = { }; export type RnvContextFileKey = 'config' | 'configLocal' | 'configPrivate'; + +export type GetReturnType = Type extends (...args: never[]) => infer Return ? Return : never; + +export type GetContextType = () => GetReturnType; diff --git a/packages/core/src/engines/types.ts b/packages/core/src/engines/types.ts index b0911c04b6..e671afa3b7 100644 --- a/packages/core/src/engines/types.ts +++ b/packages/core/src/engines/types.ts @@ -1,5 +1,4 @@ -// import type { RnvContext } from '../context/types'; -import { RnvContext } from '../context/types'; +import type { RnvContext } from '../context/types'; import type { ConfigFileEngine } from '../schema/types'; import type { RnvTask, RnvTaskMap } from '../tasks/types'; import type { RnvPlatformKey } from '../types'; @@ -53,10 +52,6 @@ export type RnvEngineInstallConfig = { configPath?: string; }; -export type GetReturnType = Type extends (...args: never[]) => infer Return ? Return : never; - -export type GetContextType = () => GetReturnType; - // export type GetContextType = () => RnvContext< // any, // Extract['options'], string> diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index cc5e636442..823ed2437b 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -55,6 +55,8 @@ export * from './engines'; export * from './engines/engineCreator'; export * from './engines/dependencyResolver'; +export * from './sdks/sdkCreator'; + export * from './system/exec'; export * from './system/fs'; export * from './system/is'; @@ -83,6 +85,7 @@ export * from './enums/platformName'; //TYPES export * from './engines/types'; +export * from './sdks/types'; export * from './context/types'; export * from './plugins/types'; export * from './projects/types'; diff --git a/packages/core/src/sdks/sdkCreator.ts b/packages/core/src/sdks/sdkCreator.ts new file mode 100644 index 0000000000..6226c84502 --- /dev/null +++ b/packages/core/src/sdks/sdkCreator.ts @@ -0,0 +1,8 @@ +import { getContext } from '../context/provider'; +import type { CreateRnvSdkOpts, RnvSdk } from './types'; + +export const createRnvSDK = (opts: CreateRnvSdkOpts) => { + const sdk: RnvSdk = { ...opts, getContext: () => getContext() }; + + return sdk; +}; diff --git a/packages/core/src/sdks/types.ts b/packages/core/src/sdks/types.ts new file mode 100644 index 0000000000..a102bb36eb --- /dev/null +++ b/packages/core/src/sdks/types.ts @@ -0,0 +1,11 @@ +import type { RnvContext } from '../context/types'; +import type { RnvTask } from '../tasks/types'; + +export type CreateRnvSdkOpts = { + tasks: ReadonlyArray>; +}; + +export type RnvSdk = { + tasks: ReadonlyArray>; + getContext: () => RnvContext; +}; diff --git a/packages/core/src/tasks/constants.ts b/packages/core/src/tasks/constants.ts index cc2c5bdca5..c20fae2156 100644 --- a/packages/core/src/tasks/constants.ts +++ b/packages/core/src/tasks/constants.ts @@ -179,16 +179,6 @@ const _RnvTaskOptions = { key: 'hosted', description: 'Run in a hosted environment (skip budleAssets)', }, - // ENGINE-CORE -------------------------------- - - // ENGINE-CORE + SDK-APPLE -------------------------------- - key: { - key: 'key', - shortcut: 'k', - isValueType: true, - isRequired: true, - description: 'Pass the key/password', - }, // SDK-WEBPACK -------------------------------- debugIp: { key: 'debug-ip', @@ -208,54 +198,6 @@ const _RnvTaskOptions = { '--debug //run remote debug with default preference (chii)', ], }, - // SDK-APPLE -------------------------------- - updatePods: { - key: 'update-pods', - shortcut: 'u', - description: 'Force update dependencies (iOS only)', - }, - keychain: { - key: 'keychain', - isValueType: true, - isRequired: true, - description: 'Name of the keychain', - }, - provisioningStyle: { - key: 'provisioning-style', - isValueType: true, - isRequired: true, - description: 'Set provisioningStyle (Automatic | Manual)', - }, - codeSignIdentity: { - key: 'code-sign-identity', - isValueType: true, - isRequired: true, - description: 'Set codeSignIdentity (ie iPhone Distribution)', - }, - provisionProfileSpecifier: { - key: 'provision-profile-specifier', - isValueType: true, - isRequired: true, - description: 'Name of provisionProfile', - }, - xcodebuildArgs: { - key: 'xcodebuild-args', - isValueType: true, - isRequired: true, - description: 'pass down custom xcodebuild arguments', - }, - xcodebuildArchiveArgs: { - key: 'xcodebuild-archive-args', - isValueType: true, - isRequired: true, - description: 'pass down custom xcodebuild arguments', - }, - xcodebuildExportArgs: { - key: 'xcodebuild-export-args', - isValueType: true, - isRequired: true, - description: 'pass down custom xcodebuild arguments', - }, // SDK-APPLE + SDK-ANDROID -------------------------------- skipTargetCheck: { key: 'skip-target-check', @@ -279,28 +221,6 @@ const _RnvTaskOptions = { key: 'reset-adb', description: 'Forces to reset android adb', }, - - // DEPRECATED & REMOVED -------------------------------- - - // global: { - // shortcut: 'G', - // description: 'Flag for setting a config value for all RNV projects', - // }, - // skipNotifications: { - // description: 'Skip sending any integrated notifications', - // }, - // analyzer: { - // description: 'Enable real-time bundle analyzer', - // }, - // blueprint: { - // shortcut: 'b', - // isValueType: true, - // description: 'Blueprint for targets', - // }, - // list: { - // shortcut: 'l', - // description: 'return List of items related to command', - // }, }; export type ProgramOptionsKey = keyof typeof _RnvTaskOptions; @@ -321,14 +241,13 @@ export type ParamKeys = Partial< export const RnvTaskCoreOptionPresets = { withCore: (arr?: Array) => [ + RnvTaskOptions.platform, // platform is necessary to be accepted as base for the `rnv` command to work with enginie plugins RnvTaskOptions.info, RnvTaskOptions.ci, RnvTaskOptions.mono, RnvTaskOptions.maxErrorLength, RnvTaskOptions.only, RnvTaskOptions.yes, - // platform is necessary to be accepted as base for the `rnv` command to work with enginie plugins - RnvTaskOptions.platform, RnvTaskOptions.help, RnvTaskOptions.printExec, ].concat(arr || []), diff --git a/packages/core/src/tasks/types.ts b/packages/core/src/tasks/types.ts index f5080981a7..949898f999 100644 --- a/packages/core/src/tasks/types.ts +++ b/packages/core/src/tasks/types.ts @@ -10,7 +10,7 @@ export type CreateRnvTaskOpt = { description: string; forceBuildHookRebuild?: boolean; beforeDependsOn?: RnvTaskFn; - fn?: RnvTaskFn; + fn?: RnvTaskFn; fnHelp?: RnvTaskHelpFn; isPrivate?: boolean; isPriorityOrder?: boolean; @@ -26,7 +26,7 @@ export type RnvTask = { description: string; forceBuildHookRebuild?: boolean; beforeDependsOn?: RnvTaskFn; - fn?: RnvTaskFn; + fn?: RnvTaskFn; fnHelp?: RnvTaskHelpFn; isPrivate?: boolean; isPriorityOrder?: boolean; diff --git a/packages/engine-core/src/tasks/crypto/common.ts b/packages/engine-core/src/tasks/crypto/common.ts index c4bec2af82..06cb450981 100644 --- a/packages/engine-core/src/tasks/crypto/common.ts +++ b/packages/engine-core/src/tasks/crypto/common.ts @@ -81,3 +81,13 @@ you should run decrypt`); } } }; + +export const TaskOptions = { + key: { + key: 'key', + shortcut: 'k', + isValueType: true, + isRequired: true, + description: 'Pass the key/password', + }, +}; diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts index 698788c7a4..e64b339827 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoDecrypt.ts @@ -16,7 +16,7 @@ import { RnvTaskName, createTask, } from '@rnv/core'; -import { getEnvExportCmd, getEnvVar } from './common'; +import { TaskOptions, getEnvExportCmd, getEnvVar } from './common'; const iocane = require('iocane'); @@ -197,5 +197,6 @@ and we will try to help! return true; } }, + options: [TaskOptions.key], task: RnvTaskName.cryptoDecrypt, }); diff --git a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts index a7393bd9f0..89e07cc056 100644 --- a/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts +++ b/packages/engine-core/src/tasks/crypto/taskCryptoEncrypt.ts @@ -15,14 +15,13 @@ import { fsReadFileSync, fsReaddir, inquirerPrompt, - RnvContext, copyFileSync, RnvTaskName, - getContext, createTask, } from '@rnv/core'; import { statSync } from 'fs'; -import { getEnvExportCmd, getEnvVar } from './common'; +import { TaskOptions, getEnvExportCmd, getEnvVar } from './common'; +import { getContext } from '../../getContext'; const iocane = require('iocane'); @@ -90,7 +89,8 @@ const initializeCryptoDirectory = async (sourceFolder: string) => { }); }; -const _checkAndConfigureCrypto = async (ctx: RnvContext) => { +const _checkAndConfigureCrypto = async () => { + const ctx = getContext(); // handle missing config const source = `./${ctx.files.project.config?.projectName}`; @@ -181,7 +181,7 @@ export default createTask({ const source = `./${projectName}`; - await _checkAndConfigureCrypto(ctx); + await _checkAndConfigureCrypto(); const destRaw = ctx.files.project.config?.crypto?.path; const tsWorkspacePath = path.join(ctx.paths.workspace.dir, projectName, 'timestamp'); @@ -229,5 +229,6 @@ export default createTask({ logWarning(`You don't have {{ crypto.path }} specificed in ${chalk().bold(ctx.paths.appConfigBase)}`); } }, + options: [TaskOptions.key], task: RnvTaskName.cryptoEncrypt, }); diff --git a/packages/sdk-apple/src/common.ts b/packages/sdk-apple/src/common.ts index 6146dc29a1..d0d8ba69a4 100644 --- a/packages/sdk-apple/src/common.ts +++ b/packages/sdk-apple/src/common.ts @@ -1,4 +1,4 @@ -import { RnvPlatformKey, getConfigProp, getContext } from '@rnv/core'; +import { RnvPlatformKey, RnvTaskOption, RnvTaskOptionPresets, getConfigProp, getContext } from '@rnv/core'; export const getAppFolderName = () => { const c = getContext(); @@ -17,3 +17,75 @@ export const getAppFolderName = () => { }; export const SdkPlatforms: Array = ['ios', 'tvos', 'macos']; + +export const _TaskOptions = { + updatePods: { + key: 'updatePods', + // key: 'update-pods', + shortcut: 'u', + description: 'Force update dependencies (iOS only)', + }, + keychain: { + key: 'keychain', + isValueType: true, + isRequired: true, + description: 'Name of the keychain', + }, + provisioningStyle: { + key: 'provisioningStyle', + // key: 'provisioning-style', + isValueType: true, + isRequired: true, + description: 'Set provisioningStyle (Automatic | Manual)', + }, + codeSignIdentity: { + key: 'codeSignIdentity', + // key: 'code-sign-identity', + isValueType: true, + isRequired: true, + description: 'Set codeSignIdentity (ie iPhone Distribution)', + }, + provisionProfileSpecifier: { + key: 'provisionProfileSpecifier', + // key: 'provision-profile-specifier', + isValueType: true, + isRequired: true, + description: 'Name of provisionProfile', + }, + xcodebuildArgs: { + key: 'xcodebuildArgs', + // key: 'xcodebuild-args', + isValueType: true, + isRequired: true, + description: 'pass down custom xcodebuild arguments', + }, + xcodebuildArchiveArgs: { + key: 'xcodebuildArchiveArgs', + // key: 'xcodebuild-archive-args', + isValueType: true, + isRequired: true, + description: 'pass down custom xcodebuild arguments', + }, + xcodebuildExportArgs: { + key: 'xcodebuildExportArgs', + // key: 'xcodebuild-export-args', + isValueType: true, + isRequired: true, + description: 'pass down custom xcodebuild arguments', + }, +}; + +export type ProgramOptionsKey = keyof typeof _TaskOptions; + +export const SDKTaskOptions = _TaskOptions as Record; + +export const SDKTaskOptionPresets = { + withConfigure: (arr?: Array) => + RnvTaskOptionPresets.withConfigure( + [ + SDKTaskOptions.provisioningStyle, + SDKTaskOptions.provisionProfileSpecifier, + SDKTaskOptions.codeSignIdentity, + ].concat(arr || []) + ), +}; diff --git a/packages/sdk-apple/src/getContext.ts b/packages/sdk-apple/src/getContext.ts new file mode 100644 index 0000000000..1ca1bdf3e8 --- /dev/null +++ b/packages/sdk-apple/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from './'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index 81c6e08648..cf040ae9c3 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -14,6 +14,8 @@ import taskPackage from './tasks/taskPackage'; import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; +import { GetContextType, createRnvSDK } from '@rnv/core'; +// import { bookla } from './runner2'; export const Tasks = [ taskTargetLaunch, @@ -29,3 +31,9 @@ export const Tasks = [ taskRun, taskBuild, ]; + +const Sdk = createRnvSDK({ + tasks: Tasks, +}); + +export type GetContext = GetContextType; diff --git a/packages/sdk-apple/src/runner.ts b/packages/sdk-apple/src/runner.ts index 53779ded41..6dbb1351f6 100644 --- a/packages/sdk-apple/src/runner.ts +++ b/packages/sdk-apple/src/runner.ts @@ -22,7 +22,6 @@ import { logRaw, inquirerPrompt, CoreEnvVars, - getContext, } from '@rnv/core'; import { getAppleDevices } from './deviceManager'; @@ -36,6 +35,7 @@ import { AppleDevice, Context } from './types'; import { ObjectEncodingOptions } from 'fs'; import { packageReactNativeIOS, runCocoaPods, runReactNativeIOS, EnvVars } from '@rnv/sdk-react-native'; import { registerDevice } from './fastlane'; +import { getContext } from './getContext'; export const packageBundleForXcode = () => { return packageReactNativeIOS(); @@ -303,14 +303,13 @@ const _checkLockAndExec = async ( ); if (isAutomaticSigningDisabled) { return _handleProvisioningIssues( - c, e, "Your iOS App Development provisioning profiles don't match. under manual signing mode" ); } const isProvisioningMissing = e.includes('requires a provisioning profile'); if (isProvisioningMissing) { - return _handleProvisioningIssues(c, e, 'Your iOS App requires a provisioning profile'); + return _handleProvisioningIssues(e, 'Your iOS App requires a provisioning profile'); } } @@ -361,7 +360,8 @@ Type in your Apple Team ID to be used (will be saved to ${c.paths.appConfig?.con } }; -const _handleProvisioningIssues = async (c: Context, e: unknown, msg: string) => { +const _handleProvisioningIssues = async (e: unknown, msg: string) => { + const c = getContext(); const provisioningStyle = c.program.opts().provisioningStyle || getConfigProp('provisioningStyle'); const appFolderName = getAppFolderName(); // Sometimes xcodebuild reports Automatic signing is disabled but it could be keychain not accepted by user const isProvAutomatic = provisioningStyle === 'Automatic'; @@ -833,7 +833,7 @@ export const configureXcodeProject = async () => { await parseEntitlementsPlist(); await parseInfoPlist(); await copyBuildsFolder(); - await runCocoaPods(); + await runCocoaPods(c.program.opts().updatePods); await parseXcodeProject(); return true; }; diff --git a/packages/sdk-apple/src/tasks/taskBuild.ts b/packages/sdk-apple/src/tasks/taskBuild.ts index 7867991ca4..1774f6d6d1 100644 --- a/packages/sdk-apple/src/tasks/taskBuild.ts +++ b/packages/sdk-apple/src/tasks/taskBuild.ts @@ -1,6 +1,6 @@ -import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { buildXcodeProject } from '../runner'; -import { SdkPlatforms } from '../common'; +import { SdkPlatforms, SDKTaskOptionPresets, SDKTaskOptions } from '../common'; export default createTask({ description: 'Build project binary', @@ -13,6 +13,6 @@ export default createTask({ return buildXcodeProject(); }, task: RnvTaskName.build, - options: RnvTaskOptionPresets.withConfigure(), + options: SDKTaskOptionPresets.withConfigure([SDKTaskOptions.xcodebuildArgs]), platforms: SdkPlatforms, }); diff --git a/packages/sdk-apple/src/tasks/taskConfigure.ts b/packages/sdk-apple/src/tasks/taskConfigure.ts index c096daf126..0a76c01efa 100644 --- a/packages/sdk-apple/src/tasks/taskConfigure.ts +++ b/packages/sdk-apple/src/tasks/taskConfigure.ts @@ -1,7 +1,7 @@ import { createTask, RnvTaskName } from '@rnv/core'; import { configureFontSources } from '@rnv/sdk-react-native'; import { configureXcodeProject } from '../runner'; -import { SdkPlatforms } from '../common'; +import { SdkPlatforms, SDKTaskOptionPresets } from '../common'; export default createTask({ description: 'Configure current project', @@ -13,6 +13,7 @@ export default createTask({ await configureXcodeProject(); await configureFontSources(); }, + options: SDKTaskOptionPresets.withConfigure(), task: RnvTaskName.configure, platforms: SdkPlatforms, }); diff --git a/packages/sdk-apple/src/tasks/taskEject.ts b/packages/sdk-apple/src/tasks/taskEject.ts index 97175e843f..ce02b7b7b6 100644 --- a/packages/sdk-apple/src/tasks/taskEject.ts +++ b/packages/sdk-apple/src/tasks/taskEject.ts @@ -1,6 +1,6 @@ -import { createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { ejectXcodeProject } from '../ejector'; -import { SdkPlatforms } from '../common'; +import { SdkPlatforms, SDKTaskOptionPresets } from '../common'; export default createTask({ description: 'Eject current ios project app to self contained native project', @@ -13,6 +13,6 @@ export default createTask({ return ejectXcodeProject(); }, task: RnvTaskName.eject, - options: RnvTaskOptionPresets.withConfigure(), + options: SDKTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, }); diff --git a/packages/sdk-apple/src/tasks/taskExport.ts b/packages/sdk-apple/src/tasks/taskExport.ts index bb28c4391f..4b1fee59a2 100644 --- a/packages/sdk-apple/src/tasks/taskExport.ts +++ b/packages/sdk-apple/src/tasks/taskExport.ts @@ -1,6 +1,6 @@ -import { RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; +import { createTask, RnvTaskName } from '@rnv/core'; import { exportXcodeProject } from '../runner'; -import { SdkPlatforms } from '../common'; +import { SDKTaskOptionPresets, SdkPlatforms } from '../common'; export default createTask({ description: 'Export the app into deployable binary', @@ -9,6 +9,6 @@ export default createTask({ return exportXcodeProject(); }, task: RnvTaskName.export, - options: RnvTaskOptionPresets.withConfigure(), + options: SDKTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, }); diff --git a/packages/sdk-apple/src/tasks/taskPackage.ts b/packages/sdk-apple/src/tasks/taskPackage.ts index 854c5bd659..c71862f156 100644 --- a/packages/sdk-apple/src/tasks/taskPackage.ts +++ b/packages/sdk-apple/src/tasks/taskPackage.ts @@ -1,6 +1,6 @@ -import { getConfigProp, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; +import { getConfigProp, createTask, RnvTaskName } from '@rnv/core'; import { packageBundleForXcode } from '../runner'; -import { SdkPlatforms } from '../common'; +import { SDKTaskOptionPresets, SdkPlatforms } from '../common'; export default createTask({ description: 'Package source files into bundle', @@ -15,6 +15,6 @@ export default createTask({ return packageBundleForXcode(); }, task: RnvTaskName.package, - options: RnvTaskOptionPresets.withConfigure(), + options: SDKTaskOptionPresets.withConfigure(), platforms: SdkPlatforms, }); diff --git a/packages/sdk-apple/src/tasks/taskRun.ts b/packages/sdk-apple/src/tasks/taskRun.ts index 26c5e268aa..0f2fdbd20e 100644 --- a/packages/sdk-apple/src/tasks/taskRun.ts +++ b/packages/sdk-apple/src/tasks/taskRun.ts @@ -1,7 +1,7 @@ import { getConfigProp, logSummary, createTask, RnvTaskName, RnvTaskOptionPresets } from '@rnv/core'; import { startBundlerIfRequired, waitForBundlerIfRequired } from '@rnv/sdk-react-native'; import { getIosDeviceToRunOn, runXcodeProject } from '../runner'; -import { SdkPlatforms } from '../common'; +import { SDKTaskOptionPresets, SdkPlatforms } from '../common'; export default createTask({ description: 'Run your rn app on target device or emulator', @@ -18,10 +18,10 @@ export default createTask({ } return waitForBundlerIfRequired(); } - return runXcodeProject(runDeviceArgs); + await runXcodeProject(runDeviceArgs); }, task: RnvTaskName.run, isPriorityOrder: true, - options: RnvTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), + options: SDKTaskOptionPresets.withConfigure(RnvTaskOptionPresets.withRun()), platforms: SdkPlatforms, }); diff --git a/packages/sdk-apple/src/xcodeParser.ts b/packages/sdk-apple/src/xcodeParser.ts index d3d0d3066e..46629560eb 100644 --- a/packages/sdk-apple/src/xcodeParser.ts +++ b/packages/sdk-apple/src/xcodeParser.ts @@ -13,7 +13,6 @@ import { logWarning, parsePlugins, writeFileSync, - getContext, } from '@rnv/core'; import { provision } from 'ios-mobileprovision-finder'; import path from 'path'; @@ -21,6 +20,7 @@ import { getAppFolderName } from './common'; import { parseProvisioningProfiles } from './provisionParser'; import { Context } from './types'; import { getAppId } from '@rnv/sdk-utils'; +import { getContext } from './getContext'; export const parseXcodeProject = async () => { const c = getContext(); diff --git a/packages/sdk-react-native/src/iosRunner.ts b/packages/sdk-react-native/src/iosRunner.ts index 0a33e90a82..1d799be9bf 100644 --- a/packages/sdk-react-native/src/iosRunner.ts +++ b/packages/sdk-react-native/src/iosRunner.ts @@ -123,11 +123,14 @@ const generateCombinedChecksum = () => { return combinedChecksum; }; -const checkIfPodsIsRequired = (c: RnvContext): { result: boolean; reason: string; code: number } => { +const checkIfPodsIsRequired = ( + c: RnvContext, + forceUpdatePods: boolean +): { result: boolean; reason: string; code: number } => { if (c.runtime._skipNativeDepResolutions) { return { result: false, reason: `Command ${getCurrentCommand(true)} explicitly skips pod checks`, code: 1 }; } - if (c.program.opts().updatePods) { + if (forceUpdatePods) { return { result: true, reason: 'You passed --updatePods option', code: 2 }; } const appFolder = getAppFolder(); @@ -169,11 +172,11 @@ const updatePodsChecksum = () => { return fsWriteFileSync(podChecksumPath, combinedChecksum); }; -export const runCocoaPods = async () => { +export const runCocoaPods = async (forceUpdatePods: boolean) => { const c = getContext(); - logDefault('runCocoaPods', `forceUpdate:${!!c.program.opts().updatePods}`); + logDefault('runCocoaPods', `forceUpdate:${!!forceUpdatePods}`); - const checkResult = await checkIfPodsIsRequired(c); + const checkResult = await checkIfPodsIsRequired(c, forceUpdatePods); if (!checkResult.result) { logInfo(`Skipping pod action. Reason: ${checkResult.reason}`); @@ -203,7 +206,7 @@ export const runCocoaPods = async () => { ...EnvVars.RNV_FLIPPER_ENABLED(), }; - if (c.program.opts().updatePods) { + if (forceUpdatePods) { await executeAsync('bundle exec pod update', { cwd: appFolder, env, From afb9941e71f186a3490fc5ac4c4769b59c60c6a3 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 00:37:25 +0200 Subject: [PATCH 169/175] camel case conversion for task opts --- packages/core/package.json | 3 ++- packages/core/src/context/types.ts | 3 ++- packages/engine-core/package.json | 3 +-- packages/integration-starter/src/tasks/taskSingleCommand.ts | 2 +- yarn.lock | 5 +++++ 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 92351f2136..3130d6251d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -44,7 +44,8 @@ "source-map-support": "0.5.13", "svg2js": "0.0.4-alpha1", "tslib": "2.5.2", - "zod": "3.22.4" + "zod": "3.22.4", + "type-fest": "4.14.0" }, "peerDependencies": { "@rnv/config-templates": "^1.0.0-rc.12" diff --git a/packages/core/src/context/types.ts b/packages/core/src/context/types.ts index 06207e9dd5..955ead9c4e 100644 --- a/packages/core/src/context/types.ts +++ b/packages/core/src/context/types.ts @@ -22,6 +22,7 @@ import { type ExecaChildProcess } from 'execa'; import { type RnvPlugin } from '../plugins/types'; import type { RnvIntegration } from '../integrations/types'; import type { DependencyMutation } from '../projects/types'; +import { CamelCasedProperties } from 'type-fest'; export type CreateContextOptions = { program: RnvContextProgram; @@ -34,7 +35,7 @@ export type CreateContextOptions = { export type RnvContextProgram = { args?: string[]; rawArgs?: string[]; - opts: () => ParamKeys; + opts: () => CamelCasedProperties>; option?: (cmd: string, desc: string) => void; parse?: (arg: string[]) => void; allowUnknownOption: (p: boolean) => void; diff --git a/packages/engine-core/package.json b/packages/engine-core/package.json index bd1f78c5ce..a22f3b4f9a 100644 --- a/packages/engine-core/package.json +++ b/packages/engine-core/package.json @@ -33,8 +33,7 @@ "iocane": "4.0.0", "kill-port": "1.6.1", "lodash": "4.17.21", - "tar": "4.4.19", - "type-fest": "4.14.0" + "tar": "4.4.19" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index e179328ab9..4d78a960d0 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -8,7 +8,7 @@ export default createTask({ }, fn: async ({ ctx }) => { //TODO: switch to typed options once Context generics are supported - const opts: any = ctx.program.opts(); + const opts = ctx.program.opts(); logSuccess(`Hello from Integration Starter single command! --my-opt value: ${opts.myOpt}`); }, diff --git a/yarn.lock b/yarn.lock index fcf1b821b7..3fc7b2ddec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20711,6 +20711,11 @@ type-fest@3.13.1, type-fest@^3.8.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== +type-fest@4.14.0: + version "4.14.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.14.0.tgz#46f9a358e605f0ec5ca99ab83deaa7257a7ae379" + integrity sha512-on5/Cw89wwqGZQu+yWO0gGMGu8VNxsaW9SB2HE8yJjllEk7IDTwnSN1dUVldYILhYPN5HzD7WAaw2cc/jBfn0Q== + type-fest@4.9.0: version "4.9.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.9.0.tgz#d29c8efe5b1e703feeb29cef23d887b2f479844d" From abb176c1b7678404dcd7976ff36553770850c372 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 01:00:04 +0200 Subject: [PATCH 170/175] convert sdks to use creators --- .../src/engines/{engineCreator.ts => creator.ts} | 0 packages/core/src/index.ts | 10 ++++++---- packages/core/src/integrations/creator.ts | 13 +++++++++++++ packages/core/src/integrations/types.ts | 13 ++++++++++--- .../core/src/sdks/{sdkCreator.ts => creator.ts} | 0 packages/integration-docker/src/index.ts | 8 ++++---- packages/integration-starter/src/index.ts | 8 ++++---- .../src/tasks/taskSingleCommand.ts | 4 +--- .../src/tasks/taskStarterHello.ts | 4 +--- packages/sdk-android/src/getContext.ts | 4 ++++ packages/sdk-android/src/index.ts | 7 +++++++ packages/sdk-kaios/src/getContext.ts | 4 ++++ packages/sdk-kaios/src/index.ts | 7 +++++++ packages/sdk-react-native/src/getContext.ts | 4 ++++ packages/sdk-react-native/src/index.ts | 7 +++++++ packages/sdk-tizen/src/getContext.ts | 4 ++++ packages/sdk-tizen/src/index.ts | 7 +++++++ packages/sdk-webos/src/getContext.ts | 4 ++++ packages/sdk-webos/src/index.ts | 7 +++++++ 19 files changed, 94 insertions(+), 21 deletions(-) rename packages/core/src/engines/{engineCreator.ts => creator.ts} (100%) create mode 100644 packages/core/src/integrations/creator.ts rename packages/core/src/sdks/{sdkCreator.ts => creator.ts} (100%) create mode 100644 packages/sdk-android/src/getContext.ts create mode 100644 packages/sdk-kaios/src/getContext.ts create mode 100644 packages/sdk-react-native/src/getContext.ts create mode 100644 packages/sdk-tizen/src/getContext.ts create mode 100644 packages/sdk-webos/src/getContext.ts diff --git a/packages/core/src/engines/engineCreator.ts b/packages/core/src/engines/creator.ts similarity index 100% rename from packages/core/src/engines/engineCreator.ts rename to packages/core/src/engines/creator.ts diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 823ed2437b..c047f4c598 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -52,10 +52,13 @@ export * from './schema/configFiles/workspace'; export * from './schema/configFiles/workspaces'; export * from './engines'; -export * from './engines/engineCreator'; +export * from './engines/creator'; export * from './engines/dependencyResolver'; -export * from './sdks/sdkCreator'; +export * from './sdks/creator'; + +export * from './integrations/creator'; +export * from './integrations'; export * from './system/exec'; export * from './system/fs'; @@ -71,7 +74,6 @@ export * from './api/provider'; export * from './env'; export * from './formatter'; export * from './templates'; -export * from './integrations'; export * from './runner'; export * from './platforms'; export * from './plugins'; @@ -84,6 +86,7 @@ export * from './enums/folderName'; export * from './enums/platformName'; //TYPES +export * from './types'; export * from './engines/types'; export * from './sdks/types'; export * from './context/types'; @@ -95,5 +98,4 @@ export * from './system/types'; export * from './configs/types'; export * from './env/types'; export * from './api/types'; -export * from './types'; export * from './integrations/types'; diff --git a/packages/core/src/integrations/creator.ts b/packages/core/src/integrations/creator.ts new file mode 100644 index 0000000000..cf41c1af69 --- /dev/null +++ b/packages/core/src/integrations/creator.ts @@ -0,0 +1,13 @@ +import { getContext } from '../context/provider'; +import { generateRnvTaskMap } from '../tasks/taskHelpers'; +import type { RnvIntegration, CreateRnvIntegrationOpts } from './types'; + +export const createRnvIntegration = (opts: CreateRnvIntegrationOpts) => { + const intg: RnvIntegration = { + ...opts, + tasks: generateRnvTaskMap(opts.tasks, opts.config), + getContext: () => getContext(), + }; + + return intg; +}; diff --git a/packages/core/src/integrations/types.ts b/packages/core/src/integrations/types.ts index 0b5afa8170..6568115d19 100644 --- a/packages/core/src/integrations/types.ts +++ b/packages/core/src/integrations/types.ts @@ -1,7 +1,14 @@ import type { ConfigFileIntegration } from '../schema/types'; -import { RnvTask } from '../tasks/types'; +import type { RnvContext } from '../context/types'; +import type { RnvTaskMap, RnvTask } from '../tasks/types'; -export type RnvIntegration = { +export type CreateRnvIntegrationOpts = { config: ConfigFileIntegration; - tasks: Record; + tasks: ReadonlyArray>; +}; + +export type RnvIntegration = { + config: ConfigFileIntegration; + tasks: RnvTaskMap; + getContext: () => RnvContext; }; diff --git a/packages/core/src/sdks/sdkCreator.ts b/packages/core/src/sdks/creator.ts similarity index 100% rename from packages/core/src/sdks/sdkCreator.ts rename to packages/core/src/sdks/creator.ts diff --git a/packages/integration-docker/src/index.ts b/packages/integration-docker/src/index.ts index 23771efa83..8cac0b5cf0 100644 --- a/packages/integration-docker/src/index.ts +++ b/packages/integration-docker/src/index.ts @@ -1,11 +1,11 @@ import taskDockerDeploy from './tasks/taskDockerDeploy'; import taskDockerExport from './tasks/taskDockerExport'; -import { RnvIntegration, generateRnvTaskMap } from '@rnv/core'; +import { createRnvIntegration } from '@rnv/core'; import { Config } from './config'; -const Integration: RnvIntegration = { - tasks: generateRnvTaskMap([taskDockerExport, taskDockerDeploy], Config), +const Integration = createRnvIntegration({ + tasks: [taskDockerExport, taskDockerDeploy], config: Config, -}; +}); export default Integration; diff --git a/packages/integration-starter/src/index.ts b/packages/integration-starter/src/index.ts index 6836a86eb9..115f8feccb 100644 --- a/packages/integration-starter/src/index.ts +++ b/packages/integration-starter/src/index.ts @@ -1,11 +1,11 @@ import taskStarterHello from './tasks/taskStarterHello'; import taskSingleCommand from './tasks/taskSingleCommand'; -import { RnvIntegration, generateRnvTaskMap } from '@rnv/core'; +import { createRnvIntegration } from '@rnv/core'; import { Config } from './config'; -const Integration: RnvIntegration = { - tasks: generateRnvTaskMap([taskStarterHello, taskSingleCommand], Config), +const Integration = createRnvIntegration({ + tasks: [taskStarterHello, taskSingleCommand], config: Config, -}; +}); export default Integration; diff --git a/packages/integration-starter/src/tasks/taskSingleCommand.ts b/packages/integration-starter/src/tasks/taskSingleCommand.ts index 4d78a960d0..28d6324f71 100644 --- a/packages/integration-starter/src/tasks/taskSingleCommand.ts +++ b/packages/integration-starter/src/tasks/taskSingleCommand.ts @@ -7,10 +7,8 @@ export default createTask({ console.log('>>> beforeDependsOn called!!!'); }, fn: async ({ ctx }) => { - //TODO: switch to typed options once Context generics are supported - const opts = ctx.program.opts(); logSuccess(`Hello from Integration Starter single command! - --my-opt value: ${opts.myOpt}`); + --my-opt value: ${ctx.program.opts().myOpt}`); }, task: 'starter-single-command', platforms: ['ios', 'android'], diff --git a/packages/integration-starter/src/tasks/taskStarterHello.ts b/packages/integration-starter/src/tasks/taskStarterHello.ts index 6993539d9a..9545d25e9c 100644 --- a/packages/integration-starter/src/tasks/taskStarterHello.ts +++ b/packages/integration-starter/src/tasks/taskStarterHello.ts @@ -4,10 +4,8 @@ export default createTask({ description: 'Prints hello message', dependsOn: [RnvTaskName.package], fn: async ({ ctx }) => { - //TODO: switch to typed options once Context generics are supported - const opts: any = ctx.program.opts(); logSuccess(`Hello from Integration Starter! ---my-opt value: ${opts.myOpt}`); +--my-opt value: ${ctx.program.opts().myOpt}`); }, task: 'starter hello', platforms: ['ios'], diff --git a/packages/sdk-android/src/getContext.ts b/packages/sdk-android/src/getContext.ts new file mode 100644 index 0000000000..1ca1bdf3e8 --- /dev/null +++ b/packages/sdk-android/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from './'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/sdk-android/src/index.ts b/packages/sdk-android/src/index.ts index 8a53ecb541..5c44610413 100644 --- a/packages/sdk-android/src/index.ts +++ b/packages/sdk-android/src/index.ts @@ -11,6 +11,7 @@ import taskPackage from './tasks/taskPackage'; import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; +import { GetContextType, createRnvSDK } from '@rnv/core'; export const Tasks = [ taskTargetLaunch, @@ -22,3 +23,9 @@ export const Tasks = [ taskRun, taskBuild, ]; + +const Sdk = createRnvSDK({ + tasks: Tasks, +}); + +export type GetContext = GetContextType; diff --git a/packages/sdk-kaios/src/getContext.ts b/packages/sdk-kaios/src/getContext.ts new file mode 100644 index 0000000000..1ca1bdf3e8 --- /dev/null +++ b/packages/sdk-kaios/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from './'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/sdk-kaios/src/index.ts b/packages/sdk-kaios/src/index.ts index 9fe276c2a3..86274191e3 100644 --- a/packages/sdk-kaios/src/index.ts +++ b/packages/sdk-kaios/src/index.ts @@ -2,6 +2,13 @@ export * from './deviceManager'; export * from './runner'; export * from './constants'; +import { GetContextType, createRnvSDK } from '@rnv/core'; import taskTargetLaunch from './tasks/taskTargetLaunch'; export const Tasks = [taskTargetLaunch]; + +const Sdk = createRnvSDK({ + tasks: Tasks, +}); + +export type GetContext = GetContextType; diff --git a/packages/sdk-react-native/src/getContext.ts b/packages/sdk-react-native/src/getContext.ts new file mode 100644 index 0000000000..1ca1bdf3e8 --- /dev/null +++ b/packages/sdk-react-native/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from './'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/sdk-react-native/src/index.ts b/packages/sdk-react-native/src/index.ts index a95362ebcd..8a737a24e8 100644 --- a/packages/sdk-react-native/src/index.ts +++ b/packages/sdk-react-native/src/index.ts @@ -4,6 +4,13 @@ export * from './iosRunner'; export * from './metroRunner'; export * from './adapters'; export * from './env'; +import { GetContextType, createRnvSDK } from '@rnv/core'; import taskStart from './tasks/taskStart'; export const Tasks = [taskStart]; + +const Sdk = createRnvSDK({ + tasks: Tasks, +}); + +export type GetContext = GetContextType; diff --git a/packages/sdk-tizen/src/getContext.ts b/packages/sdk-tizen/src/getContext.ts new file mode 100644 index 0000000000..1ca1bdf3e8 --- /dev/null +++ b/packages/sdk-tizen/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from './'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/sdk-tizen/src/index.ts b/packages/sdk-tizen/src/index.ts index 10cdc562c2..f613913b09 100644 --- a/packages/sdk-tizen/src/index.ts +++ b/packages/sdk-tizen/src/index.ts @@ -6,5 +6,12 @@ export * from './constants'; import taskTargetLaunch from './tasks/taskTargetLaunch'; import taskTargetList from './tasks/taskTargetList'; import taskSdkConfigure from './tasks/taskSdkConfigure'; +import { GetContextType, createRnvSDK } from '@rnv/core'; export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure]; + +const Sdk = createRnvSDK({ + tasks: Tasks, +}); + +export type GetContext = GetContextType; diff --git a/packages/sdk-webos/src/getContext.ts b/packages/sdk-webos/src/getContext.ts new file mode 100644 index 0000000000..1ca1bdf3e8 --- /dev/null +++ b/packages/sdk-webos/src/getContext.ts @@ -0,0 +1,4 @@ +import { getContext as _getContext } from '@rnv/core'; +import type { GetContext } from './'; +// re-export the original getContext with newly decorated type +export const getContext = _getContext as GetContext; diff --git a/packages/sdk-webos/src/index.ts b/packages/sdk-webos/src/index.ts index 8f27474a5a..758cc4fb06 100644 --- a/packages/sdk-webos/src/index.ts +++ b/packages/sdk-webos/src/index.ts @@ -5,5 +5,12 @@ export * from './constants'; import taskTargetLaunch from './tasks/taskTargetLaunch'; import taskTargetList from './tasks/taskTargetList'; import taskSdkConfigure from './tasks/taskSdkConfigure'; +import { GetContextType, createRnvSDK } from '@rnv/core'; export const Tasks = [taskTargetLaunch, taskTargetList, taskSdkConfigure]; + +const Sdk = createRnvSDK({ + tasks: Tasks, +}); + +export type GetContext = GetContextType; From c17cbf36e2b1432bae9e4c18c0e3ff515ef914e1 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 10:03:23 +0200 Subject: [PATCH 171/175] update schema, introduce root schema, fix task registry --- packages/build-hooks-schema/src/schema.ts | 37 +- packages/core/jsonSchema/rnv.app.json | 6413 +++++++-------- packages/core/jsonSchema/rnv.engine.json | 3302 +++++++- packages/core/jsonSchema/rnv.integration.json | 3293 +++++++- packages/core/jsonSchema/rnv.local.json | 3313 +++++++- packages/core/jsonSchema/rnv.plugin.json | 2927 ++++++- packages/core/jsonSchema/rnv.private.json | 3296 +++++++- packages/core/jsonSchema/rnv.project.json | 7126 ++++++++--------- packages/core/jsonSchema/rnv.root.json | 4403 ++++++++++ packages/core/jsonSchema/rnv.template.json | 3455 +++++++- packages/core/jsonSchema/rnv.templates.json | 4161 ++++++++-- packages/core/jsonSchema/rnv.workspace.json | 3332 +++++++- packages/core/src/index.ts | 14 +- packages/core/src/schema/configFiles/root.ts | 28 + packages/core/src/schema/index.ts | 76 + packages/core/src/tasks/taskHelpers.ts | 2 +- packages/engine-rn-tvos/renative.engine.json | 1 - 17 files changed, 36758 insertions(+), 8421 deletions(-) create mode 100644 packages/core/jsonSchema/rnv.root.json create mode 100644 packages/core/src/schema/configFiles/root.ts create mode 100644 packages/core/src/schema/index.ts diff --git a/packages/build-hooks-schema/src/schema.ts b/packages/build-hooks-schema/src/schema.ts index e9c107fe18..5e08940fad 100644 --- a/packages/build-hooks-schema/src/schema.ts +++ b/packages/build-hooks-schema/src/schema.ts @@ -1,23 +1,24 @@ -import { - zodConfigFilePlugin, - zodConfigFilePrivate, - zodConfigFileProject, - zodConfigFileTemplate, - zodConfigFileTemplates, - zodConfigFileWorkspace, - getContext, - logSuccess, - zodConfigFileIntergation, - zodConfigFileApp, - zodConfigFileLocal, - zodConfigFileEngine, -} from '@rnv/core'; +import { ZodFileSchema, ZodSharedSchema, getContext, logSuccess } from '@rnv/core'; import { zodToJsonSchema } from 'zod-to-json-schema'; import { z } from 'zod'; import path from 'path'; import fs from 'fs'; export const generateSchema = async () => { + const { + zodConfigFilePlugin, + zodConfigFilePrivate, + zodConfigFileProject, + zodConfigFileTemplate, + zodConfigFileTemplates, + zodConfigFileWorkspace, + zodConfigFileIntergation, + zodConfigFileApp, + zodConfigFileLocal, + zodConfigFileEngine, + zodConfigFileRoot, + } = ZodFileSchema; + _generateSchemaFile({ schema: zodConfigFileProject, schemaId: 'rnv.project' }); _generateSchemaFile({ schema: zodConfigFileApp, schemaId: 'rnv.app' }); _generateSchemaFile({ schema: zodConfigFileLocal, schemaId: 'rnv.local' }); @@ -28,6 +29,7 @@ export const generateSchema = async () => { _generateSchemaFile({ schema: zodConfigFilePlugin, schemaId: 'rnv.plugin' }); _generateSchemaFile({ schema: zodConfigFileTemplates, schemaId: 'rnv.templates' }); _generateSchemaFile({ schema: zodConfigFileIntergation, schemaId: 'rnv.integration' }); + _generateSchemaFile({ schema: zodConfigFileRoot, schemaId: 'rnv.root' }); logSuccess('Sucessfully exported renative.project.json schema'); }; @@ -35,7 +37,12 @@ export const generateSchema = async () => { const _generateSchemaFile = (opts: { schema: z.ZodObject; schemaId: string }) => { const { schema, schemaId } = opts; const ctx = getContext(); - const jsonSchema: any = zodToJsonSchema(schema, schemaId); + const jsonSchema: any = zodToJsonSchema(schema, { + name: schemaId, + definitions: { + ...ZodSharedSchema, + }, + }); jsonSchema['$schema'] = 'http://json-schema.org/draft-04/schema#'; jsonSchema.definitions[schemaId].properties['$schema'] = { diff --git a/packages/core/jsonSchema/rnv.app.json b/packages/core/jsonSchema/rnv.app.json index b053aa5bf2..3e6ff3ab26 100644 --- a/packages/core/jsonSchema/rnv.app.json +++ b/packages/core/jsonSchema/rnv.app.json @@ -1,3569 +1,3326 @@ { "$ref": "#/definitions/rnv.app", "definitions": { - "rnv.app": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder" - }, - "custom": { - "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" - }, - "hidden": { + "enabled": { "type": "boolean", - "description": "If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`" + "description": "Defines whether build scheme shows up in options to run" }, - "extendsTemplate": { + "description": { "type": "string", - "description": "You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`" + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - "extend": { - "type": "string", - "description": "extend another appConfig by id" + "version": { + "type": "string" }, - "common": { - "type": "object", - "properties": { - "includedPermissions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" - }, - "excludedPermissions": { - "type": "array", - "items": { + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { "type": "string" }, - "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" - }, - "id": { - "type": "string", - "description": "Bundle ID of application. ie: com.example.myapp" - }, - "idSuffix": { + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { "type": "string" }, - "version": { - "type": "string", - "description": "Semver style version of your app" - }, - "versionCode": { - "type": "string", - "description": "Manual verride of generated version code" - }, - "versionFormat": { - "type": "string", - "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n\nIf you do not define versionFormat, no formatting will apply to version.\n\n\"versionFormat\" : \"0.0.0\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 1.2.3\n\nIN: 1.2.3 OUT: 1.2.3\n\n\n\n\"versionFormat\" : \"0.0.0.0.0\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 1.2.3.4.56\n\nIN: 1.2.3 OUT: 1.2.3\n\n\"versionFormat\" : \"0.0.0.x.x.x.x\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 1.2.3.rc.4.build.56\n\nIN: 1.2.3 OUT: 1.2.3\n\n" - }, - "versionCodeFormat": { - "type": "string", - "description": "Allows you to fine-tune auto generated version codes.\n\nVersion code is autogenerated from app version defined in package.json or renative.json.\n\nNOTE: If you define versionCode manually this formatting will not apply.\n\nEXAMPLE 1:\n\ndefault value: 00.00.00\n\nIN: 1.2.3-rc.4+build.56 OUT: 102030456\n\nIN: 1.2.3 OUT: 10203\n\nEXAMPLE 2:\n\n\"versionCodeFormat\" : \"00.00.00.00.00\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 102030456\n\nIN: 1.2.3 OUT: 102030000\n\nEXAMPLE 3:\n\n\"versionCodeFormat\" : \"00.00.00.0000\"\n\nIN: 1.0.23-rc.15 OUT: 100230015\n\nIN: 1.0.23 OUT: 100230000\n\n" - }, - "versionCodeOffset": { - "type": "number" + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "title": { - "type": "string", - "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "description": { - "type": "string", - "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "author": { - "type": "string", - "description": "Author name" + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "license": { - "type": "string", - "description": "Injects license information into app" + "name": { + "type": "string" }, - "includedFonts": { - "type": "array", - "items": { - "type": "string" + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" }, - "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" - }, - "backgroundColor": { - "type": "string", - "minLength": 4, - "maxLength": 9, - "pattern": "^#", - "description": "Defines root view backgroundColor for all platforms in HEX format" - }, - "splashScreen": { - "type": "boolean", - "description": "Enable or disable splash screen" - }, - "fontSources": { - "type": "array", - "items": { - "type": "string" + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" }, - "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" - }, - "assetSources": { - "type": "array", - "items": { - "type": "string" + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" }, - "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" - }, - "includedPlugins": { - "type": "array", - "items": { - "type": "string" + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" }, - "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" - }, - "excludedPlugins": { - "type": "array", - "items": { - "type": "string" + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" }, - "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" - }, - "runtime": { - "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/custom" + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "type": "string", - "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "enabled": { - "type": "boolean", - "description": "Defines whether build scheme shows up in options to run" - }, - "extendPlatform": { - "type": "string", - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } ] - }, - "assetFolderPlatform": { - "type": "string", - "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" - }, - "engine": { - "type": "string", - "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" - }, - "entryFile": { - "type": "string", - "default": "index", - "description": "Alternative name of the entry file without `.js` extension" - }, - "bundleAssets": { - "type": "boolean", - "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" - }, - "enableSourceMaps": { - "type": "boolean", - "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" - }, - "bundleIsDev": { - "type": "boolean", - "description": "If set to `true` debug build will be generated" - }, - "getJsBundleFile": { - "type": "string" } - }, - "additionalProperties": false + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" } } }, "additionalProperties": false, - "description": "Common config props used as default props for all available buildSchemes" + "description": "Allows you to configure webpack bahaviour per each individual plugin" }, - "platforms": { + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { "type": "object", "properties": { - "android": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { "type": "object", "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "enableAndroidX": { - "type": [ - "boolean", - "string" - ], - "default": true, - "description": "Enables new android X architecture" - }, - "enableJetifier": { - "type": [ - "boolean", - "string" - ], - "default": true, - "description": "Enables Jetifier" - }, - "signingConfig": { - "type": "string", - "default": "Debug", - "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" - }, - "minSdkVersion": { - "type": "number", - "default": 28, - "description": "Minimum Android SDK version device has to have in order for app to run" - }, - "multipleAPKs": { - "type": "boolean", - "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" - }, - "aab": { - "type": "boolean", - "description": "If set to true, android project will generate app.aab instead of apk" - }, - "extraGradleParams": { - "type": "string", - "description": "Allows passing extra params to gradle command" - }, - "minifyEnabled": { - "type": "boolean", - "description": "Sets minifyEnabled buildType property in app/build.gradle" - }, - "targetSdkVersion": { - "type": "number", - "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" - }, - "compileSdkVersion": { - "type": "number", - "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" - }, - "kotlinVersion": { - "type": "string", - "default": "1.7.10", - "description": "Allows you define custom kotlin version" - }, - "ndkVersion": { - "type": "string", - "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" - }, - "supportLibVersion": { - "type": "string", - "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" - }, - "googleServicesVersion": { - "type": "string", - "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" - }, - "gradleBuildToolsVersion": { - "type": "string", - "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" - }, - "gradleWrapperVersion": { - "type": "string", - "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" - }, - "excludedFeatures": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Override features definitions in AndroidManifest.xml by exclusion" - }, - "includedFeatures": { - "type": "array", - "items": { - "type": "string" + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] }, - "description": "Override features definitions in AndroidManifest.xml by inclusion" - }, - "buildToolsVersion": { - "type": "string", - "default": "34.0.0", - "description": "Override android build tools version" - }, - "disableSigning": { - "type": "boolean" - }, - "storeFile": { - "type": "string", - "description": "Name of the store file in android project" - }, - "keyAlias": { - "type": "string", - "description": "Key alias of the store file in android project" - }, - "newArchEnabled": { - "type": "boolean", - "description": "Enables new arch for android. Default: false" + "description": "Overrides values in `gradle.properties` file of generated android based project" }, - "flipperEnabled": { - "type": "boolean", - "description": "Enables flipper for ios. Default: true" - }, - "reactNativeEngine": { - "type": "string", - "enum": [ - "jsc", - "v8-android", - "v8-android-nointl", - "v8-android-jit", - "v8-android-jit-nointl", - "hermes" - ], - "default": "hermes", - "description": "Allows you to define specific native render engine to be used" - }, - "templateAndroid": { + "build_gradle": { "type": "object", "properties": { - "gradle_properties": { + "allprojects": { "type": "object", - "additionalProperties": { - "type": [ - "string", - "boolean", - "number" - ] + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } }, - "description": "Overrides values in `gradle.properties` file of generated android based project" + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } }, - "build_gradle": { + "buildscript": { "type": "object", "properties": { - "allprojects": { + "repositories": { "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - }, - "description": "Customize repositories section of build.gradle" - } - }, - "required": [ - "repositories" - ], - "additionalProperties": false - }, - "plugins": { - "type": "array", - "items": { - "type": "string" + "additionalProperties": { + "type": "boolean" } }, - "buildscript": { - "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - } - }, - "required": [ - "repositories", - "dependencies" - ], - "additionalProperties": false - }, - "dexOptions": { + "dependencies": { "type": "object", "additionalProperties": { "type": "boolean" } - }, - "injectAfterAll": { - "type": "array", - "items": { - "type": "string" - } } }, "required": [ - "allprojects", - "plugins", - "buildscript", - "dexOptions", - "injectAfterAll" + "repositories", + "dependencies" ], - "additionalProperties": false, - "description": "Overrides values in `build.gradle` file of generated android based project" + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } }, - "app_build_gradle": { + "buildTypes": { "type": "object", "properties": { - "apply": { - "type": "array", - "items": { - "type": "string" - } - }, - "defaultConfig": { + "debug": { "type": "array", "items": { "type": "string" } }, - "buildTypes": { - "type": "object", - "properties": { - "debug": { - "type": "array", - "items": { - "type": "string" - } - }, - "release": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "afterEvaluate": { + "release": { "type": "array", "items": { "type": "string" } - }, - "implementations": { - "type": "array", - "items": { - "type": "string" - } - }, - "implementation": { - "type": "string" - } - }, - "required": [ - "apply", - "defaultConfig" - ], - "additionalProperties": false, - "description": "Overrides values in `app/build.gradle` file of generated android based project" - }, - "AndroidManifest_xml": { - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "android:name": { - "type": "string" - }, - "android:required": { - "type": "boolean" - }, - "package": { - "type": "string" - }, - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/tag" - }, - "android:name": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:name" - }, - "android:required": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:required" - }, - "children": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/children/items" - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false - } } }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false, - "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " - }, - "strings_xml": { - "type": "object", - "properties": {}, "additionalProperties": false }, - "MainActivity_kt": { - "type": "object", - "properties": { - "onCreate": { - "type": "string", - "default": "super.onCreate(savedInstanceState)", - "description": "Overrides super.onCreate method handler of MainActivity.java" - }, - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { - "type": "string" - } - }, - "resultMethods": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } }, - "MainApplication_kt": { - "type": "object", - "properties": { - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { + }, + "name": { "type": "string" - } - }, - "packages": { - "type": "array", - "items": { + }, + "child_value": { "type": "string" } }, - "packageParams": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "description": "Allows you to configure behaviour of MainActivity" - }, - "settings_gradle": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "gradle_wrapper_properties": { - "type": "object", - "properties": {}, - "additionalProperties": false + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" }, - "SplashActivity_java": { - "type": "object", - "properties": {}, - "additionalProperties": false + "imports": { + "type": "array", + "items": { + "type": "string" + } }, - "styles_xml": { - "type": "object", - "properties": {}, - "additionalProperties": false + "methods": { + "type": "array", + "items": { + "type": "string" + } }, - "colors_xml": { - "type": "object", - "properties": {}, - "additionalProperties": false + "createMethods": { + "type": "array", + "items": { + "type": "string" + } }, - "proguard_rules_pro": { - "type": "object", - "properties": {}, - "additionalProperties": false + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false }, - "buildSchemes": { + "MainApplication_kt": { "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "enableAndroidX": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/enableAndroidX" - }, - "enableJetifier": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/enableJetifier" - }, - "signingConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/signingConfig" - }, - "minSdkVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/minSdkVersion" - }, - "multipleAPKs": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/multipleAPKs" - }, - "aab": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/aab" - }, - "extraGradleParams": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/extraGradleParams" - }, - "minifyEnabled": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/minifyEnabled" - }, - "targetSdkVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/targetSdkVersion" - }, - "compileSdkVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/compileSdkVersion" - }, - "kotlinVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/kotlinVersion" - }, - "ndkVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/ndkVersion" - }, - "supportLibVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/supportLibVersion" - }, - "googleServicesVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/googleServicesVersion" - }, - "gradleBuildToolsVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/gradleBuildToolsVersion" - }, - "gradleWrapperVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/gradleWrapperVersion" - }, - "excludedFeatures": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/excludedFeatures" - }, - "includedFeatures": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/includedFeatures" - }, - "buildToolsVersion": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/buildToolsVersion" - }, - "disableSigning": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/disableSigning" - }, - "storeFile": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/storeFile" - }, - "keyAlias": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/keyAlias" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/newArchEnabled" - }, - "flipperEnabled": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/flipperEnabled" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateAndroid": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid" + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" } }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" - }, - "androidtv": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android" - }, - "androidwear": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android" - }, - "firetv": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android" - }, - "ios": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "type": "boolean", - "description": "Injects `inhibit_all_warnings` into Podfile" - }, - "ignoreLogs": { - "type": "boolean", - "description": "Passes `-quiet` to xcodebuild command" - }, - "deploymentTarget": { - "type": "string", - "description": "Deployment target for xcodepoj" - }, - "orientationSupport": { - "type": "object", - "properties": { - "phone": { + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { "type": "array", "items": { "type": "string" } }, - "tab": { + "packageParams": { "type": "array", "items": { "type": "string" } } }, - "additionalProperties": false - }, - "teamID": { - "type": "string", - "description": "Apple teamID" - }, - "excludedArchs": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" - }, - "urlScheme": { - "type": "string", - "description": "URL Scheme for the app used for deeplinking" - }, - "teamIdentifier": { - "type": "string", - "description": "Apple developer team ID" - }, - "scheme": { - "type": "string" - }, - "schemeTarget": { - "type": "string" - }, - "appleId": { - "type": "string" - }, - "provisioningStyle": { - "type": "string" - }, - "newArchEnabled": { - "type": "boolean", - "description": "Enables new archs for iOS. Default: false" - }, - "codeSignIdentity": { - "type": "string", - "description": "Special property which tells Xcode how to build your project" - }, - "commandLineArguments": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allows you to pass launch arguments to active scheme" - }, - "provisionProfileSpecifier": { - "type": "string" + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" }, - "provisionProfileSpecifiers": { + "settings_gradle": { "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "allowProvisioningUpdates": { - "type": "boolean" + "properties": {}, + "additionalProperties": false }, - "provisioningProfiles": { + "gradle_wrapper_properties": { "type": "object", - "additionalProperties": { - "type": "string" - } + "properties": {}, + "additionalProperties": false }, - "codeSignIdentities": { + "SplashActivity_java": { "type": "object", - "additionalProperties": { - "type": "string" - } + "properties": {}, + "additionalProperties": false }, - "systemCapabilities": { + "styles_xml": { "type": "object", - "additionalProperties": { - "type": "boolean" - } + "properties": {}, + "additionalProperties": false }, - "entitlements": { + "colors_xml": { "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "runScheme": { - "type": "string" - }, - "sdk": { - "type": "string" - }, - "testFlightId": { - "type": "string" - }, - "firebaseId": { - "type": "string" + "properties": {}, + "additionalProperties": false }, - "exportOptions": { + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { "type": "object", "properties": { - "method": { - "type": "string" - }, - "teamID": { - "type": "string" - }, - "uploadBitcode": { - "type": "boolean" - }, - "compileBitcode": { - "type": "boolean" + "injectLines": { + "type": "array", + "items": { + "type": "string" + } }, - "uploadSymbols": { - "type": "boolean" + "post_install": { + "type": "array", + "items": { + "type": "string" + } }, - "signingStyle": { - "type": "string" + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" }, - "signingCertificate": { - "type": "string" + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } }, - "provisioningProfiles": { - "type": "object", - "additionalProperties": { + "staticPods": { + "type": "array", + "items": { "type": "string" } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" } }, - "additionalProperties": false - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" + "additionalProperties": false, + "description": "Allows to manipulate Podfile" }, - "templateXcode": { + "project_pbxproj": { "type": "object", "properties": { - "Podfile": { - "type": "object", - "properties": { - "injectLines": { - "type": "array", - "items": { - "type": "string" - } - }, - "post_install": { - "type": "array", - "items": { - "type": "string" - } - }, - "sources": { - "type": "array", - "items": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { "type": "string" }, - "description": "Array of URLs that will be injected on top of the Podfile as sources" - }, - "podDependencies": { - "type": "array", - "items": { - "type": "string" - } - }, - "staticPods": { - "type": "array", - "items": { - "type": "string" - } - }, - "header": { - "type": "array", - "items": { + "shellScript": { "type": "string" }, - "description": "Array of strings that will be injected on top of the Podfile" - } - }, - "additionalProperties": false, - "description": "Allows to manipulate Podfile" - }, - "project_pbxproj": { - "type": "object", - "properties": { - "sourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "resourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "headerFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildPhases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "shellPath": { - "type": "string" - }, - "shellScript": { - "type": "string" - }, - "inputPaths": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "shellPath", - "shellScript", - "inputPaths" - ], - "additionalProperties": false - } - }, - "frameworks": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildSettings": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "AppDelegate_mm": { - "type": "object", - "properties": { - "appDelegateMethods": { - "type": "object", - "properties": { - "application": { - "type": "object", - "properties": { - "didFinishLaunchingWithOptions": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "order": { - "type": "number" - }, - "value": { - "type": "string" - }, - "weight": { - "type": "number" - } - }, - "required": [ - "order", - "value", - "weight" - ], - "additionalProperties": false - } - ] - } - }, - "applicationDidBecomeActive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "open": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "supportedInterfaceOrientationsFor": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveRemoteNotification": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didFailToRegisterForRemoteNotificationsWithError": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegister": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegisterForRemoteNotificationsWithDeviceToken": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "continue": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didConnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didDisconnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false - }, - "userNotificationCenter": { - "type": "object", - "properties": { - "willPresent": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveNotificationResponse": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false + "inputPaths": { + "type": "array", + "items": { + "type": "string" } - }, - "additionalProperties": false - }, - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "AppDelegate_h": { - "type": "object", - "properties": { - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" } }, - "appDelegateExtensions": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } }, - "Info_plist": { + "buildSettings": { "type": "object", - "properties": {}, - "additionalProperties": false + "additionalProperties": { + "type": "string" + } } }, "additionalProperties": false }, - "buildSchemes": { + "AppDelegate_mm": { "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/ignoreWarnings" - }, - "ignoreLogs": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/ignoreLogs" - }, - "deploymentTarget": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/deploymentTarget" - }, - "orientationSupport": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/orientationSupport" - }, - "teamID": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/teamID" - }, - "excludedArchs": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/excludedArchs" - }, - "urlScheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/urlScheme" - }, - "teamIdentifier": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/teamIdentifier" - }, - "scheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/scheme" - }, - "schemeTarget": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/schemeTarget" - }, - "appleId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/appleId" - }, - "provisioningStyle": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisioningStyle" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/newArchEnabled" - }, - "codeSignIdentity": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/codeSignIdentity" - }, - "commandLineArguments": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/commandLineArguments" - }, - "provisionProfileSpecifier": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisionProfileSpecifier" - }, - "provisionProfileSpecifiers": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisionProfileSpecifiers" - }, - "allowProvisioningUpdates": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/allowProvisioningUpdates" - }, - "provisioningProfiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisioningProfiles" - }, - "codeSignIdentities": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/codeSignIdentities" - }, - "systemCapabilities": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/systemCapabilities" - }, - "entitlements": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/entitlements" - }, - "runScheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/runScheme" - }, - "sdk": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/sdk" - }, - "testFlightId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/testFlightId" - }, - "firebaseId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/firebaseId" - }, - "exportOptions": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/exportOptions" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } }, - "templateXcode": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode" - } + "additionalProperties": false }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" - }, - "tvos": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios" - }, - "tizen": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "package": { - "type": "string" - }, - "certificateProfile": { - "type": "string" - }, - "appName": { - "type": "string" - }, - "timestampBuildFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "devServerHost": { - "type": "string" - }, - "environment": { - "type": "string" + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false }, - "webpackConfig": { + "AppDelegate_h": { "type": "object", "properties": { - "publicUrl": { - "type": "string" + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } }, - "customScripts": { + "appDelegateExtensions": { "type": "array", "items": { "type": "string" - }, - "description": "Allows you to inject custom script into html header" + } } }, "additionalProperties": false }, - "buildSchemes": { + "Info_plist": { "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "package": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/package" - }, - "certificateProfile": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/certificateProfile" - }, - "appName": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/appName" - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/environment" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/webpackConfig" - } - }, - "additionalProperties": false - } + "properties": {}, + "additionalProperties": false } }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "additionalProperties": false }, - "tizenmobile": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen" + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" }, - "tizenwatch": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen" + "commit": { + "type": "string", + "description": "Alternative git commit reference string" }, - "webos": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/environment" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/webpackConfig" - }, - "iconColor": { - "type": "string" - }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/environment" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/webpackConfig" - }, - "iconColor": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/webos/properties/iconColor" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "version": { + "type": "string", + "description": "Version of pod" }, - "web": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/webpackConfig" - }, - "pagesDir": { - "type": "string", - "description": "Custom pages directory used by nextjs. Use relative paths" - }, - "outputDir": { - "type": "string", - "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" - }, - "exportDir": { - "type": "string", - "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" - }, - "nextTranspileModules": { - "type": "array", - "items": { - "type": "string" - } - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/environment" - }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/webpackConfig" - }, - "pagesDir": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web/properties/pagesDir" - }, - "outputDir": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web/properties/outputDir" - }, - "exportDir": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web/properties/exportDir" - }, - "nextTranspileModules": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web/properties/nextTranspileModules" - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/tizen/properties/environment" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "podNames": { + "type": "array", + "items": { + "type": "string" + } }, - "webtv": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web" + "podName": { + "type": "string" }, - "chromecast": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web" + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } }, - "kaios": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web" + "isStatic": { + "type": "boolean" }, - "macos": { + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/ignoreWarnings" - }, - "ignoreLogs": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/ignoreLogs" - }, - "deploymentTarget": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/deploymentTarget" - }, - "orientationSupport": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/orientationSupport" - }, - "teamID": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/teamID" - }, - "excludedArchs": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/excludedArchs" - }, - "urlScheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/urlScheme" - }, - "teamIdentifier": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/teamIdentifier" - }, - "scheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/scheme" - }, - "schemeTarget": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/schemeTarget" - }, - "appleId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/appleId" - }, - "provisioningStyle": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisioningStyle" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/newArchEnabled" - }, - "codeSignIdentity": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/codeSignIdentity" - }, - "commandLineArguments": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/commandLineArguments" - }, - "provisionProfileSpecifier": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisionProfileSpecifier" - }, - "provisionProfileSpecifiers": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisionProfileSpecifiers" - }, - "allowProvisioningUpdates": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/allowProvisioningUpdates" - }, - "provisioningProfiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisioningProfiles" - }, - "codeSignIdentities": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/codeSignIdentities" - }, - "systemCapabilities": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/systemCapabilities" - }, - "entitlements": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/entitlements" - }, - "runScheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/runScheme" - }, - "sdk": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/sdk" - }, - "testFlightId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/testFlightId" - }, - "firebaseId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/firebaseId" - }, - "exportOptions": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/exportOptions" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateXcode": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode" - }, - "electronConfig": { - "description": "Allows you to configure electron app as per https://www.electron.build/" - }, - "BrowserWindow": { - "type": "object", - "properties": { - "width": { - "type": "number" + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" }, - "height": { - "type": "number" + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" }, - "webPreferences": { - "type": "object", - "properties": { - "devTools": { - "type": "boolean" - } - }, - "additionalProperties": false, - "description": "Extra web preferences of electron app" - } + "description": "Override features definitions in AndroidManifest.xml by inclusion" }, - "additionalProperties": false, - "description": "Allows you to configure electron wrapper app window" + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } }, - "buildSchemes": { - "type": "object", - "additionalProperties": { + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { "type": "object", "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" + "phone": { + "type": "array", + "items": { + "type": "string" + } }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/ignoreWarnings" - }, - "ignoreLogs": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/ignoreLogs" - }, - "deploymentTarget": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/deploymentTarget" - }, - "orientationSupport": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/orientationSupport" + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" }, "teamID": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/teamID" - }, - "excludedArchs": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/excludedArchs" - }, - "urlScheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/urlScheme" - }, - "teamIdentifier": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/teamIdentifier" - }, - "scheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/scheme" - }, - "schemeTarget": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/schemeTarget" - }, - "appleId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/appleId" - }, - "provisioningStyle": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisioningStyle" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/newArchEnabled" + "type": "string" }, - "codeSignIdentity": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/codeSignIdentity" + "uploadBitcode": { + "type": "boolean" }, - "commandLineArguments": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/commandLineArguments" + "compileBitcode": { + "type": "boolean" }, - "provisionProfileSpecifier": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisionProfileSpecifier" + "uploadSymbols": { + "type": "boolean" }, - "provisionProfileSpecifiers": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisionProfileSpecifiers" + "signingStyle": { + "type": "string" }, - "allowProvisioningUpdates": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/allowProvisioningUpdates" + "signingCertificate": { + "type": "string" }, "provisioningProfiles": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/provisioningProfiles" - }, - "codeSignIdentities": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/codeSignIdentities" - }, - "systemCapabilities": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/systemCapabilities" - }, - "entitlements": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/entitlements" - }, - "runScheme": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/runScheme" - }, - "sdk": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/sdk" - }, - "testFlightId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/testFlightId" - }, - "firebaseId": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/firebaseId" - }, - "exportOptions": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/exportOptions" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateXcode": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode" - }, - "electronConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/macos/properties/electronConfig" - }, - "BrowserWindow": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/macos/properties/BrowserWindow" + "type": "object", + "additionalProperties": { + "type": "string" + } } }, "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" - }, - "linux": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/web" - }, - "windows": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "electronConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/macos/properties/electronConfig" - }, - "BrowserWindow": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/macos/properties/BrowserWindow" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateVSProject": { - "type": "object", - "properties": { - "language": { - "type": "string", - "description": "Specify generated project language: cpp for C++ or cs for C#" - }, - "arch": { - "type": "string", - "description": "Specification of targeted architecture" - }, - "experimentalNuGetDependency": { - "type": "boolean" - }, - "useWinUI3": { - "type": "boolean" - }, - "nuGetTestVersion": { - "type": "string" - }, - "reactNativeEngine": { - "type": "string" - }, - "nuGetTestFeed": { - "type": "string" - }, - "overwrite": { - "type": "boolean", - "description": "Whether to attempt to override the existing builds files when running a build once more" - }, - "release": { - "type": "boolean", - "description": "Enables full packaging of the app for release" - }, - "root": { - "type": "string", - "description": "Project root folder location (not the app itself, which is in platformBuilds)" - }, - "singleproc": { - "type": "boolean", - "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" - }, - "emulator": { - "type": "boolean" - }, - "device": { - "type": "boolean" - }, - "target": { - "type": "string" - }, - "remoteDebugging": { - "type": "boolean" - }, - "logging": { - "type": "boolean", - "description": "Logging all the build proccesses to console" - }, - "packager": { - "type": "boolean" - }, - "bundle": { - "type": "boolean" - }, - "launch": { - "type": "boolean", - "description": "Launches the application once the build process is finished" - }, - "autolink": { - "type": "boolean", - "description": "Launches the application once the build process is finished" - }, - "build": { - "type": "boolean", - "description": "Builds the application before launching it" - }, - "sln": { - "type": "string", - "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" - }, - "proj": { - "type": "string", - "description": "Root project directory for your React Native Windows project (not Visual Studio project)" - }, - "appPath": { - "type": "string", - "description": "Full path to windows plaform build directory" - }, - "msbuildprops": { - "type": "string", - "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" - }, - "buildLogDirectory": { - "type": "string", - "description": "Full path to directory where builds logs should be stored, default - project path" - }, - "info": { - "type": "boolean", - "description": "Print information about the build machine to console" - }, - "directDebugging": { - "type": "boolean" - }, - "telemetry": { - "type": "boolean", - "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" - }, - "devPort": { + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } }, - "additionalMetroOptions": { - "type": "object", - "additionalProperties": {} - }, - "packageExtension": { + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { "type": "string" } }, - "additionalProperties": false - }, - "buildSchemes": { - "type": "object", - "additionalProperties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { "type": "object", "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.app/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.app/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.app/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.app/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.app/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.app/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.app/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.app/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.app/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.app/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.app/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.app/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.app/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.app/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/engine" + "width": { + "type": "number" }, - "entryFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" + "height": { + "type": "number" }, - "bundleAssets": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "electronConfig": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/macos/properties/electronConfig" - }, - "BrowserWindow": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/macos/properties/BrowserWindow" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateVSProject": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/windows/properties/templateVSProject" + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" - }, - "xbox": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/windows" + }, + "additionalProperties": false + } } }, - "additionalProperties": false, - "description": "Object containing platform configurations" + "required": [ + "buildSchemes" + ], + "additionalProperties": false }, - "plugins": { + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { "type": "object", - "additionalProperties": { - "anyOf": [ - { - "anyOf": [ - { + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { "type": "object", "properties": { - "supportedPlatforms": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.app/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "description": "Array list of all supported platforms in current project" - }, - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin disabled" - }, - "props": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Custom props passed to plugin" - }, - "version": { - "type": "string", - "description": "Version of plugin. Typically package version" - }, - "deprecated": { + "language": { "type": "string", - "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + "description": "Specify generated project language: cpp for C++ or cs for C#" }, - "source": { + "arch": { "type": "string", - "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + "description": "Specification of targeted architecture" }, - "disableNpm": { - "type": "boolean", - "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + "experimentalNuGetDependency": { + "type": "boolean" }, - "skipMerge": { - "type": "boolean", - "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + "useWinUI3": { + "type": "boolean" }, - "npm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + "nuGetTestVersion": { + "type": "string" }, - "pluginDependencies": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "List of other Renative plugins this plugin depends on" + "reactNativeEngine": { + "type": "string" }, - "webpackConfig": { - "type": "object", - "properties": { - "modulePaths": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "moduleAliases": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "projectPath": { - "type": "string" - } - }, - "required": [ - "projectPath" - ], - "additionalProperties": false - } - ] - } - } - ] - }, - "nextTranspileModules": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "description": "Allows you to configure webpack bahaviour per each individual plugin" + "nuGetTestFeed": { + "type": "string" }, - "disablePluginTemplateOverrides": { + "overwrite": { "type": "boolean", - "description": "Disables plugin overrides for selected plugin" + "description": "Whether to attempt to override the existing builds files when running a build once more" }, - "fontSources": { - "type": "array", - "items": { - "type": "string" - } + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" }, - "android": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin platform disabled" - }, - "forceLinking": { - "type": "boolean", - "default": false, - "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" - }, - "path": { - "type": "string", - "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." - }, - "projectName": { - "type": "string" - }, - "skipLinking": { - "type": "boolean" - }, - "skipImplementation": { - "type": "boolean" - }, - "implementation": { - "type": "string" - }, - "package": { - "type": "string" - }, - "templateAndroid": { - "type": "object", - "properties": { - "gradle_properties": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/gradle_properties" - }, - "build_gradle": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/build_gradle" - }, - "app_build_gradle": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/app_build_gradle" - }, - "AndroidManifest_xml": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml" - }, - "strings_xml": { - "type": "object", - "properties": { - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "name": { - "type": "string" - }, - "child_value": { - "type": "string" - } - }, - "required": [ - "tag", - "name", - "child_value" - ], - "additionalProperties": false - } - } - }, - "additionalProperties": false - }, - "MainActivity_kt": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/MainActivity_kt" - }, - "MainApplication_kt": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/android/properties/templateAndroid/properties/MainApplication_kt" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" }, - "androidtv": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android" + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" }, - "androidwear": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android" + "emulator": { + "type": "boolean" }, - "firetv": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android" + "device": { + "type": "boolean" }, - "ios": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/path" - }, - "git": { - "type": "string", - "description": "Alternative git url for pod instead of version" - }, - "commit": { - "type": "string", - "description": "Alternative git commit reference string" - }, - "version": { - "type": "string", - "description": "Version of pod" - }, - "podNames": { - "type": "array", - "items": { - "type": "string" - } - }, - "podName": { - "type": "string" - }, - "staticFrameworks": { - "type": "array", - "items": { - "type": "string" - } - }, - "templateXcode": { - "type": "object", - "properties": { - "Podfile": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/Podfile" - }, - "project_pbxproj": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/project_pbxproj" - }, - "AppDelegate_mm": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm" - }, - "AppDelegate_h": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_h" - }, - "Info_plist": { - "$ref": "#/definitions/rnv.app/properties/platforms/properties/ios/properties/templateXcode/properties/Info_plist" - } - }, - "additionalProperties": false - }, - "isStatic": { - "type": "boolean" - }, - "buildType": { - "type": "string", - "enum": [ - "dynamic", - "static" - ], - "description": "Build type of the pod" - } - }, - "additionalProperties": false + "target": { + "type": "string" }, - "tvos": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/ios" + "remoteDebugging": { + "type": "boolean" }, - "tizen": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/path" - } - }, - "additionalProperties": false + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" }, - "tizenmobile": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" }, - "tizenwatch": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" }, - "webos": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" }, - "web": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" }, - "webtv": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" }, - "chromecast": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" }, - "kaios": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "directDebugging": { + "type": "boolean" }, - "macos": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" }, - "linux": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "devPort": { + "type": "string" }, - "windows": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} }, - "xbox": { - "$ref": "#/definitions/rnv.app/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" + "packageExtension": { + "type": "string" } }, "additionalProperties": false - }, - { - "type": "string" } - ] - }, - { - "type": "null" + }, + "additionalProperties": false } - ] + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } }, - "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.app": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder" + }, + "custom": { + "$ref": "#/definitions/zodExt" + }, + "hidden": { + "type": "boolean", + "description": "If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`" + }, + "extendsTemplate": { + "type": "string", + "description": "You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`" + }, + "extend": { + "type": "string", + "description": "extend another appConfig by id" + }, + "common": { + "$ref": "#/definitions/zodCommonSchema" + }, + "platforms": { + "$ref": "#/definitions/zodPlatformsSchema" + }, + "plugins": { + "$ref": "#/definitions/zodPluginsSchema" }, "$schema": { "type": "string", diff --git a/packages/core/jsonSchema/rnv.engine.json b/packages/core/jsonSchema/rnv.engine.json index 86ce24200a..eb9c9a71c2 100644 --- a/packages/core/jsonSchema/rnv.engine.json +++ b/packages/core/jsonSchema/rnv.engine.json @@ -1,11 +1,3301 @@ { "$ref": "#/definitions/rnv.engine", "definitions": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, "rnv.engine": { "type": "object", "properties": { "custom": { - "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + "$ref": "#/definitions/zodExt" }, "id": { "type": "string", @@ -18,10 +3308,6 @@ "type": "string", "description": "Engine extension ised by rnv during compilation" }, - "extends": { - "type": "string", - "description": "ID of engine to extend. Not being used yet" - }, "overview": { "type": "string", "description": "Overview description of engine" @@ -97,12 +3383,6 @@ "description": "schema definition" } }, - "required": [ - "id", - "packageName", - "engineExtension", - "overview" - ], "additionalProperties": false } }, diff --git a/packages/core/jsonSchema/rnv.integration.json b/packages/core/jsonSchema/rnv.integration.json index c2da968672..aca07e1013 100644 --- a/packages/core/jsonSchema/rnv.integration.json +++ b/packages/core/jsonSchema/rnv.integration.json @@ -1,6 +1,3296 @@ { "$ref": "#/definitions/rnv.integration", "definitions": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, "rnv.integration": { "type": "object", "properties": { @@ -12,9 +3302,6 @@ "description": "schema definition" } }, - "required": [ - "packageName" - ], "additionalProperties": false } }, diff --git a/packages/core/jsonSchema/rnv.local.json b/packages/core/jsonSchema/rnv.local.json index d00a18e2d2..d458106409 100644 --- a/packages/core/jsonSchema/rnv.local.json +++ b/packages/core/jsonSchema/rnv.local.json @@ -1,40 +1,3305 @@ { "$ref": "#/definitions/rnv.local", "definitions": { - "rnv.local": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { "type": "object", "properties": { - "workspaceAppConfigsDir": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { "type": "string", - "description": "Defines app configs dir outside of current project" + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - "defaultTargets": { + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { "type": "object", "additionalProperties": { "type": "string" }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" ] }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.local": { + "type": "object", + "properties": { + "workspaceAppConfigsDir": { + "type": "string", + "description": "Defines app configs dir outside of current project" + }, + "defaultTargets": { + "$ref": "#/definitions/zodDefaultTargets", "description": "Define targets to be used when -t is not set on any project run" }, "_meta": { diff --git a/packages/core/jsonSchema/rnv.plugin.json b/packages/core/jsonSchema/rnv.plugin.json index 4c998d2cf8..f60dad44fa 100644 --- a/packages/core/jsonSchema/rnv.plugin.json +++ b/packages/core/jsonSchema/rnv.plugin.json @@ -1,34 +1,498 @@ { "$ref": "#/definitions/rnv.plugin", "definitions": { - "rnv.plugin": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { "type": "object", "properties": { - "supportedPlatforms": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { "type": "array", "items": { - "type": "string", - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } ] }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", "description": "Array list of all supported platforms in current project" }, "disabled": { @@ -162,21 +626,6 @@ "type": "string", "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." }, - "projectName": { - "type": "string" - }, - "skipLinking": { - "type": "boolean" - }, - "skipImplementation": { - "type": "boolean" - }, - "implementation": { - "type": "string" - }, - "package": { - "type": "string" - }, "templateAndroid": { "type": "object", "properties": { @@ -251,13 +700,6 @@ } } }, - "required": [ - "allprojects", - "plugins", - "buildscript", - "dexOptions", - "injectAfterAll" - ], "additionalProperties": false, "description": "Overrides values in `build.gradle` file of generated android based project" }, @@ -310,64 +752,11 @@ "type": "string" } }, - "required": [ - "apply", - "defaultConfig" - ], "additionalProperties": false, "description": "Overrides values in `app/build.gradle` file of generated android based project" }, "AndroidManifest_xml": { - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "android:name": { - "type": "string" - }, - "android:required": { - "type": "boolean" - }, - "package": { - "type": "string" - }, - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/tag" - }, - "android:name": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:name" - }, - "android:required": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:required" - }, - "children": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/children/items" - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false, + "$ref": "#/definitions/zodAndroidManifest", "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " }, "strings_xml": { @@ -389,14 +778,15 @@ } }, "required": [ - "tag", - "name", - "child_value" + "tag" ], "additionalProperties": false } } }, + "required": [ + "children" + ], "additionalProperties": false }, "MainActivity_kt": { @@ -470,60 +860,78 @@ }, "additionalProperties": false, "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false } }, "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" } }, "additionalProperties": false }, "androidtv": { - "$ref": "#/definitions/rnv.plugin/properties/android" + "$ref": "#/definitions/zodPluginSchema/properties/android" }, "androidwear": { - "$ref": "#/definitions/rnv.plugin/properties/android" + "$ref": "#/definitions/zodPluginSchema/properties/android" }, "firetv": { - "$ref": "#/definitions/rnv.plugin/properties/android" + "$ref": "#/definitions/zodPluginSchema/properties/android" }, "ios": { "type": "object", "properties": { "disabled": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/disabled" + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" }, "forceLinking": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/forceLinking" + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" }, "path": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/path" - }, - "git": { - "type": "string", - "description": "Alternative git url for pod instead of version" - }, - "commit": { - "type": "string", - "description": "Alternative git commit reference string" - }, - "version": { - "type": "string", - "description": "Version of pod" - }, - "podNames": { - "type": "array", - "items": { - "type": "string" - } - }, - "podName": { - "type": "string" - }, - "staticFrameworks": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" }, "templateXcode": { "type": "object", @@ -647,97 +1055,73 @@ "didFinishLaunchingWithOptions": { "type": "array", "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "order": { - "type": "number" - }, - "value": { - "type": "string" - }, - "weight": { - "type": "number" - } - }, - "required": [ - "order", - "value", - "weight" - ], - "additionalProperties": false - } - ] + "$ref": "#/definitions/zodAppDelegateMethod" } }, "applicationDidBecomeActive": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "open": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "supportedInterfaceOrientationsFor": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didReceiveRemoteNotification": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didFailToRegisterForRemoteNotificationsWithError": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didReceive": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didRegister": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didRegisterForRemoteNotificationsWithDeviceToken": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "continue": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didConnectCarInterfaceController": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didDisconnectCarInterfaceController": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } } }, @@ -749,13 +1133,13 @@ "willPresent": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } }, "didReceiveNotificationResponse": { "type": "array", "items": { - "$ref": "#/definitions/rnv.plugin/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" + "$ref": "#/definitions/zodAppDelegateMethod" } } }, @@ -799,6 +1183,33 @@ }, "additionalProperties": false }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, "isStatic": { "type": "boolean" }, @@ -811,61 +1222,2185 @@ "description": "Build type of the pod" } }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], "additionalProperties": false }, "tvos": { - "$ref": "#/definitions/rnv.plugin/properties/ios" + "$ref": "#/definitions/zodPluginSchema/properties/ios" }, "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { "type": "object", "properties": { - "disabled": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.plugin/properties/android/properties/path" - } - }, - "additionalProperties": false + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.plugin": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled", + "description": "Marks plugin disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props", + "description": "Custom props passed to plugin" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm", + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies", + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig", + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + }, + "android": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "tizenmobile": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "tizenwatch": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "webos": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "web": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "webtv": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "chromecast": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "kaios": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "macos": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "linux": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "windows": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "xbox": { - "$ref": "#/definitions/rnv.plugin/properties/tizen" + "$ref": "#/definitions/zodPluginPlatformBaseFragment" }, "custom": { - "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + "$ref": "#/definitions/zodExt" }, "$schema": { "type": "string", diff --git a/packages/core/jsonSchema/rnv.private.json b/packages/core/jsonSchema/rnv.private.json index a5551972c5..f629a00d8f 100644 --- a/packages/core/jsonSchema/rnv.private.json +++ b/packages/core/jsonSchema/rnv.private.json @@ -1,6 +1,3296 @@ { "$ref": "#/definitions/rnv.private", "definitions": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, "rnv.private": { "type": "object", "properties": { @@ -43,11 +3333,7 @@ "firetv": { "$ref": "#/definitions/rnv.private/properties/platforms/properties/android" }, - "ios": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, + "ios": {}, "tvos": { "$ref": "#/definitions/rnv.private/properties/platforms/properties/ios" }, diff --git a/packages/core/jsonSchema/rnv.project.json b/packages/core/jsonSchema/rnv.project.json index 9b3733cf46..e3a42d9ad7 100644 --- a/packages/core/jsonSchema/rnv.project.json +++ b/packages/core/jsonSchema/rnv.project.json @@ -1,1538 +1,821 @@ { "$ref": "#/definitions/rnv.project", "definitions": { - "rnv.project": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { "type": "object", "properties": { - "workspaceID": { - "type": "string", - "description": "Workspace ID your project belongs to. This will mach same folder name in the root of your user directory. ie `~/` on macOS" + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" }, - "projectVersion": { + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { "type": "string" }, - "projectName": { - "type": "string", - "description": "Name of the project which will be used in workspace as folder name. this will also be used as part of the KEY in crypto env var generator" + "version": { + "type": "string" }, - "isTemplate": { + "disabled": { "type": "boolean" }, - "defaults": { - "type": "object", - "properties": { - "ports": { - "type": "object", - "additionalProperties": { - "type": "number" - }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts" - }, - "supportedPlatforms": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Array list of all supported platforms in current project" - }, - "portOffset": { - "type": "number", - "description": "Offset each port default value by increment" - }, - "defaultCommandSchemes": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "enum": [ - "run", - "export", - "build" - ] - }, - "description": "List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`" - }, - "targets": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Override of default targets specific to this project" - } - }, - "additionalProperties": false, - "description": "Default system config for this project" - }, - "pipes": { + "includedPaths": { "type": "array", "items": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] }, - "description": "To avoid rnv building `buildHooks/src` every time you can specify which specific pipes should trigger recompile of buildHooks" + "description": "Defines list of all file/dir paths you want to include in template" }, - "crypto": { + "renative_json": { "type": "object", "properties": { - "path": { - "type": "string", - "description": "Relative path to encrypted file in your renative project. Example: \"./secrets/mySecrets.enc\"" + "$schema": { + "type": "string" }, - "isOptional": { - "type": "boolean", - "description": "Mark if crypto object should not checked every run" + "extendsTemplate": { + "type": "string" } }, - "required": [ - "path" - ], - "additionalProperties": false, - "description": "This prop enables automatic encrypt and decrypt of sensitive information in your project. \nRNV will generate new env variable with can be used to encrypt and decrypt. this env var is generated by combining (and sanitizing) 2 properties from your renative.json: \nworkspaceID + projectName.\nThese 2 properties are also used to generate path on your local machine where encrypted files will be decrypted into." + "additionalProperties": false }, - "paths": { + "package_json": { "type": "object", "properties": { - "appConfigsDir": { - "type": "string", - "description": "Custom path to appConfigs. defaults to `./appConfigs`" + "dependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "platformTemplatesDirs": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Custom location of ejected platform templates. this is populated after you run `rnv platform eject`" + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "appConfigsDirs": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of custom location app configs directories`" + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "platformAssetsDir": { - "type": "string", - "description": "Custom path to platformAssets folder. defaults to `./platformAssets`" + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "platformBuildsDir": { - "type": "string", - "description": "Custom path to platformBuilds folder. defaults to `./platformBuilds`" + "name": { + "type": "string" }, - "pluginTemplates": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "npm": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": [ - "path" - ], - "additionalProperties": false - }, - "description": "\n Allows you to define custom plugin template scopes. default scope for all plugins is `rnv`.\n this custom scope can then be used by plugin via `\"source:myCustomScope\"` value\n \n those will allow you to use direct pointer to preconfigured plugin:\n \n ```\n \"plugin-name\": \"source:myCustomScope\"\n ```\n \n NOTE: by default every plugin you define with scope will also merge any\n files defined in overrides automatically to your project.\n To skip file overrides coming from source plugin you need to detach it from the scope:\n \n ```\n {\n \"plugins\": {\n \"plugin-name\": {\n \"source\": \"\"\n }\n }\n }\n ```\n " + "version": { + "type": "string" } }, - "additionalProperties": false, - "description": "Define custom paths for RNV to look into" + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } }, - "permissions": { - "type": "object", - "properties": { - "android": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "key": { - "type": "string" - }, - "security": { - "type": "string" - } - }, - "required": [ - "key", - "security" - ], - "additionalProperties": false - }, - "description": "Android SDK specific permissions" - }, - "ios": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "desc": { - "type": "string" - } - }, - "required": [ - "desc" - ], - "additionalProperties": false - }, - "description": "iOS SDK specific permissions" - } + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" }, - "additionalProperties": false, - "description": "Permission definititions which can be used by app configs via `includedPermissions` and `excludedPermissions` to customize permissions for each app" + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" }, - "engines": { - "type": "object", - "additionalProperties": { - "type": "string", - "const": "source:rnv" + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" }, - "description": "List of engines available in this project" + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" }, - "enableHookRebuild": { - "type": "boolean", - "description": "If set to true in `./renative.json` build hooks will be compiled at each rnv command run. If set to `false` (default) rebuild will be triggered only if `dist` folder is missing, `-r` has been passed or you run `rnv hooks run` directly making your rnv commands faster" + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" }, - "extendsTemplate": { + "idSuffix": { + "type": "string" + }, + "version": { "type": "string", - "description": "You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`" + "description": "Semver style version of your app" }, - "tasks": { - "type": "object", - "properties": { - "install": { - "type": "object", - "properties": { - "script": { - "type": "string" - }, - "platform": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "ignore": { - "type": "boolean" - }, - "ignoreTasks": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - } - } - }, - "required": [ - "script" - ], - "additionalProperties": false - } - }, - "additionalProperties": false, - "description": "Allows to override specific task within renative toolchain. (currently only `install` supported). this is useful if you want to change specific behaviour of built-in task. ie install task triggers yarn/npm install by default. but that might not be desirable installation trigger" + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" }, - "integrations": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": {}, - "additionalProperties": false + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" }, - "description": "Object containing integration configurations where key represents package name" + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" }, - "env": { - "type": "object", - "additionalProperties": {}, - "description": "Object containing injected env variables" + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" }, - "runtime": { - "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" }, - "templateConfig": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "disabled": { - "type": "boolean" - }, - "includedPaths": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "paths": { - "type": "array", - "items": { - "type": "string" - } - }, - "engines": { - "type": "array", - "items": { - "type": "string" - } - }, - "platforms": { - "$ref": "#/definitions/rnv.project/properties/defaults/properties/supportedPlatforms", - "description": "Array list of all supported platforms in current project" - } - }, - "required": [ - "paths" - ], - "additionalProperties": false - } - ] - }, - "description": "Defines list of all file/dir paths you want to include in template" - }, - "renative_json": { - "type": "object", - "properties": { - "$schema": { - "type": "string" - }, - "extendsTemplate": { - "type": "string" - } - }, - "additionalProperties": true - }, - "package_json": { - "type": "object", - "properties": { - "dependencies": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "devDependencies": { - "$ref": "#/definitions/rnv.project/properties/templateConfig/properties/package_json/properties/dependencies" - }, - "peerDependencies": { - "$ref": "#/definitions/rnv.project/properties/templateConfig/properties/package_json/properties/dependencies" - }, - "optionalDependencies": { - "$ref": "#/definitions/rnv.project/properties/templateConfig/properties/package_json/properties/dependencies" - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - }, - "additionalProperties": true - } + "fontSources": { + "type": "array", + "items": { + "type": "string" }, - "additionalProperties": false, - "description": "Used in `renative.template.json` allows you to define template behaviour." + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" }, - "_meta": { - "type": "object", - "properties": { - "requires_first_template_apply": { - "$ref": "#/definitions/rnv.project/properties/defaults/properties/supportedPlatforms" - } + "assetSources": { + "type": "array", + "items": { + "type": "string" }, - "additionalProperties": false + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" }, - "isMonorepo": { - "type": "boolean", - "description": "Mark if your project is part of monorepo" + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" }, - "monoRoot": { - "type": "string", - "description": "Define custom path to monorepo root where starting point is project directory" + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" }, "custom": { - "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" }, - "skipAutoUpdate": { - "type": "boolean", - "description": "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" }, - "common": { - "type": "object", - "properties": { - "includedPermissions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" - }, - "excludedPermissions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" - }, - "id": { - "type": "string", - "description": "Bundle ID of application. ie: com.example.myapp" - }, - "idSuffix": { - "type": "string" - }, - "version": { - "type": "string", - "description": "Semver style version of your app" - }, - "versionCode": { - "type": "string", - "description": "Manual verride of generated version code" - }, - "versionFormat": { - "type": "string", - "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n\nIf you do not define versionFormat, no formatting will apply to version.\n\n\"versionFormat\" : \"0.0.0\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 1.2.3\n\nIN: 1.2.3 OUT: 1.2.3\n\n\n\n\"versionFormat\" : \"0.0.0.0.0\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 1.2.3.4.56\n\nIN: 1.2.3 OUT: 1.2.3\n\n\"versionFormat\" : \"0.0.0.x.x.x.x\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 1.2.3.rc.4.build.56\n\nIN: 1.2.3 OUT: 1.2.3\n\n" - }, - "versionCodeFormat": { - "type": "string", - "description": "Allows you to fine-tune auto generated version codes.\n\nVersion code is autogenerated from app version defined in package.json or renative.json.\n\nNOTE: If you define versionCode manually this formatting will not apply.\n\nEXAMPLE 1:\n\ndefault value: 00.00.00\n\nIN: 1.2.3-rc.4+build.56 OUT: 102030456\n\nIN: 1.2.3 OUT: 10203\n\nEXAMPLE 2:\n\n\"versionCodeFormat\" : \"00.00.00.00.00\"\n\nIN: 1.2.3-rc.4+build.56 OUT: 102030456\n\nIN: 1.2.3 OUT: 102030000\n\nEXAMPLE 3:\n\n\"versionCodeFormat\" : \"00.00.00.0000\"\n\nIN: 1.0.23-rc.15 OUT: 100230015\n\nIN: 1.0.23 OUT: 100230000\n\n" - }, - "versionCodeOffset": { - "type": "number" - }, - "title": { - "type": "string", - "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" - }, - "description": { - "type": "string", - "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" - }, - "author": { - "type": "string", - "description": "Author name" - }, - "license": { - "type": "string", - "description": "Injects license information into app" - }, - "includedFonts": { - "type": "array", - "items": { - "type": "string" + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" }, - "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" - }, - "backgroundColor": { - "type": "string", - "minLength": 4, - "maxLength": 9, - "pattern": "^#", - "description": "Defines root view backgroundColor for all platforms in HEX format" - }, - "splashScreen": { - "type": "boolean", - "description": "Enable or disable splash screen" - }, - "fontSources": { - "type": "array", - "items": { - "type": "string" + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" }, - "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" - }, - "assetSources": { - "type": "array", - "items": { - "type": "string" + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" }, - "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" - }, - "includedPlugins": { - "type": "array", - "items": { - "type": "string" + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" }, - "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" - }, - "excludedPlugins": { - "type": "array", - "items": { - "type": "string" + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" }, - "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/custom" + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "type": "string", - "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "enabled": { - "type": "boolean", - "description": "Defines whether build scheme shows up in options to run" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/defaults/properties/supportedPlatforms/items" - }, - "assetFolderPlatform": { - "type": "string", - "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" - }, - "engine": { - "type": "string", - "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" - }, - "entryFile": { - "type": "string", - "default": "index", - "description": "Alternative name of the entry file without `.js` extension" - }, - "bundleAssets": { - "type": "boolean", - "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" - }, - "enableSourceMaps": { - "type": "boolean", - "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" - }, - "bundleIsDev": { - "type": "boolean", - "description": "If set to `true` debug build will be generated" - }, - "getJsBundleFile": { + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { "type": "string" } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" }, - "additionalProperties": false + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" } } }, "additionalProperties": false, - "description": "Common config props used as default props for all available buildSchemes" + "description": "Allows you to configure webpack bahaviour per each individual plugin" }, - "platforms": { + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { "type": "object", "properties": { - "android": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { "type": "object", "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "enableAndroidX": { - "type": [ - "boolean", - "string" - ], - "default": true, - "description": "Enables new android X architecture" - }, - "enableJetifier": { - "type": [ - "boolean", - "string" - ], - "default": true, - "description": "Enables Jetifier" - }, - "signingConfig": { - "type": "string", - "default": "Debug", - "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" - }, - "minSdkVersion": { - "type": "number", - "default": 28, - "description": "Minimum Android SDK version device has to have in order for app to run" - }, - "multipleAPKs": { - "type": "boolean", - "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" - }, - "aab": { - "type": "boolean", - "description": "If set to true, android project will generate app.aab instead of apk" - }, - "extraGradleParams": { - "type": "string", - "description": "Allows passing extra params to gradle command" - }, - "minifyEnabled": { - "type": "boolean", - "description": "Sets minifyEnabled buildType property in app/build.gradle" - }, - "targetSdkVersion": { - "type": "number", - "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" - }, - "compileSdkVersion": { - "type": "number", - "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" - }, - "kotlinVersion": { - "type": "string", - "default": "1.7.10", - "description": "Allows you define custom kotlin version" - }, - "ndkVersion": { - "type": "string", - "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" - }, - "supportLibVersion": { - "type": "string", - "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" - }, - "googleServicesVersion": { - "type": "string", - "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" - }, - "gradleBuildToolsVersion": { - "type": "string", - "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" - }, - "gradleWrapperVersion": { - "type": "string", - "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" - }, - "excludedFeatures": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Override features definitions in AndroidManifest.xml by exclusion" - }, - "includedFeatures": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Override features definitions in AndroidManifest.xml by inclusion" - }, - "buildToolsVersion": { - "type": "string", - "default": "34.0.0", - "description": "Override android build tools version" - }, - "disableSigning": { - "type": "boolean" - }, - "storeFile": { - "type": "string", - "description": "Name of the store file in android project" - }, - "keyAlias": { - "type": "string", - "description": "Key alias of the store file in android project" - }, - "newArchEnabled": { - "type": "boolean", - "description": "Enables new arch for android. Default: false" - }, - "flipperEnabled": { - "type": "boolean", - "description": "Enables flipper for ios. Default: true" - }, - "reactNativeEngine": { - "type": "string", - "enum": [ - "jsc", - "v8-android", - "v8-android-nointl", - "v8-android-jit", - "v8-android-jit-nointl", - "hermes" - ], - "default": "hermes", - "description": "Allows you to define specific native render engine to be used" - }, - "templateAndroid": { + "build_gradle": { "type": "object", "properties": { - "gradle_properties": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "description": "Overrides values in `gradle.properties` file of generated android based project" - }, - "build_gradle": { + "allprojects": { "type": "object", "properties": { - "allprojects": { - "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - }, - "description": "Customize repositories section of build.gradle" - } - }, - "required": [ - "repositories" - ], - "additionalProperties": false - }, - "plugins": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildscript": { - "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - } - }, - "required": [ - "repositories", - "dependencies" - ], - "additionalProperties": false - }, - "dexOptions": { + "repositories": { "type": "object", "additionalProperties": { "type": "boolean" - } - }, - "injectAfterAll": { - "type": "array", - "items": { - "type": "string" - } + }, + "description": "Customize repositories section of build.gradle" } }, "required": [ - "allprojects", - "plugins", - "buildscript", - "dexOptions", - "injectAfterAll" + "repositories" ], - "additionalProperties": false, - "description": "Overrides values in `build.gradle` file of generated android based project" + "additionalProperties": false }, - "app_build_gradle": { + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { "type": "object", "properties": { - "apply": { - "type": "array", - "items": { - "type": "string" - } - }, - "defaultConfig": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildTypes": { + "repositories": { "type": "object", - "properties": { - "debug": { - "type": "array", - "items": { - "type": "string" - } - }, - "release": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "afterEvaluate": { - "type": "array", - "items": { - "type": "string" + "additionalProperties": { + "type": "boolean" } }, - "implementations": { - "type": "array", - "items": { - "type": "string" + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" } - }, - "implementation": { - "type": "string" } }, "required": [ - "apply", - "defaultConfig" + "repositories", + "dependencies" ], - "additionalProperties": false, - "description": "Overrides values in `app/build.gradle` file of generated android based project" + "additionalProperties": false }, - "AndroidManifest_xml": { + "dexOptions": { "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "android:name": { - "type": "string" - }, - "android:required": { - "type": "boolean" - }, - "package": { - "type": "string" - }, - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/tag" - }, - "android:name": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:name" - }, - "android:required": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:required" - }, - "children": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/children/items" - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false, - "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + "additionalProperties": { + "type": "boolean" + } }, - "strings_xml": { - "type": "object", - "properties": {}, - "additionalProperties": false + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } }, - "MainActivity_kt": { - "type": "object", - "properties": { - "onCreate": { - "type": "string", - "default": "super.onCreate(savedInstanceState)", - "description": "Overrides super.onCreate method handler of MainActivity.java" - }, - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { - "type": "string" - } - }, - "resultMethods": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } }, - "MainApplication_kt": { + "buildTypes": { "type": "object", "properties": { - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { - "type": "string" - } - }, - "packages": { + "debug": { "type": "array", "items": { "type": "string" } }, - "packageParams": { + "release": { "type": "array", "items": { "type": "string" } } }, - "additionalProperties": false, - "description": "Allows you to configure behaviour of MainActivity" - }, - "settings_gradle": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "gradle_wrapper_properties": { - "type": "object", - "properties": {}, - "additionalProperties": false - }, - "SplashActivity_java": { - "type": "object", - "properties": {}, "additionalProperties": false }, - "styles_xml": { - "type": "object", - "properties": {}, - "additionalProperties": false + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } }, - "colors_xml": { - "type": "object", - "properties": {}, - "additionalProperties": false + "implementations": { + "type": "array", + "items": { + "type": "string" + } }, - "proguard_rules_pro": { - "type": "object", - "properties": {}, - "additionalProperties": false + "implementation": { + "type": "string" } }, - "additionalProperties": false + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" }, - "buildSchemes": { + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "enableAndroidX": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/enableAndroidX" - }, - "enableJetifier": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/enableJetifier" - }, - "signingConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/signingConfig" - }, - "minSdkVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/minSdkVersion" - }, - "multipleAPKs": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/multipleAPKs" - }, - "aab": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/aab" - }, - "extraGradleParams": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/extraGradleParams" - }, - "minifyEnabled": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/minifyEnabled" - }, - "targetSdkVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/targetSdkVersion" - }, - "compileSdkVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/compileSdkVersion" - }, - "kotlinVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/kotlinVersion" - }, - "ndkVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/ndkVersion" - }, - "supportLibVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/supportLibVersion" - }, - "googleServicesVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/googleServicesVersion" - }, - "gradleBuildToolsVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/gradleBuildToolsVersion" - }, - "gradleWrapperVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/gradleWrapperVersion" - }, - "excludedFeatures": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/excludedFeatures" - }, - "includedFeatures": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/includedFeatures" - }, - "buildToolsVersion": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/buildToolsVersion" - }, - "disableSigning": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/disableSigning" - }, - "storeFile": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/storeFile" - }, - "keyAlias": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/keyAlias" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/newArchEnabled" - }, - "flipperEnabled": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/flipperEnabled" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateAndroid": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid" + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" - }, - "androidtv": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android" - }, - "androidwear": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android" - }, - "firetv": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android" - }, - "ios": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "type": "boolean", - "description": "Injects `inhibit_all_warnings` into Podfile" - }, - "ignoreLogs": { - "type": "boolean", - "description": "Passes `-quiet` to xcodebuild command" - }, - "deploymentTarget": { - "type": "string", - "description": "Deployment target for xcodepoj" + } + }, + "required": [ + "children" + ], + "additionalProperties": false }, - "orientationSupport": { + "MainActivity_kt": { "type": "object", "properties": { - "phone": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { "type": "array", "items": { "type": "string" } }, - "tab": { + "resultMethods": { "type": "array", "items": { "type": "string" @@ -1541,2460 +824,2855 @@ }, "additionalProperties": false }, - "teamID": { - "type": "string", - "description": "Apple teamID" - }, - "excludedArchs": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" - }, - "urlScheme": { - "type": "string", - "description": "URL Scheme for the app used for deeplinking" - }, - "teamIdentifier": { - "type": "string", - "description": "Apple developer team ID" - }, - "scheme": { - "type": "string" - }, - "schemeTarget": { - "type": "string" - }, - "appleId": { - "type": "string" - }, - "provisioningStyle": { - "type": "string" - }, - "newArchEnabled": { - "type": "boolean", - "description": "Enables new archs for iOS. Default: false" - }, - "codeSignIdentity": { - "type": "string", - "description": "Special property which tells Xcode how to build your project" - }, - "commandLineArguments": { - "type": "array", - "items": { - "type": "string" + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } }, - "description": "Allows you to pass launch arguments to active scheme" - }, - "provisionProfileSpecifier": { - "type": "string" + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" }, - "provisionProfileSpecifiers": { + "settings_gradle": { "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "allowProvisioningUpdates": { - "type": "boolean" + "properties": {}, + "additionalProperties": false }, - "provisioningProfiles": { + "gradle_wrapper_properties": { "type": "object", - "additionalProperties": { - "type": "string" - } + "properties": {}, + "additionalProperties": false }, - "codeSignIdentities": { + "SplashActivity_java": { "type": "object", - "additionalProperties": { - "type": "string" - } + "properties": {}, + "additionalProperties": false }, - "systemCapabilities": { + "styles_xml": { "type": "object", - "additionalProperties": { - "type": "boolean" - } + "properties": {}, + "additionalProperties": false }, - "entitlements": { + "colors_xml": { "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "runScheme": { - "type": "string" - }, - "sdk": { - "type": "string" - }, - "testFlightId": { - "type": "string" - }, - "firebaseId": { - "type": "string" + "properties": {}, + "additionalProperties": false }, - "exportOptions": { + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { "type": "object", "properties": { - "method": { - "type": "string" + "injectLines": { + "type": "array", + "items": { + "type": "string" + } }, - "teamID": { - "type": "string" + "post_install": { + "type": "array", + "items": { + "type": "string" + } }, - "uploadBitcode": { - "type": "boolean" + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" }, - "compileBitcode": { - "type": "boolean" + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } }, - "uploadSymbols": { - "type": "boolean" + "staticPods": { + "type": "array", + "items": { + "type": "string" + } }, - "signingStyle": { - "type": "string" - }, - "signingCertificate": { - "type": "string" - }, - "provisioningProfiles": { - "type": "object", - "additionalProperties": { + "header": { + "type": "array", + "items": { "type": "string" - } + }, + "description": "Array of strings that will be injected on top of the Podfile" } }, - "additionalProperties": false - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" + "additionalProperties": false, + "description": "Allows to manipulate Podfile" }, - "templateXcode": { + "project_pbxproj": { "type": "object", "properties": { - "Podfile": { - "type": "object", - "properties": { - "injectLines": { - "type": "array", - "items": { - "type": "string" - } - }, - "post_install": { - "type": "array", - "items": { - "type": "string" - } - }, - "sources": { - "type": "array", - "items": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { "type": "string" }, - "description": "Array of URLs that will be injected on top of the Podfile as sources" - }, - "podDependencies": { - "type": "array", - "items": { - "type": "string" - } - }, - "staticPods": { - "type": "array", - "items": { + "shellScript": { "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } } }, - "header": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of strings that will be injected on top of the Podfile" - } - }, - "additionalProperties": false, - "description": "Allows to manipulate Podfile" + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } }, - "project_pbxproj": { + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { "type": "object", "properties": { - "sourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "resourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "headerFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildPhases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "shellPath": { - "type": "string" - }, - "shellScript": { - "type": "string" - }, - "inputPaths": { - "type": "array", - "items": { - "type": "string" - } + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" } }, - "required": [ - "shellPath", - "shellScript", - "inputPaths" - ], - "additionalProperties": false - } - }, - "frameworks": { - "type": "array", - "items": { - "type": "string" - } + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false }, - "buildSettings": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "AppDelegate_mm": { - "type": "object", - "properties": { - "appDelegateMethods": { + "userNotificationCenter": { "type": "object", "properties": { - "application": { - "type": "object", - "properties": { - "didFinishLaunchingWithOptions": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "order": { - "type": "number" - }, - "value": { - "type": "string" - }, - "weight": { - "type": "number" - } - }, - "required": [ - "order", - "value", - "weight" - ], - "additionalProperties": false - } - ] - } - }, - "applicationDidBecomeActive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "open": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "supportedInterfaceOrientationsFor": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveRemoteNotification": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didFailToRegisterForRemoteNotificationsWithError": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegister": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegisterForRemoteNotificationsWithDeviceToken": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "continue": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didConnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didDisconnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } }, - "userNotificationCenter": { - "type": "object", - "properties": { - "willPresent": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveNotificationResponse": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } } }, "additionalProperties": false - }, - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" - } } }, "additionalProperties": false }, - "AppDelegate_h": { - "type": "object", - "properties": { - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" - } - }, - "appDelegateExtensions": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } }, - "Info_plist": { - "type": "object", - "properties": {}, - "additionalProperties": false + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false }, - "buildSchemes": { + "Info_plist": { "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/ignoreWarnings" - }, - "ignoreLogs": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/ignoreLogs" - }, - "deploymentTarget": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/deploymentTarget" - }, - "orientationSupport": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/orientationSupport" - }, - "teamID": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/teamID" - }, - "excludedArchs": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/excludedArchs" - }, - "urlScheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/urlScheme" - }, - "teamIdentifier": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/teamIdentifier" - }, - "scheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/scheme" - }, - "schemeTarget": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/schemeTarget" - }, - "appleId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/appleId" - }, - "provisioningStyle": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisioningStyle" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/newArchEnabled" - }, - "codeSignIdentity": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/codeSignIdentity" - }, - "commandLineArguments": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/commandLineArguments" - }, - "provisionProfileSpecifier": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisionProfileSpecifier" - }, - "provisionProfileSpecifiers": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisionProfileSpecifiers" - }, - "allowProvisioningUpdates": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/allowProvisioningUpdates" - }, - "provisioningProfiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisioningProfiles" - }, - "codeSignIdentities": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/codeSignIdentities" - }, - "systemCapabilities": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/systemCapabilities" - }, - "entitlements": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/entitlements" - }, - "runScheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/runScheme" - }, - "sdk": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/sdk" - }, - "testFlightId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/testFlightId" - }, - "firebaseId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/firebaseId" - }, - "exportOptions": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/exportOptions" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateXcode": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode" - } - }, - "additionalProperties": false - } + "properties": {}, + "additionalProperties": false } }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "additionalProperties": false }, - "tvos": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios" + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" }, - "tizen": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "package": { - "type": "string" - }, - "certificateProfile": { - "type": "string" - }, - "appName": { - "type": "string" - }, - "timestampBuildFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "devServerHost": { - "type": "string" - }, - "environment": { - "type": "string" - }, - "webpackConfig": { - "type": "object", - "properties": { - "publicUrl": { - "type": "string" - }, - "customScripts": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allows you to inject custom script into html header" - } - }, - "additionalProperties": false - }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "package": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/package" - }, - "certificateProfile": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/certificateProfile" - }, - "appName": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/appName" - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/environment" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/webpackConfig" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "commit": { + "type": "string", + "description": "Alternative git commit reference string" }, - "tizenmobile": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen" + "version": { + "type": "string", + "description": "Version of pod" }, - "tizenwatch": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen" + "podNames": { + "type": "array", + "items": { + "type": "string" + } }, - "webos": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/environment" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/webpackConfig" - }, - "iconColor": { - "type": "string" - }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/devServerHost" - }, - "environment": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/environment" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/webpackConfig" - }, - "iconColor": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/webos/properties/iconColor" - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "podName": { + "type": "string" }, - "web": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "webpackConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/webpackConfig" - }, - "pagesDir": { - "type": "string", - "description": "Custom pages directory used by nextjs. Use relative paths" - }, - "outputDir": { - "type": "string", - "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" - }, - "exportDir": { - "type": "string", - "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" - }, - "nextTranspileModules": { - "type": "array", - "items": { + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" } }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/timestampBuildFiles" - }, - "devServerHost": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/devServerHost" + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } }, - "environment": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/environment" + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } }, - "buildSchemes": { - "type": "object", - "additionalProperties": { + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { "type": "object", "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" + "arch": { + "type": "string", + "description": "Specification of targeted architecture" }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" + "experimentalNuGetDependency": { + "type": "boolean" }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" + "useWinUI3": { + "type": "boolean" }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" + "nuGetTestVersion": { + "type": "string" }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" + "reactNativeEngine": { + "type": "string" }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" + "nuGetTestFeed": { + "type": "string" }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" + "emulator": { + "type": "boolean" }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" + "device": { + "type": "boolean" }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" + "target": { + "type": "string" }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" + "remoteDebugging": { + "type": "boolean" }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" + "packager": { + "type": "boolean" }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + "bundle": { + "type": "boolean" }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" + "build": { + "type": "boolean", + "description": "Builds the application before launching it" }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" }, - "webpackConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/webpackConfig" + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" }, - "pagesDir": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web/properties/pagesDir" + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" }, - "outputDir": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web/properties/outputDir" + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" }, - "exportDir": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web/properties/exportDir" + "directDebugging": { + "type": "boolean" }, - "nextTranspileModules": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web/properties/nextTranspileModules" + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" }, - "timestampBuildFiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/timestampBuildFiles" + "devPort": { + "type": "string" }, - "devServerHost": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/devServerHost" + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} }, - "environment": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/tizen/properties/environment" + "packageExtension": { + "type": "string" } }, "additionalProperties": false } - } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.project": { + "type": "object", + "properties": { + "workspaceID": { + "type": "string", + "description": "Workspace ID your project belongs to. This will mach same folder name in the root of your user directory. ie `~/` on macOS" + }, + "projectVersion": { + "type": "string", + "description": "Version of project" + }, + "projectName": { + "type": "string", + "description": "Name of the project which will be used in workspace as folder name. this will also be used as part of the KEY in crypto env var generator" + }, + "isTemplate": { + "type": "boolean", + "description": "Marks project as template. This disables certain user checks like version mismatch etc" + }, + "defaults": { + "type": "object", + "properties": { + "ports": { + "type": "object", + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "description": "Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts" }, - "webtv": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web" + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" }, - "chromecast": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web" + "portOffset": { + "type": "number", + "description": "Offset each port default value by increment" }, - "kaios": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web" + "defaultCommandSchemes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "run", + "export", + "build" + ] + }, + "description": "List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`" }, - "macos": { + "targets": { "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/ignoreWarnings" - }, - "ignoreLogs": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/ignoreLogs" - }, - "deploymentTarget": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/deploymentTarget" - }, - "orientationSupport": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/orientationSupport" - }, - "teamID": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/teamID" - }, - "excludedArchs": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/excludedArchs" - }, - "urlScheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/urlScheme" - }, - "teamIdentifier": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/teamIdentifier" - }, - "scheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/scheme" - }, - "schemeTarget": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/schemeTarget" - }, - "appleId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/appleId" - }, - "provisioningStyle": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisioningStyle" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/newArchEnabled" - }, - "codeSignIdentity": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/codeSignIdentity" - }, - "commandLineArguments": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/commandLineArguments" - }, - "provisionProfileSpecifier": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisionProfileSpecifier" - }, - "provisionProfileSpecifiers": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisionProfileSpecifiers" - }, - "allowProvisioningUpdates": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/allowProvisioningUpdates" - }, - "provisioningProfiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisioningProfiles" - }, - "codeSignIdentities": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/codeSignIdentities" - }, - "systemCapabilities": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/systemCapabilities" - }, - "entitlements": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/entitlements" - }, - "runScheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/runScheme" - }, - "sdk": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/sdk" - }, - "testFlightId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/testFlightId" - }, - "firebaseId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/firebaseId" - }, - "exportOptions": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/exportOptions" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateXcode": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode" - }, - "electronConfig": { - "description": "Allows you to configure electron app as per https://www.electron.build/" - }, - "BrowserWindow": { - "type": "object", - "properties": { - "width": { - "type": "number" - }, - "height": { - "type": "number" - }, - "webPreferences": { - "type": "object", - "properties": { - "devTools": { - "type": "boolean" - } - }, - "additionalProperties": false, - "description": "Extra web preferences of electron app" - } - }, - "additionalProperties": false, - "description": "Allows you to configure electron wrapper app window" - }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "ignoreWarnings": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/ignoreWarnings" - }, - "ignoreLogs": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/ignoreLogs" - }, - "deploymentTarget": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/deploymentTarget" - }, - "orientationSupport": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/orientationSupport" - }, - "teamID": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/teamID" - }, - "excludedArchs": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/excludedArchs" - }, - "urlScheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/urlScheme" - }, - "teamIdentifier": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/teamIdentifier" - }, - "scheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/scheme" - }, - "schemeTarget": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/schemeTarget" - }, - "appleId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/appleId" - }, - "provisioningStyle": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisioningStyle" - }, - "newArchEnabled": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/newArchEnabled" - }, - "codeSignIdentity": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/codeSignIdentity" - }, - "commandLineArguments": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/commandLineArguments" - }, - "provisionProfileSpecifier": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisionProfileSpecifier" - }, - "provisionProfileSpecifiers": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisionProfileSpecifiers" - }, - "allowProvisioningUpdates": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/allowProvisioningUpdates" - }, - "provisioningProfiles": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/provisioningProfiles" - }, - "codeSignIdentities": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/codeSignIdentities" - }, - "systemCapabilities": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/systemCapabilities" - }, - "entitlements": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/entitlements" - }, - "runScheme": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/runScheme" - }, - "sdk": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/sdk" - }, - "testFlightId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/testFlightId" - }, - "firebaseId": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/firebaseId" - }, - "exportOptions": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/exportOptions" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateXcode": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode" - }, - "electronConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/macos/properties/electronConfig" - }, - "BrowserWindow": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/macos/properties/BrowserWindow" - } - }, - "additionalProperties": false - } - } + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "description": "Override of default targets specific to this project" + } + }, + "additionalProperties": false, + "description": "Default system config for this project" + }, + "pipes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "To avoid rnv building `buildHooks/src` every time you can specify which specific pipes should trigger recompile of buildHooks" + }, + "crypto": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Relative path to encrypted file in your renative project. Example: \"./secrets/mySecrets.enc\"" }, - "linux": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/web" + "isOptional": { + "type": "boolean", + "description": "Mark if crypto object should not checked every run" + } + }, + "required": [ + "path" + ], + "additionalProperties": false, + "description": "This prop enables automatic encrypt and decrypt of sensitive information in your project. \nRNV will generate new env variable with can be used to encrypt and decrypt. this env var is generated by combining (and sanitizing) 2 properties from your renative.json: \nworkspaceID + projectName.\nThese 2 properties are also used to generate path on your local machine where encrypted files will be decrypted into." + }, + "paths": { + "type": "object", + "properties": { + "appConfigsDir": { + "type": "string", + "description": "Custom path to appConfigs. defaults to `./appConfigs`" }, - "windows": { + "platformTemplatesDirs": { "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "electronConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/macos/properties/electronConfig" - }, - "BrowserWindow": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/macos/properties/BrowserWindow" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateVSProject": { - "type": "object", - "properties": { - "language": { - "type": "string", - "description": "Specify generated project language: cpp for C++ or cs for C#" - }, - "arch": { - "type": "string", - "description": "Specification of targeted architecture" - }, - "experimentalNuGetDependency": { - "type": "boolean" - }, - "useWinUI3": { - "type": "boolean" - }, - "nuGetTestVersion": { - "type": "string" - }, - "reactNativeEngine": { - "type": "string" - }, - "nuGetTestFeed": { - "type": "string" - }, - "overwrite": { - "type": "boolean", - "description": "Whether to attempt to override the existing builds files when running a build once more" - }, - "release": { - "type": "boolean", - "description": "Enables full packaging of the app for release" - }, - "root": { - "type": "string", - "description": "Project root folder location (not the app itself, which is in platformBuilds)" - }, - "singleproc": { - "type": "boolean", - "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" - }, - "emulator": { - "type": "boolean" - }, - "device": { - "type": "boolean" - }, - "target": { - "type": "string" - }, - "remoteDebugging": { - "type": "boolean" - }, - "logging": { - "type": "boolean", - "description": "Logging all the build proccesses to console" - }, - "packager": { - "type": "boolean" - }, - "bundle": { - "type": "boolean" - }, - "launch": { - "type": "boolean", - "description": "Launches the application once the build process is finished" - }, - "autolink": { - "type": "boolean", - "description": "Launches the application once the build process is finished" - }, - "build": { - "type": "boolean", - "description": "Builds the application before launching it" - }, - "sln": { - "type": "string", - "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" - }, - "proj": { - "type": "string", - "description": "Root project directory for your React Native Windows project (not Visual Studio project)" - }, - "appPath": { - "type": "string", - "description": "Full path to windows plaform build directory" - }, - "msbuildprops": { - "type": "string", - "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" - }, - "buildLogDirectory": { - "type": "string", - "description": "Full path to directory where builds logs should be stored, default - project path" - }, - "info": { - "type": "boolean", - "description": "Print information about the build machine to console" - }, - "directDebugging": { - "type": "boolean" - }, - "telemetry": { - "type": "boolean", - "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" - }, - "devPort": { - "type": "string" - }, - "additionalMetroOptions": { - "type": "object", - "additionalProperties": {} - }, - "packageExtension": { - "type": "string" - } + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Custom location of ejected platform templates. this is populated after you run `rnv platform eject`" + }, + "appConfigsDirs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of custom location app configs directories`" + }, + "platformAssetsDir": { + "type": "string", + "description": "Custom path to platformAssets folder. defaults to `./platformAssets`" + }, + "platformBuildsDir": { + "type": "string", + "description": "Custom path to platformBuilds folder. defaults to `./platformBuilds`" + }, + "pluginTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "npm": { + "type": "string" }, - "additionalProperties": false + "path": { + "type": "string" + } }, - "buildSchemes": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "includedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPermissions" - }, - "excludedPermissions": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPermissions" - }, - "id": { - "$ref": "#/definitions/rnv.project/properties/common/properties/id" - }, - "idSuffix": { - "$ref": "#/definitions/rnv.project/properties/common/properties/idSuffix" - }, - "version": { - "$ref": "#/definitions/rnv.project/properties/common/properties/version" - }, - "versionCode": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCode" - }, - "versionFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionFormat" - }, - "versionCodeFormat": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeFormat" - }, - "versionCodeOffset": { - "$ref": "#/definitions/rnv.project/properties/common/properties/versionCodeOffset" - }, - "title": { - "$ref": "#/definitions/rnv.project/properties/common/properties/title" - }, - "description": { - "$ref": "#/definitions/rnv.project/properties/common/properties/description" - }, - "author": { - "$ref": "#/definitions/rnv.project/properties/common/properties/author" - }, - "license": { - "$ref": "#/definitions/rnv.project/properties/common/properties/license" - }, - "includedFonts": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedFonts" - }, - "backgroundColor": { - "$ref": "#/definitions/rnv.project/properties/common/properties/backgroundColor" - }, - "splashScreen": { - "$ref": "#/definitions/rnv.project/properties/common/properties/splashScreen" - }, - "fontSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/fontSources" - }, - "assetSources": { - "$ref": "#/definitions/rnv.project/properties/common/properties/assetSources" - }, - "includedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/includedPlugins" - }, - "excludedPlugins": { - "$ref": "#/definitions/rnv.project/properties/common/properties/excludedPlugins" - }, - "runtime": { - "$ref": "#/definitions/rnv.project/properties/common/properties/runtime" - }, - "custom": { - "$ref": "#/definitions/rnv.project/properties/common/properties/custom" - }, - "extendPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/extendPlatform" - }, - "assetFolderPlatform": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" - }, - "engine": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/engine" - }, - "entryFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/entryFile" - }, - "bundleAssets": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleAssets" - }, - "enableSourceMaps": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" - }, - "bundleIsDev": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/bundleIsDev" - }, - "getJsBundleFile": { - "$ref": "#/definitions/rnv.project/properties/common/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" - }, - "electronConfig": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/macos/properties/electronConfig" - }, - "BrowserWindow": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/macos/properties/BrowserWindow" - }, - "reactNativeEngine": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/reactNativeEngine" - }, - "templateVSProject": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/windows/properties/templateVSProject" - } - }, - "additionalProperties": false + "required": [ + "npm", + "path" + ], + "additionalProperties": false + }, + "description": "\n Allows you to define custom plugin template scopes. default scope for all plugins is `rnv`." + } + }, + "additionalProperties": false, + "description": "Define custom paths for RNV to look into" + }, + "permissions": { + "type": "object", + "properties": { + "android": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "security": { + "type": "string" } - } + }, + "required": [ + "key", + "security" + ], + "additionalProperties": false }, - "additionalProperties": false, - "description": "Allows to customize platforms configurations based on chosen build scheme `-s`" + "description": "Android SDK specific permissions" }, - "xbox": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/windows" + "ios": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "desc": { + "type": "string" + } + }, + "required": [ + "desc" + ], + "additionalProperties": false + }, + "description": "iOS SDK specific permissions" } }, + "required": [ + "android", + "ios" + ], "additionalProperties": false, - "description": "Object containing platform configurations" + "description": "Permission definititions which can be used by app configs via `includedPermissions` and `excludedPermissions` to customize permissions for each app" }, - "plugins": { + "engines": { "type": "object", "additionalProperties": { - "anyOf": [ - { - "anyOf": [ - { + "type": "string", + "const": "source:rnv" + }, + "description": "List of engines available in this project" + }, + "enableHookRebuild": { + "type": "boolean", + "description": "If set to true in `./renative.json` build hooks will be compiled at each rnv command run. If set to `false` (default) rebuild will be triggered only if `dist` folder is missing, `-r` has been passed or you run `rnv hooks run` directly making your rnv commands faster" + }, + "extendsTemplate": { + "type": "string", + "description": "You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`" + }, + "tasks": { + "type": "object", + "properties": { + "install": { + "type": "object", + "properties": { + "script": { + "type": "string" + }, + "platform": { + "type": "object", + "additionalProperties": { "type": "object", "properties": { - "supportedPlatforms": { - "$ref": "#/definitions/rnv.project/properties/defaults/properties/supportedPlatforms", - "description": "Array list of all supported platforms in current project" - }, - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin disabled" - }, - "props": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Custom props passed to plugin" - }, - "version": { - "type": "string", - "description": "Version of plugin. Typically package version" - }, - "deprecated": { - "type": "string", - "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" - }, - "source": { - "type": "string", - "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" - }, - "disableNpm": { - "type": "boolean", - "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" - }, - "skipMerge": { - "type": "boolean", - "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" - }, - "npm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Object of npm dependencies of this plugin. These will be injected into package.json" - }, - "pluginDependencies": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "List of other Renative plugins this plugin depends on" - }, - "webpackConfig": { - "type": "object", - "properties": { - "modulePaths": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "moduleAliases": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "projectPath": { - "type": "string" - } - }, - "required": [ - "projectPath" - ], - "additionalProperties": false - } - ] - } - } - ] - }, - "nextTranspileModules": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "description": "Allows you to configure webpack bahaviour per each individual plugin" - }, - "disablePluginTemplateOverrides": { - "type": "boolean", - "description": "Disables plugin overrides for selected plugin" + "ignore": { + "type": "boolean" }, - "fontSources": { + "ignoreTasks": { "type": "array", "items": { "type": "string" } - }, - "android": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin platform disabled" - }, - "forceLinking": { - "type": "boolean", - "default": false, - "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" - }, - "path": { - "type": "string", - "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." - }, - "projectName": { - "type": "string" - }, - "skipLinking": { - "type": "boolean" - }, - "skipImplementation": { - "type": "boolean" - }, - "implementation": { - "type": "string" - }, - "package": { - "type": "string" - }, - "templateAndroid": { - "type": "object", - "properties": { - "gradle_properties": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/gradle_properties" - }, - "build_gradle": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/build_gradle" - }, - "app_build_gradle": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/app_build_gradle" - }, - "AndroidManifest_xml": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/AndroidManifest_xml" - }, - "strings_xml": { - "type": "object", - "properties": { - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "name": { - "type": "string" - }, - "child_value": { - "type": "string" - } - }, - "required": [ - "tag", - "name", - "child_value" - ], - "additionalProperties": false - } - } - }, - "additionalProperties": false - }, - "MainActivity_kt": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/MainActivity_kt" - }, - "MainApplication_kt": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/android/properties/templateAndroid/properties/MainApplication_kt" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "androidtv": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android" - }, - "androidwear": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android" - }, - "firetv": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android" - }, - "ios": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/path" - }, - "git": { - "type": "string", - "description": "Alternative git url for pod instead of version" - }, - "commit": { - "type": "string", - "description": "Alternative git commit reference string" - }, - "version": { - "type": "string", - "description": "Version of pod" - }, - "podNames": { - "type": "array", - "items": { - "type": "string" - } - }, - "podName": { - "type": "string" - }, - "staticFrameworks": { - "type": "array", - "items": { - "type": "string" - } - }, - "templateXcode": { - "type": "object", - "properties": { - "Podfile": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/Podfile" - }, - "project_pbxproj": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/project_pbxproj" - }, - "AppDelegate_mm": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_mm" - }, - "AppDelegate_h": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/AppDelegate_h" - }, - "Info_plist": { - "$ref": "#/definitions/rnv.project/properties/platforms/properties/ios/properties/templateXcode/properties/Info_plist" - } - }, - "additionalProperties": false - }, - "isStatic": { - "type": "boolean" - }, - "buildType": { - "type": "string", - "enum": [ - "dynamic", - "static" - ], - "description": "Build type of the pod" - } - }, - "additionalProperties": false - }, - "tvos": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/ios" - }, - "tizen": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/android/properties/path" - } - }, - "additionalProperties": false - }, - "tizenmobile": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "tizenwatch": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "webos": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "web": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "webtv": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "chromecast": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "kaios": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "macos": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "linux": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "windows": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" - }, - "xbox": { - "$ref": "#/definitions/rnv.project/properties/plugins/additionalProperties/anyOf/0/anyOf/0/properties/tizen" } }, + "required": [ + "ignore", + "ignoreTasks" + ], "additionalProperties": false }, - { - "type": "string" + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] } - ] + } }, - { - "type": "null" - } - ] + "required": [ + "script", + "platform" + ], + "additionalProperties": false + } + }, + "required": [ + "install" + ], + "additionalProperties": false, + "description": "Allows to override specific task within renative toolchain. (currently only `install` supported). this is useful if you want to change specific behaviour of built-in task. ie install task triggers yarn/npm install by default. but that might not be desirable installation trigger" + }, + "integrations": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {}, + "additionalProperties": false }, - "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + "description": "Object containing integration configurations where key represents package name" + }, + "env": { + "type": "object", + "additionalProperties": {}, + "description": "Object containing injected env variables" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime", + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "isMonorepo": { + "type": "boolean", + "description": "Mark if your project is part of monorepo" + }, + "monoRoot": { + "type": "string", + "description": "Define custom path to monorepo root where starting point is project directory" + }, + "custom": { + "$ref": "#/definitions/zodExt", + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "skipAutoUpdate": { + "type": "boolean", + "description": "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" + }, + "common": { + "$ref": "#/definitions/zodCommonSchema" + }, + "platforms": { + "$ref": "#/definitions/zodPlatformsSchema" + }, + "plugins": { + "$ref": "#/definitions/zodPluginsSchema" + }, + "templateConfig": { + "$ref": "#/definitions/zodTemplateConfigFragment", + "description": "Used in `renative.template.json` allows you to define template behaviour." }, "$schema": { "type": "string", diff --git a/packages/core/jsonSchema/rnv.root.json b/packages/core/jsonSchema/rnv.root.json new file mode 100644 index 0000000000..954ddd0eae --- /dev/null +++ b/packages/core/jsonSchema/rnv.root.json @@ -0,0 +1,4403 @@ +{ + "$ref": "#/definitions/rnv.root", + "definitions": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.root": { + "type": "object", + "properties": { + "app": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID of the app in `./appConfigs/[APP_ID]/renative.json`. MUST match APP_ID name of the folder" + }, + "custom": { + "$ref": "#/definitions/zodExt" + }, + "hidden": { + "type": "boolean", + "description": "If set to true in `./appConfigs/[APP_ID]/renative.json` the APP_ID will be hidden from list of appConfigs `-c`" + }, + "extendsTemplate": { + "type": "string", + "description": "You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`" + }, + "extend": { + "type": "string", + "description": "extend another appConfig by id" + } + }, + "additionalProperties": false + }, + "project": { + "type": "object", + "properties": { + "workspaceID": { + "type": "string", + "description": "Workspace ID your project belongs to. This will mach same folder name in the root of your user directory. ie `~/` on macOS" + }, + "projectVersion": { + "type": "string", + "description": "Version of project" + }, + "projectName": { + "type": "string", + "description": "Name of the project which will be used in workspace as folder name. this will also be used as part of the KEY in crypto env var generator" + }, + "isTemplate": { + "type": "boolean", + "description": "Marks project as template. This disables certain user checks like version mismatch etc" + }, + "defaults": { + "type": "object", + "properties": { + "ports": { + "type": "object", + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts" + }, + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "portOffset": { + "type": "number", + "description": "Offset each port default value by increment" + }, + "defaultCommandSchemes": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "run", + "export", + "build" + ] + }, + "description": "List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`" + }, + "targets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Override of default targets specific to this project" + } + }, + "additionalProperties": false, + "description": "Default system config for this project" + }, + "pipes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "To avoid rnv building `buildHooks/src` every time you can specify which specific pipes should trigger recompile of buildHooks" + }, + "crypto": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "Relative path to encrypted file in your renative project. Example: \"./secrets/mySecrets.enc\"" + }, + "isOptional": { + "type": "boolean", + "description": "Mark if crypto object should not checked every run" + } + }, + "required": [ + "path" + ], + "additionalProperties": false, + "description": "This prop enables automatic encrypt and decrypt of sensitive information in your project. \nRNV will generate new env variable with can be used to encrypt and decrypt. this env var is generated by combining (and sanitizing) 2 properties from your renative.json: \nworkspaceID + projectName.\nThese 2 properties are also used to generate path on your local machine where encrypted files will be decrypted into." + }, + "paths": { + "type": "object", + "properties": { + "appConfigsDir": { + "type": "string", + "description": "Custom path to appConfigs. defaults to `./appConfigs`" + }, + "platformTemplatesDirs": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Custom location of ejected platform templates. this is populated after you run `rnv platform eject`" + }, + "appConfigsDirs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of custom location app configs directories`" + }, + "platformAssetsDir": { + "type": "string", + "description": "Custom path to platformAssets folder. defaults to `./platformAssets`" + }, + "platformBuildsDir": { + "type": "string", + "description": "Custom path to platformBuilds folder. defaults to `./platformBuilds`" + }, + "pluginTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "npm": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "npm", + "path" + ], + "additionalProperties": false + }, + "description": "\n Allows you to define custom plugin template scopes. default scope for all plugins is `rnv`." + } + }, + "additionalProperties": false, + "description": "Define custom paths for RNV to look into" + }, + "permissions": { + "type": "object", + "properties": { + "android": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "security": { + "type": "string" + } + }, + "required": [ + "key", + "security" + ], + "additionalProperties": false + }, + "description": "Android SDK specific permissions" + }, + "ios": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "desc": { + "type": "string" + } + }, + "required": [ + "desc" + ], + "additionalProperties": false + }, + "description": "iOS SDK specific permissions" + } + }, + "required": [ + "android", + "ios" + ], + "additionalProperties": false, + "description": "Permission definititions which can be used by app configs via `includedPermissions` and `excludedPermissions` to customize permissions for each app" + }, + "engines": { + "type": "object", + "additionalProperties": { + "type": "string", + "const": "source:rnv" + }, + "description": "List of engines available in this project" + }, + "enableHookRebuild": { + "type": "boolean", + "description": "If set to true in `./renative.json` build hooks will be compiled at each rnv command run. If set to `false` (default) rebuild will be triggered only if `dist` folder is missing, `-r` has been passed or you run `rnv hooks run` directly making your rnv commands faster" + }, + "extendsTemplate": { + "type": "string", + "description": "You can extend another renative.json file of currently applied template by providing relative or full package name path. Exampe: `@rnv/template-starter/renative.json`" + }, + "tasks": { + "type": "object", + "properties": { + "install": { + "type": "object", + "properties": { + "script": { + "type": "string" + }, + "platform": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "ignore": { + "type": "boolean" + }, + "ignoreTasks": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "ignore", + "ignoreTasks" + ], + "additionalProperties": false + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + } + } + }, + "required": [ + "script", + "platform" + ], + "additionalProperties": false + } + }, + "required": [ + "install" + ], + "additionalProperties": false, + "description": "Allows to override specific task within renative toolchain. (currently only `install` supported). this is useful if you want to change specific behaviour of built-in task. ie install task triggers yarn/npm install by default. but that might not be desirable installation trigger" + }, + "integrations": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "description": "Object containing integration configurations where key represents package name" + }, + "env": { + "type": "object", + "additionalProperties": {}, + "description": "Object containing injected env variables" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime", + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "isMonorepo": { + "type": "boolean", + "description": "Mark if your project is part of monorepo" + }, + "monoRoot": { + "type": "string", + "description": "Define custom path to monorepo root where starting point is project directory" + }, + "custom": { + "$ref": "#/definitions/zodExt", + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "skipAutoUpdate": { + "type": "boolean", + "description": "Enables the equivalent to passing --skipDependencyCheck parameter on every rnv run so you don't have to use it" + }, + "common": { + "$ref": "#/definitions/zodCommonSchema" + }, + "platforms": { + "$ref": "#/definitions/zodPlatformsSchema" + }, + "plugins": { + "$ref": "#/definitions/zodPluginsSchema" + }, + "templateConfig": { + "$ref": "#/definitions/zodTemplateConfigFragment", + "description": "Used in `renative.template.json` allows you to define template behaviour." + } + }, + "additionalProperties": false + }, + "local": { + "type": "object", + "properties": { + "workspaceAppConfigsDir": { + "type": "string", + "description": "Defines app configs dir outside of current project" + }, + "defaultTargets": { + "$ref": "#/definitions/zodDefaultTargets", + "description": "Define targets to be used when -t is not set on any project run" + }, + "_meta": { + "type": "object", + "properties": { + "currentAppConfigId": { + "type": "string" + }, + "requiresJetify": { + "type": "boolean" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "overrides": { + "type": "object", + "properties": { + "overrides": { + "type": "object", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "additionalProperties": false + }, + "integration": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + } + }, + "additionalProperties": false + }, + "engine": { + "type": "object", + "properties": { + "custom": { + "$ref": "#/definitions/zodExt" + }, + "id": { + "type": "string", + "description": "ID of engine" + }, + "packageName": { + "type": "string" + }, + "engineExtension": { + "type": "string", + "description": "Engine extension ised by rnv during compilation" + }, + "overview": { + "type": "string", + "description": "Overview description of engine" + }, + "plugins": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "List of required plugins for this engine to work properly" + }, + "npm": { + "type": "object", + "properties": { + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "devDependencies": { + "$ref": "#/definitions/rnv.root/properties/engine/properties/npm/properties/dependencies" + }, + "peerDependencies": { + "$ref": "#/definitions/rnv.root/properties/engine/properties/npm/properties/dependencies" + }, + "optionalDependencies": { + "$ref": "#/definitions/rnv.root/properties/engine/properties/npm/properties/dependencies" + } + }, + "additionalProperties": false, + "description": "Npm dependencies required for this plugin to work" + }, + "platforms": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "engine": { + "type": "string" + }, + "npm": { + "$ref": "#/definitions/rnv.root/properties/engine/properties/npm" + } + }, + "additionalProperties": false + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + } + } + }, + "additionalProperties": false + }, + "plugin": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled", + "description": "Marks plugin disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props", + "description": "Custom props passed to plugin" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm", + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies", + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig", + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + }, + "android": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "private": { + "type": "object", + "properties": { + "private": { + "type": "object", + "additionalProperties": {}, + "description": "Special object which contains private info. this object should be used only in `renative.private.json` files and never commited to your repository. Private files usually reside in your workspace and are subject to crypto encryption if enabled. RNV will warn you if it finds private key in your regular `renative.json` file" + }, + "platforms": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "storePassword": { + "type": "string", + "description": "> WARNING. this prop is sensitive and should not be stored in standard `renative.json` configs. use `renative.private.json` files instead!\n\nstorePassword for keystore file" + }, + "keyPassword": { + "type": "string", + "description": "> WARNING. this prop is sensitive and should not be stored in standard `renative.json` configs. use `renative.private.json` files instead!\n\nkeyPassword for keystore file" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/android" + }, + "firetv": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/android" + }, + "ios": {}, + "tvos": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "tizenmobile": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "tizenwatch": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "webos": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "web": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "webtv": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "chromecast": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "kaios": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "macos": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "linux": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "windows": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + }, + "xbox": { + "$ref": "#/definitions/rnv.root/properties/private/properties/platforms/properties/ios" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "template": { + "type": "object", + "properties": { + "templateConfig": { + "$ref": "#/definitions/zodTemplateConfigFragment", + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "bootstrapConfig": { + "type": "object", + "properties": { + "bootstrapQuestions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "options": { + "type": "array", + "items": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "object", + "additionalProperties": {} + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + } + ] + } + }, + "required": [ + "title", + "value" + ], + "additionalProperties": false + } + }, + "configProp": { + "type": "object", + "properties": { + "prop": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "required": [ + "prop", + "key" + ], + "additionalProperties": false + }, + "type": { + "type": "string" + }, + "title": { + "type": "string" + }, + "onConfirm": { + "type": "array", + "items": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "prop": { + "type": "string" + }, + "path": { + "type": "string" + } + }, + "required": [ + "action", + "path" + ], + "additionalProperties": false + } + } + }, + "required": [ + "type", + "title" + ], + "additionalProperties": false + }, + "description": "Defines list of custom bootstrap questions" + }, + "rnvNewPatchDependencies": { + "$ref": "#/definitions/zodNpmDep", + "description": "This ensures that the correct version of the npm packages will be used to run the project for the first time after creation" + }, + "configModifiers": { + "type": "object", + "properties": { + "engines": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms" + }, + "nullifyIfFalse": { + "type": "boolean" + } + }, + "required": [ + "name", + "supportedPlatforms" + ], + "additionalProperties": false + } + } + }, + "required": [ + "engines" + ], + "additionalProperties": false + }, + "defaultSelectedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "configTemplates": { + "type": "object", + "properties": { + "projectTemplates": { + "$ref": "#/definitions/zodProjectTemplates" + }, + "engineIdMap": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "engineTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "required": [ + "version", + "id", + "key" + ], + "additionalProperties": false + } + }, + "integrationTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "version": { + "type": "string" + } + }, + "required": [ + "version" + ], + "additionalProperties": false + } + }, + "platformTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "engine": { + "type": "string" + } + }, + "required": [ + "engine" + ], + "additionalProperties": false + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + } + }, + "pluginTemplates": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/zodPluginSchema" + }, + "description": "Define all plugins available to be merged with project plugins" + }, + "disableRnvDefaultOverrides": { + "type": "boolean", + "description": "Disables default rnv scope plugin overrides and merges. Useful if you want to test entirely clean plugin template list" + } + }, + "additionalProperties": false + }, + "workspace": { + "type": "object", + "properties": { + "defaultTargets": { + "$ref": "#/definitions/zodDefaultTargets", + "description": "Define targets to be used when -t is not set on any project run" + }, + "sdks": { + "type": "object", + "properties": { + "ANDROID_SDK": { + "type": "string" + }, + "ANDROID_NDK": { + "type": "string" + }, + "TIZEN_SDK": { + "type": "string" + }, + "WEBOS_SDK": { + "type": "string" + }, + "KAIOS_SDK": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Define your sdk configurations" + }, + "projectTemplates": { + "$ref": "#/definitions/zodProjectTemplates" + }, + "disableTelemetry": { + "type": "boolean", + "description": "Opt-out from renative telemetry program. More info at https://renative.org/telemetry" + }, + "appConfigsPath": { + "type": "string", + "description": "Enables you to define custom global appConfigs location that every project will automatically use" + } + }, + "additionalProperties": false + }, + "workspaces": { + "type": "object", + "properties": { + "workspaces": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "path": { + "type": "string" + }, + "remote": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "url", + "type" + ], + "additionalProperties": false + } + }, + "required": [ + "path" + ], + "additionalProperties": false + } + } + }, + "required": [ + "workspaces" + ], + "additionalProperties": false + }, + "$schema": { + "type": "string", + "description": "schema definition" + } + }, + "required": [ + "app", + "project", + "local", + "overrides", + "integration", + "engine", + "plugin", + "private", + "template", + "configTemplates", + "workspace", + "workspaces" + ], + "additionalProperties": false + } + }, + "$schema": "http://json-schema.org/draft-04/schema#" +} \ No newline at end of file diff --git a/packages/core/jsonSchema/rnv.template.json b/packages/core/jsonSchema/rnv.template.json index 8df2363409..aa4c57d01a 100644 --- a/packages/core/jsonSchema/rnv.template.json +++ b/packages/core/jsonSchema/rnv.template.json @@ -1,216 +1,3301 @@ { "$ref": "#/definitions/rnv.template", "definitions": { - "rnv.template": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { "type": "object", "properties": { - "defaults": { - "type": "object", - "properties": { - "ports": { - "type": "object", - "additionalProperties": { - "type": "number" - }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Allows you to assign custom port per each supported platform specific to this project. this is useful if you foten switch between multiple projects and do not want to experience constant port conflicts" - }, - "supportedPlatforms": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Array list of all supported platforms in current project" - }, - "portOffset": { - "type": "number", - "description": "Offset each port default value by increment" - }, - "defaultCommandSchemes": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "propertyNames": { - "enum": [ - "run", - "export", - "build" - ] - }, - "description": "List of default schemes for each rnv command. This is useful if you want to avoid specifying `-s ...` every time your run rnv command. bu default rnv uses `-s debug`. NOTE: you can only use schemes you defined in `buildSchemes`" - }, - "targets": { - "type": "object", - "additionalProperties": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { "type": "string" }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Override of default targets specific to this project" - } + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] }, - "additionalProperties": false, - "description": "Default system config for this project" + "description": "Defines list of all file/dir paths you want to include in template" }, - "engines": { + "renative_json": { "type": "object", - "additionalProperties": { - "type": "string", - "const": "source:rnv" + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } }, - "description": "List of engines available in this project" + "additionalProperties": false }, - "templateConfig": { + "package_json": { "type": "object", "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, "name": { "type": "string" }, "version": { "type": "string" - }, - "disabled": { - "type": "boolean" - }, - "includedPaths": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "paths": { - "type": "array", - "items": { - "type": "string" - } - }, - "engines": { - "type": "array", - "items": { - "type": "string" - } - }, - "platforms": { - "$ref": "#/definitions/rnv.template/properties/defaults/properties/supportedPlatforms", - "description": "Array list of all supported platforms in current project" - } - }, - "required": [ - "paths" - ], - "additionalProperties": false - } - ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" }, - "description": "Defines list of all file/dir paths you want to include in template" + "getJsBundleFile": { + "type": "string" + } }, - "renative_json": { - "type": "object", - "properties": { - "$schema": { - "type": "string" + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" }, - "extendsTemplate": { - "type": "string" + { + "type": "array", + "items": { + "type": "string" + } } - }, - "additionalProperties": true + ] }, - "package_json": { - "type": "object", - "properties": { - "dependencies": { + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { "type": "object", "additionalProperties": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] } - }, - "devDependencies": { - "$ref": "#/definitions/rnv.template/properties/templateConfig/properties/package_json/properties/dependencies" - }, - "peerDependencies": { - "$ref": "#/definitions/rnv.template/properties/templateConfig/properties/package_json/properties/dependencies" - }, - "optionalDependencies": { - "$ref": "#/definitions/rnv.template/properties/templateConfig/properties/package_json/properties/dependencies" - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" } - }, - "additionalProperties": true + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } } }, "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.template": { + "type": "object", + "properties": { + "templateConfig": { + "$ref": "#/definitions/zodTemplateConfigFragment", "description": "Used in `renative.template.json` allows you to define template behaviour." }, "bootstrapConfig": { @@ -308,7 +3393,7 @@ "description": "Defines list of custom bootstrap questions" }, "rnvNewPatchDependencies": { - "$ref": "#/definitions/rnv.template/properties/templateConfig/properties/package_json/properties/dependencies", + "$ref": "#/definitions/zodNpmDep", "description": "This ensures that the correct version of the npm packages will be used to run the project for the first time after creation" }, "configModifiers": { @@ -323,7 +3408,7 @@ "type": "string" }, "supportedPlatforms": { - "$ref": "#/definitions/rnv.template/properties/defaults/properties/supportedPlatforms" + "$ref": "#/definitions/zodSupportedPlatforms" }, "nullifyIfFalse": { "type": "boolean" @@ -343,7 +3428,7 @@ "additionalProperties": false }, "defaultSelectedPlatforms": { - "$ref": "#/definitions/rnv.template/properties/defaults/properties/supportedPlatforms", + "$ref": "#/definitions/zodSupportedPlatforms", "description": "Array list of all supported platforms in current project" } }, diff --git a/packages/core/jsonSchema/rnv.templates.json b/packages/core/jsonSchema/rnv.templates.json index 46d8a7221c..13a9ede652 100644 --- a/packages/core/jsonSchema/rnv.templates.json +++ b/packages/core/jsonSchema/rnv.templates.json @@ -1,974 +1,3387 @@ { "$ref": "#/definitions/rnv.templates", "definitions": { - "rnv.templates": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { "type": "object", "properties": { - "projectTemplates": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "packageName": { - "type": "string" - }, - "description": { - "type": "string" - }, - "localPath": { - "type": "string" - } - }, - "additionalProperties": false - } + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" }, - "engineIdMap": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - "engineTemplates": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "version": { - "type": "string" - }, - "id": { + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { "type": "string" }, - "key": { - "type": "string" + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false } - }, - "required": [ - "version", - "id" - ], - "additionalProperties": false - } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" }, - "integrationTemplates": { + "renative_json": { "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "version": { - "type": "string" - } + "properties": { + "$schema": { + "type": "string" }, - "required": [ - "version" - ], - "additionalProperties": false - } + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false }, - "platformTemplates": { + "package_json": { "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "engine": { - "type": "string" - } + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" }, - "required": [ - "engine" - ], - "additionalProperties": false + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" } }, - "pluginTemplates": { + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { "type": "object", "additionalProperties": { "type": "object", "properties": { - "supportedPlatforms": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] - }, - "description": "Array list of all supported platforms in current project" + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" }, - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin disabled" + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" }, - "props": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Custom props passed to plugin" + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" }, "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { "type": "string", - "description": "Version of plugin. Typically package version" + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" }, - "deprecated": { + "engine": { "type": "string", - "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" }, - "source": { + "entryFile": { "type": "string", - "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" }, - "disableNpm": { + "bundleAssets": { "type": "boolean", - "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" }, - "skipMerge": { + "enableSourceMaps": { "type": "boolean", - "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" - }, - "npm": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" }, - "pluginDependencies": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "null" - ] - }, - "description": "List of other Renative plugins this plugin depends on" + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" }, - "webpackConfig": { - "type": "object", - "properties": { - "modulePaths": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "moduleAliases": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "projectPath": { - "type": "string" - } - }, - "required": [ - "projectPath" - ], - "additionalProperties": false - } - ] - } - } - ] - }, - "nextTranspileModules": { - "type": "array", - "items": { - "type": "string" - } - } + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" }, - "additionalProperties": false, - "description": "Allows you to configure webpack bahaviour per each individual plugin" - }, - "disablePluginTemplateOverrides": { - "type": "boolean", - "description": "Disables plugin overrides for selected plugin" - }, - "fontSources": { - "type": "array", - "items": { - "type": "string" - } - }, - "android": { - "type": "object", - "properties": { - "disabled": { - "type": "boolean", - "default": false, - "description": "Marks plugin platform disabled" - }, - "forceLinking": { - "type": "boolean", - "default": false, - "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" - }, - "path": { - "type": "string", - "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." - }, - "projectName": { - "type": "string" - }, - "skipLinking": { - "type": "boolean" - }, - "skipImplementation": { - "type": "boolean" - }, - "implementation": { - "type": "string" - }, - "package": { + { + "type": "array", + "items": { "type": "string" - }, - "templateAndroid": { - "type": "object", - "properties": { - "gradle_properties": { - "type": "object", - "additionalProperties": { - "type": [ - "string", - "boolean", - "number" - ] - }, - "description": "Overrides values in `gradle.properties` file of generated android based project" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" }, - "build_gradle": { + { "type": "object", "properties": { - "allprojects": { - "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - }, - "description": "Customize repositories section of build.gradle" - } - }, - "required": [ - "repositories" - ], - "additionalProperties": false - }, - "plugins": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildscript": { - "type": "object", - "properties": { - "repositories": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - } - }, - "required": [ - "repositories", - "dependencies" - ], - "additionalProperties": false - }, - "dexOptions": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - }, - "injectAfterAll": { - "type": "array", - "items": { - "type": "string" - } + "projectPath": { + "type": "string" } }, "required": [ - "allprojects", - "plugins", - "buildscript", - "dexOptions", - "injectAfterAll" + "projectPath" ], - "additionalProperties": false, - "description": "Overrides values in `build.gradle` file of generated android based project" - }, - "app_build_gradle": { - "type": "object", - "properties": { - "apply": { - "type": "array", - "items": { - "type": "string" - } - }, - "defaultConfig": { - "type": "array", - "items": { - "type": "string" - } - }, - "buildTypes": { - "type": "object", - "properties": { - "debug": { - "type": "array", - "items": { - "type": "string" - } - }, - "release": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false - }, - "afterEvaluate": { - "type": "array", - "items": { - "type": "string" - } - }, - "implementations": { - "type": "array", - "items": { - "type": "string" - } + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" }, - "implementation": { + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { "type": "string" } }, - "required": [ - "apply", - "defaultConfig" - ], - "additionalProperties": false, - "description": "Overrides values in `app/build.gradle` file of generated android based project" + "release": { + "type": "array", + "items": { + "type": "string" + } + } }, - "AndroidManifest_xml": { + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { "type": "object", "properties": { "tag": { "type": "string" }, - "android:name": { + "name": { "type": "string" }, - "android:required": { - "type": "boolean" - }, - "package": { + "child_value": { "type": "string" - }, - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/tag" - }, - "android:name": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:name" - }, - "android:required": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/android:required" - }, - "children": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/templateAndroid/properties/AndroidManifest_xml/properties/children/items" - } - } - }, - "required": [ - "tag", - "android:name", - "children" - ], - "additionalProperties": false - } } }, "required": [ - "tag", - "android:name", - "children" + "tag" ], - "additionalProperties": false, - "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " - }, - "strings_xml": { - "type": "object", - "properties": { - "children": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag": { - "type": "string" - }, - "name": { - "type": "string" - }, - "child_value": { - "type": "string" - } - }, - "required": [ - "tag", - "name", - "child_value" - ], - "additionalProperties": false - } - } - }, - "additionalProperties": false - }, - "MainActivity_kt": { - "type": "object", - "properties": { - "onCreate": { - "type": "string", - "default": "super.onCreate(savedInstanceState)", - "description": "Overrides super.onCreate method handler of MainActivity.java" - }, - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { - "type": "string" - } - }, - "resultMethods": { - "type": "array", - "items": { - "type": "string" - } - } - }, "additionalProperties": false - }, - "MainApplication_kt": { - "type": "object", - "properties": { - "imports": { - "type": "array", - "items": { - "type": "string" - } - }, - "methods": { - "type": "array", - "items": { - "type": "string" - } - }, - "createMethods": { - "type": "array", - "items": { - "type": "string" - } - }, - "packages": { - "type": "array", - "items": { - "type": "string" - } - }, - "packageParams": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "description": "Allows you to configure behaviour of MainActivity" } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "androidtv": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android" - }, - "androidwear": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android" - }, - "firetv": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android" - }, - "ios": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/forceLinking" - }, - "path": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/path" - }, - "git": { - "type": "string", - "description": "Alternative git url for pod instead of version" - }, - "commit": { - "type": "string", - "description": "Alternative git commit reference string" - }, - "version": { - "type": "string", - "description": "Version of pod" - }, - "podNames": { - "type": "array", - "items": { - "type": "string" } }, - "podName": { - "type": "string" + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } }, - "staticFrameworks": { - "type": "array", - "items": { - "type": "string" + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } } }, - "templateXcode": { - "type": "object", - "properties": { - "Podfile": { - "type": "object", - "properties": { - "injectLines": { - "type": "array", - "items": { - "type": "string" - } - }, - "post_install": { - "type": "array", - "items": { - "type": "string" - } - }, - "sources": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of URLs that will be injected on top of the Podfile as sources" - }, - "podDependencies": { - "type": "array", - "items": { - "type": "string" - } - }, - "staticPods": { - "type": "array", - "items": { - "type": "string" - } - }, - "header": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Array of strings that will be injected on top of the Podfile" - } - }, - "additionalProperties": false, - "description": "Allows to manipulate Podfile" + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" }, - "project_pbxproj": { + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { "type": "object", "properties": { - "sourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "resourceFiles": { - "type": "array", - "items": { - "type": "string" - } - }, - "headerFiles": { - "type": "array", - "items": { - "type": "string" - } + "shellPath": { + "type": "string" }, - "buildPhases": { - "type": "array", - "items": { - "type": "object", - "properties": { - "shellPath": { - "type": "string" - }, - "shellScript": { - "type": "string" - }, - "inputPaths": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "shellPath", - "shellScript", - "inputPaths" - ], - "additionalProperties": false - } + "shellScript": { + "type": "string" }, - "frameworks": { + "inputPaths": { "type": "array", "items": { "type": "string" } - }, - "buildSettings": { - "type": "object", - "additionalProperties": { - "type": "string" - } } }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], "additionalProperties": false - }, - "AppDelegate_mm": { - "type": "object", - "properties": { - "appDelegateMethods": { - "type": "object", - "properties": { - "application": { - "type": "object", - "properties": { - "didFinishLaunchingWithOptions": { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "object", - "properties": { - "order": { - "type": "number" - }, - "value": { - "type": "string" - }, - "weight": { - "type": "number" - } - }, - "required": [ - "order", - "value", - "weight" - ], - "additionalProperties": false - } - ] - } - }, - "applicationDidBecomeActive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "open": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "supportedInterfaceOrientationsFor": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveRemoteNotification": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didFailToRegisterForRemoteNotificationsWithError": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceive": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegister": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didRegisterForRemoteNotificationsWithDeviceToken": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "continue": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didConnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didDisconnectCarInterfaceController": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false - }, - "userNotificationCenter": { - "type": "object", - "properties": { - "willPresent": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - }, - "didReceiveNotificationResponse": { - "type": "array", - "items": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios/properties/templateXcode/properties/AppDelegate_mm/properties/appDelegateMethods/properties/application/properties/didFinishLaunchingWithOptions/items" - } - } - }, - "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" } }, - "additionalProperties": false - }, - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } } - } + }, + "additionalProperties": false }, - "additionalProperties": false - }, - "AppDelegate_h": { - "type": "object", - "properties": { - "appDelegateImports": { - "type": "array", - "items": { - "type": "string" + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } } }, - "appDelegateExtensions": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false + "additionalProperties": false + } }, - "Info_plist": { - "type": "object", - "properties": {}, - "additionalProperties": false - } + "additionalProperties": false }, - "additionalProperties": false - }, - "isStatic": { - "type": "boolean" + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } }, - "buildType": { - "type": "string", - "enum": [ - "dynamic", - "static" - ], - "description": "Build type of the pod" - } + "additionalProperties": false }, - "additionalProperties": false - }, - "tvos": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/ios" - }, - "tizen": { - "type": "object", - "properties": { - "disabled": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/disabled" - }, - "forceLinking": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/forceLinking" + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } }, - "path": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/android/properties/path" - } + "additionalProperties": false }, - "additionalProperties": false - }, - "tizenmobile": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "tizenwatch": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "webos": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "web": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "webtv": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "chromecast": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "kaios": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "macos": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "linux": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - }, - "windows": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } }, - "xbox": { - "$ref": "#/definitions/rnv.templates/properties/pluginTemplates/additionalProperties/properties/tizen" - } + "additionalProperties": false }, - "additionalProperties": false + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } + }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.templates": { + "type": "object", + "properties": { + "projectTemplates": { + "$ref": "#/definitions/zodProjectTemplates" + }, + "engineIdMap": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "engineTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "version": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "required": [ + "version", + "id", + "key" + ], + "additionalProperties": false + } + }, + "integrationTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "version": { + "type": "string" + } + }, + "required": [ + "version" + ], + "additionalProperties": false + } + }, + "platformTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "engine": { + "type": "string" + } + }, + "required": [ + "engine" + ], + "additionalProperties": false + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + } + }, + "pluginTemplates": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/zodPluginSchema" }, "description": "Define all plugins available to be merged with project plugins" }, diff --git a/packages/core/jsonSchema/rnv.workspace.json b/packages/core/jsonSchema/rnv.workspace.json index 30b120798c..d009131c1b 100644 --- a/packages/core/jsonSchema/rnv.workspace.json +++ b/packages/core/jsonSchema/rnv.workspace.json @@ -1,36 +1,3301 @@ { "$ref": "#/definitions/rnv.workspace", "definitions": { - "rnv.workspace": { + "zodRuntime": { + "description": "This object will be automatically injected into `./platfromAssets/renative.runtime.json` making it possible to inject the values directly to JS source code" + }, + "zodPlatformsKeys": { + "type": "string", + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "zodSupportedPlatforms": { + "type": "array", + "items": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "description": "Array list of all supported platforms in current project" + }, + "zodExt": { + "description": "Object used to extend your renative with custom props. This allows renative json schema to be validated" + }, + "zodDefaultTargets": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "enum": [ + "web", + "ios", + "android", + "androidtv", + "firetv", + "tvos", + "macos", + "linux", + "windows", + "tizen", + "webos", + "chromecast", + "kaios", + "webtv", + "androidwear", + "tizenwatch", + "tizenmobile", + "xbox" + ] + }, + "description": "Define targets to be used when -t is not set on any project run" + }, + "zodBuildSchemeFragment": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Defines whether build scheme shows up in options to run" + }, + "description": { + "type": "string", + "description": "Custom description of the buildScheme will be displayed directly in cli if you run rnv with an empty paramener `-s`" + } + }, + "additionalProperties": false + }, + "zodNpmDep": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "zodTemplateConfigFragment": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "includedPaths": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string" + } + }, + "engines": { + "type": "array", + "items": { + "type": "string" + } + }, + "platforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + } + }, + "required": [ + "paths" + ], + "additionalProperties": false + } + ] + }, + "description": "Defines list of all file/dir paths you want to include in template" + }, + "renative_json": { + "type": "object", + "properties": { + "$schema": { + "type": "string" + }, + "extendsTemplate": { + "type": "string" + } + }, + "additionalProperties": false + }, + "package_json": { + "type": "object", + "properties": { + "dependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "devDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "peerDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "optionalDependencies": { + "$ref": "#/definitions/zodNpmDep" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "description": "Used in `renative.template.json` allows you to define template behaviour." + }, + "zodProjectTemplates": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "packageName": { + "type": "string" + }, + "description": { + "type": "string" + }, + "localPath": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "zodCommonSchemaFragment": { + "type": "object", + "properties": { + "includedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to include specific permissions by their KEY defined in `permissions` object. Use: `['*']` to include all" + }, + "excludedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to exclude specific permissions by their KEY defined in `permissions` object. Use: `['*']` to exclude all" + }, + "id": { + "type": "string", + "description": "Bundle ID of application. ie: com.example.myapp" + }, + "idSuffix": { + "type": "string" + }, + "version": { + "type": "string", + "description": "Semver style version of your app" + }, + "versionCode": { + "type": "string", + "description": "Manual verride of generated version code" + }, + "versionFormat": { + "type": "string", + "description": "Allows you to fine-tune app version defined in package.json or renative.json.\n If you do not define versionFormat, no formatting will apply to version.\n " + }, + "versionCodeFormat": { + "type": "string", + "description": "Allows you to fine-tune auto generated version codes.\n Version code is autogenerated from app version defined in package.json or renative.json.\n " + }, + "versionCodeOffset": { + "type": "number" + }, + "title": { + "type": "string", + "description": "Title of your app will be used to create title of the binary. ie App title of installed app iOS/Android app or Tab title of the website" + }, + "description": { + "type": "string", + "description": "General description of your app. This prop will be injected to actual projects where description field is applicable" + }, + "author": { + "type": "string", + "description": "Author name" + }, + "license": { + "type": "string", + "description": "Injects license information into app" + }, + "includedFonts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of fonts you want to include in specific app or scheme. Should use exact font file (without the extension) located in `./appConfigs/base/fonts` or `*` to mark all" + }, + "backgroundColor": { + "type": "string", + "minLength": 4, + "maxLength": 9, + "pattern": "^#", + "description": "Defines root view backgroundColor for all platforms in HEX format" + }, + "splashScreen": { + "type": "boolean", + "description": "Enable or disable splash screen" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to location of external Fonts. you can use resolve function here example: `{{resolvePackage(react-native-vector-icons)}}/Fonts`" + }, + "assetSources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of paths to alternative external assets. this will take priority over ./appConfigs/base/assets folder on your local project. You can use resolve function here example: `{{resolvePackage(@flexn/template-starter)}}/appConfigs/base/assets`" + }, + "includedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all included plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: includedPlugins is evaluated before excludedPlugins. Use: `['*']` to include all" + }, + "excludedPlugins": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines an array of all excluded plugins for specific config or buildScheme. only full keys as defined in `plugin` should be used.\n\nNOTE: excludedPlugins is evaluated after includedPlugins. Use: `['*']` to exclude all" + }, + "runtime": { + "$ref": "#/definitions/zodRuntime" + }, + "custom": { + "$ref": "#/definitions/zodExt" + } + }, + "additionalProperties": false + }, + "zodCommonSchema": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "enabled": { + "$ref": "#/definitions/zodBuildSchemeFragment/properties/enabled" + }, + "extendPlatform": { + "$ref": "#/definitions/zodPlatformsKeys" + }, + "assetFolderPlatform": { + "type": "string", + "description": "Alternative platform assets. This is useful for example when you want to use same android assets in androidtv and want to avoid duplicating assets" + }, + "engine": { + "type": "string", + "description": "ID of engine to be used for this platform. Note: engine must be registered in `engines` field" + }, + "entryFile": { + "type": "string", + "default": "index", + "description": "Alternative name of the entry file without `.js` extension" + }, + "bundleAssets": { + "type": "boolean", + "description": "If set to `true` compiled js bundle file will generated. this is needed if you want to make production like builds" + }, + "enableSourceMaps": { + "type": "boolean", + "description": "If set to `true` dedicated source map file will be generated alongside of compiled js bundle" + }, + "bundleIsDev": { + "type": "boolean", + "description": "If set to `true` debug build will be generated" + }, + "getJsBundleFile": { + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false, + "description": "Common config props used as default props for all available buildSchemes" + }, + "zodPluginSchema": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodSupportedPlatforms", + "description": "Array list of all supported platforms in current project" + }, + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin disabled" + }, + "props": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Custom props passed to plugin" + }, + "version": { + "type": "string", + "description": "Version of plugin. Typically package version" + }, + "deprecated": { + "type": "string", + "description": "Marks your plugin deprecated with warning showing in the console during rnv commands" + }, + "source": { + "type": "string", + "description": "Will define custom scope for your plugin config to extend from.\n\nNOTE: custom scopes can be defined via paths.pluginTemplates.[CUSTOM_SCOPE].{}" + }, + "disableNpm": { + "type": "boolean", + "description": "Will skip including plugin in package.json and installing it via npm/yarn etc" + }, + "skipMerge": { + "type": "boolean", + "description": "Will not attempt to merge with existing plugin configuration (ie. coming form renative pluginTemplates)\n\nNOTE: if set to `true` you need to configure your plugin object fully" + }, + "npm": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Object of npm dependencies of this plugin. These will be injected into package.json" + }, + "pluginDependencies": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "List of other Renative plugins this plugin depends on" + }, + "webpackConfig": { + "type": "object", + "properties": { + "modulePaths": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "moduleAliases": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "projectPath": { + "type": "string" + } + }, + "required": [ + "projectPath" + ], + "additionalProperties": false + } + ] + } + } + ] + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure webpack bahaviour per each individual plugin" + }, + "disablePluginTemplateOverrides": { + "type": "boolean", + "description": "Disables plugin overrides for selected plugin" + }, + "fontSources": { + "type": "array", + "items": { + "type": "string" + } + }, + "android": { + "type": "object", + "properties": { + "disabled": { + "type": "boolean", + "default": false, + "description": "Marks plugin platform disabled" + }, + "forceLinking": { + "type": "boolean", + "default": false, + "description": "Packages that cannot be autolinked yet can still be added to MainApplication PackageList dynamically by setting this to true" + }, + "path": { + "type": "string", + "description": "Enables you to pass custom path to plugin. If undefined, the default `node_modules/[plugin-name]` will be used." + }, + "templateAndroid": { + "type": "object", + "properties": { + "gradle_properties": { + "type": "object", + "additionalProperties": { + "type": [ + "string", + "boolean", + "number" + ] + }, + "description": "Overrides values in `gradle.properties` file of generated android based project" + }, + "build_gradle": { + "type": "object", + "properties": { + "allprojects": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "description": "Customize repositories section of build.gradle" + } + }, + "required": [ + "repositories" + ], + "additionalProperties": false + }, + "plugins": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildscript": { + "type": "object", + "properties": { + "repositories": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + } + }, + "required": [ + "repositories", + "dependencies" + ], + "additionalProperties": false + }, + "dexOptions": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "injectAfterAll": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Overrides values in `build.gradle` file of generated android based project" + }, + "app_build_gradle": { + "type": "object", + "properties": { + "apply": { + "type": "array", + "items": { + "type": "string" + } + }, + "defaultConfig": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildTypes": { + "type": "object", + "properties": { + "debug": { + "type": "array", + "items": { + "type": "string" + } + }, + "release": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "afterEvaluate": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementations": { + "type": "array", + "items": { + "type": "string" + } + }, + "implementation": { + "type": "string" + } + }, + "additionalProperties": false, + "description": "Overrides values in `app/build.gradle` file of generated android based project" + }, + "AndroidManifest_xml": { + "$ref": "#/definitions/zodAndroidManifest", + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "strings_xml": { + "type": "object", + "properties": { + "children": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "name": { + "type": "string" + }, + "child_value": { + "type": "string" + } + }, + "required": [ + "tag" + ], + "additionalProperties": false + } + } + }, + "required": [ + "children" + ], + "additionalProperties": false + }, + "MainActivity_kt": { + "type": "object", + "properties": { + "onCreate": { + "type": "string", + "default": "super.onCreate(savedInstanceState)", + "description": "Overrides super.onCreate method handler of MainActivity.java" + }, + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "resultMethods": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "MainApplication_kt": { + "type": "object", + "properties": { + "imports": { + "type": "array", + "items": { + "type": "string" + } + }, + "methods": { + "type": "array", + "items": { + "type": "string" + } + }, + "createMethods": { + "type": "array", + "items": { + "type": "string" + } + }, + "packages": { + "type": "array", + "items": { + "type": "string" + } + }, + "packageParams": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "description": "Allows you to configure behaviour of MainActivity" + }, + "settings_gradle": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "gradle_wrapper_properties": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "SplashActivity_java": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "styles_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "colors_xml": { + "type": "object", + "properties": {}, + "additionalProperties": false + }, + "proguard_rules_pro": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "projectName": { + "type": "string" + }, + "skipLinking": { + "type": "boolean" + }, + "skipImplementation": { + "type": "boolean" + }, + "implementation": { + "type": "string" + }, + "package": { + "type": "string" + } + }, + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPluginSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + }, + "templateXcode": { + "type": "object", + "properties": { + "Podfile": { + "type": "object", + "properties": { + "injectLines": { + "type": "array", + "items": { + "type": "string" + } + }, + "post_install": { + "type": "array", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of URLs that will be injected on top of the Podfile as sources" + }, + "podDependencies": { + "type": "array", + "items": { + "type": "string" + } + }, + "staticPods": { + "type": "array", + "items": { + "type": "string" + } + }, + "header": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of strings that will be injected on top of the Podfile" + } + }, + "additionalProperties": false, + "description": "Allows to manipulate Podfile" + }, + "project_pbxproj": { + "type": "object", + "properties": { + "sourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "resourceFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "headerFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildPhases": { + "type": "array", + "items": { + "type": "object", + "properties": { + "shellPath": { + "type": "string" + }, + "shellScript": { + "type": "string" + }, + "inputPaths": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "shellPath", + "shellScript", + "inputPaths" + ], + "additionalProperties": false + } + }, + "frameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "buildSettings": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_mm": { + "type": "object", + "properties": { + "appDelegateMethods": { + "type": "object", + "properties": { + "application": { + "type": "object", + "properties": { + "didFinishLaunchingWithOptions": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "applicationDidBecomeActive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "open": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "supportedInterfaceOrientationsFor": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveRemoteNotification": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didFailToRegisterForRemoteNotificationsWithError": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceive": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegister": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didRegisterForRemoteNotificationsWithDeviceToken": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "continue": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didConnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didDisconnectCarInterfaceController": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + }, + "userNotificationCenter": { + "type": "object", + "properties": { + "willPresent": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + }, + "didReceiveNotificationResponse": { + "type": "array", + "items": { + "$ref": "#/definitions/zodAppDelegateMethod" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "AppDelegate_h": { + "type": "object", + "properties": { + "appDelegateImports": { + "type": "array", + "items": { + "type": "string" + } + }, + "appDelegateExtensions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "Info_plist": { + "type": "object", + "properties": {}, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "git": { + "type": "string", + "description": "Alternative git url for pod instead of version" + }, + "commit": { + "type": "string", + "description": "Alternative git commit reference string" + }, + "version": { + "type": "string", + "description": "Version of pod" + }, + "podNames": { + "type": "array", + "items": { + "type": "string" + } + }, + "podName": { + "type": "string" + }, + "staticFrameworks": { + "type": "array", + "items": { + "type": "string" + } + }, + "isStatic": { + "type": "boolean" + }, + "buildType": { + "type": "string", + "enum": [ + "dynamic", + "static" + ], + "description": "Build type of the pod" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPluginSchema/properties/ios" + }, + "tizen": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenmobile": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "web": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "webtv": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "chromecast": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "kaios": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "macos": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "linux": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "windows": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + }, + "xbox": { + "$ref": "#/definitions/zodPluginPlatformBaseFragment" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false + }, + "zodPluginsSchema": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/zodPluginSchema" + }, + { + "type": "string" + } + ] + }, + { + "type": "null" + } + ] + }, + "description": "Define all plugins available in your project. you can then use `includedPlugins` and `excludedPlugins` props to define active and inactive plugins per each app config" + }, + "zodPluginBaseFragment": { + "type": "object", + "properties": { + "supportedPlatforms": { + "$ref": "#/definitions/zodPluginSchema/properties/supportedPlatforms" + }, + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/disabled" + }, + "props": { + "$ref": "#/definitions/zodPluginSchema/properties/props" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/version" + }, + "deprecated": { + "$ref": "#/definitions/zodPluginSchema/properties/deprecated" + }, + "source": { + "$ref": "#/definitions/zodPluginSchema/properties/source" + }, + "disableNpm": { + "$ref": "#/definitions/zodPluginSchema/properties/disableNpm" + }, + "skipMerge": { + "$ref": "#/definitions/zodPluginSchema/properties/skipMerge" + }, + "npm": { + "$ref": "#/definitions/zodPluginSchema/properties/npm" + }, + "pluginDependencies": { + "$ref": "#/definitions/zodPluginSchema/properties/pluginDependencies" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPluginSchema/properties/webpackConfig" + }, + "disablePluginTemplateOverrides": { + "$ref": "#/definitions/zodPluginSchema/properties/disablePluginTemplateOverrides" + }, + "fontSources": { + "$ref": "#/definitions/zodPluginSchema/properties/fontSources" + } + }, + "additionalProperties": false + }, + "zodPluginPlatformAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + }, + "projectName": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/projectName" + }, + "skipLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipLinking" + }, + "skipImplementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/skipImplementation" + }, + "implementation": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/implementation" + }, + "package": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/package" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodPluginPlatformiOSFragment": { "type": "object", "properties": { - "defaultTargets": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "git": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/git" + }, + "commit": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/commit" + }, + "version": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/version" + }, + "podNames": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podNames" + }, + "podName": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/podName" + }, + "staticFrameworks": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/staticFrameworks" + }, + "isStatic": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/isStatic" + }, + "buildType": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/buildType" + } + }, + "required": [ + "git", + "commit", + "version", + "podNames", + "podName", + "staticFrameworks", + "isStatic", + "buildType" + ], + "additionalProperties": false + }, + "zodPluginPlatformBaseFragment": { + "type": "object", + "properties": { + "disabled": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/disabled" + }, + "forceLinking": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/forceLinking" + }, + "path": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/path" + } + }, + "additionalProperties": false + }, + "zodPlatformsSchema": { + "type": "object", + "properties": { + "android": { "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "enableAndroidX": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables new android X architecture" + }, + "enableJetifier": { + "type": [ + "boolean", + "string" + ], + "default": true, + "description": "Enables Jetifier" + }, + "signingConfig": { + "type": "string", + "default": "Debug", + "description": "Equivalent to running `./gradlew/assembleDebug` or `./gradlew/assembleRelease`" + }, + "minSdkVersion": { + "type": "number", + "default": 28, + "description": "Minimum Android SDK version device has to have in order for app to run" + }, + "multipleAPKs": { + "type": "boolean", + "description": "If set to `true`, apk will be split into multiple ones for each architecture: \"armeabi-v7a\", \"x86\", \"arm64-v8a\", \"x86_64\"" + }, + "aab": { + "type": "boolean", + "description": "If set to true, android project will generate app.aab instead of apk" + }, + "extraGradleParams": { + "type": "string", + "description": "Allows passing extra params to gradle command" + }, + "minifyEnabled": { + "type": "boolean", + "description": "Sets minifyEnabled buildType property in app/build.gradle" + }, + "targetSdkVersion": { + "type": "number", + "description": "Allows you define custom targetSdkVersion equivalent to: `targetSdkVersion = [VERSION]` in build.gradle" + }, + "compileSdkVersion": { + "type": "number", + "description": "Allows you define custom compileSdkVersion equivalent to: `compileSdkVersion = [VERSION]` in build.gradle" + }, + "kotlinVersion": { + "type": "string", + "default": "1.7.10", + "description": "Allows you define custom kotlin version" + }, + "ndkVersion": { + "type": "string", + "description": "Allows you define custom ndkVersion equivalent to: `ndkVersion = [VERSION]` in build.gradle" + }, + "supportLibVersion": { + "type": "string", + "description": "Allows you define custom supportLibVersion equivalent to: `supportLibVersion = [VERSION]` in build.gradle" + }, + "googleServicesVersion": { + "type": "string", + "description": "Allows you define custom googleServicesVersion equivalent to: `googleServicesVersion = [VERSION]` in build.gradle" + }, + "gradleBuildToolsVersion": { + "type": "string", + "description": "Allows you define custom gradle build tools version equivalent to: `classpath 'com.android.tools.build:gradle:[VERSION]'`" + }, + "gradleWrapperVersion": { + "type": "string", + "description": "Allows you define custom gradle wrapper version equivalent to: `distributionUrl=https\\://services.gradle.org/distributions/gradle-[VERSION]-all.zip`" + }, + "excludedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by exclusion" + }, + "includedFeatures": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Override features definitions in AndroidManifest.xml by inclusion" + }, + "buildToolsVersion": { + "type": "string", + "default": "34.0.0", + "description": "Override android build tools version" + }, + "disableSigning": { + "type": "boolean" + }, + "storeFile": { + "type": "string", + "description": "Name of the store file in android project" + }, + "keyAlias": { + "type": "string", + "description": "Key alias of the store file in android project" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new arch for android. Default: false" + }, + "flipperEnabled": { + "type": "boolean", + "description": "Enables flipper for ios. Default: true" + }, + "reactNativeEngine": { + "type": "string", + "enum": [ + "jsc", + "v8-android", + "v8-android-nointl", + "v8-android-jit", + "v8-android-jit-nointl", + "hermes" + ], + "default": "hermes", + "description": "Allows you to define specific native render engine to be used" + }, + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false + } + } }, - "propertyNames": { - "enum": [ - "web", - "ios", - "android", - "androidtv", - "firetv", - "tvos", - "macos", - "linux", - "windows", - "tizen", - "webos", - "chromecast", - "kaios", - "webtv", - "androidwear", - "tizenwatch", - "tizenmobile", - "xbox" - ] + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "androidtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "androidwear": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "firetv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android" + }, + "ios": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "type": "boolean", + "description": "Injects `inhibit_all_warnings` into Podfile" + }, + "ignoreLogs": { + "type": "boolean", + "description": "Passes `-quiet` to xcodebuild command" + }, + "deploymentTarget": { + "type": "string", + "description": "Deployment target for xcodepoj" + }, + "orientationSupport": { + "type": "object", + "properties": { + "phone": { + "type": "array", + "items": { + "type": "string" + } + }, + "tab": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "teamID": { + "type": "string", + "description": "Apple teamID" + }, + "excludedArchs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Defines excluded architectures. This transforms to xcodeproj: `EXCLUDED_ARCHS=\"\"`" + }, + "urlScheme": { + "type": "string", + "description": "URL Scheme for the app used for deeplinking" + }, + "teamIdentifier": { + "type": "string", + "description": "Apple developer team ID" + }, + "scheme": { + "type": "string" + }, + "schemeTarget": { + "type": "string" + }, + "appleId": { + "type": "string" + }, + "provisioningStyle": { + "type": "string" + }, + "newArchEnabled": { + "type": "boolean", + "description": "Enables new archs for iOS. Default: false" + }, + "codeSignIdentity": { + "type": "string", + "description": "Special property which tells Xcode how to build your project" + }, + "commandLineArguments": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to pass launch arguments to active scheme" + }, + "provisionProfileSpecifier": { + "type": "string" + }, + "provisionProfileSpecifiers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "allowProvisioningUpdates": { + "type": "boolean" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "codeSignIdentities": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "systemCapabilities": { + "type": "object", + "additionalProperties": { + "type": "boolean" + } + }, + "entitlements": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "runScheme": { + "type": "string" + }, + "sdk": { + "type": "string" + }, + "testFlightId": { + "type": "string" + }, + "firebaseId": { + "type": "string" + }, + "exportOptions": { + "type": "object", + "properties": { + "method": { + "type": "string" + }, + "teamID": { + "type": "string" + }, + "uploadBitcode": { + "type": "boolean" + }, + "compileBitcode": { + "type": "boolean" + }, + "uploadSymbols": { + "type": "boolean" + }, + "signingStyle": { + "type": "string" + }, + "signingCertificate": { + "type": "string" + }, + "provisioningProfiles": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "additionalProperties": false + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tvos": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios" + }, + "tizen": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "package": { + "type": "string" + }, + "certificateProfile": { + "type": "string" + }, + "appName": { + "type": "string" + }, + "timestampBuildFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "devServerHost": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "webpackConfig": { + "type": "object", + "properties": { + "publicUrl": { + "type": "string" + }, + "customScripts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allows you to inject custom script into html header" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "tizenmobile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "tizenwatch": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen" + }, + "webos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "iconColor": { + "type": "string" + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "web": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "webpackConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/webpackConfig" + }, + "pagesDir": { + "type": "string", + "description": "Custom pages directory used by nextjs. Use relative paths" + }, + "outputDir": { + "type": "string", + "description": "Custom output directory used by nextjs equivalent to `npx next build` with custom outputDir. Use relative paths" + }, + "exportDir": { + "type": "string", + "description": "Custom export directory used by nextjs equivalent to `npx next export --outdir `. Use relative paths" + }, + "nextTranspileModules": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "webtv": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "chromecast": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "kaios": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "macos": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + }, + "electronConfig": { + "description": "Allows you to configure electron app as per https://www.electron.build/" + }, + "BrowserWindow": { + "type": "object", + "properties": { + "width": { + "type": "number" + }, + "height": { + "type": "number" + }, + "webPreferences": { + "type": "object", + "properties": { + "devTools": { + "type": "boolean" + } + }, + "required": [ + "devTools" + ], + "additionalProperties": false, + "description": "Extra web preferences of electron app" + } + }, + "additionalProperties": false, + "description": "Allows you to configure electron wrapper app window" + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "linux": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web" + }, + "windows": { + "type": "object", + "properties": { + "buildSchemes": { + "type": "object", + "additionalProperties": { + "type": "object", + "properties": { + "includedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPermissions" + }, + "excludedPermissions": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPermissions" + }, + "id": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/id" + }, + "idSuffix": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/idSuffix" + }, + "version": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/version" + }, + "versionCode": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCode" + }, + "versionFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionFormat" + }, + "versionCodeFormat": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeFormat" + }, + "versionCodeOffset": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/versionCodeOffset" + }, + "title": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/title" + }, + "description": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/description" + }, + "author": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/author" + }, + "license": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/license" + }, + "includedFonts": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedFonts" + }, + "backgroundColor": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/backgroundColor" + }, + "splashScreen": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/splashScreen" + }, + "fontSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/fontSources" + }, + "assetSources": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/assetSources" + }, + "includedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/includedPlugins" + }, + "excludedPlugins": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/excludedPlugins" + }, + "runtime": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/runtime" + }, + "custom": { + "$ref": "#/definitions/zodCommonSchemaFragment/properties/custom" + }, + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + }, + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + }, + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + }, + "templateVSProject": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Specify generated project language: cpp for C++ or cs for C#" + }, + "arch": { + "type": "string", + "description": "Specification of targeted architecture" + }, + "experimentalNuGetDependency": { + "type": "boolean" + }, + "useWinUI3": { + "type": "boolean" + }, + "nuGetTestVersion": { + "type": "string" + }, + "reactNativeEngine": { + "type": "string" + }, + "nuGetTestFeed": { + "type": "string" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to attempt to override the existing builds files when running a build once more" + }, + "release": { + "type": "boolean", + "description": "Enables full packaging of the app for release" + }, + "root": { + "type": "string", + "description": "Project root folder location (not the app itself, which is in platformBuilds)" + }, + "singleproc": { + "type": "boolean", + "description": "Opt out of multi-proc builds (only available in 0.64 and newer versions of react-native-windows)" + }, + "emulator": { + "type": "boolean" + }, + "device": { + "type": "boolean" + }, + "target": { + "type": "string" + }, + "remoteDebugging": { + "type": "boolean" + }, + "logging": { + "type": "boolean", + "description": "Logging all the build proccesses to console" + }, + "packager": { + "type": "boolean" + }, + "bundle": { + "type": "boolean" + }, + "launch": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "autolink": { + "type": "boolean", + "description": "Launches the application once the build process is finished" + }, + "build": { + "type": "boolean", + "description": "Builds the application before launching it" + }, + "sln": { + "type": "string", + "description": "Location of Visual Studio solution .sln file (wraps multiple projects)" + }, + "proj": { + "type": "string", + "description": "Root project directory for your React Native Windows project (not Visual Studio project)" + }, + "appPath": { + "type": "string", + "description": "Full path to windows plaform build directory" + }, + "msbuildprops": { + "type": "string", + "description": "Comma separated props to pass to msbuild, eg: prop1=value1,prop2=value2" + }, + "buildLogDirectory": { + "type": "string", + "description": "Full path to directory where builds logs should be stored, default - project path" + }, + "info": { + "type": "boolean", + "description": "Print information about the build machine to console" + }, + "directDebugging": { + "type": "boolean" + }, + "telemetry": { + "type": "boolean", + "description": "Send analytics data of @react-native-windows/cli usage to Microsoft" + }, + "devPort": { + "type": "string" + }, + "additionalMetroOptions": { + "type": "object", + "additionalProperties": {} + }, + "packageExtension": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + } + }, + "required": [ + "buildSchemes" + ], + "additionalProperties": false + }, + "xbox": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows" + } + }, + "required": [ + "android", + "androidtv", + "androidwear", + "firetv", + "ios", + "tvos", + "tizen", + "tizenmobile", + "tizenwatch", + "webos", + "web", + "webtv", + "chromecast", + "kaios", + "macos", + "linux", + "windows", + "xbox" + ], + "additionalProperties": false, + "description": "Object containing platform configurations" + }, + "zodPlatformAndroidFragment": { + "type": "object", + "properties": { + "enableAndroidX": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableAndroidX" + }, + "enableJetifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/enableJetifier" + }, + "signingConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/signingConfig" + }, + "minSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minSdkVersion" + }, + "multipleAPKs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/multipleAPKs" + }, + "aab": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/aab" + }, + "extraGradleParams": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/extraGradleParams" + }, + "minifyEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/minifyEnabled" + }, + "targetSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/targetSdkVersion" + }, + "compileSdkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/compileSdkVersion" + }, + "kotlinVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/kotlinVersion" + }, + "ndkVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/ndkVersion" + }, + "supportLibVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/supportLibVersion" + }, + "googleServicesVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/googleServicesVersion" + }, + "gradleBuildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleBuildToolsVersion" + }, + "gradleWrapperVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/gradleWrapperVersion" + }, + "excludedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/excludedFeatures" + }, + "includedFeatures": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/includedFeatures" + }, + "buildToolsVersion": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/buildToolsVersion" + }, + "disableSigning": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/disableSigning" + }, + "storeFile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/storeFile" + }, + "keyAlias": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/keyAlias" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "flipperEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/flipperEnabled" + } + }, + "additionalProperties": false + }, + "zodPlatformiOSFragment": { + "type": "object", + "properties": { + "ignoreWarnings": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreWarnings" + }, + "ignoreLogs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/ignoreLogs" + }, + "deploymentTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/deploymentTarget" + }, + "orientationSupport": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/orientationSupport" + }, + "teamID": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamID" + }, + "excludedArchs": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/excludedArchs" + }, + "urlScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/urlScheme" + }, + "teamIdentifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/teamIdentifier" + }, + "scheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/scheme" + }, + "schemeTarget": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/schemeTarget" + }, + "appleId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/appleId" + }, + "provisioningStyle": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningStyle" + }, + "newArchEnabled": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/newArchEnabled" + }, + "codeSignIdentity": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentity" + }, + "commandLineArguments": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/commandLineArguments" + }, + "provisionProfileSpecifier": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifier" + }, + "provisionProfileSpecifiers": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisionProfileSpecifiers" + }, + "allowProvisioningUpdates": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/allowProvisioningUpdates" + }, + "provisioningProfiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/provisioningProfiles" + }, + "codeSignIdentities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/codeSignIdentities" + }, + "systemCapabilities": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/systemCapabilities" + }, + "entitlements": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/entitlements" + }, + "runScheme": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/runScheme" + }, + "sdk": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/sdk" + }, + "testFlightId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/testFlightId" + }, + "firebaseId": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/firebaseId" + }, + "exportOptions": { + "$ref": "#/definitions/zodPlatformsSchema/properties/ios/properties/buildSchemes/additionalProperties/properties/exportOptions" + } + }, + "additionalProperties": false + }, + "zodPlatformBaseFragment": { + "type": "object", + "properties": { + "extendPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/extendPlatform" + }, + "assetFolderPlatform": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/assetFolderPlatform" + }, + "engine": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/engine" + }, + "entryFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/entryFile" + }, + "bundleAssets": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleAssets" + }, + "enableSourceMaps": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/enableSourceMaps" + }, + "bundleIsDev": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/bundleIsDev" + }, + "getJsBundleFile": { + "$ref": "#/definitions/zodCommonSchema/properties/buildSchemes/additionalProperties/properties/getJsBundleFile" + } + }, + "additionalProperties": false + }, + "zodPlatformLightningFragment": { + "type": "object", + "properties": { + "target": { + "type": "string" + } + }, + "additionalProperties": false + }, + "zodPlatformNextJsFragment": { + "type": "object", + "properties": { + "pagesDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/pagesDir" + }, + "outputDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/outputDir" + }, + "exportDir": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/exportDir" + }, + "nextTranspileModules": { + "$ref": "#/definitions/zodPlatformsSchema/properties/web/properties/buildSchemes/additionalProperties/properties/nextTranspileModules" + } + }, + "additionalProperties": false + }, + "zodPlatformWebFragment": { + "type": "object", + "properties": { + "timestampBuildFiles": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/timestampBuildFiles" + }, + "devServerHost": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/devServerHost" + }, + "environment": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/environment" + } + }, + "additionalProperties": false + }, + "zodPlatformTizenFragment": { + "type": "object", + "properties": { + "package": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/package" + }, + "certificateProfile": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/certificateProfile" + }, + "appName": { + "$ref": "#/definitions/zodPlatformsSchema/properties/tizen/properties/buildSchemes/additionalProperties/properties/appName" + } + }, + "additionalProperties": false + }, + "zodPlatformReactNativeFragment": { + "type": "object", + "properties": { + "reactNativeEngine": { + "$ref": "#/definitions/zodPlatformsSchema/properties/android/properties/buildSchemes/additionalProperties/properties/reactNativeEngine" + } + }, + "additionalProperties": false + }, + "zodPlatformWindowsFragment": { + "type": "object", + "properties": { + "templateVSProject": { + "$ref": "#/definitions/zodPlatformsSchema/properties/windows/properties/buildSchemes/additionalProperties/properties/templateVSProject" + } + }, + "additionalProperties": false + }, + "zodManifestChildBase": { + "type": "object", + "properties": { + "tag": { + "type": "string" + }, + "android:name": { + "type": "string" + }, + "android:required": { + "type": "boolean" + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false + }, + "zodManifestChildWithChildren": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name", + "children" + ], + "additionalProperties": false + }, + "zodAndroidManifest": { + "type": "object", + "properties": { + "tag": { + "$ref": "#/definitions/zodManifestChildBase/properties/tag" + }, + "android:name": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:name" + }, + "android:required": { + "$ref": "#/definitions/zodManifestChildBase/properties/android:required" + }, + "package": { + "type": "string" + }, + "children": { + "type": "array", + "items": { + "$ref": "#/definitions/zodManifestChildWithChildren" + } + } + }, + "required": [ + "tag", + "android:name" + ], + "additionalProperties": false, + "description": "Allows you to directly manipulate `AndroidManifest.xml` via json override mechanism\nInjects / Overrides values in AndroidManifest.xml file of generated android based project\n> IMPORTANT: always ensure that your object contains `tag` and `android:name` to target correct tag to merge into\n " + }, + "zodTemplateAndroidFragment": { + "type": "object", + "properties": { + "templateAndroid": { + "$ref": "#/definitions/zodPluginSchema/properties/android/properties/templateAndroid" + } + }, + "additionalProperties": false, + "description": "Allows more advanced modifications to Android based project template" + }, + "zodAppDelegateMethod": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "order": { + "type": "number" + }, + "value": { + "type": "string" + }, + "weight": { + "type": "number" + } }, + "required": [ + "order", + "value", + "weight" + ], + "additionalProperties": false + } + ] + }, + "zodTemplateXcodeFragment": { + "type": "object", + "properties": { + "templateXcode": { + "$ref": "#/definitions/zodPluginSchema/properties/ios/properties/templateXcode" + } + }, + "additionalProperties": false + }, + "zodPlatformElectronFragment": { + "type": "object", + "properties": { + "electronConfig": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/electronConfig" + }, + "BrowserWindow": { + "$ref": "#/definitions/zodPlatformsSchema/properties/macos/properties/buildSchemes/additionalProperties/properties/BrowserWindow" + } + }, + "additionalProperties": false + }, + "zodPlatformWebOSFragment": { + "type": "object", + "properties": { + "iconColor": { + "$ref": "#/definitions/zodPlatformsSchema/properties/webos/properties/buildSchemes/additionalProperties/properties/iconColor" + } + }, + "additionalProperties": false + }, + "rnv.workspace": { + "type": "object", + "properties": { + "defaultTargets": { + "$ref": "#/definitions/zodDefaultTargets", "description": "Define targets to be used when -t is not set on any project run" }, "sdks": { @@ -56,22 +3321,7 @@ "description": "Define your sdk configurations" }, "projectTemplates": { - "type": "object", - "additionalProperties": { - "type": "object", - "properties": { - "packageName": { - "type": "string" - }, - "description": { - "type": "string" - }, - "localPath": { - "type": "string" - } - }, - "additionalProperties": false - } + "$ref": "#/definitions/zodProjectTemplates" }, "disableTelemetry": { "type": "boolean", diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c047f4c598..344857aea3 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -37,19 +37,7 @@ export * from './tasks/taskCreator'; export * from './schema/defaults'; export * from './schema/schemaManager'; export * from './schema/validators'; -export * from './schema/configFiles/app'; -export * from './schema/configFiles/engine'; -export * from './schema/configFiles/integration'; -export * from './schema/configFiles/local'; -export * from './schema/configFiles/overrides'; -export * from './schema/configFiles/plugin'; -export * from './schema/configFiles/private'; -export * from './schema/configFiles/project'; -export * from './schema/configFiles/runtime'; -export * from './schema/configFiles/template'; -export * from './schema/configFiles/templates'; -export * from './schema/configFiles/workspace'; -export * from './schema/configFiles/workspaces'; +export * from './schema'; export * from './engines'; export * from './engines/creator'; diff --git a/packages/core/src/schema/configFiles/root.ts b/packages/core/src/schema/configFiles/root.ts new file mode 100644 index 0000000000..8eaa5fb0df --- /dev/null +++ b/packages/core/src/schema/configFiles/root.ts @@ -0,0 +1,28 @@ +import { AnyZodObject, z } from 'zod'; +import { zodRootAppBaseFragment } from './app'; +import { zodConfigFileProject } from './project'; +import { zodConfigFileLocal } from './local'; +import { zodConfigFileTemplate } from './template'; +import { zodConfigFileWorkspace } from './workspace'; +import { zodConfigFileWorkspaces } from './workspaces'; +import { zodConfigFileTemplates } from './templates'; +import { zodConfigFileOverrides } from './overrides'; +import { zodConfigFileIntergation } from './integration'; +import { zodConfigFileEngine } from './engine'; +import { zodConfigFilePlugin } from './plugin'; +import { zodConfigFilePrivate } from './private'; + +export const zodConfigFileRoot: AnyZodObject = z.object({ + app: zodRootAppBaseFragment, + project: zodConfigFileProject, + local: zodConfigFileLocal, + overrides: zodConfigFileOverrides, + integration: zodConfigFileIntergation, + engine: zodConfigFileEngine, + plugin: zodConfigFilePlugin, + private: zodConfigFilePrivate, + template: zodConfigFileTemplate, + configTemplates: zodConfigFileTemplates, + workspace: zodConfigFileWorkspace, + workspaces: zodConfigFileWorkspaces, +}); diff --git a/packages/core/src/schema/index.ts b/packages/core/src/schema/index.ts new file mode 100644 index 0000000000..10bbffbbb4 --- /dev/null +++ b/packages/core/src/schema/index.ts @@ -0,0 +1,76 @@ +import * as _shared from './shared'; +import * as _common from './common'; +import * as _plugins from './plugins'; +import * as _base from './plugins/fragments/base'; +import * as _pAndroid from './plugins/fragments/platformAndroid'; +import * as _pIos from './plugins/fragments/platformIos'; +import * as _pBase from './plugins/fragments/platformBase'; +import * as _platforms from './platforms'; +import * as _platformsFragmentsAndroid from './platforms/fragments/android'; +import * as _platformsFragmentsIos from './platforms/fragments/ios'; +import * as _platformsFragmentsBase from './platforms/fragments/base'; +import * as _platformsFragmentsLightning from './platforms/fragments/lightning'; +import * as _platformsFragmentsNextJs from './platforms/fragments/nextjs'; +import * as _platformsFragmentsWeb from './platforms/fragments/web'; +import * as _platformsFragmentsTizen from './platforms/fragments/tizen'; +import * as _platformsFragmentsReactNative from './platforms/fragments/reactNative'; +import * as _platformsFragmentsWindows from './platforms/fragments/windows'; +import * as _platformsFragmentsTemplateAndroid from './platforms/fragments/templateAndroid'; +import * as _platformsFragmentsTemplateXcode from './platforms/fragments/templateXcode'; +import * as _platformsFragmentsElectron from './platforms/fragments/electron'; +import * as _platformsFragmentsWebos from './platforms/fragments/webos'; +import * as _app from './configFiles/app'; +import * as _engine from './configFiles/engine'; +import * as _integration from './configFiles/integration'; +import * as _local from './configFiles/local'; +import * as _overrides from './configFiles/overrides'; +import * as _plugin from './configFiles/plugin'; +import * as _private from './configFiles/private'; +import * as _project from './configFiles/project'; +import * as _root from './configFiles/root'; +import * as _runtime from './configFiles/runtime'; +import * as _template from './configFiles/template'; +import * as _templates from './configFiles/templates'; +import * as _workspace from './configFiles/workspace'; +import * as _workspaces from './configFiles/workspaces'; + +export const ZodFileSchema = { + ..._app, + ..._engine, + ..._integration, + ..._local, + ..._overrides, + ..._plugin, + ..._private, + ..._project, + ..._root, + ..._runtime, + ..._template, + ..._templates, + ..._workspace, + ..._workspaces, +}; + +export const ZodSharedSchema = { + ..._shared, + ..._common, + ..._plugins, + ..._base, + ..._pAndroid, + ..._pIos, + ..._pBase, + ..._platforms, + ..._platformsFragmentsAndroid, + ..._platformsFragmentsIos, + ..._platformsFragmentsBase, + ..._platformsFragmentsLightning, + ..._platformsFragmentsNextJs, + ..._platformsFragmentsWeb, + ..._platformsFragmentsTizen, + ..._platformsFragmentsReactNative, + ..._platformsFragmentsWindows, + ..._platformsFragmentsTemplateAndroid, + ..._platformsFragmentsTemplateXcode, + ..._platformsFragmentsElectron, + ..._platformsFragmentsWebos, +}; diff --git a/packages/core/src/tasks/taskHelpers.ts b/packages/core/src/tasks/taskHelpers.ts index e21653f630..48567a0682 100644 --- a/packages/core/src/tasks/taskHelpers.ts +++ b/packages/core/src/tasks/taskHelpers.ts @@ -72,7 +72,7 @@ export const generateRnvTaskMap = ( taskArr.forEach((taskBlueprint) => { const taskInstance = { ...taskBlueprint }; const plts = taskInstance.platforms || []; - const key = `${config.name}:${plts.join('-')}:${taskInstance.task}`; + const key = `${ownerID}:${plts.join('-')}:${taskInstance.task}`; taskInstance.ownerID = ownerID; taskInstance.key = key; tasks[key] = taskInstance; diff --git a/packages/engine-rn-tvos/renative.engine.json b/packages/engine-rn-tvos/renative.engine.json index 6a44aace50..d4880b1325 100644 --- a/packages/engine-rn-tvos/renative.engine.json +++ b/packages/engine-rn-tvos/renative.engine.json @@ -3,7 +3,6 @@ "id": "engine-rn-tvos", "packageName": "@rnv/engine-rn-tvos", "engineExtension": "rntvos", - "extends": "engine-rn", "overview": "React native based engine with added support for tvOS platform. Runs standard react native apps with native support", "plugins": { "react": "source:rnv", From d195b86d413733b31f4077ec2ae8bfba19919ad4 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 10:23:51 +0200 Subject: [PATCH 172/175] update axios refs --- packages/config-templates/renative.templates.json | 2 +- packages/engine-rn-web/src/tasks/__tests__/run.test.ts | 1 - packages/sdk-react-native/src/common.ts | 3 +-- packages/sdk-telemetry/package.json | 1 + packages/sdk-utils/package.json | 3 ++- packages/sdk-utils/src/axiosUtils.ts | 3 +++ packages/sdk-utils/src/index.ts | 1 + packages/sdk-webpack/package.json | 1 - packages/sdk-webpack/src/index.ts | 10 ++++++++-- 9 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 packages/sdk-utils/src/axiosUtils.ts diff --git a/packages/config-templates/renative.templates.json b/packages/config-templates/renative.templates.json index 04875fb05b..45ffbd9abb 100644 --- a/packages/config-templates/renative.templates.json +++ b/packages/config-templates/renative.templates.json @@ -1062,7 +1062,7 @@ "version": "5.2.11" }, "aws-amplify": "4.3.13", - "axios": "0.24.0", + "axios": "1.6.0", "crashlytics": { "android": { "mainActivity": { diff --git a/packages/engine-rn-web/src/tasks/__tests__/run.test.ts b/packages/engine-rn-web/src/tasks/__tests__/run.test.ts index 6927853603..16b44516bf 100644 --- a/packages/engine-rn-web/src/tasks/__tests__/run.test.ts +++ b/packages/engine-rn-web/src/tasks/__tests__/run.test.ts @@ -5,7 +5,6 @@ import { runTizen } from '@rnv/sdk-tizen'; jest.mock('fs'); jest.mock('path'); -jest.mock('axios'); jest.mock('@rnv/core'); jest.mock('process'); jest.mock('@rnv/sdk-webpack'); diff --git a/packages/sdk-react-native/src/common.ts b/packages/sdk-react-native/src/common.ts index 6e8f5c45a7..23227c111c 100644 --- a/packages/sdk-react-native/src/common.ts +++ b/packages/sdk-react-native/src/common.ts @@ -1,5 +1,4 @@ import path from 'path'; -import axios from 'axios'; import { logDefault, executeTask, @@ -12,7 +11,7 @@ import { RnvTaskName, getContext, } from '@rnv/core'; -import { confirmActiveBundler } from '@rnv/sdk-utils'; +import { confirmActiveBundler, axios } from '@rnv/sdk-utils'; let keepRNVRunning = false; diff --git a/packages/sdk-telemetry/package.json b/packages/sdk-telemetry/package.json index c5c99449be..94d4af2569 100644 --- a/packages/sdk-telemetry/package.json +++ b/packages/sdk-telemetry/package.json @@ -29,6 +29,7 @@ "watch": "tsc --watch --preserveWatchOutput" }, "dependencies": { + "@rnv/sdk-utils": "1.0.0-rc.12", "@sentry/integrations": "7.57.0", "@sentry/node": "7.57.0", "node-machine-id": "^1.1.12" diff --git a/packages/sdk-utils/package.json b/packages/sdk-utils/package.json index 9356572456..eabde32873 100644 --- a/packages/sdk-utils/package.json +++ b/packages/sdk-utils/package.json @@ -34,7 +34,8 @@ "color-string": "1.9.0", "detect-port": "1.3.0", "ip": "2.0.1", - "kill-port": "1.6.1" + "kill-port": "1.6.1", + "axios": "1.6.0" }, "peerDependencies": { "@rnv/core": "^1.0.0-rc.12" diff --git a/packages/sdk-utils/src/axiosUtils.ts b/packages/sdk-utils/src/axiosUtils.ts new file mode 100644 index 0000000000..ee67dcee19 --- /dev/null +++ b/packages/sdk-utils/src/axiosUtils.ts @@ -0,0 +1,3 @@ +import axios from 'axios'; + +export { axios }; diff --git a/packages/sdk-utils/src/index.ts b/packages/sdk-utils/src/index.ts index 4b78d20dce..186e716a06 100644 --- a/packages/sdk-utils/src/index.ts +++ b/packages/sdk-utils/src/index.ts @@ -4,3 +4,4 @@ export * from './getConfigProps'; export * from './ipUtils'; export * from './utils'; export * from './target'; +export * from './axiosUtils'; diff --git a/packages/sdk-webpack/package.json b/packages/sdk-webpack/package.json index 405afdc056..1e4b36e998 100644 --- a/packages/sdk-webpack/package.json +++ b/packages/sdk-webpack/package.json @@ -33,7 +33,6 @@ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", "@rnv/sdk-utils": "1.0.0-rc.12", "@svgr/webpack": "6.3.1", - "axios": "1.6.0", "bfj": "^7.0.2", "browserslist": "^4.18.1", "camelcase": "^6.2.1", diff --git a/packages/sdk-webpack/src/index.ts b/packages/sdk-webpack/src/index.ts index 24e2de4286..079a456288 100644 --- a/packages/sdk-webpack/src/index.ts +++ b/packages/sdk-webpack/src/index.ts @@ -1,4 +1,3 @@ -import axios from 'axios'; import path from 'path'; import commandExists from 'command-exists'; import { @@ -23,7 +22,14 @@ import { Env, getContext, } from '@rnv/core'; -import { checkPortInUse, getDevServerHost, openBrowser, waitForHost, confirmActiveBundler } from '@rnv/sdk-utils'; +import { + checkPortInUse, + getDevServerHost, + openBrowser, + waitForHost, + confirmActiveBundler, + axios, +} from '@rnv/sdk-utils'; import { EnvVars } from './env'; import { withRNVWebpack } from './adapter'; export { withRNVWebpack }; From 7a4c926cc1efef7c032dac2df89f58c63d44669f Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 10:37:51 +0200 Subject: [PATCH 173/175] fix template hosted --- packages/core/src/projects/mutations.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core/src/projects/mutations.ts b/packages/core/src/projects/mutations.ts index 3ed035a509..2038788334 100644 --- a/packages/core/src/projects/mutations.ts +++ b/packages/core/src/projects/mutations.ts @@ -16,7 +16,10 @@ export const handleMutations = async () => { const ctx = getContext(); const mutations = ctx.mutations.pendingMutations; if (!mutations.length) return true; - logWarning('Updates to package.json are required:'); + const isTemplate = ctx.buildConfig?.isTemplate; + logWarning( + `Updates to package.json are required:${isTemplate ? ' (only info. skipping due to template mode)' : ''}` + ); let msg = ''; mutations.forEach((m) => { msg += `- ${chalk().bold(m.name)} (${chalk().red(m.original?.version || 'N/A')}) => (${chalk().green( @@ -24,9 +27,7 @@ export const handleMutations = async () => { )}) ${chalk().gray(`${m.msg} | ${m.source}`)}\n`; }); logRaw(msg); - const isTemplate = ctx.buildConfig?.isTemplate; - - if (isTemplate) return true; + if (isTemplate) return false; //Check with user const choices = [ 'Update package and install (recommended)', From cc794417b2f018bac459f35e412053c63518c13e Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 10:55:15 +0200 Subject: [PATCH 174/175] fix double window opening in hosted mode --- packages/core/src/index.ts | 2 +- .../core/src/tasks/{taskCreator.ts => creators.ts} | 4 ++++ packages/engine-rn-web/src/tasks/taskStart.ts | 12 +++--------- packages/sdk-apple/src/index.ts | 1 - 4 files changed, 8 insertions(+), 11 deletions(-) rename packages/core/src/tasks/{taskCreator.ts => creators.ts} (80%) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 344857aea3..2bbdbdcfb9 100755 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -32,7 +32,7 @@ export * from './tasks/taskExecutors'; export * from './tasks/taskHelpers'; export * from './tasks/taskRegistry'; export * from './tasks/constants'; -export * from './tasks/taskCreator'; +export * from './tasks/creators'; export * from './schema/defaults'; export * from './schema/schemaManager'; diff --git a/packages/core/src/tasks/taskCreator.ts b/packages/core/src/tasks/creators.ts similarity index 80% rename from packages/core/src/tasks/taskCreator.ts rename to packages/core/src/tasks/creators.ts index cdcfde97a0..92fe806375 100644 --- a/packages/core/src/tasks/taskCreator.ts +++ b/packages/core/src/tasks/creators.ts @@ -5,3 +5,7 @@ export const createTask = (task: CreateRnvTaskOpt) => return response; }; + +export const createTaskOptionsMap = () => { + // TODO +}; diff --git a/packages/engine-rn-web/src/tasks/taskStart.ts b/packages/engine-rn-web/src/tasks/taskStart.ts index 42c9a2d9b1..58c6b6d962 100644 --- a/packages/engine-rn-web/src/tasks/taskStart.ts +++ b/packages/engine-rn-web/src/tasks/taskStart.ts @@ -1,21 +1,15 @@ import { runWebpackServer } from '@rnv/sdk-webpack'; -import { getConfigProp, logError, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; -import { REMOTE_DEBUGGER_ENABLED_PLATFORMS, openBrowser, waitForHost } from '@rnv/sdk-utils'; +import { getConfigProp, RnvTaskOptionPresets, createTask, RnvTaskName } from '@rnv/core'; +import { REMOTE_DEBUGGER_ENABLED_PLATFORMS } from '@rnv/sdk-utils'; import { EnginePlatforms } from '../constants'; export default createTask({ description: 'Starts bundler / server', dependsOn: [RnvTaskName.configure], fn: async ({ ctx }) => { - const { platform, runtime, program } = ctx; - const { port, localhost } = runtime; + const { platform, program } = ctx; const { hosted } = program.opts(); - if (hosted) { - waitForHost('') - .then(() => openBrowser(`http://${localhost}:${port}/`)) - .catch(logError); - } const bundleAssets = getConfigProp('bundleAssets'); const isWeinreEnabled = (platform && REMOTE_DEBUGGER_ENABLED_PLATFORMS.includes(platform) && !bundleAssets && !hosted) || undefined; diff --git a/packages/sdk-apple/src/index.ts b/packages/sdk-apple/src/index.ts index cf040ae9c3..17542acbf6 100644 --- a/packages/sdk-apple/src/index.ts +++ b/packages/sdk-apple/src/index.ts @@ -15,7 +15,6 @@ import taskConfigure from './tasks/taskConfigure'; import taskRun from './tasks/taskRun'; import taskBuild from './tasks/taskBuild'; import { GetContextType, createRnvSDK } from '@rnv/core'; -// import { bookla } from './runner2'; export const Tasks = [ taskTargetLaunch, From d5afffb1c1b78f7940b21c1c314f4df63fad3c06 Mon Sep 17 00:00:00 2001 From: Pavel Jacko Date: Wed, 3 Apr 2024 11:03:54 +0200 Subject: [PATCH 175/175] fix typos --- .../src/tasks/bootstrap/questionHelpers.ts | 6 +-- .../bootstrap/questions/applyTemplate.ts | 2 +- .../bootstrap/questions/bookmarkTemplate.ts | 16 +++---- .../bootstrap/questions/installTemplate.ts | 42 +++++++++---------- .../bootstrap/questions/supportedPlatforms.ts | 2 +- .../engine-core/src/tasks/bootstrap/types.ts | 2 +- 6 files changed, 34 insertions(+), 36 deletions(-) diff --git a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts index 3ec24482f3..cf0c2ec536 100644 --- a/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts +++ b/packages/engine-core/src/tasks/bootstrap/questionHelpers.ts @@ -158,7 +158,7 @@ export const telemetryNewProject = async (data: NewProjectData) => { const { inputs } = data; getApi().analytics.captureEvent({ type: 'newProject', - template: inputs.tepmplate?.packageName, + template: inputs.template?.packageName, platforms: inputs.supportedPlatforms, }); } catch (e) { @@ -169,8 +169,8 @@ export const telemetryNewProject = async (data: NewProjectData) => { export const generateProjectOverview = (data: NewProjectData) => { const { inputs } = data; - // const addon = inputs.tepmplate?.localPath ? ` ${chalk().gray(inputs.tepmplate?.localPath)}` : ''; - const tempString = inputs.tepmplate?.localPath || `${inputs.tepmplate?.packageName}@${inputs.tepmplate?.version}`; + // const addon = inputs.template?.localPath ? ` ${chalk().gray(inputs.template?.localPath)}` : ''; + const tempString = inputs.template?.localPath || `${inputs.template?.packageName}@${inputs.template?.version}`; const highlight = chalk().bold; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts index 13bba5f201..5c4257e2b6 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/applyTemplate.ts @@ -5,7 +5,7 @@ const Question = async (data: NewProjectData): Promise => { const c = getContext(); const { inputs, files } = data; - const tplName = inputs.tepmplate?.packageName; + const tplName = inputs.template?.packageName; if (!tplName) { return Promise.reject('Template not selected'); } diff --git a/packages/engine-core/src/tasks/bootstrap/questions/bookmarkTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/bookmarkTemplate.ts index a575004880..641416f77d 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/bookmarkTemplate.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/bookmarkTemplate.ts @@ -6,7 +6,7 @@ const Question = async (data: NewProjectData) => { const { inputs } = data; - if (!inputs.tepmplate?.packageName) { + if (!inputs.template?.packageName) { return Promise.reject('Template not selected'); } @@ -17,13 +17,13 @@ const Question = async (data: NewProjectData) => { const allKeys = Object.keys(projTemplates); if ( - (!allKeys.includes(inputs.tepmplate.packageName) || !!inputs.tepmplate.localPath) && - inputs.tepmplate.type !== 'existing' + (!allKeys.includes(inputs.template.packageName) || !!inputs.template.localPath) && + inputs.template.type !== 'existing' ) { const { confirmAddTemplate } = await inquirerPrompt({ name: 'confirmAddTemplate', type: 'confirm', - message: `Would you like to add ${chalk().bold(inputs.tepmplate.packageName)} to your ${ + message: `Would you like to add ${chalk().bold(inputs.template.packageName)} to your ${ inputs.workspaceID } workspace template list?`, }); @@ -31,7 +31,7 @@ const Question = async (data: NewProjectData) => { const { templateName } = await inquirerPrompt({ name: 'templateName', type: 'input', - default: `${inputs.tepmplate.packageName} (local)`, + default: `${inputs.template.packageName} (local)`, validate: (v) => !allKeys.includes(v) || 'Name already exists', message: 'Add short description', }); @@ -42,9 +42,9 @@ const Question = async (data: NewProjectData) => { configFile.projectTemplates = {}; } configFile.projectTemplates[templateName] = { - packageName: inputs.tepmplate.packageName, - localPath: inputs.tepmplate.localPath, - description: inputs.tepmplate.description, + packageName: inputs.template.packageName, + localPath: inputs.template.localPath, + description: inputs.template.description, }; writeFileSync(c.paths.workspace.config, configFile); diff --git a/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts b/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts index eb4573a8c8..2e36ac7264 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/installTemplate.ts @@ -58,10 +58,10 @@ const Question = async (data: NewProjectData) => { options.push(noTemplate); let localTemplatePath: string | undefined; - inputs.tepmplate = {}; + inputs.template = {}; if (checkInputValue(projectTemplate)) { - inputs.tepmplate.packageName = projectTemplate; + inputs.template.packageName = projectTemplate; } else { const iRes = await inquirerPrompt({ name: 'inputTemplate', @@ -72,7 +72,7 @@ const Question = async (data: NewProjectData) => { choices: options, }); const result: TemplateOption['value'] = iRes.inputTemplate; - inputs.tepmplate.type = result.type; + inputs.template.type = result.type; if (result.type === 'custom') { const { inputTemplateCustom } = await inquirerPrompt({ @@ -80,7 +80,7 @@ const Question = async (data: NewProjectData) => { type: 'input', message: 'NPM package name:', }); - inputs.tepmplate.packageName = inputTemplateCustom; + inputs.template.packageName = inputTemplateCustom; } else if (result.type === 'local') { const { inputTemplateLocal } = await inquirerPrompt({ name: 'inputTemplateLocal', @@ -95,7 +95,7 @@ const Question = async (data: NewProjectData) => { if (result.localPath) { localTemplatePath = result.localPath; } else { - inputs.tepmplate.packageName = result.packageName; + inputs.template.packageName = result.packageName; } } } @@ -117,11 +117,11 @@ const Question = async (data: NewProjectData) => { return Promise.reject(`Invalid package ${localTemplatePkgPath} missing name field`); } - inputs.tepmplate.packageName = pkg.name; - inputs.tepmplate.version = pkg.version; - inputs.tepmplate.localPath = localTemplatePath; + inputs.template.packageName = pkg.name; + inputs.template.version = pkg.version; + inputs.template.localPath = localTemplatePath; - if (!inputs.tepmplate) return; + if (!inputs.template) return; const nmTemplatePath = path.join(nmDir, pkg?.name); @@ -152,19 +152,19 @@ const Question = async (data: NewProjectData) => { } }); - if (!inputs.tepmplate.packageName) { + if (!inputs.template.packageName) { return; } // NOTE: this is a workaround for npm/yarn bug where manually added packages are overriden on next install - const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${inputs.tepmplate.packageName}`; + const filePath = `file:${RnvFolderName.dotRnv}/${RnvFolderName.npmCache}/${inputs.template.packageName}`; files.project.packageJson = merge(files.project.packageJson, { devDependencies: { - [inputs.tepmplate?.packageName]: filePath, + [inputs.template?.packageName]: filePath, }, }); files.project.renativeConfig = merge(files.project.renativeConfig, { templates: { - [inputs.tepmplate.packageName]: { + [inputs.template.packageName]: { version: filePath, }, }, @@ -175,15 +175,13 @@ const Question = async (data: NewProjectData) => { }); } else { if (checkInputValue(templateVersion)) { - inputs.tepmplate.version = templateVersion; + inputs.template.version = templateVersion; } else { - inputs.tepmplate.version = await listAndSelectNpmVersion(inputs.tepmplate.packageName || ''); + inputs.template.version = await listAndSelectNpmVersion(inputs.template.packageName || ''); } await executeAsync( - `${isYarnInstalled() ? 'yarn' : 'npm'} add ${inputs.tepmplate.packageName}@${ - inputs.tepmplate.version - } --dev`, + `${isYarnInstalled() ? 'yarn' : 'npm'} add ${inputs.template.packageName}@${inputs.template.version} --dev`, { cwd: c.paths.project.dir, } @@ -191,18 +189,18 @@ const Question = async (data: NewProjectData) => { // Check if node_modules folder exists if (!fsExistsSync(nmDir)) { return Promise.reject( - `${isYarnInstalled() ? 'yarn' : 'npm'} add ${inputs.tepmplate.packageName}@${ - inputs.tepmplate.version + `${isYarnInstalled() ? 'yarn' : 'npm'} add ${inputs.template.packageName}@${ + inputs.template.version } : FAILED. this could happen if you have package.json accidentally created somewhere in parent directory` ); } } - if (!inputs.tepmplate.packageName) { + if (!inputs.template.packageName) { return; } - const templateDir = path.join(c.paths.project.dir, 'node_modules', inputs.tepmplate.packageName); + const templateDir = path.join(c.paths.project.dir, 'node_modules', inputs.template.packageName); const renativeTemplateConfig = readObjectSync(path.join(templateDir, RnvFileName.renativeTemplate)) || {}; diff --git a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts index 3a8bcc28bf..fece6d12a9 100644 --- a/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts +++ b/packages/engine-core/src/tasks/bootstrap/questions/supportedPlatforms.ts @@ -53,7 +53,7 @@ const Question = async (data: NewProjectData) => { if (supportedPlatforms.length === 0) { logError( - `Template ${inputs.tepmplate?.packageName} does not seem to export any default platforms to support. contact the author.` + `Template ${inputs.template?.packageName} does not seem to export any default platforms to support. contact the author.` ); } diff --git a/packages/engine-core/src/tasks/bootstrap/types.ts b/packages/engine-core/src/tasks/bootstrap/types.ts index 0a90671899..79024f8763 100644 --- a/packages/engine-core/src/tasks/bootstrap/types.ts +++ b/packages/engine-core/src/tasks/bootstrap/types.ts @@ -28,7 +28,7 @@ export type NewProjectData = { appTitle?: string; workspaceID?: string; packageName?: string; - tepmplate?: TemplateOptionValue; + template?: TemplateOptionValue; supportedPlatforms?: Array; }; files: {