Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
await fse.writeFile(path.resolve('app.json'), JSON.stringify(appJson, null, 2));
log(chalk.green('Wrote to app.json, please update it manually in the future.'));
// This is validated later...
let defaultDependencies: any = {};
let defaultDevDependencies: any = {};
/**
* Extract the template and copy it over
*/
try {
const tempDir = temporary.directory();
await Exp.extractTemplateAppAsync(templateSpec, tempDir, appJson);
fse.copySync(path.join(tempDir, 'ios'), path.join(projectRoot, 'ios'));
fse.copySync(path.join(tempDir, 'android'), path.join(projectRoot, 'android'));
const { dependencies, devDependencies } = JsonFile.read(path.join(tempDir, 'package.json'));
defaultDependencies = ensureDependenciesMap(dependencies);
defaultDevDependencies = devDependencies;
log('Successfully copied template native code.');
} catch (e) {
log(chalk.red(e.message));
log(chalk.red(`Eject failed, see above output for any issues.`));
log(chalk.yellow('You may want to delete the `ios` and/or `android` directories.'));
process.exit(1);
}
log(`Updating your package.json...`);
if (!pkg.scripts) {
pkg.scripts = {};
}
delete pkg.scripts.eject;
pkg.scripts.start = 'react-native start';
function evalConfig(configFile: string, request: ConfigContext): Partial {
let result: any;
let format: string = '';
if (configFile.endsWith('.json5') || configFile.endsWith('.json')) {
format = 'json';
result = JsonFile.read(configFile, { json5: true });
} else {
format = 'js';
result = require(configFile);
if (result.default != null) {
result = result.default;
}
if (typeof result === 'function') {
result = result(request);
}
}
/*
} else if (configFile.endsWith('.ts')) {
format = 'ts';
const ts = require('typescript');
// const ts = require(projectHasModule('typescript', request.projectRoot, {})!);
const tsconfig = require(projectHasModule('./tsconfig', request.projectRoot, {})!);
export function getExpoSDKVersion(
projectRoot: string,
exp: Pick
): string {
if (exp && exp.sdkVersion) {
return exp.sdkVersion;
}
const packageJsonPath = projectHasModule('expo/package.json', projectRoot, exp);
if (packageJsonPath) {
const expoPackageJson = JsonFile.read(packageJsonPath, { json5: true });
const { version: packageVersion } = expoPackageJson;
if (typeof packageVersion === 'string') {
const majorVersion = packageVersion.split('.').shift();
return `${majorVersion}.0.0`;
}
}
throw new ConfigError(
`Cannot determine which native SDK version your project uses because the module \`expo\` is not installed. Please install it with \`yarn add expo\` and try again.`,
'MODULE_NOT_FOUND'
);
}
export function readConfigJson(
projectRoot: string,
skipValidation: boolean = false,
skipNativeValidation: boolean = false
): ProjectConfig {
const { configPath } = findConfigFile(projectRoot);
let rawConfig: JSONObject | null = null;
try {
rawConfig = JsonFile.read(configPath, { json5: true });
} catch (_) {}
const { rootConfig, exp } = parseAndValidateRootConfig(rawConfig, skipValidation);
const packageJsonPath = getRootPackageJsonPath(projectRoot, exp);
const pkg = JsonFile.read(packageJsonPath);
return {
...ensureConfigHasDefaultValues(projectRoot, exp, pkg, skipNativeValidation),
rootConfig: rootConfig as AppJSONConfig,
};
}
export function readConfigJson(
projectRoot: string,
skipValidation: boolean = false,
skipNativeValidation: boolean = false
): ProjectConfig {
const { configPath } = findConfigFile(projectRoot);
let rawConfig: JSONObject | null = null;
try {
rawConfig = JsonFile.read(configPath, { json5: true });
} catch (_) {}
const { rootConfig, exp } = parseAndValidateRootConfig(rawConfig, skipValidation);
const packageJsonPath = getRootPackageJsonPath(projectRoot, exp);
const pkg = JsonFile.read(packageJsonPath);
return {
...ensureConfigHasDefaultValues(projectRoot, exp, pkg, skipNativeValidation),
rootConfig: rootConfig as AppJSONConfig,
};
}
export function createEnvironmentConstants(appManifest: ExpoConfig, pwaManifestLocation: string) {
let web;
try {
web = JsonFile.read(pwaManifestLocation);
} catch (e) {
web = {};
}
return {
...appManifest,
name: appManifest.displayName || appManifest.name,
/**
* Omit app.json properties that get removed during the native turtle build
*
* `facebookScheme`
* `facebookAppId`
* `facebookDisplayName`
*/
facebookScheme: undefined,
facebookAppId: undefined,