blokd 0.1.0-beta.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.
- package/README.md +28 -0
- package/dist/LICENSE +21 -0
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +48 -0
- package/dist/client.js.map +1 -0
- package/dist/core.d.ts +25 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +206 -0
- package/dist/core.js.map +1 -0
- package/dist/dom.d.ts +16 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +140 -0
- package/dist/dom.js.map +1 -0
- package/dist/hono.d.ts +49 -0
- package/dist/hono.d.ts.map +1 -0
- package/dist/hono.js +310 -0
- package/dist/hono.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx-runtime.d.ts +45 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +264 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/resume.d.ts +46 -0
- package/dist/resume.d.ts.map +1 -0
- package/dist/resume.js +231 -0
- package/dist/resume.js.map +1 -0
- package/dist/server.d.ts +39 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +232 -0
- package/dist/server.js.map +1 -0
- package/dist/vite.d.ts +20 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +421 -0
- package/dist/vite.js.map +1 -0
- package/package.json +92 -0
- package/src/client.ts +50 -0
- package/src/core.ts +234 -0
- package/src/dom.ts +142 -0
- package/src/hono.ts +368 -0
- package/src/index.ts +7 -0
- package/src/jsx-runtime.ts +306 -0
- package/src/resume.ts +274 -0
- package/src/server.ts +241 -0
- package/src/vite.ts +413 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Blokd
|
|
2
|
+
|
|
3
|
+
Blokd is a tiny Hono-native meta-framework for HTML-first apps with Solid-familiar signals, JSX, SSR, file routing, native forms, and minimal resumable islands.
|
|
4
|
+
|
|
5
|
+
Version: `0.1.0-beta.0`.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
pnpm add blokd hono
|
|
11
|
+
pnpm add -D vite typescript
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Imports
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { signal, memo, Show, For, Island, resumable } from 'blokd';
|
|
18
|
+
import { redirect, notFound } from 'blokd/server';
|
|
19
|
+
import { createPages } from 'blokd/hono';
|
|
20
|
+
import { blokd } from 'blokd/vite';
|
|
21
|
+
import { registerResumable, startResumability } from 'blokd/client';
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Beta status
|
|
25
|
+
|
|
26
|
+
This package is beta software. Use it for small Hono-native SSR apps, business sites, restaurant/local service sites, native forms, and resumable widgets. Read the repository docs before public production use.
|
|
27
|
+
|
|
28
|
+
Production resumable handlers should be registered from the client entry with `registerResumable()` unless the handler ref points to an importable built module.
|
package/dist/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Blokd contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { render, hydrate } from './jsx-runtime.js';
|
|
2
|
+
export { startResumability, registerResumable, unregisterResumable, resumable, Island } from './resume.js';
|
|
3
|
+
export type EnhanceOptions = {
|
|
4
|
+
root?: Document | Element;
|
|
5
|
+
onNavigate?: (url: URL) => void | Promise<void>;
|
|
6
|
+
onSubmit?: (form: HTMLFormElement, submitter: HTMLElement | null) => void | Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
export declare function enhance(options?: EnhanceOptions): () => void;
|
|
9
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE3G,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3F,CAAC;AAeF,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,IAAI,CA2BhE"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export { render, hydrate } from './jsx-runtime.js';
|
|
2
|
+
export { startResumability, registerResumable, unregisterResumable, resumable, Island } from './resume.js';
|
|
3
|
+
function closestAnchor(target) {
|
|
4
|
+
return target instanceof Element ? target.closest('a[href]') : null;
|
|
5
|
+
}
|
|
6
|
+
function isEligibleAnchor(anchor, event) {
|
|
7
|
+
if (event.defaultPrevented || event.button !== 0)
|
|
8
|
+
return false;
|
|
9
|
+
if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)
|
|
10
|
+
return false;
|
|
11
|
+
if (anchor.target && anchor.target !== '_self')
|
|
12
|
+
return false;
|
|
13
|
+
if (anchor.hasAttribute('download'))
|
|
14
|
+
return false;
|
|
15
|
+
const url = new URL(anchor.href, location.href);
|
|
16
|
+
return url.origin === location.origin;
|
|
17
|
+
}
|
|
18
|
+
export function enhance(options = {}) {
|
|
19
|
+
const root = options.root ?? document;
|
|
20
|
+
const click = (event) => {
|
|
21
|
+
if (!(event instanceof MouseEvent))
|
|
22
|
+
return;
|
|
23
|
+
const anchor = closestAnchor(event.target);
|
|
24
|
+
if (!anchor || !isEligibleAnchor(anchor, event))
|
|
25
|
+
return;
|
|
26
|
+
if (!options.onNavigate)
|
|
27
|
+
return;
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
void options.onNavigate(new URL(anchor.href, location.href));
|
|
30
|
+
};
|
|
31
|
+
const submit = (event) => {
|
|
32
|
+
const form = event.target;
|
|
33
|
+
if (!(form instanceof HTMLFormElement))
|
|
34
|
+
return;
|
|
35
|
+
if (!options.onSubmit)
|
|
36
|
+
return;
|
|
37
|
+
const submitter = event instanceof SubmitEvent && event.submitter instanceof HTMLElement ? event.submitter : null;
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
void options.onSubmit(form, submitter);
|
|
40
|
+
};
|
|
41
|
+
root.addEventListener('click', click);
|
|
42
|
+
root.addEventListener('submit', submit);
|
|
43
|
+
return () => {
|
|
44
|
+
root.removeEventListener('click', click);
|
|
45
|
+
root.removeEventListener('submit', submit);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQ3G,SAAS,aAAa,CAAC,MAA0B;IAC/C,OAAO,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAyB,EAAE,KAAiB;IACpE,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/D,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACnF,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,UAA0B,EAAE;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;IAEtC,MAAM,KAAK,GAAG,CAAC,KAAY,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;YAAE,OAAO;QAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO;QACxD,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO;QAChC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,CAAC,IAAI,YAAY,eAAe,CAAC;YAAE,OAAO;QAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO;QAC9B,MAAM,SAAS,GAAG,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,SAAS,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAClH,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type Accessor<T> = () => T;
|
|
2
|
+
export type Setter<T> = {
|
|
3
|
+
(value: T): T;
|
|
4
|
+
(updater: (previous: T) => T): T;
|
|
5
|
+
};
|
|
6
|
+
export type SignalOptions<T> = {
|
|
7
|
+
/**
|
|
8
|
+
* Custom equality comparator. Set to false to always notify subscribers.
|
|
9
|
+
*/
|
|
10
|
+
equals?: false | ((previous: T, next: T) => boolean);
|
|
11
|
+
};
|
|
12
|
+
type CleanupFn = () => void;
|
|
13
|
+
export declare function signal<T>(initial: T, options?: SignalOptions<T>): [Accessor<T>, Setter<T>];
|
|
14
|
+
export declare function effect(fn: () => void): () => void;
|
|
15
|
+
export declare function cleanup(fn: CleanupFn): void;
|
|
16
|
+
export declare function memo<T>(fn: () => T, options?: SignalOptions<T>): Accessor<T>;
|
|
17
|
+
export declare function batch<T>(fn: () => T): T;
|
|
18
|
+
export declare function untrack<T>(fn: () => T): T;
|
|
19
|
+
export declare function root<T>(fn: (dispose: () => void) => T): T;
|
|
20
|
+
export declare function getOwner(): unknown;
|
|
21
|
+
export declare function runWithOwner<T>(owner: unknown, fn: () => T): T;
|
|
22
|
+
export declare function runWithEffectsDisabled<T>(fn: () => T): T;
|
|
23
|
+
export declare function dispose(owner: unknown): void;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAClC,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI;IACtB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACd,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;CACtD,CAAC;AAGF,KAAK,SAAS,GAAG,MAAM,IAAI,CAAC;AAwH5B,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAqB1F;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKjD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAG3C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAK5E;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQvC;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQzC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CASzD;AAED,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQ9D;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQxD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE5C"}
|
package/dist/core.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
let currentObserver = null;
|
|
2
|
+
let currentOwner = null;
|
|
3
|
+
let batchDepth = 0;
|
|
4
|
+
let effectsEnabled = true;
|
|
5
|
+
let flushing = false;
|
|
6
|
+
const queue = new Set();
|
|
7
|
+
function createOwner(parent) {
|
|
8
|
+
const owner = { owner: parent, owned: new Set(), cleanups: [], disposed: false };
|
|
9
|
+
parent?.owned.add(owner);
|
|
10
|
+
return owner;
|
|
11
|
+
}
|
|
12
|
+
function removeFromParent(owner) {
|
|
13
|
+
owner.owner?.owned.delete(owner);
|
|
14
|
+
}
|
|
15
|
+
function cleanupDeps(comp) {
|
|
16
|
+
for (const source of comp.deps)
|
|
17
|
+
source.delete(comp);
|
|
18
|
+
comp.deps.length = 0;
|
|
19
|
+
}
|
|
20
|
+
function runCleanups(owner) {
|
|
21
|
+
const cleanups = owner.cleanups.splice(0);
|
|
22
|
+
for (let i = cleanups.length - 1; i >= 0; i--)
|
|
23
|
+
cleanups[i]();
|
|
24
|
+
}
|
|
25
|
+
function disposeOwner(owner) {
|
|
26
|
+
if (owner.disposed)
|
|
27
|
+
return;
|
|
28
|
+
owner.disposed = true;
|
|
29
|
+
for (const child of Array.from(owner.owned))
|
|
30
|
+
disposeOwner(child);
|
|
31
|
+
owner.owned.clear();
|
|
32
|
+
if ('deps' in owner)
|
|
33
|
+
cleanupDeps(owner);
|
|
34
|
+
runCleanups(owner);
|
|
35
|
+
queue.delete(owner);
|
|
36
|
+
removeFromParent(owner);
|
|
37
|
+
}
|
|
38
|
+
function createComputation(fn, parent) {
|
|
39
|
+
const comp = {
|
|
40
|
+
owner: parent,
|
|
41
|
+
owned: new Set(),
|
|
42
|
+
cleanups: [],
|
|
43
|
+
disposed: false,
|
|
44
|
+
fn,
|
|
45
|
+
deps: [],
|
|
46
|
+
running: false,
|
|
47
|
+
stale: false
|
|
48
|
+
};
|
|
49
|
+
parent?.owned.add(comp);
|
|
50
|
+
return comp;
|
|
51
|
+
}
|
|
52
|
+
function runComputation(comp) {
|
|
53
|
+
if (comp.disposed || comp.running)
|
|
54
|
+
return;
|
|
55
|
+
comp.stale = false;
|
|
56
|
+
cleanupDeps(comp);
|
|
57
|
+
runCleanups(comp);
|
|
58
|
+
for (const child of Array.from(comp.owned))
|
|
59
|
+
disposeOwner(child);
|
|
60
|
+
comp.owned.clear();
|
|
61
|
+
const previousObserver = currentObserver;
|
|
62
|
+
const previousOwner = currentOwner;
|
|
63
|
+
currentObserver = comp;
|
|
64
|
+
currentOwner = comp;
|
|
65
|
+
comp.running = true;
|
|
66
|
+
try {
|
|
67
|
+
comp.fn();
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
comp.running = false;
|
|
71
|
+
currentObserver = previousObserver;
|
|
72
|
+
currentOwner = previousOwner;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function schedule(comp) {
|
|
76
|
+
if (comp.disposed)
|
|
77
|
+
return;
|
|
78
|
+
comp.stale = true;
|
|
79
|
+
queue.add(comp);
|
|
80
|
+
if (batchDepth === 0)
|
|
81
|
+
flush();
|
|
82
|
+
}
|
|
83
|
+
function flush() {
|
|
84
|
+
if (batchDepth > 0 || flushing)
|
|
85
|
+
return;
|
|
86
|
+
flushing = true;
|
|
87
|
+
try {
|
|
88
|
+
let guard = 0;
|
|
89
|
+
while (queue.size > 0) {
|
|
90
|
+
if (++guard > 100000)
|
|
91
|
+
throw new Error('Reactive update limit exceeded. Check for cyclic effects.');
|
|
92
|
+
const pending = Array.from(queue);
|
|
93
|
+
queue.clear();
|
|
94
|
+
for (const comp of pending)
|
|
95
|
+
runComputation(comp);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
flushing = false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function shouldNotify(previous, next, options) {
|
|
103
|
+
if (options?.equals === false)
|
|
104
|
+
return true;
|
|
105
|
+
const equals = options?.equals ?? Object.is;
|
|
106
|
+
return !equals(previous, next);
|
|
107
|
+
}
|
|
108
|
+
export function signal(initial, options) {
|
|
109
|
+
let value = initial;
|
|
110
|
+
const subscribers = new Set();
|
|
111
|
+
const read = () => {
|
|
112
|
+
if (currentObserver && !subscribers.has(currentObserver)) {
|
|
113
|
+
subscribers.add(currentObserver);
|
|
114
|
+
currentObserver.deps.push(subscribers);
|
|
115
|
+
}
|
|
116
|
+
return value;
|
|
117
|
+
};
|
|
118
|
+
const write = ((next) => {
|
|
119
|
+
const nextValue = typeof next === 'function' ? next(value) : next;
|
|
120
|
+
if (!shouldNotify(value, nextValue, options))
|
|
121
|
+
return value;
|
|
122
|
+
value = nextValue;
|
|
123
|
+
for (const comp of Array.from(subscribers))
|
|
124
|
+
schedule(comp);
|
|
125
|
+
return value;
|
|
126
|
+
});
|
|
127
|
+
return [read, write];
|
|
128
|
+
}
|
|
129
|
+
export function effect(fn) {
|
|
130
|
+
if (!effectsEnabled)
|
|
131
|
+
return () => undefined;
|
|
132
|
+
const comp = createComputation(fn, currentOwner);
|
|
133
|
+
runComputation(comp);
|
|
134
|
+
return () => disposeOwner(comp);
|
|
135
|
+
}
|
|
136
|
+
export function cleanup(fn) {
|
|
137
|
+
if (!currentOwner)
|
|
138
|
+
throw new Error('cleanup() must be called inside root(), effect(), render(), hydrate(), or a component render scope.');
|
|
139
|
+
currentOwner.cleanups.push(fn);
|
|
140
|
+
}
|
|
141
|
+
export function memo(fn, options) {
|
|
142
|
+
if (!effectsEnabled)
|
|
143
|
+
return () => fn();
|
|
144
|
+
const [value, setValue] = signal(undefined, options);
|
|
145
|
+
effect(() => setValue(fn()));
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
export function batch(fn) {
|
|
149
|
+
batchDepth++;
|
|
150
|
+
try {
|
|
151
|
+
return fn();
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
batchDepth--;
|
|
155
|
+
flush();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export function untrack(fn) {
|
|
159
|
+
const previous = currentObserver;
|
|
160
|
+
currentObserver = null;
|
|
161
|
+
try {
|
|
162
|
+
return fn();
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
currentObserver = previous;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export function root(fn) {
|
|
169
|
+
const owner = createOwner(currentOwner);
|
|
170
|
+
const previousOwner = currentOwner;
|
|
171
|
+
currentOwner = owner;
|
|
172
|
+
try {
|
|
173
|
+
return fn(() => disposeOwner(owner));
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
currentOwner = previousOwner;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
export function getOwner() {
|
|
180
|
+
return currentOwner;
|
|
181
|
+
}
|
|
182
|
+
export function runWithOwner(owner, fn) {
|
|
183
|
+
const previousOwner = currentOwner;
|
|
184
|
+
currentOwner = owner;
|
|
185
|
+
try {
|
|
186
|
+
return fn();
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
currentOwner = previousOwner;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
export function runWithEffectsDisabled(fn) {
|
|
193
|
+
const previous = effectsEnabled;
|
|
194
|
+
effectsEnabled = false;
|
|
195
|
+
try {
|
|
196
|
+
return fn();
|
|
197
|
+
}
|
|
198
|
+
finally {
|
|
199
|
+
effectsEnabled = previous;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export function dispose(owner) {
|
|
203
|
+
if (owner && typeof owner === 'object' && 'owned' in owner)
|
|
204
|
+
disposeOwner(owner);
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/dom.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Renderable } from './jsx-runtime.js';
|
|
2
|
+
export { render, hydrate, dynamic } from './jsx-runtime.js';
|
|
3
|
+
export type ShowProps<T> = {
|
|
4
|
+
when: T | false | null | undefined;
|
|
5
|
+
fallback?: Renderable;
|
|
6
|
+
children?: Renderable | ((value: NonNullable<T>) => Renderable);
|
|
7
|
+
};
|
|
8
|
+
export declare function Show<T>(props: ShowProps<T>): Renderable;
|
|
9
|
+
export type ForProps<T> = {
|
|
10
|
+
each: readonly T[] | null | undefined;
|
|
11
|
+
by?: (item: T, index: number) => string | number;
|
|
12
|
+
fallback?: Renderable;
|
|
13
|
+
children: (item: T, index: () => number) => Renderable;
|
|
14
|
+
};
|
|
15
|
+
export declare function For<T>(props: ForProps<T>): Renderable;
|
|
16
|
+
//# sourceMappingURL=dom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,QAAQ,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC;CACjE,CAAC;AAEF,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAUvD;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;IACxB,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;IACjD,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,MAAM,KAAK,UAAU,CAAC;CACxD,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CA+GrD"}
|
package/dist/dom.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { cleanup, effect, root } from './core.js';
|
|
2
|
+
import { dynamic } from './jsx-runtime.js';
|
|
3
|
+
export { render, hydrate, dynamic } from './jsx-runtime.js';
|
|
4
|
+
export function Show(props) {
|
|
5
|
+
const resolve = () => {
|
|
6
|
+
const when = props.when;
|
|
7
|
+
if (when)
|
|
8
|
+
return typeof props.children === 'function'
|
|
9
|
+
? props.children(when)
|
|
10
|
+
: props.children;
|
|
11
|
+
return props.fallback ?? null;
|
|
12
|
+
};
|
|
13
|
+
if (typeof document === 'undefined')
|
|
14
|
+
return resolve();
|
|
15
|
+
return dynamic(resolve);
|
|
16
|
+
}
|
|
17
|
+
export function For(props) {
|
|
18
|
+
if (typeof document === 'undefined') {
|
|
19
|
+
const items = props.each ?? [];
|
|
20
|
+
if (items.length === 0)
|
|
21
|
+
return props.fallback ?? null;
|
|
22
|
+
return items.map((item, index) => props.children(item, () => index));
|
|
23
|
+
}
|
|
24
|
+
if (!props.by) {
|
|
25
|
+
return dynamic(() => {
|
|
26
|
+
const items = props.each ?? [];
|
|
27
|
+
if (items.length === 0)
|
|
28
|
+
return props.fallback ?? null;
|
|
29
|
+
return items.map((item, index) => props.children(item, () => index));
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const start = document.createComment('bd-for');
|
|
33
|
+
const end = document.createComment('/bd-for');
|
|
34
|
+
const fragment = document.createDocumentFragment();
|
|
35
|
+
fragment.append(start, end);
|
|
36
|
+
const rows = new Map();
|
|
37
|
+
const normalizeNodes = (value) => {
|
|
38
|
+
const host = document.createDocumentFragment();
|
|
39
|
+
// Dynamic child creation is delegated through the JSX runtime by appending into a disposable root.
|
|
40
|
+
root(dispose => {
|
|
41
|
+
rowsDisposers.push(dispose);
|
|
42
|
+
const append = (v) => {
|
|
43
|
+
if (v === null || v === undefined || v === false || v === true)
|
|
44
|
+
return;
|
|
45
|
+
if (Array.isArray(v)) {
|
|
46
|
+
for (const n of v)
|
|
47
|
+
append(n);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (v instanceof Node) {
|
|
51
|
+
host.appendChild(v);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
host.appendChild(document.createTextNode(String(v)));
|
|
55
|
+
};
|
|
56
|
+
append(value);
|
|
57
|
+
});
|
|
58
|
+
return Array.from(host.childNodes);
|
|
59
|
+
};
|
|
60
|
+
let rowsDisposers = [];
|
|
61
|
+
const clear = () => {
|
|
62
|
+
for (const row of rows.values())
|
|
63
|
+
row.dispose();
|
|
64
|
+
rows.clear();
|
|
65
|
+
let node = start.nextSibling;
|
|
66
|
+
while (node && node !== end) {
|
|
67
|
+
const next = node.nextSibling;
|
|
68
|
+
node.parentNode?.removeChild(node);
|
|
69
|
+
node = next;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
effect(() => {
|
|
73
|
+
const items = props.each ?? [];
|
|
74
|
+
if (items.length === 0) {
|
|
75
|
+
clear();
|
|
76
|
+
if (props.fallback !== undefined) {
|
|
77
|
+
const fallbackNodes = normalizeNodes(props.fallback);
|
|
78
|
+
for (const node of fallbackNodes)
|
|
79
|
+
end.parentNode?.insertBefore(node, end);
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const nextKeys = new Set();
|
|
84
|
+
const orderedRows = [];
|
|
85
|
+
items.forEach((item, index) => {
|
|
86
|
+
const key = props.by(item, index);
|
|
87
|
+
nextKeys.add(key);
|
|
88
|
+
let row = rows.get(key);
|
|
89
|
+
if (!row || row.item !== item) {
|
|
90
|
+
row?.dispose();
|
|
91
|
+
for (const node of row?.nodes ?? [])
|
|
92
|
+
node.parentNode?.removeChild(node);
|
|
93
|
+
let currentIndex = index;
|
|
94
|
+
let disposeRow = () => { };
|
|
95
|
+
const nodes = root(dispose => {
|
|
96
|
+
disposeRow = dispose;
|
|
97
|
+
const rendered = props.children(item, () => currentIndex);
|
|
98
|
+
const host = document.createDocumentFragment();
|
|
99
|
+
const append = (v) => {
|
|
100
|
+
if (v === null || v === undefined || v === false || v === true)
|
|
101
|
+
return;
|
|
102
|
+
if (Array.isArray(v)) {
|
|
103
|
+
for (const child of v)
|
|
104
|
+
append(child);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (v instanceof Node) {
|
|
108
|
+
host.appendChild(v);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
host.appendChild(document.createTextNode(String(v)));
|
|
112
|
+
};
|
|
113
|
+
append(rendered);
|
|
114
|
+
return Array.from(host.childNodes);
|
|
115
|
+
});
|
|
116
|
+
row = { key, item, nodes, dispose: disposeRow, index: () => currentIndex, setIndex: value => { currentIndex = value; } };
|
|
117
|
+
rows.set(key, row);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
row.setIndex(index);
|
|
121
|
+
}
|
|
122
|
+
orderedRows.push(row);
|
|
123
|
+
});
|
|
124
|
+
for (const [key, row] of Array.from(rows.entries())) {
|
|
125
|
+
if (!nextKeys.has(key)) {
|
|
126
|
+
row.dispose();
|
|
127
|
+
for (const node of row.nodes)
|
|
128
|
+
node.parentNode?.removeChild(node);
|
|
129
|
+
rows.delete(key);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
for (const row of orderedRows) {
|
|
133
|
+
for (const node of row.nodes)
|
|
134
|
+
end.parentNode?.insertBefore(node, end);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
cleanup(clear);
|
|
138
|
+
return fragment;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=dom.js.map
|
package/dist/dom.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
|
package/dist/hono.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Hono, type Context } from 'hono';
|
|
2
|
+
import { type MetaDescriptor, type ResponseLike } from './server.js';
|
|
3
|
+
import type { Component } from './jsx-runtime.js';
|
|
4
|
+
export type LoaderArgs<C extends Context = Context> = {
|
|
5
|
+
request: Request;
|
|
6
|
+
params: Record<string, string>;
|
|
7
|
+
ctx: C;
|
|
8
|
+
};
|
|
9
|
+
export type ActionArgs<C extends Context = Context> = LoaderArgs<C>;
|
|
10
|
+
export type RouteModule<C extends Context = Context> = {
|
|
11
|
+
default?: Component<any>;
|
|
12
|
+
loader?: (args: LoaderArgs<C>) => Promise<unknown> | unknown;
|
|
13
|
+
action?: (args: ActionArgs<C>) => Promise<ResponseLike | Record<string, unknown>> | ResponseLike | Record<string, unknown>;
|
|
14
|
+
meta?: (args: LoaderArgs<C> & {
|
|
15
|
+
data: Record<string, unknown>;
|
|
16
|
+
error?: unknown;
|
|
17
|
+
}) => MetaDescriptor | Promise<MetaDescriptor>;
|
|
18
|
+
headers?: (args: LoaderArgs<C> & {
|
|
19
|
+
data: Record<string, unknown>;
|
|
20
|
+
error?: unknown;
|
|
21
|
+
}) => HeadersInit | Promise<HeadersInit>;
|
|
22
|
+
};
|
|
23
|
+
export type RouteEntry<C extends Context = Context> = {
|
|
24
|
+
id: string;
|
|
25
|
+
path: string;
|
|
26
|
+
module: () => Promise<RouteModule<C>>;
|
|
27
|
+
layouts?: Array<() => Promise<RouteModule<C>>>;
|
|
28
|
+
error?: () => Promise<RouteModule<C>>;
|
|
29
|
+
notFound?: () => Promise<RouteModule<C>>;
|
|
30
|
+
hasClient?: boolean;
|
|
31
|
+
};
|
|
32
|
+
export type CreatePagesOptions<C extends Context = Context> = {
|
|
33
|
+
routes: RouteEntry<C>[];
|
|
34
|
+
/**
|
|
35
|
+
* Client entry emitted into documents only when the matched route manifest has hasClient !== false.
|
|
36
|
+
* Static routes generated by the Vite plugin omit this script automatically.
|
|
37
|
+
*/
|
|
38
|
+
entryClient?: string;
|
|
39
|
+
dataQueryParam?: string;
|
|
40
|
+
onError?: (error: unknown, ctx: C) => Response | Promise<Response>;
|
|
41
|
+
};
|
|
42
|
+
type Match<C extends Context = Context> = {
|
|
43
|
+
entry: RouteEntry<C>;
|
|
44
|
+
params: Record<string, string>;
|
|
45
|
+
};
|
|
46
|
+
export declare function createPages<C extends Context = Context>(options: CreatePagesOptions<C>): Hono;
|
|
47
|
+
export declare function matchRoute<C extends Context>(routes: RouteEntry<C>[], pathname: string): Match<C> | null;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=hono.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../src/hono.ts"],"names":[],"mappings":"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"}
|