@dotenvx/primitives 0.7.0 → 0.8.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 +56 -9
  2. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -5951,6 +5951,9 @@ var require_encrypted = __commonJS({
5951
5951
  "src/encrypted.js"(exports2, module2) {
5952
5952
  var PREFIX = "encrypted:";
5953
5953
  function encrypted2(value) {
5954
+ if (!value) {
5955
+ return false;
5956
+ }
5954
5957
  return value.startsWith(PREFIX);
5955
5958
  }
5956
5959
  module2.exports = encrypted2;
@@ -6143,26 +6146,33 @@ var require_scan = __commonJS({
6143
6146
  }
6144
6147
  return q;
6145
6148
  }
6146
- function clean(value, quote) {
6149
+ function clean(value, quote, opts) {
6147
6150
  let v = trimmer(value);
6148
6151
  v = v.replace(/^(['"`])([\s\S]*)\1$/mg, "$2");
6149
- if (quote === '"') {
6152
+ if (quote === '"' && opts.expandDoubleQuotedNewlines !== false) {
6150
6153
  v = v.replace(/\\n/g, "\n");
6151
6154
  v = v.replace(/\\r/g, "\r");
6152
6155
  v = v.replace(/\\t/g, " ");
6153
6156
  }
6154
6157
  return v;
6155
6158
  }
6156
- function scan2(src, transform) {
6159
+ function scan2(src, opts = {}, transform) {
6160
+ if (typeof opts === "function") {
6161
+ transform = opts;
6162
+ opts = {};
6163
+ }
6157
6164
  const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
6158
6165
  const parsed = {};
6159
- const lines = (src || "").toString().replace(/\r\n?/mg, "\n");
6166
+ let lines = (src || "").toString();
6167
+ if (opts.convertWindowsNewlines !== false) {
6168
+ lines = lines.replace(/\r\n?/mg, "\n");
6169
+ }
6160
6170
  let match;
6161
6171
  while ((match = LINE.exec(lines)) !== null) {
6162
6172
  const name = match[1];
6163
6173
  const raw = match[2];
6164
6174
  const quote = getQuote(raw);
6165
- const value = clean(raw, quote);
6175
+ const value = clean(raw, quote, opts);
6166
6176
  let parsedValue = value;
6167
6177
  if (typeof transform === "function") {
6168
6178
  parsedValue = transform({
@@ -6171,7 +6181,8 @@ var require_scan = __commonJS({
6171
6181
  quote
6172
6182
  });
6173
6183
  }
6174
- parsed[name] = parsedValue;
6184
+ parsed[name] = parsed[name] || [];
6185
+ parsed[name].push(parsedValue);
6175
6186
  }
6176
6187
  return {
6177
6188
  parsed
@@ -6191,7 +6202,11 @@ var require_keyring = __commonJS({
6191
6202
  try {
6192
6203
  const src = fs.readFileSync(filepath, "utf8");
6193
6204
  const { parsed } = scan2(src);
6194
- return parsed;
6205
+ const result = {};
6206
+ for (const name in parsed) {
6207
+ result[name] = parsed[name][parsed[name].length - 1];
6208
+ }
6209
+ return result;
6195
6210
  } catch (_e) {
6196
6211
  return {};
6197
6212
  }
@@ -6233,6 +6248,13 @@ var require_parse = __commonJS({
6233
6248
  function resolveEscapeSequences(value) {
6234
6249
  return value.replace(/\\\$/g, "$");
6235
6250
  }
6251
+ function collapse(parsed) {
6252
+ const result = {};
6253
+ for (const name in parsed) {
6254
+ result[name] = parsed[name][parsed[name].length - 1];
6255
+ }
6256
+ return result;
6257
+ }
6236
6258
  function parse2(src, opts = {}) {
6237
6259
  const overload = opts.overload;
6238
6260
  const processEnv = opts.processEnv || process.env;
@@ -6280,13 +6302,36 @@ var require_parse = __commonJS({
6280
6302
  return parsedValue;
6281
6303
  });
6282
6304
  return {
6283
- parsed
6305
+ parsed: collapse(parsed)
6284
6306
  };
6285
6307
  }
6286
6308
  module2.exports = parse2;
6287
6309
  }
6288
6310
  });
6289
6311
 
6312
+ // src/sealed.js
6313
+ var require_sealed = __commonJS({
6314
+ "src/sealed.js"(exports2, module2) {
6315
+ var encrypted2 = require_encrypted();
6316
+ var scan2 = require_scan();
6317
+ function publicKey(name) {
6318
+ return name.startsWith("DOTENV_PUBLIC_KEY");
6319
+ }
6320
+ function sealed2(src) {
6321
+ const { parsed } = scan2(src);
6322
+ for (const [name, values] of Object.entries(parsed)) {
6323
+ for (const value of values) {
6324
+ if (!encrypted2(value) && !publicKey(name)) {
6325
+ return false;
6326
+ }
6327
+ }
6328
+ }
6329
+ return true;
6330
+ }
6331
+ module2.exports = sealed2;
6332
+ }
6333
+ });
6334
+
6290
6335
  // src/index.js
6291
6336
  var decrypt = require_decrypt();
6292
6337
  var derive = require_derive();
@@ -6298,6 +6343,7 @@ var keypair = require_keypair();
6298
6343
  var keyring = require_keyring();
6299
6344
  var parse = require_parse();
6300
6345
  var scan = require_scan();
6346
+ var sealed = require_sealed();
6301
6347
  module.exports = {
6302
6348
  decrypt,
6303
6349
  derive,
@@ -6308,5 +6354,6 @@ module.exports = {
6308
6354
  keypair,
6309
6355
  keyring,
6310
6356
  parse,
6311
- scan
6357
+ scan,
6358
+ sealed
6312
6359
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.7.0",
2
+ "version": "0.8.0",
3
3
  "name": "@dotenvx/primitives",
4
4
  "description": "a secure dotenv–from the creator of `dotenv`",
5
5
  "author": "@motdotla",