@kaumlaut/pure 0.1.4 → 0.1.7
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.
- package/dist/effect/Effect.d.ts +14 -2
- package/dist/effect/Effect.js +7 -7
- package/dist/effect/Fetch.d.ts +9 -11
- package/dist/effect/Fetch.js +41 -63
- package/dist/effect/None.d.ts +2 -6
- package/dist/effect/None.js +6 -13
- package/dist/effect/index.d.ts +4 -0
- package/dist/effect/index.js +3 -0
- package/dist/guard/Guard.d.ts +1 -3
- package/dist/guard/Guard.js +1 -1
- package/dist/guard/index.d.ts +2 -0
- package/dist/guard/index.js +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/maybe/Maybe.d.ts +11 -13
- package/dist/maybe/Maybe.js +38 -49
- package/dist/maybe/index.d.ts +2 -0
- package/dist/maybe/index.js +1 -0
- package/dist/parse/Parse.d.ts +3 -0
- package/dist/parse/Parse.js +15 -0
- package/dist/parse/index.d.ts +1 -0
- package/dist/parse/index.js +1 -0
- package/dist/result/Result.d.ts +10 -12
- package/dist/result/Result.js +36 -19
- package/dist/result/index.d.ts +2 -0
- package/dist/result/index.js +1 -0
- package/dist/runtime/Runtime.d.ts +18 -2
- package/dist/runtime/Runtime.js +7 -13
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/persistence/LocalStorage.d.ts +3 -8
- package/dist/runtime/persistence/LocalStorage.js +23 -30
- package/dist/runtime/persistence/None.d.ts +3 -8
- package/dist/runtime/persistence/None.js +7 -16
- package/dist/runtime/persistence/Persistence.d.ts +4 -7
- package/dist/runtime/persistence/Persistence.js +1 -1
- package/dist/runtime/persistence/index.d.ts +3 -0
- package/dist/runtime/persistence/index.js +2 -0
- package/package.json +34 -15
- package/dist/Effect-DfDwc0ai.d.ts +0 -34
- package/dist/chunk-AVH3HBI3.js +0 -13
- package/dist/chunk-AVH3HBI3.js.map +0 -1
- package/dist/chunk-UICXER2N.js +0 -48
- package/dist/chunk-UICXER2N.js.map +0 -1
- package/dist/effect/Effect.js.map +0 -1
- package/dist/effect/Fetch.js.map +0 -1
- package/dist/effect/None.js.map +0 -1
- package/dist/guard/Guard.js.map +0 -1
- package/dist/maybe/Maybe.js.map +0 -1
- package/dist/parse/Number.d.ts +0 -6
- package/dist/parse/Number.js +0 -25
- package/dist/parse/Number.js.map +0 -1
- package/dist/result/Result.js.map +0 -1
- package/dist/runtime/Runtime.js.map +0 -1
- package/dist/runtime/persistence/LocalStorage.js.map +0 -1
- package/dist/runtime/persistence/None.js.map +0 -1
- package/dist/runtime/persistence/Persistence.js.map +0 -1
package/dist/effect/Effect.d.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
|
-
import '../result/Result
|
|
2
|
-
|
|
1
|
+
import type { Result } from '../result/Result';
|
|
2
|
+
import type { Message } from '../runtime/Runtime';
|
|
3
|
+
export type AsyncEffect<T extends Message> = () => Promise<T>;
|
|
4
|
+
export type SyncEffect<T extends Message> = () => T;
|
|
5
|
+
export type NullEffect = () => null;
|
|
6
|
+
export type AsyncNullEffect = () => Promise<null>;
|
|
7
|
+
export type EffectType<T extends Message> = AsyncEffect<T> | SyncEffect<T> | NullEffect | AsyncNullEffect;
|
|
8
|
+
export type Effect<T extends Message> = {
|
|
9
|
+
effectType: EffectType<T>;
|
|
10
|
+
name: string;
|
|
11
|
+
meta: object | null;
|
|
12
|
+
};
|
|
13
|
+
export declare function effectWithName<T extends Message>(name: string, effect: EffectType<T>, meta?: object | null): Effect<T>;
|
|
14
|
+
export type ReceiveEffectResult<T, E, R> = (result: Result<T, E>) => R;
|
package/dist/effect/Effect.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
export function effectWithName(name, effect, meta = null) {
|
|
2
|
+
return {
|
|
3
|
+
name,
|
|
4
|
+
effectType: effect,
|
|
5
|
+
meta,
|
|
6
|
+
};
|
|
7
|
+
}
|
package/dist/effect/Fetch.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { Guard } from '../guard/Guard
|
|
2
|
-
import {
|
|
3
|
-
import '
|
|
4
|
-
|
|
1
|
+
import type { Guard } from '../guard/Guard';
|
|
2
|
+
import type { Message } from '../runtime/Runtime';
|
|
3
|
+
import { type Effect, type ReceiveEffectResult } from './Effect';
|
|
5
4
|
type HttpError = {
|
|
6
5
|
code: number;
|
|
7
6
|
message: string;
|
|
@@ -10,10 +9,9 @@ type MalformedPayloadError = {
|
|
|
10
9
|
message: string;
|
|
11
10
|
};
|
|
12
11
|
type FetchError = HttpError | MalformedPayloadError;
|
|
13
|
-
declare function isNotFound(error: FetchError): boolean;
|
|
14
|
-
declare function isHttp(error: FetchError): error is HttpError;
|
|
15
|
-
declare function isClient(error: FetchError): boolean;
|
|
16
|
-
declare function isServer(error: FetchError): boolean;
|
|
17
|
-
declare function fetchJson<T, M extends Message>(url: string, headers: [string, string][], method: string, guard: Guard<T>, receiver: ReceiveEffectResult<T, FetchError, M>): Effect<M>;
|
|
18
|
-
|
|
19
|
-
export { fetchJson, isClient, isHttp, isNotFound, isServer };
|
|
12
|
+
export declare function isNotFound(error: FetchError): boolean;
|
|
13
|
+
export declare function isHttp(error: FetchError): error is HttpError;
|
|
14
|
+
export declare function isClient(error: FetchError): boolean;
|
|
15
|
+
export declare function isServer(error: FetchError): boolean;
|
|
16
|
+
export declare function fetchJson<T, M extends Message>(url: string, headers: [string, string][], method: string, guard: Guard<T>, receiver: ReceiveEffectResult<T, FetchError, M>): Effect<M>;
|
|
17
|
+
export {};
|
package/dist/effect/Fetch.js
CHANGED
|
@@ -1,69 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _chunkUICXER2Njs = require('../chunk-UICXER2N.js');
|
|
8
|
-
|
|
9
|
-
// src/effect/Fetch.ts
|
|
10
|
-
function isNotFound(error) {
|
|
11
|
-
return isHttp(error) && error.code === 404;
|
|
1
|
+
import { err, ok } from '../result/Result';
|
|
2
|
+
import { effectWithName } from './Effect';
|
|
3
|
+
export function isNotFound(error) {
|
|
4
|
+
return isHttp(error) && error.code === 404;
|
|
12
5
|
}
|
|
13
|
-
function isHttp(error) {
|
|
14
|
-
|
|
6
|
+
export function isHttp(error) {
|
|
7
|
+
return Object.keys(error).includes('message') && Object.keys(error).includes('code');
|
|
15
8
|
}
|
|
16
|
-
function isClient(error) {
|
|
17
|
-
|
|
9
|
+
export function isClient(error) {
|
|
10
|
+
return isHttp(error) && error.code > 399 && error.code < 500;
|
|
18
11
|
}
|
|
19
|
-
function isServer(error) {
|
|
20
|
-
|
|
12
|
+
export function isServer(error) {
|
|
13
|
+
return isHttp(error) && error.code > 499;
|
|
21
14
|
}
|
|
22
|
-
function fetchJson(url, headers, method, guard, receiver) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
15
|
+
export function fetchJson(url, headers, method, guard, receiver) {
|
|
16
|
+
return effectWithName('fetchJson', async () => {
|
|
17
|
+
try {
|
|
18
|
+
const result = await fetch(url, {
|
|
19
|
+
method,
|
|
20
|
+
headers,
|
|
21
|
+
});
|
|
22
|
+
if (result.status > 199 && result.status < 300) {
|
|
23
|
+
const payload = await result.json();
|
|
24
|
+
if (guard(payload)) {
|
|
25
|
+
return receiver(ok(payload));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return receiver(err({
|
|
29
|
+
message: 'Malformed Payload. Your Guard does not pass.',
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return receiver(err({
|
|
34
|
+
code: result.status,
|
|
35
|
+
message: await result.text(),
|
|
36
|
+
}));
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
42
38
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
_chunkUICXER2Njs.err.call(void 0, {
|
|
52
|
-
message: "Malformed Payload. Invalid JSON."
|
|
53
|
-
})
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
url
|
|
59
|
-
}
|
|
60
|
-
);
|
|
39
|
+
catch (e) {
|
|
40
|
+
return receiver(err({
|
|
41
|
+
message: 'Malformed Payload. Invalid JSON.',
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
}, {
|
|
45
|
+
url,
|
|
46
|
+
});
|
|
61
47
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
exports.fetchJson = fetchJson; exports.isClient = isClient; exports.isHttp = isHttp; exports.isNotFound = isNotFound; exports.isServer = isServer;
|
|
69
|
-
//# sourceMappingURL=Fetch.js.map
|
package/dist/effect/None.d.ts
CHANGED
package/dist/effect/None.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
return _chunkAVH3HBI3js.withName.call(void 0, "none", () => {
|
|
8
|
-
return null;
|
|
9
|
-
});
|
|
1
|
+
import { effectWithName } from './Effect';
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3
|
+
export function none() {
|
|
4
|
+
return effectWithName('none', () => {
|
|
5
|
+
return null;
|
|
6
|
+
});
|
|
10
7
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
exports.none = none;
|
|
14
|
-
//# sourceMappingURL=None.js.map
|
package/dist/guard/Guard.d.ts
CHANGED
package/dist/guard/Guard.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Guard";
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
package/dist/maybe/Maybe.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
type Just<T> = {
|
|
1
|
+
export type Just<T> = {
|
|
2
2
|
type: 'maybe-just';
|
|
3
3
|
value: T;
|
|
4
4
|
};
|
|
5
|
-
type Nothing = {
|
|
5
|
+
export type Nothing = {
|
|
6
6
|
type: 'maybe-nothing';
|
|
7
7
|
};
|
|
8
|
-
type Maybe<T> = Just<T> | Nothing;
|
|
9
|
-
declare function nothing(): Nothing;
|
|
10
|
-
declare function just<T>(value: T): Just<T>;
|
|
11
|
-
declare function isNothing<T>(maybe: Maybe<T>): maybe is Nothing;
|
|
12
|
-
declare function isJust<T>(maybe: Maybe<T>): maybe is Just<T>;
|
|
13
|
-
declare function isMaybe<T>(value: unknown): value is Maybe<T>;
|
|
14
|
-
declare function
|
|
15
|
-
declare function
|
|
16
|
-
declare function
|
|
17
|
-
|
|
18
|
-
export { type Just, type Maybe, type Nothing, filter, isJust, isMaybe, isNothing, just, map, nothing, withDefault };
|
|
8
|
+
export type Maybe<T> = Just<T> | Nothing;
|
|
9
|
+
export declare function nothing(): Nothing;
|
|
10
|
+
export declare function just<T>(value: T): Just<T>;
|
|
11
|
+
export declare function isNothing<T>(maybe: Maybe<T>): maybe is Nothing;
|
|
12
|
+
export declare function isJust<T>(maybe: Maybe<T>): maybe is Just<T>;
|
|
13
|
+
export declare function isMaybe<T>(value: unknown): value is Maybe<T>;
|
|
14
|
+
export declare function mapMaybe<T, R>(maybe: Maybe<T>, func: (value: T) => R): Maybe<R>;
|
|
15
|
+
export declare function filterMaybe<T>(maybe: Maybe<T>, func: (value: T) => boolean): Maybe<T>;
|
|
16
|
+
export declare function maybeWithDefault<T>(maybe: Maybe<T>, defaultValue: T): T;
|
package/dist/maybe/Maybe.js
CHANGED
|
@@ -1,50 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
function
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return maybe;
|
|
27
|
-
}
|
|
28
|
-
function filter(maybe, func) {
|
|
29
|
-
if (isJust(maybe) && func(maybe.value)) {
|
|
1
|
+
export function nothing() {
|
|
2
|
+
return {
|
|
3
|
+
type: 'maybe-nothing',
|
|
4
|
+
};
|
|
5
|
+
}
|
|
6
|
+
export function just(value) {
|
|
7
|
+
return {
|
|
8
|
+
type: 'maybe-just',
|
|
9
|
+
value,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function isNothing(maybe) {
|
|
13
|
+
return maybe.type === 'maybe-nothing';
|
|
14
|
+
}
|
|
15
|
+
export function isJust(maybe) {
|
|
16
|
+
return maybe.type === 'maybe-just';
|
|
17
|
+
}
|
|
18
|
+
export function isMaybe(value) {
|
|
19
|
+
//@ts-expect-error is validated
|
|
20
|
+
return value.type === 'maybe-just' || value.type === 'maybe-nothing';
|
|
21
|
+
}
|
|
22
|
+
export function mapMaybe(maybe, func) {
|
|
23
|
+
if (isJust(maybe)) {
|
|
24
|
+
return just(func(maybe.value));
|
|
25
|
+
}
|
|
30
26
|
return maybe;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
exports.filter = filter; exports.isJust = isJust; exports.isMaybe = isMaybe; exports.isNothing = isNothing; exports.just = just; exports.map = map; exports.nothing = nothing; exports.withDefault = withDefault;
|
|
50
|
-
//# sourceMappingURL=Maybe.js.map
|
|
27
|
+
}
|
|
28
|
+
export function filterMaybe(maybe, func) {
|
|
29
|
+
if (isJust(maybe) && func(maybe.value)) {
|
|
30
|
+
return maybe;
|
|
31
|
+
}
|
|
32
|
+
return nothing();
|
|
33
|
+
}
|
|
34
|
+
export function maybeWithDefault(maybe, defaultValue) {
|
|
35
|
+
if (isJust(maybe)) {
|
|
36
|
+
return maybe.value;
|
|
37
|
+
}
|
|
38
|
+
return defaultValue;
|
|
39
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Maybe";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { err, ok } from '../result/Result';
|
|
2
|
+
export function asInt(value) {
|
|
3
|
+
const parsed = parseInt(value, 10);
|
|
4
|
+
if (Number.isNaN(parsed)) {
|
|
5
|
+
return err('Number is NaN');
|
|
6
|
+
}
|
|
7
|
+
return ok(parsed);
|
|
8
|
+
}
|
|
9
|
+
export function asFloat(value) {
|
|
10
|
+
const parsed = parseFloat(value);
|
|
11
|
+
if (Number.isNaN(parsed)) {
|
|
12
|
+
return err('Number is NaN');
|
|
13
|
+
}
|
|
14
|
+
return ok(parsed);
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Parse";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Parse";
|
package/dist/result/Result.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
type Ok<T> = {
|
|
1
|
+
export type Ok<T> = {
|
|
2
2
|
type: 'ok-result';
|
|
3
3
|
value: T;
|
|
4
4
|
};
|
|
5
|
-
type Err<T> = {
|
|
5
|
+
export type Err<T> = {
|
|
6
6
|
type: 'error-result';
|
|
7
7
|
error: T;
|
|
8
8
|
};
|
|
9
|
-
|
|
10
|
-
declare function
|
|
11
|
-
declare function
|
|
12
|
-
declare function
|
|
13
|
-
|
|
14
|
-
declare function map<T, E, R>(result: Result<T, E>, func: (value: T) => R): Result<R, E>;
|
|
15
|
-
declare function mapErr<T, E, R>(result: Result<T, E>, func: (value: E) => R): Result<T, R>;
|
|
16
|
-
declare function withDefault<T, E>(result: Result<T, E>, defaultValue: T): T;
|
|
17
|
-
|
|
18
|
-
export { type Err, type Ok, type Result, err, isErr, isOk, map, mapErr, ok, withDefault };
|
|
9
|
+
export type Result<T, E> = Ok<T> | Err<E>;
|
|
10
|
+
export declare function isOk<T, E>(result: Result<T, E>): result is Ok<T>;
|
|
11
|
+
export declare function isErr<T, E>(result: Result<T, E>): result is Err<E>;
|
|
12
|
+
export declare function ok<T>(value: T): Ok<T>;
|
|
13
|
+
export declare function err<E>(error: E): Err<E>;
|
|
14
|
+
export declare function map<T, E, R>(result: Result<T, E>, func: (value: T) => R): Result<R, E>;
|
|
15
|
+
export declare function mapErr<T, E, R>(result: Result<T, E>, func: (value: E) => R): Result<T, R>;
|
|
16
|
+
export declare function withDefault<T, E>(result: Result<T, E>, defaultValue: T): T;
|
package/dist/result/Result.js
CHANGED
|
@@ -1,19 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
export function isOk(result) {
|
|
2
|
+
return result.type === 'ok-result';
|
|
3
|
+
}
|
|
4
|
+
export function isErr(result) {
|
|
5
|
+
return result.type === 'error-result';
|
|
6
|
+
}
|
|
7
|
+
export function ok(value) {
|
|
8
|
+
return {
|
|
9
|
+
type: 'ok-result',
|
|
10
|
+
value,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function err(error) {
|
|
14
|
+
return {
|
|
15
|
+
type: 'error-result',
|
|
16
|
+
error,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function map(result, func) {
|
|
20
|
+
if (isOk(result)) {
|
|
21
|
+
return ok(func(result.value));
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
export function mapErr(result, func) {
|
|
26
|
+
if (isErr(result)) {
|
|
27
|
+
return err(func(result.error));
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
export function withDefault(result, defaultValue) {
|
|
32
|
+
if (isErr(result)) {
|
|
33
|
+
return defaultValue;
|
|
34
|
+
}
|
|
35
|
+
return result.value;
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Result";
|
|
@@ -1,2 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { Effect } from '../effect/Effect';
|
|
2
|
+
export type Message<N extends string = string, T = any> = {
|
|
3
|
+
value: T;
|
|
4
|
+
name: N;
|
|
5
|
+
};
|
|
6
|
+
export type Update<Model, CustomMessage extends Message> = (model: Model, msg: CustomMessage) => [Model, Effect<CustomMessage>];
|
|
7
|
+
export type Init<Model, CustomMessage extends Message> = () => [Model, Effect<CustomMessage>];
|
|
8
|
+
export type Change<CustomMessage extends Message, Model> = [
|
|
9
|
+
CustomMessage | null,
|
|
10
|
+
model: Model,
|
|
11
|
+
effect: {
|
|
12
|
+
name: string;
|
|
13
|
+
meta: object | null;
|
|
14
|
+
} | null
|
|
15
|
+
];
|
|
16
|
+
export type Changes<CustomMessage extends Message, Model> = Change<CustomMessage, Model>[];
|
|
17
|
+
export declare function is<CustomMessage extends Message<A>, A extends string>(name: A, message: Message): message is CustomMessage;
|
|
18
|
+
export declare function create<MN extends string, T>(name: MN, value: T): Message<MN, T>;
|
package/dist/runtime/Runtime.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return message.name === name;
|
|
1
|
+
export function is(name, message) {
|
|
2
|
+
return message.name === name;
|
|
4
3
|
}
|
|
5
|
-
function create(name, value) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
export function create(name, value) {
|
|
5
|
+
return {
|
|
6
|
+
name,
|
|
7
|
+
value
|
|
8
|
+
};
|
|
10
9
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
exports.create = create; exports.is = is;
|
|
15
|
-
//# sourceMappingURL=Runtime.js.map
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Persistence } from './Persistence
|
|
3
|
-
|
|
4
|
-
import '../../guard/Guard.js';
|
|
5
|
-
|
|
6
|
-
declare const localStoragePersistence: <Model, CustomMessage extends Message>(name: string) => Persistence<Model, CustomMessage>;
|
|
7
|
-
|
|
8
|
-
export { localStoragePersistence };
|
|
1
|
+
import type { Message } from '../Runtime';
|
|
2
|
+
import type { Persistence } from './Persistence';
|
|
3
|
+
export declare const localStoragePersistence: <Model, CustomMessage extends Message>(name: string) => Persistence<Model, CustomMessage>;
|
|
@@ -1,31 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
return _chunkUICXER2Njs.err.call(void 0, "Your guard did not match the retrieved model");
|
|
26
|
-
}
|
|
1
|
+
import { err, ok } from '../../result/Result';
|
|
2
|
+
export const localStoragePersistence = (name) => ({
|
|
3
|
+
persist(model) {
|
|
4
|
+
window.localStorage.setItem(name, btoa(JSON.stringify(model)));
|
|
5
|
+
},
|
|
6
|
+
read(guard, init) {
|
|
7
|
+
const record = window.localStorage.getItem(name);
|
|
8
|
+
if (record === null) {
|
|
9
|
+
return ok(init()[0]);
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const json = atob(record);
|
|
13
|
+
const model = JSON.parse(json);
|
|
14
|
+
if (guard(model)) {
|
|
15
|
+
return ok(model);
|
|
16
|
+
}
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
return err('Could not decode stored model');
|
|
21
|
+
}
|
|
22
|
+
return err('Your guard did not match the retrieved model');
|
|
23
|
+
},
|
|
27
24
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
exports.localStoragePersistence = localStoragePersistence;
|
|
31
|
-
//# sourceMappingURL=LocalStorage.js.map
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Persistence } from './Persistence
|
|
3
|
-
|
|
4
|
-
import '../../guard/Guard.js';
|
|
5
|
-
|
|
6
|
-
declare const noPersistence: <Model, CustomMessage extends Message>() => Persistence<Model, CustomMessage>;
|
|
7
|
-
|
|
8
|
-
export { noPersistence };
|
|
1
|
+
import type { Message } from '../Runtime';
|
|
2
|
+
import type { Persistence } from './Persistence';
|
|
3
|
+
export declare const noPersistence: <Model, CustomMessage extends Message>() => Persistence<Model, CustomMessage>;
|
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
persist(model) {
|
|
9
|
-
},
|
|
10
|
-
read(guard, init) {
|
|
11
|
-
return _chunkUICXER2Njs.ok.call(void 0, init()[0]);
|
|
12
|
-
}
|
|
1
|
+
import { ok } from '../../result/Result';
|
|
2
|
+
export const noPersistence = () => ({
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4
|
+
persist(model) { },
|
|
5
|
+
read(guard, init) {
|
|
6
|
+
return ok(init()[0]);
|
|
7
|
+
},
|
|
13
8
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
exports.noPersistence = noPersistence;
|
|
17
|
-
//# sourceMappingURL=None.js.map
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { Guard } from '../../guard/Guard
|
|
2
|
-
import { Result } from '../../result/Result
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
type Persistence<Model, CustomMessage extends Message> = {
|
|
1
|
+
import type { Guard } from '../../guard/Guard';
|
|
2
|
+
import type { Result } from '../../result/Result';
|
|
3
|
+
import type { Init, Message } from '../Runtime';
|
|
4
|
+
export type Persistence<Model, CustomMessage extends Message> = {
|
|
6
5
|
persist(model: Model): void;
|
|
7
6
|
read(guard: Guard<Model>, init: Init<Model, CustomMessage>): Result<Model, string>;
|
|
8
7
|
};
|
|
9
|
-
|
|
10
|
-
export type { Persistence };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,29 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kaumlaut/pure",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Types and functions for state management inspired by Elm and functional programming",
|
|
5
|
-
"main": "
|
|
6
|
-
"types": "
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"./result": "./dist/result",
|
|
13
|
-
"./runtime": "./dist/runtime/**/*"
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc",
|
|
10
|
+
"test": "vitest",
|
|
11
|
+
"release": "npm run build && npm publish --access public"
|
|
14
12
|
},
|
|
15
13
|
"files": [
|
|
16
14
|
"dist"
|
|
17
15
|
],
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
"exports": {
|
|
17
|
+
"./effect": {
|
|
18
|
+
"import": "./dist/effect/index.js",
|
|
19
|
+
"types": "./dist/effect/index.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./result": {
|
|
22
|
+
"import": "./dist/result/index.js",
|
|
23
|
+
"types": "./dist/result/index.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./runtime": {
|
|
26
|
+
"import": "./dist/runtime/index.js",
|
|
27
|
+
"types": "./dist/runtime/index.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./maybe": {
|
|
30
|
+
"import": "./dist/maybe/index.js",
|
|
31
|
+
"types": "./dist/maybe/index.d.ts"
|
|
32
|
+
},
|
|
33
|
+
"./guard": {
|
|
34
|
+
"import": "./dist/guard/index.js",
|
|
35
|
+
"types": "./dist/guard/index.d.ts"
|
|
36
|
+
},
|
|
37
|
+
"./parse": {
|
|
38
|
+
"import": "./dist/parse/index.js",
|
|
39
|
+
"types": "./dist/parse/index.d.ts"
|
|
40
|
+
}
|
|
22
41
|
},
|
|
42
|
+
"type": "module",
|
|
23
43
|
"author": "Max Kaemmerer",
|
|
24
44
|
"license": "MIT",
|
|
25
45
|
"devDependencies": {
|
|
26
|
-
"tsup": "^8.4.0",
|
|
27
46
|
"typescript": "^5.8.2",
|
|
28
47
|
"vitest": "^3.0.8"
|
|
29
48
|
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Result } from './result/Result.js';
|
|
2
|
-
|
|
3
|
-
type Message<N extends string = string, T = any> = {
|
|
4
|
-
value: T;
|
|
5
|
-
name: N;
|
|
6
|
-
};
|
|
7
|
-
type Update<Model, CustomMessage extends Message> = (model: Model, msg: CustomMessage) => [Model, Effect<CustomMessage>];
|
|
8
|
-
type Init<Model, CustomMessage extends Message> = () => [Model, Effect<CustomMessage>];
|
|
9
|
-
type Change<CustomMessage extends Message, Model> = [
|
|
10
|
-
CustomMessage | null,
|
|
11
|
-
model: Model,
|
|
12
|
-
effect: {
|
|
13
|
-
name: string;
|
|
14
|
-
meta: object | null;
|
|
15
|
-
} | null
|
|
16
|
-
];
|
|
17
|
-
type Changes<CustomMessage extends Message, Model> = Change<CustomMessage, Model>[];
|
|
18
|
-
declare function is<CustomMessage extends Message<A>, A extends string>(name: A, message: Message): message is CustomMessage;
|
|
19
|
-
declare function create<MN extends string, T>(name: MN, value: T): Message<MN, T>;
|
|
20
|
-
|
|
21
|
-
type AsyncEffect<T extends Message> = () => Promise<T>;
|
|
22
|
-
type SyncEffect<T extends Message> = () => T;
|
|
23
|
-
type NullEffect = () => null;
|
|
24
|
-
type AsyncNullEffect = () => Promise<null>;
|
|
25
|
-
type EffectType<T extends Message> = AsyncEffect<T> | SyncEffect<T> | NullEffect | AsyncNullEffect;
|
|
26
|
-
type Effect<T extends Message> = {
|
|
27
|
-
effectType: EffectType<T>;
|
|
28
|
-
name: string;
|
|
29
|
-
meta: object | null;
|
|
30
|
-
};
|
|
31
|
-
declare function withName<T extends Message>(name: string, effect: EffectType<T>, meta?: object | null): Effect<T>;
|
|
32
|
-
type ReceiveEffectResult<T, E, R> = (result: Result<T, E>) => R;
|
|
33
|
-
|
|
34
|
-
export { type AsyncEffect as A, type Change as C, type Effect as E, type Init as I, type Message as M, type NullEffect as N, type ReceiveEffectResult as R, type SyncEffect as S, type Update as U, type Changes as a, type AsyncNullEffect as b, create as c, type EffectType as d, is as i, withName as w };
|
package/dist/chunk-AVH3HBI3.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/effect/Effect.ts
|
|
2
|
-
function withName(name, effect, meta = null) {
|
|
3
|
-
return {
|
|
4
|
-
name,
|
|
5
|
-
effectType: effect,
|
|
6
|
-
meta
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.withName = withName;
|
|
13
|
-
//# sourceMappingURL=chunk-AVH3HBI3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/chunk-AVH3HBI3.js","../src/effect/Effect.ts"],"names":[],"mappings":"AAAA;ACkBO,SAAS,QAAA,CACd,IAAA,EACA,MAAA,EACA,KAAA,EAAsB,IAAA,EACX;AACX,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA,EAAY,MAAA;AAAA,IACZ;AAAA,EACF,CAAA;AACF;ADpBA;AACA;AACE;AACF,4BAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/chunk-AVH3HBI3.js","sourcesContent":[null,"import type { Result } from '../result/Result'\nimport type { Message } from '../runtime/Runtime'\n\nexport type AsyncEffect<T extends Message> = () => Promise<T>\nexport type SyncEffect<T extends Message> = () => T\nexport type NullEffect = () => null\nexport type AsyncNullEffect = () => Promise<null>\nexport type EffectType<T extends Message> =\n | AsyncEffect<T>\n | SyncEffect<T>\n | NullEffect\n | AsyncNullEffect\nexport type Effect<T extends Message> = {\n effectType: EffectType<T>\n name: string\n meta: object | null\n}\n\nexport function withName<T extends Message>(\n name: string,\n effect: EffectType<T>,\n meta: object | null = null,\n): Effect<T> {\n return {\n name,\n effectType: effect,\n meta,\n }\n}\n\nexport type ReceiveEffectResult<T, E, R> = (result: Result<T, E>) => R\n"]}
|
package/dist/chunk-UICXER2N.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/result/Result.ts
|
|
2
|
-
function isOk(result) {
|
|
3
|
-
return result.type === "ok-result";
|
|
4
|
-
}
|
|
5
|
-
function isErr(result) {
|
|
6
|
-
return result.type === "error-result";
|
|
7
|
-
}
|
|
8
|
-
function ok(value) {
|
|
9
|
-
return {
|
|
10
|
-
type: "ok-result",
|
|
11
|
-
value
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
function err(error) {
|
|
15
|
-
return {
|
|
16
|
-
type: "error-result",
|
|
17
|
-
error
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
function map(result, func) {
|
|
21
|
-
if (isOk(result)) {
|
|
22
|
-
return ok(func(result.value));
|
|
23
|
-
}
|
|
24
|
-
return result;
|
|
25
|
-
}
|
|
26
|
-
function mapErr(result, func) {
|
|
27
|
-
if (isErr(result)) {
|
|
28
|
-
return err(func(result.error));
|
|
29
|
-
}
|
|
30
|
-
return result;
|
|
31
|
-
}
|
|
32
|
-
function withDefault(result, defaultValue) {
|
|
33
|
-
if (isErr(result)) {
|
|
34
|
-
return defaultValue;
|
|
35
|
-
}
|
|
36
|
-
return result.value;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
exports.isOk = isOk; exports.isErr = isErr; exports.ok = ok; exports.err = err; exports.map = map; exports.mapErr = mapErr; exports.withDefault = withDefault;
|
|
48
|
-
//# sourceMappingURL=chunk-UICXER2N.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/chunk-UICXER2N.js","../src/result/Result.ts"],"names":[],"mappings":"AAAA;ACUO,SAAS,IAAA,CAAW,MAAA,EAAuC;AAChE,EAAA,OAAO,MAAA,CAAO,KAAA,IAAS,WAAA;AACzB;AAEO,SAAS,KAAA,CAAY,MAAA,EAAwC;AAClE,EAAA,OAAO,MAAA,CAAO,KAAA,IAAS,cAAA;AACzB;AAEO,SAAS,EAAA,CAAM,KAAA,EAAiB;AACrC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN;AAAA,EACF,CAAA;AACF;AAEO,SAAS,GAAA,CAAO,KAAA,EAAkB;AACvC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,cAAA;AAAA,IACN;AAAA,EACF,CAAA;AACF;AAIO,SAAS,GAAA,CAAa,MAAA,EAAsB,IAAA,EAAqC;AACtF,EAAA,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,EAAG;AAChB,IAAA,OAAO,EAAA,CAAG,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC9B;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,MAAA,CAAgB,MAAA,EAAsB,IAAA,EAAqC;AACzF,EAAA,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACjB,IAAA,OAAO,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,WAAA,CAAkB,MAAA,EAAsB,YAAA,EAAoB;AAC1E,EAAA,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,EAAG;AACjB,IAAA,OAAO,YAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA,CAAO,KAAA;AAChB;ADnBA;AACA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,8JAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/chunk-UICXER2N.js","sourcesContent":[null,"export type Ok<T> = {\n type: 'ok-result'\n value: T\n}\n\nexport type Err<T> = {\n type: 'error-result'\n error: T\n}\n\nexport function isOk<T, E>(result: Result<T, E>): result is Ok<T> {\n return result.type === 'ok-result'\n}\n\nexport function isErr<T, E>(result: Result<T, E>): result is Err<E> {\n return result.type === 'error-result'\n}\n\nexport function ok<T>(value: T): Ok<T> {\n return {\n type: 'ok-result',\n value,\n }\n}\n\nexport function err<E>(error: E): Err<E> {\n return {\n type: 'error-result',\n error,\n }\n}\n\nexport type Result<T, E> = Ok<T> | Err<E>\n\nexport function map<T, E, R>(result: Result<T, E>, func: (value: T) => R): Result<R, E> {\n if (isOk(result)) {\n return ok(func(result.value))\n }\n\n return result\n}\n\nexport function mapErr<T, E, R>(result: Result<T, E>, func: (value: E) => R): Result<T, R> {\n if (isErr(result)) {\n return err(func(result.error))\n }\n\n return result\n}\n\nexport function withDefault<T, E>(result: Result<T, E>, defaultValue: T): T {\n if (isErr(result)) {\n return defaultValue\n }\n\n return result.value\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/effect/Effect.js"],"names":[],"mappings":"AAAA;AACE;AACF,uDAA6B;AAC7B;AACE;AACF,6CAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/effect/Effect.js"}
|
package/dist/effect/Fetch.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/effect/Fetch.js","../../src/effect/Fetch.ts"],"names":[],"mappings":"AAAA;AACE;AACF,uDAA6B;AAC7B;AACE;AACA;AACF,uDAA6B;AAC7B;AACA;ACQO,SAAS,UAAA,CAAW,KAAA,EAA4B;AACrD,EAAA,OAAO,MAAA,CAAO,KAAK,EAAA,GAAK,KAAA,CAAM,KAAA,IAAS,GAAA;AACzC;AAEO,SAAS,MAAA,CAAO,KAAA,EAAuC;AAC5D,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,QAAA,CAAS,SAAS,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA;AACrF;AAEO,SAAS,QAAA,CAAS,KAAA,EAA4B;AACnD,EAAA,OAAO,MAAA,CAAO,KAAK,EAAA,GAAK,KAAA,CAAM,KAAA,EAAO,IAAA,GAAO,KAAA,CAAM,KAAA,EAAO,GAAA;AAC3D;AAEO,SAAS,QAAA,CAAS,KAAA,EAA4B;AACnD,EAAA,OAAO,MAAA,CAAO,KAAK,EAAA,GAAK,KAAA,CAAM,KAAA,EAAO,GAAA;AACvC;AAEO,SAAS,SAAA,CACd,GAAA,EACA,OAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,EACW;AACX,EAAA,OAAO,uCAAA;AAAA,IACL,WAAA;AAAA,IACA,MAAA,CAAA,EAAA,GAAY;AACV,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,EAAS,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,UAC9B,MAAA;AAAA,UACA;AAAA,QACF,CAAC,CAAA;AACD,QAAA,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS,IAAA,GAAO,MAAA,CAAO,OAAA,EAAS,GAAA,EAAK;AAC9C,UAAA,MAAM,QAAA,EAAU,MAAM,MAAA,CAAO,IAAA,CAAK,CAAA;AAElC,UAAA,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAClB,YAAA,OAAO,QAAA,CAAS,iCAAA,OAAU,CAAC,CAAA;AAAA,UAC7B,EAAA,KAAO;AACL,YAAA,OAAO,QAAA;AAAA,cACL,kCAAA;AAAI,gBACF,OAAA,EAAS;AAAA,cACX,CAAC;AAAA,YACH,CAAA;AAAA,UACF;AAAA,QACF;AAEA,QAAA,OAAO,QAAA;AAAA,UACL,kCAAA;AAAI,YACF,IAAA,EAAM,MAAA,CAAO,MAAA;AAAA,YACb,OAAA,EAAS,MAAM,MAAA,CAAO,IAAA,CAAK;AAAA,UAC7B,CAAC;AAAA,QACH,CAAA;AAAA,MAEF,EAAA,MAAA,CAAS,CAAA,EAAY;AACnB,QAAA,OAAO,QAAA;AAAA,UACL,kCAAA;AAAI,YACF,OAAA,EAAS;AAAA,UACX,CAAC;AAAA,QACH,CAAA;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE;AAAA,IACF;AAAA,EACF,CAAA;AACF;ADnBA;AACE;AACA;AACA;AACA;AACA;AACF,kJAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/effect/Fetch.js","sourcesContent":[null,"import type { Guard } from '../guard/Guard'\nimport { err, ok } from '../result/Result'\nimport type { Message } from '../runtime/Runtime'\nimport { withName, type Effect, type ReceiveEffectResult } from './Effect'\n\ntype HttpError = {\n code: number\n message: string\n}\n\ntype MalformedPayloadError = {\n message: string\n}\n\ntype FetchError = HttpError | MalformedPayloadError\n\nexport function isNotFound(error: FetchError): boolean {\n return isHttp(error) && error.code === 404\n}\n\nexport function isHttp(error: FetchError): error is HttpError {\n return Object.keys(error).includes('message') && Object.keys(error).includes('code')\n}\n\nexport function isClient(error: FetchError): boolean {\n return isHttp(error) && error.code > 399 && error.code < 500\n}\n\nexport function isServer(error: FetchError): boolean {\n return isHttp(error) && error.code > 499\n}\n\nexport function fetchJson<T, M extends Message>(\n url: string,\n headers: [string, string][],\n method: string,\n guard: Guard<T>,\n receiver: ReceiveEffectResult<T, FetchError, M>,\n): Effect<M> {\n return withName(\n 'fetchJson',\n async () => {\n try {\n const result = await fetch(url, {\n method,\n headers,\n })\n if (result.status > 199 && result.status < 300) {\n const payload = await result.json()\n\n if (guard(payload)) {\n return receiver(ok(payload))\n } else {\n return receiver(\n err({\n message: 'Malformed Payload. Your Guard does not pass.',\n }),\n )\n }\n }\n\n return receiver(\n err({\n code: result.status,\n message: await result.text(),\n }),\n )\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e: unknown) {\n return receiver(\n err({\n message: 'Malformed Payload. Invalid JSON.',\n }),\n )\n }\n },\n {\n url,\n },\n )\n}\n"]}
|
package/dist/effect/None.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/effect/None.js","../../src/effect/None.ts"],"names":[],"mappings":"AAAA;AACE;AACF,uDAA6B;AAC7B;AACA;ACDO,SAAS,IAAA,CAAA,EAAoB;AAClC,EAAA,OAAO,uCAAA,MAAS,EAAQ,CAAA,EAAA,GAAM;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH;ADGA;AACE;AACF,oBAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/effect/None.js","sourcesContent":[null,"import { withName, type Effect } from './Effect'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function none(): Effect<any> {\n return withName('none', () => {\n return null\n })\n}\n"]}
|
package/dist/guard/Guard.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/guard/Guard.js"],"names":[],"mappings":"AAAA","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/guard/Guard.js"}
|
package/dist/maybe/Maybe.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/maybe/Maybe.js","../../src/maybe/Maybe.ts"],"names":[],"mappings":"AAAA;ACWO,SAAS,OAAA,CAAA,EAAmB;AACjC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,EACR,CAAA;AACF;AAEO,SAAS,IAAA,CAAQ,KAAA,EAAmB;AACzC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN;AAAA,EACF,CAAA;AACF;AAEO,SAAS,SAAA,CAAa,KAAA,EAAmC;AAC9D,EAAA,OAAO,KAAA,CAAM,KAAA,IAAS,eAAA;AACxB;AAEO,SAAS,MAAA,CAAU,KAAA,EAAmC;AAC3D,EAAA,OAAO,KAAA,CAAM,KAAA,IAAS,YAAA;AACxB;AAEO,SAAS,OAAA,CAAW,KAAA,EAAmC;AAE5D,EAAA,OAAO,KAAA,CAAM,KAAA,IAAS,aAAA,GAAgB,KAAA,CAAM,KAAA,IAAS,eAAA;AACvD;AAEO,SAAS,GAAA,CAAU,KAAA,EAAiB,IAAA,EAAiC;AAC1E,EAAA,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AACjB,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,MAAA,CAAU,KAAA,EAAiB,IAAA,EAAuC;AAChF,EAAA,GAAA,CAAI,MAAA,CAAO,KAAK,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA,EAAG;AACtC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAA,CAAQ,CAAA;AACjB;AAEO,SAAS,WAAA,CAAe,KAAA,EAAiB,YAAA,EAAoB;AAClE,EAAA,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AACjB,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAEA,EAAA,OAAO,YAAA;AACT;ADpBA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,iNAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/maybe/Maybe.js","sourcesContent":[null,"export type Just<T> = {\n type: 'maybe-just'\n value: T\n}\n\nexport type Nothing = {\n type: 'maybe-nothing'\n}\n\nexport type Maybe<T> = Just<T> | Nothing\n\nexport function nothing(): Nothing {\n return {\n type: 'maybe-nothing',\n }\n}\n\nexport function just<T>(value: T): Just<T> {\n return {\n type: 'maybe-just',\n value,\n }\n}\n\nexport function isNothing<T>(maybe: Maybe<T>): maybe is Nothing {\n return maybe.type === 'maybe-nothing'\n}\n\nexport function isJust<T>(maybe: Maybe<T>): maybe is Just<T> {\n return maybe.type === 'maybe-just'\n}\n\nexport function isMaybe<T>(value: unknown): value is Maybe<T> {\n //@ts-expect-error is validated\n return value.type === 'maybe-just' || value.type === 'maybe-nothing'\n}\n\nexport function map<T, R>(maybe: Maybe<T>, func: (value: T) => R): Maybe<R> {\n if (isJust(maybe)) {\n return just(func(maybe.value))\n }\n\n return maybe\n}\n\nexport function filter<T>(maybe: Maybe<T>, func: (value: T) => boolean): Maybe<T> {\n if (isJust(maybe) && func(maybe.value)) {\n return maybe\n }\n\n return nothing()\n}\n\nexport function withDefault<T>(maybe: Maybe<T>, defaultValue: T): T {\n if (isJust(maybe)) {\n return maybe.value\n }\n\n return defaultValue\n}\n"]}
|
package/dist/parse/Number.d.ts
DELETED
package/dist/parse/Number.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var _chunkUICXER2Njs = require('../chunk-UICXER2N.js');
|
|
5
|
-
|
|
6
|
-
// src/parse/Number.ts
|
|
7
|
-
function asInt(value) {
|
|
8
|
-
const parsed = parseInt(value, 10);
|
|
9
|
-
if (Number.isNaN(parsed)) {
|
|
10
|
-
return _chunkUICXER2Njs.err.call(void 0, "Number is NaN");
|
|
11
|
-
}
|
|
12
|
-
return _chunkUICXER2Njs.ok.call(void 0, parsed);
|
|
13
|
-
}
|
|
14
|
-
function asFloat(value) {
|
|
15
|
-
const parsed = parseFloat(value);
|
|
16
|
-
if (Number.isNaN(parsed)) {
|
|
17
|
-
return _chunkUICXER2Njs.err.call(void 0, "Number is NaN");
|
|
18
|
-
}
|
|
19
|
-
return _chunkUICXER2Njs.ok.call(void 0, parsed);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
exports.asFloat = asFloat; exports.asInt = asInt;
|
|
25
|
-
//# sourceMappingURL=Number.js.map
|
package/dist/parse/Number.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/parse/Number.js","../../src/parse/Number.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,uDAA6B;AAC7B;AACA;ACHO,SAAS,KAAA,CAAM,KAAA,EAAuC;AAC3D,EAAA,MAAM,OAAA,EAAS,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AAEjC,EAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACxB,IAAA,OAAO,kCAAA,eAAmB,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,iCAAA,MAAS,CAAA;AAClB;AAEO,SAAS,OAAA,CAAQ,KAAA,EAAuC;AAC7D,EAAA,MAAM,OAAA,EAAS,UAAA,CAAW,KAAK,CAAA;AAE/B,EAAA,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACxB,IAAA,OAAO,kCAAA,eAAmB,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,iCAAA,MAAS,CAAA;AAClB;ADAA;AACE;AACA;AACF,iDAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/parse/Number.js","sourcesContent":[null,"import { err, ok, type Result } from '../result/Result'\n\nexport function asInt(value: string): Result<number, string> {\n const parsed = parseInt(value, 10)\n\n if (Number.isNaN(parsed)) {\n return err('Number is NaN')\n }\n\n return ok(parsed)\n}\n\nexport function asFloat(value: string): Result<number, string> {\n const parsed = parseFloat(value)\n\n if (Number.isNaN(parsed)) {\n return err('Number is NaN')\n }\n\n return ok(parsed)\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/result/Result.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACF,qRAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/result/Result.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/Runtime.js","../../src/runtime/Runtime.ts"],"names":[],"mappings":"AAAA;AC0BO,SAAS,EAAA,CACd,IAAA,EACA,OAAA,EAC0B;AAC1B,EAAA,OAAO,OAAA,CAAQ,KAAA,IAAS,IAAA;AAC1B;AAEO,SAAS,MAAA,CAA6B,IAAA,EAAU,KAAA,EAA0B;AAC/E,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA;AAAA,EACF,CAAA;AACF;AD5BA;AACE;AACA;AACF,yCAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/Runtime.js","sourcesContent":[null,"import type { Effect } from '../effect/Effect'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Message<N extends string = string, T = any> = {\n value: T\n name: N\n}\n\nexport type Update<Model, CustomMessage extends Message> = (\n model: Model,\n msg: CustomMessage,\n) => [Model, Effect<CustomMessage>]\n\nexport type Init<Model, CustomMessage extends Message> = () => [Model, Effect<CustomMessage>]\n\nexport type Change<CustomMessage extends Message, Model> = [\n CustomMessage | null,\n model: Model,\n effect: {\n name: string\n meta: object | null\n } | null,\n]\n\nexport type Changes<CustomMessage extends Message, Model> = Change<CustomMessage, Model>[]\n\nexport function is<CustomMessage extends Message<A>, A extends string>(\n name: A,\n message: Message,\n): message is CustomMessage {\n return message.name === name\n}\n\nexport function create<MN extends string, T>(name: MN, value: T): Message<MN, T> {\n return {\n name,\n value\n }\n}"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/persistence/LocalStorage.js","../../../src/runtime/persistence/LocalStorage.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,0DAAgC;AAChC;AACA;ACAO,IAAM,wBAAA,EAA0B,CACrC,IAAA,EAAA,GAAA,CACuC;AAAA,EACvC,OAAA,CAAQ,KAAA,EAAc;AACpB,IAAA,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA;AAAA,EAC/D,CAAA;AAAA,EACA,IAAA,CAAK,KAAA,EAAqB,IAAA,EAAyD;AACjF,IAAA,MAAM,OAAA,EAAS,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,IAAI,CAAA;AAC/C,IAAA,GAAA,CAAI,OAAA,IAAW,IAAA,EAAM;AACnB,MAAA,OAAO,iCAAA,IAAG,CAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IACrB;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AACxB,MAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE7B,MAAA,GAAA,CAAI,KAAA,CAAM,KAAK,CAAA,EAAG;AAChB,QAAA,OAAO,iCAAA,KAAQ,CAAA;AAAA,MACjB;AAAA,IAEF,EAAA,MAAA,CAAS,CAAA,EAAG;AACV,MAAA,OAAO,kCAAA,+BAAmC,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,kCAAA,8CAAkD,CAAA;AAAA,EAC3D;AACF,CAAA,CAAA;ADJA;AACE;AACF,0DAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/persistence/LocalStorage.js","sourcesContent":[null,"import type { Guard } from '../../guard/Guard'\nimport { err, ok, type Result } from '../../result/Result'\nimport type { Init, Message } from '../Runtime'\nimport type { Persistence } from './Persistence'\n\nexport const localStoragePersistence = <Model, CustomMessage extends Message>(\n name: string,\n): Persistence<Model, CustomMessage> => ({\n persist(model: Model) {\n window.localStorage.setItem(name, btoa(JSON.stringify(model)))\n },\n read(guard: Guard<Model>, init: Init<Model, CustomMessage>): Result<Model, string> {\n const record = window.localStorage.getItem(name)\n if (record === null) {\n return ok(init()[0])\n }\n\n try {\n const json = atob(record)\n const model = JSON.parse(json)\n\n if (guard(model)) {\n return ok(model)\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return err('Could not decode stored model')\n }\n\n return err('Your guard did not match the retrieved model')\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/persistence/None.js","../../../src/runtime/persistence/None.ts"],"names":[],"mappings":"AAAA;AACE;AACF,0DAAgC;AAChC;AACA;ACCO,IAAM,cAAA,EAAgB,CAAA,EAAA,GAAA,CAGvB;AAAA;AAAA,EAEJ,OAAA,CAAQ,KAAA,EAAc;AAAA,EAAE,CAAA;AAAA,EACxB,IAAA,CAAK,KAAA,EAAqB,IAAA,EAAyD;AACjF,IAAA,OAAO,iCAAA,IAAG,CAAK,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,EACrB;AACF,CAAA,CAAA;ADDA;AACE;AACF,sCAAC","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/persistence/None.js","sourcesContent":[null,"import type { Guard } from '../../guard/Guard'\nimport { ok, type Result } from '../../result/Result'\nimport type { Init, Message } from '../Runtime'\nimport type { Persistence } from './Persistence'\n\nexport const noPersistence = <Model, CustomMessage extends Message>(): Persistence<\n Model,\n CustomMessage\n> => ({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n persist(model: Model) { },\n read(guard: Guard<Model>, init: Init<Model, CustomMessage>): Result<Model, string> {\n return ok(init()[0])\n },\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/persistence/Persistence.js"],"names":[],"mappings":"AAAA","file":"/home/kaumlaut/code/pure-vue-poc/pure/dist/runtime/persistence/Persistence.js"}
|