toiljs 0.0.15 → 0.0.19
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/.babelrc +13 -13
- package/.gitattributes +2 -2
- package/.github/ISSUE_TEMPLATE/bug_report.md +38 -38
- package/.github/ISSUE_TEMPLATE/bug_report.yml +90 -90
- package/.github/ISSUE_TEMPLATE/config.yml +8 -8
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
- package/.github/PULL_REQUEST_TEMPLATE.md +43 -43
- package/.github/changelog-config.json +45 -45
- package/.github/dependabot.yml +27 -27
- package/.github/workflows/ci.yml +191 -191
- package/.prettierrc.json +11 -11
- package/.vscode/settings.json +9 -9
- package/CHANGELOG.md +116 -5
- package/LICENSE +187 -187
- package/README.md +524 -315
- package/as-pect.asconfig.json +34 -34
- package/as-pect.config.js +65 -65
- package/assets/logo.svg +36 -36
- package/build/backend/.tsbuildinfo +1 -1
- package/build/backend/index.d.ts +1 -0
- package/build/backend/index.js +20 -1
- package/build/cli/.tsbuildinfo +1 -1
- package/build/cli/index.js +1320 -696
- package/build/client/.tsbuildinfo +1 -1
- package/build/client/dev/devtools.d.ts +6 -0
- package/build/client/dev/devtools.js +479 -0
- package/build/client/dev/error-overlay.d.ts +9 -0
- package/build/client/dev/error-overlay.js +19 -4
- package/build/client/errors.d.ts +1 -0
- package/build/client/errors.js +3 -0
- package/build/client/index.d.ts +2 -0
- package/build/client/index.js +2 -0
- package/build/client/navigation/prefetch.d.ts +1 -0
- package/build/client/navigation/prefetch.js +35 -0
- package/build/client/routing/Router.js +1 -1
- package/build/client/routing/hooks.js +6 -2
- package/build/client/routing/loader.d.ts +23 -0
- package/build/client/routing/loader.js +53 -7
- package/build/client/routing/mount.js +4 -3
- package/build/client/rpc.d.ts +1 -0
- package/build/client/rpc.js +37 -0
- package/build/compiler/.tsbuildinfo +1 -1
- package/build/compiler/config.d.ts +16 -0
- package/build/compiler/config.js +9 -0
- package/build/compiler/docs.js +78 -21
- package/build/compiler/generate.js +5 -4
- package/build/compiler/index.d.ts +3 -2
- package/build/compiler/index.js +2 -2
- package/build/compiler/plugin.js +228 -0
- package/build/compiler/prerender.d.ts +1 -0
- package/build/compiler/prerender.js +1 -1
- package/build/compiler/seo.d.ts +1 -1
- package/build/compiler/seo.js +20 -5
- package/build/compiler/ssg.js +39 -2
- package/build/compiler/vite.js +25 -0
- package/build/io/.tsbuildinfo +1 -1
- package/build/io/codec.d.ts +54 -0
- package/build/io/codec.js +143 -0
- package/build/io/index.d.ts +1 -2
- package/build/io/index.js +1 -2
- package/build/logger/.tsbuildinfo +1 -1
- package/build/shared/.tsbuildinfo +1 -1
- package/eslint.config.js +48 -48
- package/examples/basic/client/404.tsx +11 -11
- package/examples/basic/client/components/.gitkeep +1 -1
- package/examples/basic/client/global-error.tsx +13 -13
- package/examples/basic/client/layout.tsx +25 -25
- package/examples/basic/client/public/images/.gitkeep +1 -1
- package/examples/basic/client/public/images/logo.svg +36 -36
- package/examples/basic/client/public/robots.txt +2 -2
- package/examples/basic/client/routes/docs/[...slug].tsx +12 -12
- package/examples/basic/client/routes/features/error/error.tsx +16 -16
- package/examples/basic/client/routes/features/index.tsx +1 -1
- package/examples/basic/client/routes/features/template/b.tsx +14 -14
- package/examples/basic/client/routes/files/[[...slug]].tsx +21 -21
- package/examples/basic/client/routes/gallery/layout.tsx +13 -13
- package/examples/basic/client/routes/io.tsx +23 -24
- package/examples/basic/client/routes/loader-demo/loading.tsx +13 -13
- package/examples/basic/client/routes/rest.tsx +74 -0
- package/examples/basic/client/routes/rpc.tsx +43 -0
- package/examples/basic/client/routes/search.tsx +61 -61
- package/examples/basic/client/toil.tsx +5 -5
- package/package.json +167 -148
- package/presets/eslint.js +88 -88
- package/presets/no-uint8array-tostring.js +200 -200
- package/presets/prettier-plugin.js +51 -0
- package/presets/prettier.json +19 -18
- package/presets/tsconfig.json +37 -37
- package/server/runtime/README.md +97 -0
- package/server/runtime/abort/abort.ts +27 -0
- package/server/runtime/env/Server.ts +61 -0
- package/server/runtime/envelope.ts +191 -0
- package/server/runtime/exports/index.ts +52 -0
- package/server/runtime/handlers/ToilHandler.ts +34 -0
- package/server/runtime/index.ts +26 -0
- package/server/runtime/lang/Potential.ts +5 -0
- package/server/runtime/memory.ts +81 -0
- package/server/runtime/request.ts +55 -0
- package/server/runtime/response.ts +86 -0
- package/server/runtime/rest/Rest.ts +39 -0
- package/server/runtime/rest/RestHandler.ts +20 -0
- package/server/runtime/rest/RouteContext.ts +82 -0
- package/server/runtime/rest/match.ts +48 -0
- package/server/runtime/tsconfig.json +7 -0
- package/src/backend/index.ts +202 -160
- package/src/cli/create.ts +15 -5
- package/src/cli/diagnostics.ts +81 -0
- package/src/cli/doctor.ts +384 -7
- package/src/cli/index.ts +11 -2
- package/src/cli/proc.ts +50 -50
- package/src/cli/updates.ts +69 -69
- package/src/cli/validate.ts +31 -31
- package/src/client/channel/channel.ts +146 -146
- package/src/client/components/Form.tsx +65 -65
- package/src/client/components/Script.tsx +113 -113
- package/src/client/components/Slot.tsx +21 -21
- package/src/client/dev/devtools.tsx +1018 -0
- package/src/client/dev/error-overlay.tsx +30 -4
- package/src/client/errors.ts +11 -0
- package/src/client/head/head.ts +167 -167
- package/src/client/head/metadata.ts +112 -112
- package/src/client/index.ts +91 -89
- package/src/client/navigation/NavLink.tsx +86 -86
- package/src/client/navigation/navigation.ts +235 -235
- package/src/client/navigation/prefetch.ts +169 -130
- package/src/client/navigation/scroll.ts +53 -53
- package/src/client/routing/Router.tsx +8 -2
- package/src/client/routing/action.ts +122 -122
- package/src/client/routing/error-boundary.tsx +43 -43
- package/src/client/routing/hooks.ts +21 -6
- package/src/client/routing/loader.ts +325 -235
- package/src/client/routing/match.ts +47 -47
- package/src/client/routing/mount.tsx +54 -52
- package/src/client/routing/params-context.ts +10 -10
- package/src/client/routing/slot-context.ts +7 -7
- package/src/client/rpc.ts +64 -0
- package/src/client/search/search.ts +189 -189
- package/src/client/search/use-page-search.ts +73 -73
- package/src/client/types.ts +73 -73
- package/src/compiler/config.ts +221 -182
- package/src/compiler/docs.ts +285 -228
- package/src/compiler/generate.ts +395 -394
- package/src/compiler/index.ts +66 -57
- package/src/compiler/pages.ts +70 -70
- package/src/compiler/plugin.ts +258 -2
- package/src/compiler/prerender.ts +156 -156
- package/src/compiler/seo.ts +417 -390
- package/src/compiler/ssg.ts +171 -126
- package/src/compiler/vite.ts +34 -0
- package/src/io/FastMap.ts +151 -127
- package/src/io/FastSet.ts +15 -1
- package/src/io/codec.ts +217 -0
- package/src/io/index.ts +10 -11
- package/src/io/lengths.ts +14 -14
- package/src/io/types.ts +19 -18
- package/src/logger/index.ts +22 -22
- package/src/shared/index.ts +10 -10
- package/std/client/index.d.ts +15 -15
- package/std/client/package.json +3 -3
- package/test/assembly/example.spec.ts +17 -7
- package/test/channel.test.ts +21 -21
- package/test/doctor.test.ts +65 -0
- package/test/dom/Link.test.tsx +47 -47
- package/test/dom/NavLink.test.tsx +37 -37
- package/test/dom/error-overlay.test.tsx +44 -44
- package/test/dom/loader.test.tsx +121 -121
- package/test/dom/navigation.test.ts +59 -59
- package/test/dom/revalidate.test.tsx +38 -38
- package/test/dom/route-head.test.tsx +78 -78
- package/test/dom/router-loading.test.tsx +44 -44
- package/test/dom/scroll.test.ts +56 -56
- package/test/dom/use-metadata.test.tsx +58 -58
- package/test/errors.test.ts +21 -0
- package/test/io.test.ts +117 -93
- package/test/navlink.test.ts +28 -28
- package/test/placeholder.test.ts +9 -9
- package/test/prettier-plugin.test.ts +46 -0
- package/test/routes.test.ts +76 -76
- package/test/rpc.test.ts +50 -0
- package/test/seo.test.ts +175 -164
- package/test/slot-layouts.test.ts +69 -69
- package/test/ssg.test.ts +36 -36
- package/test/update.test.ts +44 -44
- package/test/validate.test.ts +42 -42
- package/tests/data-parity/generated-parity.ts +99 -0
- package/tests/data-parity/parity.ts +80 -0
- package/tests/data-parity/spec.ts +46 -0
- package/toil-routes.d.ts +7 -0
- package/tsconfig.backend.json +13 -13
- package/tsconfig.base.json +35 -35
- package/tsconfig.cli.json +13 -13
- package/tsconfig.client.json +14 -14
- package/tsconfig.compiler.json +13 -13
- package/tsconfig.io.json +12 -12
- package/tsconfig.json +22 -22
- package/tsconfig.logger.json +12 -12
- package/tsconfig.server.json +10 -10
- package/tsconfig.shared.json +12 -12
- package/vitest.config.ts +26 -26
- package/.idea/codeStyles/Project.xml +0 -54
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -7
- package/.idea/toiljs.iml +0 -8
- package/.idea/vcs.xml +0 -6
- package/.toil/entry.tsx +0 -9
- package/.toil/index.html +0 -12
- package/.toil/routes.ts +0 -9
- package/build/cli/configure.d.ts +0 -16
- package/build/cli/configure.js +0 -272
- package/build/cli/create.d.ts +0 -16
- package/build/cli/create.js +0 -420
- package/build/cli/diagnostics.d.ts +0 -55
- package/build/cli/diagnostics.js +0 -333
- package/build/cli/doctor.d.ts +0 -6
- package/build/cli/doctor.js +0 -249
- package/build/cli/features.d.ts +0 -25
- package/build/cli/features.js +0 -107
- package/build/cli/index.d.ts +0 -2
- package/build/cli/proc.d.ts +0 -6
- package/build/cli/proc.js +0 -31
- package/build/cli/ui.d.ts +0 -9
- package/build/cli/ui.js +0 -75
- package/build/cli/update.d.ts +0 -7
- package/build/cli/update.js +0 -117
- package/build/cli/updates.d.ts +0 -10
- package/build/cli/updates.js +0 -45
- package/build/cli/validate.d.ts +0 -4
- package/build/cli/validate.js +0 -19
- package/build/client/Link.d.ts +0 -8
- package/build/client/Link.js +0 -44
- package/build/client/NavLink.d.ts +0 -14
- package/build/client/NavLink.js +0 -37
- package/build/client/Router.d.ts +0 -7
- package/build/client/Router.js +0 -55
- package/build/client/channel.d.ts +0 -23
- package/build/client/channel.js +0 -94
- package/build/client/error-boundary.d.ts +0 -16
- package/build/client/error-boundary.js +0 -19
- package/build/client/head.d.ts +0 -26
- package/build/client/head.js +0 -87
- package/build/client/hooks.d.ts +0 -17
- package/build/client/hooks.js +0 -48
- package/build/client/lazy.d.ts +0 -16
- package/build/client/lazy.js +0 -53
- package/build/client/match.d.ts +0 -2
- package/build/client/match.js +0 -32
- package/build/client/mount.d.ts +0 -2
- package/build/client/mount.js +0 -13
- package/build/client/navigation.d.ts +0 -13
- package/build/client/navigation.js +0 -97
- package/build/client/params-context.d.ts +0 -2
- package/build/client/params-context.js +0 -2
- package/build/client/prefetch.d.ts +0 -11
- package/build/client/prefetch.js +0 -100
- package/build/client/runtime.d.ts +0 -31
- package/build/client/runtime.js +0 -112
- package/build/client/scroll.d.ts +0 -8
- package/build/client/scroll.js +0 -36
- package/build/io/BinaryReader.d.ts +0 -44
- package/build/io/BinaryReader.js +0 -244
- package/build/io/BinaryWriter.d.ts +0 -44
- package/build/io/BinaryWriter.js +0 -297
- package/build/server/release.wasm +0 -0
- package/build/server/release.wat +0 -9
- package/src/io/BinaryReader.ts +0 -340
- package/src/io/BinaryWriter.ts +0 -385
- package/src/server/index.ts +0 -10
- package/src/server/main.ts +0 -13
- package/src/server/tsconfig.json +0 -4
- package/toil-env.d.ts +0 -16
- package/toilconfig.json +0 -30
package/build/cli/features.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
export const PREPROCESSORS = ['css', 'sass', 'less', 'stylus'];
|
|
2
|
-
export const STYLE_EXT = {
|
|
3
|
-
css: 'css',
|
|
4
|
-
sass: 'scss',
|
|
5
|
-
less: 'less',
|
|
6
|
-
stylus: 'styl',
|
|
7
|
-
};
|
|
8
|
-
export const PREPROCESSOR_PKG = {
|
|
9
|
-
css: null,
|
|
10
|
-
sass: 'sass',
|
|
11
|
-
less: 'less',
|
|
12
|
-
stylus: 'stylus',
|
|
13
|
-
};
|
|
14
|
-
export const TAILWIND_PKGS = ['tailwindcss', '@tailwindcss/vite'];
|
|
15
|
-
export const PKG_VERSION = {
|
|
16
|
-
sass: '^1.83.0',
|
|
17
|
-
less: '^4.2.1',
|
|
18
|
-
stylus: '^0.64.0',
|
|
19
|
-
tailwindcss: '^4.0.0',
|
|
20
|
-
'@tailwindcss/vite': '^4.0.0',
|
|
21
|
-
};
|
|
22
|
-
export const TAILWIND_ENTRY = 'styles/tailwind.css';
|
|
23
|
-
export const TAILWIND_CSS = `@import 'tailwindcss';\n`;
|
|
24
|
-
export function styleEntry(p) {
|
|
25
|
-
return `styles/main.${STYLE_EXT[p]}`;
|
|
26
|
-
}
|
|
27
|
-
export function preprocessorForExt(ext) {
|
|
28
|
-
const e = ext.replace(/^\./, '');
|
|
29
|
-
if (e === 'sass')
|
|
30
|
-
return 'sass';
|
|
31
|
-
return PREPROCESSORS.find((p) => STYLE_EXT[p] === e) ?? null;
|
|
32
|
-
}
|
|
33
|
-
export function requiredPackages(f) {
|
|
34
|
-
const pkgs = [];
|
|
35
|
-
const pp = PREPROCESSOR_PKG[f.preprocessor];
|
|
36
|
-
if (pp)
|
|
37
|
-
pkgs.push(pp);
|
|
38
|
-
if (f.tailwind)
|
|
39
|
-
pkgs.push(...TAILWIND_PKGS);
|
|
40
|
-
return pkgs;
|
|
41
|
-
}
|
|
42
|
-
export function packageDiff(from, to) {
|
|
43
|
-
const want = new Set(requiredPackages(to));
|
|
44
|
-
const had = new Set(requiredPackages(from));
|
|
45
|
-
return {
|
|
46
|
-
add: [...want].filter((p) => !had.has(p)),
|
|
47
|
-
remove: [...had].filter((p) => !want.has(p)),
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
export function styleImportLines(f) {
|
|
51
|
-
const lines = [];
|
|
52
|
-
if (f.tailwind)
|
|
53
|
-
lines.push(`import './${TAILWIND_ENTRY}';`);
|
|
54
|
-
lines.push(`import './${styleEntry(f.preprocessor)}';`);
|
|
55
|
-
return lines;
|
|
56
|
-
}
|
|
57
|
-
export function setStyleImports(source, f) {
|
|
58
|
-
const stripped = source.replace(/^[ \t]*import\s+['"]\.\/styles\/[^'"]+['"];?[ \t]*\r?\n/gm, '');
|
|
59
|
-
const block = styleImportLines(f).join('\n') + '\n';
|
|
60
|
-
const lines = stripped.split('\n');
|
|
61
|
-
const routesIdx = lines.findIndex((l) => /from\s+['"]toiljs\/routes['"]/.test(l));
|
|
62
|
-
let insertAt;
|
|
63
|
-
if (routesIdx !== -1) {
|
|
64
|
-
insertAt = routesIdx + 1;
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
const lastImport = lines.reduce((acc, l, i) => (/^\s*import\s/.test(l) ? i : acc), -1);
|
|
68
|
-
insertAt = lastImport + 1;
|
|
69
|
-
}
|
|
70
|
-
const head = lines.slice(0, insertAt).join('\n');
|
|
71
|
-
const tail = lines.slice(insertAt).join('\n');
|
|
72
|
-
return `${head}\n\n${block}\n${tail}`.replace(/\n{3,}/g, '\n\n');
|
|
73
|
-
}
|
|
74
|
-
export function defaultConfigSource(images) {
|
|
75
|
-
return ("import { defineConfig } from 'toiljs/compiler';\n\n" +
|
|
76
|
-
'export default defineConfig({\n' +
|
|
77
|
-
' client: {\n' +
|
|
78
|
-
' // Optimize images at build time (resize/compress imported images).\n' +
|
|
79
|
-
` images: ${String(images)},\n` +
|
|
80
|
-
' },\n' +
|
|
81
|
-
'});\n');
|
|
82
|
-
}
|
|
83
|
-
export function setConfigImages(source, enabled) {
|
|
84
|
-
const value = String(enabled);
|
|
85
|
-
if (/\bimages\s*:\s*(?:true|false)/.test(source)) {
|
|
86
|
-
return source.replace(/\bimages\s*:\s*(?:true|false)/, `images: ${value}`);
|
|
87
|
-
}
|
|
88
|
-
if (/\bclient\s*:\s*\{/.test(source)) {
|
|
89
|
-
return source.replace(/\bclient\s*:\s*\{/, `client: {\n images: ${value},`);
|
|
90
|
-
}
|
|
91
|
-
if (/defineConfig\(\s*\{/.test(source)) {
|
|
92
|
-
return source.replace(/defineConfig\(\s*\{/, `defineConfig({\n client: { images: ${value} },`);
|
|
93
|
-
}
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
export function detectPreprocessor(deps) {
|
|
97
|
-
if ('sass' in deps)
|
|
98
|
-
return 'sass';
|
|
99
|
-
if ('less' in deps)
|
|
100
|
-
return 'less';
|
|
101
|
-
if ('stylus' in deps)
|
|
102
|
-
return 'stylus';
|
|
103
|
-
return 'css';
|
|
104
|
-
}
|
|
105
|
-
export function detectTailwind(deps) {
|
|
106
|
-
return '@tailwindcss/vite' in deps || 'tailwindcss' in deps;
|
|
107
|
-
}
|
package/build/cli/index.d.ts
DELETED
package/build/cli/proc.d.ts
DELETED
package/build/cli/proc.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
export function run(cmd, args, cwd) {
|
|
3
|
-
return new Promise((resolve, reject) => {
|
|
4
|
-
const onWindows = process.platform === 'win32';
|
|
5
|
-
const child = onWindows
|
|
6
|
-
? spawn([cmd, ...args].join(' '), { cwd, stdio: 'ignore', shell: true })
|
|
7
|
-
: spawn(cmd, args, { cwd, stdio: 'ignore' });
|
|
8
|
-
child.on('error', reject);
|
|
9
|
-
child.on('close', (code) => code === 0 ? resolve() : reject(new Error(`${cmd} exited with code ${String(code)}`)));
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
export function capture(cmd, args, cwd) {
|
|
13
|
-
return new Promise((resolve, reject) => {
|
|
14
|
-
const onWindows = process.platform === 'win32';
|
|
15
|
-
const child = onWindows
|
|
16
|
-
? spawn([cmd, ...args].join(' '), { cwd, shell: true })
|
|
17
|
-
: spawn(cmd, args, { cwd });
|
|
18
|
-
let stdout = '';
|
|
19
|
-
let stderr = '';
|
|
20
|
-
child.stdout?.on('data', (d) => {
|
|
21
|
-
stdout += d.toString();
|
|
22
|
-
});
|
|
23
|
-
child.stderr?.on('data', (d) => {
|
|
24
|
-
stderr += d.toString();
|
|
25
|
-
});
|
|
26
|
-
child.on('error', reject);
|
|
27
|
-
child.on('close', (code) => {
|
|
28
|
-
resolve({ stdout, stderr, code: code ?? 1 });
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
}
|
package/build/cli/ui.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare const dim: import("picocolors/types").Formatter;
|
|
2
|
-
export declare const bold: import("picocolors/types").Formatter;
|
|
3
|
-
export declare function brand(s: string): string;
|
|
4
|
-
export declare const accent: typeof brand;
|
|
5
|
-
export declare function success(s: string): string;
|
|
6
|
-
export declare const danger: import("picocolors/types").Formatter;
|
|
7
|
-
export declare const warn: import("picocolors/types").Formatter;
|
|
8
|
-
export declare function version(): string;
|
|
9
|
-
export declare function banner(): void;
|
package/build/cli/ui.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import pc from 'picocolors';
|
|
5
|
-
const PRIMARY = [37, 99, 255];
|
|
6
|
-
const SECONDARY = [124, 58, 237];
|
|
7
|
-
const ACCENT = [34, 227, 171];
|
|
8
|
-
const GRADIENT = [PRIMARY, SECONDARY, ACCENT];
|
|
9
|
-
const ART = [
|
|
10
|
-
'████████╗ ██████╗ ██╗ ██╗ ',
|
|
11
|
-
'╚══██╔══╝ ██╔═══██╗ ██║ ██║ ',
|
|
12
|
-
' ██║ ██║ ██║ ██║ ██║ ',
|
|
13
|
-
' ██║ ██║ ██║ ██║ ██║ ',
|
|
14
|
-
' ██║ ╚██████╔╝ ██║ ███████╗',
|
|
15
|
-
' ╚═╝ ╚═════╝ ╚═╝ ╚══════╝',
|
|
16
|
-
];
|
|
17
|
-
export const dim = pc.dim;
|
|
18
|
-
export const bold = pc.bold;
|
|
19
|
-
function colorEnabled() {
|
|
20
|
-
if (process.env.NO_COLOR)
|
|
21
|
-
return false;
|
|
22
|
-
if (process.env.FORCE_COLOR)
|
|
23
|
-
return true;
|
|
24
|
-
return process.stdout.isTTY;
|
|
25
|
-
}
|
|
26
|
-
function rgb(color, s) {
|
|
27
|
-
return colorEnabled() ? `\x1b[38;2;${color[0]};${color[1]};${color[2]}m${s}\x1b[39m` : s;
|
|
28
|
-
}
|
|
29
|
-
export function brand(s) {
|
|
30
|
-
return rgb(PRIMARY, s);
|
|
31
|
-
}
|
|
32
|
-
export const accent = brand;
|
|
33
|
-
export function success(s) {
|
|
34
|
-
return rgb(ACCENT, s);
|
|
35
|
-
}
|
|
36
|
-
export const danger = pc.red;
|
|
37
|
-
export const warn = pc.yellow;
|
|
38
|
-
function lerp(a, b, t) {
|
|
39
|
-
return Math.round(a + (b - a) * t);
|
|
40
|
-
}
|
|
41
|
-
function gradientAt(t) {
|
|
42
|
-
const segments = GRADIENT.length - 1;
|
|
43
|
-
const scaled = t * segments;
|
|
44
|
-
const i = Math.min(Math.floor(scaled), segments - 1);
|
|
45
|
-
const a = GRADIENT[i];
|
|
46
|
-
const b = GRADIENT[i + 1];
|
|
47
|
-
const localT = scaled - i;
|
|
48
|
-
return [lerp(a[0], b[0], localT), lerp(a[1], b[1], localT), lerp(a[2], b[2], localT)];
|
|
49
|
-
}
|
|
50
|
-
function gradientLine(line) {
|
|
51
|
-
const n = line.length;
|
|
52
|
-
let out = '';
|
|
53
|
-
for (let i = 0; i < n; i++) {
|
|
54
|
-
const [r, g, b] = gradientAt(n > 1 ? i / (n - 1) : 0);
|
|
55
|
-
out += `\x1b[38;2;${r};${g};${b}m${line[i]}`;
|
|
56
|
-
}
|
|
57
|
-
return out + '\x1b[39m';
|
|
58
|
-
}
|
|
59
|
-
export function version() {
|
|
60
|
-
try {
|
|
61
|
-
const pkgPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json');
|
|
62
|
-
const raw = fs.readFileSync(pkgPath, 'utf8');
|
|
63
|
-
const match = /"version"\s*:\s*"([^"]+)"/.exec(raw);
|
|
64
|
-
if (match && match[1])
|
|
65
|
-
return match[1];
|
|
66
|
-
}
|
|
67
|
-
catch { }
|
|
68
|
-
return '0.0.0';
|
|
69
|
-
}
|
|
70
|
-
export function banner() {
|
|
71
|
-
const lines = colorEnabled() ? ART.map(gradientLine) : ART.slice();
|
|
72
|
-
const tagline = ` the most performant ${brand('react')} framework`;
|
|
73
|
-
const ver = `${dim(' v')}${brand(version())}`;
|
|
74
|
-
process.stdout.write('\n' + lines.join('\n') + '\n\n' + tagline + ' ' + ver + '\n\n');
|
|
75
|
-
}
|
package/build/cli/update.d.ts
DELETED
package/build/cli/update.js
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { cancel, intro, isCancel, multiselect, note, outro, spinner } from '@clack/prompts';
|
|
4
|
-
import { capture, run } from './proc.js';
|
|
5
|
-
import { buildRows, parseNcuJson } from './updates.js';
|
|
6
|
-
import { accent, danger, dim, success, warn } from './ui.js';
|
|
7
|
-
function detectPackageManager(root) {
|
|
8
|
-
if (fs.existsSync(path.join(root, 'pnpm-lock.yaml')))
|
|
9
|
-
return { name: 'pnpm', ncuName: 'pnpm' };
|
|
10
|
-
if (fs.existsSync(path.join(root, 'yarn.lock')))
|
|
11
|
-
return { name: 'yarn', ncuName: 'yarn' };
|
|
12
|
-
if (fs.existsSync(path.join(root, 'bun.lockb')))
|
|
13
|
-
return { name: 'bun', ncuName: 'bun' };
|
|
14
|
-
return { name: 'npm', ncuName: 'npm' };
|
|
15
|
-
}
|
|
16
|
-
function readDependencies(pkgPath) {
|
|
17
|
-
const parsed = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
18
|
-
if (typeof parsed !== 'object' || parsed === null)
|
|
19
|
-
return {};
|
|
20
|
-
const pkg = parsed;
|
|
21
|
-
const merge = (v) => {
|
|
22
|
-
if (typeof v !== 'object' || v === null)
|
|
23
|
-
return {};
|
|
24
|
-
const out = {};
|
|
25
|
-
for (const [k, val] of Object.entries(v))
|
|
26
|
-
if (typeof val === 'string')
|
|
27
|
-
out[k] = val;
|
|
28
|
-
return out;
|
|
29
|
-
};
|
|
30
|
-
return { ...merge(pkg.dependencies), ...merge(pkg.devDependencies) };
|
|
31
|
-
}
|
|
32
|
-
function bumpColor(bump, text) {
|
|
33
|
-
if (bump === 'major')
|
|
34
|
-
return danger(text);
|
|
35
|
-
if (bump === 'minor')
|
|
36
|
-
return warn(text);
|
|
37
|
-
if (bump === 'patch')
|
|
38
|
-
return success(text);
|
|
39
|
-
return dim(text);
|
|
40
|
-
}
|
|
41
|
-
function rowLine(row) {
|
|
42
|
-
return `${row.name} ${dim(row.from)} ${dim('->')} ${bumpColor(row.bump, row.to)}`;
|
|
43
|
-
}
|
|
44
|
-
const TARGETS = new Set(['latest', 'minor', 'patch', 'newest', 'greatest']);
|
|
45
|
-
export async function runUpdate(opts) {
|
|
46
|
-
const root = path.resolve(opts.root ?? opts.cwd);
|
|
47
|
-
const pkgPath = path.join(root, 'package.json');
|
|
48
|
-
if (!fs.existsSync(pkgPath)) {
|
|
49
|
-
throw new Error('No package.json here. Run from your project root or pass --root <dir>.');
|
|
50
|
-
}
|
|
51
|
-
const currentDeps = readDependencies(pkgPath);
|
|
52
|
-
const pm = detectPackageManager(root);
|
|
53
|
-
const target = opts.target && TARGETS.has(opts.target) ? opts.target : 'latest';
|
|
54
|
-
const ncuArgs = (extra) => [
|
|
55
|
-
'--yes',
|
|
56
|
-
'npm-check-updates',
|
|
57
|
-
'--packageManager',
|
|
58
|
-
pm.ncuName,
|
|
59
|
-
'--target',
|
|
60
|
-
target,
|
|
61
|
-
...extra,
|
|
62
|
-
];
|
|
63
|
-
intro(accent('toiljs update'));
|
|
64
|
-
const s = spinner();
|
|
65
|
-
s.start('Checking the registry for updates');
|
|
66
|
-
const res = await capture('npx', ncuArgs(['--jsonUpgraded']), root);
|
|
67
|
-
if (res.code !== 0 && res.stdout.indexOf('{') === -1) {
|
|
68
|
-
s.stop('Could not check for updates');
|
|
69
|
-
note(dim(res.stderr.trim() || 'npm-check-updates failed.'), 'Error');
|
|
70
|
-
process.exitCode = 1;
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
const rows = buildRows(parseNcuJson(res.stdout), currentDeps);
|
|
74
|
-
if (rows.length === 0) {
|
|
75
|
-
s.stop('Everything is up to date');
|
|
76
|
-
outro(success('Nothing to update.'));
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
s.stop(`${String(rows.length)} update${rows.length === 1 ? '' : 's'} available`);
|
|
80
|
-
const counts = { major: 0, minor: 0, patch: 0, other: 0 };
|
|
81
|
-
for (const r of rows)
|
|
82
|
-
counts[r.bump]++;
|
|
83
|
-
note(rows.map(rowLine).join('\n'), `${danger(`${String(counts.major)} major`)} ${warn(`${String(counts.minor)} minor`)} ${success(`${String(counts.patch)} patch`)}`);
|
|
84
|
-
let selected;
|
|
85
|
-
if (opts.yes) {
|
|
86
|
-
selected = rows.map((r) => r.name);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
const answer = await multiselect({
|
|
90
|
-
message: 'Select packages to update (space to toggle, enter to confirm)',
|
|
91
|
-
options: rows.map((r) => ({
|
|
92
|
-
value: r.name,
|
|
93
|
-
label: r.name,
|
|
94
|
-
hint: `${r.from} -> ${r.to}`,
|
|
95
|
-
})),
|
|
96
|
-
initialValues: rows.map((r) => r.name),
|
|
97
|
-
required: false,
|
|
98
|
-
});
|
|
99
|
-
if (isCancel(answer)) {
|
|
100
|
-
cancel('Update cancelled.');
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
selected = answer;
|
|
104
|
-
}
|
|
105
|
-
if (selected.length === 0) {
|
|
106
|
-
outro(dim('No packages selected.'));
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
s.start('Updating package.json');
|
|
110
|
-
const applyAll = selected.length === rows.length;
|
|
111
|
-
await run('npx', ncuArgs(applyAll ? ['-u'] : ['-u', '--filter', selected.join(' ')]), root);
|
|
112
|
-
s.stop('package.json updated');
|
|
113
|
-
s.start(`Installing with ${pm.name}`);
|
|
114
|
-
await run(pm.name, ['install'], root);
|
|
115
|
-
s.stop('Dependencies installed');
|
|
116
|
-
outro(success(`Updated ${String(selected.length)} package${selected.length === 1 ? '' : 's'}.`));
|
|
117
|
-
}
|
package/build/cli/updates.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type Bump = 'major' | 'minor' | 'patch' | 'other';
|
|
2
|
-
export interface UpdateRow {
|
|
3
|
-
readonly name: string;
|
|
4
|
-
readonly from: string;
|
|
5
|
-
readonly to: string;
|
|
6
|
-
readonly bump: Bump;
|
|
7
|
-
}
|
|
8
|
-
export declare function classifyBump(from: string, to: string): Bump;
|
|
9
|
-
export declare function parseNcuJson(stdout: string): Record<string, string>;
|
|
10
|
-
export declare function buildRows(upgraded: Record<string, string>, currentDeps: Record<string, string>): UpdateRow[];
|
package/build/cli/updates.js
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
function parseVersion(v) {
|
|
2
|
-
const m = /(\d+)(?:\.(\d+))?(?:\.(\d+))?/.exec(v);
|
|
3
|
-
if (!m)
|
|
4
|
-
return [0, 0, 0];
|
|
5
|
-
return [Number(m[1]), Number(m[2] ?? 0), Number(m[3] ?? 0)];
|
|
6
|
-
}
|
|
7
|
-
export function classifyBump(from, to) {
|
|
8
|
-
const [fa, fb, fc] = parseVersion(from);
|
|
9
|
-
const [ta, tb, tc] = parseVersion(to);
|
|
10
|
-
if (ta !== fa)
|
|
11
|
-
return 'major';
|
|
12
|
-
if (tb !== fb)
|
|
13
|
-
return 'minor';
|
|
14
|
-
if (tc !== fc)
|
|
15
|
-
return 'patch';
|
|
16
|
-
return 'other';
|
|
17
|
-
}
|
|
18
|
-
export function parseNcuJson(stdout) {
|
|
19
|
-
const start = stdout.indexOf('{');
|
|
20
|
-
const end = stdout.lastIndexOf('}');
|
|
21
|
-
if (start === -1 || end <= start)
|
|
22
|
-
return {};
|
|
23
|
-
try {
|
|
24
|
-
const parsed = JSON.parse(stdout.slice(start, end + 1));
|
|
25
|
-
if (typeof parsed !== 'object' || parsed === null)
|
|
26
|
-
return {};
|
|
27
|
-
const out = {};
|
|
28
|
-
for (const [k, v] of Object.entries(parsed))
|
|
29
|
-
if (typeof v === 'string')
|
|
30
|
-
out[k] = v;
|
|
31
|
-
return out;
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return {};
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const SEVERITY = { major: 0, minor: 1, patch: 2, other: 3 };
|
|
38
|
-
export function buildRows(upgraded, currentDeps) {
|
|
39
|
-
return Object.entries(upgraded)
|
|
40
|
-
.map(([name, to]) => {
|
|
41
|
-
const from = currentDeps[name] ?? '?';
|
|
42
|
-
return { name, from, to, bump: classifyBump(from, to) };
|
|
43
|
-
})
|
|
44
|
-
.sort((a, b) => SEVERITY[a.bump] - SEVERITY[b.bump] || a.name.localeCompare(b.name));
|
|
45
|
-
}
|
package/build/cli/validate.d.ts
DELETED
package/build/cli/validate.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
export const PACKAGE_MANAGERS = ['npm', 'pnpm', 'yarn', 'bun'];
|
|
3
|
-
export function isValidName(name) {
|
|
4
|
-
if (!name.trim())
|
|
5
|
-
return 'Please enter a project name.';
|
|
6
|
-
if (!/^[a-z0-9._@/-]+$/i.test(name))
|
|
7
|
-
return 'Use letters, numbers, dashes, dots or slashes.';
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
export function resolveProjectDir(cwd, name) {
|
|
11
|
-
const target = path.resolve(cwd, name);
|
|
12
|
-
const rel = path.relative(cwd, target);
|
|
13
|
-
if (rel.startsWith('..') || path.isAbsolute(rel))
|
|
14
|
-
return null;
|
|
15
|
-
return target;
|
|
16
|
-
}
|
|
17
|
-
export function isPackageManager(pm) {
|
|
18
|
-
return PACKAGE_MANAGERS.includes(pm);
|
|
19
|
-
}
|
package/build/client/Link.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
-
export interface LinkProps extends Omit<ComponentPropsWithRef<'a'>, 'href'> {
|
|
3
|
-
href: string;
|
|
4
|
-
replace?: boolean;
|
|
5
|
-
scroll?: boolean;
|
|
6
|
-
prefetch?: boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare function Link(props: LinkProps): ReactNode;
|
package/build/client/Link.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { navigate } from './navigation.js';
|
|
3
|
-
import { prefetch } from './prefetch.js';
|
|
4
|
-
function isExternalHref(href) {
|
|
5
|
-
try {
|
|
6
|
-
return new URL(href, window.location.href).origin !== window.location.origin;
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
return true;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export function Link(props) {
|
|
13
|
-
const { href, replace = false, scroll = true, prefetch: prefetchProp = true, onClick, onPointerEnter, onFocus, children, ...rest } = props;
|
|
14
|
-
const handleClick = (event) => {
|
|
15
|
-
onClick?.(event);
|
|
16
|
-
if (event.defaultPrevented ||
|
|
17
|
-
event.button !== 0 ||
|
|
18
|
-
event.metaKey ||
|
|
19
|
-
event.ctrlKey ||
|
|
20
|
-
event.shiftKey ||
|
|
21
|
-
event.altKey ||
|
|
22
|
-
(rest.target !== undefined && rest.target !== '_self') ||
|
|
23
|
-
rest.download !== undefined ||
|
|
24
|
-
href.startsWith('#') ||
|
|
25
|
-
isExternalHref(href)) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
event.preventDefault();
|
|
29
|
-
navigate(href, { replace, scroll });
|
|
30
|
-
};
|
|
31
|
-
const warm = () => {
|
|
32
|
-
if (prefetchProp)
|
|
33
|
-
prefetch(href);
|
|
34
|
-
};
|
|
35
|
-
const handlePointerEnter = (event) => {
|
|
36
|
-
onPointerEnter?.(event);
|
|
37
|
-
warm();
|
|
38
|
-
};
|
|
39
|
-
const handleFocus = (event) => {
|
|
40
|
-
onFocus?.(event);
|
|
41
|
-
warm();
|
|
42
|
-
};
|
|
43
|
-
return (_jsx("a", { ...rest, ...(prefetchProp ? {} : { 'data-no-prefetch': '' }), href: href, onClick: handleClick, onPointerEnter: handlePointerEnter, onFocus: handleFocus, children: children }));
|
|
44
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { CSSProperties, ReactNode } from 'react';
|
|
2
|
-
import { type LinkProps } from './Link.js';
|
|
3
|
-
export interface NavLinkState {
|
|
4
|
-
readonly isActive: boolean;
|
|
5
|
-
}
|
|
6
|
-
export interface NavLinkProps extends Omit<LinkProps, 'className' | 'style' | 'children'> {
|
|
7
|
-
className?: string | ((state: NavLinkState) => string | undefined);
|
|
8
|
-
style?: CSSProperties | ((state: NavLinkState) => CSSProperties | undefined);
|
|
9
|
-
children?: ReactNode | ((state: NavLinkState) => ReactNode);
|
|
10
|
-
end?: boolean;
|
|
11
|
-
activeClassName?: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function matchActive(linkPath: string, currentPath: string, end: boolean): boolean;
|
|
14
|
-
export declare function NavLink(props: NavLinkProps): ReactNode;
|
package/build/client/NavLink.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useLocation } from './hooks.js';
|
|
3
|
-
import { Link } from './Link.js';
|
|
4
|
-
function normalizePath(p) {
|
|
5
|
-
return p.length > 1 ? p.replace(/\/+$/, '') : p;
|
|
6
|
-
}
|
|
7
|
-
export function matchActive(linkPath, currentPath, end) {
|
|
8
|
-
const link = normalizePath(linkPath);
|
|
9
|
-
const current = normalizePath(currentPath);
|
|
10
|
-
if (current === link)
|
|
11
|
-
return true;
|
|
12
|
-
if (end)
|
|
13
|
-
return false;
|
|
14
|
-
if (link === '/')
|
|
15
|
-
return true;
|
|
16
|
-
return current.startsWith(link + '/');
|
|
17
|
-
}
|
|
18
|
-
export function NavLink(props) {
|
|
19
|
-
const { href, className, style, children, end = false, activeClassName = 'active', ...rest } = props;
|
|
20
|
-
const pathname = useLocation();
|
|
21
|
-
let linkPath = href;
|
|
22
|
-
try {
|
|
23
|
-
linkPath = new URL(href, window.location.href).pathname;
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
linkPath = href;
|
|
27
|
-
}
|
|
28
|
-
const isActive = matchActive(linkPath, pathname, end);
|
|
29
|
-
const state = { isActive };
|
|
30
|
-
const resolvedClassName = typeof className === 'function'
|
|
31
|
-
? className(state)
|
|
32
|
-
: [className, isActive ? activeClassName : undefined].filter(Boolean).join(' ') ||
|
|
33
|
-
undefined;
|
|
34
|
-
const resolvedStyle = typeof style === 'function' ? style(state) : style;
|
|
35
|
-
const resolvedChildren = typeof children === 'function' ? children(state) : children;
|
|
36
|
-
return (_jsx(Link, { ...rest, href: href, className: resolvedClassName, style: resolvedStyle, "aria-current": isActive ? 'page' : undefined, children: resolvedChildren }));
|
|
37
|
-
}
|
package/build/client/Router.d.ts
DELETED
package/build/client/Router.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createElement, Suspense, useLayoutEffect } from 'react';
|
|
3
|
-
import { ErrorBoundary } from './error-boundary.js';
|
|
4
|
-
import { useLocation } from './hooks.js';
|
|
5
|
-
import { errorComponent, loadingComponent, nestedLayout, pageComponent, resolveLayout, resolveNotFound, } from './lazy.js';
|
|
6
|
-
import { matchRoute } from './match.js';
|
|
7
|
-
import { ParamsContext } from './params-context.js';
|
|
8
|
-
import { settleNavigation } from './navigation.js';
|
|
9
|
-
import { applyScroll } from './scroll.js';
|
|
10
|
-
export function Router(props) {
|
|
11
|
-
const { routes, layout = null, notFound = null } = props;
|
|
12
|
-
const pathname = useLocation();
|
|
13
|
-
useLayoutEffect(() => {
|
|
14
|
-
applyScroll();
|
|
15
|
-
settleNavigation();
|
|
16
|
-
});
|
|
17
|
-
let matched;
|
|
18
|
-
let params = {};
|
|
19
|
-
for (const route of routes) {
|
|
20
|
-
const result = matchRoute(route.pattern, pathname);
|
|
21
|
-
if (result) {
|
|
22
|
-
matched = route;
|
|
23
|
-
params = result;
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
let content;
|
|
28
|
-
if (matched) {
|
|
29
|
-
const Page = pageComponent(matched);
|
|
30
|
-
const fallback = matched.loading
|
|
31
|
-
? createElement(Suspense, { fallback: null }, createElement(loadingComponent(matched.loading)))
|
|
32
|
-
: null;
|
|
33
|
-
content = (_jsx(Suspense, { fallback: fallback, children: _jsx(Page, {}) }));
|
|
34
|
-
const chain = matched.layouts ?? [];
|
|
35
|
-
for (let i = chain.length - 1; i >= 0; i--) {
|
|
36
|
-
const NestedLayout = nestedLayout(chain[i]);
|
|
37
|
-
content = (_jsx(Suspense, { fallback: null, children: _jsx(NestedLayout, { children: content }) }));
|
|
38
|
-
}
|
|
39
|
-
if (matched.errorComponent) {
|
|
40
|
-
content = (_jsx(ErrorBoundary, { fallback: errorComponent(matched.errorComponent), children: content }));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else if (notFound) {
|
|
44
|
-
const NotFound = resolveNotFound(notFound);
|
|
45
|
-
content = (_jsx(Suspense, { fallback: null, children: _jsx(NotFound, {}) }));
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
content = _jsx("div", { style: { padding: 24, fontFamily: 'system-ui' }, children: "404 \u2014 Not found" });
|
|
49
|
-
}
|
|
50
|
-
if (layout) {
|
|
51
|
-
const Layout = resolveLayout(layout);
|
|
52
|
-
content = (_jsx(Suspense, { fallback: null, children: _jsx(Layout, { children: content }) }));
|
|
53
|
-
}
|
|
54
|
-
return _jsx(ParamsContext.Provider, { value: params, children: content });
|
|
55
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export type ChannelData = string | ArrayBuffer;
|
|
2
|
-
export type SendData = Parameters<WebSocket['send']>[0];
|
|
3
|
-
export interface ChannelOptions {
|
|
4
|
-
readonly path?: string;
|
|
5
|
-
readonly url?: string;
|
|
6
|
-
readonly reconnect?: boolean;
|
|
7
|
-
readonly reconnectDelay?: number;
|
|
8
|
-
}
|
|
9
|
-
export interface Channel {
|
|
10
|
-
send(data: SendData): void;
|
|
11
|
-
close(): void;
|
|
12
|
-
}
|
|
13
|
-
export declare function resolveChannelUrl(path?: string, location?: {
|
|
14
|
-
protocol: string;
|
|
15
|
-
host: string;
|
|
16
|
-
}): string;
|
|
17
|
-
export declare function connectChannel(onMessage: (data: ChannelData) => void, options?: ChannelOptions): Channel;
|
|
18
|
-
export interface ChannelHook {
|
|
19
|
-
readonly connected: boolean;
|
|
20
|
-
readonly messages: ChannelData[];
|
|
21
|
-
send: (data: SendData) => void;
|
|
22
|
-
}
|
|
23
|
-
export declare function useChannel(options?: ChannelOptions): ChannelHook;
|