Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
createImplDirectoryAndCopyCommonClasses (pathSpec: any, projectSpec: any, iosProject: any) {
const resourceDir = path.join(Platform.currentPlatformVersionPath, 'ern-api-impl-gen', 'resources', 'ios')
const outputDir = path.join(pathSpec.outputDir, projectSpec.projectName, API_IMPL_GROUP_NAME)
const requestHandlerConfigFile = 'RequestHandlerConfig.swift'
const requestHandlerProviderFile = 'RequestHandlerProvider.swift'
if (!shell.test('-e', outputDir)) {
shell.mkdir(outputDir)
}
shell.cp(path.join(resourceDir, requestHandlerConfigFile), outputDir)
shell.cp(path.join(resourceDir, requestHandlerProviderFile), outputDir)
iosProject.addSourceFile(path.join(API_IMPL_GROUP_NAME, requestHandlerConfigFile), null, iosProject.findPBXGroupKey({name: API_IMPL_GROUP_NAME}))
iosProject.addSourceFile(path.join(API_IMPL_GROUP_NAME, requestHandlerProviderFile), null, iosProject.findPBXGroupKey({name: API_IMPL_GROUP_NAME}))
return {outputDir, resourceDir}
}
}
static createImplDirectoryAndCopyCommonClasses (paths) {
const outputDir = path.join(paths.outDirectory, 'android', 'lib', SRC_MAIN_JAVA_DIR, API_IMPL_PACKAGE)
if (!fs.existsSync(outputDir)) {
shell.mkdir('-p', outputDir)
}
const resourceDir = path.join(Platform.currentPlatformVersionPath, 'ern-api-impl-gen', 'resources', 'android')
shell.cp(path.join(resourceDir, 'RequestHandlerConfig.java'), outputDir)
shell.cp(path.join(resourceDir, 'RequestHandlerProvider.java'), outputDir)
return {outputDir, resourceDir}
}
}
public async generate(config: RunnerGeneratorConfig): Promise {
let mustacheView: any = {}
mustacheView = configureMustacheView(config, mustacheView)
shell.cp('-R', path.join(runnerHullPath, '*'), config.outDir)
shell.mv(
path.join(config.outDir, 'app/src/main/java/com/walmartlabs/ern/miniapp'),
path.join(config.outDir, 'app/src/main/java', getPackageFilePath(config))
)
const files = readDir(
config.outDir,
f => !f.endsWith('.jar') && !f.endsWith('.png')
)
for (const file of files) {
await mustacheUtils.mustacheRenderToOutputFileUsingTemplateFile(
path.join(config.outDir, file),
mustacheView,
path.join(config.outDir, file)
)
}
}
}
const iOSPluginHook = pluginConfig.ios.pluginHook
if (iOSPluginHook?.name) {
if (!pluginConfig.path) {
throw new Error('No plugin config path was set. Cannot proceed.')
}
const pluginConfigPath = pluginConfig.path
const pathToCopyPluginHooksTo = path.join(outDir, 'ElectrodeContainer')
log.debug(`Adding ${iOSPluginHook.name}.h`)
const pathToPluginHookHeader = path.join(
pluginConfigPath,
`${iOSPluginHook.name}.h`
)
shell.cp(pathToPluginHookHeader, pathToCopyPluginHooksTo)
containerIosProject.addHeaderFile(
`${iOSPluginHook.name}.h`,
{ public: true },
containerIosProject.findPBXGroupKey({ name: 'ElectrodeContainer' })
)
log.debug(`Adding ${iOSPluginHook.name}.m`)
const pathToPluginHookSource = path.join(
pluginConfigPath,
`${iOSPluginHook.name}.m`
)
shell.cp(pathToPluginHookSource, pathToCopyPluginHooksTo)
containerIosProject.addSourceFile(
`${iOSPluginHook.name}.m`,
null,
containerIosProject.findPBXGroupKey({ name: 'ElectrodeContainer' })
copyPluginToOutput (paths: Object, pluginOutputDirectory: string, pluginPath: PackagePath, pluginConfig: PluginConfig) {
log.debug(`injecting ${pluginPath.basePath} code.`)
const pluginSrcDirectory = path.join(paths.pluginsDownloadDirectory, 'node_modules', pluginPath.basePath, 'android', pluginConfig.android.moduleName, SRC_MAIN_JAVA_DIR, '*')
if (!fs.existsSync(pluginOutputDirectory)) {
shell.mkdir('-p', pluginOutputDirectory)
}
log.debug(`Copying code from ${pluginSrcDirectory} to ${pluginOutputDirectory}`)
shell.cp('-Rf', pluginSrcDirectory, pluginOutputDirectory)
}
const pathToPluginProject = path.join(
pluginSourcePath,
pluginConfig.android.root
)
shell.cd(pathToPluginProject)
const relPathToPluginSource = pluginConfig.android.moduleName
? path.join(pluginConfig.android.moduleName, 'src', 'main', 'java')
: path.join('src', 'main', 'java')
const absPathToCopyPluginSourceTo = path.join(
config.outDir,
'lib',
'src',
'main'
)
shell.cp('-R', relPathToPluginSource, absPathToCopyPluginSourceTo)
if (pluginConfig.android) {
if (pluginConfig.android.copy) {
handleCopyDirective(
pluginSourcePath,
config.outDir,
pluginConfig.android.copy
)
}
if (pluginConfig.android.dependencies) {
for (const dependency of pluginConfig.android.dependencies) {
log.debug(`Adding compile '${dependency}'`)
mustacheView.pluginCompile.push({
compileStatement: `compile '${dependency}'`,
})
archives androidSourcesJar
}
apply from: 'jcenter-publish.gradle'
`
)
fs.appendFileSync(
path.join(containerPath, 'build.gradle'),
`buildscript {
dependencies {
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
}
}`
)
shell.cp(
path.join(__dirname, 'supplements', 'jcenter-publish.gradle'),
path.join(containerPath, 'lib')
)
mustacheUtils.mustacheRenderToOutputFileUsingTemplateFile(
path.join(containerPath, 'lib', 'jcenter-publish.gradle'),
mustacheConfig,
path.join(containerPath, 'lib', 'jcenter-publish.gradle')
)
try {
log.info('[=== Starting build and jcenter publication ===]')
shell.pushd(containerPath)
await this.buildAndUploadArchive()
log.info('[=== Completed build and publication of the Container ===]')
log.info(
`[Artifact: ${extra.groupId}:${extra.artifactId}:${containerVersion} ]`
if (!pluginConfig.ios) {
log.warn(`${plugin.basePath} does not have any injection configuration for iOS`)
continue
}
let iOSPluginHook = pluginConfig.ios.pluginHook
if (iOSPluginHook && iOSPluginHook.name) {
if (!pluginConfig.path) {
throw new Error('No plugin config path was set. Cannot proceed.')
}
const pluginConfigPath = pluginConfig.path
const pathToCopyPluginHooksTo = path.join(outDir, 'ElectrodeContainer')
log.debug(`Adding ${iOSPluginHook.name}.h`)
const pathToPluginHookHeader = path.join(pluginConfigPath, `${iOSPluginHook.name}.h`)
shell.cp(pathToPluginHookHeader, pathToCopyPluginHooksTo)
containerIosProject.addHeaderFile(`${iOSPluginHook.name}.h`, { public: true }, containerIosProject.findPBXGroupKey({name: 'ElectrodeContainer'}))
log.debug(`Adding ${iOSPluginHook.name}.m`)
const pathToPluginHookSource = path.join(pluginConfigPath, `${iOSPluginHook.name}.m`)
shell.cp(pathToPluginHookSource, pathToCopyPluginHooksTo)
containerIosProject.addSourceFile(`${iOSPluginHook.name}.m`, null, containerIosProject.findPBXGroupKey({name: 'ElectrodeContainer'}))
}
}
log.debug('[=== iOS: Done adding plugin hook classes ===]')
} catch (e) {
log.error(`[addiOSPluginHookClasses] Something went wrong: ${e}`)
throw e
}
}
if (iOSPluginHook && iOSPluginHook.name) {
if (!pluginConfig.path) {
throw new Error('No plugin config path was set. Cannot proceed.')
}
const pluginConfigPath = pluginConfig.path
const pathToCopyPluginHooksTo = path.join(outDir, 'ElectrodeContainer')
log.debug(`Adding ${iOSPluginHook.name}.h`)
const pathToPluginHookHeader = path.join(pluginConfigPath, `${iOSPluginHook.name}.h`)
shell.cp(pathToPluginHookHeader, pathToCopyPluginHooksTo)
containerIosProject.addHeaderFile(`${iOSPluginHook.name}.h`, { public: true }, containerIosProject.findPBXGroupKey({name: 'ElectrodeContainer'}))
log.debug(`Adding ${iOSPluginHook.name}.m`)
const pathToPluginHookSource = path.join(pluginConfigPath, `${iOSPluginHook.name}.m`)
shell.cp(pathToPluginHookSource, pathToCopyPluginHooksTo)
containerIosProject.addSourceFile(`${iOSPluginHook.name}.m`, null, containerIosProject.findPBXGroupKey({name: 'ElectrodeContainer'}))
}
}
log.debug('[=== iOS: Done adding plugin hook classes ===]')
} catch (e) {
log.error(`[addiOSPluginHookClasses] Something went wrong: ${e}`)
throw e
}
}
} : {
reactNativeDevSupportEnabled?: boolean,
host?: string,
port?: string
} = {}) {
const mustacheView = {
miniAppName: mainMiniAppName,
pascalCaseMiniAppName: pascalCase(mainMiniAppName),
isReactNativeDevSupportEnabled: reactNativeDevSupportEnabled === true ? 'true' : 'false',
packagerHost: host,
packagerPort: port
}
const subPathToRunnerConfig = path.join('app', 'src', 'main', 'java', 'com', 'walmartlabs', 'ern', 'RunnerConfig.java')
const pathToRunnerConfigHull = path.join(runnerHullPath, 'android', subPathToRunnerConfig)
const pathToRunnerConfig = path.join(pathToRunnerProject, subPathToRunnerConfig)
shell.cp(pathToRunnerConfigHull, pathToRunnerConfig)
await mustacheUtils.mustacheRenderToOutputFileUsingTemplateFile(
pathToRunnerConfig, mustacheView, pathToRunnerConfig)
}