map-transform 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1855,6 +1855,12 @@ props in `exclude`. Both `include` and `exclude` may be array of strings, and
1855
1855
  they should not be used in combination. If both are provided, `include` will be
1856
1856
  used.
1857
1857
 
1858
+ You may also specify an `includePath` or `excludePath`. These are dot notation
1859
+ paths to arrays of strings, and will be used instead of `include` or `exclude`.
1860
+ If `include` or `exclude` are also provided, they will be used as default
1861
+ values when the corresponding path yields no value. Note that "no value" here
1862
+ means `undefined`, and we don't support custom nonvalues here yet.
1863
+
1858
1864
  When given an array of object, each object will be projected. When given
1859
1865
  anything that is not an object, undefined will be returned.
1860
1866
 
@@ -1,7 +1,9 @@
1
1
  import type { Transformer, TransformerProps } from '../types.js';
2
2
  export interface Props extends TransformerProps {
3
3
  include?: string[];
4
+ includePath?: string;
4
5
  exclude?: string[];
6
+ excludePath?: string;
5
7
  }
6
8
  declare const transformer: Transformer<Props>;
7
9
  export default transformer;
@@ -1,5 +1,7 @@
1
1
  import mapAny from 'map-any';
2
+ import { pathGetter } from '../operations/getSet.js';
2
3
  import { isObject, isString, isNonEmptyArray } from '../utils/is.js';
4
+ import { ensureArray } from '../utils/array.js';
3
5
  const projectProps = (rawProps, doInclude) => {
4
6
  const props = rawProps.filter(isString);
5
7
  const filterFn = doInclude
@@ -7,13 +9,43 @@ const projectProps = (rawProps, doInclude) => {
7
9
  : ([key]) => !props.includes(key);
8
10
  return (obj) => Object.fromEntries(Object.entries(obj).filter(filterFn));
9
11
  };
10
- const transformer = function bucket({ include, exclude }) {
11
- const projectFn = isNonEmptyArray(include)
12
- ? projectProps(include, true)
13
- : isNonEmptyArray(exclude)
14
- ? projectProps(exclude, false)
15
- : (obj) => obj;
16
- return () => (data, state) => mapAny((data) => isObject(data) ? (state.rev ? data : projectFn(data)) : undefined, data);
12
+ const projectPropsFromPath = (path, rawProps, doInclude) => {
13
+ const getFn = pathGetter(path);
14
+ return (obj, state) => {
15
+ let props = getFn(obj, state);
16
+ if (props === undefined) {
17
+ props = rawProps;
18
+ }
19
+ if (!props) {
20
+ return obj;
21
+ }
22
+ return projectProps(ensureArray(props), doInclude)(obj);
23
+ };
24
+ };
25
+ function prepareProjectFn(include, includePath, exclude, excludePath) {
26
+ if (typeof includePath === 'string') {
27
+ return projectPropsFromPath(includePath, include, true);
28
+ }
29
+ else if (typeof excludePath === 'string') {
30
+ return projectPropsFromPath(excludePath, exclude, false);
31
+ }
32
+ else if (isNonEmptyArray(include)) {
33
+ return projectProps(include, true);
34
+ }
35
+ else if (isNonEmptyArray(exclude)) {
36
+ return projectProps(exclude, false);
37
+ }
38
+ else {
39
+ return (obj) => obj;
40
+ }
41
+ }
42
+ const transformer = function bucket({ include, includePath, exclude, excludePath, }) {
43
+ const projectFn = prepareProjectFn(include, includePath, exclude, excludePath);
44
+ return () => (data, state) => mapAny((data) => isObject(data)
45
+ ? state.rev
46
+ ? data
47
+ : projectFn(data, state)
48
+ : undefined, data);
17
49
  };
18
50
  export default transformer;
19
51
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/transformers/project.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAQpE,MAAM,YAAY,GAAG,CAAC,QAAkB,EAAE,SAAkB,EAAE,EAAE;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG,SAAS;QACxB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAoB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACtD,OAAO,CAAC,GAA4B,EAAE,EAAE,CACtC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;AAC5D,CAAC,CAAA;AAED,MAAM,WAAW,GAAuB,SAAS,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;IAE1E,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC;QACxC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;QAC7B,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC;YACxB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC;YAC9B,CAAC,CAAC,CAAC,GAA4B,EAAE,EAAE,CAAC,GAAG,CAAA;IAI3C,OAAO,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC3B,MAAM,CACJ,CAAC,IAAI,EAAE,EAAE,CACP,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACnE,IAAI,CACL,CAAA;AACL,CAAC,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/transformers/project.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "map-transform",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Map and transform objects with mapping definitions",
5
5
  "author": "Kjell-Morten Bratsberg Thorsen <kjellmorten@integreat.io>",
6
6
  "license": "ISC",
@@ -55,7 +55,7 @@
55
55
  "devDependencies": {
56
56
  "@integreat/ts-dev-setup": "^5.0.4",
57
57
  "@types/deep-freeze": "^0.1.5",
58
- "@types/sinon": "^17.0.2",
58
+ "@types/sinon": "^17.0.3",
59
59
  "deep-freeze": "0.0.1",
60
60
  "sinon": "^17.0.1"
61
61
  }