@fncts/base 0.0.19 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- package/_cjs/data/Environment/definition.cjs.map +1 -1
- package/_cjs/data/{Patch/api.cjs → EnvironmentPatch.cjs} +124 -32
- package/_cjs/data/EnvironmentPatch.cjs.map +1 -0
- package/_mjs/data/Environment/definition.mjs.map +1 -1
- package/_mjs/data/EnvironmentPatch.mjs +184 -0
- package/_mjs/data/EnvironmentPatch.mjs.map +1 -0
- package/_src/data/Environment/definition.ts +6 -0
- package/_src/data/EnvironmentPatch.ts +136 -0
- package/_src/data.ts +1 -1
- package/_src/global.ts +4 -0
- package/data/Environment/definition.d.ts +4 -0
- package/data/EnvironmentPatch.d.ts +73 -0
- package/data.d.ts +1 -1
- package/global.d.ts +4 -0
- package/package.json +1 -1
- package/_cjs/data/Patch/api.cjs.map +0 -1
- package/_cjs/data/Patch/definition.cjs +0 -88
- package/_cjs/data/Patch/definition.cjs.map +0 -1
- package/_cjs/data/Patch.cjs +0 -32
- package/_cjs/data/Patch.cjs.map +0 -1
- package/_mjs/data/Patch/api.mjs +0 -112
- package/_mjs/data/Patch/api.mjs.map +0 -1
- package/_mjs/data/Patch/definition.mjs +0 -61
- package/_mjs/data/Patch/definition.mjs.map +0 -1
- package/_mjs/data/Patch.mjs +0 -4
- package/_mjs/data/Patch.mjs.map +0 -1
- package/_src/data/Patch/api.ts +0 -75
- package/_src/data/Patch/definition.ts +0 -58
- package/_src/data/Patch.ts +0 -4
- package/data/Patch/api.d.ts +0 -24
- package/data/Patch/definition.d.ts +0 -44
- package/data/Patch.d.ts +0 -2
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"definition.cjs","mappings":";;;;;;;;;;;;;;;;;;;;;;;;
|
1
|
+
{"version":3,"file":"definition.cjs","mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAEA;;;AAGO,MAAMA,2BAAYC,MAAM,CAACC,GAAP,CAAW,WAAX,CAAlB;MAAMC,SAAS;AAItB;;;;;;;AAIM,MAAOC,WAAP,CAAkB;EAGtBC,YACWC,GADX,EAESC,QAAoCC,6BAF7C,EAEkE;IADvD;IACF;IAJA,eAAOR,WAAP;EAKL;;EAEA,mCAAa;IACf,OAAOS,4BAAiB,KAAKF,KAAtB,CAAP;EACD;;EAED,+BAAgBG,IAAhB,EAA6B;IAC3B,OAAOC,aAAa,CAACD,IAAD,CAAb,GAAqBE,6BAAC,KAAKN,GAAN,EAAaI,IAAI,CAACJ,GAAlB,CAArB,GAA6C,KAApD;EACD;;AAdqB;;;;AAqBlB,SAAUK,aAAV,CAAwBE,CAAxB,EAAkC;EACtC,OAAOC,0BAAUD,CAAV,EAAWb,WAAX,CAAP;AACD","names":["EnvSymbol_1","Symbol","for","EnvSymbol","Environment","constructor","map","cache","tsplus_module_1","tsplus_module_3","that","isEnvironment","tsplus_module_5","u","tsplus_module_6"],"sourceRoot":"","sources":["../../../_src/data/Environment/definition.ts"],"sourcesContent":[null]}
|
@@ -3,8 +3,10 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
+
exports.UpdateService = exports.RemoveService = exports.EnvironmentPatchTypeId = exports.EnvironmentPatch = exports.Empty = exports.Combine = exports.AddService = void 0;
|
6
7
|
exports.apply = apply;
|
7
|
-
exports.
|
8
|
+
exports.combine = void 0;
|
9
|
+
exports.concrete = concrete;
|
8
10
|
exports.diff = diff;
|
9
11
|
exports.empty = void 0;
|
10
12
|
|
@@ -14,34 +16,115 @@ var tsplus_module_2 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require
|
|
14
16
|
|
15
17
|
var tsplus_module_3 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/List/constructors"));
|
16
18
|
|
17
|
-
var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/
|
19
|
+
var tsplus_module_4 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/immutable/HashMap/api"));
|
18
20
|
|
19
|
-
var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/
|
21
|
+
var tsplus_module_5 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Maybe/destructors"));
|
20
22
|
|
21
|
-
var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/
|
23
|
+
var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/compat/Array/api"));
|
22
24
|
|
23
|
-
var
|
25
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
24
26
|
|
25
|
-
var
|
27
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
26
28
|
|
27
|
-
|
29
|
+
const combine = combine_1;
|
30
|
+
exports.combine = combine;
|
31
|
+
const empty = empty_1;
|
32
|
+
exports.empty = empty;
|
33
|
+
const EnvironmentPatchTypeId = /*#__PURE__*/Symbol.for("fncts.Environment.Patch");
|
34
|
+
/**
|
35
|
+
* @tsplus type fncts.Environment.Patch
|
36
|
+
* @tsplus companion fncts.Environment.PatchOps
|
37
|
+
*/
|
28
38
|
|
29
|
-
|
39
|
+
exports.EnvironmentPatchTypeId = EnvironmentPatchTypeId;
|
30
40
|
|
31
|
-
|
41
|
+
class EnvironmentPatch {
|
42
|
+
constructor() {
|
43
|
+
this._typeId = EnvironmentPatchTypeId;
|
44
|
+
}
|
32
45
|
|
33
|
-
|
46
|
+
}
|
34
47
|
|
35
|
-
|
48
|
+
exports.EnvironmentPatch = EnvironmentPatch;
|
36
49
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
50
|
+
class AddService extends EnvironmentPatch {
|
51
|
+
constructor(service, tag) {
|
52
|
+
super();
|
53
|
+
this.service = service;
|
54
|
+
this.tag = tag;
|
55
|
+
this._tag = 0
|
56
|
+
/* EnvironmentPatchTag.AddService */
|
57
|
+
;
|
58
|
+
}
|
59
|
+
|
60
|
+
}
|
61
|
+
|
62
|
+
exports.AddService = AddService;
|
63
|
+
|
64
|
+
class Combine extends EnvironmentPatch {
|
65
|
+
constructor(first, second) {
|
66
|
+
super();
|
67
|
+
this.first = first;
|
68
|
+
this.second = second;
|
69
|
+
this._tag = 3
|
70
|
+
/* EnvironmentPatchTag.Combine */
|
71
|
+
;
|
72
|
+
}
|
73
|
+
|
74
|
+
}
|
75
|
+
|
76
|
+
exports.Combine = Combine;
|
77
|
+
|
78
|
+
class Empty extends EnvironmentPatch {
|
79
|
+
constructor() {
|
80
|
+
super(...arguments);
|
81
|
+
this._tag = 4
|
82
|
+
/* EnvironmentPatchTag.Empty */
|
83
|
+
;
|
84
|
+
}
|
85
|
+
|
86
|
+
}
|
87
|
+
|
88
|
+
exports.Empty = Empty;
|
89
|
+
|
90
|
+
class RemoveService extends EnvironmentPatch {
|
91
|
+
constructor(tag) {
|
92
|
+
super();
|
93
|
+
this.tag = tag;
|
94
|
+
this._tag = 1
|
95
|
+
/* EnvironmentPatchTag.RemoveService */
|
96
|
+
;
|
97
|
+
}
|
98
|
+
|
99
|
+
}
|
100
|
+
|
101
|
+
exports.RemoveService = RemoveService;
|
102
|
+
|
103
|
+
class UpdateService extends EnvironmentPatch {
|
104
|
+
constructor(update, tag) {
|
105
|
+
super();
|
106
|
+
this.update = update;
|
107
|
+
this.tag = tag;
|
108
|
+
this._tag = 2
|
109
|
+
/* EnvironmentPatchTag.UpdateService */
|
110
|
+
;
|
111
|
+
}
|
41
112
|
|
113
|
+
}
|
114
|
+
/**
|
115
|
+
* @tsplus macro remove
|
116
|
+
*/
|
117
|
+
|
118
|
+
|
119
|
+
exports.UpdateService = UpdateService;
|
120
|
+
|
121
|
+
function concrete(_) {//
|
122
|
+
}
|
42
123
|
/**
|
43
124
|
* @tsplus tailRec
|
44
125
|
*/
|
126
|
+
|
127
|
+
|
45
128
|
function applyLoop(environment, patches) {
|
46
129
|
var environment_1 = environment,
|
47
130
|
patches_1 = patches;
|
@@ -58,35 +141,45 @@ function applyLoop(environment, patches) {
|
|
58
141
|
void 0;
|
59
142
|
|
60
143
|
switch (head._tag) {
|
61
|
-
case
|
144
|
+
case 0
|
145
|
+
/* EnvironmentPatchTag.AddService */
|
146
|
+
:
|
62
147
|
environment_2 = tsplus_module_2.add(environment_1, head.service, head.tag);
|
63
148
|
patches_2 = tail;
|
64
149
|
environment_1 = environment_2;
|
65
150
|
patches_1 = patches_2;
|
66
151
|
continue;
|
67
152
|
|
68
|
-
case
|
153
|
+
case 3
|
154
|
+
/* EnvironmentPatchTag.Combine */
|
155
|
+
:
|
69
156
|
environment_2 = environment_1;
|
70
157
|
patches_2 = tsplus_module_3.cons(head.first, tsplus_module_3.cons(head.second, tail));
|
71
158
|
environment_1 = environment_2;
|
72
159
|
patches_1 = patches_2;
|
73
160
|
continue;
|
74
161
|
|
75
|
-
case
|
162
|
+
case 4
|
163
|
+
/* EnvironmentPatchTag.Empty */
|
164
|
+
:
|
76
165
|
environment_2 = environment_1;
|
77
166
|
patches_2 = tail;
|
78
167
|
environment_1 = environment_2;
|
79
168
|
patches_1 = patches_2;
|
80
169
|
continue;
|
81
170
|
|
82
|
-
case
|
171
|
+
case 1
|
172
|
+
/* EnvironmentPatchTag.RemoveService */
|
173
|
+
:
|
83
174
|
environment_2 = environment_1;
|
84
175
|
patches_2 = tail;
|
85
176
|
environment_1 = environment_2;
|
86
177
|
patches_1 = patches_2;
|
87
178
|
continue;
|
88
179
|
|
89
|
-
case
|
180
|
+
case 2
|
181
|
+
/* EnvironmentPatchTag.UpdateService */
|
182
|
+
:
|
90
183
|
environment_2 = tsplus_module_2.update(environment_1, head.update, head.tag);
|
91
184
|
patches_2 = tail;
|
92
185
|
environment_1 = environment_2;
|
@@ -104,29 +197,28 @@ function apply(patch, environment) {
|
|
104
197
|
return applyLoop(environment, tsplus_module_3.cons(patch));
|
105
198
|
}
|
106
199
|
/**
|
107
|
-
* @tsplus fluent fncts.Environment.Patch
|
200
|
+
* @tsplus fluent fncts.Environment.Patch combine
|
108
201
|
*/
|
109
202
|
|
110
203
|
|
111
|
-
function
|
112
|
-
return new
|
204
|
+
function combine_1(self, that) {
|
205
|
+
return new Combine(self, that);
|
113
206
|
}
|
114
|
-
|
115
|
-
const OrdEnvironmentMap = /*#__PURE__*/tsplus_module_5.contramap(tsplus_module_4.Ord, _ => _[1][1]);
|
116
207
|
/**
|
117
208
|
* @tsplus static fncts.Environment.PatchOps diff
|
118
209
|
*/
|
119
210
|
|
211
|
+
|
120
212
|
function diff(oldValue, newValue) {
|
121
|
-
const sorted =
|
122
|
-
const [missingServices, patch] =
|
213
|
+
const sorted = tsplus_module_4.toArray(newValue.map);
|
214
|
+
const [missingServices, patch] = tsplus_module_6.foldLeft(sorted, [tsplus_module_4.beginMutation(oldValue.map), empty_1()], ([map, patch], [tag, newService]) => tsplus_module_5.match_(tsplus_module_4.get_(map, tag), () => [tsplus_module_4.remove_(map, tag), combine_1(patch, new AddService(newService, tag))], oldService => {
|
123
215
|
if (oldService === newService) {
|
124
|
-
return [
|
216
|
+
return [tsplus_module_4.remove_(map, tag), patch];
|
125
217
|
} else {
|
126
|
-
return [
|
218
|
+
return [tsplus_module_4.remove_(map, tag), combine_1(patch, new UpdateService(_ => newService, tag))];
|
127
219
|
}
|
128
220
|
}));
|
129
|
-
return
|
221
|
+
return tsplus_module_4.foldLeftWithIndex_(missingServices, patch, (tag, patch) => combine_1(patch, new RemoveService(tag)));
|
130
222
|
}
|
131
223
|
/**
|
132
224
|
* @tsplus static fncts.Environment.PatchOps empty
|
@@ -134,6 +226,6 @@ function diff(oldValue, newValue) {
|
|
134
226
|
|
135
227
|
|
136
228
|
function empty_1() {
|
137
|
-
return new
|
229
|
+
return new Empty();
|
138
230
|
}
|
139
|
-
//# sourceMappingURL=
|
231
|
+
//# sourceMappingURL=EnvironmentPatch.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EnvironmentPatch.cjs","mappings":"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","names":["combine","empty","EnvironmentPatchTypeId","Symbol","for","EnvironmentPatch","constructor","AddService","service","tag","Combine","first","second","Empty","RemoveService","UpdateService","update","concrete","_","applyLoop","environment","patches","patches_1","patches_2","tsplus_module_1","head","tail","_tag","tsplus_module_2","tsplus_module_3","apply","patch","self","that","diff","oldValue","newValue","sorted","map","missingServices","tsplus_module_6","empty_1","newService","tsplus_module_5","tsplus_module_4","combine_1","oldService"],"sourceRoot":"","sources":["../../_src/data/EnvironmentPatch.ts"],"sourcesContent":[null]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"definition.mjs","mappings":";;;;;;
|
1
|
+
{"version":3,"file":"definition.mjs","mappings":";;;;;;AAEA;;;;AAGO,MAAMA,2BAAYC,MAAM,CAACC,GAAP,CAAW,WAAX,CAAlB;aAAMC,SAAS;AAItB;;;;;AAIA,OAAM,MAAOC,WAAP,CAAkB;EAGtBC,YACWC,GADX,EAESC,QAAoCC,6BAF7C,EAEkE;IADvD;IACF;IAJA,eAAOR,WAAP;EAKL;;EAEA,mCAAa;IACf,OAAOS,4BAAiB,KAAKF,KAAtB,CAAP;EACD;;EAED,+BAAgBG,IAAhB,EAA6B;IAC3B,OAAOC,aAAa,CAACD,IAAD,CAAb,GAAqBE,6BAAC,KAAKN,GAAN,EAAaI,IAAI,CAACJ,GAAlB,CAArB,GAA6C,KAApD;EACD;;AAdqB;AAqBxB,OAAM,SAAUK,aAAV,CAAwBE,CAAxB,EAAkC;EACtC,OAAOC,0BAAUD,CAAV,EAAWb,WAAX,CAAP;AACD","names":["EnvSymbol_1","Symbol","for","EnvSymbol","Environment","constructor","map","cache","tsplus_module_1","tsplus_module_3","that","isEnvironment","tsplus_module_5","u","tsplus_module_6"],"sourceRoot":"","sources":["../../../_src/data/Environment/definition.ts"],"sourcesContent":[null]}
|
@@ -0,0 +1,184 @@
|
|
1
|
+
import * as tsplus_module_1 from "@fncts/base/collection/immutable/List/definition";
|
2
|
+
import * as tsplus_module_2 from "@fncts/base/data/Environment/api";
|
3
|
+
import * as tsplus_module_3 from "@fncts/base/collection/immutable/List/constructors";
|
4
|
+
import * as tsplus_module_4 from "@fncts/base/collection/immutable/HashMap/api";
|
5
|
+
import * as tsplus_module_5 from "@fncts/base/data/Maybe/destructors";
|
6
|
+
import * as tsplus_module_6 from "@fncts/base/collection/compat/Array/api";
|
7
|
+
export const combine = combine_1;
|
8
|
+
export const empty = empty_1;
|
9
|
+
export const EnvironmentPatchTypeId = /*#__PURE__*/Symbol.for("fncts.Environment.Patch");
|
10
|
+
/**
|
11
|
+
* @tsplus type fncts.Environment.Patch
|
12
|
+
* @tsplus companion fncts.Environment.PatchOps
|
13
|
+
*/
|
14
|
+
|
15
|
+
export class EnvironmentPatch {
|
16
|
+
constructor() {
|
17
|
+
this._typeId = EnvironmentPatchTypeId;
|
18
|
+
}
|
19
|
+
|
20
|
+
}
|
21
|
+
export class AddService extends EnvironmentPatch {
|
22
|
+
constructor(service, tag) {
|
23
|
+
super();
|
24
|
+
this.service = service;
|
25
|
+
this.tag = tag;
|
26
|
+
this._tag = 0
|
27
|
+
/* EnvironmentPatchTag.AddService */
|
28
|
+
;
|
29
|
+
}
|
30
|
+
|
31
|
+
}
|
32
|
+
export class Combine extends EnvironmentPatch {
|
33
|
+
constructor(first, second) {
|
34
|
+
super();
|
35
|
+
this.first = first;
|
36
|
+
this.second = second;
|
37
|
+
this._tag = 3
|
38
|
+
/* EnvironmentPatchTag.Combine */
|
39
|
+
;
|
40
|
+
}
|
41
|
+
|
42
|
+
}
|
43
|
+
export class Empty extends EnvironmentPatch {
|
44
|
+
constructor() {
|
45
|
+
super(...arguments);
|
46
|
+
this._tag = 4
|
47
|
+
/* EnvironmentPatchTag.Empty */
|
48
|
+
;
|
49
|
+
}
|
50
|
+
|
51
|
+
}
|
52
|
+
export class RemoveService extends EnvironmentPatch {
|
53
|
+
constructor(tag) {
|
54
|
+
super();
|
55
|
+
this.tag = tag;
|
56
|
+
this._tag = 1
|
57
|
+
/* EnvironmentPatchTag.RemoveService */
|
58
|
+
;
|
59
|
+
}
|
60
|
+
|
61
|
+
}
|
62
|
+
export class UpdateService extends EnvironmentPatch {
|
63
|
+
constructor(update, tag) {
|
64
|
+
super();
|
65
|
+
this.update = update;
|
66
|
+
this.tag = tag;
|
67
|
+
this._tag = 2
|
68
|
+
/* EnvironmentPatchTag.UpdateService */
|
69
|
+
;
|
70
|
+
}
|
71
|
+
|
72
|
+
}
|
73
|
+
/**
|
74
|
+
* @tsplus macro remove
|
75
|
+
*/
|
76
|
+
|
77
|
+
export function concrete(_) {//
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* @tsplus tailRec
|
81
|
+
*/
|
82
|
+
|
83
|
+
function applyLoop(environment, patches) {
|
84
|
+
var environment_1 = environment,
|
85
|
+
patches_1 = patches;
|
86
|
+
var environment_2 = environment,
|
87
|
+
patches_2 = patches;
|
88
|
+
|
89
|
+
while (1) {
|
90
|
+
if (tsplus_module_1.isEmpty(patches_1)) {
|
91
|
+
return environment_1;
|
92
|
+
}
|
93
|
+
|
94
|
+
const head = patches_1.head;
|
95
|
+
const tail = patches_1.tail;
|
96
|
+
void 0;
|
97
|
+
|
98
|
+
switch (head._tag) {
|
99
|
+
case 0
|
100
|
+
/* EnvironmentPatchTag.AddService */
|
101
|
+
:
|
102
|
+
environment_2 = tsplus_module_2.add(environment_1, head.service, head.tag);
|
103
|
+
patches_2 = tail;
|
104
|
+
environment_1 = environment_2;
|
105
|
+
patches_1 = patches_2;
|
106
|
+
continue;
|
107
|
+
|
108
|
+
case 3
|
109
|
+
/* EnvironmentPatchTag.Combine */
|
110
|
+
:
|
111
|
+
environment_2 = environment_1;
|
112
|
+
patches_2 = tsplus_module_3.cons(head.first, tsplus_module_3.cons(head.second, tail));
|
113
|
+
environment_1 = environment_2;
|
114
|
+
patches_1 = patches_2;
|
115
|
+
continue;
|
116
|
+
|
117
|
+
case 4
|
118
|
+
/* EnvironmentPatchTag.Empty */
|
119
|
+
:
|
120
|
+
environment_2 = environment_1;
|
121
|
+
patches_2 = tail;
|
122
|
+
environment_1 = environment_2;
|
123
|
+
patches_1 = patches_2;
|
124
|
+
continue;
|
125
|
+
|
126
|
+
case 1
|
127
|
+
/* EnvironmentPatchTag.RemoveService */
|
128
|
+
:
|
129
|
+
environment_2 = environment_1;
|
130
|
+
patches_2 = tail;
|
131
|
+
environment_1 = environment_2;
|
132
|
+
patches_1 = patches_2;
|
133
|
+
continue;
|
134
|
+
|
135
|
+
case 2
|
136
|
+
/* EnvironmentPatchTag.UpdateService */
|
137
|
+
:
|
138
|
+
environment_2 = tsplus_module_2.update(environment_1, head.update, head.tag);
|
139
|
+
patches_2 = tail;
|
140
|
+
environment_1 = environment_2;
|
141
|
+
patches_1 = patches_2;
|
142
|
+
continue;
|
143
|
+
}
|
144
|
+
}
|
145
|
+
}
|
146
|
+
/**
|
147
|
+
* @tsplus fluent fncts.Environment.Patch __call
|
148
|
+
*/
|
149
|
+
|
150
|
+
|
151
|
+
export function apply(patch, environment) {
|
152
|
+
return applyLoop(environment, tsplus_module_3.cons(patch));
|
153
|
+
}
|
154
|
+
/**
|
155
|
+
* @tsplus fluent fncts.Environment.Patch combine
|
156
|
+
*/
|
157
|
+
|
158
|
+
function combine_1(self, that) {
|
159
|
+
return new Combine(self, that);
|
160
|
+
}
|
161
|
+
/**
|
162
|
+
* @tsplus static fncts.Environment.PatchOps diff
|
163
|
+
*/
|
164
|
+
|
165
|
+
|
166
|
+
export function diff(oldValue, newValue) {
|
167
|
+
const sorted = tsplus_module_4.toArray(newValue.map);
|
168
|
+
const [missingServices, patch] = tsplus_module_6.foldLeft(sorted, [tsplus_module_4.beginMutation(oldValue.map), empty_1()], ([map, patch], [tag, newService]) => tsplus_module_5.match_(tsplus_module_4.get_(map, tag), () => [tsplus_module_4.remove_(map, tag), combine_1(patch, new AddService(newService, tag))], oldService => {
|
169
|
+
if (oldService === newService) {
|
170
|
+
return [tsplus_module_4.remove_(map, tag), patch];
|
171
|
+
} else {
|
172
|
+
return [tsplus_module_4.remove_(map, tag), combine_1(patch, new UpdateService(_ => newService, tag))];
|
173
|
+
}
|
174
|
+
}));
|
175
|
+
return tsplus_module_4.foldLeftWithIndex_(missingServices, patch, (tag, patch) => combine_1(patch, new RemoveService(tag)));
|
176
|
+
}
|
177
|
+
/**
|
178
|
+
* @tsplus static fncts.Environment.PatchOps empty
|
179
|
+
*/
|
180
|
+
|
181
|
+
function empty_1() {
|
182
|
+
return new Empty();
|
183
|
+
}
|
184
|
+
//# sourceMappingURL=EnvironmentPatch.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"EnvironmentPatch.mjs","mappings":"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","names":["combine","empty","EnvironmentPatchTypeId","Symbol","for","EnvironmentPatch","constructor","AddService","service","tag","Combine","first","second","Empty","RemoveService","UpdateService","update","concrete","_","applyLoop","environment","patches","patches_1","patches_2","tsplus_module_1","head","tail","_tag","tsplus_module_2","tsplus_module_3","apply","patch","self","that","diff","oldValue","newValue","sorted","map","missingServices","tsplus_module_6","empty_1","newService","tsplus_module_5","tsplus_module_4","combine_1","oldService"],"sourceRoot":"","sources":["../../_src/data/EnvironmentPatch.ts"],"sourcesContent":[null]}
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import type { EnvironmentPatch } from "@fncts/base/data/EnvironmentPatch";
|
2
|
+
|
1
3
|
/**
|
2
4
|
* @tsplus static fncts.prelude.builtin.SymbolOps env
|
3
5
|
*/
|
@@ -26,6 +28,10 @@ export class Environment<R> implements Hashable, Equatable {
|
|
26
28
|
}
|
27
29
|
}
|
28
30
|
|
31
|
+
export declare namespace Environment {
|
32
|
+
type Patch<In, Out> = EnvironmentPatch<In, Out>;
|
33
|
+
}
|
34
|
+
|
29
35
|
export function isEnvironment(u: unknown): u is Environment<unknown> {
|
30
36
|
return hasTypeId(u, EnvSymbol);
|
31
37
|
}
|
@@ -0,0 +1,136 @@
|
|
1
|
+
export const enum EnvironmentPatchTag {
|
2
|
+
AddService,
|
3
|
+
RemoveService,
|
4
|
+
UpdateService,
|
5
|
+
Combine,
|
6
|
+
Empty,
|
7
|
+
}
|
8
|
+
|
9
|
+
export const EnvironmentPatchTypeId = Symbol.for("fncts.Environment.Patch");
|
10
|
+
export type EnvironmentPatchTypeId = typeof EnvironmentPatchTypeId;
|
11
|
+
|
12
|
+
/**
|
13
|
+
* @tsplus type fncts.Environment.Patch
|
14
|
+
* @tsplus companion fncts.Environment.PatchOps
|
15
|
+
*/
|
16
|
+
export abstract class EnvironmentPatch<In, Out> {
|
17
|
+
readonly _typeId: EnvironmentPatchTypeId = EnvironmentPatchTypeId;
|
18
|
+
readonly _R!: (_: In) => void;
|
19
|
+
readonly _A!: () => Out;
|
20
|
+
}
|
21
|
+
|
22
|
+
export class AddService<Env, Service> extends EnvironmentPatch<Env, Env & Has<Service>> {
|
23
|
+
readonly _tag = EnvironmentPatchTag.AddService;
|
24
|
+
constructor(readonly service: Service, readonly tag: Tag<Service>) {
|
25
|
+
super();
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
export class Combine<In, Out, Out2> extends EnvironmentPatch<In, Out2> {
|
30
|
+
readonly _tag = EnvironmentPatchTag.Combine;
|
31
|
+
constructor(readonly first: EnvironmentPatch<In, Out>, readonly second: EnvironmentPatch<Out, Out2>) {
|
32
|
+
super();
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
export class Empty<Env> extends EnvironmentPatch<Env, Env> {
|
37
|
+
readonly _tag = EnvironmentPatchTag.Empty;
|
38
|
+
}
|
39
|
+
|
40
|
+
export class RemoveService<Env, Service> extends EnvironmentPatch<Env & Has<Service>, Env> {
|
41
|
+
readonly _tag = EnvironmentPatchTag.RemoveService;
|
42
|
+
constructor(readonly tag: Tag<Service>) {
|
43
|
+
super();
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
export class UpdateService<Env, Service> extends EnvironmentPatch<Env & Has<Service>, Env & Has<Service>> {
|
48
|
+
readonly _tag = EnvironmentPatchTag.UpdateService;
|
49
|
+
constructor(readonly update: (_: Service) => Service, readonly tag: Tag<Service>) {
|
50
|
+
super();
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
export type Concrete =
|
55
|
+
| AddService<any, any>
|
56
|
+
| Combine<any, any, any>
|
57
|
+
| Empty<any>
|
58
|
+
| RemoveService<any, any>
|
59
|
+
| UpdateService<any, any>;
|
60
|
+
|
61
|
+
/**
|
62
|
+
* @tsplus macro remove
|
63
|
+
*/
|
64
|
+
export function concrete(_: EnvironmentPatch<any, any>): asserts _ is Concrete {
|
65
|
+
//
|
66
|
+
}
|
67
|
+
|
68
|
+
/**
|
69
|
+
* @tsplus tailRec
|
70
|
+
*/
|
71
|
+
function applyLoop(environment: Environment<any>, patches: List<EnvironmentPatch<any, any>>): Environment<any> {
|
72
|
+
if (patches.isEmpty()) {
|
73
|
+
return environment;
|
74
|
+
}
|
75
|
+
const head = patches.head;
|
76
|
+
const tail = patches.tail;
|
77
|
+
concrete(head);
|
78
|
+
switch (head._tag) {
|
79
|
+
case EnvironmentPatchTag.AddService:
|
80
|
+
return applyLoop(environment.add(head.service, head.tag), tail);
|
81
|
+
case EnvironmentPatchTag.Combine:
|
82
|
+
return applyLoop(environment, Cons(head.first, Cons(head.second, tail)));
|
83
|
+
case EnvironmentPatchTag.Empty:
|
84
|
+
return applyLoop(environment, tail);
|
85
|
+
case EnvironmentPatchTag.RemoveService:
|
86
|
+
return applyLoop(environment, tail);
|
87
|
+
case EnvironmentPatchTag.UpdateService:
|
88
|
+
return applyLoop(environment.update(head.update, head.tag), tail);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
/**
|
93
|
+
* @tsplus fluent fncts.Environment.Patch __call
|
94
|
+
*/
|
95
|
+
export function apply<In, Out>(patch: EnvironmentPatch<In, Out>, environment: Environment<In>): Environment<Out> {
|
96
|
+
return applyLoop(environment, Cons(patch));
|
97
|
+
}
|
98
|
+
|
99
|
+
/**
|
100
|
+
* @tsplus fluent fncts.Environment.Patch combine
|
101
|
+
*/
|
102
|
+
export function combine<In, Out, Out2>(
|
103
|
+
self: EnvironmentPatch<In, Out>,
|
104
|
+
that: EnvironmentPatch<Out, Out2>,
|
105
|
+
): EnvironmentPatch<In, Out2> {
|
106
|
+
return new Combine(self, that);
|
107
|
+
}
|
108
|
+
|
109
|
+
/**
|
110
|
+
* @tsplus static fncts.Environment.PatchOps diff
|
111
|
+
*/
|
112
|
+
export function diff<In, Out>(oldValue: Environment<In>, newValue: Environment<Out>): EnvironmentPatch<In, Out> {
|
113
|
+
const sorted = newValue.map.toArray;
|
114
|
+
const [missingServices, patch] = sorted.foldLeft(
|
115
|
+
[oldValue.map.beginMutation, EnvironmentPatch.empty() as EnvironmentPatch<any, any>],
|
116
|
+
([map, patch], [tag, newService]) =>
|
117
|
+
map.get(tag).match(
|
118
|
+
() => [map.remove(tag), patch.combine(new AddService(newService, tag))],
|
119
|
+
(oldService) => {
|
120
|
+
if (oldService === newService) {
|
121
|
+
return [map.remove(tag), patch];
|
122
|
+
} else {
|
123
|
+
return [map.remove(tag), patch.combine(new UpdateService((_: any) => newService, tag))];
|
124
|
+
}
|
125
|
+
},
|
126
|
+
),
|
127
|
+
);
|
128
|
+
return missingServices.foldLeftWithIndex(patch, (tag, patch) => patch.combine(new RemoveService(tag)));
|
129
|
+
}
|
130
|
+
|
131
|
+
/**
|
132
|
+
* @tsplus static fncts.Environment.PatchOps empty
|
133
|
+
*/
|
134
|
+
export function empty<A>(): EnvironmentPatch<A, A> {
|
135
|
+
return new Empty();
|
136
|
+
}
|
package/_src/data.ts
CHANGED
@@ -11,6 +11,7 @@ export type {} from "./data/Decoder.js";
|
|
11
11
|
export type {} from "./data/Duration.js";
|
12
12
|
export type {} from "./data/Either.js";
|
13
13
|
export type {} from "./data/Environment.js";
|
14
|
+
export type {} from "./data/EnvironmentPatch.js";
|
14
15
|
export type {} from "./data/exceptions.js";
|
15
16
|
export type {} from "./data/ExecutionStrategy.js";
|
16
17
|
export type {} from "./data/Exit.js";
|
@@ -23,7 +24,6 @@ export type {} from "./data/Maybe.js";
|
|
23
24
|
export type {} from "./data/Newtype.js";
|
24
25
|
export type {} from "./data/number.js";
|
25
26
|
export type {} from "./data/object.js";
|
26
|
-
export type {} from "./data/Patch.js";
|
27
27
|
export type {} from "./data/Predicate.js";
|
28
28
|
export type {} from "./data/Refinement.js";
|
29
29
|
export type {} from "./data/string.js";
|
package/_src/global.ts
CHANGED
@@ -123,6 +123,10 @@ import { Either } from "@fncts/base/data/Either/definition";
|
|
123
123
|
* @tsplus global
|
124
124
|
*/
|
125
125
|
import { Environment } from "@fncts/base/data/Environment/definition";
|
126
|
+
/**
|
127
|
+
* @tsplus global
|
128
|
+
*/
|
129
|
+
import { EnvironmentPatch } from "@fncts/base/data/EnvironmentPatch";
|
126
130
|
/**
|
127
131
|
* @tsplus global
|
128
132
|
*/
|
@@ -2,6 +2,7 @@ import { Hashable } from "@fncts/base/typeclass/Hashable";
|
|
2
2
|
import { Equatable } from "@fncts/base/typeclass/Equatable";
|
3
3
|
import { HashMap } from "@fncts/base/collection/immutable/HashMap/definition";
|
4
4
|
import { Tag } from "@fncts/base/data/Tag/definition";
|
5
|
+
import type { EnvironmentPatch } from "@fncts/base/data/EnvironmentPatch";
|
5
6
|
/**
|
6
7
|
* @tsplus static fncts.prelude.builtin.SymbolOps env
|
7
8
|
* @tsplus location "@fncts/base/data/Environment/definition"
|
@@ -21,4 +22,7 @@ export declare class Environment<R> implements Hashable, Equatable {
|
|
21
22
|
get [Symbol.hash](): number;
|
22
23
|
[Symbol.equals](that: unknown): boolean;
|
23
24
|
}
|
25
|
+
export declare namespace Environment {
|
26
|
+
type Patch<In, Out> = EnvironmentPatch<In, Out>;
|
27
|
+
}
|
24
28
|
export declare function isEnvironment(u: unknown): u is Environment<unknown>;
|