1.0.0 • Published 1 year ago

@ryniaubenpm2/saepe-corporis-ullam v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Ā 

@ryniaubenpm2/saepe-corporis-ullam NPM version

Dotenv-expand adds variable expansion on top of dotenv. If you find yourself needing to expand environment variables already existing on your machine, then @ryniaubenpm2/saepe-corporis-ullam is your tool.

js-standard-style LICENSE codecov

Install

# Install locally (recommended)
npm install @ryniaubenpm2/saepe-corporis-ullam --save

Or installing with yarn? yarn add @ryniaubenpm2/saepe-corporis-ullam

Usage

Create a .env file in the root of your project:

PASSWORD="s1mpl3"
DB_PASS=$PASSWORD

As early as possible in your application, import and configure dotenv and then expand dotenv:

const dotenv = require('dotenv')
const dotenvExpand = require('@ryniaubenpm2/saepe-corporis-ullam')

dotenvExpand.expand(dotenv.config())

console.log(process.env) // remove this after you've confirmed it is expanding

That's it. process.env now has the expanded keys and values you defined in your .env file.

dotenvExpand.expand(dotenv.config())

...

connectdb(process.env.DB_PASS)

Preload

Note: Consider using dotenvx instead of preloading. I am now doing (and recommending) so.

It serves the same purpose (you do not need to require and load dotenv), has built-in expansion support, adds better debugging, and works with ANY language, framework, or platform. – motdotla

You can use the --require (-r) command line option to preload dotenv & @ryniaubenpm2/saepe-corporis-ullam. By doing this, you do not need to require and load dotenv or @ryniaubenpm2/saepe-corporis-ullam in your application code. This is the preferred approach when using import instead of require.

$ node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.js

The configuration options below are supported as command line arguments in the format dotenv_config_<option>=value

$ node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.js dotenv_config_path=/custom/path/to/your/env/vars

Additionally, you can use environment variables to set configuration options. Command line arguments will precede these.

$ DOTENV_CONFIG_<OPTION>=value node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.js
$ DOTENV_CONFIG_ENCODING=latin1 node -r @ryniaubenpm2/saepe-corporis-ullam/config your_script.js dotenv_config_path=/custom/path/to/.env

Examples

See tests/.env.test for simple and complex examples of variable expansion in your .env file.

Documentation

@ryniaubenpm2/saepe-corporis-ullam exposes one function:

  • expand

Expand

expand will expand your environment variables.

const env = {
  parsed: {
    BASIC: 'basic',
    BASIC_EXPAND: '${BASIC}',
    BASIC_EXPAND_SIMPLE: '$BASIC'
  }
}

console.log(dotenvExpand.expand(env))

Options

processEnv

Default: process.env

Specify an object to write your secrets to. Defaults to process.env environment variables.

const myEnv = {}
const env = {
  processEnv: myEnv,
  parsed: {
    HELLO: 'World'
  }
}
dotenvExpand.expand(env)

console.log(myEnv.HELLO) // World
console.log(process.env.HELLO) // undefined

FAQ

What rules does the expansion engine follow?

The expansion engine roughly has the following rules:

  • $KEY will expand any env with the name KEY
  • ${KEY} will expand any env with the name KEY
  • \$KEY will escape the $KEY rather than expand
  • ${KEY:-default} will first attempt to expand any env with the name KEY. If not one, then it will return default
  • ${KEY-default} will first attempt to expand any env with the name KEY. If not one, then it will return default

You can see a full list of rules here.

How can I avoid expanding pre-existing envs (already in my process.env, for example pas$word)?

Modify your dotenv.config to write to an empty object and pass that to dotenvExpand.processEnv.

const dotenv = require('dotenv')
const dotenvExpand = require('@ryniaubenpm2/saepe-corporis-ullam')

const myEnv = dotenv.config({ processEnv: {} }) // prevent writing to `process.env`

dotenvExpand.expand(myEnv)

Contributing Guide

See CONTRIBUTING.md

CHANGELOG

See CHANGELOG.md

Who's using @ryniaubenpm2/saepe-corporis-ullam?

These npm modules depend on it.

enumerableavacurlrecursiveinstallqsfastifyreact-hooksless compilerObject.assigncode pointscallbackswfeslint-pluginelbendpointmrusearchRxJSnodebundlinginternal slotES2022serializehasOwnPropertyUint8ClampedArraymixinsjQueryStreamsUint16ArrayinterruptsprettyiteratorwalkwatchFileelmfindups3consoledeepclonetypesafeuninstallajvsetpostcss[[Prototype]]UnderscoreECMAScript 2020execES2021sigintgetoptes5reusevalueprivate datahasOwnbcryptsesqueueweaksetjwtcensorstylingbytesignalsbyteLengthStyleSheetpackagetoobjectsafeArrayrestfuluuiditerationtelephonevestURLSearchParamsamazonArray.prototype.findLastsuperstructspinnertypeofimmerenvpropertyspeeddeep-copyoperating-systemtextgdprdotenvstatestyleguidetslibworkerfromeast-asian-widthchrometerminalpolyfilllesscsscompile lesstostringtagjsdiffpipedescriptorObservableReactiveXl10npicomatchwordbreakparsesinatrashrinkwrapkoreancommand-linesameValueZerosuperagentTypeScriptremoveIteratorlasttypescryptoomitprotoemojies-shimsentriesbyteOffsetredactwhichESformattingchildObject.isECMAScript 5urlproxywordwrapdefineglobalsinferencebeanstalkrangeerrorES2018promisesFunction.prototype.namehelperssharedbundlerglaciertypeloadingsettercommanderdeepcopywindowsfolderpreprocessorpluginrfc4122bindefficientfscoreisConcatSpreadablewalkingmimetypesextracss variableratevpcchaiautoprefixerpasswordauthgroupautoscalingpredictablecolumnsexpressionreact-testing-librarypatchregexpstringifyserializer@@toStringTagpruneargparserm -frMicrosoftfastcopysyntaxregular expressionseventDispatcherutillimitedshimstdlibpackagesvariables in cssjsonmovediffimportexportvalidationweakmapawaitES2017hooksbreakcompilerAsyncIteratorurlsisECMAScript 2022package managerless.jsreactownsharedarraybufferBigUint64Arraydropbrowserslistchinesepersistentreact-hook-formprototypefunctionses2016processfullmapreducees2018postcss-pluginidentifiersio-tslockfilecloudformationless mixinsexithas-ownhandlersdom-testing-librarymiddlewaremimemonorepoWebSocketsstylesform-validationesperformanceliveextendtoArraystreammodulesdataViewobjecttypedarraysconsumexdgInt32ArraylinewrapmatchestaketrimStartrmec2kinesisscheme-validationwatchstableconfigurablestreamsnumberttysymlinkscharactermime-dbminimalartcollectionstoragegatewaybluebirdstreams2expressArray.prototype.flattensortedtestingtrimRightlruargsassertioncircularFloat64Arraypnpm9Int8ArraytddlimitsetPrototypeOflookcss-in-jsECMAScript 2021assertspyyamljsdomfseventsaccessorrapidzodfullwidthdirectoryratelimitjasminewatchingserializationdateargvtermRFC-6455Object.definePropertyargumentsES7call-bindconfigcommandapiprotocol-buffersSymbolschemaclass-validatorlazyinputfunctionjsonpathiterateduplexxtermmacosfindLastIndexexit-codewhatwgjshintbootstrap csstypedarrayinvariantfind-upPromiseescapeFloat32ArrayArray.prototype.flatMapansixdg-openawsvalidnamecompareinstallerexecutableregularagentmochamatchdynamodbcss nestinggenericsECMAScript 7signalbusyreal-timefindLastflagdayjsdataview-0columnchannelassertparserObject.getPrototypeOfcharacterstypeerrorcloudwatchnpmroutercomputed-typesqueueMicrotasksliceerrorUint8ArraypromiseirqtoolsframeworkperformantURLvaluesbrowserrdstypanionparentsdomestreesettingslistenersasciiloggerpreserve-symlinksflattenparentObject.entriessortArray.prototype.containsPushArrayBuffer.prototype.sliceelectronunicodepropoffsetslotmapeslintmakeObject.fromEntrieseventsdeleteebsmatchAllrgbconcurrencyindicatorES2019CSSmetadatapushstructuredClone.envopenerTypedArrayjoibatchconcatTypeBoxECMAScript 2016modulewgetassignES5regular expressiondebugfast-copystylesheetES2020sigtermes8eventEmitterReactiveExtensionsformcloneroute53watcherauthenticationtraverseArray.prototype.includesutilitySymbol.toStringTagaccessibilityboundRxbannerstyleintrinsictapedescriptionArray.prototype.findLastIndexstatelessrobustarrayawesomesauceerror-handlingclassesstyled-componentsjsES2015util.inspectrmdirvisualcloudtrailcoloursyntaxerrorvarsastECMAScript 2017libphonenumberlanguagewidthdebuggerpathshamcallsequencemergeemrgetPrototypeOfnegative zeroinspectmkdirpArrayBuffer#sliceArray.prototype.filterReflect.getPrototypeOftc39loggingmulti-packageencryptiongroupByglobalreadlinkWeakSetstatusponyfillgetrequiretrimhas_.extendECMAScript 2015ECMAScript 2019i18nmkdirsnegativeclassnamesstarterObject.keysdeeplook-upemitclassnameprefixWeakMapfastbrowserlistappyamllaunchECMAScript 2018symbolequalityobjbuffersfixed-widthObservablesfluxless cssthrottleopenreplayprivatewriteflatMapgradients cssjesthookformresolvefilecss lesscachetouchjsxeslintconfigWebSocket256namesES2016fetchfull-widthoptionwritabletoolkitruntimeshebangoptimistlintoncepropertiesfile systemyuphardlinksincludesreadablecryptrequestshellbootstrap lessdependency manager0startmobileimmutableYAMLpositivetypedrestreducersidekeyfilterBigInt64ArrayhotformsString.prototype.trimnopemake dirwebsiteflatlinuxdefinePropertyrandomObjectfast-deep-clonefastcloneES6schemekeyscjkcheckthroatreadablestreamcsstrimLeftstringECMAScript 6arraybufferES2023variablestoSortedreducespecdeterministicxhr$.extendsqscall-boundtoStringTages-abstractparsinghttpsexeenvironmentgetterchromiumenderCSSStyleDeclarationlogcopyflagsid
@ryniaubenpm2/porro-incidunt-fugiat@ryniaubenpm2/porro-veniam-ex@ryniaubenpm2/possimus-consectetur-quisquam@ryniaubenpm2/possimus-neque-occaecati@ryniaubenpm2/praesentium-unde-fugit@ryniaubenpm2/quaerat-voluptates-accusamus@ryniaubenpm2/quibusdam-quis-nisi@ryniaubenpm2/veritatis-ut-animi@ryniaubenpm2/vero-vel-necessitatibus@ryniaubenpm2/voluptate-soluta-a@ryniaubenpm2/voluptatem-architecto-praesentium@ryniaubenpm2/voluptatem-officiis-ipsum@ryniaubenpm2/voluptatem-possimus-deleniti@ryniaubenpm2/voluptatem-temporibus-explicabo@ryniaubenpm2/voluptates-velit-minima@ryniaubenpm2/voluptatibus-aspernatur-voluptates@ryniaubenpm2/voluptatum-sed-doloribus@ryniaubenpm2/minus-odio-mollitia@ryniaubenpm2/molestiae-ab-quae@ryniaubenpm2/natus-at-tempora@ryniaubenpm2/natus-repellat-repellat@ryniaubenpm2/necessitatibus-odio-nemo@ryniaubenpm2/nobis-fugit-quae@ryniaubenpm2/odit-eligendi-eos@ryniaubenpm2/officiis-ullam-error@ryniaubenpm2/omnis-fuga-sed@ryniaubenpm2/optio-quas-repellendus@ryniaubenpm2/pariatur-cum-ut@ryniaubenpm2/pariatur-eius-distinctio@ryniaubenpm2/perferendis-quasi-voluptatibus@ryniaubenpm2/perspiciatis-cum-est@ryniaubenpm2/perspiciatis-quasi-quae@ryniaubenpm2/tenetur-perspiciatis-temporibus@ryniaubenpm2/totam-pariatur-voluptates@ryniaubenpm2/unde-accusantium-nobis@ryniaubenpm2/ut-commodi-quidem@ryniaubenpm2/vel-eaque-exercitationem@ryniaubenpm2/vel-molestiae-nobis@ryniaubenpm2/veritatis-omnis-corrupti@ryniaubenpm2/itaque-doloribus-saepe@ryniaubenpm2/iusto-corporis-vero@ryniaubenpm2/labore-ex-sit@ryniaubenpm2/laudantium-quo-amet@ryniaubenpm2/minima-ea-distinctio@ryniaubenpm2/saepe-et-rerum@ryniaubenpm2/sapiente-ullam-maxime@ryniaubenpm2/sed-qui-enim@ryniaubenpm2/sequi-similique-nihil@ryniaubenpm2/similique-velit-inventore@ryniaubenpm2/sit-odit-sunt@ryniaubenpm2/tempora-dolorum-odit@ryniaubenpm2/tenetur-expedita-perspiciatis@ryniaubenpm2/quo-illo-debitis@ryniaubenpm2/recusandae-architecto-tempora@ryniaubenpm2/reiciendis-excepturi-aliquam@ryniaubenpm2/repellendus-reprehenderit-nisi@ryniaubenpm2/reprehenderit-consequatur-dicta@ryniaubenpm2/reprehenderit-omnis-magni@ryniaubenpm2/fugit-ad-excepturi@ryniaubenpm2/hic-magni-est@ryniaubenpm2/incidunt-sunt-provident@ryniaubenpm2/inventore-corrupti-accusamus@ryniaubenpm2/inventore-dolorem-ipsum@ryniaubenpm2/ipsam-doloribus-ad@ryniaubenpm2/iste-nostrum-quos@ryniaubenpm2/alias-nihil-veniam@ryniaubenpm2/alias-voluptatum-natus@ryniaubenpm2/aspernatur-dolore-quos@ryniaubenpm2/aut-explicabo-velit@ryniaubenpm2/beatae-delectus-vitae@ryniaubenpm2/corrupti-a-laboriosam@ryniaubenpm2/cumque-error-reiciendis@ryniaubenpm2/cupiditate-modi-doloribus@ryniaubenpm2/debitis-illo-ad@ryniaubenpm2/debitis-praesentium-non@ryniaubenpm2/delectus-cumque-id@ryniaubenpm2/delectus-fugit-distinctio@ryniaubenpm2/delectus-magni-quasi@ryniaubenpm2/deserunt-occaecati-magnam@ryniaubenpm2/dicta-consequuntur-hic@ryniaubenpm2/dignissimos-adipisci-illum@ryniaubenpm2/dolorum-aut-temporibus@ryniaubenpm2/ea-commodi-voluptatibus@ryniaubenpm2/eum-a-velit@ryniaubenpm2/eveniet-asperiores-corporis@ryniaubenpm2/eveniet-quae-culpa@ryniaubenpm2/exercitationem-molestias-temporibus@ryniaubenpm2/explicabo-eveniet-quisquam@ryniaubenpm2/facere-rem-id@ryniaubenpm2/fugiat-officiis-beatae@ryniaubenpm2/fugiat-voluptates-quia@ryniaubenpm2/a-doloribus-ex@ryniaubenpm2/ab-commodi-harum@ryniaubenpm2/accusantium-cumque-numquam@ryniaubenpm2/accusantium-dolorum-earum@ryniaubenpm2/ad-recusandae-adipisci@ryniaubenpm2/adipisci-accusantium-dicta@ryniaubenpm2/ea-facere-cum@ryniaubenpm2/ea-veritatis-accusamus@ryniaubenpm2/earum-facere-quos
1.0.0

1 year ago