ctrl-fx 0.0.1 → 0.1.0

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.
Files changed (145) hide show
  1. package/dist/clipboard.d.ts +7 -0
  2. package/dist/clipboard.d.ts.map +1 -0
  3. package/dist/clipboard.js +3 -0
  4. package/dist/db/effects.d.ts +78 -0
  5. package/dist/db/effects.d.ts.map +1 -0
  6. package/dist/db/effects.js +98 -0
  7. package/dist/db/errors.d.ts +21 -0
  8. package/dist/db/errors.d.ts.map +1 -0
  9. package/dist/db/errors.js +13 -0
  10. package/dist/db/index.d.ts +32 -0
  11. package/dist/db/index.d.ts.map +1 -0
  12. package/dist/db/index.js +19 -0
  13. package/dist/db/keypath.d.ts +40 -0
  14. package/dist/db/keypath.d.ts.map +1 -0
  15. package/dist/db/keypath.js +20 -0
  16. package/dist/db/setup.d.ts +83 -0
  17. package/dist/db/setup.d.ts.map +1 -0
  18. package/dist/db/setup.js +100 -0
  19. package/dist/db/testdb.d.ts +19 -0
  20. package/dist/db/testdb.d.ts.map +1 -0
  21. package/dist/db/testdb.js +34 -0
  22. package/dist/dom/attrs.d.ts +67 -0
  23. package/dist/dom/attrs.d.ts.map +1 -0
  24. package/dist/dom/attrs.js +154 -0
  25. package/dist/dom/components.d.ts +43 -0
  26. package/dist/dom/components.d.ts.map +1 -0
  27. package/dist/dom/components.js +86 -0
  28. package/dist/dom/elems.d.ts +121 -0
  29. package/dist/dom/elems.d.ts.map +1 -0
  30. package/dist/dom/elems.js +52 -0
  31. package/dist/dom/events.d.ts +232 -0
  32. package/dist/dom/events.d.ts.map +1 -0
  33. package/dist/dom/events.js +289 -0
  34. package/dist/dom/index.d.ts +248 -0
  35. package/dist/dom/index.d.ts.map +1 -0
  36. package/dist/dom/index.js +266 -0
  37. package/dist/dom/nodeid.d.ts +9 -0
  38. package/dist/dom/nodeid.d.ts.map +1 -0
  39. package/dist/dom/nodeid.js +27 -0
  40. package/dist/dom/svg.d.ts +23 -0
  41. package/dist/dom/svg.d.ts.map +1 -0
  42. package/dist/dom/svg.js +1 -0
  43. package/dist/dom/views.d.ts +60 -0
  44. package/dist/dom/views.d.ts.map +1 -0
  45. package/dist/dom/views.js +154 -0
  46. package/dist/effects.d.ts +580 -0
  47. package/dist/effects.d.ts.map +1 -0
  48. package/dist/effects.js +1556 -0
  49. package/dist/index.d.ts +41 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +78 -0
  52. package/dist/internal/clipboard.d.ts +5 -0
  53. package/dist/internal/clipboard.d.ts.map +1 -0
  54. package/dist/internal/clipboard.js +33 -0
  55. package/dist/internal/cmpmgr.d.ts +46 -0
  56. package/dist/internal/cmpmgr.d.ts.map +1 -0
  57. package/dist/internal/cmpmgr.js +561 -0
  58. package/dist/internal/dbmgr.d.ts +11 -0
  59. package/dist/internal/dbmgr.d.ts.map +1 -0
  60. package/dist/internal/dbmgr.js +200 -0
  61. package/dist/internal/dominterpreter.d.ts +5 -0
  62. package/dist/internal/dominterpreter.d.ts.map +1 -0
  63. package/dist/internal/dominterpreter.js +337 -0
  64. package/dist/internal/eventmgr.d.ts +41 -0
  65. package/dist/internal/eventmgr.d.ts.map +1 -0
  66. package/dist/internal/eventmgr.js +696 -0
  67. package/dist/internal/index.d.ts +19 -0
  68. package/dist/internal/index.d.ts.map +1 -0
  69. package/dist/internal/index.js +38 -0
  70. package/dist/internal/interpreter.d.ts +10 -0
  71. package/dist/internal/interpreter.d.ts.map +1 -0
  72. package/dist/internal/interpreter.js +1 -0
  73. package/dist/internal/locutils.d.ts +4 -0
  74. package/dist/internal/locutils.d.ts.map +1 -0
  75. package/dist/internal/locutils.js +22 -0
  76. package/dist/internal/net.d.ts +4 -0
  77. package/dist/internal/net.d.ts.map +1 -0
  78. package/dist/internal/net.js +64 -0
  79. package/dist/internal/realdom.d.ts +249 -0
  80. package/dist/internal/realdom.d.ts.map +1 -0
  81. package/dist/internal/realdom.js +1 -0
  82. package/dist/internal/styleregistry.d.ts +6 -0
  83. package/dist/internal/styleregistry.d.ts.map +1 -0
  84. package/dist/internal/styleregistry.js +18 -0
  85. package/dist/internal/taskreg.d.ts +9 -0
  86. package/dist/internal/taskreg.d.ts.map +1 -0
  87. package/dist/internal/taskreg.js +28 -0
  88. package/dist/internal/testing.d.ts +12 -0
  89. package/dist/internal/testing.d.ts.map +1 -0
  90. package/dist/internal/testing.js +974 -0
  91. package/dist/internal/testinginterpreter.d.ts +10 -0
  92. package/dist/internal/testinginterpreter.d.ts.map +1 -0
  93. package/dist/internal/testinginterpreter.js +646 -0
  94. package/dist/internal/vdom.d.ts +93 -0
  95. package/dist/internal/vdom.d.ts.map +1 -0
  96. package/dist/internal/vdom.js +470 -0
  97. package/dist/json/index.d.ts +5 -0
  98. package/dist/json/index.d.ts.map +1 -0
  99. package/dist/json/index.js +2 -0
  100. package/dist/json/validation.d.ts +28 -0
  101. package/dist/json/validation.d.ts.map +1 -0
  102. package/dist/json/validation.js +8 -0
  103. package/dist/net/fragment.d.ts +10 -0
  104. package/dist/net/fragment.d.ts.map +1 -0
  105. package/dist/net/fragment.js +27 -0
  106. package/dist/net/index.d.ts +42 -0
  107. package/dist/net/index.d.ts.map +1 -0
  108. package/dist/net/index.js +60 -0
  109. package/dist/net/location.d.ts +21 -0
  110. package/dist/net/location.d.ts.map +1 -0
  111. package/dist/net/location.js +41 -0
  112. package/dist/net/path.d.ts +12 -0
  113. package/dist/net/path.d.ts.map +1 -0
  114. package/dist/net/path.js +29 -0
  115. package/dist/net/queryparam.d.ts +10 -0
  116. package/dist/net/queryparam.d.ts.map +1 -0
  117. package/dist/net/queryparam.js +34 -0
  118. package/dist/router.d.ts +40 -0
  119. package/dist/router.d.ts.map +1 -0
  120. package/dist/router.js +77 -0
  121. package/dist/scroll.d.ts +7 -0
  122. package/dist/scroll.d.ts.map +1 -0
  123. package/dist/scroll.js +3 -0
  124. package/dist/testing.d.ts +248 -0
  125. package/dist/testing.d.ts.map +1 -0
  126. package/dist/testing.js +159 -0
  127. package/dist/utils/apply.d.ts +9 -0
  128. package/dist/utils/apply.d.ts.map +1 -0
  129. package/dist/utils/apply.js +10 -0
  130. package/dist/utils/index.d.ts +22 -0
  131. package/dist/utils/index.d.ts.map +1 -0
  132. package/dist/utils/index.js +138 -0
  133. package/dist/utils/lens.d.ts +18 -0
  134. package/dist/utils/lens.d.ts.map +1 -0
  135. package/dist/utils/lens.js +27 -0
  136. package/dist/utils/match.d.ts +17 -0
  137. package/dist/utils/match.d.ts.map +1 -0
  138. package/dist/utils/match.js +28 -0
  139. package/dist/utils/result.d.ts +47 -0
  140. package/dist/utils/result.d.ts.map +1 -0
  141. package/dist/utils/result.js +97 -0
  142. package/dist/webcomponent.d.ts +15 -0
  143. package/dist/webcomponent.d.ts.map +1 -0
  144. package/dist/webcomponent.js +43 -0
  145. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ import { toComponent } from '.';
2
+ import {} from './utils';
3
+ import {} from './dom/attrs';
4
+ import {} from './dom/views';
5
+ import {} from './effects';
6
+ import { testComponent as internalTestcomponent } from './internal';
7
+ import {} from './net';
8
+ import {} from './utils/result';
9
+ import { TestDatabaseData } from './db/testdb';
10
+ export { TestDatabaseData };
11
+ export const clearAppBadge = {
12
+ _type: 'ClearAppBadge',
13
+ };
14
+ export function setAppBadge(count) {
15
+ return { _type: 'SetAppBadge', count };
16
+ }
17
+ export function appBadgeCount(operations) {
18
+ if (operations.length > 0) {
19
+ const op = operations[operations.length - 1];
20
+ switch (op._type) {
21
+ case 'ClearAppBadge':
22
+ return 0;
23
+ case 'SetAppBadge':
24
+ return op.count;
25
+ }
26
+ }
27
+ else {
28
+ return 0;
29
+ }
30
+ }
31
+ /** Creates a TestConfig that throws on any HTTP request. */
32
+ export function defaultTestConfig() {
33
+ return {
34
+ http: {
35
+ handler: (_request, _prior) => {
36
+ throw new Error('No HTTP handler configured in TestConfig.');
37
+ },
38
+ },
39
+ clock: {
40
+ values: [],
41
+ },
42
+ random: {
43
+ values: [],
44
+ },
45
+ };
46
+ }
47
+ /** Creates an empty TestData, optionally initialising the `custom` field. */
48
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
49
+ export function newTestData(custom) {
50
+ return {
51
+ window: {
52
+ alerts: [],
53
+ confirms: [],
54
+ confirmResponses: [],
55
+ prompts: [],
56
+ promptResponses: [],
57
+ },
58
+ navigator: {
59
+ appBadgeOperations: [],
60
+ },
61
+ clipboard: {
62
+ content: '',
63
+ writes: [],
64
+ },
65
+ document: {
66
+ title: null,
67
+ },
68
+ http: {
69
+ interactions: [],
70
+ },
71
+ clock: {
72
+ calls: [],
73
+ },
74
+ random: {
75
+ calls: [],
76
+ },
77
+ console: {
78
+ logs: [],
79
+ },
80
+ db: new TestDatabaseData(new Map()),
81
+ storage: {
82
+ local: new Map(),
83
+ session: new Map(),
84
+ },
85
+ navigation: {
86
+ locationHistory: [],
87
+ },
88
+ scroll: {
89
+ windowScrolls: [],
90
+ elementScrolls: [],
91
+ },
92
+ downloads: [],
93
+ broadcasts: {
94
+ sent: [],
95
+ },
96
+ custom: (custom ?? {}),
97
+ };
98
+ }
99
+ /** Simulates a click on the element(s) matching `selector`. */
100
+ export function click(selector) {
101
+ return {
102
+ type: 'Click',
103
+ selector,
104
+ };
105
+ }
106
+ /** Advances the test scheduler clock by `milliseconds`, firing any scheduled tasks that come due. */
107
+ export function advanceTime(milliseconds) {
108
+ return {
109
+ _type: 'AdvanceTime',
110
+ milliseconds,
111
+ };
112
+ }
113
+ /** Delivers a BroadcastChannel message to any active subscriber on `channel`. */
114
+ export function receiveBroadcast(channel, message) {
115
+ return { _type: 'ReceiveBroadcast', channel, message };
116
+ }
117
+ /** Dispatches a custom DOM event on the element matching `selector`, invoking any `onEvent` handler. */
118
+ export function fireCustomEvent(selector, eventName, detail) {
119
+ return { _type: 'FireCustomEvent', selector, eventName, detail };
120
+ }
121
+ /** Simulates a form submit event on the element(s) matching `selector`. */
122
+ export function submit(selector) {
123
+ return { _type: 'Submit', selector };
124
+ }
125
+ /** Simulates an `input` event on the element(s) matching `selector`. */
126
+ export function textInput(selector, value) {
127
+ return { _type: 'TextInput', selector, value };
128
+ }
129
+ /** Creates an attribute object `{ name, value }` for use with `findOne(...).attrs.toContainEqual(attr(...))`. */
130
+ export function attr(name, value) {
131
+ return { name, value };
132
+ }
133
+ /**
134
+ * Creates a testable wrapper around a `Component`. Use this when testing a
135
+ * component that was created with `component()`. For testing a top-level view
136
+ * function directly, use `testApplication` instead.
137
+ */
138
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
139
+ export function testComponent(component, config, data) {
140
+ return internalTestcomponent(component, config, data);
141
+ }
142
+ /**
143
+ * The main entry point for testing a ctrl-fx application. Wraps a view
144
+ * function and initial state into a `TestableComponent`. Call `.run(...)`
145
+ * with interactions to simulate user actions, then inspect `.state`, `.data`,
146
+ * and the `findOne`/`find` DOM query methods on the result.
147
+ */
148
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
149
+ export function testApplication(app, initialState, config, data) {
150
+ const component = toComponent(app, initialState);
151
+ return testComponent(component, config, data);
152
+ }
153
+ /** Selects elements matching `selector`; throws during `run` if none are found. */
154
+ export function one(selector) {
155
+ return {
156
+ _type: 'OneOrMore',
157
+ selector,
158
+ };
159
+ }
@@ -0,0 +1,9 @@
1
+ export interface SupportsApply {
2
+ apply(f: (t: this) => this): this;
3
+ applyIf(condition: boolean, f: (self: this) => this): this;
4
+ }
5
+ export declare function applySupport<T>(): {
6
+ apply(this: T, f: (t: T) => T): T;
7
+ applyIf(this: T, condition: boolean, f: (t: T) => T): T;
8
+ };
9
+ //# sourceMappingURL=apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/utils/apply.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAAA;IACjC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAAA;CAC3D;AAED,wBAAgB,YAAY,CAAC,CAAC;gBAEd,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;kBAGf,CAAC,aAAa,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;EAItD"}
@@ -0,0 +1,10 @@
1
+ export function applySupport() {
2
+ return {
3
+ apply(f) {
4
+ return f(this);
5
+ },
6
+ applyIf(condition, f) {
7
+ return condition ? f(this) : this;
8
+ },
9
+ };
10
+ }
@@ -0,0 +1,22 @@
1
+ export declare const todo: () => never;
2
+ export declare function identity<A>(value: A): A;
3
+ export declare function exhaustivenessCheck(value: never): never;
4
+ export declare function eq(value1: any, value2: any): boolean;
5
+ export declare function isNever<A>(): [A] extends [never] ? true : false;
6
+ export type Integer = number & {
7
+ __brand: 'Integer';
8
+ };
9
+ export declare function int(n: number): Integer;
10
+ export declare function fold<A, B>(items: A[], initial: B, f: (a: A, b: B) => B): B;
11
+ export declare function exists<A>(items: A[], predicate: (item: A) => boolean): boolean;
12
+ export declare function stringToInt(s: string): number | undefined;
13
+ export declare function toggle<K extends keyof O, O extends Record<K, boolean>>(obj: O, key: K): O;
14
+ export declare function zipWithIndex<A>(as: readonly A[]): [A, number][];
15
+ export declare function assertDefined<A>(value: A, msg?: string | undefined): asserts value is NonNullable<A>;
16
+ export declare function pickFrom<T, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K>;
17
+ export type NonEmptyArray<A> = [A, ...A[]];
18
+ export type DeepReadonly<T> = T extends Function ? T : T extends Array<infer U> ? ReadonlyArray<DeepReadonly<U>> : T extends object ? {
19
+ readonly [K in keyof T]: DeepReadonly<T[K]>;
20
+ } : T;
21
+ export declare function filterNot<A>(value: A | undefined, f: (a: A) => boolean): A | undefined;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,EAAE,MAAM,KAExB,CAAA;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEvC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAEvD;AAID,wBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CA+EpD;AAGD,wBAAgB,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,CAG/D;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,CAAA;AAErD,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAGtC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAW1E;AAED,wBAAgB,MAAM,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GAC9B,OAAO,CAIT;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOzD;AAED,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,EACpE,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,CAAC,GACL,CAAC,CAKH;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAE/D;AAED,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,CAAC,EACR,GAAG,GAAE,MAAM,GAAG,SAAqB,GAClC,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAIjC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAC3C,GAAG,EAAE,CAAC,EACN,GAAG,IAAI,EAAE,CAAC,EAAE,GACX,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAQZ;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;AAG1C,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,GAC5C,CAAC,GACD,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACtB,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC9B,CAAC,SAAS,MAAM,GACd;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC/C,CAAC,CAAA;AAET,wBAAgB,SAAS,CAAC,CAAC,EACzB,KAAK,EAAE,CAAC,GAAG,SAAS,EACpB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GACnB,CAAC,GAAG,SAAS,CAMf"}
@@ -0,0 +1,138 @@
1
+ export const todo = () => {
2
+ throw new Error('Unimplemented');
3
+ };
4
+ export function identity(value) {
5
+ return value;
6
+ }
7
+ export function exhaustivenessCheck(value) {
8
+ throw new Error(`Unhandled: ${value}`);
9
+ }
10
+ // check two values for deep equality
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ export function eq(value1, value2) {
13
+ // check for different types
14
+ if (typeof value1 !== typeof value2) {
15
+ return false;
16
+ }
17
+ // null and undefined checks
18
+ if (value1 === null) {
19
+ return value2 === null;
20
+ }
21
+ if (value2 === null) {
22
+ return false;
23
+ }
24
+ if (value1 === undefined) {
25
+ return value2 === undefined;
26
+ }
27
+ if (value2 === undefined) {
28
+ return false;
29
+ }
30
+ // ignore functions
31
+ if (typeof value1 === 'function') {
32
+ return true;
33
+ }
34
+ // primitive comparison
35
+ if (typeof value1 !== 'object') {
36
+ return value1 === value2;
37
+ }
38
+ // recursively compare array items
39
+ if (Array.isArray(value1)) {
40
+ if (!Array.isArray(value2)) {
41
+ return false;
42
+ }
43
+ if (value1.length != value2.length) {
44
+ return false;
45
+ }
46
+ for (let i = 0; i < value1.length; i++) {
47
+ if (!eq(value1[i], value2[i])) {
48
+ return false;
49
+ }
50
+ }
51
+ return true;
52
+ }
53
+ else if (Array.isArray(value2)) {
54
+ return false;
55
+ }
56
+ // recusively compare object key/value pairs
57
+ if (typeof value1 === 'object') {
58
+ const keys1 = Object.keys(value1);
59
+ const keys2 = Object.keys(value2);
60
+ if (keys1.length !== keys2.length) {
61
+ return false;
62
+ }
63
+ for (const key of keys1) {
64
+ if (!Object.prototype.hasOwnProperty.call(value2, key)) {
65
+ return false;
66
+ }
67
+ if (!eq(value1[key], value2[key])) {
68
+ return false;
69
+ }
70
+ }
71
+ return true;
72
+ }
73
+ // if we get this far, we're working with some other type. Its hacky but we'll
74
+ // just compare the string representations
75
+ return `${value1}` === `${value2}`;
76
+ }
77
+ // returns false but lets us narrow types
78
+ export function isNever() {
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ return false;
81
+ }
82
+ export function int(n) {
83
+ if (Number.isInteger(n))
84
+ return n;
85
+ else
86
+ throw new Error(`Not an integer: ${n}`);
87
+ }
88
+ export function fold(items, initial, f) {
89
+ let b = initial;
90
+ let index = 0;
91
+ while (index < items.length) {
92
+ b = f(items[index], b);
93
+ index++;
94
+ }
95
+ return b;
96
+ }
97
+ export function exists(items, predicate) {
98
+ return fold(items, false, (item, acc) => {
99
+ return acc || predicate(item);
100
+ });
101
+ }
102
+ export function stringToInt(s) {
103
+ const result = Number.parseInt(s);
104
+ if (Number.isNaN(result)) {
105
+ return undefined;
106
+ }
107
+ else {
108
+ return result;
109
+ }
110
+ }
111
+ export function toggle(obj, key) {
112
+ return {
113
+ ...obj,
114
+ [key]: !obj[key],
115
+ };
116
+ }
117
+ export function zipWithIndex(as) {
118
+ return as.map((a, i) => [a, i]);
119
+ }
120
+ export function assertDefined(value, msg = undefined) {
121
+ if (value === null || value === undefined) {
122
+ throw new Error(msg ? msg : 'assertDefined failed');
123
+ }
124
+ }
125
+ export function pickFrom(obj, ...keys) {
126
+ return keys.reduce((acc, key) => {
127
+ acc[key] = obj[key];
128
+ return acc;
129
+ }, {});
130
+ }
131
+ export function filterNot(value, f) {
132
+ if (value !== undefined) {
133
+ return f(value) ? undefined : value;
134
+ }
135
+ else {
136
+ return undefined;
137
+ }
138
+ }
@@ -0,0 +1,18 @@
1
+ /** A pair of get/set functions that focus on a field `A` within a structure `S`. */
2
+ export type Lens<S, A> = {
3
+ /** Reads the focused field from `S`. */
4
+ get: (source: S) => A;
5
+ /** Returns a new `S` with the focused field replaced. */
6
+ set: (source: S, value: A) => S;
7
+ };
8
+ /** Creates a Lens focused on a single property of `S`. Usage: `lensFromProp<S>()('propName')`. */
9
+ export declare function lensFromProp<S>(): <K extends keyof S>(key: K) => Lens<S, S[K]>;
10
+ export type PathValue<S, Keys extends readonly any[]> = Keys extends [
11
+ infer K,
12
+ ...infer Rest
13
+ ] ? K extends keyof S ? Rest extends [] ? S[K] : PathValue<S[K], Rest> : never : S;
14
+ /** Creates a Lens focused on a nested path within `S`. Usage: `lensFromPath<S>()('a', 'b', 'c')`. */
15
+ export declare function lensFromPath<S>(): <Keys extends readonly (keyof any)[]>(...keys: [...Keys]) => Lens<S, PathValue<S, Keys>>;
16
+ /** Composes two lenses, focusing first through `ab` then through `bc`. */
17
+ export declare function composeLenses<A, B, C>(ab: Lens<A, B>, bc: Lens<B, C>): Lens<A, C>;
18
+ //# sourceMappingURL=lens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lens.d.ts","sourceRoot":"","sources":["../../src/utils/lens.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI;IACvB,wCAAwC;IACxC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAA;IACrB,yDAAyD;IACzD,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAA;CAChC,CAAA;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,CAAC,MACpB,CAAC,SAAS,MAAM,CAAC,EAAE,KAAK,CAAC,KAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAIlD;AAGD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,IAAI,SAAS,SAAS,GAAG,EAAE,IAAI,IAAI,SAAS;IACnE,MAAM,CAAC;IACP,GAAG,MAAM,IAAI;CACd,GACG,CAAC,SAAS,MAAM,CAAC,GACf,IAAI,SAAS,EAAE,GACb,CAAC,CAAC,CAAC,CAAC,GACJ,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GACvB,KAAK,GACP,CAAC,CAAA;AAEL,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,CAAC,MAEpB,IAAI,SAAS,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,EACzC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,KACjB,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAS/B;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EACd,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACb,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAKZ"}
@@ -0,0 +1,27 @@
1
+ /** Creates a Lens focused on a single property of `S`. Usage: `lensFromProp<S>()('propName')`. */
2
+ export function lensFromProp() {
3
+ return (key) => ({
4
+ get: s => s[key],
5
+ set: (s, a) => ({ ...s, [key]: a }),
6
+ });
7
+ }
8
+ /** Creates a Lens focused on a nested path within `S`. Usage: `lensFromPath<S>()('a', 'b', 'c')`. */
9
+ export function lensFromPath() {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ return (...keys) => {
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ let lens = lensFromProp()(keys[0]);
14
+ for (let i = 1; i < keys.length; i++) {
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ lens = composeLenses(lens, lensFromProp()(keys[i]));
17
+ }
18
+ return lens;
19
+ };
20
+ }
21
+ /** Composes two lenses, focusing first through `ab` then through `bc`. */
22
+ export function composeLenses(ab, bc) {
23
+ return {
24
+ get: a => bc.get(ab.get(a)),
25
+ set: (a, c) => ab.set(a, bc.set(ab.get(a), c)),
26
+ };
27
+ }
@@ -0,0 +1,17 @@
1
+ /** Intermediate builder returned by `match(x)` — call `.on(key)` to specify the discriminant. */
2
+ export type MatcherScrutinee<UnionType> = {
3
+ scrutinee: UnionType;
4
+ on<DiscriminantKey extends keyof UnionType>(k: DiscriminantKey): MatcherScrutineeAndDiscriminantKey<UnionType, DiscriminantKey>;
5
+ };
6
+ /** Intermediate builder returned by `match(x).on(key)` — call `.with(handlers)` to complete the match. */
7
+ export type MatcherScrutineeAndDiscriminantKey<UnionType, DiscriminantKey extends keyof UnionType> = {
8
+ scrutinee: UnionType;
9
+ key: DiscriminantKey;
10
+ /** Dispatches to the handler for the matching variant and returns its result. */
11
+ with<Result>(handlers: {
12
+ [K in UnionType[DiscriminantKey] & string]: (v: Extract<UnionType, Record<DiscriminantKey, K>>) => Result;
13
+ }): Result;
14
+ };
15
+ /** Starts a type-safe exhaustive match on `scrutinee`. */
16
+ export declare function match<UnionType>(scrutinee: UnionType): MatcherScrutinee<UnionType>;
17
+ //# sourceMappingURL=match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match.d.ts","sourceRoot":"","sources":["../../src/utils/match.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,MAAM,MAAM,gBAAgB,CAAC,SAAS,IAAI;IACxC,SAAS,EAAE,SAAS,CAAA;IAEpB,EAAE,CAAC,eAAe,SAAS,MAAM,SAAS,EACxC,CAAC,EAAE,eAAe,GACjB,kCAAkC,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;CAClE,CAAA;AAED,0GAA0G;AAC1G,MAAM,MAAM,kCAAkC,CAC5C,SAAS,EACT,eAAe,SAAS,MAAM,SAAS,IACrC;IACF,SAAS,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,eAAe,CAAA;IACpB,iFAAiF;IACjF,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;SACpB,CAAC,IAAI,SAAS,CAAC,eAAe,CAAC,GAAG,MAAM,GAAG,CAC1C,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,KAC9C,MAAM;KACZ,GAAG,MAAM,CAAA;CACX,CAAA;AAED,0DAA0D;AAC1D,wBAAgB,KAAK,CAAC,SAAS,EAC7B,SAAS,EAAE,SAAS,GACnB,gBAAgB,CAAC,SAAS,CAAC,CAsB7B"}
@@ -0,0 +1,28 @@
1
+ /** Starts a type-safe exhaustive match on `scrutinee`. */
2
+ export function match(scrutinee) {
3
+ return {
4
+ scrutinee,
5
+ on(key) {
6
+ return {
7
+ scrutinee,
8
+ key,
9
+ with(handlers) {
10
+ const k = scrutinee[key];
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ return handlers[k](scrutinee);
13
+ },
14
+ };
15
+ },
16
+ };
17
+ }
18
+ const shape = { kind: 'circle', radius: 5 };
19
+ function logShape(shape) {
20
+ match(shape)
21
+ .on('kind')
22
+ .with({
23
+ circle: shape => console.log('circle of radius: ' + shape.radius),
24
+ square: shape => console.log('square of size ' + shape.size),
25
+ triangle: shape => console.log(`triangle with base ${shape.base} and height ${shape.height}`),
26
+ });
27
+ }
28
+ logShape(shape);
@@ -0,0 +1,47 @@
1
+ /** The success variant of a Result. */
2
+ export type Success<A, E> = {
3
+ _tag: 'success';
4
+ value: A;
5
+ /** Transforms the success value, leaving failure unchanged. */
6
+ map<B>(f: (a: A) => B): Result<B, E>;
7
+ /** Chains a function that can fail, short-circuiting on existing failure. */
8
+ andThen<B, EE>(f: (a: A) => Result<B, EE>): Result<B, E | EE>;
9
+ /** Transforms the error value, leaving success unchanged. */
10
+ errorMap<EE>(f: (e: E) => EE): Result<A, EE>;
11
+ /** Returns either the success value or the error value. */
12
+ merge(): A | E;
13
+ /** Recovers from failure by applying `f` to the error. */
14
+ recover<AA, EE>(f: (e: E) => Result<AA, EE>): Result<A | AA, E | EE>;
15
+ /** Applies `onSuccess` or `onError` and returns a single value. */
16
+ fold<T>(onSuccess: (a: A) => T, onError: (e: E) => T): T;
17
+ };
18
+ /** The failure variant of a Result. */
19
+ export type Failure<A, E> = {
20
+ _tag: 'failure';
21
+ error: E;
22
+ /** Transforms the success value, leaving failure unchanged. */
23
+ map<B>(f: (a: A) => B): Result<B, E>;
24
+ /** Chains a function that can fail, short-circuiting on existing failure. */
25
+ andThen<B, EE>(f: (a: A) => Result<B, EE>): Result<B, E | EE>;
26
+ /** Transforms the error value, leaving success unchanged. */
27
+ errorMap<EE>(f: (e: E) => EE): Result<A, EE>;
28
+ /** Returns either the success value or the error value. */
29
+ merge(): A | E;
30
+ /** Recovers from failure by applying `f` to the error. */
31
+ recover<AA, EE>(f: (e: E) => Result<AA, EE>): Result<A | AA, E | EE>;
32
+ /** Applies `onSuccess` or `onError` and returns a single value. */
33
+ fold<T>(onSuccess: (a: A) => T, onError: (e: E) => T): T;
34
+ };
35
+ /** A value that is either a success (`A`) or a failure (`E`). */
36
+ export type Result<A, E> = Success<A, E> | Failure<A, E>;
37
+ /** Creates a successful Result. */
38
+ export declare function success<A, E>(value: A): Result<A, E>;
39
+ /** Creates a failed Result. */
40
+ export declare function failure<A, E>(error: E): Result<A, E>;
41
+ /** Extracts either the success value or error from a Result. */
42
+ export declare function merge<A, E>(result: Result<A, E>): A | E;
43
+ /** Curried variant of `result.fold`. */
44
+ export declare function fold<A, E, T>(onSuccess: (a: A) => T, onError: (e: E) => T): (result: Result<A, E>) => T;
45
+ /** Curried variant of `result.errorMap`. */
46
+ export declare function errorMap<A, E, EE>(f: (e: E) => EE): (result: Result<A, E>) => Result<A, EE>;
47
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/utils/result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ function map(f) {
2
+ return (result) => {
3
+ switch (result._tag) {
4
+ case 'failure': {
5
+ return failure(result.error);
6
+ }
7
+ case 'success': {
8
+ return success(f(result.value));
9
+ }
10
+ }
11
+ };
12
+ }
13
+ function andThen(f) {
14
+ return (result) => {
15
+ switch (result._tag) {
16
+ case 'failure': {
17
+ return failure(result.error);
18
+ }
19
+ case 'success': {
20
+ return f(result.value);
21
+ }
22
+ }
23
+ };
24
+ }
25
+ /** Creates a successful Result. */
26
+ export function success(value) {
27
+ return {
28
+ _tag: 'success',
29
+ value,
30
+ map(f) {
31
+ return map(f)(this);
32
+ },
33
+ andThen(f) {
34
+ return andThen(f)(this);
35
+ },
36
+ errorMap(f) {
37
+ return errorMap(f)(this);
38
+ },
39
+ merge() {
40
+ return value;
41
+ },
42
+ recover(_f) {
43
+ return success(value);
44
+ },
45
+ fold(onSuccess, _onError) {
46
+ return onSuccess(value);
47
+ },
48
+ };
49
+ }
50
+ /** Creates a failed Result. */
51
+ export function failure(error) {
52
+ return {
53
+ _tag: 'failure',
54
+ error,
55
+ map(f) {
56
+ return map(f)(this);
57
+ },
58
+ andThen(f) {
59
+ return andThen(f)(this);
60
+ },
61
+ errorMap(f) {
62
+ return errorMap(f)(this);
63
+ },
64
+ merge() {
65
+ return error;
66
+ },
67
+ recover(f) {
68
+ return f(error);
69
+ },
70
+ fold(_onSuccess, onError) {
71
+ return onError(error);
72
+ },
73
+ };
74
+ }
75
+ /** Extracts either the success value or error from a Result. */
76
+ export function merge(result) {
77
+ return result.merge();
78
+ }
79
+ /** Curried variant of `result.fold`. */
80
+ export function fold(onSuccess, onError) {
81
+ return (result) => {
82
+ return result.fold(onSuccess, onError);
83
+ };
84
+ }
85
+ /** Curried variant of `result.errorMap`. */
86
+ export function errorMap(f) {
87
+ return (result) => {
88
+ switch (result._tag) {
89
+ case 'failure': {
90
+ return failure(f(result.error));
91
+ }
92
+ case 'success': {
93
+ return success(result.value);
94
+ }
95
+ }
96
+ };
97
+ }
@@ -0,0 +1,15 @@
1
+ import type { Component } from './dom/components';
2
+ /** Options for `defineWebComponent`. */
3
+ export type WebComponentOptions<Event> = {
4
+ /** Maps a typed component event to a DOM custom-event name. */
5
+ events?: (event: Event) => string;
6
+ };
7
+ /**
8
+ * Registers a ctrl-fx Component as a native custom element. Component events are dispatched as
9
+ * CustomEvents using the name returned by `options.events`.
10
+ * @param tagName the custom element tag name (must contain a hyphen)
11
+ * @param component the ctrl-fx component to mount
12
+ * @param options optional configuration
13
+ */
14
+ export declare function defineWebComponent<State, Event>(tagName: string, component: Component<State, void, Event>, options?: WebComponentOptions<Event>): void;
15
+ //# sourceMappingURL=webcomponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webcomponent.d.ts","sourceRoot":"","sources":["../src/webcomponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAMjD,wCAAwC;AACxC,MAAM,MAAM,mBAAmB,CAAC,KAAK,IAAI;IACvC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAA;CAClC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAC7C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EACxC,OAAO,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,GACnC,IAAI,CAqCN"}