@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.
@@ -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";