map-transform 0.4.0-alpha.5 → 0.4.0-alpha.6
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.
|
@@ -8,7 +8,9 @@ const root_1 = require("./root");
|
|
|
8
8
|
const plug_1 = require("./plug");
|
|
9
9
|
const directionals_1 = require("./directionals");
|
|
10
10
|
const isGet = (isGetOperation, isRev = false) => isGetOperation ? !isRev : isRev;
|
|
11
|
-
const setWithOnlyMapped = (state, setFn) => (value) => state.onlyMapped && value === undefined
|
|
11
|
+
const setWithOnlyMapped = (state, setFn) => (value) => state.onlyMapped && value === undefined
|
|
12
|
+
? state.target
|
|
13
|
+
: setFn(value, state.target);
|
|
12
14
|
const getValueFromState = (path) => (state) => (0, pathGetter_1.default)(path)((0, stateHelpers_1.getStateValue)(state));
|
|
13
15
|
const setValueFromState = (path) => (state) => {
|
|
14
16
|
const setFn = setWithOnlyMapped(state, (0, pathSetter_1.default)(path));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSet.js","sourceRoot":"","sources":["../../src/operations/getSet.ts"],"names":[],"mappings":";;;AACA,oDAAwC;AACxC,oDAAoD;AACpD,wDAAoE;AACpE,iCAAyB;AACzB,iCAAyB;AACzB,iDAAuC;AAEvC,MAAM,KAAK,GAAG,CAAC,cAAuB,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,CACvD,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAEjC,MAAM,iBAAiB,GACrB,CAAC,KAAY,EAAE,KAAa,EAAU,EAAE,CACxC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,UAAU,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"getSet.js","sourceRoot":"","sources":["../../src/operations/getSet.ts"],"names":[],"mappings":";;;AACA,oDAAwC;AACxC,oDAAoD;AACpD,wDAAoE;AACpE,iCAAyB;AACzB,iCAAyB;AACzB,iDAAuC;AAEvC,MAAM,KAAK,GAAG,CAAC,cAAuB,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,CACvD,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAEjC,MAAM,iBAAiB,GACrB,CAAC,KAAY,EAAE,KAAa,EAAU,EAAE,CACxC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,UAAU,IAAI,KAAK,KAAK,SAAS;IACrC,CAAC,CAAC,KAAK,CAAC,MAAM;IACd,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;AAElC,MAAM,iBAAiB,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC,KAAY,EAAE,EAAE,CACzD,IAAA,oBAAM,EAAC,IAAI,CAAC,CAAC,IAAA,4BAAa,EAAC,KAAK,CAAC,CAAC,CAAA;AAEpC,MAAM,iBAAiB,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC,KAAY,EAAE,EAAE;IACzD,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAA,oBAAM,EAAC,IAAI,CAAC,CAAC,CAAA;IACpD,OAAO,KAAK,CAAC,IAAA,4BAAa,EAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,QAAQ,GACZ,CAAC,cAAuB,EAAE,EAAE,CAC5B,CAAC,IAAU,EAAa,EAAE;IACxB,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;QAChC,MAAM,UAAU,GAAG,IAAA,cAAI,EAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChE,OAAO,cAAc;YACnB,CAAC,CAAC,IAAA,qBAAM,EAAC,UAAU,EAAE,IAAA,cAAI,GAAE,CAAC;YAC5B,CAAC,CAAC,IAAA,qBAAM,EAAC,IAAA,cAAI,GAAE,EAAE,UAAU,CAAC,CAAA;KAC/B;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACrC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAErC,OAAO,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,IAAA,4BAAa,EACX,KAAK,EACL,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAC/D,CAAA;AACL,CAAC,CAAA;AAEU,QAAA,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;AACpB,QAAA,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const stateHelpers_1 = require("../utils/stateHelpers");
|
|
4
|
-
const merge_1 = require("./merge");
|
|
5
4
|
const getSet_1 = require("./getSet");
|
|
6
5
|
const directionals_1 = require("./directionals");
|
|
7
|
-
const plug_1 = require("./plug");
|
|
8
6
|
const iterate_1 = require("./iterate");
|
|
9
7
|
const definitionHelpers_1 = require("../utils/definitionHelpers");
|
|
10
8
|
const array_1 = require("../utils/array");
|
|
@@ -14,34 +12,58 @@ const flipIfNeeded = (pipe, flip) => {
|
|
|
14
12
|
return pipeline;
|
|
15
13
|
};
|
|
16
14
|
const shouldIterate = (def, path) => ((0, definitionHelpers_1.isMapObject)(def) && def['$iterate'] === true) || path.includes('[]');
|
|
17
|
-
const createSubPipeline = (pipeline, flip, path) => (0, definitionHelpers_1.isMapObject)(pipeline)
|
|
18
|
-
? [objectToMapFunction(pipeline, flip, path)]
|
|
19
|
-
: flipIfNeeded((0, array_1.ensureArray)(pipeline), flip);
|
|
20
15
|
const extractRealPath = (path) => {
|
|
21
16
|
const [realPath, index] = path.split('/');
|
|
22
17
|
return [realPath, index !== undefined];
|
|
23
18
|
};
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
const setTargetOnState = (state, target) => ({
|
|
20
|
+
...state,
|
|
21
|
+
target,
|
|
22
|
+
});
|
|
23
|
+
const runWithTarget = (options, state) => (prevState, operation) => operation(options)(setTargetOnState(state, prevState?.value));
|
|
24
|
+
const revertTarget = ({ target, ...state }, originalState) => originalState.target ? setTargetOnState(state, originalState.target) : state;
|
|
25
|
+
const run = (operations) => function (options) {
|
|
26
|
+
const shouldSkip = (0, stateHelpers_1.shouldSkipMutation)(options);
|
|
27
|
+
return (state) => shouldSkip(state)
|
|
28
|
+
? (0, stateHelpers_1.setStateValue)(state, undefined)
|
|
29
|
+
: revertTarget(operations.reduce(runWithTarget(options, state), undefined) ||
|
|
30
|
+
state, state);
|
|
31
|
+
};
|
|
32
|
+
const objectToMapFunction = (objectDef, flip, parentPath = '') => Object.entries(objectDef)
|
|
33
|
+
.flatMap(([path, def]) => {
|
|
27
34
|
if (!def || path.startsWith('$')) {
|
|
28
35
|
return null;
|
|
29
36
|
}
|
|
30
37
|
const [realPath, revOnly] = extractRealPath(path);
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
const nextPath = [parentPath, realPath].filter(Boolean).join('.');
|
|
39
|
+
if ((0, definitionHelpers_1.isMapObject)(def) && !def.$iterate && !realPath.endsWith('[]')) {
|
|
40
|
+
return objectToMapFunction(def, flip, nextPath);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const subPipeline = (0, definitionHelpers_1.isMapObject)(def)
|
|
44
|
+
? [runAndIterate(def, flip, shouldIterate(def, nextPath))]
|
|
45
|
+
: flipIfNeeded((0, array_1.ensureArray)(def), flip);
|
|
46
|
+
const pipeline = (0, definitionHelpers_1.mapFunctionFromDef)([
|
|
47
|
+
flip ? nextPath : null,
|
|
48
|
+
...subPipeline,
|
|
49
|
+
flip ? null : (0, getSet_1.set)(nextPath),
|
|
50
|
+
]);
|
|
51
|
+
return revOnly
|
|
52
|
+
? (0, directionals_1.divide)(() => (state) => (0, stateHelpers_1.setStateValue)(state, state.target), pipeline)
|
|
53
|
+
: pipeline;
|
|
54
|
+
}
|
|
37
55
|
})
|
|
38
|
-
.filter(
|
|
56
|
+
.filter((pipeline) => !!pipeline);
|
|
57
|
+
function runAndIterate(def, flip, doIterate) {
|
|
58
|
+
const operations = objectToMapFunction(def, flip);
|
|
59
|
+
return doIterate ? (0, iterate_1.default)(run(operations)) : run(operations);
|
|
60
|
+
}
|
|
39
61
|
function mutate(def) {
|
|
40
62
|
if (Object.keys(def).length === 0) {
|
|
41
63
|
return (_options) => (state) => (0, stateHelpers_1.setStateValue)(state, undefined);
|
|
42
64
|
}
|
|
43
65
|
const flip = def.$flip || false;
|
|
44
|
-
const runMutation =
|
|
66
|
+
const runMutation = runAndIterate(def, flip, shouldIterate(def, ''));
|
|
45
67
|
return function mutateFn(options) {
|
|
46
68
|
const dir = def.$direction;
|
|
47
69
|
if (typeof dir === 'string') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../src/operations/mutate.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../../src/operations/mutate.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export interface CustomFunction<T = Operands> {
|
|
|
24
24
|
export interface State {
|
|
25
25
|
root: unknown;
|
|
26
26
|
context: unknown;
|
|
27
|
+
target?: unknown;
|
|
27
28
|
value: unknown;
|
|
28
29
|
rev?: boolean;
|
|
29
30
|
onlyMapped?: boolean;
|
|
@@ -70,7 +71,7 @@ export interface Operation {
|
|
|
70
71
|
export interface MapFunction {
|
|
71
72
|
(options: Options): (state: State) => State;
|
|
72
73
|
}
|
|
73
|
-
declare type MapPipeSimple = (MapObject | Operation | OperationObject | Path)[];
|
|
74
|
+
export declare type MapPipeSimple = (MapObject | Operation | OperationObject | Path)[];
|
|
74
75
|
export declare type MapPipe = (MapObject | Operation | OperationObject | Path | MapPipeSimple)[];
|
|
75
76
|
export interface MapObject {
|
|
76
77
|
[key: string]: MapDefinition | undefined | boolean;
|
|
@@ -89,4 +90,3 @@ export interface MapTransformWithOnlyMappedValues {
|
|
|
89
90
|
export interface MapTransform extends MapTransformWithOnlyMappedValues {
|
|
90
91
|
rev: MapTransformWithOnlyMappedValues;
|
|
91
92
|
}
|
|
92
|
-
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "map-transform",
|
|
3
|
-
"version": "0.4.0-alpha.
|
|
3
|
+
"version": "0.4.0-alpha.6",
|
|
4
4
|
"description": "Map and transform objects with mapping definitions",
|
|
5
5
|
"author": "Kjell-Morten Bratsberg Thorsen <post@kjellmorten.no>",
|
|
6
6
|
"license": "ISC",
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@integreat/ts-dev-setup": "^2.2.0",
|
|
47
47
|
"@types/deep-freeze": "^0.1.2",
|
|
48
|
-
"@types/sinon": "^
|
|
48
|
+
"@types/sinon": "^10.0.11",
|
|
49
49
|
"deep-freeze": "0.0.1",
|
|
50
|
-
"sinon": "^
|
|
50
|
+
"sinon": "^13.0.1"
|
|
51
51
|
}
|
|
52
52
|
}
|