Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Create valid JavaScript objects

NPM versionCoverageQuality Gate StatusBugsCode SmellsTechnical DebtVulnerabilitiesMaintainability RatingReliability RatingSecurity Rating

Create objects and validate the values, so you know all values are ok. You don't have to create code to validate all fields of an object, just write a schema. Also get more usefull methods to work with objects.

Installation

npm install @trojs/objects or yarn add @trojs/objects

Test the package

npm run test or yarn test

Validation

For validate the objects, it use the package @trojs/validation (https://www.npmjs.com/package/@trojs/validator) It will throw an error if the object isnt valid. For all posibilities, check the validation package readme.

Usage

Example usage:

import{Obj}from'@trojs/objects'constaddressSchema={street: String,number: Number,postalCode: String,city: String,country: String,};constAddress=Obj({schema: addressSchema})constmyAddress=Address.create({street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'})console.log(myAddress){street: 'Abc',number: 42,postalCode: '1234AB',city: 'Example',country: 'The Netherlands'}

You can also define sub schemas:

import{Obj}from'@trojs/objects'constfilterSchema={key: String,type: String}constoptionSchema={value: String,'count?': Number}constselectFilterSchema={
...filterSchema,options: optionSchema}constSelectFilter=Obj({schema: selectFilterSchema})constmultiselect=SelectFilter.create({key: 'status',type: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]})console.log(multiselect){street: 'status',number: 'multiselect',options: [{value: 'open',count: 42},{value: 'closed'}]}

Catching validation errors:

try{constmultiselect=SelectFilter.create({key: 'status',options: [{value: 'open',count: 42},{value: 'closed'}]})}catch(error){console.log(error.message)}'The field type should be a String'

You can also map the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constmappedResults=test.map((x)=>x*2)// Or you can do:constdouble=(x)=>x*2constmappedResults2=test.map(double)console.log(mappedResults){a: 2,b: 4,};

You can also filter the values:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constfilteredResults=test.filter((x)=>x===1)// Or you can do:constonlyOne=(x)=>x===1constfilteredResults2=test.filter(onlyOne)console.log(filteredResults){a: 1,};

You can also use every:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)consteverythingIsBelowThree=test.every((x)=>x<3)// Or you can do:constisBelowThree=(x)=>x<3consteverythingIsBelowThree2=test.every(isBelowThree)console.log(everythingIsBelowThree)true

You can also use some:

consttestSchema={a: Number,b: Number,};constTest=Obj({schema: testSchema});constinput={a: 1,b: 2,};consttest=Test.create(input)constsomeAreTwo=test.some((x)=>x===2)// Or you can do:constisTwo=(x)=>x===2constsomeAreTwo2=test.some(isTwo)console.log(someAreTwo)true

If you have some data, and you have to transform the data to the schema, you can use the parse method.

constsubSchema={a: Number,b: Boolean,'c?': String,};consttestSchema={a: Number,b: Boolean,'c?': String,
subSchema,};constTest=Obj({schema: testSchema});constinput={a: '42',b: 'true',c: 42,subSchema: {a: '42',b: 'true',c: 42,},};Test.parse(input){a: 42,b: true,c: '42',subSchema: {a: 42,b: true,c: '42',},};

Example usage without a schema: ...

constflatter=Obj().create({a: 1,b: 2,c: [3,4],d: {e: 5,f: 6},g: {h: {i: 7}}})

You can get the flat object by:

flatter.flat{a: 1,b: 2,"c.0": 3,"c.1": 4,"d.e": 5,"d.f": 6,"g.h.i": 7}

You can get the object entries by:

flatter.entries()[["a",1],["b",2],["c.0",3],["c.1",4],["d.e",5],["d.f",6],["g.h.i",7]]

You can get the object keys by:

flatter.keys()["a","b","c.0","c.1","d.e","d.f","g.h.i"]

You can get the object values by:

flatter.values()[1,2,3,4,5,6,7]

You can get the object length by:

flatter.length7

You can get by key by:

flatter.getByKey("g.h.i")7

Or set a fallback value by:

flatter.getByKey("x.y.z",42)42
flatter.getByKey("d"){e: 5,f: 6}

Check if the object has a key:

flatter.has("g.h.i")true

Check if the object has key includes a value:

flatter.includes("g.h")true

You can get only some fields from the object:

flatter.getKeys(['a','c','d.e','g.h']){a: 1,c: [3,4],'d.e': 5,'g.h': {i: 7},}

And you can also get some fields from the object in the flat format:

flatter.getFlatKeys(['a','c','d.e','g.h']){a: 1,'c.0': 3,'c.1': 4,'d.e': 5,'g.h.i': 7,}

And you can also use the map method:

flatter.flatMap((x)=>x*2){a: 2,b: 4,'c.0': 6,'c.1': 8,'d.e': 10,'d.f': 12,'g.h.i': 14,};

And you can also use the flatFilter method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatFilter((x)=>x===1){a: 1,'c.0': 1,'d.e': 1,'g.h.i': 1,};

And you can also use the flatEvery method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatEvery((x)=>x<3)true

And you can also use the flatSome method:

constflatter=Obj().create({a: 1,b: 2,c: [1,2],d: {e: 1,f: 2},g: {h: {i: 1}}})flatter.flatSome((x)=>x===2)true

For arrays you can also use createAll and parseAll. It works the same as create and parse but it can do it on every item in an array.

About

Create valid JavaScript objects

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages