sync-dotenv
Version:
Keep your .env in sync with .env.example
169 lines (147 loc) • 7.25 kB
JavaScript
#!/usr/bin/env node
var $3CdBH$child_process = require("child_process");
var $3CdBH$meow = require("meow");
var $3CdBH$path = require("path");
var $3CdBH$fs = require("fs");
var $3CdBH$os = require("os");
var $3CdBH$parsedotenv = require("parse-dotenv");
var $3CdBH$globby = require("globby");
var $3CdBH$pkgconf = require("pkg-conf");
function $parcel$interopDefault(a) {
return a && a.__esModule ? a.default : a;
}
function $parcel$defineInteropFlag(a) {
Object.defineProperty(a, '__esModule', {value: true, configurable: true});
}
function $parcel$export(e, n, v, s) {
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
}
$parcel$defineInteropFlag(module.exports);
$parcel$export(module.exports, "default", () => $e7b60d70fee81a38$export$2e2bcd8739ae039);
const $de2b25064d321747$var$DEFAULT_ENV_PATH = $3CdBH$path.resolve(process.cwd(), ".env");
const $de2b25064d321747$var$DEFAULT_SAMPLE_ENV = $3CdBH$path.resolve(process.cwd(), ".env.example");
const $de2b25064d321747$export$ffc21166d570a16 = (path)=>($parcel$interopDefault($3CdBH$fs)).existsSync(path)
;
const $de2b25064d321747$export$a223f0b5790835b7 = (obj)=>Object.keys(obj)
;
const $de2b25064d321747$export$cb15672420afdef7 = (parsed)=>$de2b25064d321747$export$a223f0b5790835b7(parsed).map((key)=>`${key}=${parsed[key] || ""}`
).join(($parcel$interopDefault($3CdBH$os)).EOL).replace(/(__\w+_\d+__=)/g, "")
;
const $de2b25064d321747$export$fe13601f8194f1a3 = (path, parsedEnv)=>{
try {
($parcel$interopDefault($3CdBH$fs)).writeFileSync(path, $de2b25064d321747$export$cb15672420afdef7(parsedEnv));
} catch (e) {
throw new Error(`Sync failed. ${e.message}`);
}
};
const $de2b25064d321747$export$3368712d4a9d23e5 = (obj)=>{
const objCopy = {
...obj
};
Object.keys(objCopy).forEach((key)=>{
if (objCopy[key].includes("#")) {
if (objCopy[key].match(/(".*"|'.*')/g)) {
const objArr = objCopy[key].split(/(".*"|'.*')/);
objCopy[key] = objArr.slice(-1)[0].trim();
} else {
const objArr = objCopy[key].split("#");
objCopy[key] = `#${objArr.slice(-1)[0]}`;
}
return;
}
/* istanbul ignore else */ if (!key.startsWith("__COMMENT_")) objCopy[key] = "";
});
return objCopy;
};
const $de2b25064d321747$export$a38d427a1a937627 = async (env1, envExample, config = {
})=>{
let ignoreKeys = config.preserve || [];
const uniqueKeys = new Set($de2b25064d321747$export$a223f0b5790835b7(env1));
const uniqueKeysArray = Array.from(uniqueKeys);
let uniqueFromSource = uniqueKeysArray.map((key)=>{
if (key.startsWith("__COMMENT_")) return {
[key]: env1[key]
};
return {
[key]: envExample[key] || ""
};
});
let presevedVars = $de2b25064d321747$export$a223f0b5790835b7(envExample).map((key)=>({
[key]: envExample[key]
})
).filter((env)=>{
return ignoreKeys.length && ignoreKeys.includes($de2b25064d321747$export$a223f0b5790835b7(env)[0]);
});
return [
...uniqueFromSource,
...presevedVars
];
};
const $de2b25064d321747$export$5ec1cd26d9dc5917 = async (envPath, envExamplePath, initialConfig)=>{
// We do this so we can pass it via test as well
let config = initialConfig || await ($parcel$interopDefault($3CdBH$pkgconf))("sync-dotenv");
// Set defaults
config.comments = typeof config.comments === 'undefined' ? true : config.comments;
config.emptyLines = typeof config.emptyLines === 'undefined' ? true : config.comments;
let sourceEnv = $de2b25064d321747$export$3368712d4a9d23e5(($parcel$interopDefault($3CdBH$parsedotenv))(envPath, {
emptyLines: !!config.emptyLines,
comments: !!config.comments
}));
let targetEnv = ($parcel$interopDefault($3CdBH$parsedotenv))(envExamplePath);
const uniqueVars = await $de2b25064d321747$export$a38d427a1a937627(sourceEnv, targetEnv, config);
let envCopy = {
};
uniqueVars.forEach((env)=>{
let [key] = $de2b25064d321747$export$a223f0b5790835b7(env);
envCopy[key] = env[key];
});
$de2b25064d321747$export$fe13601f8194f1a3(envExamplePath, envCopy);
};
const $de2b25064d321747$var$exit = (message, code = 1)=>Promise.reject({
message: message,
code: code
})
;
const $de2b25064d321747$export$1a886b42ea7d54b7 = async (sampleEnv, source, samples)=>{
if (sampleEnv && (sampleEnv === ".env" || $3CdBH$path.basename(sampleEnv) === ".env")) return $de2b25064d321747$var$exit("Cannot sync .env with .env");
const SAMPLE_ENV_PATHS = !samples ? [
$3CdBH$path.resolve(process.cwd(), sampleEnv || $de2b25064d321747$var$DEFAULT_SAMPLE_ENV)
] : ($parcel$interopDefault($3CdBH$globby)).sync(samples).map((sample)=>$3CdBH$path.resolve(process.cwd(), sample)
);
let envPath = source ? $de2b25064d321747$export$ffc21166d570a16(source) ? source : null : $de2b25064d321747$var$DEFAULT_ENV_PATH;
if (envPath === null) return $de2b25064d321747$var$exit(`${source} not found`);
if (!source && !$de2b25064d321747$export$ffc21166d570a16(envPath)) return $de2b25064d321747$var$exit(".env doesn't exists");
if (!SAMPLE_ENV_PATHS.length) return $de2b25064d321747$var$exit(`${samples} did not match any file`);
if (!$de2b25064d321747$export$ffc21166d570a16(SAMPLE_ENV_PATHS[0])) return $de2b25064d321747$var$exit(`${sampleEnv || $3CdBH$path.basename($de2b25064d321747$var$DEFAULT_SAMPLE_ENV)} not found`);
const sourcePath = envPath;
for (let samplePath of SAMPLE_ENV_PATHS)await $de2b25064d321747$export$5ec1cd26d9dc5917(sourcePath, samplePath);
return Promise.resolve(SAMPLE_ENV_PATHS.join(" "));
};
const $e7b60d70fee81a38$var$cli = ($parcel$interopDefault($3CdBH$meow))(`
Usage: sync-dotenv [options]
Options:
-e, --env file .......... .env file location
-s, --sample file ....... alternate sample env file to sync with
-S, --samples "file.*" ........ alternate sample env files pattern to sync with
Note: If options is omitted, sync-dotenv will attempt to sync .env
with .env.example in the current working directory.
Examples:
$ sync-dotenv
$ sync-dotenv --sample .env.development
$ sync-dotenv --env server/.env --sample example.env
$ sync-dotenv --samples ".env.*"
`, {
flags: {
sample: {
type: "string"
}
}
});
const { sample: $e7b60d70fee81a38$var$sample , s: $e7b60d70fee81a38$var$s , env: $e7b60d70fee81a38$var$env , e: $e7b60d70fee81a38$var$e , samples: $e7b60d70fee81a38$var$samples , S: $e7b60d70fee81a38$var$S } = $e7b60d70fee81a38$var$cli.flags;
$de2b25064d321747$export$1a886b42ea7d54b7($e7b60d70fee81a38$var$sample || $e7b60d70fee81a38$var$s, $e7b60d70fee81a38$var$env || $e7b60d70fee81a38$var$e, $e7b60d70fee81a38$var$samples || $e7b60d70fee81a38$var$S).then((sampleEnv)=>($parcel$interopDefault($3CdBH$child_process)).exec(`git add ${sampleEnv}`)
).catch(({ message: message , code: code })=>{
console.log(message);
process.exit(code);
});
var $e7b60d70fee81a38$export$2e2bcd8739ae039 = $de2b25064d321747$export$1a886b42ea7d54b7;
//# sourceMappingURL=index.js.map