@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.
@@ -0,0 +1,73 @@
1
+ import { Has } from "@fncts/base/typeclass/Has";
2
+ import { Tag } from "@fncts/base/data/Tag/definition";
3
+ import { Environment } from "@fncts/base/data/Environment/definition";
4
+ import { List } from "@fncts/base/collection/immutable/List/definition";
5
+ export declare const enum EnvironmentPatchTag {
6
+ AddService = 0,
7
+ RemoveService = 1,
8
+ UpdateService = 2,
9
+ Combine = 3,
10
+ Empty = 4
11
+ }
12
+ export declare const EnvironmentPatchTypeId: unique symbol;
13
+ export type EnvironmentPatchTypeId = typeof EnvironmentPatchTypeId;
14
+ /**
15
+ * @tsplus type fncts.Environment.Patch
16
+ * @tsplus companion fncts.Environment.PatchOps
17
+ */
18
+ export declare abstract class EnvironmentPatch<In, Out> {
19
+ readonly _typeId: EnvironmentPatchTypeId;
20
+ readonly _R: (_: In) => void;
21
+ readonly _A: () => Out;
22
+ }
23
+ export declare class AddService<Env, Service> extends EnvironmentPatch<Env, Env & Has<Service>> {
24
+ readonly service: Service;
25
+ readonly tag: Tag<Service>;
26
+ readonly _tag = EnvironmentPatchTag.AddService;
27
+ constructor(service: Service, tag: Tag<Service>);
28
+ }
29
+ export declare class Combine<In, Out, Out2> extends EnvironmentPatch<In, Out2> {
30
+ readonly first: EnvironmentPatch<In, Out>;
31
+ readonly second: EnvironmentPatch<Out, Out2>;
32
+ readonly _tag = EnvironmentPatchTag.Combine;
33
+ constructor(first: EnvironmentPatch<In, Out>, second: EnvironmentPatch<Out, Out2>);
34
+ }
35
+ export declare class Empty<Env> extends EnvironmentPatch<Env, Env> {
36
+ readonly _tag = EnvironmentPatchTag.Empty;
37
+ }
38
+ export declare class RemoveService<Env, Service> extends EnvironmentPatch<Env & Has<Service>, Env> {
39
+ readonly tag: Tag<Service>;
40
+ readonly _tag = EnvironmentPatchTag.RemoveService;
41
+ constructor(tag: Tag<Service>);
42
+ }
43
+ export declare class UpdateService<Env, Service> extends EnvironmentPatch<Env & Has<Service>, Env & Has<Service>> {
44
+ readonly update: (_: Service) => Service;
45
+ readonly tag: Tag<Service>;
46
+ readonly _tag = EnvironmentPatchTag.UpdateService;
47
+ constructor(update: (_: Service) => Service, tag: Tag<Service>);
48
+ }
49
+ export type Concrete = AddService<any, any> | Combine<any, any, any> | Empty<any> | RemoveService<any, any> | UpdateService<any, any>;
50
+ /**
51
+ * @tsplus macro remove
52
+ */
53
+ export declare function concrete(_: EnvironmentPatch<any, any>): asserts _ is Concrete;
54
+ /**
55
+ * @tsplus fluent fncts.Environment.Patch __call
56
+ * @tsplus location "@fncts/base/data/EnvironmentPatch"
57
+ */
58
+ export declare function apply<In, Out>(patch: EnvironmentPatch<In, Out>, environment: Environment<In>): Environment<Out>;
59
+ /**
60
+ * @tsplus fluent fncts.Environment.Patch combine
61
+ * @tsplus location "@fncts/base/data/EnvironmentPatch"
62
+ */
63
+ export declare function combine<In, Out, Out2>(self: EnvironmentPatch<In, Out>, that: EnvironmentPatch<Out, Out2>): EnvironmentPatch<In, Out2>;
64
+ /**
65
+ * @tsplus static fncts.Environment.PatchOps diff
66
+ * @tsplus location "@fncts/base/data/EnvironmentPatch"
67
+ */
68
+ export declare function diff<In, Out>(oldValue: Environment<In>, newValue: Environment<Out>): EnvironmentPatch<In, Out>;
69
+ /**
70
+ * @tsplus static fncts.Environment.PatchOps empty
71
+ * @tsplus location "@fncts/base/data/EnvironmentPatch"
72
+ */
73
+ export declare function empty<A>(): EnvironmentPatch<A, A>;
package/data.d.ts CHANGED
@@ -10,6 +10,7 @@ export type {} from "./data/Decoder.js";
10
10
  export type {} from "./data/Duration.js";
11
11
  export type {} from "./data/Either.js";
12
12
  export type {} from "./data/Environment.js";
13
+ export type {} from "./data/EnvironmentPatch.js";
13
14
  export type {} from "./data/exceptions.js";
14
15
  export type {} from "./data/ExecutionStrategy.js";
15
16
  export type {} from "./data/Exit.js";
@@ -22,7 +23,6 @@ export type {} from "./data/Maybe.js";
22
23
  export type {} from "./data/Newtype.js";
23
24
  export type {} from "./data/number.js";
24
25
  export type {} from "./data/object.js";
25
- export type {} from "./data/Patch.js";
26
26
  export type {} from "./data/Predicate.js";
27
27
  export type {} from "./data/Refinement.js";
28
28
  export type {} from "./data/string.js";
package/global.d.ts CHANGED
@@ -118,6 +118,10 @@ import { Either } from "@fncts/base/data/Either/definition";
118
118
  * @tsplus global
119
119
  */
120
120
  import { Environment } from "@fncts/base/data/Environment/definition";
121
+ /**
122
+ * @tsplus global
123
+ */
124
+ import { EnvironmentPatch } from "@fncts/base/data/EnvironmentPatch";
121
125
  /**
122
126
  * @tsplus global
123
127
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fncts/base",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "dependencies": {
5
5
  "@fncts/typelevel": "0.0.14",
6
6
  "uuid": "^9.0.0"
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.cjs","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;MAsCgBA,OAAO;;MA+BPC,KAAK;;;AAjErB;;;AAGA,SAASC,SAAT,CAAmBC,WAAnB,EAAkDC,OAAlD,EAAgF;sBAA7DD;MAAAE,YAA+BD;sBAA/BD;MAAAG,YAA+BF;;YAAkD;IAClG,IAAIG,kCAAJ,EAAuB;MACrB;IACD;;IACD,MAAMC,IAAI,GAAGH,UAAQG,IAArB;IACA,MAAMC,IAAI,GAAGJ,UAAQI,IAArB;IACA;;IACA,QAAQD,IAAI,CAACE,IAAb;MACE,KAAK,YAAL;wBACmBC,mCAAgBH,IAAI,CAACI,OAArB,EAA8BJ,IAAI,CAACK,GAAnC;oBAAyCJ;;;;;MAC5D,KAAK,SAAL;;oBACgCK,qBAAKN,IAAI,CAACO,KAAV,EAAiBD,qBAAKN,IAAI,CAACQ,MAAV,EAAkBP,IAAlB,CAAjB;;;;;MAChC,KAAK,OAAL;;oBACgCA;;;;;MAChC,KAAK,eAAL;;oBACgCA;;;;;MAChC,KAAK,eAAL;wBACmBE,sCAAmBH,IAAI,CAACS,MAAxB,EAAgCT,IAAI,CAACK,GAArC;oBAA2CJ;;;;IAVhE;EAYD;AAAA;AAED;;;;;AAGM,SAAUS,KAAV,CAAyBC,KAAzB,EAAgDhB,WAAhD,EAA4E;EAChF,OAAOD,SAAS,CAACC,WAAD,EAAcW,qBAAKK,KAAL,CAAd,CAAhB;AACD;AAED;;;;;AAGA,mBAAuCC,IAAvC,EAA6DC,IAA7D,EAAmF;EACjF,OAAO,IAAIC,oBAAJ,CAAYF,IAAZ,EAAkBC,IAAlB,CAAP;AACD;;AAED,MAAME,iBAAiB,gBAAGC,+CAAsBC,CAAD,IAA4DA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAjF,CAA1B;AAEA;;;;AAGM,SAAUC,IAAV,CAAwBC,QAAxB,EAAmDC,QAAnD,EAA6E;EACjF,MAAMC,MAAM,2BAAqBD,QAAQ,CAACE,GAA9B,CAAZ;EACA,MAAM,CAACC,eAAD,EAAkBZ,KAAlB,IAA2Ba,iCAC/B,+BAACL,QAAQ,CAACG,GAAV,GAA6BG,SAA7B,CAD+B,EAE/B,CAAC,CAACH,GAAD,EAAMX,KAAN,CAAD,EAAe,CAACN,GAAD,EAAMqB,UAAN,CAAf,KACEC,iDAAQtB,GAAR,GACE,MAAM,CAACuB,6BAAWvB,GAAX,CAAD,EAAkBwB,iBAAc,IAAIC,iBAAJ,CAAeJ,UAAf,EAA2BrB,GAA3B,CAAd,CAAlB,CADR,EAEG0B,UAAD,IAAe;IACb,IAAIA,UAAU,KAAKL,UAAnB,EAA+B;MAC7B,OAAO,CAACE,6BAAWvB,GAAX,CAAD,EAAkBM,KAAlB,CAAP;IACD,CAFD,MAEO;MACL,OAAO,CAACiB,6BAAWvB,GAAX,CAAD,EAAkBwB,iBAAc,IAAIG,oBAAJ,CAAmBf,CAAD,IAAYS,UAA9B,EAA0CrB,GAA1C,CAAd,CAAlB,CAAP;IACD;EACF,CARH,CAH6B,CAAjC;EAcA,OAAOuB,oDAAkCjB,KAAlC,EAAyC,CAACN,GAAD,EAAMM,KAAN,KAAgBkB,iBAAc,IAAII,oBAAJ,CAAkB5B,GAAlB,CAAd,CAAzD,CAAP;AACD;AAED;;;;;AAGA;EACE,OAAO,IAAI6B,kBAAJ,EAAP;AACD","names":["compose","empty","applyLoop","environment","patches","patches_1","patches_2","tsplus_module_1","head","tail","_tag","tsplus_module_2","service","tag","tsplus_module_3","first","second","update","apply","patch","self","that","Compose","OrdEnvironmentMap","tsplus_module_5","_","diff","oldValue","newValue","sorted","map","missingServices","tsplus_module_8","empty_1","newService","tsplus_module_7","tsplus_module_6","compose_1","AddService","oldService","UpdateService","RemoveService","Empty"],"sourceRoot":"","sources":["../../../_src/data/Patch/api.ts"],"sourcesContent":[null]}
@@ -1,88 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.UpdateService = exports.RemoveService = exports.PatchTypeId = exports.Patch = exports.Empty = exports.Compose = exports.AddService = void 0;
7
- exports.concrete = concrete;
8
- const PatchTypeId = /*#__PURE__*/Symbol.for("fncts.Patch");
9
- /**
10
- * @tsplus type fncts.Environment.Patch
11
- * @tsplus companion fncts.Environment.PatchOps
12
- */
13
-
14
- exports.PatchTypeId = PatchTypeId;
15
-
16
- class Patch {
17
- constructor() {
18
- this._typeId = PatchTypeId;
19
- }
20
-
21
- }
22
-
23
- exports.Patch = Patch;
24
-
25
- class AddService extends Patch {
26
- constructor(service, tag) {
27
- super();
28
- this.service = service;
29
- this.tag = tag;
30
- this._tag = "AddService";
31
- }
32
-
33
- }
34
-
35
- exports.AddService = AddService;
36
-
37
- class Compose extends Patch {
38
- constructor(first, second) {
39
- super();
40
- this.first = first;
41
- this.second = second;
42
- this._tag = "Compose";
43
- }
44
-
45
- }
46
-
47
- exports.Compose = Compose;
48
-
49
- class Empty extends Patch {
50
- constructor() {
51
- super(...arguments);
52
- this._tag = "Empty";
53
- }
54
-
55
- }
56
-
57
- exports.Empty = Empty;
58
-
59
- class RemoveService extends Patch {
60
- constructor(tag) {
61
- super();
62
- this.tag = tag;
63
- this._tag = "RemoveService";
64
- }
65
-
66
- }
67
-
68
- exports.RemoveService = RemoveService;
69
-
70
- class UpdateService extends Patch {
71
- constructor(update, tag) {
72
- super();
73
- this.update = update;
74
- this.tag = tag;
75
- this._tag = "UpdateService";
76
- }
77
-
78
- }
79
- /**
80
- * @tsplus macro remove
81
- */
82
-
83
-
84
- exports.UpdateService = UpdateService;
85
-
86
- function concrete(_) {//
87
- }
88
- //# sourceMappingURL=definition.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"definition.cjs","mappings":";;;;;;;AAAO,MAAMA,WAAW,gBAAGC,MAAM,CAACC,GAAP,CAAW,aAAX,CAApB;AAGP;;;;;;;AAIM,MAAgBC,KAAhB,CAAqB;EAA3BC;IACW,eAAuBJ,WAAvB;EAGV;;AAJ0B;;;;AAMrB,MAAOK,UAAP,SAAwCF,KAAxC,CAAsE;EAE1EC,YAAqBE,OAArB,EAAgDC,GAAhD,EAAiE;IAC/D;IADmB;IAA2B;IADvC,YAAO,YAAP;EAGR;;AAJyE;;;;AAOtE,MAAOC,OAAP,SAAsCL,KAAtC,CAAqD;EAEzDC,YAAqBK,KAArB,EAAqDC,MAArD,EAA6E;IAC3E;IADmB;IAAgC;IAD5C,YAAO,SAAP;EAGR;;AAJwD;;;;AAOrD,MAAOC,KAAP,SAA0BR,KAA1B,CAAyC;EAA/CC;;IACW,YAAO,OAAP;EACV;;AAF8C;;;;AAIzC,MAAOQ,aAAP,SAA2CT,KAA3C,CAAyE;EAE7EC,YAAqBG,GAArB,EAAsC;IACpC;IADmB;IADZ,YAAO,eAAP;EAGR;;AAJ4E;;;;AAOzE,MAAOM,aAAP,SAA2CV,KAA3C,CAAwF;EAE5FC,YAAqBU,MAArB,EAA+DP,GAA/D,EAAgF;IAC9E;IADmB;IAA0C;IADtD,YAAO,eAAP;EAGR;;AAJ2F;AAc9F;;;;;;;AAGM,SAAUQ,QAAV,CAAmBC,CAAnB,EAAqC,CACzC;AACD","names":["PatchTypeId","Symbol","for","Patch","constructor","AddService","service","tag","Compose","first","second","Empty","RemoveService","UpdateService","update","concrete","_"],"sourceRoot":"","sources":["../../../_src/data/Patch/definition.ts"],"sourcesContent":[null]}
@@ -1,32 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
-
7
- var _api = /*#__PURE__*/require("./Patch/api.cjs");
8
-
9
- Object.keys(_api).forEach(function (key) {
10
- if (key === "default" || key === "__esModule") return;
11
- if (key in exports && exports[key] === _api[key]) return;
12
- Object.defineProperty(exports, key, {
13
- enumerable: true,
14
- get: function () {
15
- return _api[key];
16
- }
17
- });
18
- });
19
-
20
- var _definition = /*#__PURE__*/require("./Patch/definition.cjs");
21
-
22
- Object.keys(_definition).forEach(function (key) {
23
- if (key === "default" || key === "__esModule") return;
24
- if (key in exports && exports[key] === _definition[key]) return;
25
- Object.defineProperty(exports, key, {
26
- enumerable: true,
27
- get: function () {
28
- return _definition[key];
29
- }
30
- });
31
- });
32
- //# sourceMappingURL=Patch.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Patch.cjs","mappings":";;;;;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA","names":[],"sourceRoot":"","sources":["../../_src/data/Patch.ts"],"sourcesContent":[null]}
@@ -1,112 +0,0 @@
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/data/number/instances";
5
- import * as tsplus_module_5 from "@fncts/base/typeclass/Ord/api/contramap";
6
- import * as tsplus_module_6 from "@fncts/base/collection/immutable/HashMap/api";
7
- import * as tsplus_module_7 from "@fncts/base/data/Maybe/destructors";
8
- import * as tsplus_module_8 from "@fncts/base/collection/compat/Array/api";
9
- export const compose = compose_1;
10
- export const empty = empty_1;
11
- import { Cons } from "@fncts/base/collection/immutable/List";
12
- import { AddService, RemoveService, UpdateService } from "@fncts/base/data/Patch";
13
- import { Empty } from "@fncts/base/data/Patch/definition";
14
- import { Compose } from "@fncts/base/data/Patch/definition";
15
- import { concrete } from "@fncts/base/data/Patch/definition";
16
- /**
17
- * @tsplus tailRec
18
- */
19
-
20
- function applyLoop(environment, patches) {
21
- var environment_1 = environment,
22
- patches_1 = patches;
23
- var environment_2 = environment,
24
- patches_2 = patches;
25
-
26
- while (1) {
27
- if (tsplus_module_1.isEmpty(patches_1)) {
28
- return environment_1;
29
- }
30
-
31
- const head = patches_1.head;
32
- const tail = patches_1.tail;
33
- void 0;
34
-
35
- switch (head._tag) {
36
- case "AddService":
37
- environment_2 = tsplus_module_2.add(environment_1, head.service, head.tag);
38
- patches_2 = tail;
39
- environment_1 = environment_2;
40
- patches_1 = patches_2;
41
- continue;
42
-
43
- case "Compose":
44
- environment_2 = environment_1;
45
- patches_2 = tsplus_module_3.cons(head.first, tsplus_module_3.cons(head.second, tail));
46
- environment_1 = environment_2;
47
- patches_1 = patches_2;
48
- continue;
49
-
50
- case "Empty":
51
- environment_2 = environment_1;
52
- patches_2 = tail;
53
- environment_1 = environment_2;
54
- patches_1 = patches_2;
55
- continue;
56
-
57
- case "RemoveService":
58
- environment_2 = environment_1;
59
- patches_2 = tail;
60
- environment_1 = environment_2;
61
- patches_1 = patches_2;
62
- continue;
63
-
64
- case "UpdateService":
65
- environment_2 = tsplus_module_2.update(environment_1, head.update, head.tag);
66
- patches_2 = tail;
67
- environment_1 = environment_2;
68
- patches_1 = patches_2;
69
- continue;
70
- }
71
- }
72
- }
73
- /**
74
- * @tsplus fluent fncts.Environment.Patch __call
75
- */
76
-
77
-
78
- export function apply(patch, environment) {
79
- return applyLoop(environment, tsplus_module_3.cons(patch));
80
- }
81
- /**
82
- * @tsplus fluent fncts.Environment.Patch compose
83
- */
84
-
85
- function compose_1(self, that) {
86
- return new Compose(self, that);
87
- }
88
-
89
- const OrdEnvironmentMap = /*#__PURE__*/tsplus_module_5.contramap(tsplus_module_4.Ord, _ => _[1][1]);
90
- /**
91
- * @tsplus static fncts.Environment.PatchOps diff
92
- */
93
-
94
- export function diff(oldValue, newValue) {
95
- const sorted = tsplus_module_6.toArray(newValue.map);
96
- 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 AddService(newService, tag))], oldService => {
97
- if (oldService === newService) {
98
- return [tsplus_module_6.remove_(map, tag), patch];
99
- } else {
100
- return [tsplus_module_6.remove_(map, tag), compose_1(patch, new UpdateService(_ => newService, tag))];
101
- }
102
- }));
103
- return tsplus_module_6.foldLeftWithIndex_(missingServices, patch, (tag, patch) => compose_1(patch, new RemoveService(tag)));
104
- }
105
- /**
106
- * @tsplus static fncts.Environment.PatchOps empty
107
- */
108
-
109
- function empty_1() {
110
- return new Empty();
111
- }
112
- //# sourceMappingURL=api.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.mjs","mappings":";;;;;;;;aAyCgBA,OAAO;aA+BPC,KAAK;AAxErB,SAASC,IAAT,QAAqB,uCAArB;AACA,SAASC,UAAT,EAAqBC,aAArB,EAAoCC,aAApC,QAAyD,wBAAzD;AAEA,SAASC,KAAT,QAAsB,mCAAtB;AACA,SAASC,OAAT,QAAwB,mCAAxB;AACA,SAASC,QAAT,QAAyB,mCAAzB;AAEA;;;;AAGA,SAASC,SAAT,CAAmBC,WAAnB,EAAkDC,OAAlD,EAAgF;sBAA7DD;MAAAE,YAA+BD;sBAA/BD;MAAAG,YAA+BF;;YAAkD;IAClG,IAAIG,kCAAJ,EAAuB;MACrB;IACD;;IACD,MAAMC,IAAI,GAAGH,UAAQG,IAArB;IACA,MAAMC,IAAI,GAAGJ,UAAQI,IAArB;IACA;;IACA,QAAQD,IAAI,CAACE,IAAb;MACE,KAAK,YAAL;wBACmBC,mCAAgBH,IAAI,CAACI,OAArB,EAA8BJ,IAAI,CAACK,GAAnC;oBAAyCJ;;;;;MAC5D,KAAK,SAAL;;oBACgCK,qBAAKN,IAAI,CAACO,KAAV,EAAiBD,qBAAKN,IAAI,CAACQ,MAAV,EAAkBP,IAAlB,CAAjB;;;;;MAChC,KAAK,OAAL;;oBACgCA;;;;;MAChC,KAAK,eAAL;;oBACgCA;;;;;MAChC,KAAK,eAAL;wBACmBE,sCAAmBH,IAAI,CAACS,MAAxB,EAAgCT,IAAI,CAACK,GAArC;oBAA2CJ;;;;IAVhE;EAYD;AAAA;AAED;;;;;AAGA,OAAM,SAAUS,KAAV,CAAyBC,KAAzB,EAAgDhB,WAAhD,EAA4E;EAChF,OAAOD,SAAS,CAACC,WAAD,EAAcW,qBAAKK,KAAL,CAAd,CAAhB;AACD;AAED;;;;AAGA,mBAAuCC,IAAvC,EAA6DC,IAA7D,EAAmF;EACjF,OAAO,IAAIrB,OAAJ,CAAYoB,IAAZ,EAAkBC,IAAlB,CAAP;AACD;;AAED,MAAMC,iBAAiB,gBAAGC,+CAAsBC,CAAD,IAA4DA,CAAC,CAAC,CAAD,CAAD,CAAK,CAAL,CAAjF,CAA1B;AAEA;;;;AAGA,OAAM,SAAUC,IAAV,CAAwBC,QAAxB,EAAmDC,QAAnD,EAA6E;EACjF,MAAMC,MAAM,2BAAqBD,QAAQ,CAACE,GAA9B,CAAZ;EACA,MAAM,CAACC,eAAD,EAAkBX,KAAlB,IAA2BY,iCAC/B,+BAACL,QAAQ,CAACG,GAAV,GAA6BG,SAA7B,CAD+B,EAE/B,CAAC,CAACH,GAAD,EAAMV,KAAN,CAAD,EAAe,CAACN,GAAD,EAAMoB,UAAN,CAAf,KACEC,iDAAQrB,GAAR,GACE,MAAM,CAACsB,6BAAWtB,GAAX,CAAD,EAAkBuB,iBAAc,IAAIxC,UAAJ,CAAeqC,UAAf,EAA2BpB,GAA3B,CAAd,CAAlB,CADR,EAEGwB,UAAD,IAAe;IACb,IAAIA,UAAU,KAAKJ,UAAnB,EAA+B;MAC7B,OAAO,CAACE,6BAAWtB,GAAX,CAAD,EAAkBM,KAAlB,CAAP;IACD,CAFD,MAEO;MACL,OAAO,CAACgB,6BAAWtB,GAAX,CAAD,EAAkBuB,iBAAc,IAAItC,aAAJ,CAAmB0B,CAAD,IAAYS,UAA9B,EAA0CpB,GAA1C,CAAd,CAAlB,CAAP;IACD;EACF,CARH,CAH6B,CAAjC;EAcA,OAAOsB,oDAAkChB,KAAlC,EAAyC,CAACN,GAAD,EAAMM,KAAN,KAAgBiB,iBAAc,IAAIvC,aAAJ,CAAkBgB,GAAlB,CAAd,CAAzD,CAAP;AACD;AAED;;;;AAGA;EACE,OAAO,IAAId,KAAJ,EAAP;AACD","names":["compose","empty","Cons","AddService","RemoveService","UpdateService","Empty","Compose","concrete","applyLoop","environment","patches","patches_1","patches_2","tsplus_module_1","head","tail","_tag","tsplus_module_2","service","tag","tsplus_module_3","first","second","update","apply","patch","self","that","OrdEnvironmentMap","tsplus_module_5","_","diff","oldValue","newValue","sorted","map","missingServices","tsplus_module_8","empty_1","newService","tsplus_module_7","tsplus_module_6","compose_1","oldService"],"sourceRoot":"","sources":["../../../_src/data/Patch/api.ts"],"sourcesContent":[null]}
@@ -1,61 +0,0 @@
1
- export const PatchTypeId = /*#__PURE__*/Symbol.for("fncts.Patch");
2
- /**
3
- * @tsplus type fncts.Environment.Patch
4
- * @tsplus companion fncts.Environment.PatchOps
5
- */
6
-
7
- export class Patch {
8
- constructor() {
9
- this._typeId = PatchTypeId;
10
- }
11
-
12
- }
13
- export class AddService extends Patch {
14
- constructor(service, tag) {
15
- super();
16
- this.service = service;
17
- this.tag = tag;
18
- this._tag = "AddService";
19
- }
20
-
21
- }
22
- export class Compose extends Patch {
23
- constructor(first, second) {
24
- super();
25
- this.first = first;
26
- this.second = second;
27
- this._tag = "Compose";
28
- }
29
-
30
- }
31
- export class Empty extends Patch {
32
- constructor() {
33
- super(...arguments);
34
- this._tag = "Empty";
35
- }
36
-
37
- }
38
- export class RemoveService extends Patch {
39
- constructor(tag) {
40
- super();
41
- this.tag = tag;
42
- this._tag = "RemoveService";
43
- }
44
-
45
- }
46
- export class UpdateService extends Patch {
47
- constructor(update, tag) {
48
- super();
49
- this.update = update;
50
- this.tag = tag;
51
- this._tag = "UpdateService";
52
- }
53
-
54
- }
55
- /**
56
- * @tsplus macro remove
57
- */
58
-
59
- export function concrete(_) {//
60
- }
61
- //# sourceMappingURL=definition.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"definition.mjs","mappings":"AAAA,OAAO,MAAMA,WAAW,gBAAGC,MAAM,CAACC,GAAP,CAAW,aAAX,CAApB;AAGP;;;;;AAIA,OAAM,MAAgBC,KAAhB,CAAqB;EAA3BC;IACW,eAAuBJ,WAAvB;EAGV;;AAJ0B;AAM3B,OAAM,MAAOK,UAAP,SAAwCF,KAAxC,CAAsE;EAE1EC,YAAqBE,OAArB,EAAgDC,GAAhD,EAAiE;IAC/D;IADmB;IAA2B;IADvC,YAAO,YAAP;EAGR;;AAJyE;AAO5E,OAAM,MAAOC,OAAP,SAAsCL,KAAtC,CAAqD;EAEzDC,YAAqBK,KAArB,EAAqDC,MAArD,EAA6E;IAC3E;IADmB;IAAgC;IAD5C,YAAO,SAAP;EAGR;;AAJwD;AAO3D,OAAM,MAAOC,KAAP,SAA0BR,KAA1B,CAAyC;EAA/CC;;IACW,YAAO,OAAP;EACV;;AAF8C;AAI/C,OAAM,MAAOQ,aAAP,SAA2CT,KAA3C,CAAyE;EAE7EC,YAAqBG,GAArB,EAAsC;IACpC;IADmB;IADZ,YAAO,eAAP;EAGR;;AAJ4E;AAO/E,OAAM,MAAOM,aAAP,SAA2CV,KAA3C,CAAwF;EAE5FC,YAAqBU,MAArB,EAA+DP,GAA/D,EAAgF;IAC9E;IADmB;IAA0C;IADtD,YAAO,eAAP;EAGR;;AAJ2F;AAc9F;;;;AAGA,OAAM,SAAUQ,QAAV,CAAmBC,CAAnB,EAAqC,CACzC;AACD","names":["PatchTypeId","Symbol","for","Patch","constructor","AddService","service","tag","Compose","first","second","Empty","RemoveService","UpdateService","update","concrete","_"],"sourceRoot":"","sources":["../../../_src/data/Patch/definition.ts"],"sourcesContent":[null]}
@@ -1,4 +0,0 @@
1
- // codegen:start { preset: barrel, include: ./Patch/*.ts }
2
- export * from "./Patch/api.mjs";
3
- export * from "./Patch/definition.mjs";
4
- //# sourceMappingURL=Patch.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Patch.mjs","mappings":"AAAA;AACA,cAAc,iBAAd;AACA,cAAc,wBAAd","names":[],"sourceRoot":"","sources":["../../_src/data/Patch.ts"],"sourcesContent":[null]}
@@ -1,75 +0,0 @@
1
- import { Cons } from "@fncts/base/collection/immutable/List";
2
- import { AddService, RemoveService, UpdateService } from "@fncts/base/data/Patch";
3
- import { Patch } from "@fncts/base/data/Patch/definition";
4
- import { Empty } from "@fncts/base/data/Patch/definition";
5
- import { Compose } from "@fncts/base/data/Patch/definition";
6
- import { concrete } from "@fncts/base/data/Patch/definition";
7
-
8
- /**
9
- * @tsplus tailRec
10
- */
11
- function applyLoop(environment: Environment<any>, patches: List<Patch<any, any>>): Environment<any> {
12
- if (patches.isEmpty()) {
13
- return environment;
14
- }
15
- const head = patches.head;
16
- const tail = patches.tail;
17
- concrete(head);
18
- switch (head._tag) {
19
- case "AddService":
20
- return applyLoop(environment.add(head.service, head.tag), tail);
21
- case "Compose":
22
- return applyLoop(environment, Cons(head.first, Cons(head.second, tail)));
23
- case "Empty":
24
- return applyLoop(environment, tail);
25
- case "RemoveService":
26
- return applyLoop(environment, tail);
27
- case "UpdateService":
28
- return applyLoop(environment.update(head.update, head.tag), tail);
29
- }
30
- }
31
-
32
- /**
33
- * @tsplus fluent fncts.Environment.Patch __call
34
- */
35
- export function apply<In, Out>(patch: Patch<In, Out>, environment: Environment<In>): Environment<Out> {
36
- return applyLoop(environment, Cons(patch));
37
- }
38
-
39
- /**
40
- * @tsplus fluent fncts.Environment.Patch compose
41
- */
42
- export function compose<In, Out, Out2>(self: Patch<In, Out>, that: Patch<Out, Out2>): Patch<In, Out2> {
43
- return new Compose(self, that);
44
- }
45
-
46
- const OrdEnvironmentMap = Number.Ord.contramap((_: readonly [Tag<unknown>, readonly [unknown, number]]) => _[1][1]);
47
-
48
- /**
49
- * @tsplus static fncts.Environment.PatchOps diff
50
- */
51
- export function diff<In, Out>(oldValue: Environment<In>, newValue: Environment<Out>): Patch<In, Out> {
52
- const sorted = newValue.map.toArray;
53
- const [missingServices, patch] = sorted.foldLeft(
54
- [oldValue.map.beginMutation, Patch.empty() as Patch<any, any>],
55
- ([map, patch], [tag, newService]) =>
56
- map.get(tag).match(
57
- () => [map.remove(tag), patch.compose(new AddService(newService, tag))],
58
- (oldService) => {
59
- if (oldService === newService) {
60
- return [map.remove(tag), patch];
61
- } else {
62
- return [map.remove(tag), patch.compose(new UpdateService((_: any) => newService, tag))];
63
- }
64
- },
65
- ),
66
- );
67
- return missingServices.foldLeftWithIndex(patch, (tag, patch) => patch.compose(new RemoveService(tag)));
68
- }
69
-
70
- /**
71
- * @tsplus static fncts.Environment.PatchOps empty
72
- */
73
- export function empty<A>(): Patch<A, A> {
74
- return new Empty();
75
- }
@@ -1,58 +0,0 @@
1
- export const PatchTypeId = Symbol.for("fncts.Patch");
2
- export type PatchTypeId = typeof PatchTypeId;
3
-
4
- /**
5
- * @tsplus type fncts.Environment.Patch
6
- * @tsplus companion fncts.Environment.PatchOps
7
- */
8
- export abstract class Patch<In, Out> {
9
- readonly _typeId: PatchTypeId = PatchTypeId;
10
- readonly _R!: (_: In) => void;
11
- readonly _A!: () => Out;
12
- }
13
-
14
- export class AddService<Env, Service> extends Patch<Env, Env & Has<Service>> {
15
- readonly _tag = "AddService";
16
- constructor(readonly service: Service, readonly tag: Tag<Service>) {
17
- super();
18
- }
19
- }
20
-
21
- export class Compose<In, Out, Out2> extends Patch<In, Out2> {
22
- readonly _tag = "Compose";
23
- constructor(readonly first: Patch<In, Out>, readonly second: Patch<Out, Out2>) {
24
- super();
25
- }
26
- }
27
-
28
- export class Empty<Env> extends Patch<Env, Env> {
29
- readonly _tag = "Empty";
30
- }
31
-
32
- export class RemoveService<Env, Service> extends Patch<Env & Has<Service>, Env> {
33
- readonly _tag = "RemoveService";
34
- constructor(readonly tag: Tag<Service>) {
35
- super();
36
- }
37
- }
38
-
39
- export class UpdateService<Env, Service> extends Patch<Env & Has<Service>, Env & Has<Service>> {
40
- readonly _tag = "UpdateService";
41
- constructor(readonly update: (_: Service) => Service, readonly tag: Tag<Service>) {
42
- super();
43
- }
44
- }
45
-
46
- export type Concrete =
47
- | AddService<any, any>
48
- | Compose<any, any, any>
49
- | Empty<any>
50
- | RemoveService<any, any>
51
- | UpdateService<any, any>;
52
-
53
- /**
54
- * @tsplus macro remove
55
- */
56
- export function concrete(_: Patch<any, any>): asserts _ is Concrete {
57
- //
58
- }
@@ -1,4 +0,0 @@
1
- // codegen:start { preset: barrel, include: ./Patch/*.ts }
2
- export * from "./Patch/api.js";
3
- export * from "./Patch/definition.js";
4
- // codegen:end
@@ -1,24 +0,0 @@
1
- import { Environment } from "@fncts/base/data/Environment/definition";
2
- import { List } from "@fncts/base/collection/immutable/List/definition";
3
- import { Tag } from "@fncts/base/data/Tag/definition";
4
- import { Patch } from "@fncts/base/data/Patch/definition";
5
- /**
6
- * @tsplus fluent fncts.Environment.Patch __call
7
- * @tsplus location "@fncts/base/data/Patch/api"
8
- */
9
- export declare function apply<In, Out>(patch: Patch<In, Out>, environment: Environment<In>): Environment<Out>;
10
- /**
11
- * @tsplus fluent fncts.Environment.Patch compose
12
- * @tsplus location "@fncts/base/data/Patch/api"
13
- */
14
- export declare function compose<In, Out, Out2>(self: Patch<In, Out>, that: Patch<Out, Out2>): Patch<In, Out2>;
15
- /**
16
- * @tsplus static fncts.Environment.PatchOps diff
17
- * @tsplus location "@fncts/base/data/Patch/api"
18
- */
19
- export declare function diff<In, Out>(oldValue: Environment<In>, newValue: Environment<Out>): Patch<In, Out>;
20
- /**
21
- * @tsplus static fncts.Environment.PatchOps empty
22
- * @tsplus location "@fncts/base/data/Patch/api"
23
- */
24
- export declare function empty<A>(): Patch<A, A>;
@@ -1,44 +0,0 @@
1
- import { Has } from "@fncts/base/typeclass/Has";
2
- import { Tag } from "@fncts/base/data/Tag/definition";
3
- export declare const PatchTypeId: unique symbol;
4
- export type PatchTypeId = typeof PatchTypeId;
5
- /**
6
- * @tsplus type fncts.Environment.Patch
7
- * @tsplus companion fncts.Environment.PatchOps
8
- */
9
- export declare abstract class Patch<In, Out> {
10
- readonly _typeId: PatchTypeId;
11
- readonly _R: (_: In) => void;
12
- readonly _A: () => Out;
13
- }
14
- export declare class AddService<Env, Service> extends Patch<Env, Env & Has<Service>> {
15
- readonly service: Service;
16
- readonly tag: Tag<Service>;
17
- readonly _tag = "AddService";
18
- constructor(service: Service, tag: Tag<Service>);
19
- }
20
- export declare class Compose<In, Out, Out2> extends Patch<In, Out2> {
21
- readonly first: Patch<In, Out>;
22
- readonly second: Patch<Out, Out2>;
23
- readonly _tag = "Compose";
24
- constructor(first: Patch<In, Out>, second: Patch<Out, Out2>);
25
- }
26
- export declare class Empty<Env> extends Patch<Env, Env> {
27
- readonly _tag = "Empty";
28
- }
29
- export declare class RemoveService<Env, Service> extends Patch<Env & Has<Service>, Env> {
30
- readonly tag: Tag<Service>;
31
- readonly _tag = "RemoveService";
32
- constructor(tag: Tag<Service>);
33
- }
34
- export declare class UpdateService<Env, Service> extends Patch<Env & Has<Service>, Env & Has<Service>> {
35
- readonly update: (_: Service) => Service;
36
- readonly tag: Tag<Service>;
37
- readonly _tag = "UpdateService";
38
- constructor(update: (_: Service) => Service, tag: Tag<Service>);
39
- }
40
- export type Concrete = AddService<any, any> | Compose<any, any, any> | Empty<any> | RemoveService<any, any> | UpdateService<any, any>;
41
- /**
42
- * @tsplus macro remove
43
- */
44
- export declare function concrete(_: Patch<any, any>): asserts _ is Concrete;
package/data/Patch.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from "./Patch/api.js";
2
- export * from "./Patch/definition.js";