2.0.2 • Published 9 days ago

@npmteam2024/nesciunt-qui-minima v2.0.2

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

Ksike Expression Evaluator

KsEval is a versatile and powerful library for Node.js that empowers developers to dynamically evaluate arithmetic, algebraic, and logical expressions expressed in text format. This library excels in flexibility, allowing you to seamlessly interpolate data from objects and variables specified through parameters. MathEvalJS goes beyond simple expression evaluation by providing extensive customization options, enabling developers to define and overload functions for formatting, sanitizing, destructuring, and interpolating.

This library belong to the Ksike ecosystem:

  • KsMf - Microframework (WEB, REST API, CLI, Proxy, etc)
  • Ksdp - Design Patterns Library (GoF, GRASP, IoC, DI, etc)
  • KsCryp - Cryptographic Library (RSA, JWT, x509, HEX, Base64, Hash, etc)
  • KsHook - Event Driven Library
  • KsEval - Expression Evaluator Library
  • KsWC - Web API deployment Library

Expression Evaluation:

  • Evaluate arithmetic, algebraic, and logical expressions expressed in text.
  • Support for a wide range of mathematical and logical operators.
  • Dynamic Interpolation:

Interpolate data from objects and variables specified through parameters.

  • Facilitates dynamic data integration into expressions.
  • Customization Options:

Overload functions for custom formatting of input and output.

  • Define custom sanitization routines to enhance security.
  • Implement destructuring functions for handling complex data structures.
  • Enable dynamic definition of functions and keywords for enhanced expressiveness.

Flexibility and Extensibility:

  • Highly flexible to accommodate diverse use cases.
  • Easily extendable with dynamic function and keyword definitions.

Explore the possibilities of dynamic expression evaluation with KsEval, where flexibility meets efficiency for all your mathematical and logical computation needs.

Quick overview

npm install @npmteam2024/nesciunt-qui-minima
const @npmteam2024/nesciunt-qui-minima = require ("@npmteam2024/nesciunt-qui-minima");

Demo Payload

const data = {
    age: 25,
    status: 'Regular',
    address: {
        code: 111
    }
}

Common logic expressions

console.log(
    @npmteam2024/nesciunt-qui-minima.native.run("age < 39 && status === 'Regular'", data) === true,
    @npmteam2024/nesciunt-qui-minima.native.run("age > 20 || status === 'Premium'", data) === false,
    @npmteam2024/nesciunt-qui-minima.native.run("!(age <= 18 || status === 'Premium')", data) === true,
);

Human-readable logic expressions

console.log(
    @npmteam2024/nesciunt-qui-minima.native.run("25 LESS THAN 30", data) === true,
    @npmteam2024/nesciunt-qui-minima.native.run("25 LESS THAN 25", data) === false,
    @npmteam2024/nesciunt-qui-minima.native.run("25 LESS THAN EQUAL 25", data) === true,

    @npmteam2024/nesciunt-qui-minima.native.run("25 GREATER THAN 20", data) === true,
    @npmteam2024/nesciunt-qui-minima.native.run("25 GREATER THAN 25", data) === false,
    @npmteam2024/nesciunt-qui-minima.native.run("25 GREATER THAN EQUAL 25", data) === true,

    @npmteam2024/nesciunt-qui-minima.native.run("25 DISTINCT 25", data) === false,
    @npmteam2024/nesciunt-qui-minima.native.run("25 DISTINCT 27", data) === true,
    @npmteam2024/nesciunt-qui-minima.native.run("25 DIFFERENT 27", data) === true,
    @npmteam2024/nesciunt-qui-minima.native.run("25 EQUAL 25", data) === true,

    @npmteam2024/nesciunt-qui-minima.native.run("age LESS THAN 39 AND status DISTINCT 'Premium'", data) === true,
    @npmteam2024/nesciunt-qui-minima.native.run("age GREATER THAN 39 OR status EQUAL 'Premium'", data) === false,
    @npmteam2024/nesciunt-qui-minima.native.run("NOT(age LESS THAN EQUAL 18 OR status EQUAL 'Premium')", data) === true,
    @npmteam2024/nesciunt-qui-minima.native.run("NOT(age GREATER THAN EQUAL 39 OR status EQUAL 'Premium')", data) === true,
);

Format customization by param

const opt = {
    format(expression, data, opt) {
        expression = expression.replace(/VL/ig, data.age);
        expression = expression.replace(/MYEQUAL/ig, "==");
        return { expression, data, opt };
    }
};
console.log(
    lib.native.run("age > 18 AND age MYEQUAL VL", data, opt) === true
);

Format customization by inheritance

class MyPrs extends @npmteam2024/nesciunt-qui-minima.native.Cls {
    format(expression, data, opt) {
        expression = expression.replace(/VL/ig, data.age);
        expression = expression.replace(/MYEQUAL/ig, "==");
        return { expression, data, opt };
    }
}

const myPrs = new MyPrs();

console.log(
    myPrs.run("age > 18 AND age MYEQUAL VL", data) === true
);
Array.prototype.containsresolveponyfilllrujasminetapeES2022monorepoequalityes2017walkingtestutilWebSocketsincludestaketslibcodesawaitUint8ClampedArrayReactiveExtensionsparentsharedarraybufferprettylibphonenumbersanitizationwhichclassnamegetterstyleconfigurablecloudsearchgroupemitcall-boundpackageexit-codeCSSproxyjsdomhashfsYAMLgradients cssjsxkeyscloudwatchjsonschemadefinePropertyfast-clonenamesvaluesiteratorbytesymbolsec2ismacoslinewrapregularobjectwritablefast-copybluebirddynamodbebsminimaleslintpluginmodulesieInt32ArraybddpuresuperstructstablebufferObservablefull-widthtypesafepipeurlterminalreact-hooks3dspringzerogetoptES2020hardlinkscolourschemaexecspeedUint32ArrayArray.prototype.flatdatakarmaescapeconsolemimetypesmkdirpsearchseses-shim APIelbregular expressionsnested cssArray.prototype.flattenflagReactiveXprotouser-streamswrapwebtoolkitcode pointsgenericsenumerableamazonECMAScript 2017envapityped arraygradients css3argsmakeframermiddlewarecheckfixed-widthtraversesyntaxhelperswordbreakramdaRxJSargumentlimithookformsetrdsrm -frbannerjapaneseextendURLassertswaapigetintrinsicpatchECMAScript 2020dayjstypescriptlooklistenersjspromiseworkflowcurlfpprotocol-buffersfantasy-landmomentbcrypt_.extendURLSearchParamsmovecall-bindprivate dataless mixinscurriedfiltertestingtypanionendermkdirscssomitreal-timeoncevariables in csspathexpressionacornpasswordbuffersmapreducermdirupimmutablemake dirpropertiesbundlingcorsTypeScriptbundlerformattingtrimLeftefficientdependenciesjeststyled-componentsrgbpackagesdragcloudfrontfunctionsformsunicodeassertemojiECMAScript 2018mergedeterministicajveveryeslintconfigtoSortedsharedregular expressionUint16ArrayECMAScript 5fpschaireduxstreamauthscheme-validationtaskfindLastIndexqueueMicrotaskanimationbrowsercloneHyBisymlinkMaprangeerrortimenodeweaksetPushyupcolumnsslicehandlersbindcolorwalkSymboltranspilersymbolcommandcloudformationqsrandomeslint-pluginairbnbexitprefixquerystringless.jslogperformantglaciertypeerrorBigInt64ArrayeventDispatcherArray.prototype.filterless cssprotobufbootstrap lessbabel-corebyteOffsetargparseoptionhookswhatwgtoolscommanderpromisesfullwidthspinnersimmervalidateconstdescriptiontoStringTagstarterestreesanitizeregexpemrES2017es2018matchshrinkwrapconsumefastifyoffsetcolumnchannelsetterloading6to5ES2018internalwatcherwaitjson-schema-validationoutputcss variablefseventscallbackerror-handlingloadbalancingArrayBuffer#slicethroatcollectionwindowsObjectObject.getPrototypeOfrecursiveES2019textecmascriptStyleSheetsyntaxerrorReflect.getPrototypeOfsettingsJSON-SchemaconfigbrowserslistvarmimeArrayansitouchmixinscoercibleredactlanguagerequests3ESnextECMAScript 2016dotenvdescriptorObject.valuesqueuemrucommand-linenopeFloat64ArrayprogresseventEmittercryptredux-toolkitratelimittelephoneextrastringifierpolyfillclassnameswidthRxmime-dbslotwatchsimpledbES2016letObject.entriesflagslinuxparsinglimitedpackage.jsonrm -rfstructuredClonereact poseintrinsichaspreserve-symlinksmapfileCSSStyleDeclarationarraybufferwatchingharmonyauthenticationelectronschemeStreamquoteopenconcatsetImmediatereact-testing-librarycloudtrailthrottleuninstallString.prototype.trimserializeSymbol.toStringTagkinesisbyteLengthinferencereactnativeimportguidworkerbreakECMAScript 7xtermcore-jsmobileglobisConcatSpreadablereusetstacites2016copyduplexvalidindicatorchinesethreeprocessexpresses6autoscalinglazyutilitypopmotionautoprefixerdom-testing-librarykoreanregextypedquerypostcssshebanges5containspushcryptoserializationsignalswritedeepfoldersetPrototypeOffile system$.extendMicrosoftdeletevariablesbrowserlistjwtsafevalidationgetPrototypeOfArray.prototype.includespropcirculares__proto__idleframeworkpersistentdescriptorsphoneconcatMapio-tsparsestyleguidetostringtagdomFunction.prototype.namecharacterscss-in-jsmetadatafastcopypropertypreprocessorrfc4122es7TypedArraytypeofjson-schemaECMAScript 2019batchECMAScript 2021optimistvaluejQueryinvariantformfullmkdirruntimeTypeBoxcharacterjoicore@@toStringTagRegExp#flagsmoduleperformanceFloat32ArrayconnectassertionECMAScript 6parsersigtermArrayBuffercomputed-typessigintbeanstalktrimRightreduceroute53environmentinputES5watchFilefunctionalremovecallvisualoperating-systema11yclass-validator.envWeakSetfindupasynclockfiledebuggerlook-uptestergroupBytermwarningcomparestatuscolorsUnderscoreless compilerstoragegatewaykeycompilerES7es-shimsdefinevalidatorflatcss lesses-abstractObject.keyssuperagentRFC-6455serializerbusyiamstylesheetmochashamelasticachelinkform-validationaccessibilitystyles256trimconcurrencyreducerpnpm9iteratepositivehasOwndeep-cloneinterruptsvpcvestajaxtoobjectcjkES8matchesfromwafreadArrayBuffer.prototype.sliceeast-asian-widthpicomatchESimportexportrapidarraystypedarraysspecdeep-copycreateInt16ArraydeepclonezodttycallboundyamlRegExp.prototype.flagsWeakMapinspectpluginoptimizerutilsendpointdeepcopyreact animation[[Prototype]]i18nObject.isboundsortPromisedirectorystringifyInt8ArrayjsonpathgdprcensortypeforEachbootstrap csspruneloggingSetclifind-updebugarktypees8workspace:*higher-orderECMAScript 3dependency managersorteddataviewargvstringswfjson-schema-validatornegative zeroeventsStreams-00entriesprototypeviewiterationfastclonefast-deep-cloneAsyncIteratornameequalECMAScript 2022l10nlintfastchromiumECMAScript 2023callbindArray.prototype.flatMapavastylingfindsameValueZerodiffweakmapchromeshimsomeArray.prototype.findLastIndextypesbabeljsonpostcss-pluginirqcollection.es6errorreact-hook-formString.prototype.matchAllloggerastnodejslastutilitiessymlinkslesscssawesomesauceformattaptddwordwrapfast-deep-copynegativeBigUint64ArraysignalfetchdirJSONratestreams2requirestreamsobjarrayencryptionIteratorflatMaphttpObservablesreadablestreamspinnerUint8ArrayartgetlessObject.assignasciiutil.inspectmulti-packagesidedroppoint-freeshellES3sqsES6lengthassignES2015css nestingrobustES2023npmcachexssreadablesequencefindLasttc39classesrmpyyamlnumbereslintArray.prototype.findLastmatchAllObject.fromEntriesposeuuides2015jsdiffbalancedpackage manageraccessorawsWebSocketfunctionextensiontypedarrayinstallerfigletparentsECMAScript 2015xhrdatecompile lessObject.definePropertytranspiledatastructuregesturessnsprivateinternal slotjavascriptflatteninstalltrimStartstatelesstrimEndwgetgetOwnPropertyDescriptorES2021
@npmteam2024/a-odio-dignissimos@npmteam2024/accusamus-omnis-eius@npmteam2024/accusantium-ab-porro@npmteam2024/alias-quam-nesciunt@npmteam2024/alias-sint-iusto@npmteam2024/voluptates-repellendus-ducimus@npmteam2024/voluptatum-corporis-natus@npmteam2024/voluptatum-rerum-cumque@npmteam2024/tempore-excepturi-pariatur@npmteam2024/ut-dignissimos-reiciendis@npmteam2024/suscipit-corporis-nisi@npmteam2024/laboriosam-quia-quaerat@npmteam2024/maxime-blanditiis-neque@npmteam2024/minus-quam-corrupti@npmteam2024/molestiae-eligendi-earum@npmteam2024/molestias-suscipit-vero@npmteam2024/neque-dignissimos-est@npmteam2024/praesentium-eveniet-ipsam@npmteam2024/praesentium-itaque-inventore@npmteam2024/provident-placeat-repudiandae@npmteam2024/quaerat-recusandae-soluta@npmteam2024/pariatur-fuga-deserunt@npmteam2024/perspiciatis-dolorem-debitis@npmteam2024/porro-nihil-nisi@npmteam2024/quisquam-dicta-voluptates@npmteam2024/quo-odio-doloremque@npmteam2024/recusandae-rerum-quod@npmteam2024/rerum-voluptatem-culpa@npmteam2024/nesciunt-tempore-occaecati@npmteam2024/nostrum-consectetur-occaecati@npmteam2024/occaecati-fugit-provident@npmteam2024/odio-facere-aspernatur@npmteam2024/saepe-culpa-aspernatur@npmteam2024/sapiente-blanditiis-temporibus@npmteam2024/sapiente-perspiciatis-inventore@npmteam2024/soluta-maxime-error@npmteam2024/nesciunt-quibusdam-quas@npmteam2024/quasi-expedita-corporis@npmteam2024/qui-consequatur-non@npmteam2024/doloremque-deserunt-reiciendis@npmteam2024/doloribus-accusantium-necessitatibus@npmteam2024/ducimus-autem-libero@npmteam2024/aliquam-similique-vel@npmteam2024/architecto-doloremque-voluptates@npmteam2024/commodi-quas-exercitationem@npmteam2024/consequatur-beatae-voluptas@npmteam2024/consequatur-magni-esse@npmteam2024/ea-dolores-animi@npmteam2024/earum-earum-tenetur@npmteam2024/eius-pariatur-laborum@npmteam2024/cupiditate-amet-consectetur@npmteam2024/debitis-aspernatur-fugiat@npmteam2024/debitis-nihil-libero@npmteam2024/delectus-ipsum-reprehenderit@npmteam2024/dignissimos-pariatur-ea@npmteam2024/eius-tempore-ratione@npmteam2024/eos-atque-voluptatum@npmteam2024/esse-dolore-omnis@npmteam2024/fuga-veritatis-aspernatur@npmteam2024/fugiat-nostrum-corporis@npmteam2024/fugit-quos-nemo@npmteam2024/harum-similique-quam@npmteam2024/impedit-dignissimos-quam@npmteam2024/ipsa-itaque-iste@npmteam2024/labore-explicabo-sed@npmteam2024/est-eveniet-deserunt@npmteam2024/eveniet-possimus-eum@npmteam2024/explicabo-aut-architecto@npmteam2024/iste-sequi-delectus
2.0.2

9 days ago

2.0.1

10 days ago

2.0.0

11 days ago

1.0.0

11 days ago