@barefootjs/hono 0.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.
Files changed (81) hide show
  1. package/dist/adapter/hono-adapter.d.ts +141 -0
  2. package/dist/adapter/hono-adapter.d.ts.map +1 -0
  3. package/dist/adapter/index.d.ts +6 -0
  4. package/dist/adapter/index.d.ts.map +1 -0
  5. package/dist/adapter/index.js +632 -0
  6. package/dist/app.d.ts +131 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +139 -0
  9. package/dist/async.d.ts +15 -0
  10. package/dist/async.d.ts.map +1 -0
  11. package/dist/async.js +12 -0
  12. package/dist/build.d.ts +65 -0
  13. package/dist/build.d.ts.map +1 -0
  14. package/dist/build.js +785 -0
  15. package/dist/client-shim.d.ts +59 -0
  16. package/dist/client-shim.d.ts.map +1 -0
  17. package/dist/client-shim.js +90 -0
  18. package/dist/dev-worker.d.ts +25 -0
  19. package/dist/dev-worker.d.ts.map +1 -0
  20. package/dist/dev-worker.js +65 -0
  21. package/dist/dev.d.ts +36 -0
  22. package/dist/dev.d.ts.map +1 -0
  23. package/dist/dev.js +418 -0
  24. package/dist/dialog-context.d.ts +13 -0
  25. package/dist/dialog-context.d.ts.map +1 -0
  26. package/dist/dialog-context.js +10 -0
  27. package/dist/index.d.ts +13 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +632 -0
  30. package/dist/jsx/jsx-dev-runtime/index.d.ts +9 -0
  31. package/dist/jsx/jsx-dev-runtime/index.d.ts.map +1 -0
  32. package/dist/jsx/jsx-dev-runtime/index.js +6 -0
  33. package/dist/jsx/jsx-runtime/index.d.ts +32 -0
  34. package/dist/jsx/jsx-runtime/index.d.ts.map +1 -0
  35. package/dist/jsx/jsx-runtime/index.js +10 -0
  36. package/dist/portal-ssr.d.ts +22 -0
  37. package/dist/portal-ssr.d.ts.map +1 -0
  38. package/dist/portal-ssr.js +73 -0
  39. package/dist/portals.d.ts +26 -0
  40. package/dist/portals.d.ts.map +1 -0
  41. package/dist/portals.js +41 -0
  42. package/dist/preload.d.ts +56 -0
  43. package/dist/preload.d.ts.map +1 -0
  44. package/dist/preload.js +51 -0
  45. package/dist/scripts.d.ts +80 -0
  46. package/dist/scripts.d.ts.map +1 -0
  47. package/dist/scripts.js +198 -0
  48. package/dist/test-render.d.ts +28 -0
  49. package/dist/test-render.d.ts.map +1 -0
  50. package/dist/utils.d.ts +16 -0
  51. package/dist/utils.d.ts.map +1 -0
  52. package/dist/utils.js +16 -0
  53. package/package.json +116 -0
  54. package/src/__tests__/async.test.tsx +106 -0
  55. package/src/__tests__/bfscripts-entry-roots.test.tsx +135 -0
  56. package/src/__tests__/build.test.ts +299 -0
  57. package/src/__tests__/dev.test.tsx +123 -0
  58. package/src/__tests__/hydration-props-type.test.ts +141 -0
  59. package/src/__tests__/manifest-scripts.test.ts +87 -0
  60. package/src/__tests__/scaffold.test.ts +209 -0
  61. package/src/__tests__/ssr-context-bridge.test.ts +110 -0
  62. package/src/__tests__/string-literal-css-var-prop.test.ts +84 -0
  63. package/src/__tests__/stub-deps-scripts.test.ts +183 -0
  64. package/src/adapter/hono-adapter.ts +1114 -0
  65. package/src/adapter/index.ts +6 -0
  66. package/src/app.ts +220 -0
  67. package/src/async.tsx +55 -0
  68. package/src/build.ts +230 -0
  69. package/src/client-shim.ts +164 -0
  70. package/src/dev-worker.ts +93 -0
  71. package/src/dev.tsx +146 -0
  72. package/src/dialog-context.tsx +44 -0
  73. package/src/index.ts +26 -0
  74. package/src/jsx/jsx-dev-runtime/index.ts +9 -0
  75. package/src/jsx/jsx-runtime/index.ts +40 -0
  76. package/src/portal-ssr.tsx +92 -0
  77. package/src/portals.tsx +98 -0
  78. package/src/preload.tsx +166 -0
  79. package/src/scripts.tsx +220 -0
  80. package/src/test-render.ts +143 -0
  81. package/src/utils.ts +26 -0
package/dist/dev.js ADDED
@@ -0,0 +1,418 @@
1
+ // src/dev.tsx
2
+ var {mkdir, readFile, watch} = (() => ({}));
3
+
4
+ // node:path
5
+ function assertPath(path) {
6
+ if (typeof path !== "string")
7
+ throw new TypeError("Path must be a string. Received " + JSON.stringify(path));
8
+ }
9
+ function normalizeStringPosix(path, allowAboveRoot) {
10
+ var res = "", lastSegmentLength = 0, lastSlash = -1, dots = 0, code;
11
+ for (var i = 0;i <= path.length; ++i) {
12
+ if (i < path.length)
13
+ code = path.charCodeAt(i);
14
+ else if (code === 47)
15
+ break;
16
+ else
17
+ code = 47;
18
+ if (code === 47) {
19
+ if (lastSlash === i - 1 || dots === 1)
20
+ ;
21
+ else if (lastSlash !== i - 1 && dots === 2) {
22
+ if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 || res.charCodeAt(res.length - 2) !== 46) {
23
+ if (res.length > 2) {
24
+ var lastSlashIndex = res.lastIndexOf("/");
25
+ if (lastSlashIndex !== res.length - 1) {
26
+ if (lastSlashIndex === -1)
27
+ res = "", lastSegmentLength = 0;
28
+ else
29
+ res = res.slice(0, lastSlashIndex), lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
30
+ lastSlash = i, dots = 0;
31
+ continue;
32
+ }
33
+ } else if (res.length === 2 || res.length === 1) {
34
+ res = "", lastSegmentLength = 0, lastSlash = i, dots = 0;
35
+ continue;
36
+ }
37
+ }
38
+ if (allowAboveRoot) {
39
+ if (res.length > 0)
40
+ res += "/..";
41
+ else
42
+ res = "..";
43
+ lastSegmentLength = 2;
44
+ }
45
+ } else {
46
+ if (res.length > 0)
47
+ res += "/" + path.slice(lastSlash + 1, i);
48
+ else
49
+ res = path.slice(lastSlash + 1, i);
50
+ lastSegmentLength = i - lastSlash - 1;
51
+ }
52
+ lastSlash = i, dots = 0;
53
+ } else if (code === 46 && dots !== -1)
54
+ ++dots;
55
+ else
56
+ dots = -1;
57
+ }
58
+ return res;
59
+ }
60
+ function _format(sep, pathObject) {
61
+ var dir = pathObject.dir || pathObject.root, base = pathObject.base || (pathObject.name || "") + (pathObject.ext || "");
62
+ if (!dir)
63
+ return base;
64
+ if (dir === pathObject.root)
65
+ return dir + base;
66
+ return dir + sep + base;
67
+ }
68
+ function resolve() {
69
+ var resolvedPath = "", resolvedAbsolute = false, cwd;
70
+ for (var i = arguments.length - 1;i >= -1 && !resolvedAbsolute; i--) {
71
+ var path;
72
+ if (i >= 0)
73
+ path = arguments[i];
74
+ else {
75
+ if (cwd === undefined)
76
+ cwd = process.cwd();
77
+ path = cwd;
78
+ }
79
+ if (assertPath(path), path.length === 0)
80
+ continue;
81
+ resolvedPath = path + "/" + resolvedPath, resolvedAbsolute = path.charCodeAt(0) === 47;
82
+ }
83
+ if (resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute), resolvedAbsolute)
84
+ if (resolvedPath.length > 0)
85
+ return "/" + resolvedPath;
86
+ else
87
+ return "/";
88
+ else if (resolvedPath.length > 0)
89
+ return resolvedPath;
90
+ else
91
+ return ".";
92
+ }
93
+ function normalize(path) {
94
+ if (assertPath(path), path.length === 0)
95
+ return ".";
96
+ var isAbsolute = path.charCodeAt(0) === 47, trailingSeparator = path.charCodeAt(path.length - 1) === 47;
97
+ if (path = normalizeStringPosix(path, !isAbsolute), path.length === 0 && !isAbsolute)
98
+ path = ".";
99
+ if (path.length > 0 && trailingSeparator)
100
+ path += "/";
101
+ if (isAbsolute)
102
+ return "/" + path;
103
+ return path;
104
+ }
105
+ function isAbsolute(path) {
106
+ return assertPath(path), path.length > 0 && path.charCodeAt(0) === 47;
107
+ }
108
+ function join() {
109
+ if (arguments.length === 0)
110
+ return ".";
111
+ var joined;
112
+ for (var i = 0;i < arguments.length; ++i) {
113
+ var arg = arguments[i];
114
+ if (assertPath(arg), arg.length > 0)
115
+ if (joined === undefined)
116
+ joined = arg;
117
+ else
118
+ joined += "/" + arg;
119
+ }
120
+ if (joined === undefined)
121
+ return ".";
122
+ return normalize(joined);
123
+ }
124
+ function relative(from, to) {
125
+ if (assertPath(from), assertPath(to), from === to)
126
+ return "";
127
+ if (from = resolve(from), to = resolve(to), from === to)
128
+ return "";
129
+ var fromStart = 1;
130
+ for (;fromStart < from.length; ++fromStart)
131
+ if (from.charCodeAt(fromStart) !== 47)
132
+ break;
133
+ var fromEnd = from.length, fromLen = fromEnd - fromStart, toStart = 1;
134
+ for (;toStart < to.length; ++toStart)
135
+ if (to.charCodeAt(toStart) !== 47)
136
+ break;
137
+ var toEnd = to.length, toLen = toEnd - toStart, length = fromLen < toLen ? fromLen : toLen, lastCommonSep = -1, i = 0;
138
+ for (;i <= length; ++i) {
139
+ if (i === length) {
140
+ if (toLen > length) {
141
+ if (to.charCodeAt(toStart + i) === 47)
142
+ return to.slice(toStart + i + 1);
143
+ else if (i === 0)
144
+ return to.slice(toStart + i);
145
+ } else if (fromLen > length) {
146
+ if (from.charCodeAt(fromStart + i) === 47)
147
+ lastCommonSep = i;
148
+ else if (i === 0)
149
+ lastCommonSep = 0;
150
+ }
151
+ break;
152
+ }
153
+ var fromCode = from.charCodeAt(fromStart + i), toCode = to.charCodeAt(toStart + i);
154
+ if (fromCode !== toCode)
155
+ break;
156
+ else if (fromCode === 47)
157
+ lastCommonSep = i;
158
+ }
159
+ var out = "";
160
+ for (i = fromStart + lastCommonSep + 1;i <= fromEnd; ++i)
161
+ if (i === fromEnd || from.charCodeAt(i) === 47)
162
+ if (out.length === 0)
163
+ out += "..";
164
+ else
165
+ out += "/..";
166
+ if (out.length > 0)
167
+ return out + to.slice(toStart + lastCommonSep);
168
+ else {
169
+ if (toStart += lastCommonSep, to.charCodeAt(toStart) === 47)
170
+ ++toStart;
171
+ return to.slice(toStart);
172
+ }
173
+ }
174
+ function _makeLong(path) {
175
+ return path;
176
+ }
177
+ function dirname(path) {
178
+ if (assertPath(path), path.length === 0)
179
+ return ".";
180
+ var code = path.charCodeAt(0), hasRoot = code === 47, end = -1, matchedSlash = true;
181
+ for (var i = path.length - 1;i >= 1; --i)
182
+ if (code = path.charCodeAt(i), code === 47) {
183
+ if (!matchedSlash) {
184
+ end = i;
185
+ break;
186
+ }
187
+ } else
188
+ matchedSlash = false;
189
+ if (end === -1)
190
+ return hasRoot ? "/" : ".";
191
+ if (hasRoot && end === 1)
192
+ return "//";
193
+ return path.slice(0, end);
194
+ }
195
+ function basename(path, ext) {
196
+ if (ext !== undefined && typeof ext !== "string")
197
+ throw new TypeError('"ext" argument must be a string');
198
+ assertPath(path);
199
+ var start = 0, end = -1, matchedSlash = true, i;
200
+ if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {
201
+ if (ext.length === path.length && ext === path)
202
+ return "";
203
+ var extIdx = ext.length - 1, firstNonSlashEnd = -1;
204
+ for (i = path.length - 1;i >= 0; --i) {
205
+ var code = path.charCodeAt(i);
206
+ if (code === 47) {
207
+ if (!matchedSlash) {
208
+ start = i + 1;
209
+ break;
210
+ }
211
+ } else {
212
+ if (firstNonSlashEnd === -1)
213
+ matchedSlash = false, firstNonSlashEnd = i + 1;
214
+ if (extIdx >= 0)
215
+ if (code === ext.charCodeAt(extIdx)) {
216
+ if (--extIdx === -1)
217
+ end = i;
218
+ } else
219
+ extIdx = -1, end = firstNonSlashEnd;
220
+ }
221
+ }
222
+ if (start === end)
223
+ end = firstNonSlashEnd;
224
+ else if (end === -1)
225
+ end = path.length;
226
+ return path.slice(start, end);
227
+ } else {
228
+ for (i = path.length - 1;i >= 0; --i)
229
+ if (path.charCodeAt(i) === 47) {
230
+ if (!matchedSlash) {
231
+ start = i + 1;
232
+ break;
233
+ }
234
+ } else if (end === -1)
235
+ matchedSlash = false, end = i + 1;
236
+ if (end === -1)
237
+ return "";
238
+ return path.slice(start, end);
239
+ }
240
+ }
241
+ function extname(path) {
242
+ assertPath(path);
243
+ var startDot = -1, startPart = 0, end = -1, matchedSlash = true, preDotState = 0;
244
+ for (var i = path.length - 1;i >= 0; --i) {
245
+ var code = path.charCodeAt(i);
246
+ if (code === 47) {
247
+ if (!matchedSlash) {
248
+ startPart = i + 1;
249
+ break;
250
+ }
251
+ continue;
252
+ }
253
+ if (end === -1)
254
+ matchedSlash = false, end = i + 1;
255
+ if (code === 46) {
256
+ if (startDot === -1)
257
+ startDot = i;
258
+ else if (preDotState !== 1)
259
+ preDotState = 1;
260
+ } else if (startDot !== -1)
261
+ preDotState = -1;
262
+ }
263
+ if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)
264
+ return "";
265
+ return path.slice(startDot, end);
266
+ }
267
+ function format(pathObject) {
268
+ if (pathObject === null || typeof pathObject !== "object")
269
+ throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject);
270
+ return _format("/", pathObject);
271
+ }
272
+ function parse(path) {
273
+ assertPath(path);
274
+ var ret = { root: "", dir: "", base: "", ext: "", name: "" };
275
+ if (path.length === 0)
276
+ return ret;
277
+ var code = path.charCodeAt(0), isAbsolute2 = code === 47, start;
278
+ if (isAbsolute2)
279
+ ret.root = "/", start = 1;
280
+ else
281
+ start = 0;
282
+ var startDot = -1, startPart = 0, end = -1, matchedSlash = true, i = path.length - 1, preDotState = 0;
283
+ for (;i >= start; --i) {
284
+ if (code = path.charCodeAt(i), code === 47) {
285
+ if (!matchedSlash) {
286
+ startPart = i + 1;
287
+ break;
288
+ }
289
+ continue;
290
+ }
291
+ if (end === -1)
292
+ matchedSlash = false, end = i + 1;
293
+ if (code === 46) {
294
+ if (startDot === -1)
295
+ startDot = i;
296
+ else if (preDotState !== 1)
297
+ preDotState = 1;
298
+ } else if (startDot !== -1)
299
+ preDotState = -1;
300
+ }
301
+ if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
302
+ if (end !== -1)
303
+ if (startPart === 0 && isAbsolute2)
304
+ ret.base = ret.name = path.slice(1, end);
305
+ else
306
+ ret.base = ret.name = path.slice(startPart, end);
307
+ } else {
308
+ if (startPart === 0 && isAbsolute2)
309
+ ret.name = path.slice(1, startDot), ret.base = path.slice(1, end);
310
+ else
311
+ ret.name = path.slice(startPart, startDot), ret.base = path.slice(startPart, end);
312
+ ret.ext = path.slice(startDot, end);
313
+ }
314
+ if (startPart > 0)
315
+ ret.dir = path.slice(0, startPart - 1);
316
+ else if (isAbsolute2)
317
+ ret.dir = "/";
318
+ return ret;
319
+ }
320
+ var sep = "/";
321
+ var delimiter = ":";
322
+ var posix = ((p) => (p.posix = p, p))({ resolve, normalize, isAbsolute, join, relative, _makeLong, dirname, basename, extname, format, parse, sep, delimiter, win32: null, posix: null });
323
+
324
+ // src/dev.tsx
325
+ var DEV_SUBDIR = ".dev";
326
+ var BUILD_ID_FILE = "build-id";
327
+ var HEARTBEAT_MS = 5000;
328
+ function isDevDefault() {
329
+ return true;
330
+ }
331
+ function createDevReloader(options) {
332
+ const { distDir, enabled = isDevDefault() } = options;
333
+ return async (c) => {
334
+ if (!enabled)
335
+ return c.notFound();
336
+ const devDir = resolve(distDir, DEV_SUBDIR);
337
+ await mkdir(devDir, { recursive: true });
338
+ const buildIdPath = resolve(devDir, BUILD_ID_FILE);
339
+ const signal = c.req.raw.signal;
340
+ const lastEventId = (c.req.header("Last-Event-ID") ?? "").trim();
341
+ const readBuildId = async () => {
342
+ try {
343
+ return (await readFile(buildIdPath, "utf8")).trim();
344
+ } catch {
345
+ return "";
346
+ }
347
+ };
348
+ const stream = new ReadableStream({
349
+ async start(controller) {
350
+ const encoder = new TextEncoder;
351
+ const send = (chunk) => {
352
+ try {
353
+ controller.enqueue(encoder.encode(chunk));
354
+ } catch {}
355
+ };
356
+ send(`retry: 1000
357
+
358
+ `);
359
+ let lastSentId = "";
360
+ const initialId = await readBuildId();
361
+ if (initialId) {
362
+ lastSentId = initialId;
363
+ const event = lastEventId && lastEventId !== initialId ? "reload" : "hello";
364
+ send(`event: ${event}
365
+ id: ${initialId}
366
+ data: ${initialId}
367
+
368
+ `);
369
+ }
370
+ const heartbeat = setInterval(() => send(`: hb
371
+
372
+ `), HEARTBEAT_MS);
373
+ try {
374
+ const iter = watch(devDir, { signal });
375
+ for await (const event of iter) {
376
+ if (event.filename !== BUILD_ID_FILE)
377
+ continue;
378
+ const id = await readBuildId();
379
+ if (!id || id === lastSentId)
380
+ continue;
381
+ lastSentId = id;
382
+ send(`event: reload
383
+ id: ${id}
384
+ data: ${id}
385
+
386
+ `);
387
+ }
388
+ } catch (err) {
389
+ const name = err?.name;
390
+ if (name !== "AbortError") {
391
+ const message = err.message ?? "watch error";
392
+ send(`event: error
393
+ data: ${JSON.stringify(message)}
394
+
395
+ `);
396
+ }
397
+ } finally {
398
+ clearInterval(heartbeat);
399
+ try {
400
+ controller.close();
401
+ } catch {}
402
+ }
403
+ },
404
+ cancel() {}
405
+ });
406
+ return new Response(stream, {
407
+ headers: {
408
+ "Content-Type": "text/event-stream",
409
+ "Cache-Control": "no-cache, no-transform",
410
+ Connection: "keep-alive",
411
+ "X-Accel-Buffering": "no"
412
+ }
413
+ });
414
+ };
415
+ }
416
+ export {
417
+ createDevReloader
418
+ };
@@ -0,0 +1,13 @@
1
+ export type DialogContextValue = {
2
+ scopeId: string;
3
+ };
4
+ /**
5
+ * Context for sharing scopeId between Dialog components.
6
+ */
7
+ export declare const DialogContext: import("hono/jsx").Context<DialogContextValue | null>;
8
+ /**
9
+ * Hook to access Dialog context.
10
+ * Returns null if not inside a DialogRoot.
11
+ */
12
+ export declare function useDialogContext(): DialogContextValue | null;
13
+ //# sourceMappingURL=dialog-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-context.d.ts","sourceRoot":"","sources":["../src/dialog-context.tsx"],"names":[],"mappings":"AA4BA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,uDAAiD,CAAA;AAE3E;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,GAAG,IAAI,CAE5D"}
@@ -0,0 +1,10 @@
1
+ // src/dialog-context.tsx
2
+ import { createContext, useContext } from "hono/jsx";
3
+ var DialogContext = createContext(null);
4
+ function useDialogContext() {
5
+ return useContext(DialogContext);
6
+ }
7
+ export {
8
+ useDialogContext,
9
+ DialogContext
10
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * BarefootJS Hono Integration
3
+ *
4
+ * Provides Hono-specific adapters and utilities for BarefootJS.
5
+ */
6
+ export { HonoAdapter, honoAdapter } from './adapter';
7
+ export type { HonoAdapterOptions } from './adapter';
8
+ export type { CollectedScript } from './scripts';
9
+ export type { CollectedPortal } from './portals';
10
+ export type { PortalProps } from './portal-ssr';
11
+ export type { BfAsyncProps } from './async';
12
+ export type { DialogContextValue } from './dialog-context';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACpD,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAInD,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAIhD,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI/C,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAI3C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}