zero-query 1.1.1 → 1.2.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.
Files changed (154) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +2 -0
  3. package/cli/args.js +33 -33
  4. package/cli/commands/build-api.js +443 -442
  5. package/cli/commands/build.js +254 -247
  6. package/cli/commands/bundle.js +1228 -1224
  7. package/cli/commands/create.js +137 -121
  8. package/cli/commands/dev/devtools/index.js +56 -56
  9. package/cli/commands/dev/devtools/js/components.js +49 -49
  10. package/cli/commands/dev/devtools/js/core.js +423 -423
  11. package/cli/commands/dev/devtools/js/elements.js +421 -421
  12. package/cli/commands/dev/devtools/js/network.js +166 -166
  13. package/cli/commands/dev/devtools/js/performance.js +73 -73
  14. package/cli/commands/dev/devtools/js/router.js +105 -105
  15. package/cli/commands/dev/devtools/js/source.js +132 -132
  16. package/cli/commands/dev/devtools/js/stats.js +35 -35
  17. package/cli/commands/dev/devtools/js/tabs.js +79 -79
  18. package/cli/commands/dev/devtools/panel.html +95 -95
  19. package/cli/commands/dev/devtools/styles.css +244 -244
  20. package/cli/commands/dev/index.js +107 -107
  21. package/cli/commands/dev/logger.js +75 -75
  22. package/cli/commands/dev/overlay.js +858 -858
  23. package/cli/commands/dev/server.js +220 -220
  24. package/cli/commands/dev/validator.js +94 -94
  25. package/cli/commands/dev/watcher.js +172 -172
  26. package/cli/help.js +114 -112
  27. package/cli/index.js +52 -52
  28. package/cli/scaffold/default/LICENSE +21 -21
  29. package/cli/scaffold/default/app/app.js +207 -207
  30. package/cli/scaffold/default/app/components/about.js +201 -201
  31. package/cli/scaffold/default/app/components/api-demo.js +143 -143
  32. package/cli/scaffold/default/app/components/contact-card.js +231 -231
  33. package/cli/scaffold/default/app/components/contacts/contacts.css +706 -706
  34. package/cli/scaffold/default/app/components/contacts/contacts.html +200 -200
  35. package/cli/scaffold/default/app/components/contacts/contacts.js +196 -196
  36. package/cli/scaffold/default/app/components/counter.js +127 -127
  37. package/cli/scaffold/default/app/components/home.js +249 -249
  38. package/cli/scaffold/default/app/components/not-found.js +16 -16
  39. package/cli/scaffold/default/app/components/playground/playground.css +115 -115
  40. package/cli/scaffold/default/app/components/playground/playground.html +161 -161
  41. package/cli/scaffold/default/app/components/playground/playground.js +116 -116
  42. package/cli/scaffold/default/app/components/todos.js +225 -225
  43. package/cli/scaffold/default/app/components/toolkit/toolkit.css +97 -97
  44. package/cli/scaffold/default/app/components/toolkit/toolkit.html +146 -146
  45. package/cli/scaffold/default/app/components/toolkit/toolkit.js +280 -280
  46. package/cli/scaffold/default/app/routes.js +15 -15
  47. package/cli/scaffold/default/app/store.js +101 -101
  48. package/cli/scaffold/default/global.css +552 -552
  49. package/cli/scaffold/default/index.html +99 -99
  50. package/cli/scaffold/minimal/app/app.js +85 -85
  51. package/cli/scaffold/minimal/app/components/about.js +68 -68
  52. package/cli/scaffold/minimal/app/components/counter.js +122 -122
  53. package/cli/scaffold/minimal/app/components/home.js +68 -68
  54. package/cli/scaffold/minimal/app/components/not-found.js +16 -16
  55. package/cli/scaffold/minimal/app/routes.js +9 -9
  56. package/cli/scaffold/minimal/app/store.js +36 -36
  57. package/cli/scaffold/minimal/global.css +300 -300
  58. package/cli/scaffold/minimal/index.html +44 -44
  59. package/cli/scaffold/ssr/app/app.js +41 -41
  60. package/cli/scaffold/ssr/app/components/about.js +55 -55
  61. package/cli/scaffold/ssr/app/components/blog/index.js +65 -65
  62. package/cli/scaffold/ssr/app/components/blog/post.js +86 -86
  63. package/cli/scaffold/ssr/app/components/home.js +37 -37
  64. package/cli/scaffold/ssr/app/components/not-found.js +15 -15
  65. package/cli/scaffold/ssr/app/routes.js +8 -8
  66. package/cli/scaffold/ssr/global.css +228 -228
  67. package/cli/scaffold/ssr/index.html +37 -37
  68. package/cli/scaffold/ssr/package.json +8 -8
  69. package/cli/scaffold/ssr/server/data/posts.js +144 -144
  70. package/cli/scaffold/ssr/server/index.js +213 -213
  71. package/cli/scaffold/webrtc/app/app.js +11 -0
  72. package/cli/scaffold/webrtc/app/components/video-room.js +295 -0
  73. package/cli/scaffold/webrtc/app/lib/room.js +252 -0
  74. package/cli/scaffold/webrtc/assets/.gitkeep +0 -0
  75. package/cli/scaffold/webrtc/global.css +250 -0
  76. package/cli/scaffold/webrtc/index.html +21 -0
  77. package/cli/utils.js +305 -287
  78. package/dist/API.md +661 -0
  79. package/dist/zquery.dist.zip +0 -0
  80. package/dist/zquery.js +10313 -6614
  81. package/dist/zquery.min.js +8 -631
  82. package/index.d.ts +570 -371
  83. package/index.js +311 -240
  84. package/package.json +76 -70
  85. package/src/component.js +1709 -1691
  86. package/src/core.js +921 -921
  87. package/src/diff.js +497 -497
  88. package/src/errors.js +209 -209
  89. package/src/expression.js +922 -922
  90. package/src/http.js +242 -242
  91. package/src/package.json +1 -1
  92. package/src/reactive.js +255 -255
  93. package/src/router.js +843 -843
  94. package/src/ssr.js +418 -418
  95. package/src/store.js +318 -318
  96. package/src/utils.js +515 -515
  97. package/src/webrtc/e2ee.js +351 -0
  98. package/src/webrtc/errors.js +116 -0
  99. package/src/webrtc/ice.js +301 -0
  100. package/src/webrtc/index.js +131 -0
  101. package/src/webrtc/joinToken.js +119 -0
  102. package/src/webrtc/observe.js +172 -0
  103. package/src/webrtc/peer.js +351 -0
  104. package/src/webrtc/reactive.js +268 -0
  105. package/src/webrtc/room.js +625 -0
  106. package/src/webrtc/sdp.js +302 -0
  107. package/src/webrtc/sfu/index.js +43 -0
  108. package/src/webrtc/sfu/livekit.js +131 -0
  109. package/src/webrtc/sfu/mediasoup.js +150 -0
  110. package/src/webrtc/signaling.js +373 -0
  111. package/src/webrtc/turn.js +237 -0
  112. package/tests/_helpers/webrtcFakes.js +289 -0
  113. package/tests/audit.test.js +4158 -4158
  114. package/tests/cli.test.js +1136 -1103
  115. package/tests/compare.test.js +497 -486
  116. package/tests/component.test.js +3969 -3938
  117. package/tests/core.test.js +1910 -1910
  118. package/tests/dev-server.test.js +489 -489
  119. package/tests/diff.test.js +1416 -1416
  120. package/tests/docs.test.js +1664 -1650
  121. package/tests/electron-features.test.js +864 -864
  122. package/tests/errors.test.js +619 -619
  123. package/tests/expression.test.js +1056 -1056
  124. package/tests/http.test.js +648 -648
  125. package/tests/reactive.test.js +819 -819
  126. package/tests/router.test.js +2327 -2327
  127. package/tests/ssr.test.js +870 -870
  128. package/tests/store.test.js +830 -830
  129. package/tests/test-minifier.js +153 -153
  130. package/tests/test-ssr.js +27 -27
  131. package/tests/utils.test.js +1377 -1377
  132. package/tests/webrtc/e2ee.test.js +283 -0
  133. package/tests/webrtc/ice.test.js +202 -0
  134. package/tests/webrtc/joinToken.test.js +89 -0
  135. package/tests/webrtc/observe.test.js +111 -0
  136. package/tests/webrtc/peer.test.js +373 -0
  137. package/tests/webrtc/reactive.test.js +235 -0
  138. package/tests/webrtc/room.test.js +406 -0
  139. package/tests/webrtc/sdp.test.js +151 -0
  140. package/tests/webrtc/sfu-livekit.test.js +119 -0
  141. package/tests/webrtc/sfu.test.js +160 -0
  142. package/tests/webrtc/signaling.test.js +251 -0
  143. package/tests/webrtc/turn.test.js +256 -0
  144. package/types/collection.d.ts +383 -383
  145. package/types/component.d.ts +186 -186
  146. package/types/errors.d.ts +135 -135
  147. package/types/http.d.ts +92 -92
  148. package/types/misc.d.ts +201 -201
  149. package/types/reactive.d.ts +98 -98
  150. package/types/router.d.ts +190 -190
  151. package/types/ssr.d.ts +102 -102
  152. package/types/store.d.ts +146 -146
  153. package/types/utils.d.ts +245 -245
  154. package/types/webrtc.d.ts +653 -0
@@ -0,0 +1,250 @@
1
+ /* {{NAME}} - WebRTC mini-room demo */
2
+ * { box-sizing: border-box; }
3
+
4
+ :root {
5
+ --bg: #0b0c10;
6
+ --panel: #151821;
7
+ --panel-2: #1c2030;
8
+ --border: #262b38;
9
+ --text: #e8ecf3;
10
+ --text-muted: #8a93a6;
11
+ --accent: #5b8def;
12
+ --accent-2: #16a34a;
13
+ --danger: #e1455c;
14
+ --warn: #f59e0b;
15
+ }
16
+
17
+ html, body {
18
+ margin: 0;
19
+ padding: 0;
20
+ background: var(--bg);
21
+ color: var(--text);
22
+ font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
23
+ height: 100vh;
24
+ overflow: hidden;
25
+ }
26
+
27
+ body { display: flex; flex-direction: column; }
28
+
29
+ .topbar {
30
+ flex: 0 0 auto;
31
+ display: flex;
32
+ align-items: baseline;
33
+ justify-content: space-between;
34
+ padding: 0.6rem 1rem;
35
+ border-bottom: 1px solid var(--border);
36
+ background: var(--panel);
37
+ }
38
+ .topbar .brand { font-weight: 700; font-size: 1rem; }
39
+ .topbar small { color: var(--text-muted); }
40
+
41
+ main { flex: 1 1 auto; min-height: 0; }
42
+
43
+ /* ---- Lobby (pre-join) -------------------------------------------------- */
44
+
45
+ .lobby {
46
+ max-width: 560px;
47
+ margin: 4rem auto;
48
+ padding: 2rem;
49
+ background: var(--panel);
50
+ border: 1px solid var(--border);
51
+ border-radius: 0.75rem;
52
+ }
53
+ .lobby h1 { margin: 0 0 0.5rem; font-size: 1.4rem; }
54
+ .lobby .lead { color: var(--text-muted); line-height: 1.5; }
55
+ .lobby code { background: #0d101a; padding: 0.1rem 0.35rem; border-radius: 0.25rem; }
56
+
57
+ .join-form {
58
+ display: flex;
59
+ flex-direction: column;
60
+ gap: 0.75rem;
61
+ margin: 1.25rem 0;
62
+ }
63
+ .join-form label {
64
+ display: flex;
65
+ flex-direction: column;
66
+ gap: 0.3rem;
67
+ font-size: 0.85rem;
68
+ color: var(--text-muted);
69
+ }
70
+ .join-form input {
71
+ background: #0d101a;
72
+ color: var(--text);
73
+ border: 1px solid var(--border);
74
+ border-radius: 0.375rem;
75
+ padding: 0.55rem 0.75rem;
76
+ font-family: inherit;
77
+ font-size: 0.95rem;
78
+ }
79
+
80
+ button {
81
+ background: var(--panel-2);
82
+ color: var(--text);
83
+ border: 1px solid var(--border);
84
+ border-radius: 0.375rem;
85
+ padding: 0.5rem 0.9rem;
86
+ font-weight: 600;
87
+ cursor: pointer;
88
+ font-family: inherit;
89
+ }
90
+ button:hover { background: #232939; }
91
+ button.primary { background: var(--accent); border-color: transparent; color: #fff; }
92
+ button.primary:hover { filter: brightness(1.1); }
93
+ button.leave { background: var(--danger); border-color: transparent; color: #fff; }
94
+ button.off { background: #3a2030; color: #f3b6c2; }
95
+ button.active { background: var(--accent-2); border-color: transparent; color: #fff; }
96
+
97
+ .status { color: var(--text-muted); font-size: 0.9rem; margin: 0.5rem 0 0; }
98
+ .status.error { color: var(--danger); }
99
+
100
+ /* ---- Room layout (in-call) -------------------------------------------- */
101
+
102
+ .room {
103
+ display: grid;
104
+ grid-template-columns: 220px 1fr 280px;
105
+ height: 100%;
106
+ min-height: 0;
107
+ }
108
+
109
+ .sidebar {
110
+ background: var(--panel);
111
+ border-right: 1px solid var(--border);
112
+ display: flex;
113
+ flex-direction: column;
114
+ padding: 0.75rem;
115
+ min-height: 0;
116
+ }
117
+ .room-meta { padding: 0.25rem 0.5rem 0.75rem; border-bottom: 1px solid var(--border); }
118
+ .room-name { font-weight: 700; font-size: 1.05rem; }
119
+ .room-sub { color: var(--text-muted); font-size: 0.8rem; margin-top: 0.15rem; }
120
+
121
+ .roster { flex: 1 1 auto; overflow-y: auto; margin-top: 0.5rem; }
122
+ .roster-row {
123
+ display: flex; align-items: center; gap: 0.5rem;
124
+ padding: 0.4rem 0.5rem;
125
+ border-radius: 0.375rem;
126
+ font-size: 0.9rem;
127
+ }
128
+ .roster-row.me { color: var(--accent); }
129
+ .roster-row small { color: var(--text-muted); font-weight: normal; }
130
+ .roster-row .dot {
131
+ width: 8px; height: 8px; border-radius: 50%;
132
+ background: var(--accent-2);
133
+ flex: 0 0 auto;
134
+ }
135
+ .roster-row .dot.off { background: var(--text-muted); }
136
+
137
+ .sidebar .leave { margin-top: 0.5rem; }
138
+
139
+ /* ---- Stage (videos + controls) ---------------------------------------- */
140
+
141
+ .stage {
142
+ display: flex;
143
+ flex-direction: column;
144
+ min-height: 0;
145
+ background: var(--bg);
146
+ }
147
+
148
+ .tiles {
149
+ flex: 1 1 auto;
150
+ min-height: 0;
151
+ overflow-y: auto;
152
+ padding: 0.75rem;
153
+ display: grid;
154
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
155
+ grid-auto-rows: minmax(180px, auto);
156
+ gap: 0.75rem;
157
+ }
158
+ .tile {
159
+ background: #000;
160
+ border: 1px solid var(--border);
161
+ border-radius: 0.5rem;
162
+ overflow: hidden;
163
+ aspect-ratio: 16 / 9;
164
+ position: relative;
165
+ }
166
+ .tile.self { border-color: var(--accent); }
167
+ .tile video { width: 100%; height: 100%; object-fit: cover; background: #000; }
168
+ .tile .label {
169
+ position: absolute;
170
+ left: 0.5rem; bottom: 0.5rem;
171
+ background: rgba(0, 0, 0, 0.65);
172
+ padding: 0.15rem 0.5rem;
173
+ border-radius: 0.25rem;
174
+ font-size: 0.8rem;
175
+ }
176
+ .tile .camoff {
177
+ position: absolute; inset: 0;
178
+ display: flex; align-items: center; justify-content: center;
179
+ background: #1a1d28;
180
+ color: var(--text-muted);
181
+ font-size: 0.95rem;
182
+ }
183
+
184
+ .controls {
185
+ flex: 0 0 auto;
186
+ display: flex; gap: 0.5rem; align-items: center;
187
+ padding: 0.75rem;
188
+ background: var(--panel);
189
+ border-top: 1px solid var(--border);
190
+ }
191
+ .controls .status-inline {
192
+ margin-left: auto;
193
+ color: var(--text-muted);
194
+ font-size: 0.85rem;
195
+ text-align: right;
196
+ max-width: 50%;
197
+ }
198
+ .controls .status-inline.error { color: var(--danger); }
199
+
200
+ /* ---- Chat ------------------------------------------------------------- */
201
+
202
+ .chat {
203
+ background: var(--panel);
204
+ border-left: 1px solid var(--border);
205
+ display: flex;
206
+ flex-direction: column;
207
+ min-height: 0;
208
+ }
209
+ .chat-header {
210
+ padding: 0.75rem 1rem;
211
+ border-bottom: 1px solid var(--border);
212
+ font-weight: 600;
213
+ }
214
+ .chat-log {
215
+ flex: 1 1 auto;
216
+ overflow-y: auto;
217
+ padding: 0.75rem;
218
+ display: flex;
219
+ flex-direction: column;
220
+ gap: 0.5rem;
221
+ }
222
+ .chat-log .empty { color: var(--text-muted); font-size: 0.9rem; text-align: center; margin: auto 0; }
223
+ .msg .who { color: var(--accent); font-weight: 600; margin-right: 0.4rem; font-size: 0.85rem; }
224
+ .msg.mine .who { color: var(--accent-2); }
225
+ .msg .text { word-wrap: break-word; }
226
+
227
+ .chat-form {
228
+ flex: 0 0 auto;
229
+ display: flex;
230
+ gap: 0.4rem;
231
+ padding: 0.6rem;
232
+ border-top: 1px solid var(--border);
233
+ }
234
+ .chat-form input {
235
+ flex: 1 1 auto;
236
+ background: #0d101a;
237
+ color: var(--text);
238
+ border: 1px solid var(--border);
239
+ border-radius: 0.375rem;
240
+ padding: 0.45rem 0.6rem;
241
+ font-family: inherit;
242
+ }
243
+
244
+ /* ---- Responsive tweaks ------------------------------------------------- */
245
+
246
+ @media (max-width: 900px) {
247
+ .room { grid-template-columns: 1fr; grid-template-rows: auto 1fr auto; }
248
+ .sidebar, .chat { border: none; border-bottom: 1px solid var(--border); }
249
+ .chat { max-height: 40vh; }
250
+ }
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>{{NAME}} - zQuery WebRTC Demo</title>
7
+ <base href="/">
8
+ <link rel="stylesheet" href="global.css">
9
+ <script src="zquery.min.js"></script>
10
+ <script type="module" src="app/app.js"></script>
11
+ </head>
12
+ <body>
13
+ <header class="topbar">
14
+ <span class="brand">⚡ {{NAME}}</span>
15
+ <small>zQuery <span id="nav-version"></span> &middot; WebRTC demo</small>
16
+ </header>
17
+ <main>
18
+ <video-room></video-room>
19
+ </main>
20
+ </body>
21
+ </html>