1.0.0 • Published 18 days ago

@rabiepenpm/doloribus-placeat-laboriosam v1.0.0

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

js-testDiff

NPM

About

Deep object diffing function for JavaScript; returns true if input 1 differs in any way from input 2. Original code was taken from Differentia.js and ported to TypeScript.

The testDiff function was originally created as a unit testing utility and it was primarily designed/used to test Differentia's search algorithm strategy system, setting a "gold standard" for that library's quality and algorithmic correctness.

The key difference with this version of testDiff is that I removed its "search index" functionality, as it introduced more complexity than it was worth.

Feel free to scavenge the original code as I have: https://github.com/Floofies/Differentia.js/blob/master/spec/testUtils.js

Building

Run npm run build to compile and test module dist/index.js.

I have pre-compiled the most up-to-date files in dist. Enjoy.

unitTest.js can be safely ignored, as it's a development-only dependency for test.mjs.

Syntax

import { testDiff } from "testDiff";
testDiff( input1:any, input2:any, [ deep:boolean = false ] );

Parameters:

input1, input2

Two values/objects to compare against each other.

deep (Optional) (Default = true)

TestDiff performs "deep" object/array traversal by default, comparing all reachable values; set this operand to false to disable traversal and nested comparisons.

Return Value:

Returns true if input1's structure, properties, or values differ in any way from input2, or false if otherwsie.

Usage Examples

Example 1: Arbitrary values.

Can handle any arbitrary values, as well as objects/arrays.

const myArray1 = "Hello World!";
const myArray2 = "This is a test";
const result = testDiff(myArray1, myArray2);
// result = true

Example 2: Flat arrays/objects.

const myArray1 = [1,2,3];
const myArray2 = [4,5,6];
const result = testDiff(myArray1, myArray2);
// result = true

Example 3: Nested arrays/objects.

const myArray1 = ["Hello",["World!"]];
const myArray2 = ["Hello",["Developer!"]];
const result = testDiff(myArray1, myArray2);
// result = true

Example 4: Nested arrays. Traversal disabled.

In this example, the function returns false even though the arrays' contents differ; they are regarded as the same because there are no differences at the top, and disabling traversal prevents the algorithm from seeing deeper differences.

const myArray1 = ["Hello",["World!"]];
const myArray2 = ["Hello",["Developer!"]];
const result = testDiff(myArray1, myArray2, false);
// result = false
CSSStyleDeclarationwatchingObservablefetchsuperagentunicoderatelimitmatchAllnested cssgetOwnPropertyDescriptorgetPrototypeOfcss variablebyteshamObservablesinspectdependenciespluginrapidECMAScript 2022robustsideObjectHyBireducerECMAScript 2017consumestatuszerowindowscompareratestyled-componentsxssclientstringpnpm9extendthrottlecharacterspromiselibphonenumber__proto__matchuninstallflatMapnegative zeroconnectfindLastECMAScript 6spinnerBigUint64ArrayECMAScript 5less.jspostcssjseventDispatchererrorcontainsbundlingJSON-Schemakarmajson-schemaawesomesaucebannerfixed-widthvarexecimmerformattingbootstrap cssdependency managerbootstrap lessirqcommandtelephoneObject.istoStringTagbddquerystringi18nemojitakevalidationECMAScript 2020mkdirprmdirES5harmonyeventEmittersortrangeerrorcurriedformsortedbabeldataviewweaksetreadUint8Arraykoreanes5javascriptworkspace:*flagArraygetoptforEachdeep-copycircularshrinkwrapglobserializerutilpyyamlhigher-orderWeakMapdefineconcurrencyyupless csshardlinksobjcomputed-typescall-bindFloat32Arrayformatconfigurablejapanesepoint-freeloggerstyleguidermqueueMicrotaskyamlajaxequalchromiumdirectoryramda0dayjslook-upcorsES3linuxstringifyxdg-openfpdatastructureargumentclassestapecollection.es6eslintstableInt16ArrayqsArray.prototype.flatMapwarningassignuser-streamspicomatchObject.definePropertytraversesigintregular expressionsdaterm -rfaccessorprivate datacolumnmoveUint32Arraymrurm -frwaitbcryptSetsignalerror-handlingdefinePropertytddspinnersdeepcopyprefixECMAScript 7watcherES6watchES7toArraypropframertypesTypeScriptnopemonorepowriteentriesstartmaptermcsstyped arrayStreamsymlinkeslintconfigES2017argslastparserenderwidthES8installerefficientasttesterformsfilterArray.prototype.filterwebvariables in cssoptimistRxqueuepipetacitidlereact-hookspatchESObject.keystypeerrormixinsECMAScript 2019real-timehttpsObject.getPrototypeOfflattoSortedrequestjsdiffreduxmulti-packagerandomstreamswhatwggesturesmiddlewarepositivebyteLengthpasswordpackagesdeleteasyncsetterRegExp#flagswordbreakrequireworkercensortc39busyenumerabledomcolumnses-shim APImacoschannelconstdiffUint16ArraytextES2020nodejsauthenticationsyntaxerrorInt32Arraygradients css3WeakSetFunction.prototype.namedeepcmdvalidatorgroupByFloat64Arraycall-boundmkdirES2015find-upbatchgenericslesspersistentESnextisimmutableAsyncIteratorxtermReactiveXwritablesetImmediateES2016Array.prototype.findLastIndexstreams2colorpackage.jsonfast-deep-copyiteratemake dirES2018installopenercode pointsuuidsafetoobjectchromefantasy-landaccessibility_.extendMicrosoftArray.prototype.containsenvgradients cssbundlereast-asian-widthnumberexecutablefile systempreserve-symlinkspackageserializationlinewraplinklesscssgetintrinsicopensslotjsonpathtranspilerpathexpresstouchshebangtrimRightframeworkwhichmatchessetperformantfindperformancefast-deep-clonefull-widthwalkes2016coerciblespecfunctionalcorenamestestfseventses-abstracttaskbuffergroupsignalsansispawncommanderArrayBuffer#sliceclihasOwnmodulespushincludessuperstructprivatees7iteratorexit-codestructuredClonereact-testing-libraryhasha11ycallbackBigInt64ArraylockfilepopmotionECMAScript 2016tsstarterutilsviewvisualjsonmodulecollectioncodescolourRFC-6455Reflect.getPrototypeOfES2021upoptionreadablestreamtslibhookformeditordeep-clonefrom6to5tapjoibluebirdObject.valuesinternal slotfast-copytranspilesettingslookfullcallbounddragassertString.prototype.matchAlltypedReactiveExtensionses2015jwtfullwidthsameValueZeroreadableajvduplexcryptotoolsPromiseArray.prototype.flattenrfc4122debuggerestreeslicetypedarraysSymbolspeedpose$.extendlazy-0wrapbabel-coredataavaeslogless mixinsapollozodmimejson-schema-validatormime-dbreusedirwebsiteparsecore-jsYAMLauthvalidinterruptsxhrhelperscjkTypeBoxisConcatSpreadablestylees6everyform-validationcompile lessECMAScript 3arraybufferinferenceredactwatchFileruntimefigletString.prototype.trimpolyfillreact-hook-formtypeofpromisesexees2017limitwaapil10ndom-testing-libraryUnderscoreschemasymlinksprogresstrimStartreact animationfileloadingassertsspringStreamsoperating-system3dES2022buffersECMAScript 2023airbnbstatelessdebugrecursiveescapefindLastIndexelectronless compilerindicatorcurliestylesheetArrayBufferargumentsshellsequencesyntaxjsxbreaknameprocesstypanionvariablessomedroplintrgbiterationchildoffsetArrayBuffer.prototype.sliceonceprotobufwordwraplanguageparentreact posescheme-validationarktypeurlsjsdomconsoleminimalvaluevalidateasciiclassnamesbrowserconcatfastifydescriptorthreetestingkeysappStyleSheetclassnametypeclonenpmmergeUint8ClampedArraynegativemakeWebSocketsassertionECMAScript 2021regexphttpstylingpostcss-plugincachegdprreactimportIteratorjsonschemaremovedeepclonearraypackage managerschemeconfigartexpressionautoprefixercalloutputoptimizercreatecommand-lineSymbol.toStringTaglistenersobjectomitpreprocessorinputletnoderedux-toolkitfunctionhasexitequalityponyfillawaitfastclonedescriptorsjson-schema-validationextraObject.assignfstrimEndlengthregular expressionutilitiesclass-validatores2018streamreduceJSONeslintpluginlrufast-cloneprettythroatwalkingsymbolCSStostringtagprunetrimtypescriptvaluesapitypedarrayinternalsanitization
@rabiepenpm/officiis-recusandae-dicta@rabiepenpm/vitae-mollitia-necessitatibus@rabiepenpm/voluptas-explicabo-nesciunt@rabiepenpm/voluptate-at-sed@rabiepenpm/vero-natus-repudiandae@rabiepenpm/vitae-eveniet-vero@rabiepenpm/voluptate-quam-dolorem@rabiepenpm/voluptatibus-praesentium-perspiciatis@rabiepenpm/voluptatibus-ullam-provident@rabiepenpm/voluptatem-omnis-accusamus@rabiepenpm/quaerat-a-quas@rabiepenpm/quam-a-necessitatibus@rabiepenpm/quam-dolore-totam@rabiepenpm/quas-cupiditate-sed@rabiepenpm/quas-dicta-repellendus@rabiepenpm/quas-in-temporibus@rabiepenpm/pariatur-dolorem-nihil@rabiepenpm/perspiciatis-nostrum-ullam@rabiepenpm/placeat-beatae-molestias@rabiepenpm/placeat-dicta-id@rabiepenpm/possimus-error-cumque@rabiepenpm/provident-culpa-nobis@rabiepenpm/provident-quod-dolores@rabiepenpm/placeat-repellat-debitis@rabiepenpm/quae-dicta-dolores@rabiepenpm/optio-expedita-optio@rabiepenpm/fugit-fuga-recusandae@rabiepenpm/illo-beatae-cumque@rabiepenpm/facilis-vitae-et@rabiepenpm/fuga-atque-vero@rabiepenpm/fugiat-id-reiciendis@rabiepenpm/et-nihil-facilis@rabiepenpm/et-voluptatum-accusamus@rabiepenpm/expedita-quo-vero@rabiepenpm/eveniet-quas-deleniti@rabiepenpm/eveniet-quibusdam-vel@rabiepenpm/ex-eaque-fuga@rabiepenpm/eveniet-quas-porro@rabiepenpm/hic-at-ducimus@rabiepenpm/illum-molestiae-libero@rabiepenpm/in-voluptate-praesentium@rabiepenpm/iusto-quam-atque@rabiepenpm/labore-commodi-qui@rabiepenpm/laboriosam-laboriosam-rerum@rabiepenpm/laborum-atque-aperiam@rabiepenpm/laborum-libero-commodi@rabiepenpm/laborum-provident-assumenda@rabiepenpm/incidunt-quas-illo@rabiepenpm/incidunt-repudiandae-exercitationem@rabiepenpm/inventore-consequatur-magnam@rabiepenpm/inventore-deserunt-vero@rabiepenpm/ipsum-sint-illo@rabiepenpm/ipsum-voluptatum-praesentium@rabiepenpm/iste-aliquam-voluptatibus@rabiepenpm/iste-aut-suscipit@rabiepenpm/iste-ratione-recusandae@rabiepenpm/iste-sapiente-quia@rabiepenpm/itaque-eum-soluta@rabiepenpm/itaque-ipsam-at@rabiepenpm/iure-aperiam-perspiciatis@rabiepenpm/iure-ipsum-nesciunt@rabiepenpm/iusto-eum-quos@rabiepenpm/ipsa-accusantium-soluta@rabiepenpm/ipsam-officiis-minus@rabiepenpm/ipsam-quo-ex@rabiepenpm/illum-consequatur-id@rabiepenpm/quasi-quis-ullam@rabiepenpm/quis-nulla-expedita@rabiepenpm/quisquam-eius-pariatur@rabiepenpm/quisquam-explicabo-possimus@rabiepenpm/quidem-accusantium-maiores@rabiepenpm/quidem-rerum-vel@rabiepenpm/quo-sint-praesentium@rabiepenpm/quod-natus-minima@rabiepenpm/quod-non-hic@rabiepenpm/repellat-nesciunt-incidunt@rabiepenpm/quod-voluptate-earum@rabiepenpm/quidem-similique-ipsam@rabiepenpm/quas-molestias-amet@rabiepenpm/quas-officiis-dolorem@rabiepenpm/soluta-qui-dolore@rabiepenpm/soluta-quibusdam-neque@rabiepenpm/suscipit-nam-modi@rabiepenpm/repudiandae-fugit-vero@rabiepenpm/similique-cum-nihil@rabiepenpm/similique-fuga-deleniti@rabiepenpm/sint-magni-magnam@rabiepenpm/sit-commodi-accusamus@rabiepenpm/sed-alias-velit@rabiepenpm/sed-dolorem-quia@rabiepenpm/reprehenderit-aliquid-sunt@rabiepenpm/reprehenderit-eaque-repellendus@rabiepenpm/reprehenderit-tempora-ex@rabiepenpm/rerum-possimus-modi@rabiepenpm/repellat-quia-quisquam@rabiepenpm/repellendus-perferendis-accusamus@rabiepenpm/cupiditate-fuga-fuga@rabiepenpm/cupiditate-quos-amet@rabiepenpm/debitis-quos-rem@rabiepenpm/delectus-minus-iure
1.0.0

18 days ago