"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const chalk_1 = __importDefault(require("chalk"));
const yup = __importStar(require("yup"));
const paths_1 = require("./paths");
const getConfig_1 = __importDefault(require("./getConfig"));
const config_1 = require("./config");
const environmentSchema = yup.object({
config: yup.object().notRequired(),
locations: yup.object().notRequired(),
info: yup.boolean().default(false),
https: yup.boolean().default(false),
polyfill: yup.boolean().notRequired(),
removeUnusedImportExports: yup.boolean().default(false),
pwa: yup.boolean().notRequired(),
projectRoot: yup.string().required(),
mode: yup
.mixed()
.oneOf(['production', 'development', 'none']),
platform: yup
.mixed()
.oneOf(['ios', 'android', 'web'])
.default('web'),
});
const DEFAULT_REPORT = {
verbose: false,
path: 'web-report',
statsFilename: 'stats.json',
reportFilename: 'report.html',
};
const reportSchema = yup.object({
verbose: yup.boolean().default(DEFAULT_REPORT.verbose),
path: yup.string().default(DEFAULT_REPORT.path),
statsFilename: yup.string().default(DEFAULT_REPORT.statsFilename),
reportFilename: yup.string().default(DEFAULT_REPORT.reportFilename),
});
function validateReport(report) {
const reportConfig = config_1.enableWithPropertyOrConfig(report, DEFAULT_REPORT, true);
if (!reportConfig)
return null;
const filledReport = reportSchema.validateSync(reportConfig);
return filledReport;
}
exports.validateReport = validateReport;
function validateEnvironment(env) {
if (typeof env.projectRoot !== 'string') {
throw new Error(`@expo/webpack-config requires a valid projectRoot string value which points to the root of your project`);
}
warnEnvironmentDeprecation(env, true);
const filledEnv = environmentSchema.validateSync(env);
if (!env.locations) {
filledEnv.locations = paths_1.getPaths(env.projectRoot);
}
if (!env.config) {
filledEnv.config = getConfig_1.default(filledEnv);
}
if (typeof env.report !== 'undefined') {
filledEnv.report = validateReport(env.report);
}
return filledEnv;
}
exports.validateEnvironment = validateEnvironment;
let warned = {};
function shouldWarnDeprecated(config, key, warnOnce) {
return (!warnOnce || !(key in warned)) && typeof config[key] !== 'undefined';
}
function warnEnvironmentDeprecation(env, warnOnce = false) {
const warnings = {
production: 'Please use `mode: "production"` instead.',
development: 'Please use `mode: "development"` instead.',
polyfill: '',
};
for (const warning of Object.keys(warnings)) {
if (shouldWarnDeprecated(env, warning, warnOnce)) {
warned[warning] = true;
console.warn(chalk_1.default.bgYellow.black(`The environment property \`${warning}\` is deprecated. ${warnings[warning]}`.trim()));
}
}
}
exports.warnEnvironmentDeprecation = warnEnvironmentDeprecation;
function _resetWarnings() {
warned = {};
}
exports._resetWarnings = _resetWarnings;
//# sourceMappingURL=validate.js.map