0.0.1 • Published 6 years ago

@spine/filter-object v0.0.1

Weekly downloads
1
License
MIT
Repository
gitlab
Last release
6 years ago

Spine Filter Object

An utility to filter object by nested rules with extracted types.

Key aspects

  • Smart typings, it filters in typing level (no any)
  • Readable filter statements

Rule

type FilterObjectRule = true | false | { [key: string]: Rule }

Usage

const obj = {
  foo: 'bar',
  htmlPage: {
    title: 'Hello World',
    metas: [
      { name: 'description', content: 'My Hello World Page' },
    ],
  },
  environment: {
    NODE_ENV: 'production',
    FOO: 'bar',
  }
};

console.log(JSON.stringify(filterObject(obj, { foo: true, htmlPage: { title: true } })));
// {"foo":"bar","htmlPage":{"title":"Hello World"}}

console.log(JSON.stringify(filterObject(obj, { htmlPage: { metas: { name: true } } })));
// {"htmlPage":{"metas":[{"name":"description"}]}}

console.log(JSON.stringify(filterObject(obj, { environemnt: { NODE_ENV: true } })));
// {"environment":{"NODE_ENV":"production"}}

console.log(JSON.stringify(filterObject(obj, { environemnt: true })));
// {"environment":{"NODE_ENV":"production","FOO":"bar"}}

console.log(JSON.stringify(filterObject(obj, { environemnt: { '*': true } })));
// {"environment":{"NODE_ENV":"production","FOO":"bar"}}

console.log(JSON.stringify(filterObject(obj, true)));
// {"foo":"bar","htmlPage":{"title":"Hello World","metas":[{"name":"description","content":"My Hello World Page"}]}}

console.log(JSON.stringify(filterObject(obj, {})));
// {}