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.
- package/dist/fetch-router.d.ts +7 -0
- package/dist/fetch-router.d.ts.map +1 -1
- package/dist/node-tsx/load-module.d.ts +2 -0
- package/dist/node-tsx/load-module.d.ts.map +1 -0
- package/dist/node-tsx/load-module.js +2 -0
- package/dist/node-tsx.d.ts +3 -0
- package/dist/node-tsx.d.ts.map +1 -0
- package/{src/node-serve.ts → dist/node-tsx.js} +2 -1
- package/dist/render-middleware.d.ts +2 -0
- package/dist/render-middleware.d.ts.map +1 -0
- package/dist/render-middleware.js +2 -0
- package/dist/route-pattern/href.d.ts +2 -0
- package/dist/route-pattern/href.d.ts.map +1 -0
- package/dist/route-pattern/href.js +2 -0
- package/dist/route-pattern/join.d.ts +2 -0
- package/dist/route-pattern/join.d.ts.map +1 -0
- package/dist/route-pattern/join.js +2 -0
- package/dist/route-pattern/match.d.ts +2 -0
- package/dist/route-pattern/match.d.ts.map +1 -0
- package/dist/route-pattern/match.js +2 -0
- package/package.json +158 -44
- package/src/assert/README.md +109 -0
- package/src/assets/README.md +539 -0
- package/src/async-context-middleware/README.md +100 -0
- package/src/auth/README.md +445 -0
- package/src/auth-middleware/README.md +246 -0
- package/src/cli/README.md +78 -0
- package/src/compression-middleware/README.md +176 -0
- package/src/cookie/README.md +106 -0
- package/src/cop-middleware/README.md +117 -0
- package/src/cors-middleware/README.md +174 -0
- package/src/csrf-middleware/README.md +99 -0
- package/src/data-schema/README.md +422 -0
- package/src/data-table/README.md +552 -0
- package/src/data-table-mysql/README.md +97 -0
- package/src/data-table-postgres/README.md +74 -0
- package/src/data-table-sqlite/README.md +84 -0
- package/src/fetch-proxy/README.md +46 -0
- package/src/fetch-router/README.md +902 -0
- package/src/fetch-router.ts +7 -0
- package/src/file-storage/README.md +57 -0
- package/src/file-storage-s3/README.md +47 -0
- package/src/form-data-middleware/README.md +109 -0
- package/src/form-data-parser/README.md +160 -0
- package/src/fs/README.md +60 -0
- package/src/headers/README.md +629 -0
- package/src/html-template/README.md +101 -0
- package/src/lazy-file/README.md +109 -0
- package/src/logger-middleware/README.md +132 -0
- package/src/method-override-middleware/README.md +71 -0
- package/src/mime/README.md +110 -0
- package/src/multipart-parser/README.md +241 -0
- package/src/node-fetch-server/README.md +352 -0
- package/src/node-tsx/README.md +79 -0
- package/src/node-tsx/load-module.ts +2 -0
- package/{dist/node-serve.js → src/node-tsx.ts} +2 -1
- package/src/render-middleware/README.md +99 -0
- package/src/render-middleware.ts +2 -0
- package/src/route-pattern/README.md +291 -0
- package/src/route-pattern/href.ts +2 -0
- package/src/route-pattern/join.ts +2 -0
- package/src/route-pattern/match.ts +2 -0
- package/src/session/README.md +171 -0
- package/src/session-middleware/README.md +109 -0
- package/src/session-storage-memcache/README.md +37 -0
- package/src/session-storage-redis/README.md +37 -0
- package/src/static-middleware/README.md +89 -0
- package/src/tar-parser/README.md +74 -0
- package/src/terminal/README.md +92 -0
- package/src/test/README.md +430 -0
- package/src/ui/README.md +219 -0
- package/src/ui/accordion/README.md +166 -0
- package/src/ui/anchor/README.md +153 -0
- package/src/ui/animation/README.md +316 -0
- package/src/ui/breadcrumbs/README.md +55 -0
- package/src/ui/button/README.md +44 -0
- package/src/ui/combobox/README.md +145 -0
- package/src/ui/glyph/README.md +72 -0
- package/src/ui/listbox/README.md +115 -0
- package/src/ui/menu/README.md +96 -0
- package/src/ui/popover/README.md +122 -0
- package/src/ui/scroll-lock/README.md +33 -0
- package/src/ui/select/README.md +107 -0
- package/src/ui/server/README.md +90 -0
- package/src/ui/test/README.md +107 -0
- package/src/ui/theme/README.md +103 -0
- package/dist/node-serve.d.ts +0 -2
- 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)
|