foldkit 0.7.0-canary.1 → 0.9.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"addNavigationEventListeners.d.ts","sourceRoot":"","sources":["../../src/runtime/addNavigationEventListeners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,EAAgB,MAAM,QAAQ,CAAA;AAI3D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,eAAO,MAAM,2BAA2B,GAAI,OAAO,EACjD,cAAc,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAClC,eAAe,aAAa,CAAC,OAAO,CAAC,SAKtC,CAAA"}
1
+ {"version":3,"file":"addNavigationEventListeners.d.ts","sourceRoot":"","sources":["../../src/runtime/addNavigationEventListeners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAA;AAI9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,eAAO,MAAM,2BAA2B,GAAI,OAAO,EACjD,cAAc,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAClC,eAAe,aAAa,CAAC,OAAO,CAAC,SAKtC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Array, Option, Queue, String, pipe } from 'effect';
1
+ import { Option, Queue, String } from 'effect';
2
2
  import { OptionExt, StringExt } from '../effectExtensions';
3
3
  import { External, Internal } from './urlRequest';
4
4
  export const addNavigationEventListeners = (messageQueue, browserConfig) => {
@@ -25,43 +25,35 @@ const addPopStateListener = (messageQueue, browserConfig) => {
25
25
  const addLinkClickListener = (messageQueue, browserConfig) => {
26
26
  const onLinkClick = (event) => {
27
27
  const target = event.target;
28
- if (!target || !('closest' in target))
28
+ if (!target || !('closest' in target)) {
29
29
  return;
30
+ }
30
31
  /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
31
- const link = target.closest('a');
32
- if (!link)
32
+ const maybeLink = Option.fromNullable(target.closest('a'));
33
+ if (Option.isNone(maybeLink)) {
33
34
  return;
34
- const href = link.getAttribute('href');
35
- if (!href)
35
+ }
36
+ const { href } = maybeLink.value;
37
+ if (String.isEmpty(href)) {
36
38
  return;
37
- if (href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//')) {
39
+ }
40
+ event.preventDefault();
41
+ const linkUrl = new URL(href);
42
+ const currentUrl = new URL(window.location.href);
43
+ if (linkUrl.origin !== currentUrl.origin) {
38
44
  Queue.unsafeOffer(messageQueue, browserConfig.onUrlRequest(External.make({ href })));
39
45
  return;
40
46
  }
41
- const url = pipe(href, String.split('?'), (parts) => {
42
- const path = Array.headNonEmpty(parts);
43
- const searchAndHash = Array.tailNonEmpty(parts);
44
- const pathname = pipe(path, String.split('#'), Array.headNonEmpty) || '/';
45
- const searchPart = Array.head(searchAndHash).pipe(Option.match({
46
- onNone: () => '',
47
- onSome: (s) => s,
48
- }));
49
- const search = pipe(searchPart, String.split('#'), Array.headNonEmpty, OptionExt.fromString);
50
- const hash = pipe(href, String.split('#'), (hashParts) => Array.isNonEmptyArray(hashParts) && hashParts.length > 1 ? hashParts[1] : '', OptionExt.fromString);
51
- return {
52
- protocol: window.location.protocol,
53
- host: window.location.host,
54
- port: OptionExt.fromString(window.location.port),
55
- pathname,
56
- search,
57
- hash,
58
- };
59
- });
60
- const isSamePageHashLink = Option.isSome(url.hash) && (url.pathname === window.location.pathname || href.startsWith('#'));
61
- if (!isSamePageHashLink) {
62
- event.preventDefault();
63
- Queue.unsafeOffer(messageQueue, browserConfig.onUrlRequest(Internal.make({ url })));
64
- }
47
+ const { protocol, host, port, pathname, search, hash } = linkUrl;
48
+ const url = {
49
+ protocol,
50
+ host,
51
+ port: OptionExt.fromString(port),
52
+ pathname,
53
+ search: StringExt.stripPrefixNonEmpty('?')(search),
54
+ hash: StringExt.stripPrefixNonEmpty('#')(hash),
55
+ };
56
+ Queue.unsafeOffer(messageQueue, browserConfig.onUrlRequest(Internal.make({ url })));
65
57
  };
66
58
  document.addEventListener('click', onLinkClick);
67
59
  };
@@ -69,11 +61,12 @@ const addProgrammaticNavigationListener = (messageQueue, browserConfig) => {
69
61
  const onProgrammaticNavigation = () => {
70
62
  const search = StringExt.stripPrefixNonEmpty('?')(window.location.search);
71
63
  const hash = StringExt.stripPrefixNonEmpty('#')(window.location.hash);
64
+ const { location: { protocol, host, port, pathname }, } = window;
72
65
  const newUrl = {
73
- protocol: window.location.protocol,
74
- host: window.location.host,
75
- port: OptionExt.fromString(window.location.port),
76
- pathname: window.location.pathname,
66
+ protocol,
67
+ host,
68
+ port: OptionExt.fromString(port),
69
+ pathname,
77
70
  search,
78
71
  hash,
79
72
  };
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
@@ -30,23 +30,17 @@ export const makeRuntime = ({ Model, init, update, view, commandStreams, contain
30
30
  addNavigationEventListeners(messageQueue, browserConfig);
31
31
  }
32
32
  const modelRef = yield* Ref.make(initModel);
33
- const currentVNodeRef = yield* Ref.make(Option.none());
33
+ const maybeCurrentVNodeRef = yield* Ref.make(Option.none());
34
34
  if (commandStreams) {
35
35
  yield* pipe(commandStreams, Record.toEntries, Effect.forEach(([_key, { schema, modelToDeps, depsToStream }]) => Effect.forkDaemon(modelStream.pipe(Stream.map(modelToDeps), Stream.changesWith(Schema.equivalence(schema)), Stream.flatMap(depsToStream, { switch: true }), Stream.runForEach(Effect.flatMap(enqueueMessage)))), {
36
36
  concurrency: 'unbounded',
37
37
  discard: true,
38
38
  }));
39
39
  }
40
- const render = (model) => view(model).pipe(Effect.flatMap((newVNode) => Effect.gen(function* () {
41
- const currentVNode = yield* Ref.get(currentVNodeRef);
42
- const patchedVNode = yield* Effect.sync(() => {
43
- const vnode = Predicate.isNotNull(newVNode) ? newVNode : h('#text', {}, '');
44
- return Option.match(currentVNode, {
45
- onNone: () => patch(toVNode(container), vnode),
46
- onSome: (prev) => patch(prev, vnode),
47
- });
48
- });
49
- yield* Ref.set(currentVNodeRef, Option.some(patchedVNode));
40
+ const render = (model) => view(model).pipe(Effect.flatMap((nextVNodeNullish) => Effect.gen(function* () {
41
+ const maybeCurrentVNode = yield* Ref.get(maybeCurrentVNodeRef);
42
+ const patchedVNode = yield* Effect.sync(() => patchVNode(maybeCurrentVNode, nextVNodeNullish, container));
43
+ yield* Ref.set(maybeCurrentVNodeRef, Option.some(patchedVNode));
50
44
  })), Effect.provideService(Dispatch, {
51
45
  /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
52
46
  dispatch: (message) => enqueueMessage(message),
@@ -66,6 +60,13 @@ export const makeRuntime = ({ Model, init, update, view, commandStreams, contain
66
60
  }
67
61
  }));
68
62
  });
63
+ const patchVNode = (maybeCurrentVNode, nextVNodeNullish, container) => {
64
+ const nextVNode = Predicate.isNotNull(nextVNodeNullish) ? nextVNodeNullish : h('#text', {}, '');
65
+ return Option.match(maybeCurrentVNode, {
66
+ onNone: () => patch(toVNode(container), nextVNode),
67
+ onSome: (currentVNode) => patch(currentVNode, nextVNode),
68
+ });
69
+ };
69
70
  export const makeElement = (config) => makeRuntime({
70
71
  Model: config.Model,
71
72
  init: () => config.init(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foldkit",
3
- "version": "0.7.0-canary.1",
3
+ "version": "0.9.0-canary.0",
4
4
  "description": "Elm-inspired UI framework powered by Effect",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",