@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.
Files changed (57) hide show
  1. package/dist/effect/Effect.d.ts +14 -2
  2. package/dist/effect/Effect.js +7 -7
  3. package/dist/effect/Fetch.d.ts +9 -11
  4. package/dist/effect/Fetch.js +41 -63
  5. package/dist/effect/None.d.ts +2 -6
  6. package/dist/effect/None.js +6 -13
  7. package/dist/effect/index.d.ts +4 -0
  8. package/dist/effect/index.js +3 -0
  9. package/dist/guard/Guard.d.ts +1 -3
  10. package/dist/guard/Guard.js +1 -1
  11. package/dist/guard/index.d.ts +2 -0
  12. package/dist/guard/index.js +1 -0
  13. package/dist/index.d.ts +6 -0
  14. package/dist/index.js +6 -0
  15. package/dist/maybe/Maybe.d.ts +11 -13
  16. package/dist/maybe/Maybe.js +38 -49
  17. package/dist/maybe/index.d.ts +2 -0
  18. package/dist/maybe/index.js +1 -0
  19. package/dist/parse/Parse.d.ts +3 -0
  20. package/dist/parse/Parse.js +15 -0
  21. package/dist/parse/index.d.ts +1 -0
  22. package/dist/parse/index.js +1 -0
  23. package/dist/result/Result.d.ts +10 -12
  24. package/dist/result/Result.js +36 -19
  25. package/dist/result/index.d.ts +2 -0
  26. package/dist/result/index.js +1 -0
  27. package/dist/runtime/Runtime.d.ts +18 -2
  28. package/dist/runtime/Runtime.js +7 -13
  29. package/dist/runtime/index.d.ts +3 -0
  30. package/dist/runtime/index.js +2 -0
  31. package/dist/runtime/persistence/LocalStorage.d.ts +3 -8
  32. package/dist/runtime/persistence/LocalStorage.js +23 -30
  33. package/dist/runtime/persistence/None.d.ts +3 -8
  34. package/dist/runtime/persistence/None.js +7 -16
  35. package/dist/runtime/persistence/Persistence.d.ts +4 -7
  36. package/dist/runtime/persistence/Persistence.js +1 -1
  37. package/dist/runtime/persistence/index.d.ts +3 -0
  38. package/dist/runtime/persistence/index.js +2 -0
  39. package/package.json +34 -15
  40. package/dist/Effect-DfDwc0ai.d.ts +0 -34
  41. package/dist/chunk-AVH3HBI3.js +0 -13
  42. package/dist/chunk-AVH3HBI3.js.map +0 -1
  43. package/dist/chunk-UICXER2N.js +0 -48
  44. package/dist/chunk-UICXER2N.js.map +0 -1
  45. package/dist/effect/Effect.js.map +0 -1
  46. package/dist/effect/Fetch.js.map +0 -1
  47. package/dist/effect/None.js.map +0 -1
  48. package/dist/guard/Guard.js.map +0 -1
  49. package/dist/maybe/Maybe.js.map +0 -1
  50. package/dist/parse/Number.d.ts +0 -6
  51. package/dist/parse/Number.js +0 -25
  52. package/dist/parse/Number.js.map +0 -1
  53. package/dist/result/Result.js.map +0 -1
  54. package/dist/runtime/Runtime.js.map +0 -1
  55. package/dist/runtime/persistence/LocalStorage.js.map +0 -1
  56. package/dist/runtime/persistence/None.js.map +0 -1
  57. package/dist/runtime/persistence/Persistence.js.map +0 -1
@@ -1,2 +1,14 @@
1
- import '../result/Result.js';
2
- export { A as AsyncEffect, b as AsyncNullEffect, E as Effect, d as EffectType, N as NullEffect, R as ReceiveEffectResult, S as SyncEffect, w as withName } from '../Effect-DfDwc0ai.js';
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;
@@ -1,7 +1,7 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkAVH3HBI3js = require('../chunk-AVH3HBI3.js');
4
-
5
-
6
- exports.withName = _chunkAVH3HBI3js.withName;
7
- //# sourceMappingURL=Effect.js.map
1
+ export function effectWithName(name, effect, meta = null) {
2
+ return {
3
+ name,
4
+ effectType: effect,
5
+ meta,
6
+ };
7
+ }
@@ -1,7 +1,6 @@
1
- import { Guard } from '../guard/Guard.js';
2
- import { M as Message, R as ReceiveEffectResult, E as Effect } from '../Effect-DfDwc0ai.js';
3
- import '../result/Result.js';
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 {};
@@ -1,69 +1,47 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkAVH3HBI3js = require('../chunk-AVH3HBI3.js');
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
- return Object.keys(error).includes("message") && Object.keys(error).includes("code");
6
+ export function isHttp(error) {
7
+ return Object.keys(error).includes('message') && Object.keys(error).includes('code');
15
8
  }
16
- function isClient(error) {
17
- return isHttp(error) && error.code > 399 && error.code < 500;
9
+ export function isClient(error) {
10
+ return isHttp(error) && error.code > 399 && error.code < 500;
18
11
  }
19
- function isServer(error) {
20
- return isHttp(error) && error.code > 499;
12
+ export function isServer(error) {
13
+ return isHttp(error) && error.code > 499;
21
14
  }
22
- function fetchJson(url, headers, method, guard, receiver) {
23
- return _chunkAVH3HBI3js.withName.call(void 0,
24
- "fetchJson",
25
- async () => {
26
- try {
27
- const result = await fetch(url, {
28
- method,
29
- headers
30
- });
31
- if (result.status > 199 && result.status < 300) {
32
- const payload = await result.json();
33
- if (guard(payload)) {
34
- return receiver(_chunkUICXER2Njs.ok.call(void 0, payload));
35
- } else {
36
- return receiver(
37
- _chunkUICXER2Njs.err.call(void 0, {
38
- message: "Malformed Payload. Your Guard does not pass."
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
- return receiver(
44
- _chunkUICXER2Njs.err.call(void 0, {
45
- code: result.status,
46
- message: await result.text()
47
- })
48
- );
49
- } catch (e) {
50
- return receiver(
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
@@ -1,6 +1,2 @@
1
- import { E as Effect } from '../Effect-DfDwc0ai.js';
2
- import '../result/Result.js';
3
-
4
- declare function none(): Effect<any>;
5
-
6
- export { none };
1
+ import { type Effect } from './Effect';
2
+ export declare function none(): Effect<any>;
@@ -1,14 +1,7 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkAVH3HBI3js = require('../chunk-AVH3HBI3.js');
4
-
5
- // src/effect/None.ts
6
- function none() {
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
@@ -0,0 +1,4 @@
1
+ export * from "./Effect";
2
+ export * from "./Fetch";
3
+ export * from "./None";
4
+ export type { Effect, AsyncEffect, AsyncNullEffect, EffectType, NullEffect, ReceiveEffectResult, SyncEffect } from "./Effect";
@@ -0,0 +1,3 @@
1
+ export * from "./Effect";
2
+ export * from "./Fetch";
3
+ export * from "./None";
@@ -1,3 +1 @@
1
- type Guard<T> = (value: unknown) => value is T;
2
-
3
- export type { Guard };
1
+ export type Guard<T> = (value: unknown) => value is T;
@@ -1 +1 @@
1
- "use strict";//# sourceMappingURL=Guard.js.map
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from "./Guard";
2
+ export type { Guard } from "./Guard";
@@ -0,0 +1 @@
1
+ export * from "./Guard";
@@ -0,0 +1,6 @@
1
+ export * from "./effect";
2
+ export * from "./guard";
3
+ export * from "./maybe";
4
+ export * from "./parse";
5
+ export * from "./result";
6
+ export * from "./runtime";
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./effect";
2
+ export * from "./guard";
3
+ export * from "./maybe";
4
+ export * from "./parse";
5
+ export * from "./result";
6
+ export * from "./runtime";
@@ -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 map<T, R>(maybe: Maybe<T>, func: (value: T) => R): Maybe<R>;
15
- declare function filter<T>(maybe: Maybe<T>, func: (value: T) => boolean): Maybe<T>;
16
- declare function withDefault<T>(maybe: Maybe<T>, defaultValue: T): T;
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;
@@ -1,50 +1,39 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/maybe/Maybe.ts
2
- function nothing() {
3
- return {
4
- type: "maybe-nothing"
5
- };
6
- }
7
- function just(value) {
8
- return {
9
- type: "maybe-just",
10
- value
11
- };
12
- }
13
- function isNothing(maybe) {
14
- return maybe.type === "maybe-nothing";
15
- }
16
- function isJust(maybe) {
17
- return maybe.type === "maybe-just";
18
- }
19
- function isMaybe(value) {
20
- return value.type === "maybe-just" || value.type === "maybe-nothing";
21
- }
22
- function map(maybe, func) {
23
- if (isJust(maybe)) {
24
- return just(func(maybe.value));
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
- return nothing();
33
- }
34
- function withDefault(maybe, defaultValue) {
35
- if (isJust(maybe)) {
36
- return maybe.value;
37
- }
38
- return defaultValue;
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,2 @@
1
+ export * from "./Maybe";
2
+ export type { Just, Maybe, Nothing } from "./Maybe";
@@ -0,0 +1 @@
1
+ export * from "./Maybe";
@@ -0,0 +1,3 @@
1
+ import { type Result } from '../result/Result';
2
+ export declare function asInt(value: string): Result<number, string>;
3
+ export declare function asFloat(value: string): Result<number, string>;
@@ -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";
@@ -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
- declare function isOk<T, E>(result: Result<T, E>): result is Ok<T>;
10
- declare function isErr<T, E>(result: Result<T, E>): result is Err<E>;
11
- declare function ok<T>(value: T): Ok<T>;
12
- declare function err<E>(error: E): Err<E>;
13
- type Result<T, E> = Ok<T> | Err<E>;
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;
@@ -1,19 +1,36 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
- var _chunkUICXER2Njs = require('../chunk-UICXER2N.js');
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
- exports.err = _chunkUICXER2Njs.err; exports.isErr = _chunkUICXER2Njs.isErr; exports.isOk = _chunkUICXER2Njs.isOk; exports.map = _chunkUICXER2Njs.map; exports.mapErr = _chunkUICXER2Njs.mapErr; exports.ok = _chunkUICXER2Njs.ok; exports.withDefault = _chunkUICXER2Njs.withDefault;
19
- //# sourceMappingURL=Result.js.map
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,2 @@
1
+ export * from "./Result";
2
+ export type { Err, Ok, Result } from "./Result";
@@ -0,0 +1 @@
1
+ export * from "./Result";
@@ -1,2 +1,18 @@
1
- export { C as Change, a as Changes, I as Init, M as Message, U as Update, c as create, i as is } from '../Effect-DfDwc0ai.js';
2
- import '../result/Result.js';
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>;
@@ -1,15 +1,9 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/runtime/Runtime.ts
2
- function is(name, message) {
3
- return message.name === name;
1
+ export function is(name, message) {
2
+ return message.name === name;
4
3
  }
5
- function create(name, value) {
6
- return {
7
- name,
8
- value
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
@@ -0,0 +1,3 @@
1
+ export * from "./Runtime";
2
+ export * from "./persistence";
3
+ export type { Change, Changes, Init, Message, Update } from "./Runtime";
@@ -0,0 +1,2 @@
1
+ export * from "./Runtime";
2
+ export * from "./persistence";
@@ -1,8 +1,3 @@
1
- import { M as Message } from '../../Effect-DfDwc0ai.js';
2
- import { Persistence } from './Persistence.js';
3
- import '../../result/Result.js';
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
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
-
4
- var _chunkUICXER2Njs = require('../../chunk-UICXER2N.js');
5
-
6
- // src/runtime/persistence/LocalStorage.ts
7
- var localStoragePersistence = (name) => ({
8
- persist(model) {
9
- window.localStorage.setItem(name, btoa(JSON.stringify(model)));
10
- },
11
- read(guard, init) {
12
- const record = window.localStorage.getItem(name);
13
- if (record === null) {
14
- return _chunkUICXER2Njs.ok.call(void 0, init()[0]);
15
- }
16
- try {
17
- const json = atob(record);
18
- const model = JSON.parse(json);
19
- if (guard(model)) {
20
- return _chunkUICXER2Njs.ok.call(void 0, model);
21
- }
22
- } catch (e) {
23
- return _chunkUICXER2Njs.err.call(void 0, "Could not decode stored model");
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 { M as Message } from '../../Effect-DfDwc0ai.js';
2
- import { Persistence } from './Persistence.js';
3
- import '../../result/Result.js';
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
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
-
3
- var _chunkUICXER2Njs = require('../../chunk-UICXER2N.js');
4
-
5
- // src/runtime/persistence/None.ts
6
- var noPersistence = () => ({
7
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
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.js';
2
- import { Result } from '../../result/Result.js';
3
- import { M as Message, I as Init } from '../../Effect-DfDwc0ai.js';
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
- "use strict";//# sourceMappingURL=Persistence.js.map
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from "./LocalStorage";
2
+ export * from "./None";
3
+ export type { Persistence } from "./Persistence";
@@ -0,0 +1,2 @@
1
+ export * from "./LocalStorage";
2
+ export * from "./None";
package/package.json CHANGED
@@ -1,29 +1,48 @@
1
1
  {
2
2
  "name": "@kaumlaut/pure",
3
- "version": "0.1.4",
3
+ "version": "0.1.7",
4
4
  "description": "Types and functions for state management inspired by Elm and functional programming",
5
- "main": "./dist/index.js",
6
- "types": "./dist/index.d.ts",
7
- "exports": {
8
- "./effect": "./dist/effect",
9
- "./guard": "./dist/guard",
10
- "./maybe": "./dist/maybe",
11
- "./parse": "./dist/parse",
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
- "scripts": {
19
- "build": "tsup --dts",
20
- "test": "vitest",
21
- "release": "npm run build && npm publish --access public"
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 };
@@ -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"]}
@@ -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"}
@@ -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"]}
@@ -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"]}
@@ -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"}
@@ -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"]}
@@ -1,6 +0,0 @@
1
- import { Result } from '../result/Result.js';
2
-
3
- declare function asInt(value: string): Result<number, string>;
4
- declare function asFloat(value: string): Result<number, string>;
5
-
6
- export { asFloat, asInt };
@@ -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
@@ -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"}