env-type-defs
Version:
Automatically generate TypeScript type definitions for environment variables based on the content of your env files.
36 lines (35 loc) • 1.64 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateEnvTypes = void 0;
const config_1 = require("../config");
const paths_1 = require("./paths");
const dotenv_1 = __importDefault(require("dotenv"));
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const determine_type_1 = require("./determine-type");
const envs = {};
const generateEnvTypes = (pathArg) => {
const envFiles = (0, paths_1.getEnvPath)();
envFiles.forEach((env) => {
const envPath = pathArg || path_1.default.join(config_1.DIRECTORY_PATH, env);
const envConfig = dotenv_1.default.parse(fs_1.default.readFileSync(envPath));
Object.keys(envConfig).forEach((key) => {
envs[key] = (0, determine_type_1.determineType)(envConfig[key]);
});
});
const envPathName = path_1.default.join(config_1.DIRECTORY_PATH, config_1.ENV_TYPE_PATH);
let envObject = "";
const envObjKeys = Object.keys(envs);
envObjKeys.forEach((key, index) => {
envObject += "\t" + key + ":" + envs[key];
if (index != envObjKeys.length - 1) {
envObject += ",\n\t";
}
});
fs_1.default.writeFileSync(envPathName, `// generated by env-type-defs https://www.npmjs.com/package/env-type-defs\ndeclare global {\n namespace NodeJS {\n interface ProcessEnv {\n ${envObject}\n }\n }\n}\nexport {};\n `, {});
return envs;
};
exports.generateEnvTypes = generateEnvTypes;