@rimbu/deep 0.9.1 → 0.10.1
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 +27 -16
- package/dist/main/index.js +12 -3
- package/dist/main/index.js.map +1 -1
- package/dist/main/internal.js +4 -6
- package/dist/main/internal.js.map +1 -1
- package/dist/main/match.js +197 -132
- package/dist/main/match.js.map +1 -1
- package/dist/main/patch.js +125 -106
- package/dist/main/patch.js.map +1 -1
- package/dist/main/path.js +16 -41
- package/dist/main/path.js.map +1 -1
- package/dist/main/protected.js +24 -0
- package/dist/main/protected.js.map +1 -0
- package/dist/main/tuple.js +1 -1
- package/dist/main/tuple.js.map +1 -1
- package/dist/module/index.js +3 -2
- package/dist/module/index.js.map +1 -1
- package/dist/module/internal.js +2 -4
- package/dist/module/internal.js.map +1 -1
- package/dist/module/match.js +180 -97
- package/dist/module/match.js.map +1 -1
- package/dist/module/patch.js +113 -87
- package/dist/module/patch.js.map +1 -1
- package/dist/module/path.js +15 -36
- package/dist/module/path.js.map +1 -1
- package/dist/module/protected.js +20 -0
- package/dist/module/protected.js.map +1 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/internal.d.ts +2 -4
- package/dist/types/match.d.ts +93 -80
- package/dist/types/patch.d.ts +64 -61
- package/dist/types/path.d.ts +9 -20
- package/dist/types/protected.d.ts +34 -0
- package/package.json +5 -5
- package/src/index.ts +12 -2
- package/src/internal.ts +3 -4
- package/src/match.ts +254 -163
- package/src/patch.ts +204 -147
- package/src/path.ts +20 -44
- package/src/protected.ts +46 -0
- package/dist/main/immutable.js +0 -12
- package/dist/main/immutable.js.map +0 -1
- package/dist/main/literal.js +0 -41
- package/dist/main/literal.js.map +0 -1
- package/dist/module/immutable.js +0 -8
- package/dist/module/immutable.js.map +0 -1
- package/dist/module/literal.js +0 -37
- package/dist/module/literal.js.map +0 -1
- package/dist/types/immutable.d.ts +0 -13
- package/dist/types/literal.d.ts +0 -48
- package/src/immutable.ts +0 -21
- package/src/literal.ts +0 -70
package/dist/main/patch.js
CHANGED
|
@@ -1,136 +1,155 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.patch = exports.patchNested = exports.Patch = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var base_1 = require("@rimbu/base");
|
|
6
|
-
var internal_1 = require("./internal");
|
|
7
|
-
/**
|
|
8
|
-
* Returns an updated version of given `value`, without modifying the value, where the contents
|
|
9
|
-
* are updated according to the given `patches` Patch array.
|
|
10
|
-
* @typeparam T - the type of the value to patch
|
|
11
|
-
* @param value - the value to update
|
|
12
|
-
* @param patches - one or more `Patch` objects indicating modifications to the value
|
|
13
|
-
* @example
|
|
14
|
-
* ```ts
|
|
15
|
-
* patch({ g: { h: 5 }})({ g: { h: 6 }}) // => { g: { h: 6 }}
|
|
16
|
-
* patch({ g: { h: 5 }})({ g: { h: v => v + 1 }}) // => { g: { h: 6 }}
|
|
17
|
-
* patch({ g: { h: 5 }})({ g: { h: 1 }}, { g: { h: v => v + 1 }})
|
|
18
|
-
* // => { g: { h: 2 }}
|
|
19
|
-
* patch({ a: 1, b: 3 })({ a: (v, p) => v * p.b, (v, p) => v + p.a })
|
|
20
|
-
* // => { a: 3, b: 4 }
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
function patch(value) {
|
|
24
|
-
return function () {
|
|
25
|
-
var e_1, _a;
|
|
26
|
-
var patches = [];
|
|
27
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
28
|
-
patches[_i] = arguments[_i];
|
|
29
|
-
}
|
|
30
|
-
var result = value;
|
|
31
|
-
try {
|
|
32
|
-
for (var patches_1 = (0, tslib_1.__values)(patches), patches_1_1 = patches_1.next(); !patches_1_1.done; patches_1_1 = patches_1.next()) {
|
|
33
|
-
var p = patches_1_1.value;
|
|
34
|
-
result = patchSingle(result, p, result, result);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
38
|
-
finally {
|
|
39
|
-
try {
|
|
40
|
-
if (patches_1_1 && !patches_1_1.done && (_a = patches_1.return)) _a.call(patches_1);
|
|
41
|
-
}
|
|
42
|
-
finally { if (e_1) throw e_1.error; }
|
|
43
|
-
}
|
|
44
|
-
return result;
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
exports.patch = patch;
|
|
48
6
|
var Patch;
|
|
49
7
|
(function (Patch) {
|
|
50
|
-
Patch.MAP = Symbol('Patch.ALL');
|
|
51
8
|
/**
|
|
52
|
-
* Returns a function that patches a given
|
|
53
|
-
*
|
|
54
|
-
* @typeparam
|
|
55
|
-
* @
|
|
56
|
-
* @param patches - the patches to apply to a given object
|
|
9
|
+
* Returns a function that patches a given `value` with the given `patchItems`.
|
|
10
|
+
* @typeparam T - the patch value type
|
|
11
|
+
* @typeparam Q - the input value type
|
|
12
|
+
* @param patchItems - a number of `Patch` objects that patch a given value of type T.
|
|
57
13
|
* @example
|
|
58
14
|
* ```ts
|
|
59
|
-
* const
|
|
60
|
-
*
|
|
61
|
-
* // => { a:
|
|
15
|
+
* const items = [{ a: 1, b: 'a' }, { a: 2, b: 'b' }]
|
|
16
|
+
* items.map(Patch.create({ a: v => v + 1 }))
|
|
17
|
+
* // => [{ a: 2, b: 'a' }, { a: 3, b: 'b' }]
|
|
62
18
|
* ```
|
|
63
19
|
*/
|
|
64
20
|
function create() {
|
|
65
|
-
var
|
|
21
|
+
var patchItems = [];
|
|
66
22
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
67
|
-
|
|
23
|
+
patchItems[_i] = arguments[_i];
|
|
68
24
|
}
|
|
69
|
-
return function (value) {
|
|
70
|
-
return patch(value).apply(void 0, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(patches), false));
|
|
71
|
-
};
|
|
25
|
+
return function (value) { return patch.apply(void 0, tslib_1.__spreadArray([value], tslib_1.__read(patchItems), false)); };
|
|
72
26
|
}
|
|
73
27
|
Patch.create = create;
|
|
74
28
|
})(Patch = exports.Patch || (exports.Patch = {}));
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
29
|
+
var NestedObj = /** @class */ (function () {
|
|
30
|
+
function NestedObj(patchDataItems) {
|
|
31
|
+
this.patchDataItems = patchDataItems;
|
|
32
|
+
}
|
|
33
|
+
return NestedObj;
|
|
34
|
+
}());
|
|
35
|
+
/**
|
|
36
|
+
* Returns a nested patch object based on the given `patchDataItems` that work on a subpart
|
|
37
|
+
* of a larger object to be patched.
|
|
38
|
+
* @typeparam T - the input value type
|
|
39
|
+
* @typeparam R - the root object type
|
|
40
|
+
* @typeparam Q - the patch type
|
|
41
|
+
* @param patchDataItems - a number of `Patch` objects to be applied to the subpart of the object
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* patch({ a: 1, b: { c: true, d: 'a' } }, { b: patchNested({ d: 'b' }) })
|
|
45
|
+
* // => { a: 1, b: { c: true, d: 'b' } }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
function patchNested() {
|
|
49
|
+
var patchDataItems = [];
|
|
50
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
51
|
+
patchDataItems[_i] = arguments[_i];
|
|
52
|
+
}
|
|
53
|
+
return new NestedObj(patchDataItems);
|
|
54
|
+
}
|
|
55
|
+
exports.patchNested = patchNested;
|
|
56
|
+
/**
|
|
57
|
+
* Returns an immutably updated version of the given `value` where the given `patchItems` have been
|
|
58
|
+
* applied to the result.
|
|
59
|
+
* @param value - the input value to patch
|
|
60
|
+
* @param patchItems - the `Patch` objects to apply to the input value
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const input = { a: 1, b: { c: true, d: 'a' } }
|
|
64
|
+
* patch(input, { a: 2 }) // => { a: 2, b: { c: true, d: 'a' } }
|
|
65
|
+
* patch(input: ($) => ({ b: $({ c: v => !v }) }) )
|
|
66
|
+
* // => { a: 1, b: { c: false, d: 'a' } }
|
|
67
|
+
* patch(input: ($) => ({ a: v => v + 1, b: $({ d: 'q' }) }) )
|
|
68
|
+
* // => { a: 2, b: { c: true, d: 'q' } }
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
function patch(value) {
|
|
72
|
+
var patchItems = [];
|
|
73
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
74
|
+
patchItems[_i - 1] = arguments[_i];
|
|
78
75
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
var newValue = (0, base_1.isPlainObj)(value) ? tslib_1.__assign({}, value) : value;
|
|
77
|
+
var changedRef = { changed: false };
|
|
78
|
+
var result = processPatch(newValue, newValue, patchItems, changedRef);
|
|
79
|
+
if (changedRef.changed)
|
|
80
|
+
return result;
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
exports.patch = patch;
|
|
84
|
+
function processPatch(value, root, patchDataItems, changedRef) {
|
|
85
|
+
var i = -1;
|
|
86
|
+
var len = patchDataItems.length;
|
|
87
|
+
while (++i < len) {
|
|
88
|
+
var patchItem = patchDataItems[i];
|
|
89
|
+
if (patchItem instanceof Function) {
|
|
90
|
+
var item = patchItem(patchNested);
|
|
91
|
+
if (item instanceof NestedObj) {
|
|
92
|
+
processPatch(value, root, item.patchDataItems, changedRef);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
processPatchObj(value, root, item, changedRef);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
processPatchObj(value, root, patchItem, changedRef);
|
|
84
100
|
}
|
|
101
|
+
}
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
function processPatchObj(value, root, patchData, changedRef) {
|
|
105
|
+
if (undefined === value || null === value) {
|
|
85
106
|
return value;
|
|
86
107
|
}
|
|
87
|
-
if (
|
|
88
|
-
base_1.RimbuError.
|
|
108
|
+
if (!(0, base_1.isPlainObj)(patchData)) {
|
|
109
|
+
base_1.RimbuError.throwInvalidUsageError('patch: received patch object should be a plain object');
|
|
89
110
|
}
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
if (null === patcher)
|
|
93
|
-
return null;
|
|
94
|
-
if (internal_1.Literal.isLiteral(patcher)) {
|
|
95
|
-
return internal_1.Literal.getValue(patcher);
|
|
111
|
+
if (!(0, base_1.isPlainObj)(value)) {
|
|
112
|
+
base_1.RimbuError.throwInvalidUsageError('patch: received source object should be a plain object');
|
|
96
113
|
}
|
|
97
|
-
var
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
var result = undefined;
|
|
104
|
-
for (var i = 0; i < arr.length; i++) {
|
|
105
|
-
var currentItem = arr[i];
|
|
106
|
-
var newItem = patchSingle(currentItem, itemPatch, value, root);
|
|
107
|
-
if (!Object.is(newItem, currentItem)) {
|
|
108
|
-
if (undefined === result) {
|
|
109
|
-
result = arr.slice();
|
|
110
|
-
}
|
|
111
|
-
result[i] = newItem;
|
|
112
|
-
}
|
|
114
|
+
for (var key in patchData) {
|
|
115
|
+
var target = value[key];
|
|
116
|
+
// prevent prototype pollution
|
|
117
|
+
if (key === '__proto__' ||
|
|
118
|
+
(key === 'constructor' && target instanceof Function)) {
|
|
119
|
+
base_1.RimbuError.throwInvalidUsageError("patch: received patch object key '".concat(key, "' which is not allowed to prevent prototype pollution"));
|
|
113
120
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (!(key in clone) && typeof patchKey === 'function')
|
|
121
|
-
continue;
|
|
122
|
-
var oldValue = clone[key];
|
|
123
|
-
if (undefined === patchKey) {
|
|
124
|
-
base_1.RimbuError.throwInvalidUsageError('Do not use undefined directly in patch objects, but use Literal.of(undefined) instead due to type limitations.');
|
|
121
|
+
var update = patchData[key];
|
|
122
|
+
if (!(key in value) && update instanceof Function) {
|
|
123
|
+
base_1.RimbuError.throwInvalidUsageError("patch: received update function object key ".concat(key, " but the key was not present in the source object. Either explicitely set the value in the source to undefined or use a direct value."));
|
|
124
|
+
}
|
|
125
|
+
if (undefined === update) {
|
|
126
|
+
base_1.RimbuError.throwInvalidUsageError("patch: received 'undefined' as patch value. Due to type system issues we cannot prevent this through typing, but please use '() => undefined' or '() => yourVar' instead. This value will be ignored for safety.");
|
|
125
127
|
}
|
|
126
|
-
var newValue =
|
|
127
|
-
if (
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
var newValue = void 0;
|
|
129
|
+
if (update instanceof Function) {
|
|
130
|
+
newValue = processPatchObjItem(target, root, update(target, value, root), changedRef);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
newValue = processPatchObjItem(target, root, update, changedRef);
|
|
134
|
+
}
|
|
135
|
+
if (!Object.is(newValue, target)) {
|
|
136
|
+
value[key] = newValue;
|
|
137
|
+
changedRef.changed = true;
|
|
130
138
|
}
|
|
131
139
|
}
|
|
132
|
-
if (changed)
|
|
133
|
-
return clone;
|
|
134
140
|
return value;
|
|
135
141
|
}
|
|
142
|
+
function processPatchObjItem(value, root, patchResult, superChangedRef) {
|
|
143
|
+
if (patchResult instanceof NestedObj) {
|
|
144
|
+
var newValue = (0, base_1.isPlainObj)(value) ? tslib_1.__assign({}, value) : value;
|
|
145
|
+
var changedRef = { changed: false };
|
|
146
|
+
var result = processPatch(newValue, root, patchResult.patchDataItems, changedRef);
|
|
147
|
+
if (changedRef.changed) {
|
|
148
|
+
superChangedRef.changed = true;
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
return value;
|
|
152
|
+
}
|
|
153
|
+
return patchResult;
|
|
154
|
+
}
|
|
136
155
|
//# sourceMappingURL=patch.js.map
|
package/dist/main/patch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/patch.ts"],"names":[],"mappings":"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"}
|
package/dist/main/path.js
CHANGED
|
@@ -13,18 +13,18 @@ var Path;
|
|
|
13
13
|
* @param path - the path into the object
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
16
|
-
* console.log(Path.
|
|
16
|
+
* console.log(Path.get({ a: { b: { c: 5 } } }), 'a.b')
|
|
17
17
|
* // => { c: 5 }
|
|
18
|
-
* console.log(Path.
|
|
18
|
+
* console.log(Path.get({ a: { b: { c: 5 } } }), 'a.b.c')
|
|
19
19
|
* // => 5
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
|
-
function
|
|
22
|
+
function get(source, path) {
|
|
23
23
|
var e_1, _a;
|
|
24
24
|
var items = path.split('.');
|
|
25
25
|
var result = source;
|
|
26
26
|
try {
|
|
27
|
-
for (var items_1 =
|
|
27
|
+
for (var items_1 = tslib_1.__values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
|
|
28
28
|
var item = items_1_1.value;
|
|
29
29
|
result = result[item];
|
|
30
30
|
}
|
|
@@ -38,7 +38,7 @@ var Path;
|
|
|
38
38
|
}
|
|
39
39
|
return result;
|
|
40
40
|
}
|
|
41
|
-
Path.
|
|
41
|
+
Path.get = get;
|
|
42
42
|
/**
|
|
43
43
|
* Sets the value at the given path in the source to the given value.
|
|
44
44
|
* @param source - the object to update
|
|
@@ -46,20 +46,22 @@ var Path;
|
|
|
46
46
|
* @param value - the new value to set at the given position
|
|
47
47
|
* @example
|
|
48
48
|
* ```ts
|
|
49
|
-
* console.log(Path.
|
|
49
|
+
* console.log(Path.update({ a: { b: { c: 5 } } }, 'a.b.c', v => v + 5)
|
|
50
|
+
* // => { a: { b: { c: 6 } } }
|
|
50
51
|
* ```
|
|
51
52
|
*/
|
|
52
|
-
function
|
|
53
|
+
function update(source, path, value) {
|
|
53
54
|
var e_2, _a;
|
|
54
55
|
var items = path.split('.');
|
|
55
56
|
var last = items.pop();
|
|
56
|
-
var
|
|
57
|
-
var current =
|
|
57
|
+
var root = {};
|
|
58
|
+
var current = root;
|
|
58
59
|
try {
|
|
59
|
-
for (var items_2 =
|
|
60
|
+
for (var items_2 = tslib_1.__values(items), items_2_1 = items_2.next(); !items_2_1.done; items_2_1 = items_2.next()) {
|
|
60
61
|
var item = items_2_1.value;
|
|
61
|
-
|
|
62
|
-
current =
|
|
62
|
+
var next = {};
|
|
63
|
+
current[item] = (0, internal_1.patchNested)(next);
|
|
64
|
+
current = next;
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
@@ -69,36 +71,9 @@ var Path;
|
|
|
69
71
|
}
|
|
70
72
|
finally { if (e_2) throw e_2.error; }
|
|
71
73
|
}
|
|
72
|
-
var oldValue = current[last];
|
|
73
|
-
if (Object.is(oldValue, value))
|
|
74
|
-
return source;
|
|
75
74
|
current[last] = value;
|
|
76
|
-
return
|
|
77
|
-
}
|
|
78
|
-
Path.setValue = setValue;
|
|
79
|
-
/**
|
|
80
|
-
* Patches the value at the given path in the source to the given value using the given
|
|
81
|
-
* `patches`.
|
|
82
|
-
* @param source - the object to update
|
|
83
|
-
* @param path - the path in the object to update
|
|
84
|
-
* @param patches - one or more patches to update the value at the given path
|
|
85
|
-
* @example
|
|
86
|
-
* ```ts
|
|
87
|
-
* console.log(Path.setValue({ a: { b: { c: 5 } } }, 'a.b.c', 8)
|
|
88
|
-
* // => { a: { b: { c: 8 } } }
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
|
-
function patchValue(source, path) {
|
|
92
|
-
var patches = [];
|
|
93
|
-
for (var _i = 2; _i < arguments.length; _i++) {
|
|
94
|
-
patches[_i - 2] = arguments[_i];
|
|
95
|
-
}
|
|
96
|
-
var value = Path.getValue(source, path);
|
|
97
|
-
var newValue = (0, internal_1.patch)(value).apply(void 0, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(patches), false));
|
|
98
|
-
if (Object.is(value, newValue))
|
|
99
|
-
return source;
|
|
100
|
-
return Path.setValue(source, path, newValue);
|
|
75
|
+
return (0, internal_1.patch)(source, root);
|
|
101
76
|
}
|
|
102
|
-
Path.
|
|
77
|
+
Path.update = update;
|
|
103
78
|
})(Path = exports.Path || (exports.Path = {}));
|
|
104
79
|
//# sourceMappingURL=path.js.map
|
package/dist/main/path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/path.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/path.ts"],"names":[],"mappings":";;;;AAGA,uCAAgD;AAchD,IAAiB,IAAI,CAsFpB;AAtFD,WAAiB,IAAI;IAwBnB;;;;;;;;;;;;;OAaG;IACH,SAAgB,GAAG,CACjB,MAAuB,EACvB,IAAO;;QAEP,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9B,IAAI,MAAM,GAAQ,MAAM,CAAC;;YAEzB,KAAmB,IAAA,UAAA,iBAAA,KAAK,CAAA,4BAAA,+CAAE;gBAArB,IAAM,IAAI,kBAAA;gBACb,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;aACvB;;;;;;;;;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAbe,QAAG,MAalB,CAAA;IAED;;;;;;;;;;OAUG;IACH,SAAgB,MAAM,CACpB,MAAuB,EACvB,IAAO,EACP,KAAgC;;QAEhC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAE1B,IAAM,IAAI,GAAwB,EAAE,CAAC;QAErC,IAAI,OAAO,GAAG,IAAI,CAAC;;YAEnB,KAAmB,IAAA,UAAA,iBAAA,KAAK,CAAA,4BAAA,+CAAE;gBAArB,IAAM,IAAI,kBAAA;gBACb,IAAM,IAAI,GAAG,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,sBAAW,EAAC,IAAI,CAAC,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC;aAChB;;;;;;;;;QAED,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAEtB,OAAO,IAAA,gBAAK,EAAI,MAAM,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IArBe,WAAM,SAqBrB,CAAA;AACH,CAAC,EAtFgB,IAAI,GAAJ,YAAI,KAAJ,YAAI,QAsFpB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Protected = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Returns the same value wrapped in the `Protected` type.
|
|
6
|
+
* @param value - the value to wrap
|
|
7
|
+
* @note does not perform any runtime protection, it is only a utility to easily add the `Protected`
|
|
8
|
+
* type to a value
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const obj = Protected({ a: 1, b: { c: true, d: [1] } })
|
|
12
|
+
* obj.a = 2 // compiler error: a is readonly
|
|
13
|
+
* obj.b.c = false // compiler error: c is readonly
|
|
14
|
+
* obj.b.d.push(2) // compiler error: d is a readonly array
|
|
15
|
+
* (obj as any).b.d.push(2) // will actually mutate the object
|
|
16
|
+
* ```
|
|
17
|
+
|
|
18
|
+
* '
|
|
19
|
+
*/
|
|
20
|
+
function Protected(value) {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
exports.Protected = Protected;
|
|
24
|
+
//# sourceMappingURL=protected.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protected.js","sourceRoot":"","sources":["../../src/protected.ts"],"names":[],"mappings":";;;AA2BA;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,SAAS,CAAI,KAAQ;IACnC,OAAO,KAAY,CAAC;AACtB,CAAC;AAFD,8BAEC"}
|
package/dist/main/tuple.js
CHANGED
|
@@ -112,7 +112,7 @@ var Tuple;
|
|
|
112
112
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
113
113
|
values[_i - 1] = arguments[_i];
|
|
114
114
|
}
|
|
115
|
-
return
|
|
115
|
+
return tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(tuple), false), tslib_1.__read(values), false);
|
|
116
116
|
}
|
|
117
117
|
Tuple.append = append;
|
|
118
118
|
/**
|
package/dist/main/tuple.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../src/tuple.ts"],"names":[],"mappings":";;;;AAAA,oCAAkC;AAQlC,IAAiB,KAAK,CAgLrB;AAhLD,WAAiB,KAAK;IAWpB;;;;;;;;OAQG;IACH,SAAgB,EAAE;QAAiC,gBAAY;aAAZ,UAAY,EAAZ,qBAAY,EAAZ,IAAY;YAAZ,2BAAY;;QAC7D,OAAO,MAAa,CAAC;IACvB,CAAC;IAFe,QAAE,KAEjB,CAAA;IAED;;;;;;;;;;OAUG;IACH,SAAgB,QAAQ,CACtB,KAAQ,EACR,KAAQ;QAER,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IALe,cAAQ,WAKvB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,KAAK,CAAyB,KAAQ;QACpD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAFe,WAAK,QAEpB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,MAAM,CAAyB,KAAQ;QACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAFe,YAAM,SAErB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,IAAI,CAClB,KAAyB;QAEzB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAQ,CAAC;IACxC,CAAC;IAJe,UAAI,OAInB,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,SAAgB,QAAQ,CACtB,KAAQ,EACR,KAAQ,EACR,OAAqB;QAErB,OAAO,UAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAe,EAAE,OAAO,CAAM,CAAC;IAC1D,CAAC;IANe,cAAQ,WAMvB,CAAA;IAED;;;;;;;;;;OAUG;IACH,SAAgB,MAAM,CAGpB,KAAQ;QAAE,gBAAY;aAAZ,UAAY,EAAZ,qBAAY,EAAZ,IAAY;YAAZ,+BAAY;;QACtB,
|
|
1
|
+
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../src/tuple.ts"],"names":[],"mappings":";;;;AAAA,oCAAkC;AAQlC,IAAiB,KAAK,CAgLrB;AAhLD,WAAiB,KAAK;IAWpB;;;;;;;;OAQG;IACH,SAAgB,EAAE;QAAiC,gBAAY;aAAZ,UAAY,EAAZ,qBAAY,EAAZ,IAAY;YAAZ,2BAAY;;QAC7D,OAAO,MAAa,CAAC;IACvB,CAAC;IAFe,QAAE,KAEjB,CAAA;IAED;;;;;;;;;;OAUG;IACH,SAAgB,QAAQ,CACtB,KAAQ,EACR,KAAQ;QAER,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IALe,cAAQ,WAKvB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,KAAK,CAAyB,KAAQ;QACpD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAFe,WAAK,QAEpB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,MAAM,CAAyB,KAAQ;QACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAFe,YAAM,SAErB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,IAAI,CAClB,KAAyB;QAEzB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAQ,CAAC;IACxC,CAAC;IAJe,UAAI,OAInB,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,SAAgB,QAAQ,CACtB,KAAQ,EACR,KAAQ,EACR,OAAqB;QAErB,OAAO,UAAG,CAAC,MAAM,CAAC,KAAK,EAAE,KAAe,EAAE,OAAO,CAAM,CAAC;IAC1D,CAAC;IANe,cAAQ,WAMvB,CAAA;IAED;;;;;;;;;;OAUG;IACH,SAAgB,MAAM,CAGpB,KAAQ;QAAE,gBAAY;aAAZ,UAAY,EAAZ,qBAAY,EAAZ,IAAY;YAAZ,+BAAY;;QACtB,sEAAW,KAAK,0BAAK,MAAM,UAAE;IAC/B,CAAC;IALe,YAAM,SAKrB,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,SAAgB,MAAM,CACpB,MAAU,EACV,MAAU;QAEV,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAQ,CAAC;IACtC,CAAC;IALe,YAAM,SAKrB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,IAAI,CAClB,KAA+B;QAE/B,OAAO,UAAG,CAAC,IAAI,CAAC,KAAK,CAAQ,CAAC;IAChC,CAAC;IAJe,UAAI,OAInB,CAAA;IAED;;;;;;;;;OASG;IACH,SAAgB,IAAI,CAClB,KAA+B;QAE/B,OAAO,UAAG,CAAC,IAAI,CAAC,KAAK,CAAQ,CAAC;IAChC,CAAC;IAJe,UAAI,OAInB,CAAA;AACH,CAAC,EAhLgB,KAAK,GAAL,aAAK,KAAL,aAAK,QAgLrB"}
|
package/dist/module/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @packageDocumentation
|
|
3
3
|
*
|
|
4
|
-
* The `@rimbu/deep` package provides utilities to patch and match plain JavaScript objects
|
|
4
|
+
* The `@rimbu/deep` package provides utilities to patch and match plain JavaScript objects.<br/>
|
|
5
5
|
* <br/>
|
|
6
6
|
* See the [Rimbu docs Deep overview page](/docs/deep/overview) for more information.
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export { patch, patchNested, Patch, match, Match, Path, Protected, } from './internal';
|
|
9
|
+
export { Tuple } from './tuple';
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
package/dist/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,EACL,WAAW,EACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/module/internal.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/internal.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/internal.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
|