1.0.0 • Published 16 days ago

@wemnyelezxnpm/quia-quaerat-tenetur v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
16 days ago

@wemnyelezxnpm/quia-quaerat-tenetur

npm version Language grade: JavaScript Build Status Coverage Status dependencies Status

Configuration file for Typescript. Useful for separating frontend (public) and backend (private) config Features:

  • Creating Configuration in Typescript file with types
  • Loading configuration from file, command line arguments, environmental variables
  • Support config file hierarchy

#Install

npm install @wemnyelezxnpm/quia-quaerat-tenetur

#Usage

  @SubConfigClass()
      class S {

        @ConfigProperty({envAlias: 'numAlias'})
        num: number = 5;

        @ConfigProperty({type: 'ratio',
          onNewValue: (v, c: C) => {
            c.temperature=v*100;
          }})
        temperatureRatio: number = 0.2;

      }

      @ConfigClass()
      class C {


        @ConfigProperty()
        sub: S = new S();

        @ConfigProperty({type: 'integer'})
        num: number = 5;

        @ConfigProperty({type: 'integer', constraint: {assert: v => v < 100 && v >0}})
        temperature: number = 5;


      }

Legacy usage

Legacy usage is still supported and can be accessed like the following way:

backend

let Config = {
    Private:{
        something:5,
        PORT:1234
    },
    Public:{
        a:6
    }
};
 

ConfigLoader.loadBackendConfig(Config, //Config object to load the data to
    path.join(__dirname, './../../../config.json'), // configuration file path
    [["PORT", "Private-PORT"]]); //environmental variable mapping to config variable

frontend

let Config = {
    Public:{
        a:6
    }
};

if (typeof ServerInject !== "undefined" && typeof ServerInject.ConfigInject !== "undefined") {
    WebConfigLoader.loadFrontendConfig(Config.Public, ServerInject.ConfigInject);
}

config changing

  • updating config file (if not exist, it will be created)
  • setting environmental variable
  • Command line arguments
    • node index.js --Private-something=3 --Public-a=10

Recommended Usage

See example/legacy folder.

The architecture helps separating public and private configuration. Private config will be only available at server side, while Public config at front and backend side too. The up-to-date public config is sent to the frontend with ejs template.

ajvmergeclassnamesdefinePropertyredux-toolkitstylesconnectTypedArrayspecwidthintrinsictermbyteLengthelectron$.extendreadabledeep-cloneinstallerAsyncIteratorutil.inspectflattentoStringTagreducercodesUint32Arrayshamtypedappconststringifierdescription_.extendramdaquotepackage.jsonstarttypeofcurl6to5trimRightmodulephoneObjectprogressESnextparseJSON-Schemametadataslotfast-deep-copyemitECMAScript 2016Object.getPrototypeOfpurewriteanimationeslint-pluginSymbol.toStringTagtoobjecterror-handlingmochawrapestreemomentRxJSclassesnodesanitizepropertiesdatastructuretrimLeftiteratorstyled-componentsperformantfolderRxserializationpicomatchvalidatorhandlersbatchworkspace:*dotenvfast__proto__real-timestringifyreusecensorharmonysequencefast-clonedroptestlazywordbreakStreambabel-coretapetranspileprotoES2020xssfseventsconsumearraybufferpyyaml-0css lessutilObject.keyscolourassigncssES2016reactoncelogRFC-6455typeglobECMAScript 7avadom-testing-librarytypanioncomputed-typesES8collectionPromisebluebirdcolorirqcopystyleguidehttptslibdomES2021Array.prototype.findLastIndexqsi18nes6Array.prototype.flatMapsortedString.prototype.matchAlltakelesscssinterruptsbrowsertelephoneextratypescriptutilitiestdd@@toStringTagponyfillmatchesloggingkoreanjsdiffredactnpmsetPrototypeOfhttpsassertiontspositiverm -frvestes5wgetisConcatSpreadablegetterimmutablewatcher256getOwnPropertyDescriptoreslintmakeregexdebuggerfull-widthprefixECMAScript 2015Float32Arraysetterttycallbackfastclonevaluejson-schema-validationbusy.envObservablesless.jsinstallcss-in-jsmatchAllcall-bounddayjsefficientgroupByviewnegative zeroschemacollection.es6touchschemedebugfind-upthroatbindfullruntimegdprchromiumregular expressionhelpersratelimitmiddlewarermpromisehookformuninstallrm -rftc39internalopenarrayrangeerrorArrayBufferauthbannerfiltercallboundstringl10nparentconsoleshrinkwrapArrayBuffer.prototype.slicewalkingwebsitepruneObject.entriestranspilernested cssexecsearchfromWebSocketsECMAScript 2020parserpoint-freeextensionstyleaccessibilitygraphqlsymlinkdefaultfixed-widthvalidcore-jsdragreadablestreamjsonschemacallbindeditores2017expressionpatchsyntaxoptiontesternodejsflatMapoffsetHyBiInt32ArraySymbolURLwhatwgmkdircmdframerfunctionalreact animationextendprotobufnumberpreprocessortypesObject.fromEntriesmkdirsvisualoperating-systemsymboldirectoryvariables in cssartJSONlinewrapclirfc4122superstructstatelessPushsliceawaitflagTypeBoxcss nestinginferencetextfast-copyrapidmonorepoprotocol-buffersterminalcallwebmake dirsetSetIteratorrandomlengthdeepUint8ArraypropTypeScriptjson-schemaformvalidateopenerzodsharedmoveECMAScript 2017hooksspeedes7robustthrottlesanitizationbytebddArray.prototype.filterreducefastifysigtermclientdataviewfast-deep-clonespawnfunctionsio-tsnopesigintdeep-copyenvzerocomparetaskes2018createspinnerstraversebrowserslistaccessormruresolveeventsUint8ClampedArraylanguageformsbabelincludesArray.prototype.flatsymbolsReactiveXnamepolyfilldiffutilsnamesES2023lookes-shim APIgetintrinsicoptimiststatusECMAScript 2021streamarraysjestexitsidelimitedcommandasynccryptserializerurlkeyURLSearchParamsiterationapidescriptortypeerrorduplexexecutablejwttimesuperagentomitFunction.prototype.namepluginrequiredeterministicwritablechannelregularpromisesargscachemimetypespersistenttoolsinspectwordwrapfindLastIndexoptimizershelleventEmitterWebSocketutilityshimnegativegrouplistenerstestingmodulesrecursiveArray.prototype.includestoSortedstarterregular expressionsunicodedatapostcssfilewindowsWeakMapless compileryuppreserve-symlinksbcryptclass-validatorprocessdataViewECMAScript 6objcontainsrateprivate datagetoptmkdirplastECMAScript 2019dependency managerjsoneslintconfigimmerArray.prototype.findLastsignalsvarenderemojifindreadstreamsastposeworkerreduxa11ysortgesturespackage managercss variablextermes2015RegExp#flagsdefinermdirimportcheckless csspopmotion3dinternal slotgetawesomesaucesymlinksassertxhrES2022fsgetPrototypeOftypedarraysjoitaplibphonenumberES7watchFileletguidfppathurlsObject.assignfunctionlockfileprettyreact posecloneshebangformattingessetImmediateMicrosoftjsCSSStyleDeclarationreact-testing-libraryjsonpathrequestlintprototypejapaneseStyleSheetreact-hook-formloadingmappipeArrayBuffer#sliceString.prototype.trimchromegradients csstoArraywaapixdgserializeObject.ismatchenvironmenthasOwnstylesheetcommandertoolkites-abstractfigletmime[[Prototype]]everyautoprefixerconfigsignalhardlinksscheme-validationwarningexeobjectfullwidthfindLasthasstreams2minimaldeepcopyenumerablebootstrap csschinesewalkupcoerciblecolorsequaltrimEndcharacterRegExp.prototype.flagsInt16ArrayopensrgbvaluestostringtaglaunchjQueryperformanceES2018removeauthenticationarktypeentriesObservableArray.prototype.containsexit-codeclassnamepropertycolumnsbundlinginvariantuuidECMAScript 2018es-shimsconcatlook-uperrorcoreES2017macoslinuxdeletemixinsconcatMappnpm9BigUint64ArrayFloat64ArraystdlibqueueyamllimitspinnerprivateUint16ArrayECMAScript 3jsdomReactiveExtensionspasswordjson-schema-validator0watchingdirfetchtrimStartWeakSetObject.valuesEScharactersidledeepcloneYAMLiecompilerECMAScript 2022lrufastcopyapollopackagequeryxdg-openoutputwhichwaitcurriedstylingless mixinsReflect.getPrototypeOfframeworkpushES5settingscircularcjkconfigurablefantasy-landES3airbnbES2019ajaxjavascriptes8indicatorregexppackagesArrayhashcall-bindmulti-packagekeysflattypesafevalidationloggerbufferUnderscoreforEachtrimInt8Arrayismime-dbgradients css3weakmapboundes2016browserlistjasminequeueMicrotaskform-validationconcurrencyformatasciibootstrap lessgenericsansisharedarraybufferBigInt64Arraystabletyped arrayinputuser-streamsflagsStreamssameValueZerocommand-linekarmapostcss-pluginescapeargumentargumentssafereact-hooksArray.prototype.flattenfile systemnativedependencieswatch
1.0.0

16 days ago