remix 3.0.0-beta.0 → 3.0.0-beta.2

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 (88) hide show
  1. package/dist/fetch-router.d.ts +7 -0
  2. package/dist/fetch-router.d.ts.map +1 -1
  3. package/dist/node-tsx/load-module.d.ts +2 -0
  4. package/dist/node-tsx/load-module.d.ts.map +1 -0
  5. package/dist/node-tsx/load-module.js +2 -0
  6. package/dist/node-tsx.d.ts +3 -0
  7. package/dist/node-tsx.d.ts.map +1 -0
  8. package/{src/node-serve.ts → dist/node-tsx.js} +2 -1
  9. package/dist/render-middleware.d.ts +2 -0
  10. package/dist/render-middleware.d.ts.map +1 -0
  11. package/dist/render-middleware.js +2 -0
  12. package/dist/route-pattern/href.d.ts +2 -0
  13. package/dist/route-pattern/href.d.ts.map +1 -0
  14. package/dist/route-pattern/href.js +2 -0
  15. package/dist/route-pattern/join.d.ts +2 -0
  16. package/dist/route-pattern/join.d.ts.map +1 -0
  17. package/dist/route-pattern/join.js +2 -0
  18. package/dist/route-pattern/match.d.ts +2 -0
  19. package/dist/route-pattern/match.d.ts.map +1 -0
  20. package/dist/route-pattern/match.js +2 -0
  21. package/package.json +158 -44
  22. package/src/assert/README.md +109 -0
  23. package/src/assets/README.md +539 -0
  24. package/src/async-context-middleware/README.md +100 -0
  25. package/src/auth/README.md +445 -0
  26. package/src/auth-middleware/README.md +246 -0
  27. package/src/cli/README.md +78 -0
  28. package/src/compression-middleware/README.md +176 -0
  29. package/src/cookie/README.md +106 -0
  30. package/src/cop-middleware/README.md +117 -0
  31. package/src/cors-middleware/README.md +174 -0
  32. package/src/csrf-middleware/README.md +99 -0
  33. package/src/data-schema/README.md +422 -0
  34. package/src/data-table/README.md +552 -0
  35. package/src/data-table-mysql/README.md +97 -0
  36. package/src/data-table-postgres/README.md +74 -0
  37. package/src/data-table-sqlite/README.md +84 -0
  38. package/src/fetch-proxy/README.md +46 -0
  39. package/src/fetch-router/README.md +902 -0
  40. package/src/fetch-router.ts +7 -0
  41. package/src/file-storage/README.md +57 -0
  42. package/src/file-storage-s3/README.md +47 -0
  43. package/src/form-data-middleware/README.md +109 -0
  44. package/src/form-data-parser/README.md +160 -0
  45. package/src/fs/README.md +60 -0
  46. package/src/headers/README.md +629 -0
  47. package/src/html-template/README.md +101 -0
  48. package/src/lazy-file/README.md +109 -0
  49. package/src/logger-middleware/README.md +132 -0
  50. package/src/method-override-middleware/README.md +71 -0
  51. package/src/mime/README.md +110 -0
  52. package/src/multipart-parser/README.md +241 -0
  53. package/src/node-fetch-server/README.md +352 -0
  54. package/src/node-tsx/README.md +79 -0
  55. package/src/node-tsx/load-module.ts +2 -0
  56. package/{dist/node-serve.js → src/node-tsx.ts} +2 -1
  57. package/src/render-middleware/README.md +99 -0
  58. package/src/render-middleware.ts +2 -0
  59. package/src/route-pattern/README.md +291 -0
  60. package/src/route-pattern/href.ts +2 -0
  61. package/src/route-pattern/join.ts +2 -0
  62. package/src/route-pattern/match.ts +2 -0
  63. package/src/session/README.md +171 -0
  64. package/src/session-middleware/README.md +109 -0
  65. package/src/session-storage-memcache/README.md +37 -0
  66. package/src/session-storage-redis/README.md +37 -0
  67. package/src/static-middleware/README.md +89 -0
  68. package/src/tar-parser/README.md +74 -0
  69. package/src/terminal/README.md +92 -0
  70. package/src/test/README.md +430 -0
  71. package/src/ui/README.md +219 -0
  72. package/src/ui/accordion/README.md +166 -0
  73. package/src/ui/anchor/README.md +153 -0
  74. package/src/ui/animation/README.md +316 -0
  75. package/src/ui/breadcrumbs/README.md +55 -0
  76. package/src/ui/button/README.md +44 -0
  77. package/src/ui/combobox/README.md +145 -0
  78. package/src/ui/glyph/README.md +72 -0
  79. package/src/ui/listbox/README.md +115 -0
  80. package/src/ui/menu/README.md +96 -0
  81. package/src/ui/popover/README.md +122 -0
  82. package/src/ui/scroll-lock/README.md +33 -0
  83. package/src/ui/select/README.md +107 -0
  84. package/src/ui/server/README.md +90 -0
  85. package/src/ui/test/README.md +107 -0
  86. package/src/ui/theme/README.md +103 -0
  87. package/dist/node-serve.d.ts +0 -2
  88. package/dist/node-serve.d.ts.map +0 -1
@@ -0,0 +1,37 @@
1
+ # session-storage-memcache
2
+
3
+ Memcache session storage for [`remix/session`](https://github.com/remix-run/remix/tree/main/packages/session).
4
+
5
+ ## Installation
6
+
7
+ ```sh
8
+ npm i remix
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { createMemcacheSessionStorage } from 'remix/session-storage/memcache'
15
+
16
+ let sessionStorage = createMemcacheSessionStorage('127.0.0.1:11211', {
17
+ keyPrefix: 'my-app:session:',
18
+ ttlSeconds: 60 * 60 * 24 * 7,
19
+ })
20
+ ```
21
+
22
+ Available options:
23
+
24
+ - `useUnknownIds` (default: `false`) - reuse unknown session IDs sent by the client
25
+ - `keyPrefix` (default: `'remix:session:'`) - prefix for all Memcache keys
26
+ - `ttlSeconds` (default: `0`) - session expiration in seconds (`0` means no expiration)
27
+
28
+ Note: Memcache storage uses TCP sockets and requires a Node.js runtime.
29
+
30
+ ## Related Packages
31
+
32
+ - [`remix/session`](https://github.com/remix-run/remix/tree/main/packages/session) - Core session primitives and storage interface
33
+ - [`remix/middleware/session`](https://github.com/remix-run/remix/tree/main/packages/session-middleware) - Middleware for wiring session storage into request handling
34
+
35
+ ## License
36
+
37
+ See [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)
@@ -0,0 +1,37 @@
1
+ # session-storage-redis
2
+
3
+ Redis-backed session storage for [`remix/session`](https://github.com/remix-run/remix/tree/main/packages/session).
4
+ Use this package when app servers need to share session state through Redis.
5
+
6
+ ## Installation
7
+
8
+ ```sh
9
+ npm i remix
10
+ ```
11
+
12
+ ## Usage
13
+
14
+ ```ts
15
+ import { createClient } from 'redis'
16
+ import { createRedisSessionStorage } from 'remix/session-storage/redis'
17
+
18
+ let redis = createClient({ url: process.env.REDIS_URL })
19
+ await redis.connect()
20
+
21
+ let sessionStorage = createRedisSessionStorage(redis, {
22
+ keyPrefix: 'session:',
23
+ ttl: 60 * 60 * 24,
24
+ })
25
+ ```
26
+
27
+ ## Options
28
+
29
+ `createRedisSessionStorage(client, options)` supports:
30
+
31
+ - `keyPrefix` (`string`, default: `'session:'`)
32
+ - `ttl` (`number` seconds)
33
+ - `useUnknownIds` (`boolean`, default: `false`)
34
+
35
+ ## License
36
+
37
+ See [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)
@@ -0,0 +1,89 @@
1
+ # static-middleware
2
+
3
+ Static file serving middleware for Remix. Serves static files from a directory with support for ETags, range requests, and conditional requests.
4
+
5
+ ## Features
6
+
7
+ - [ETag](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) support (weak and strong)
8
+ - [Range requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests) support (HTTP 206 Partial Content)
9
+ - [Conditional request](https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests) support (If-None-Match, If-Modified-Since)
10
+ - Path traversal protection
11
+ - Automatic fallback to next middleware/handler if file not found
12
+
13
+ ## Installation
14
+
15
+ ```sh
16
+ npm i remix
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ Static middleware is useful for serving static files from a directory.
22
+
23
+ ```ts
24
+ import { createRouter } from 'remix/router'
25
+ import { staticFiles } from 'remix/middleware/static'
26
+
27
+ let router = createRouter({
28
+ middleware: [staticFiles('./public')],
29
+ })
30
+
31
+ router.get('/', () => new Response('Home'))
32
+ ```
33
+
34
+ ### With Cache Control
35
+
36
+ Internally, the `staticFiles()` middleware uses the [`createFileResponse()` helper from `remix/response`](https://github.com/remix-run/remix/tree/main/packages/response/README.md#file-responses) to send files with full HTTP semantics. This means it also accepts the same options as the `createFileResponse()` helper.
37
+
38
+ ```ts
39
+ let router = createRouter({
40
+ middleware: [
41
+ staticFiles('./public', {
42
+ cacheControl: 'public, max-age=31536000, immutable', // 1 year
43
+ }),
44
+ ],
45
+ })
46
+ ```
47
+
48
+ ### Filter Files
49
+
50
+ ```ts
51
+ let router = createRouter({
52
+ middleware: [
53
+ staticFiles('./public', {
54
+ filter(path) {
55
+ // Don't serve hidden files
56
+ return !path.startsWith('.')
57
+ },
58
+ }),
59
+ ],
60
+ })
61
+ ```
62
+
63
+ ### Multiple Directories
64
+
65
+ ```ts
66
+ let router = createRouter({
67
+ middleware: [
68
+ staticFiles('./public'),
69
+ staticFiles('./assets', {
70
+ cacheControl: 'public, max-age=31536000',
71
+ }),
72
+ ],
73
+ })
74
+ ```
75
+
76
+ ## Security
77
+
78
+ - Prevents path traversal attacks (e.g., `../../../etc/passwd`)
79
+ - Only serves files with GET and HEAD requests
80
+ - Respects the configured root directory boundary
81
+
82
+ ## Related Packages
83
+
84
+ - [`fetch-router`](https://github.com/remix-run/remix/tree/main/packages/fetch-router) - Router for the web Fetch API
85
+ - [`lazy-file`](https://github.com/remix-run/remix/tree/main/packages/lazy-file) - Used internally for streaming file contents
86
+
87
+ ## License
88
+
89
+ See [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)
@@ -0,0 +1,74 @@
1
+ # tar-parser
2
+
3
+ Streaming [tar archive](<https://en.wikipedia.org/wiki/Tar_(computing)>) parsing for JavaScript. `tar-parser` handles POSIX/GNU/PAX archives incrementally so large tar files can be processed without buffering the full payload.
4
+
5
+ ## Features
6
+
7
+ - **Universal Runtime** - Runs anywhere JavaScript runs
8
+ - **Web Streams** - Built on the standard [web Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API), so it's composable with `fetch()` streams
9
+ - **Format Support** - Supports POSIX, GNU, and PAX tar formats
10
+ - **Memory Efficient** - Does not buffer anything in normal usage
11
+ - **Zero Dependencies** - No external dependencies
12
+
13
+ ## Installation
14
+
15
+ ```sh
16
+ npm i remix
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ The main parser interface is the `parseTar(archive, handler)` function:
22
+
23
+ ```ts
24
+ import { parseTar } from 'remix/tar-parser'
25
+
26
+ let response = await fetch('https://github.com/remix-run/remix/archive/refs/heads/main.tar.gz')
27
+
28
+ await parseTar(response.body.pipeThrough(new DecompressionStream('gzip')), (entry) => {
29
+ console.log(entry.name, entry.size)
30
+ })
31
+ ```
32
+
33
+ If you're parsing an archive with filename encodings other than UTF-8, use the `filenameEncoding` option:
34
+
35
+ ```ts
36
+ let response = await fetch(/* ... */)
37
+
38
+ await parseTar(response.body, { filenameEncoding: 'latin1' }, (entry) => {
39
+ console.log(entry.name, entry.size)
40
+ })
41
+ ```
42
+
43
+ ## Benchmark
44
+
45
+ `tar-parser` performs on par with other popular tar parsing libraries on Node.js.
46
+
47
+ ```
48
+ > @remix-run/tar-parser@0.0.0 bench /Users/michael/Projects/remix-the-web/packages/tar-parser
49
+ > node ./bench/runner.ts
50
+
51
+ Platform: Darwin (24.0.0)
52
+ CPU: Apple M1 Pro
53
+ Date: 12/6/2024, 11:00:55 AM
54
+ Node.js v22.8.0
55
+ ┌────────────┬────────────────────┐
56
+ │ (index) │ lodash npm package │
57
+ ├────────────┼────────────────────┤
58
+ │ tar-parser │ '6.23 ms ± 0.58' │
59
+ │ tar-stream │ '6.72 ms ± 2.24' │
60
+ │ node-tar │ '6.49 ms ± 0.44' │
61
+ └────────────┴────────────────────┘
62
+ ```
63
+
64
+ ## Related Packages
65
+
66
+ - [`multipart-parser`](https://github.com/remix-run/remix/tree/main/packages/multipart-parser) - Fast, streaming multipart parser for JavaScript
67
+
68
+ ## Credits
69
+
70
+ `tar-parser` is based on the excellent [tar-stream package](https://www.npmjs.com/package/tar-stream) (MIT license) and adopts the same core parsing algorithm, utility functions, and many test cases.
71
+
72
+ ## License
73
+
74
+ See [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)
@@ -0,0 +1,92 @@
1
+ # terminal
2
+
3
+ Terminal output utilities for JavaScript libraries and CLIs. It provides small primitives for ANSI styles, color support detection, escape sequences, and testable stdout/stderr handling.
4
+
5
+ ## Features
6
+
7
+ - **ANSI Styles** - Apply common modifiers, foreground colors, and background colors
8
+ - **Color Detection** - Respect `CI`, `NO_COLOR`, `FORCE_COLOR`, `TERM=dumb`, TTY streams, and explicit style overrides
9
+ - **Terminal Controls** - Generate escape sequences for cursor movement, line clearing, and cursor visibility
10
+ - **Testable Streams** - Create terminal instances around injected stdout/stderr/stdin streams
11
+
12
+ ## Installation
13
+
14
+ ```sh
15
+ npm i remix
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ ```ts
21
+ import { createTerminal } from 'remix/terminal'
22
+
23
+ let terminal = createTerminal()
24
+
25
+ terminal.writeLine(`${terminal.styles.green('ready')} listening on port 3000`)
26
+ terminal.errorLine(terminal.styles.red('failed to start'))
27
+ ```
28
+
29
+ ### ANSI Styles
30
+
31
+ Use `createStyles` when you only need formatting helpers.
32
+
33
+ ```ts
34
+ import { createStyles } from 'remix/terminal'
35
+
36
+ let styles = createStyles({ colors: true })
37
+
38
+ console.log(styles.bold(styles.cyan('Ready')))
39
+ console.log(styles.format('warning', 'dim', 'yellow', 'bgBlackBright'))
40
+ ```
41
+
42
+ Style helpers preserve outer styles when nested formatted strings close an inner style.
43
+
44
+ ```ts
45
+ console.log(styles.red(`Error: ${styles.bold('fatal')} retrying`))
46
+ ```
47
+
48
+ Supported modifiers include `bold`, `dim`, `italic`, `underline`, `overline`, `inverse`, and `strikethrough`. Supported colors include the base foreground/background ANSI colors, bright variants, and `gray`/`grey` aliases.
49
+
50
+ By default, color detection disables styles in CI, when `NO_COLOR` is present, for `TERM=dumb`, and outside TTY output streams. Set `colors` to `true` or `false` to override automatic detection.
51
+
52
+ ### Terminal Controls
53
+
54
+ Use `ansi` for raw terminal escape sequences.
55
+
56
+ ```ts
57
+ import { ansi } from 'remix/terminal'
58
+
59
+ process.stdout.write(ansi.clearLine)
60
+ process.stdout.write(ansi.cursorTo(0))
61
+ process.stdout.write('Updated status')
62
+ ```
63
+
64
+ ### Testing Output
65
+
66
+ Inject streams to test terminal output without writing to the real console.
67
+
68
+ ```ts
69
+ import { createTerminal } from 'remix/terminal'
70
+
71
+ let output = ''
72
+
73
+ let terminal = createTerminal({
74
+ colors: false,
75
+ stdout: {
76
+ write(chunk) {
77
+ output += chunk
78
+ },
79
+ },
80
+ })
81
+
82
+ terminal.writeLine(terminal.styles.green('ok'))
83
+ ```
84
+
85
+ ## Related Packages
86
+
87
+ - [`logger-middleware`](https://github.com/remix-run/remix/tree/main/packages/logger-middleware) - HTTP request/response logging middleware
88
+ - [`test`](https://github.com/remix-run/remix/tree/main/packages/test) - Browser-based test framework for Remix components
89
+
90
+ ## License
91
+
92
+ See [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)