@app.json/cli
Version:
Capture what your app needs to be deployed and run
58 lines (57 loc) • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@app.json/core");
var fs_1 = require("fs");
var path_1 = require("path");
var prettier_1 = require("prettier");
function exportTs(appJsonPath) {
var appJson = core_1.loadAppJson(appJsonPath);
var code = [
"function getEnvSafe(name: string): string {\n const value = process.env[name];\n if (!value) {\n throw new Error(`Environment variable ${name} was undefined`)\n }\n return value;\n }"
];
code.push.apply(code, generateConfigTs(appJson));
var configPath = path_1.resolve(path_1.parse(appJsonPath).dir, 'config.ts');
fs_1.writeFileSync(configPath, prettier_1.format(code.join('\n'), {
singleQuote: true,
tabWidth: 4,
filepath: 'config.ts'
}));
}
exports.exportTs = exportTs;
function generateConfigTs(appJson) {
var env = appJson.env;
if (!env) {
return [];
}
var code = ['export const config = {'];
Object.keys(env).forEach(function (key) {
code.push(generateEnvGetter(key));
});
code.push.apply(code, generateComponentsTs(appJson));
code.push('};');
return code;
}
function generateComponentsTs(appJson) {
var components = appJson.components;
if (!components) {
return [];
}
var code = ["components: {"];
components.forEach(function (component) {
code.push.apply(code, generateComponentTs(component));
});
code.push('},');
return code;
}
function generateComponentTs(component) {
var code = ["get " + core_1.camelize(component.name) + "() {"];
code.push('return {');
component.variables.forEach(function (key) {
code.push(core_1.camelize(key.toLowerCase()) + ": getEnvSafe('" + key + "'),");
});
code.push('}},');
return code;
}
function generateEnvGetter(key) {
return "get " + core_1.camelize(key.toLowerCase()) + "(): string {return getEnvSafe('" + key + "')},";
}