@geektech/tsone-cli 0.0.1
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/LICENSE +21 -0
- package/README.md +175 -0
- package/bin/tsone.ts +12 -0
- package/dist/build-output.d.ts +9 -0
- package/dist/build.d.ts +2 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.js +109 -0
- package/dist/cli.js.map +10 -0
- package/dist/config.d.ts +3 -0
- package/dist/index-jmtdrrbw.js +46908 -0
- package/dist/index-jmtdrrbw.js.map +482 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +9 -0
- package/dist/project.d.ts +3 -0
- package/dist/proxy.d.ts +2 -0
- package/dist/safe-path.d.ts +2 -0
- package/dist/server.d.ts +3 -0
- package/dist/types.d.ts +45 -0
- package/package.json +40 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Geek Tech Team
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# TSone CLI
|
|
2
|
+
|
|
3
|
+
`@geektech/tsone-cli` is the Bun-native development and build CLI for TSone
|
|
4
|
+
applications. It requires Bun `>=1.3.0`.
|
|
5
|
+
|
|
6
|
+
## Installation
|
|
7
|
+
|
|
8
|
+
Install the framework and its development tooling together:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
bun add @geektech/tsone @geektech/tsone-cli
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Application Entry
|
|
15
|
+
|
|
16
|
+
The default entry is `src/main.ts`. It must export a named `app` whose value
|
|
17
|
+
provides `renderHtmlDocument()`; a TSone application created by `createApp`
|
|
18
|
+
satisfies that contract:
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { Component, VNode, createApp } from '@geektech/tsone';
|
|
22
|
+
|
|
23
|
+
class App extends Component<object, object> {
|
|
24
|
+
protected initState(): object {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected initStyles(): void {}
|
|
29
|
+
|
|
30
|
+
protected render(): VNode {
|
|
31
|
+
return { tag: 'main', children: ['Hello TSone'] };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const app = createApp({
|
|
36
|
+
root: App,
|
|
37
|
+
document: { title: 'TSone App' },
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
app.mount();
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The export must be written as `export const app`; a default export or another
|
|
44
|
+
name is not used by the CLI.
|
|
45
|
+
|
|
46
|
+
## Configuration
|
|
47
|
+
|
|
48
|
+
Create an optional `tsone.config.ts` in the project root. The config file
|
|
49
|
+
supports only a plain-object default export; functional or function-valued
|
|
50
|
+
config is not supported. `defineConfig()` supplies type checking without
|
|
51
|
+
changing the object.
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { defineConfig } from '@geektech/tsone-cli';
|
|
55
|
+
|
|
56
|
+
export default defineConfig({
|
|
57
|
+
server: {
|
|
58
|
+
proxy: {
|
|
59
|
+
'/api': {
|
|
60
|
+
target: 'http://localhost:3000',
|
|
61
|
+
changeOrigin: true,
|
|
62
|
+
rewrite: (path) => path.replace(/^\/api/, ''),
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
build: { outDir: 'dist' },
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
A proxy can also use the string shorthand when no other options are needed:
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
export default defineConfig({
|
|
74
|
+
server: {
|
|
75
|
+
proxy: {
|
|
76
|
+
'/backend': 'http://localhost:4000',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Defaults:
|
|
83
|
+
|
|
84
|
+
- `entry`: `src/main.ts`
|
|
85
|
+
- `server.host`: `127.0.0.1`
|
|
86
|
+
- `server.port`: `52211`
|
|
87
|
+
- `server.proxy`: `{}`
|
|
88
|
+
- `build.outDir`: `dist`
|
|
89
|
+
|
|
90
|
+
`build.outDir` must resolve to a child directory inside the project root. The
|
|
91
|
+
project root itself, an outside path, and a path that escapes through a symlink
|
|
92
|
+
are rejected before the output directory is removed.
|
|
93
|
+
|
|
94
|
+
## Command Line
|
|
95
|
+
|
|
96
|
+
Development and build options are deliberately separate:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
tsone dev [--host <host>] [--port <port>]
|
|
100
|
+
tsone build [--out-dir <path>]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`dev` accepts only `--host` and `--port`; `build` accepts only `--out-dir`.
|
|
104
|
+
Options override `tsone.config.ts`. Both separated and equals forms work, for
|
|
105
|
+
example `--port 3000`, `--port=3000`, `--out-dir output`, and
|
|
106
|
+
`--out-dir=output`.
|
|
107
|
+
|
|
108
|
+
`tsone dev` serves the generated HTML at `/` and `/index.html`. Each document
|
|
109
|
+
build writes an immutable browser ESM generation beneath the internal
|
|
110
|
+
`.tsone/dev/` directory and references exact `/dev/<session>/<generation>/...`
|
|
111
|
+
JavaScript and stylesheet URLs. Bun uses that exact generation URL as its
|
|
112
|
+
public path, so emitted file-asset strings are absolute URLs under the same
|
|
113
|
+
generation and resolve correctly from the document URL across concurrent pages.
|
|
114
|
+
`/bundle.js` remains a compatibility alias that rebuilds and redirects to the
|
|
115
|
+
latest exact entry URL. Other unmatched paths return 404. The `.tsone/`
|
|
116
|
+
directory is generated tooling output and can be removed while the development
|
|
117
|
+
server is stopped. A `.tsone` path that resolves outside the project through a
|
|
118
|
+
symlink is rejected before the development server starts.
|
|
119
|
+
|
|
120
|
+
`tsone build` writes a Bun browser bundle and `index.html` to the safe output
|
|
121
|
+
directory.
|
|
122
|
+
|
|
123
|
+
## Development Proxy
|
|
124
|
+
|
|
125
|
+
The development server serves HTTP only. Proxy targets may use HTTP or HTTPS.
|
|
126
|
+
A rule is matched as a literal pathname prefix, and the longest matching prefix
|
|
127
|
+
wins. The proxy preserves the query string, request method, request body, and
|
|
128
|
+
end-to-end headers while removing hop-by-hop headers. `changeOrigin: true`
|
|
129
|
+
changes the upstream `Host` header; otherwise the incoming host is retained.
|
|
130
|
+
`rewrite` synchronously changes the pathname before it is joined to the target
|
|
131
|
+
base path. An upstream connection failure returns the fixed response
|
|
132
|
+
`502 Bad Gateway`.
|
|
133
|
+
|
|
134
|
+
## Programmatic API
|
|
135
|
+
|
|
136
|
+
All tooling APIs come from `@geektech/tsone-cli`, not from the framework root:
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
import {
|
|
140
|
+
build,
|
|
141
|
+
defineConfig,
|
|
142
|
+
resolveConfig,
|
|
143
|
+
startDevServer,
|
|
144
|
+
} from '@geektech/tsone-cli';
|
|
145
|
+
|
|
146
|
+
const config = defineConfig({ build: { outDir: 'output' } });
|
|
147
|
+
const resolved = await resolveConfig({ root: process.cwd(), config });
|
|
148
|
+
const server = await startDevServer({ root: resolved.root, port: 0 });
|
|
149
|
+
|
|
150
|
+
try {
|
|
151
|
+
console.log(server.url);
|
|
152
|
+
} finally {
|
|
153
|
+
server.stop();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const result = await build({ root: resolved.root, outDir: 'release' });
|
|
157
|
+
console.log(result.root, result.outDir, result.assetsBuilt);
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
- `defineConfig(config)` returns the same typed config object.
|
|
161
|
+
- `resolveConfig(options?)` validates and merges defaults, a config file,
|
|
162
|
+
direct config, and host/port/outDir overrides. It returns absolute `root`,
|
|
163
|
+
`entry`, and `build.outDir` values plus the resolved server configuration.
|
|
164
|
+
- `startDevServer(options?)` resolves the configuration and returns the Bun
|
|
165
|
+
server. The caller owns its lifecycle and must call `server.stop()`.
|
|
166
|
+
- `build(options?)` validates the entry and output path, then returns
|
|
167
|
+
`{ root, outDir, assetsBuilt }`; the paths in the result are absolute.
|
|
168
|
+
|
|
169
|
+
## Version 1 Scope
|
|
170
|
+
|
|
171
|
+
The development server serves HTTP only. Proxy targets may use HTTP or HTTPS.
|
|
172
|
+
CLI v1 has no config plugins, WebSocket, HMR, SSR, functional config, `public/`
|
|
173
|
+
directory copying, or public `minify` and `sourcemap` configuration.
|
|
174
|
+
Development bundles use an internal inline source map, while production build
|
|
175
|
+
minification and source-map controls are intentionally not configurable.
|
package/bin/tsone.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
|
|
4
|
+
const builtCli = new URL('../dist/cli.js', import.meta.url);
|
|
5
|
+
const sourceCli = new URL('../src/cli.ts', import.meta.url);
|
|
6
|
+
const cli = (await import(
|
|
7
|
+
existsSync(builtCli) ? builtCli.href : sourceCli.href
|
|
8
|
+
)) as {
|
|
9
|
+
runCli: () => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
await cli.runCli();
|
package/dist/build.d.ts
ADDED
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface DevCliArgs {
|
|
2
|
+
command: 'dev';
|
|
3
|
+
host?: string;
|
|
4
|
+
port?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface BuildCliArgs {
|
|
7
|
+
command: 'build';
|
|
8
|
+
outDir?: string;
|
|
9
|
+
}
|
|
10
|
+
export type CliArgs = DevCliArgs | BuildCliArgs;
|
|
11
|
+
export declare function parseCliArgs(argv: string[]): CliArgs;
|
|
12
|
+
export declare function runCli(argv?: string[]): Promise<void>;
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
build,
|
|
4
|
+
startDevServer
|
|
5
|
+
} from "./index-jmtdrrbw.js";
|
|
6
|
+
|
|
7
|
+
// src/cli.ts
|
|
8
|
+
var USAGE = [
|
|
9
|
+
"Usage:",
|
|
10
|
+
" tsone dev [--host <host>] [--port <port>]",
|
|
11
|
+
" tsone build [--out-dir <path>]"
|
|
12
|
+
].join(`
|
|
13
|
+
`);
|
|
14
|
+
function parseCliArgs(argv) {
|
|
15
|
+
const command = argv[0];
|
|
16
|
+
if (command !== "dev" && command !== "build") {
|
|
17
|
+
throw parseError(command === undefined ? "Missing command" : `Unknown command: ${command}`);
|
|
18
|
+
}
|
|
19
|
+
const options = new Map;
|
|
20
|
+
for (let index = 1;index < argv.length; index += 1) {
|
|
21
|
+
const token = argv[index];
|
|
22
|
+
if (!token.startsWith("--")) {
|
|
23
|
+
throw parseError(`Unexpected positional argument: ${token}`);
|
|
24
|
+
}
|
|
25
|
+
const { name, inlineValue } = splitOption(token);
|
|
26
|
+
assertKnownOption(name);
|
|
27
|
+
assertSupportedOption(command, name);
|
|
28
|
+
if (options.has(name)) {
|
|
29
|
+
throw parseError(`Duplicate option: ${name}`);
|
|
30
|
+
}
|
|
31
|
+
const value = inlineValue ?? argv[index + 1];
|
|
32
|
+
if (value === undefined || value === "" || value.startsWith("--")) {
|
|
33
|
+
throw parseError(`Missing value for option: ${name}`);
|
|
34
|
+
}
|
|
35
|
+
if (inlineValue === undefined) {
|
|
36
|
+
index += 1;
|
|
37
|
+
}
|
|
38
|
+
options.set(name, value);
|
|
39
|
+
}
|
|
40
|
+
if (command === "dev") {
|
|
41
|
+
const port = options.get("--port");
|
|
42
|
+
return {
|
|
43
|
+
command,
|
|
44
|
+
...options.has("--host") ? { host: options.get("--host") } : {},
|
|
45
|
+
...port === undefined ? {} : { port: parsePort(port) }
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
command,
|
|
50
|
+
...options.has("--out-dir") ? { outDir: options.get("--out-dir") } : {}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async function runCli(argv = process.argv.slice(2)) {
|
|
54
|
+
const args = parseCliArgs(argv);
|
|
55
|
+
if (args.command === "dev") {
|
|
56
|
+
const server = await startDevServer({
|
|
57
|
+
...args.host === undefined ? {} : { host: args.host },
|
|
58
|
+
...args.port === undefined ? {} : { port: args.port }
|
|
59
|
+
});
|
|
60
|
+
console.log(`TSone dev server listening at http://${server.hostname}:${server.port}`);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const result = await build(args.outDir === undefined ? {} : { outDir: args.outDir });
|
|
64
|
+
console.log(`TSone build completed: ${result.outDir} (${result.assetsBuilt.length} assets)`);
|
|
65
|
+
}
|
|
66
|
+
function splitOption(token) {
|
|
67
|
+
const equalsIndex = token.indexOf("=");
|
|
68
|
+
if (equalsIndex === -1) {
|
|
69
|
+
return { name: token };
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
name: token.slice(0, equalsIndex),
|
|
73
|
+
inlineValue: token.slice(equalsIndex + 1)
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function assertKnownOption(name) {
|
|
77
|
+
if (name === "--host" || name === "--port" || name === "--out-dir") {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
throw parseError(`Unknown option: ${name}`);
|
|
81
|
+
}
|
|
82
|
+
function assertSupportedOption(command, name) {
|
|
83
|
+
const supported = command === "dev" && (name === "--host" || name === "--port") || command === "build" && name === "--out-dir";
|
|
84
|
+
if (!supported) {
|
|
85
|
+
throw parseError(`Option ${name} is not supported for ${command}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function parsePort(value) {
|
|
89
|
+
if (!/^\d+$/.test(value)) {
|
|
90
|
+
throw parseError("Port must be an integer between 0 and 65535");
|
|
91
|
+
}
|
|
92
|
+
const port = Number(value);
|
|
93
|
+
if (!Number.isInteger(port) || port < 0 || port > 65535) {
|
|
94
|
+
throw parseError("Port must be an integer between 0 and 65535");
|
|
95
|
+
}
|
|
96
|
+
return port;
|
|
97
|
+
}
|
|
98
|
+
function parseError(message) {
|
|
99
|
+
return new Error(`${message}
|
|
100
|
+
|
|
101
|
+
${USAGE}`);
|
|
102
|
+
}
|
|
103
|
+
export {
|
|
104
|
+
runCli,
|
|
105
|
+
parseCliArgs
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
//# debugId=AB0F04E26576496764756E2164756E21
|
|
109
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { build } from './build';\nimport { startDevServer } from './server';\n\nconst USAGE = [\n 'Usage:',\n ' tsone dev [--host <host>] [--port <port>]',\n ' tsone build [--out-dir <path>]',\n].join('\\n');\n\nexport interface DevCliArgs {\n command: 'dev';\n host?: string;\n port?: number;\n}\n\nexport interface BuildCliArgs {\n command: 'build';\n outDir?: string;\n}\n\nexport type CliArgs = DevCliArgs | BuildCliArgs;\n\nexport function parseCliArgs(argv: string[]): CliArgs {\n const command = argv[0];\n if (command !== 'dev' && command !== 'build') {\n throw parseError(\n command === undefined ? 'Missing command' : `Unknown command: ${command}`\n );\n }\n\n const options = new Map<string, string>();\n for (let index = 1; index < argv.length; index += 1) {\n const token = argv[index];\n if (!token.startsWith('--')) {\n throw parseError(`Unexpected positional argument: ${token}`);\n }\n\n const { name, inlineValue } = splitOption(token);\n assertKnownOption(name);\n assertSupportedOption(command, name);\n if (options.has(name)) {\n throw parseError(`Duplicate option: ${name}`);\n }\n\n const value = inlineValue ?? argv[index + 1];\n if (value === undefined || value === '' || value.startsWith('--')) {\n throw parseError(`Missing value for option: ${name}`);\n }\n if (inlineValue === undefined) {\n index += 1;\n }\n options.set(name, value);\n }\n\n if (command === 'dev') {\n const port = options.get('--port');\n return {\n command,\n ...(options.has('--host') ? { host: options.get('--host') } : {}),\n ...(port === undefined ? {} : { port: parsePort(port) }),\n };\n }\n\n return {\n command,\n ...(options.has('--out-dir') ? { outDir: options.get('--out-dir') } : {}),\n };\n}\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2)\n): Promise<void> {\n const args = parseCliArgs(argv);\n\n if (args.command === 'dev') {\n const server = await startDevServer({\n ...(args.host === undefined ? {} : { host: args.host }),\n ...(args.port === undefined ? {} : { port: args.port }),\n });\n console.log(\n `TSone dev server listening at http://${server.hostname}:${server.port}`\n );\n return;\n }\n\n const result = await build(\n args.outDir === undefined ? {} : { outDir: args.outDir }\n );\n console.log(\n `TSone build completed: ${result.outDir} (${result.assetsBuilt.length} assets)`\n );\n}\n\nfunction splitOption(token: string): { name: string; inlineValue?: string } {\n const equalsIndex = token.indexOf('=');\n if (equalsIndex === -1) {\n return { name: token };\n }\n\n return {\n name: token.slice(0, equalsIndex),\n inlineValue: token.slice(equalsIndex + 1),\n };\n}\n\nfunction assertKnownOption(name: string): void {\n if (name === '--host' || name === '--port' || name === '--out-dir') {\n return;\n }\n\n throw parseError(`Unknown option: ${name}`);\n}\n\nfunction assertSupportedOption(\n command: CliArgs['command'],\n name: string\n): void {\n const supported =\n (command === 'dev' && (name === '--host' || name === '--port')) ||\n (command === 'build' && name === '--out-dir');\n\n if (!supported) {\n throw parseError(`Option ${name} is not supported for ${command}`);\n }\n}\n\nfunction parsePort(value: string): number {\n if (!/^\\d+$/.test(value)) {\n throw parseError('Port must be an integer between 0 and 65535');\n }\n\n const port = Number(value);\n if (!Number.isInteger(port) || port < 0 || port > 65535) {\n throw parseError('Port must be an integer between 0 and 65535');\n }\n\n return port;\n}\n\nfunction parseError(message: string): Error {\n return new Error(`${message}\\n\\n${USAGE}`);\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "AB0F04E26576496764756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
package/dist/config.d.ts
ADDED