sinwan 0.1.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -39
- package/dist/cjs/index.development.js +2373 -842
- package/dist/cjs/index.development.js.map +22 -18
- package/dist/cjs/index.production.min.js +2 -2
- package/dist/cjs/index.production.min.js.map +22 -18
- package/dist/cjs/jsx/jsx-dev-runtime.development.js +6 -16
- package/dist/cjs/jsx/jsx-dev-runtime.development.js.map +3 -3
- package/dist/cjs/jsx/jsx-dev-runtime.production.min.js +2 -2
- package/dist/cjs/jsx/jsx-dev-runtime.production.min.js.map +3 -3
- package/dist/cjs/jsx/jsx-runtime.development.js +6 -16
- package/dist/cjs/jsx/jsx-runtime.development.js.map +3 -3
- package/dist/cjs/jsx/jsx-runtime.production.min.js +2 -2
- package/dist/cjs/jsx/jsx-runtime.production.min.js.map +3 -3
- package/dist/cjs/renderer/index.development.js +1581 -0
- package/dist/cjs/renderer/index.development.js.map +25 -0
- package/dist/cjs/renderer/index.production.min.js +3 -0
- package/dist/cjs/renderer/index.production.min.js.map +25 -0
- package/dist/cjs/server/index.development.js +1210 -362
- package/dist/cjs/server/index.development.js.map +13 -10
- package/dist/cjs/server/index.production.min.js +2 -2
- package/dist/cjs/server/index.production.min.js.map +13 -10
- package/dist/component/control-flow.d.ts +71 -0
- package/dist/component/control-flow.d.ts.map +1 -0
- package/dist/component/index.d.ts +3 -1
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/instance.d.ts +7 -1
- package/dist/component/instance.d.ts.map +1 -1
- package/dist/component/lifecycle.d.ts +2 -1
- package/dist/component/lifecycle.d.ts.map +1 -1
- package/dist/component/provide-inject.d.ts +11 -5
- package/dist/component/provide-inject.d.ts.map +1 -1
- package/dist/esm/index.development.js +2253 -744
- package/dist/esm/index.development.js.map +22 -18
- package/dist/esm/index.production.min.js +2 -2
- package/dist/esm/index.production.min.js.map +22 -18
- package/dist/esm/jsx/jsx-dev-runtime.development.js +6 -16
- package/dist/esm/jsx/jsx-dev-runtime.development.js.map +3 -3
- package/dist/esm/jsx/jsx-dev-runtime.production.min.js +2 -2
- package/dist/esm/jsx/jsx-dev-runtime.production.min.js.map +3 -3
- package/dist/esm/jsx/jsx-runtime.development.js +6 -16
- package/dist/esm/jsx/jsx-runtime.development.js.map +3 -3
- package/dist/esm/jsx/jsx-runtime.production.min.js +2 -2
- package/dist/esm/jsx/jsx-runtime.production.min.js.map +3 -3
- package/dist/esm/renderer/index.development.js +1530 -0
- package/dist/esm/renderer/index.development.js.map +25 -0
- package/dist/esm/renderer/index.production.min.js +4 -0
- package/dist/esm/renderer/index.production.min.js.map +25 -0
- package/dist/esm/server/index.development.js +1210 -362
- package/dist/esm/server/index.development.js.map +13 -10
- package/dist/esm/server/index.production.min.js +2 -2
- package/dist/esm/server/index.production.min.js.map +13 -10
- package/dist/hydration/walk.d.ts.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/jsx/jsx-runtime.d.ts +13 -0
- package/dist/jsx/jsx-runtime.d.ts.map +1 -1
- package/dist/jsx/jsx-types.d.ts +122 -57
- package/dist/jsx/jsx-types.d.ts.map +1 -1
- package/dist/renderer/attributes.d.ts +11 -0
- package/dist/renderer/attributes.d.ts.map +1 -1
- package/dist/renderer/dom-ops.d.ts +4 -1
- package/dist/renderer/dom-ops.d.ts.map +1 -1
- package/dist/renderer/index.d.ts +2 -2
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/mount.d.ts +2 -5
- package/dist/renderer/mount.d.ts.map +1 -1
- package/dist/renderer/render-children.d.ts +2 -2
- package/dist/renderer/render-children.d.ts.map +1 -1
- package/dist/renderer/render-control-flow.d.ts +13 -0
- package/dist/renderer/render-control-flow.d.ts.map +1 -0
- package/dist/renderer/render-element.d.ts +1 -1
- package/dist/renderer/render-element.d.ts.map +1 -1
- package/dist/renderer/types.d.ts +10 -1
- package/dist/renderer/types.d.ts.map +1 -1
- package/dist/renderer/unmount.d.ts +20 -0
- package/dist/renderer/unmount.d.ts.map +1 -0
- package/dist/renderer.d.ts +1 -0
- package/dist/renderer.js +7 -0
- package/dist/renderer.mjs +4 -0
- package/dist/server/attribute-utils.d.ts +2 -0
- package/dist/server/attribute-utils.d.ts.map +1 -0
- package/dist/server/hydration-markers.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/renderer.d.ts.map +1 -1
- package/dist/server/stream.d.ts +9 -1
- package/dist/server/stream.d.ts.map +1 -1
- package/dist/types.d.ts +8 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +19 -5
package/README.md
CHANGED
|
@@ -1,67 +1,94 @@
|
|
|
1
|
-
# Sinwan
|
|
1
|
+
# Sinwan
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A small reactive UI library for JSX, fine-grained reactivity, SSR, and hydration.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Sinwan gives you signals, component lifecycle hooks, a direct DOM renderer, and a React-shaped JSX runtime without a virtual DOM.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install sinwan
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
bun add sinwan
|
|
15
|
+
```
|
|
6
16
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
17
|
+
## JSX Setup
|
|
18
|
+
|
|
19
|
+
Use the automatic JSX runtime:
|
|
20
|
+
|
|
21
|
+
```jsonc
|
|
22
|
+
{
|
|
23
|
+
"compilerOptions": {
|
|
24
|
+
"jsx": "react-jsx",
|
|
25
|
+
"jsxImportSource": "sinwan"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
14
29
|
|
|
15
30
|
## Quick Start
|
|
16
31
|
|
|
17
32
|
```tsx
|
|
18
|
-
import {
|
|
33
|
+
import { createComponent, mount, signal } from "sinwan";
|
|
19
34
|
|
|
20
|
-
const Counter = createComponent
|
|
21
|
-
const count = signal(
|
|
22
|
-
|
|
23
|
-
onMounted(() => console.log("Counter mounted!"));
|
|
35
|
+
const Counter = createComponent(() => {
|
|
36
|
+
const count = signal(0);
|
|
24
37
|
|
|
25
38
|
return (
|
|
26
|
-
<
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</div>
|
|
39
|
+
<button onClick={() => (count.value += 1)}>
|
|
40
|
+
Count: {count}
|
|
41
|
+
</button>
|
|
30
42
|
);
|
|
31
43
|
});
|
|
32
44
|
|
|
33
45
|
mount(Counter, document.getElementById("app")!);
|
|
34
46
|
```
|
|
35
47
|
|
|
36
|
-
##
|
|
48
|
+
## Features
|
|
49
|
+
|
|
50
|
+
- Fine-grained reactivity: `signal`, `computed`, `effect`, `batch`, `nextTick`
|
|
51
|
+
- JSX runtime: `sinwan/jsx-runtime` and `sinwan/jsx-dev-runtime`
|
|
52
|
+
- Components: `createComponent`, lifecycle hooks, provide/inject, `<Show>`, `<For>`
|
|
53
|
+
- DOM renderer: reactive text, attributes, events, refs, namespaces, and cleanup
|
|
54
|
+
- Server rendering: `renderToString`, `streamPage`, hydratable strings and streams
|
|
55
|
+
- Hydration: reuse server-rendered DOM with `hydrate`
|
|
56
|
+
|
|
57
|
+
## SSR and Hydration
|
|
37
58
|
|
|
38
59
|
```tsx
|
|
39
60
|
// Server
|
|
40
|
-
import { renderToHydratableString } from "
|
|
41
|
-
const html = await renderToHydratableString(Counter, { initial: 5 });
|
|
61
|
+
import { renderToHydratableString } from "sinwan/server";
|
|
42
62
|
|
|
43
|
-
|
|
44
|
-
import { hydrate } from "Sinwan";
|
|
45
|
-
hydrate(Counter, document.getElementById("app")!, { initial: 5 });
|
|
63
|
+
const html = await renderToHydratableString(App, { initial: 5 });
|
|
46
64
|
```
|
|
47
65
|
|
|
48
|
-
|
|
66
|
+
```tsx
|
|
67
|
+
// Client
|
|
68
|
+
import { hydrate } from "sinwan";
|
|
49
69
|
|
|
70
|
+
hydrate(App, document.getElementById("app")!, { initial: 5 });
|
|
50
71
|
```
|
|
51
|
-
src/
|
|
52
|
-
├── types.ts # Core types (SinwanNode, SinwanElement, etc.)
|
|
53
|
-
├── escaper.ts # HTML escaping
|
|
54
|
-
├── jsx/ # JSX runtime
|
|
55
|
-
├── reactivity/ # signal, computed, effect, batch, scheduler
|
|
56
|
-
├── component/ # createComponent, lifecycle, provide/inject
|
|
57
|
-
├── renderer/ # Client DOM renderer (mount, render-element, etc.)
|
|
58
|
-
├── hydration/ # Client hydration (hydrate, markers, walk)
|
|
59
|
-
├── server/ # SSR (renderToString, stream, hydration-markers)
|
|
60
|
-
└── index.ts # Main barrel export
|
|
61
|
-
```
|
|
62
72
|
|
|
63
|
-
##
|
|
73
|
+
## Documentation
|
|
74
|
+
|
|
75
|
+
- [Documentation v1](./docs/v1/README.md)
|
|
76
|
+
- [API reference](./docs/v1/15-api-reference.md)
|
|
77
|
+
- [Changelog](./docs/v1/CHANGELOG.md)
|
|
78
|
+
- [Troubleshooting](./docs/v1/17-troubleshooting.md)
|
|
64
79
|
|
|
65
|
-
|
|
80
|
+
## Development
|
|
81
|
+
|
|
82
|
+
```sh
|
|
66
83
|
bun test
|
|
84
|
+
bun run typecheck
|
|
85
|
+
bun run build
|
|
67
86
|
```
|
|
87
|
+
|
|
88
|
+
## Author
|
|
89
|
+
|
|
90
|
+
Mohammed Ben Cheikh
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
MIT - see [LICENSE](./LICENSE).
|