@dotenvx/primitives 0.3.0 → 0.4.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.
Files changed (2) hide show
  1. package/dist/index.cjs +102 -58
  2. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -6081,43 +6081,13 @@ var require_expand = __commonJS({
6081
6081
  }
6082
6082
  });
6083
6083
 
6084
- // src/keyring.js
6085
- var require_keyring = __commonJS({
6086
- "src/keyring.js"(exports2, module2) {
6087
- var { PrivateKey } = require_dist();
6088
- var derive2 = require_derive();
6089
- function keyring2() {
6090
- const mem = {};
6091
- const processEnv = process.env;
6092
- for (const name in processEnv) {
6093
- if (name.startsWith("DOTENV_PRIVATE_KEY")) {
6094
- try {
6095
- const privateKeyHex = processEnv[name];
6096
- const publicKeyHex = derive2(privateKeyHex);
6097
- mem[publicKeyHex] = privateKeyHex;
6098
- } catch (_e) {
6099
- }
6100
- }
6101
- }
6102
- return mem;
6103
- }
6104
- module2.exports = keyring2;
6105
- }
6106
- });
6107
-
6108
- // src/parse.js
6109
- var require_parse = __commonJS({
6110
- "src/parse.js"(exports2, module2) {
6111
- var decrypt2 = require_decrypt();
6112
- var keyring2 = require_keyring();
6113
- var encrypted2 = require_encrypted();
6114
- var evaluate2 = require_evaluate();
6115
- var expand2 = require_expand();
6116
- var LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
6084
+ // src/scan.js
6085
+ var require_scan = __commonJS({
6086
+ "src/scan.js"(exports2, module2) {
6117
6087
  function trimmer(value) {
6118
6088
  return (value || "").trim();
6119
6089
  }
6120
- function quote(value) {
6090
+ function getQuote(value) {
6121
6091
  const v = trimmer(value);
6122
6092
  const maybeQuote = v[0];
6123
6093
  let q = "";
@@ -6140,16 +6110,93 @@ var require_parse = __commonJS({
6140
6110
  }
6141
6111
  return q;
6142
6112
  }
6143
- function clean(value, _quote) {
6113
+ function clean(value, quote) {
6144
6114
  let v = trimmer(value);
6145
6115
  v = v.replace(/^(['"`])([\s\S]*)\1$/mg, "$2");
6146
- if (_quote === '"') {
6116
+ if (quote === '"') {
6147
6117
  v = v.replace(/\\n/g, "\n");
6148
6118
  v = v.replace(/\\r/g, "\r");
6149
6119
  v = v.replace(/\\t/g, " ");
6150
6120
  }
6151
6121
  return v;
6152
6122
  }
6123
+ function scan2(src, transform) {
6124
+ const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
6125
+ const parsed = {};
6126
+ const lines = (src || "").toString().replace(/\r\n?/mg, "\n");
6127
+ let match;
6128
+ while ((match = LINE.exec(lines)) !== null) {
6129
+ const name = match[1];
6130
+ const raw = match[2];
6131
+ const quote = getQuote(raw);
6132
+ const value = clean(raw, quote);
6133
+ let parsedValue = value;
6134
+ if (typeof transform === "function") {
6135
+ parsedValue = transform({
6136
+ name,
6137
+ value,
6138
+ quote
6139
+ });
6140
+ }
6141
+ parsed[name] = parsedValue;
6142
+ }
6143
+ return {
6144
+ parsed
6145
+ };
6146
+ }
6147
+ module2.exports = scan2;
6148
+ }
6149
+ });
6150
+
6151
+ // src/keyring.js
6152
+ var require_keyring = __commonJS({
6153
+ "src/keyring.js"(exports2, module2) {
6154
+ var fs = require("fs");
6155
+ var derive2 = require_derive();
6156
+ var scan2 = require_scan();
6157
+ function keysFromFile(filepath = ".env.keys") {
6158
+ try {
6159
+ const src = fs.readFileSync(filepath, "utf8");
6160
+ const { parsed } = scan2(src);
6161
+ return parsed;
6162
+ } catch (_e) {
6163
+ return {};
6164
+ }
6165
+ }
6166
+ function keyring2() {
6167
+ const mem = {};
6168
+ const processEnv = process.env;
6169
+ const keysFilepath = ".env.keys";
6170
+ const sources = {
6171
+ ...keysFromFile(keysFilepath),
6172
+ ...processEnv
6173
+ // process.env wins
6174
+ };
6175
+ for (const name in sources) {
6176
+ if (name.startsWith("DOTENV_PRIVATE_KEY")) {
6177
+ try {
6178
+ const privateKeyHex = sources[name];
6179
+ const publicKeyHex = derive2(privateKeyHex);
6180
+ mem[publicKeyHex] = privateKeyHex;
6181
+ } catch (_e) {
6182
+ }
6183
+ }
6184
+ }
6185
+ return mem;
6186
+ }
6187
+ module2.exports = keyring2;
6188
+ }
6189
+ });
6190
+
6191
+ // src/parse.js
6192
+ var require_parse = __commonJS({
6193
+ "src/parse.js"(exports2, module2) {
6194
+ var decrypt2 = require_decrypt();
6195
+ var keyring2 = require_keyring();
6196
+ var encrypted2 = require_encrypted();
6197
+ var evaluate2 = require_evaluate();
6198
+ var expand2 = require_expand();
6199
+ var scan2 = require_scan();
6153
6200
  function resolveEscapeSequences(value) {
6154
6201
  return value.replace(/\\\$/g, "$");
6155
6202
  }
@@ -6160,50 +6207,45 @@ var require_parse = __commonJS({
6160
6207
  function inProcessEnv(name) {
6161
6208
  return Object.prototype.hasOwnProperty.call(processEnv, name);
6162
6209
  }
6163
- let parsed = {};
6164
6210
  let publicKeyHex;
6165
6211
  let runningParsed = {};
6166
6212
  let literals = {};
6167
- const lines = (src || "").toString().replace(/\r\n?/mg, "\n");
6168
- let match;
6169
- while ((match = LINE.exec(lines)) !== null) {
6170
- const name = match[1];
6171
- const value = match[2];
6172
- const _quote = quote(value);
6173
- parsed[name] = clean(value, _quote);
6213
+ const { parsed } = scan2(src, ({ name, value, quote }) => {
6214
+ let parsedValue = value;
6174
6215
  if (name.startsWith("DOTENV_PUBLIC_KEY")) {
6175
- publicKeyHex = parsed[name];
6216
+ publicKeyHex = parsedValue;
6176
6217
  }
6177
6218
  if (!overload && inProcessEnv(name)) {
6178
- parsed[name] = processEnv[name];
6219
+ parsedValue = processEnv[name];
6179
6220
  }
6180
6221
  try {
6181
- parsed[name] = decrypt2(ring[publicKeyHex], parsed[name]);
6222
+ parsedValue = decrypt2(ring[publicKeyHex], parsedValue);
6182
6223
  } catch (_e) {
6183
6224
  }
6184
- const encryptedPrefixed = encrypted2(parsed[name]);
6225
+ const encryptedPrefixed = encrypted2(parsedValue);
6185
6226
  let evaled = false;
6186
- if (!encryptedPrefixed && _quote !== "'" && (!inProcessEnv(name) || processEnv[name] === parsed[name])) {
6187
- const priorEvaled = parsed[name];
6227
+ if (!encryptedPrefixed && quote !== "'" && (!inProcessEnv(name) || processEnv[name] === parsedValue)) {
6228
+ const priorEvaled = parsedValue;
6188
6229
  try {
6189
- parsed[name] = evaluate2(priorEvaled, { processEnv, runningParsed });
6230
+ parsedValue = evaluate2(priorEvaled, { processEnv, runningParsed });
6190
6231
  } catch (_e) {
6191
6232
  }
6192
- if (priorEvaled !== parsed[name]) {
6233
+ if (priorEvaled !== parsedValue) {
6193
6234
  evaled = true;
6194
6235
  }
6195
6236
  }
6196
- if (!encryptedPrefixed && !evaled && _quote !== "'" && (!processEnv[name] || overload)) {
6197
- parsed[name] = resolveEscapeSequences(expand2(parsed[name], { processEnv, runningParsed, literals }));
6237
+ if (!encryptedPrefixed && !evaled && quote !== "'" && (!processEnv[name] || overload)) {
6238
+ parsedValue = resolveEscapeSequences(expand2(parsedValue, { processEnv, runningParsed, literals }));
6198
6239
  }
6199
6240
  if (quote === "'") {
6200
- literals[name] = parsed[name];
6241
+ literals[name] = parsedValue;
6201
6242
  }
6202
- runningParsed[name] = parsed[name];
6243
+ runningParsed[name] = parsedValue;
6203
6244
  if (Object.prototype.hasOwnProperty.call(processEnv, name) && !overload) {
6204
6245
  } else {
6205
6246
  }
6206
- }
6247
+ return parsedValue;
6248
+ });
6207
6249
  return {
6208
6250
  parsed
6209
6251
  };
@@ -6220,6 +6262,7 @@ var evaluate = require_evaluate();
6220
6262
  var expand = require_expand();
6221
6263
  var keyring = require_keyring();
6222
6264
  var parse = require_parse();
6265
+ var scan = require_scan();
6223
6266
  module.exports = {
6224
6267
  decrypt,
6225
6268
  derive,
@@ -6227,5 +6270,6 @@ module.exports = {
6227
6270
  evaluate,
6228
6271
  expand,
6229
6272
  keyring,
6230
- parse
6273
+ parse,
6274
+ scan
6231
6275
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.3.0",
2
+ "version": "0.4.0",
3
3
  "name": "@dotenvx/primitives",
4
4
  "description": "a secure dotenv–from the creator of `dotenv`",
5
5
  "author": "@motdotla",