react-klasha
Version:
This is an reactJS library for implementing klasha payment gateway
325 lines (322 loc) • 14.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.writeConfig = exports.loadConfig = exports.CONFIG_FILE_NAME_JSON = exports.CONFIG_FILE_NAME_JS = exports.CONFIG_FILE_NAME_TS = void 0;
const tslib_1 = require("tslib");
const utils_fs_1 = require("@ionic/utils-fs");
const debug_1 = tslib_1.__importDefault(require("debug"));
const path_1 = require("path");
const colors_1 = tslib_1.__importDefault(require("./colors"));
const errors_1 = require("./errors");
const log_1 = require("./log");
const fn_1 = require("./util/fn");
const js_1 = require("./util/js");
const node_1 = require("./util/node");
const promise_1 = require("./util/promise");
const debug = debug_1.default('capacitor:config');
exports.CONFIG_FILE_NAME_TS = 'capacitor.config.ts';
exports.CONFIG_FILE_NAME_JS = 'capacitor.config.js';
exports.CONFIG_FILE_NAME_JSON = 'capacitor.config.json';
async function loadConfig() {
var _a, _b, _c, _d, _e;
const appRootDir = process.cwd();
const cliRootDir = path_1.dirname(__dirname);
const conf = await loadExtConfig(appRootDir);
const appId = (_a = conf.extConfig.appId) !== null && _a !== void 0 ? _a : '';
const appName = (_b = conf.extConfig.appName) !== null && _b !== void 0 ? _b : '';
const webDir = (_c = conf.extConfig.webDir) !== null && _c !== void 0 ? _c : 'www';
const cli = await loadCLIConfig(cliRootDir);
const config = {
android: await loadAndroidConfig(appRootDir, conf.extConfig, cli),
ios: await loadIOSConfig(appRootDir, conf.extConfig),
web: await loadWebConfig(appRootDir, webDir),
cli,
app: {
rootDir: appRootDir,
appId,
appName,
webDir,
webDirAbs: path_1.resolve(appRootDir, webDir),
package: (_d = (await fn_1.tryFn(utils_fs_1.readJSON, path_1.resolve(appRootDir, 'package.json')))) !== null && _d !== void 0 ? _d : {
name: appName,
version: '1.0.0',
},
...conf,
bundledWebRuntime: (_e = conf.extConfig.bundledWebRuntime) !== null && _e !== void 0 ? _e : false,
},
};
checkExternalConfig(conf);
debug('config: %O', config);
return config;
}
exports.loadConfig = loadConfig;
async function writeConfig(extConfig, extConfigFilePath) {
switch (path_1.extname(extConfigFilePath)) {
case '.json': {
await utils_fs_1.writeJSON(extConfigFilePath, extConfig, { spaces: 2 });
break;
}
case '.ts': {
await utils_fs_1.writeFile(extConfigFilePath, formatConfigTS(extConfig));
break;
}
}
}
exports.writeConfig = writeConfig;
async function loadExtConfigTS(rootDir, extConfigName, extConfigFilePath) {
var _a, _b;
try {
const tsPath = node_1.resolveNode(rootDir, 'typescript');
if (!tsPath) {
errors_1.fatal('Could not find installation of TypeScript.\n' +
`To use ${colors_1.default.strong(extConfigName)} files, you must install TypeScript in your project, e.g. w/ ${colors_1.default.input('npm install -D typescript')}`);
}
const ts = require(tsPath); // eslint-disable-line @typescript-eslint/no-var-requires
const extConfigObject = node_1.requireTS(ts, extConfigFilePath);
const extConfig = (_a = extConfigObject.default) !== null && _a !== void 0 ? _a : extConfigObject;
return {
extConfigType: 'ts',
extConfigName,
extConfigFilePath: extConfigFilePath,
extConfig,
};
}
catch (e) {
if (!errors_1.isFatal(e)) {
errors_1.fatal(`Parsing ${colors_1.default.strong(extConfigName)} failed.\n\n${(_b = e.stack) !== null && _b !== void 0 ? _b : e}`);
}
throw e;
}
}
async function loadExtConfigJS(rootDir, extConfigName, extConfigFilePath) {
var _a;
try {
return {
extConfigType: 'js',
extConfigName,
extConfigFilePath: extConfigFilePath,
extConfig: require(extConfigFilePath),
};
}
catch (e) {
errors_1.fatal(`Parsing ${colors_1.default.strong(extConfigName)} failed.\n\n${(_a = e.stack) !== null && _a !== void 0 ? _a : e}`);
}
}
async function loadExtConfig(rootDir) {
var _a;
const extConfigFilePathTS = path_1.resolve(rootDir, exports.CONFIG_FILE_NAME_TS);
if (await utils_fs_1.pathExists(extConfigFilePathTS)) {
return loadExtConfigTS(rootDir, exports.CONFIG_FILE_NAME_TS, extConfigFilePathTS);
}
const extConfigFilePathJS = path_1.resolve(rootDir, exports.CONFIG_FILE_NAME_JS);
if (await utils_fs_1.pathExists(extConfigFilePathJS)) {
return loadExtConfigJS(rootDir, exports.CONFIG_FILE_NAME_JS, extConfigFilePathJS);
}
const extConfigFilePath = path_1.resolve(rootDir, exports.CONFIG_FILE_NAME_JSON);
return {
extConfigType: 'json',
extConfigName: exports.CONFIG_FILE_NAME_JSON,
extConfigFilePath: extConfigFilePath,
extConfig: (_a = (await fn_1.tryFn(utils_fs_1.readJSON, extConfigFilePath))) !== null && _a !== void 0 ? _a : {},
};
}
async function loadCLIConfig(rootDir) {
const assetsDir = 'assets';
const assetsDirAbs = path_1.join(rootDir, assetsDir);
const iosPlatformTemplateArchive = 'ios-template.tar.gz';
const iosCordovaPluginsTemplateArchive = 'capacitor-cordova-ios-plugins.tar.gz';
const androidPlatformTemplateArchive = 'android-template.tar.gz';
const androidCordovaPluginsTemplateArchive = 'capacitor-cordova-android-plugins.tar.gz';
return {
rootDir,
assetsDir,
assetsDirAbs,
assets: {
ios: {
platformTemplateArchive: iosPlatformTemplateArchive,
platformTemplateArchiveAbs: path_1.resolve(assetsDirAbs, iosPlatformTemplateArchive),
cordovaPluginsTemplateArchive: iosCordovaPluginsTemplateArchive,
cordovaPluginsTemplateArchiveAbs: path_1.resolve(assetsDirAbs, iosCordovaPluginsTemplateArchive),
},
android: {
platformTemplateArchive: androidPlatformTemplateArchive,
platformTemplateArchiveAbs: path_1.resolve(assetsDirAbs, androidPlatformTemplateArchive),
cordovaPluginsTemplateArchive: androidCordovaPluginsTemplateArchive,
cordovaPluginsTemplateArchiveAbs: path_1.resolve(assetsDirAbs, androidCordovaPluginsTemplateArchive),
},
},
package: await utils_fs_1.readJSON(path_1.resolve(rootDir, 'package.json')),
os: determineOS(process.platform),
};
}
async function loadAndroidConfig(rootDir, extConfig, cliConfig) {
var _a, _b;
const name = 'android';
const platformDir = (_b = (_a = extConfig.android) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : 'android';
const platformDirAbs = path_1.resolve(rootDir, platformDir);
const appDir = 'app';
const srcDir = `${appDir}/src`;
const srcMainDir = `${srcDir}/main`;
const assetsDir = `${srcMainDir}/assets`;
const webDir = `${assetsDir}/public`;
const resDir = `${srcMainDir}/res`;
const buildOutputDir = `${appDir}/build/outputs/apk/debug`;
const cordovaPluginsDir = 'capacitor-cordova-android-plugins';
const studioPath = promise_1.lazy(() => determineAndroidStudioPath(cliConfig.os));
return {
name,
minVersion: '21',
studioPath,
platformDir,
platformDirAbs,
cordovaPluginsDir,
cordovaPluginsDirAbs: path_1.resolve(platformDirAbs, cordovaPluginsDir),
appDir,
appDirAbs: path_1.resolve(platformDirAbs, appDir),
srcDir,
srcDirAbs: path_1.resolve(platformDirAbs, srcDir),
srcMainDir,
srcMainDirAbs: path_1.resolve(platformDirAbs, srcMainDir),
assetsDir,
assetsDirAbs: path_1.resolve(platformDirAbs, assetsDir),
webDir,
webDirAbs: path_1.resolve(platformDirAbs, webDir),
resDir,
resDirAbs: path_1.resolve(platformDirAbs, resDir),
buildOutputDir,
buildOutputDirAbs: path_1.resolve(platformDirAbs, buildOutputDir),
};
}
async function loadIOSConfig(rootDir, extConfig) {
var _a, _b, _c, _d;
const name = 'ios';
const podPath = determineCocoapodPath();
const platformDir = (_b = (_a = extConfig.ios) === null || _a === void 0 ? void 0 : _a.path) !== null && _b !== void 0 ? _b : 'ios';
const platformDirAbs = path_1.resolve(rootDir, platformDir);
const scheme = (_d = (_c = extConfig.ios) === null || _c === void 0 ? void 0 : _c.scheme) !== null && _d !== void 0 ? _d : 'App';
const nativeProjectDir = 'App';
const nativeProjectDirAbs = path_1.resolve(platformDirAbs, nativeProjectDir);
const nativeTargetDir = `${nativeProjectDir}/App`;
const nativeTargetDirAbs = path_1.resolve(platformDirAbs, nativeTargetDir);
const nativeXcodeProjDir = `${nativeProjectDir}/App.xcodeproj`;
const nativeXcodeProjDirAbs = path_1.resolve(platformDirAbs, nativeXcodeProjDir);
const nativeXcodeWorkspaceDirAbs = promise_1.lazy(() => determineXcodeWorkspaceDirAbs(nativeProjectDirAbs));
const webDirAbs = promise_1.lazy(() => determineIOSWebDirAbs(nativeProjectDirAbs, nativeTargetDirAbs, nativeXcodeProjDirAbs));
const cordovaPluginsDir = 'capacitor-cordova-ios-plugins';
return {
name,
minVersion: '12.0',
platformDir,
platformDirAbs,
scheme,
cordovaPluginsDir,
cordovaPluginsDirAbs: path_1.resolve(platformDirAbs, cordovaPluginsDir),
nativeProjectDir,
nativeProjectDirAbs,
nativeTargetDir,
nativeTargetDirAbs,
nativeXcodeProjDir,
nativeXcodeProjDirAbs,
nativeXcodeWorkspaceDir: promise_1.lazy(async () => path_1.relative(platformDirAbs, await nativeXcodeWorkspaceDirAbs)),
nativeXcodeWorkspaceDirAbs,
webDir: promise_1.lazy(async () => path_1.relative(platformDirAbs, await webDirAbs)),
webDirAbs,
podPath,
};
}
async function loadWebConfig(rootDir, webDir) {
const platformDir = webDir;
const platformDirAbs = path_1.resolve(rootDir, platformDir);
return {
name: 'web',
platformDir,
platformDirAbs,
};
}
function determineOS(os) {
switch (os) {
case 'darwin':
return "mac" /* Mac */;
case 'win32':
return "windows" /* Windows */;
case 'linux':
return "linux" /* Linux */;
}
return "unknown" /* Unknown */;
}
async function determineXcodeWorkspaceDirAbs(nativeProjectDirAbs) {
const xcodeDir = path_1.resolve(nativeProjectDirAbs, 'App.xcworkspace');
if (!(await utils_fs_1.pathExists(xcodeDir))) {
errors_1.fatal('Xcode workspace does not exist.\n' +
`See the docs for adding the ${colors_1.default.strong('ios')} platform: ${colors_1.default.strong('https://capacitorjs.com/docs/ios#adding-the-ios-platform')}`);
}
return xcodeDir;
}
async function determineIOSWebDirAbs(nativeProjectDirAbs, nativeTargetDirAbs, nativeXcodeProjDirAbs) {
const re = /path\s=\spublic[\s\S]+?sourceTree\s=\s([^;]+)/;
const pbxprojPath = path_1.resolve(nativeXcodeProjDirAbs, 'project.pbxproj');
const pbxproj = await utils_fs_1.readFile(pbxprojPath, { encoding: 'utf8' });
const m = pbxproj.match(re);
if (m && m[1] === 'SOURCE_ROOT') {
log_1.logger.warn(`Using the iOS project root for the ${colors_1.default.strong('public')} directory is deprecated.\n` +
`Please follow the Upgrade Guide to move ${colors_1.default.strong('public')} inside the iOS target directory: ${colors_1.default.strong('https://capacitorjs.com/docs/updating/3-0#move-public-into-the-ios-target-directory')}`);
return path_1.resolve(nativeProjectDirAbs, 'public');
}
return path_1.resolve(nativeTargetDirAbs, 'public');
}
async function determineAndroidStudioPath(os) {
if (process.env.CAPACITOR_ANDROID_STUDIO_PATH) {
return process.env.CAPACITOR_ANDROID_STUDIO_PATH;
}
switch (os) {
case "mac" /* Mac */:
return '/Applications/Android Studio.app';
case "windows" /* Windows */: {
const { runCommand } = await Promise.resolve().then(() => tslib_1.__importStar(require('./util/subprocess')));
let p = 'C:\\Program Files\\Android\\Android Studio\\bin\\studio64.exe';
try {
if (!(await utils_fs_1.pathExists(p))) {
let commandResult = await runCommand('REG', [
'QUERY',
'HKEY_LOCAL_MACHINE\\SOFTWARE\\Android Studio',
'/v',
'Path',
]);
commandResult = commandResult.replace(/(\r\n|\n|\r)/gm, '');
const i = commandResult.indexOf('REG_SZ');
if (i > 0) {
p = commandResult.substring(i + 6).trim() + '\\bin\\studio64.exe';
}
}
}
catch (e) {
debug(`Error checking registry for Android Studio path: %O`, e);
break;
}
return p;
}
case "linux" /* Linux */:
return '/usr/local/android-studio/bin/studio.sh';
}
return '';
}
function determineCocoapodPath() {
if (process.env.CAPACITOR_COCOAPODS_PATH) {
return process.env.CAPACITOR_COCOAPODS_PATH;
}
return 'pod';
}
function formatConfigTS(extConfig) {
// TODO: <reference> tags
return `import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = ${js_1.formatJSObject(extConfig)};
export default config;\n`;
}
function checkExternalConfig(config) {
var _a, _b;
if (typeof config.extConfig.hideLogs !== 'undefined' ||
typeof ((_a = config.extConfig.android) === null || _a === void 0 ? void 0 : _a.hideLogs) !== 'undefined' ||
typeof ((_b = config.extConfig.ios) === null || _b === void 0 ? void 0 : _b.hideLogs) !== 'undefined') {
log_1.logger.warn(`The ${colors_1.default.strong('hideLogs')} configuration option has been deprecated. ` +
`Please update to use ${colors_1.default.strong('loggingBehavior')} instead.`);
}
}