react-native-integrate
Version:
Automate integration of additional code into React Native projects
118 lines (117 loc) • 3.75 kB
JavaScript
;
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;
}