@fncts/base 0.0.19 → 0.0.20

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.
@@ -1 +1 @@
1
- {"version":3,"file":"definition.cjs","mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;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;;;;AAiBlB,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]}
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.compose = void 0;
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/data/number/instances"));
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/typeclass/Ord/api/contramap"));
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/immutable/HashMap/api"));
23
+ var tsplus_module_6 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/compat/Array/api"));
22
24
 
23
- var tsplus_module_7 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/data/Maybe/destructors"));
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 tsplus_module_8 = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@fncts/base/collection/compat/Array/api"));
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
- var _List = /*#__PURE__*/require("@fncts/base/collection/immutable/List");
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
- var _Patch = /*#__PURE__*/require("@fncts/base/data/Patch");
39
+ exports.EnvironmentPatchTypeId = EnvironmentPatchTypeId;
30
40
 
31
- var _definition2 = /*#__PURE__*/require("@fncts/base/data/Patch/definition");
41
+ class EnvironmentPatch {
42
+ constructor() {
43
+ this._typeId = EnvironmentPatchTypeId;
44
+ }
32
45
 
33
- 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); }
46
+ }
34
47
 
35
- 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; }
48
+ exports.EnvironmentPatch = EnvironmentPatch;
36
49
 
37
- const compose = compose_1;
38
- exports.compose = compose;
39
- const empty = empty_1;
40
- exports.empty = empty;
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 "AddService":
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 "Compose":
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 "Empty":
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 "RemoveService":
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 "UpdateService":
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 compose
200
+ * @tsplus fluent fncts.Environment.Patch combine
108
201
  */
109
202
 
110
203
 
111
- function compose_1(self, that) {
112
- return new _definition2.Compose(self, that);
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 = tsplus_module_6.toArray(newValue.map);
122
- const [missingServices, patch] = tsplus_module_8.foldLeft(sorted, [tsplus_module_6.beginMutation(oldValue.map), empty_1()], ([map, patch], [tag, newService]) => tsplus_module_7.match_(tsplus_module_6.get_(map, tag), () => [tsplus_module_6.remove_(map, tag), compose_1(patch, new _Patch.AddService(newService, tag))], oldService => {
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 [tsplus_module_6.remove_(map, tag), patch];
216
+ return [tsplus_module_4.remove_(map, tag), patch];
125
217
  } else {
126
- return [tsplus_module_6.remove_(map, tag), compose_1(patch, new _Patch.UpdateService(_ => newService, tag))];
218
+ return [tsplus_module_4.remove_(map, tag), combine_1(patch, new UpdateService(_ => newService, tag))];
127
219
  }
128
220
  }));
129
- return tsplus_module_6.foldLeftWithIndex_(missingServices, patch, (tag, patch) => compose_1(patch, new _Patch.RemoveService(tag)));
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 _definition2.Empty();
229
+ return new Empty();
138
230
  }
139
- //# sourceMappingURL=api.cjs.map
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":";;;;;;AAAA;;;;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;AAiBxB,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]}
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>;