@dotenvx/next-env 2.0.3 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +147 -49
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -5889,6 +5889,9 @@ var require_dist = __commonJS({
|
|
|
5889
5889
|
"src/encrypted.js"(exports22, module22) {
|
|
5890
5890
|
var PREFIX = "encrypted:";
|
|
5891
5891
|
function encrypted2(value) {
|
|
5892
|
+
if (!value) {
|
|
5893
|
+
return false;
|
|
5894
|
+
}
|
|
5892
5895
|
return value.startsWith(PREFIX);
|
|
5893
5896
|
}
|
|
5894
5897
|
module22.exports = encrypted2;
|
|
@@ -5958,9 +5961,9 @@ var require_dist = __commonJS({
|
|
|
5958
5961
|
function chomp(value) {
|
|
5959
5962
|
return value.replace(/[\r\n]+$/, "");
|
|
5960
5963
|
}
|
|
5961
|
-
function evaluate2(value,
|
|
5962
|
-
const processEnv2 =
|
|
5963
|
-
const runningParsed =
|
|
5964
|
+
function evaluate2(value, options) {
|
|
5965
|
+
const processEnv2 = options.processEnv || process.env;
|
|
5966
|
+
const runningParsed = options.runningParsed || {};
|
|
5964
5967
|
const matches = value.match(/\$\(([^)]+(?:\)[^(]*)*)\)/g) || [];
|
|
5965
5968
|
return matches.reduce((newValue, match) => {
|
|
5966
5969
|
const command = match.slice(2, -1);
|
|
@@ -5979,11 +5982,11 @@ var require_dist = __commonJS({
|
|
|
5979
5982
|
});
|
|
5980
5983
|
var require_expand = __commonJS2({
|
|
5981
5984
|
"src/expand.js"(exports22, module22) {
|
|
5982
|
-
function expand2(value,
|
|
5983
|
-
const overload =
|
|
5984
|
-
const processEnv2 =
|
|
5985
|
-
const runningParsed =
|
|
5986
|
-
const literals =
|
|
5985
|
+
function expand2(value, options) {
|
|
5986
|
+
const overload = options.overload;
|
|
5987
|
+
const processEnv2 = options.processEnv || process.env;
|
|
5988
|
+
const runningParsed = options.runningParsed || {};
|
|
5989
|
+
const literals = options.literals || {};
|
|
5987
5990
|
let env = { ...runningParsed, ...processEnv2 };
|
|
5988
5991
|
if (overload) {
|
|
5989
5992
|
env = { ...processEnv2, ...runningParsed };
|
|
@@ -6026,6 +6029,19 @@ var require_dist = __commonJS({
|
|
|
6026
6029
|
module22.exports = expand2;
|
|
6027
6030
|
}
|
|
6028
6031
|
});
|
|
6032
|
+
var require_keypair = __commonJS2({
|
|
6033
|
+
"src/keypair.js"(exports22, module22) {
|
|
6034
|
+
var { PrivateKey } = require_dist2();
|
|
6035
|
+
function keypair2() {
|
|
6036
|
+
const kp = new PrivateKey();
|
|
6037
|
+
return {
|
|
6038
|
+
publicKey: kp.publicKey.toHex(),
|
|
6039
|
+
privateKey: Buffer.from(kp.secret).toString("hex")
|
|
6040
|
+
};
|
|
6041
|
+
}
|
|
6042
|
+
module22.exports = keypair2;
|
|
6043
|
+
}
|
|
6044
|
+
});
|
|
6029
6045
|
var require_scan = __commonJS2({
|
|
6030
6046
|
"src/scan.js"(exports22, module22) {
|
|
6031
6047
|
function trimmer(value) {
|
|
@@ -6054,26 +6070,33 @@ var require_dist = __commonJS({
|
|
|
6054
6070
|
}
|
|
6055
6071
|
return q;
|
|
6056
6072
|
}
|
|
6057
|
-
function clean(value, quote) {
|
|
6073
|
+
function clean(value, quote, options) {
|
|
6058
6074
|
let v = trimmer(value);
|
|
6059
6075
|
v = v.replace(/^(['"`])([\s\S]*)\1$/mg, "$2");
|
|
6060
|
-
if (quote === '"') {
|
|
6076
|
+
if (quote === '"' && options.expandDoubleQuotedNewlines !== false) {
|
|
6061
6077
|
v = v.replace(/\\n/g, "\n");
|
|
6062
6078
|
v = v.replace(/\\r/g, "\r");
|
|
6063
6079
|
v = v.replace(/\\t/g, " ");
|
|
6064
6080
|
}
|
|
6065
6081
|
return v;
|
|
6066
6082
|
}
|
|
6067
|
-
function scan2(src, transform) {
|
|
6083
|
+
function scan2(src, options = {}, transform) {
|
|
6084
|
+
if (typeof options === "function") {
|
|
6085
|
+
transform = options;
|
|
6086
|
+
options = {};
|
|
6087
|
+
}
|
|
6068
6088
|
const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
|
|
6069
6089
|
const parsed = {};
|
|
6070
|
-
|
|
6090
|
+
let lines = (src || "").toString();
|
|
6091
|
+
if (options.convertWindowsNewlines !== false) {
|
|
6092
|
+
lines = lines.replace(/\r\n?/mg, "\n");
|
|
6093
|
+
}
|
|
6071
6094
|
let match;
|
|
6072
6095
|
while ((match = LINE.exec(lines)) !== null) {
|
|
6073
6096
|
const name = match[1];
|
|
6074
6097
|
const raw = match[2];
|
|
6075
6098
|
const quote = getQuote(raw);
|
|
6076
|
-
const value = clean(raw, quote);
|
|
6099
|
+
const value = clean(raw, quote, options);
|
|
6077
6100
|
let parsedValue = value;
|
|
6078
6101
|
if (typeof transform === "function") {
|
|
6079
6102
|
parsedValue = transform({
|
|
@@ -6082,7 +6105,8 @@ var require_dist = __commonJS({
|
|
|
6082
6105
|
quote
|
|
6083
6106
|
});
|
|
6084
6107
|
}
|
|
6085
|
-
parsed[name] =
|
|
6108
|
+
parsed[name] = parsed[name] || [];
|
|
6109
|
+
parsed[name].push(parsedValue);
|
|
6086
6110
|
}
|
|
6087
6111
|
return {
|
|
6088
6112
|
parsed
|
|
@@ -6100,35 +6124,57 @@ var require_dist = __commonJS({
|
|
|
6100
6124
|
try {
|
|
6101
6125
|
const src = fs2.readFileSync(filepath, "utf8");
|
|
6102
6126
|
const { parsed } = scan2(src);
|
|
6103
|
-
|
|
6127
|
+
const result = [];
|
|
6128
|
+
for (const name in parsed) {
|
|
6129
|
+
if (name.startsWith("DOTENV_PRIVATE_KEY")) {
|
|
6130
|
+
result.push(parsed[name][parsed[name].length - 1]);
|
|
6131
|
+
}
|
|
6132
|
+
}
|
|
6133
|
+
return result;
|
|
6104
6134
|
} catch (_e) {
|
|
6105
|
-
return
|
|
6135
|
+
return [];
|
|
6106
6136
|
}
|
|
6107
6137
|
}
|
|
6108
|
-
function keyring2() {
|
|
6109
|
-
const
|
|
6110
|
-
const processEnv2 = process.env;
|
|
6111
|
-
const
|
|
6112
|
-
const
|
|
6113
|
-
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
};
|
|
6117
|
-
for (const name in sources) {
|
|
6138
|
+
function keyring2(options = {}) {
|
|
6139
|
+
const ring = options.ring || {};
|
|
6140
|
+
const processEnv2 = options.processEnv || process.env;
|
|
6141
|
+
const keysFilepaths = Array.isArray(options.fk) ? options.fk : [options.fk || ".env.keys"];
|
|
6142
|
+
const privateKeyValues = keysFilepaths.reduce((acc, filepath) => {
|
|
6143
|
+
return acc.concat(keysFromFile(filepath));
|
|
6144
|
+
}, []);
|
|
6145
|
+
for (const name in processEnv2) {
|
|
6118
6146
|
if (name.startsWith("DOTENV_PRIVATE_KEY")) {
|
|
6119
|
-
|
|
6120
|
-
|
|
6121
|
-
|
|
6122
|
-
|
|
6123
|
-
|
|
6124
|
-
|
|
6147
|
+
privateKeyValues.push(processEnv2[name]);
|
|
6148
|
+
}
|
|
6149
|
+
}
|
|
6150
|
+
for (const privateKeyHex of privateKeyValues) {
|
|
6151
|
+
try {
|
|
6152
|
+
const publicKeyHex = derive2(privateKeyHex);
|
|
6153
|
+
ring[publicKeyHex] = privateKeyHex;
|
|
6154
|
+
} catch (_e) {
|
|
6125
6155
|
}
|
|
6126
6156
|
}
|
|
6127
|
-
return
|
|
6157
|
+
return ring;
|
|
6128
6158
|
}
|
|
6129
6159
|
module22.exports = keyring2;
|
|
6130
6160
|
}
|
|
6131
6161
|
});
|
|
6162
|
+
var require_publickeys = __commonJS2({
|
|
6163
|
+
"src/publickeys.js"(exports22, module22) {
|
|
6164
|
+
var scan2 = require_scan();
|
|
6165
|
+
function publickeys2(src) {
|
|
6166
|
+
const { parsed } = scan2(src);
|
|
6167
|
+
const result = [];
|
|
6168
|
+
for (const name in parsed) {
|
|
6169
|
+
if (name.startsWith("DOTENV_PUBLIC_KEY")) {
|
|
6170
|
+
result.push(parsed[name][parsed[name].length - 1]);
|
|
6171
|
+
}
|
|
6172
|
+
}
|
|
6173
|
+
return result;
|
|
6174
|
+
}
|
|
6175
|
+
module22.exports = publickeys2;
|
|
6176
|
+
}
|
|
6177
|
+
});
|
|
6132
6178
|
var require_parse = __commonJS2({
|
|
6133
6179
|
"src/parse.js"(exports22, module22) {
|
|
6134
6180
|
var decrypt2 = require_decrypt();
|
|
@@ -6136,32 +6182,56 @@ var require_dist = __commonJS({
|
|
|
6136
6182
|
var encrypted2 = require_encrypted();
|
|
6137
6183
|
var evaluate2 = require_evaluate();
|
|
6138
6184
|
var expand2 = require_expand();
|
|
6185
|
+
var publickeys2 = require_publickeys();
|
|
6139
6186
|
var scan2 = require_scan();
|
|
6140
6187
|
function resolveEscapeSequences(value) {
|
|
6141
6188
|
return value.replace(/\\\$/g, "$");
|
|
6142
6189
|
}
|
|
6143
|
-
function
|
|
6144
|
-
const
|
|
6145
|
-
const
|
|
6146
|
-
|
|
6190
|
+
function decryptWithKeyring(ring, value, publicKeyHexes) {
|
|
6191
|
+
const tried = {};
|
|
6192
|
+
for (const publicKeyHex of publicKeyHexes) {
|
|
6193
|
+
const privateKeyHex = ring[publicKeyHex];
|
|
6194
|
+
if (!privateKeyHex) {
|
|
6195
|
+
continue;
|
|
6196
|
+
}
|
|
6197
|
+
tried[privateKeyHex] = true;
|
|
6198
|
+
try {
|
|
6199
|
+
return decrypt2(privateKeyHex, value);
|
|
6200
|
+
} catch (_e) {
|
|
6201
|
+
}
|
|
6202
|
+
}
|
|
6203
|
+
for (const privateKeyHex of Object.values(ring)) {
|
|
6204
|
+
if (!privateKeyHex || tried[privateKeyHex]) {
|
|
6205
|
+
continue;
|
|
6206
|
+
}
|
|
6207
|
+
try {
|
|
6208
|
+
return decrypt2(privateKeyHex, value);
|
|
6209
|
+
} catch (_e) {
|
|
6210
|
+
}
|
|
6211
|
+
}
|
|
6212
|
+
return value;
|
|
6213
|
+
}
|
|
6214
|
+
function parse22(src, options = {}) {
|
|
6215
|
+
const overload = options.overload;
|
|
6216
|
+
const processEnv2 = options.processEnv || process.env;
|
|
6217
|
+
const publicKeyHexes = publickeys2(src);
|
|
6218
|
+
let ring = {};
|
|
6219
|
+
for (const publicKeyHex of publicKeyHexes) {
|
|
6220
|
+
ring[publicKeyHex] = "";
|
|
6221
|
+
}
|
|
6222
|
+
ring = keyring2({ processEnv: processEnv2, ring });
|
|
6147
6223
|
function inProcessEnv(name) {
|
|
6148
6224
|
return Object.prototype.hasOwnProperty.call(processEnv2, name);
|
|
6149
6225
|
}
|
|
6150
|
-
|
|
6151
|
-
|
|
6152
|
-
|
|
6153
|
-
|
|
6226
|
+
const runningParsed = {};
|
|
6227
|
+
const literals = {};
|
|
6228
|
+
const parsed = {};
|
|
6229
|
+
scan2(src, ({ name, value, quote }) => {
|
|
6154
6230
|
let parsedValue = value;
|
|
6155
|
-
if (name.startsWith("DOTENV_PUBLIC_KEY")) {
|
|
6156
|
-
publicKeyHex = parsedValue;
|
|
6157
|
-
}
|
|
6158
6231
|
if (!overload && inProcessEnv(name)) {
|
|
6159
6232
|
parsedValue = processEnv2[name];
|
|
6160
6233
|
}
|
|
6161
|
-
|
|
6162
|
-
parsedValue = decrypt2(ring[publicKeyHex], parsedValue);
|
|
6163
|
-
} catch (_e) {
|
|
6164
|
-
}
|
|
6234
|
+
parsedValue = decryptWithKeyring(ring, parsedValue, publicKeyHexes);
|
|
6165
6235
|
const encryptedPrefixed = encrypted2(parsedValue);
|
|
6166
6236
|
let evaled = false;
|
|
6167
6237
|
if (!encryptedPrefixed && quote !== "'" && (!inProcessEnv(name) || processEnv2[name] === parsedValue)) {
|
|
@@ -6181,6 +6251,7 @@ var require_dist = __commonJS({
|
|
|
6181
6251
|
literals[name] = parsedValue;
|
|
6182
6252
|
}
|
|
6183
6253
|
runningParsed[name] = parsedValue;
|
|
6254
|
+
parsed[name] = parsedValue;
|
|
6184
6255
|
if (Object.prototype.hasOwnProperty.call(processEnv2, name) && !overload) {
|
|
6185
6256
|
} else {
|
|
6186
6257
|
}
|
|
@@ -6193,15 +6264,39 @@ var require_dist = __commonJS({
|
|
|
6193
6264
|
module22.exports = parse22;
|
|
6194
6265
|
}
|
|
6195
6266
|
});
|
|
6267
|
+
var require_sealed = __commonJS2({
|
|
6268
|
+
"src/sealed.js"(exports22, module22) {
|
|
6269
|
+
var encrypted2 = require_encrypted();
|
|
6270
|
+
var scan2 = require_scan();
|
|
6271
|
+
function publicKey(name) {
|
|
6272
|
+
return name.startsWith("DOTENV_PUBLIC_KEY");
|
|
6273
|
+
}
|
|
6274
|
+
function sealed2(src) {
|
|
6275
|
+
const { parsed } = scan2(src);
|
|
6276
|
+
for (const [name, values] of Object.entries(parsed)) {
|
|
6277
|
+
for (const value of values) {
|
|
6278
|
+
if (!encrypted2(value) && !publicKey(name)) {
|
|
6279
|
+
return false;
|
|
6280
|
+
}
|
|
6281
|
+
}
|
|
6282
|
+
}
|
|
6283
|
+
return true;
|
|
6284
|
+
}
|
|
6285
|
+
module22.exports = sealed2;
|
|
6286
|
+
}
|
|
6287
|
+
});
|
|
6196
6288
|
var decrypt = require_decrypt();
|
|
6197
6289
|
var derive = require_derive();
|
|
6198
6290
|
var encrypt = require_encrypt();
|
|
6199
6291
|
var encrypted = require_encrypted();
|
|
6200
6292
|
var evaluate = require_evaluate();
|
|
6201
6293
|
var expand = require_expand();
|
|
6294
|
+
var keypair = require_keypair();
|
|
6202
6295
|
var keyring = require_keyring();
|
|
6203
6296
|
var parse2 = require_parse();
|
|
6297
|
+
var publickeys = require_publickeys();
|
|
6204
6298
|
var scan = require_scan();
|
|
6299
|
+
var sealed = require_sealed();
|
|
6205
6300
|
module2.exports = {
|
|
6206
6301
|
decrypt,
|
|
6207
6302
|
derive,
|
|
@@ -6209,9 +6304,12 @@ var require_dist = __commonJS({
|
|
|
6209
6304
|
encrypted,
|
|
6210
6305
|
evaluate,
|
|
6211
6306
|
expand,
|
|
6307
|
+
keypair,
|
|
6212
6308
|
keyring,
|
|
6213
6309
|
parse: parse2,
|
|
6214
|
-
|
|
6310
|
+
publickeys,
|
|
6311
|
+
scan,
|
|
6312
|
+
sealed
|
|
6215
6313
|
};
|
|
6216
6314
|
}
|
|
6217
6315
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dotenvx/next-env",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "dotenvx drop-in replacement for @next/env",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"repository": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"prepublishOnly": "npm pack --dry-run"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@dotenvx/primitives": "^0.
|
|
26
|
+
"@dotenvx/primitives": "^0.9.0",
|
|
27
27
|
"esbuild": "^0.28.1"
|
|
28
28
|
}
|
|
29
29
|
}
|