UNPKG

react-native-integrate

Version:

Automate integration of additional code into React Native projects

118 lines (117 loc) 3.75 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.variables = void 0; exports.getText = getText; exports.transformTextInObject = transformTextInObject; const processScript_1 = require("./utils/processScript"); const getBundleId_1 = require("./utils/getBundleId"); const getDeploymentVersion_1 = require("./utils/getDeploymentVersion"); const getIosProjectPath_1 = require("./utils/getIosProjectPath"); const lodash_set_1 = __importDefault(require("lodash.set")); const lodash_get_1 = __importDefault(require("lodash.get")); // Predefined variables const predefinedVariables = { PLATFORM: process.platform, get IOS_PROJECT_NAME() { try { return (0, getIosProjectPath_1.getIosProjectName)(); } catch (_e) { return null; } }, get IOS_BUNDLE_ID() { try { return (0, getBundleId_1.getIosBundleId)(); } catch (_e) { return null; } }, get IOS_DEPLOYMENT_VERSION() { try { return (0, getDeploymentVersion_1.getIosDeploymentVersion)(); } catch (_e) { return null; } }, ...Object.entries(process.env).reduce((o, [name, value]) => { o[`ENV.${name}`] = value; return o; }, {}), }; // User-defined variables let _store = {}; exports.variables = { get(name) { if (name in predefinedVariables) return predefinedVariables[name]; return (0, lodash_get_1.default)(_store, name); }, set(name, value) { (0, lodash_set_1.default)(_store, name, value); }, setPredefined(name, value) { predefinedVariables[name] = value; }, clear() { _store = {}; }, getStore() { return Object.assign(Object.create(Object.getPrototypeOf(predefinedVariables), Object.getOwnPropertyDescriptors(predefinedVariables)), _store); }, has(name) { return name in predefinedVariables || (0, lodash_get_1.default)(_store, name) !== undefined; }, }; function getText(text) { return text.replace(/(?:\\+)?\$\[([^\\[\]]+)]/g, (allMatch, match) => { let slashCount = 0; for (let i = 0; i < allMatch.length; i++) { if (allMatch[i] == '\\') slashCount++; else break; } const slashes = '\\'.repeat(Math.floor(slashCount / 2)); const isEscaped = slashCount % 2 == 1; if (isEscaped) return slashes + `$[${match}]`; const value = (0, processScript_1.processScript)(match, exports.variables, true, false); if (value == null) { const descIndex = match.indexOf(':'); if (descIndex == -1) return slashes + match; return slashes + match.substring(descIndex + 1); } return slashes + value; }); } function transformTextInObject(obj) { if (obj == null) { return obj; } // If obj is an array, process its elements. if (Array.isArray(obj)) { return obj.map((item) => transformTextInObject(item)); } // If obj is a string, process it. if (typeof obj == 'string') { return getText(obj); } // If obj is an object, process its properties. if (typeof obj == 'object') { const newObj = {}; for (const key in obj) { // Recursively process the property value. newObj[key] = transformTextInObject(obj[key]); } return newObj; } // Return any other data types as is. return obj; }