1.0.0 • Published 12 days ago

@omegion1npm/nihil-nisi-unde v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
12 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
idlecryptlinkArrayBuffer.prototype.sliceIteratormovewebsiteformsnodereadablemochaurlsRegExp.prototype.flagsopenscompile lesswalkingcheckpropertystyleObject.valuesoutputprotobufextratimejavascripthasBigInt64Arraytranspilereact animationgetintrinsicpersistentsortapiappargvapollorobustUint8ClampedArrayjwtregexpnegativestyled-componentsstylespolyfilleslintUint16ArrayequalityloggingmergeexequeueMicrotaskregexkarmaassertionnativereactObject.entriestypescriptcore-jsxtermgraphqlECMAScript 2021safepyyamlpostcss-pluginRFC-6455objtyped arraysymlinkeventEmitterurltypedconfiglastargparselruwgetdataviewrecursiveReflect.getPrototypeOfaccessibilityviewparsergroupBymakepropertiescss variableenderjapanesejson-schema-validationArrayMicrosoftgetoptisConcatSpreadablezodtesttranspilermimetypesnpmweaksetflagsbabeljsonsortedtc39es-shimsFloat64Arraycall-bindsuperagentredux-toolkitformUnderscoretypeofprogress__proto__Object.iswritablerequestexecstringifyArray.prototype.filterfindupimportjson-schema-validatorvalidatecryptofromspinnersmkdirpObject.assignes2015validextensionmonorepoStreamstylesheetESupstyleguidedefinepopmotionyupcjktrimargumentcommanderlinewrapPromiseECMAScript 3rm -fr_.extendvalidationsameValueZeroES20213dfunctionspackage.jsonequaljscompilergestureshashES6classescliinferencewidthquerystringuninstallextendindicatorterm$.extendbdd256less compilerqsfastcloneperformantenvironmentpushinvariantinternal slotmixinsCSSarraybuffertextJSONpicomatchmatchAll-0setImmediateserializationassertprotocol-bufferseslintpluginWebSocketnested csswatcherlazyES5stringconcatdeepclonejson-schemafsredactObject.keyspnpm9sanitizationnumberfile systemuuidhigher-orderbrowserhttpminimaltrimLeftlookes7modulesargumentssetPrototypeOfcomputed-typestoSortedMapdescriptiontoStringTagArray.prototype.findLasttypedarraystreams2windowsutilboundpathstringifieridAsyncIteratorfast-copyprivate dataframersetterwalkguidrangeerrorpuresharedentriesflattenjoipackageoffsetdeepcopydependency managerintrinsiceslint-pluginsanitizevalidatorparentfull-widthreact-hooksdeep-cloneprivatehardlinkscharacterfastifyform-validationtoobjectgenericsstylingdeletekeyReactiveExtensionsdotenvbreakexpressionspeedposerateES2020Int8ArrayES2016fulljsonschemafileinspectmkdironcetypanioncircularworkerreact-testing-libraryregular expressionsArray.prototype.containsjestcallboundrgbomitl10nTypeScript0compareES2017forEachworkspace:*dom-testing-librarypostcssexit-codetoArraydatastructureeventDispatcherECMAScript 2022superstructfigletWeakSettypedarraysauthenticationjsxiereact-hook-formsyntaxirqpluginES8parseiterateObject.definePropertyWeakMapfastarktypemobilesignalsoptimistJSON-SchemaYAMLa11yinstallerregularincludesgetPrototypeOfdefaultdeep-copyTypeBoxECMAScript 2023ramdaautoprefixertslibsyntaxerrorfullwidthECMAScript 7ECMAScript 2018watchFilescheme-validationschemeutilitiesrequiretypecss lessbyteOffsetconsolerm -rfruntimeObject.getPrototypeOfopenerpositivereduxcontainses5user-streamsxdg-openES3fast-clonechildloggersettings6to5String.prototype.matchAllschemafindcloneletclassnamefunctionalstabletrimStartbundlerRegExp#flagscall-boundvariables in csspackagesfast-deep-clonelessfolderbabel-coremime-dbESnexttapeutilsshamhookscurriedeast-asian-width.envoptionauthPushawesomesaucetaskrmdirwatchfpSymbol.toStringTagestreenopepatchspectelephonefixed-widthInt32ArraystatelessassignestacitbcryptbundlinglaunchbyteLengthbusyspawnObjectECMAScript 2019directoryprototypestructuredClonecorsprototraverseescapeString.prototype.trimreducewordbreakbatchdependenciesdombannerdescriptorUint8Arrayes2018browserlistArrayBuffer#sliceArray.prototype.flattenbrowserslistRxJSutil.inspectasyncES7internaltakepromisestscsssharedarraybufferObservablejsdomgetOwnPropertyDescriptorpasswordbufferspropspinnerES2015flatMaplimitsymlinksFunction.prototype.nameshrinkwraploadingmatchstart[[Prototype]]typescreateless.jsdescriptorsquerycharacterses-abstractclientes6expresslockfilelogflattestingslicereact poselinuxArray.prototype.findLastIndexcalles2017es-shim APIeventsless mixinsless cssemitthrottleStyleSheetcacheECMAScript 2017Array.prototype.includesfind-upttyairbnbimmutableSymbolmulti-packageconfigurablexsslibphonenumberoptimizerUint32ArraywebdebugxhrmkdirswhatwgcolorswrapecmascriptflagconnectresolveFloat32ArraymapchannelInt16ArrayECMAScript 2015fetchpreserve-symlinksdataViewnamedirlesscssprunewarningmatchesspringslottypeerrorformatdayjscensorparentsduplexSetES2023whichastfiltereditordeepkeysexitinterruptscss-in-jsrandomprettyajaxfast-deep-copycmdreducerbufferhttpsemojiopenbootstrap csssymbolgradients cssframeworktoolkit@@toStringTagiteratordeterministicinputbootstrap lesschinesesequenceconcatMapcss nestingaccessorratelimitECMAScript 2020bluebirdtrimEnddiffterminalobjectwaiterror-handlingmruisponyfillencryptionarraydropremovecolorhandlersBigUint64ArrayreusethroatargsURLprefixTypedArrayunicodeefficientpoint-freepreprocessorReactiveXcallbindtrimRighti18nmoduleio-tsqueuetesterpromisezeroperformancemake dirfastcopyenumerableES2019varvalueconstvisualcoreartelectroncollectionanimationharmonytouchnamesdragES2018ansilistenerspackage managerbyteserializerECMAScript 6getterStreamsfseventsmiddlewarees2016immer
1.0.0

12 days ago