map-transform 0.5.6 → 1.0.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 +130 -53
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/operations/alt.js +21 -23
- package/dist/operations/alt.js.map +1 -1
- package/dist/operations/apply.js +8 -5
- package/dist/operations/apply.js.map +1 -1
- package/dist/operations/concat.d.ts +2 -1
- package/dist/operations/concat.js +34 -11
- package/dist/operations/concat.js.map +1 -1
- package/dist/operations/directionals.js +4 -4
- package/dist/operations/directionals.js.map +1 -1
- package/dist/operations/getSet.js +58 -28
- package/dist/operations/getSet.js.map +1 -1
- package/dist/operations/lookup.d.ts +3 -1
- package/dist/operations/lookup.js +27 -31
- package/dist/operations/lookup.js.map +1 -1
- package/dist/operations/merge.d.ts +2 -1
- package/dist/operations/merge.js +1 -1
- package/dist/operations/merge.js.map +1 -1
- package/dist/operations/modify.js +4 -7
- package/dist/operations/modify.js.map +1 -1
- package/dist/operations/pipe.js +4 -4
- package/dist/operations/pipe.js.map +1 -1
- package/dist/operations/props.js +103 -67
- package/dist/operations/props.js.map +1 -1
- package/dist/operations/transform.js +6 -12
- package/dist/operations/transform.js.map +1 -1
- package/dist/transformers/compare.js +17 -8
- package/dist/transformers/compare.js.map +1 -1
- package/dist/transformers/explode.d.ts +2 -3
- package/dist/transformers/explode.js +6 -7
- package/dist/transformers/explode.js.map +1 -1
- package/dist/transformers/index.d.ts +1 -0
- package/dist/transformers/index.js +2 -1
- package/dist/transformers/index.js.map +1 -1
- package/dist/transformers/merge.d.ts +2 -2
- package/dist/transformers/merge.js +9 -4
- package/dist/transformers/merge.js.map +1 -1
- package/dist/transformers/sort.js +5 -5
- package/dist/transformers/sort.js.map +1 -1
- package/dist/utils/definitionHelpers.js +4 -4
- package/dist/utils/definitionHelpers.js.map +1 -1
- package/dist/utils/is.d.ts +2 -0
- package/dist/utils/is.js +2 -0
- package/dist/utils/is.js.map +1 -1
- package/dist/utils/modifyOperationObject.js +9 -10
- package/dist/utils/modifyOperationObject.js.map +1 -1
- package/dist/utils/stateHelpers.d.ts +26 -3
- package/dist/utils/stateHelpers.js +14 -7
- package/dist/utils/stateHelpers.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,28 +1,31 @@
|
|
|
1
1
|
import mapAny from 'map-any';
|
|
2
|
-
import
|
|
2
|
+
import modify from './modify.js';
|
|
3
|
+
import { getStateValue, setStateValue, getTargetFromState, setTargetOnState, getLastContext, getRootFromState, isNonvalue, revFromState, } from '../utils/stateHelpers.js';
|
|
3
4
|
import { isObject } from '../utils/is.js';
|
|
4
5
|
import { ensureArray, indexOfIfArray } from '../utils/array.js';
|
|
5
|
-
|
|
6
|
-
const adjustIsSet = (isSet, { rev = false, flip = false }) => xor(isSet, xor(rev, flip));
|
|
6
|
+
const adjustIsSet = (isSet, state) => revFromState(state, isSet);
|
|
7
7
|
function flatMapAny(fn) {
|
|
8
8
|
return (value, target) => Array.isArray(value)
|
|
9
9
|
? value.flatMap((value) => fn(value, target))
|
|
10
10
|
: fn(value, target);
|
|
11
11
|
}
|
|
12
|
+
function handleArrayPath(path) {
|
|
13
|
+
if (path.endsWith('][')) {
|
|
14
|
+
return [path.slice(0, path.length - 2), false, true];
|
|
15
|
+
}
|
|
16
|
+
const pos = path.indexOf('[');
|
|
17
|
+
if (path[pos - 1] === '\\') {
|
|
18
|
+
return [path.replace('\\[', '['), false, false];
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const isArr = path[pos + 1] === ']';
|
|
22
|
+
return [path.slice(0, pos), isArr, false];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
12
25
|
function preparePath(path) {
|
|
13
26
|
if (typeof path === 'string') {
|
|
14
27
|
if (path.includes('[')) {
|
|
15
|
-
|
|
16
|
-
return [path.slice(0, path.length - 2), false, true];
|
|
17
|
-
}
|
|
18
|
-
const pos = path.indexOf('[');
|
|
19
|
-
if (path[pos - 1] === '\\') {
|
|
20
|
-
return [path.replace('\\[', '['), false, false];
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
const isArr = path[pos + 1] === ']';
|
|
24
|
-
return [path.slice(0, pos), isArr, false];
|
|
25
|
-
}
|
|
28
|
+
return handleArrayPath(path);
|
|
26
29
|
}
|
|
27
30
|
else if (path.startsWith('\\$')) {
|
|
28
31
|
return [path.slice(1), false, false];
|
|
@@ -81,6 +84,14 @@ function getSetParentOrRoot(path, isSet) {
|
|
|
81
84
|
}
|
|
82
85
|
};
|
|
83
86
|
}
|
|
87
|
+
const modifyOnSet = (isSet) => (options) => function modifyOnSet(next) {
|
|
88
|
+
const modifyFn = modify('.')(options)(next);
|
|
89
|
+
return async (state) => {
|
|
90
|
+
return adjustIsSet(isSet, state)
|
|
91
|
+
? await modifyFn(state)
|
|
92
|
+
: setStateValue(await next(state), undefined);
|
|
93
|
+
};
|
|
94
|
+
};
|
|
84
95
|
function doModifyGetValue(value, state, options) {
|
|
85
96
|
const { modifyGetValue } = options;
|
|
86
97
|
return typeof modifyGetValue === 'function'
|
|
@@ -89,8 +100,13 @@ function doModifyGetValue(value, state, options) {
|
|
|
89
100
|
}
|
|
90
101
|
function getSet(isSet = false) {
|
|
91
102
|
return (path) => {
|
|
92
|
-
if (typeof path === 'string'
|
|
93
|
-
|
|
103
|
+
if (typeof path === 'string') {
|
|
104
|
+
if (path === '$modify') {
|
|
105
|
+
return modifyOnSet(isSet);
|
|
106
|
+
}
|
|
107
|
+
else if (path[0] === '^') {
|
|
108
|
+
return getSetParentOrRoot(path, isSet);
|
|
109
|
+
}
|
|
94
110
|
}
|
|
95
111
|
const [basePath, isArr, isIndexProp] = preparePath(path);
|
|
96
112
|
const isIndex = typeof basePath === 'number';
|
|
@@ -127,24 +143,38 @@ function getSet(isSet = false) {
|
|
|
127
143
|
};
|
|
128
144
|
};
|
|
129
145
|
}
|
|
146
|
+
function resolveArrayNotation(path, pos) {
|
|
147
|
+
const index = Number.parseInt(path.slice(pos + 1), 10);
|
|
148
|
+
if (!Number.isNaN(index)) {
|
|
149
|
+
const basePath = path.slice(0, pos).trim();
|
|
150
|
+
return basePath ? [`${basePath}][`, index] : [index];
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
return path.trim();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function resolveParentNotation(path) {
|
|
157
|
+
if (path.startsWith('^^') && path.length > 2) {
|
|
158
|
+
return ['^^', path.slice(2).trim()];
|
|
159
|
+
}
|
|
160
|
+
else if (path.length > 1 && path !== '^^') {
|
|
161
|
+
return ['^^', path.slice(1).trim()];
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return path.trim();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
130
167
|
function splitUpArrayAndParentNotation(path) {
|
|
131
168
|
const pos = path.indexOf('[');
|
|
132
169
|
if (pos > -1 && path[pos - 1] !== '\\') {
|
|
133
|
-
|
|
134
|
-
if (!Number.isNaN(index)) {
|
|
135
|
-
const basePath = path.slice(0, pos).trim();
|
|
136
|
-
return basePath ? [`${basePath}][`, index] : [index];
|
|
137
|
-
}
|
|
170
|
+
return resolveArrayNotation(path, pos);
|
|
138
171
|
}
|
|
139
172
|
else if (path.startsWith('^')) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
return ['^^', path.slice(1).trim()];
|
|
145
|
-
}
|
|
173
|
+
return resolveParentNotation(path);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
return path.trim();
|
|
146
177
|
}
|
|
147
|
-
return path.trim();
|
|
148
178
|
}
|
|
149
179
|
function pathToNextOperations(path, isSet = false) {
|
|
150
180
|
if (!path || path === '.') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSet.js","sourceRoot":"","sources":["../../src/operations/getSet.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EACL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,UAAU,
|
|
1
|
+
{"version":3,"file":"getSet.js","sourceRoot":"","sources":["../../src/operations/getSet.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,7 @@ export interface Props extends TransformerProps {
|
|
|
3
3
|
arrayPath: Path;
|
|
4
4
|
propPath: Path;
|
|
5
5
|
matchSeveral?: boolean;
|
|
6
|
+
flip?: boolean;
|
|
6
7
|
}
|
|
7
|
-
export
|
|
8
|
+
export declare function lookup({ arrayPath, propPath, matchSeveral, flip, }: Props): Operation;
|
|
9
|
+
export declare function lookdown(props: Props): Operation;
|
|
@@ -1,48 +1,44 @@
|
|
|
1
|
-
import
|
|
1
|
+
import mapAny from 'map-any/async.js';
|
|
2
|
+
import { getStateValue, setStateValue, goForward, revFromState, } from '../utils/stateHelpers.js';
|
|
2
3
|
import { defToDataMapper, defToOperation } from '../utils/definitionHelpers.js';
|
|
3
4
|
import { noopNext } from '../utils/stateHelpers.js';
|
|
4
|
-
import xor from '../utils/xor.js';
|
|
5
5
|
const FLATTEN_DEPTH = 1;
|
|
6
6
|
const flattenIfArray = (data) => Array.isArray(data) ? data.flat(FLATTEN_DEPTH) : data;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return val;
|
|
16
|
-
}
|
|
7
|
+
const findAllMatches = (getProp) => async function findAllMatches(value, arr, state) {
|
|
8
|
+
const results = await Promise.all(arr.map(async (val) => await getProp(val, state)));
|
|
9
|
+
return arr.filter((_v, index) => results[index] === value);
|
|
10
|
+
};
|
|
11
|
+
const findOneMatch = (getProp) => async function findOneMatch(value, arr, state) {
|
|
12
|
+
for (const val of arr) {
|
|
13
|
+
if ((await getProp(val, state)) === value) {
|
|
14
|
+
return val;
|
|
17
15
|
}
|
|
18
|
-
return undefined;
|
|
19
16
|
}
|
|
17
|
+
return undefined;
|
|
20
18
|
};
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
const { value: arr } = await getArray({})(noopNext)(state);
|
|
29
|
-
return arr ? matchInArray(arr, state) : async () => undefined;
|
|
30
|
-
}
|
|
19
|
+
const matchInArray = (getArray, match) => (state) => {
|
|
20
|
+
return async (value) => {
|
|
21
|
+
const fwdState = goForward(state);
|
|
22
|
+
const { value: arr } = await getArray({})(noopNext)(goForward(fwdState));
|
|
23
|
+
return Array.isArray(arr) ? match(value, arr, fwdState) : undefined;
|
|
31
24
|
};
|
|
32
25
|
};
|
|
33
|
-
export
|
|
34
|
-
return (options) =>
|
|
26
|
+
export function lookup({ arrayPath, propPath, matchSeveral = false, flip = false, }) {
|
|
27
|
+
return (options) => {
|
|
35
28
|
const getter = defToDataMapper(propPath, options);
|
|
36
|
-
const
|
|
37
|
-
|
|
29
|
+
const matchFn = matchInArray(defToOperation(arrayPath, options), matchSeveral ? findAllMatches(getter) : findOneMatch(getter));
|
|
30
|
+
const extractProp = (state) => async (value) => await getter(value, goForward(state));
|
|
31
|
+
return (next) => async function doLookup(state) {
|
|
38
32
|
const nextState = await next(state);
|
|
39
|
-
const fn = await mapValueFn(nextState);
|
|
40
33
|
const value = getStateValue(nextState);
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
34
|
+
const rev = revFromState(state, flip);
|
|
35
|
+
const matcher = rev ? extractProp : matchFn;
|
|
36
|
+
const matches = await mapAny(matcher(nextState), value);
|
|
44
37
|
return setStateValue(nextState, flattenIfArray(matches));
|
|
45
38
|
};
|
|
46
39
|
};
|
|
47
40
|
}
|
|
41
|
+
export function lookdown(props) {
|
|
42
|
+
return lookup({ ...props, flip: !props.flip });
|
|
43
|
+
}
|
|
48
44
|
//# sourceMappingURL=lookup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/operations/lookup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/operations/lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { Operation, TransformDefinition } from '../types.js';
|
|
1
|
+
import type { Operation, State, TransformDefinition } from '../types.js';
|
|
2
2
|
export declare function mergeExisting<T, U>(target: T[], source: U[]): U | (U | T | (U & T))[];
|
|
3
|
+
export declare function mergeStates(state: State, thisState: State): State;
|
|
3
4
|
export default function merge(...defs: TransformDefinition[]): Operation;
|
package/dist/operations/merge.js
CHANGED
|
@@ -14,7 +14,7 @@ export function mergeExisting(target, source) {
|
|
|
14
14
|
}
|
|
15
15
|
return target;
|
|
16
16
|
}
|
|
17
|
-
function mergeStates(state, thisState) {
|
|
17
|
+
export function mergeStates(state, thisState) {
|
|
18
18
|
const target = getStateValue(state);
|
|
19
19
|
const source = getStateValue(thisState);
|
|
20
20
|
const value = !isObject(source)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/operations/merge.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,aAAa,CAC3B,MAAW,EACX,MAAW;IAEX,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;QAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAE9B,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAO,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;gBACjD,UAAU,EAAE,aAAa;aAC1B,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,CAAA;KACX;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/operations/merge.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,MAAM,UAAU,aAAa,CAC3B,MAAW,EACX,MAAW;IAEX,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;QAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAE9B,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAO,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;gBACjD,UAAU,EAAE,aAAa;aAC1B,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,CAAA;KACX;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,SAAgB;IACxD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IAEvC,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YACnB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAA;IAE5D,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAG,IAA2B;IAC1D,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;SACpE;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACjC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAC5C,CAAA;QAED,OAAO,KAAK,WAAW,KAAK;YAC1B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAA;YACnC,IAAI,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE;gBACjD,OAAO,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;aAC3C;iBAAM;gBACL,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CACjD,CAAA;gBACD,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;aAClC;QACH,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -7,13 +7,10 @@ export default function modify(def) {
|
|
|
7
7
|
const runFn = defToOperation(def, options);
|
|
8
8
|
return (next) => async (state) => {
|
|
9
9
|
const nextState = await next(state);
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
return setStateValue(nextState, isObject(nextValue) && isObject(thisValue)
|
|
15
|
-
? { ...thisValue, ...nextValue }
|
|
16
|
-
: nextValue);
|
|
10
|
+
const thisState = await runFn(options)(noopNext)(goForward(nextState));
|
|
11
|
+
const target = getTargetFromState(nextState);
|
|
12
|
+
const value = getStateValue(thisState);
|
|
13
|
+
return setStateValue(nextState, isObject(target) && isObject(value) ? { ...value, ...target } : target);
|
|
17
14
|
};
|
|
18
15
|
};
|
|
19
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modify.js","sourceRoot":"","sources":["../../src/operations/modify.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,SAAS,GACV,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAwB;IACrD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC1C,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAA;YACnC,MAAM,
|
|
1
|
+
{"version":3,"file":"modify.js","sourceRoot":"","sources":["../../src/operations/modify.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,SAAS,GACV,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,GAAwB;IACrD,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC1C,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAA;YACnC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;YAEtE,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;YAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;YAEtC,OAAO,aAAa,CAClB,SAAS,EACT,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CACvE,CAAA;QACH,CAAC,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
|
package/dist/operations/pipe.js
CHANGED
|
@@ -3,8 +3,7 @@ import iterate from './iterate.js';
|
|
|
3
3
|
import transform from './transform.js';
|
|
4
4
|
import flatten from '../transformers/flatten.js';
|
|
5
5
|
import { defToOperations } from '../utils/definitionHelpers.js';
|
|
6
|
-
import
|
|
7
|
-
import { setValueFromState } from '../utils/stateHelpers.js';
|
|
6
|
+
import { setValueFromState, revFromState } from '../utils/stateHelpers.js';
|
|
8
7
|
function createRun(fns, next) {
|
|
9
8
|
let fn = next;
|
|
10
9
|
for (const f of fns) {
|
|
@@ -44,8 +43,9 @@ export default function pipe(defs, doReturnContext = false) {
|
|
|
44
43
|
const runFwd = createRun(fns, next);
|
|
45
44
|
const runRev = createRun(Array.from(fns).reverse(), next);
|
|
46
45
|
return async function doPipe(state) {
|
|
47
|
-
const
|
|
48
|
-
|
|
46
|
+
const thisState = revFromState(state)
|
|
47
|
+
? await runRev(state)
|
|
48
|
+
: await runFwd(state);
|
|
49
49
|
return doReturnContext ? thisState : setValueFromState(state, thisState);
|
|
50
50
|
};
|
|
51
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/operations/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,SAAS,MAAM,gBAAgB,CAAA;AACtC,OAAO,OAAO,MAAM,4BAA4B,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../src/operations/pipe.ts"],"names":[],"mappings":"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"}
|
package/dist/operations/props.js
CHANGED
|
@@ -1,41 +1,70 @@
|
|
|
1
1
|
import iterate from './iterate.js';
|
|
2
|
-
import modify from './modify.js';
|
|
3
2
|
import pipe from './pipe.js';
|
|
4
3
|
import { set } from './getSet.js';
|
|
5
|
-
import { divide } from './directionals.js';
|
|
4
|
+
import { divide, fwd, rev } from './directionals.js';
|
|
6
5
|
import plug from './plug.js';
|
|
7
|
-
import { getStateValue, setStateValue, setTargetOnState, setValueFromState, isNonvalueState, stopIteration, } from '../utils/stateHelpers.js';
|
|
6
|
+
import { getStateValue, setStateValue, getTargetFromState, setTargetOnState, setValueFromState, isNonvalueState, stopIteration, } from '../utils/stateHelpers.js';
|
|
8
7
|
import { isTransformObject, isTransformDefinition, defToOperation, } from '../utils/definitionHelpers.js';
|
|
9
8
|
import { noopNext } from '../utils/stateHelpers.js';
|
|
10
|
-
import { isObject } from '../utils/is.js';
|
|
11
|
-
function
|
|
12
|
-
const
|
|
13
|
-
return
|
|
9
|
+
import { isObject, isNotNullOrUndefined } from '../utils/is.js';
|
|
10
|
+
function pathHasModify(path) {
|
|
11
|
+
const index = path.indexOf('$modify');
|
|
12
|
+
return (index > -1 &&
|
|
13
|
+
(index === 0 || path[index - 1] === '.') &&
|
|
14
|
+
(path.length === index + 7 || path[index + 7] === '.'));
|
|
14
15
|
}
|
|
15
|
-
function
|
|
16
|
-
if (
|
|
17
|
-
|
|
18
|
-
return (rev = false) => !rev;
|
|
16
|
+
function isPathWithModify(pipeline) {
|
|
17
|
+
if (Array.isArray(pipeline)) {
|
|
18
|
+
return pipeline.some(isPathWithModify);
|
|
19
19
|
}
|
|
20
|
-
else if (
|
|
21
|
-
|
|
22
|
-
return (rev = false) => rev;
|
|
20
|
+
else if (typeof pipeline !== 'string') {
|
|
21
|
+
return false;
|
|
23
22
|
}
|
|
24
23
|
else {
|
|
25
|
-
return ()
|
|
24
|
+
return pathHasModify(pipeline);
|
|
26
25
|
}
|
|
27
26
|
}
|
|
27
|
+
function isRegularProp(entry) {
|
|
28
|
+
const [prop, pipeline] = entry;
|
|
29
|
+
return ((prop[0] !== '$' ||
|
|
30
|
+
(isPathWithModify(prop) && !isPathWithModify(pipeline))) &&
|
|
31
|
+
isTransformDefinition(pipeline));
|
|
32
|
+
}
|
|
33
|
+
function sortProps([aProp, aPipeline], [bProp, bPipeline]) {
|
|
34
|
+
const aIsModify = isPathWithModify(aProp) || isPathWithModify(aPipeline);
|
|
35
|
+
const bIsModify = isPathWithModify(bProp) || isPathWithModify(bPipeline);
|
|
36
|
+
return Number(aIsModify) - Number(bIsModify);
|
|
37
|
+
}
|
|
38
|
+
const checkDirection = (requiredDirection, directionKeyword, directionAlias) => requiredDirection === directionKeyword ||
|
|
39
|
+
(directionAlias && requiredDirection === directionAlias);
|
|
40
|
+
function wrapInDirectional(operation, direction) {
|
|
41
|
+
return (options) => {
|
|
42
|
+
if (checkDirection(direction, 'rev', options.revAlias)) {
|
|
43
|
+
return rev(operation)(options);
|
|
44
|
+
}
|
|
45
|
+
else if (checkDirection(direction, 'fwd', options.fwdAlias)) {
|
|
46
|
+
return fwd(operation)(options);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return operation(options);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const mergeTargetAndValueOperation = () => (next) => async function mergeTargetAndValue(state) {
|
|
54
|
+
const nextState = await next(state);
|
|
55
|
+
const target = getTargetFromState(nextState);
|
|
56
|
+
const value = getStateValue(nextState);
|
|
57
|
+
return isObject(target) && isObject(value)
|
|
58
|
+
? setStateValue(nextState, { ...target, ...value })
|
|
59
|
+
: nextState;
|
|
60
|
+
};
|
|
28
61
|
function runOperationWithOriginalValue({ value }) {
|
|
29
62
|
return async (state, fn) => {
|
|
30
|
-
const nextState = await fn(
|
|
31
|
-
const target = state
|
|
63
|
+
const nextState = await fn(setStateValue(state, value));
|
|
64
|
+
const target = getTargetFromState(state);
|
|
32
65
|
const nextValue = getStateValue(nextState);
|
|
33
66
|
const thisState = setTargetOnState(nextState, nextValue);
|
|
34
|
-
if (isObject(target) && isObject(nextValue)) {
|
|
35
|
-
const thisValue = { ...target, ...nextValue };
|
|
36
|
-
return setStateValue(thisState, thisValue);
|
|
37
|
-
}
|
|
38
|
-
else if (isObject(target)) {
|
|
67
|
+
if (isObject(target) && !isObject(nextValue)) {
|
|
39
68
|
return setStateValue(thisState, target);
|
|
40
69
|
}
|
|
41
70
|
else {
|
|
@@ -54,45 +83,49 @@ function removeSlash(prop) {
|
|
|
54
83
|
}
|
|
55
84
|
return prop;
|
|
56
85
|
}
|
|
86
|
+
function createDirectionalOperation(pipeline, onlyFwd, onlyRev) {
|
|
87
|
+
if (onlyRev && onlyFwd) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
else if (onlyRev) {
|
|
91
|
+
return divide(plug(), pipeline);
|
|
92
|
+
}
|
|
93
|
+
else if (onlyFwd) {
|
|
94
|
+
return divide(pipeline, plug());
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return pipe(pipeline);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
57
100
|
const createSetPipeline = (options) => function createSetPipeline([prop, pipeline]) {
|
|
58
101
|
if (isTransformObject(pipeline)) {
|
|
59
|
-
pipeline =
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
102
|
+
pipeline = [
|
|
103
|
+
rev(mergeTargetAndValueOperation),
|
|
104
|
+
{
|
|
105
|
+
...pipeline,
|
|
106
|
+
$iterate: pipeline.$iterate || isArr(prop),
|
|
107
|
+
},
|
|
108
|
+
];
|
|
63
109
|
}
|
|
64
110
|
const unslashedProp = removeSlash(prop);
|
|
65
|
-
const
|
|
111
|
+
const isSlashed = prop !== unslashedProp;
|
|
112
|
+
const onlyFwd = isPathWithModify(unslashedProp);
|
|
113
|
+
const onlyRev = isSlashed || isPathWithModify(pipeline);
|
|
66
114
|
const operations = [defToOperation(pipeline, options), set(unslashedProp)];
|
|
67
|
-
return onlyRev
|
|
68
|
-
? divide(plug(), operations)(options)
|
|
69
|
-
: pipe(operations)(options);
|
|
115
|
+
return createDirectionalOperation(operations, onlyFwd, onlyRev);
|
|
70
116
|
};
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
return (next) => {
|
|
75
|
-
const fn = modifyFn(next);
|
|
76
|
-
return async (state, nextState) => await fn(setTargetOnState(state, getStateValue(nextState)));
|
|
77
|
-
};
|
|
117
|
+
const runOperations = (stateMappers, options) => async (state) => {
|
|
118
|
+
if (isNonvalueState(state, options.nonvalues)) {
|
|
119
|
+
return state;
|
|
78
120
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (isNonvalueState(state, options.nonvalues)) {
|
|
85
|
-
return state;
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
const run = runOperationWithOriginalValue(state);
|
|
89
|
-
let nextState = state;
|
|
90
|
-
for (const operation of operations) {
|
|
91
|
-
nextState = await run(nextState, operation);
|
|
92
|
-
}
|
|
93
|
-
return modifyFn(nextState, state);
|
|
121
|
+
else {
|
|
122
|
+
const run = runOperationWithOriginalValue(state);
|
|
123
|
+
let nextState = state;
|
|
124
|
+
for (const stateMapper of stateMappers) {
|
|
125
|
+
nextState = await run(nextState, stateMapper(noopNext));
|
|
94
126
|
}
|
|
95
|
-
|
|
127
|
+
return nextState;
|
|
128
|
+
}
|
|
96
129
|
};
|
|
97
130
|
const setStateProps = (state, noDefaults, flip) => ({
|
|
98
131
|
...state,
|
|
@@ -100,33 +133,36 @@ const setStateProps = (state, noDefaults, flip) => ({
|
|
|
100
133
|
flip: flip || state.flip || false,
|
|
101
134
|
target: undefined,
|
|
102
135
|
});
|
|
103
|
-
|
|
104
|
-
|
|
136
|
+
const fixModifyPath = (def) => def.$modify === true ? { ...def, $modify: '.' } : def;
|
|
137
|
+
const createStateMappers = (def, options) => Object.entries(def)
|
|
138
|
+
.filter(isRegularProp)
|
|
139
|
+
.sort(sortProps)
|
|
140
|
+
.map(createSetPipeline(options))
|
|
141
|
+
.filter(isNotNullOrUndefined)
|
|
142
|
+
.map((fn) => fn(options));
|
|
143
|
+
function prepareOperation(def) {
|
|
105
144
|
return (options) => {
|
|
106
|
-
const nextStateMappers =
|
|
107
|
-
.filter(isRegularProp)
|
|
108
|
-
.map(createSetPipeline(options));
|
|
145
|
+
const nextStateMappers = createStateMappers(fixModifyPath(def), options);
|
|
109
146
|
if (nextStateMappers.length === 0) {
|
|
110
147
|
return (next) => async (state) => setStateValue(await next(state), {});
|
|
111
148
|
}
|
|
112
|
-
const
|
|
113
|
-
const
|
|
114
|
-
const isWrongDirectionFn = isWrongDirection(def.$direction, options);
|
|
149
|
+
const run = runOperations(nextStateMappers, options);
|
|
150
|
+
const runWithIterateWhenNeeded = def.$iterate === true ? iterate(() => () => run)(options)(noopNext) : run;
|
|
115
151
|
return (next) => {
|
|
116
|
-
const run = runFn(noopNext);
|
|
117
152
|
return async function doMutate(state) {
|
|
118
153
|
const nextState = await next(state);
|
|
119
|
-
if (isNonvalueState(nextState, options.nonvalues)
|
|
120
|
-
isWrongDirectionFn(nextState.rev)) {
|
|
154
|
+
if (isNonvalueState(nextState, options.nonvalues)) {
|
|
121
155
|
return nextState;
|
|
122
156
|
}
|
|
123
157
|
const propsState = stopIteration(setStateProps(nextState, def.$noDefaults, def.$flip));
|
|
124
|
-
const thisState =
|
|
125
|
-
? await iterate(() => () => run)(options)(noopNext)(propsState)
|
|
126
|
-
: await run(propsState);
|
|
158
|
+
const thisState = await runWithIterateWhenNeeded(propsState);
|
|
127
159
|
return setValueFromState(nextState, thisState);
|
|
128
160
|
};
|
|
129
161
|
};
|
|
130
162
|
};
|
|
131
163
|
}
|
|
164
|
+
export default function props(def) {
|
|
165
|
+
const operation = prepareOperation(def);
|
|
166
|
+
return wrapInDirectional(operation, def.$direction);
|
|
167
|
+
}
|
|
132
168
|
//# sourceMappingURL=props.js.map
|