typeferry 0.8.0 → 0.9.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/README.md +11 -1
- package/dist/application/build.js +1 -0
- package/dist/application/build.js.map +1 -1
- package/dist/application/cli-arguments.d.ts +2 -1
- package/dist/application/cli-arguments.js +7 -4
- package/dist/application/cli-arguments.js.map +1 -1
- package/dist/application/config.d.ts +46 -1
- package/dist/application/config.js +72 -17
- package/dist/application/config.js.map +1 -1
- package/dist/application/proxy.d.ts +5 -4
- package/dist/application/proxy.js +38 -20
- package/dist/application/proxy.js.map +1 -1
- package/dist/application/run-tests.d.ts +2 -1
- package/dist/application/run-tests.js +7 -2
- package/dist/application/run-tests.js.map +1 -1
- package/dist/application/server-build.js +2 -1
- package/dist/application/server-build.js.map +1 -1
- package/dist/application/test-config.js +7 -1
- package/dist/application/test-config.js.map +1 -1
- package/dist/application/vite-config.d.ts +3 -3
- package/dist/application/vite-config.js +15 -14
- package/dist/application/vite-config.js.map +1 -1
- package/dist/cli/run.js +1 -1
- package/dist/cli/run.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -4,6 +4,11 @@ The TypeScript implementation of TypeFerry provides the reference Node.js server
|
|
|
4
4
|
|
|
5
5
|
Install the public TypeScript package with `npm install typeferry`. Repository contributors can use the local [`template/`](../template/) workflow described in the [quickstart](../docs/getting-started.md).
|
|
6
6
|
|
|
7
|
+
AI coding agents building consumer applications should begin with the
|
|
8
|
+
[agent application guide](https://github.com/leonardoventurini/typeferry/blob/main/docs/agents/application-development.md).
|
|
9
|
+
It defines the supported project structure, public imports, package-owned
|
|
10
|
+
commands, optional configuration, safety boundaries, and completion checks.
|
|
11
|
+
|
|
7
12
|
## Runtime requirements
|
|
8
13
|
|
|
9
14
|
- Node.js `24.19.0`
|
|
@@ -71,6 +76,11 @@ export default defineConfig({
|
|
|
71
76
|
})
|
|
72
77
|
```
|
|
73
78
|
|
|
79
|
+
See the full
|
|
80
|
+
[application framework guide](https://github.com/leonardoventurini/typeferry/blob/main/docs/typescript/application-framework.md)
|
|
81
|
+
for command behavior, test discovery, every configuration field, migration,
|
|
82
|
+
ownership boundaries, upgrades, and troubleshooting.
|
|
83
|
+
|
|
74
84
|
## Define and serve a typed method
|
|
75
85
|
|
|
76
86
|
```ts
|
|
@@ -127,4 +137,4 @@ npm pack --dry-run
|
|
|
127
137
|
|
|
128
138
|
## Guides
|
|
129
139
|
|
|
130
|
-
Start at the [documentation home](../docs/README.md) or jump to [server and RPC](../docs/typescript/server-rpc.md), [client](../docs/typescript/client.md), [React](../docs/typescript/react.md), [authentication](../docs/typescript/authentication.md), [events and channels](../docs/typescript/events-and-channels.md), [MongoDB](../docs/typescript/mongodb.md), [EJSON](../docs/typescript/ejson.md), or [deployment](../docs/typescript/deployment.md).
|
|
140
|
+
Start at the [documentation home](../docs/README.md) or jump to the [application framework](../docs/typescript/application-framework.md), [server and RPC](../docs/typescript/server-rpc.md), [client](../docs/typescript/client.md), [React](../docs/typescript/react.md), [authentication](../docs/typescript/authentication.md), [events and channels](../docs/typescript/events-and-channels.md), [MongoDB](../docs/typescript/mongodb.md), [EJSON](../docs/typescript/ejson.md), or [deployment](../docs/typescript/deployment.md).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/application/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,MAAM,CAAA;AAG3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAiC;IAEjC,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KAChE,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACpD,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/application/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,MAAM,CAAA;AAG3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAiC;IAEjC,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;KAChE,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACpD,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,WAAW,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC,CAAA;IAEF,MAAM,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAA;AACxC,CAAC"}
|
|
@@ -7,7 +7,8 @@ export type CliArguments = {
|
|
|
7
7
|
} | {
|
|
8
8
|
readonly command: 'test';
|
|
9
9
|
readonly project?: TestProjectName;
|
|
10
|
+
readonly testArguments: readonly string[];
|
|
10
11
|
readonly watch: boolean;
|
|
11
12
|
};
|
|
12
|
-
export declare const CLI_USAGE = "Usage: typeferry <develop [-- server-args...]|build|test [unit|integration|browser] [--watch]>";
|
|
13
|
+
export declare const CLI_USAGE = "Usage: typeferry <develop [-- server-args...]|build|test [unit|integration|browser] [--watch] [-- vitest-args...]>";
|
|
13
14
|
export declare function parseCliArguments(arguments_: readonly string[]): CliArguments;
|
|
@@ -3,7 +3,7 @@ const TEST_PROJECTS = new Set([
|
|
|
3
3
|
'integration',
|
|
4
4
|
'browser',
|
|
5
5
|
]);
|
|
6
|
-
export const CLI_USAGE = 'Usage: typeferry <develop [-- server-args...]|build|test [unit|integration|browser] [--watch]>';
|
|
6
|
+
export const CLI_USAGE = 'Usage: typeferry <develop [-- server-args...]|build|test [unit|integration|browser] [--watch] [-- vitest-args...]>';
|
|
7
7
|
export function parseCliArguments(arguments_) {
|
|
8
8
|
const [command, ...rest] = arguments_;
|
|
9
9
|
if (command === 'build') {
|
|
@@ -26,7 +26,10 @@ export function parseCliArguments(arguments_) {
|
|
|
26
26
|
function parseTestArguments(arguments_) {
|
|
27
27
|
let project;
|
|
28
28
|
let watch = false;
|
|
29
|
-
|
|
29
|
+
const separatorIndex = arguments_.indexOf('--');
|
|
30
|
+
const typeFerryArguments = separatorIndex === -1 ? arguments_ : arguments_.slice(0, separatorIndex);
|
|
31
|
+
const testArguments = separatorIndex === -1 ? [] : arguments_.slice(separatorIndex + 1);
|
|
32
|
+
for (const argument of typeFerryArguments) {
|
|
30
33
|
if (argument === '--watch') {
|
|
31
34
|
watch = true;
|
|
32
35
|
continue;
|
|
@@ -40,7 +43,7 @@ function parseTestArguments(arguments_) {
|
|
|
40
43
|
project = argument;
|
|
41
44
|
}
|
|
42
45
|
return project === undefined
|
|
43
|
-
? { command: 'test', watch }
|
|
44
|
-
: { command: 'test', project, watch };
|
|
46
|
+
? { command: 'test', testArguments, watch }
|
|
47
|
+
: { command: 'test', project, testArguments, watch };
|
|
45
48
|
}
|
|
46
49
|
//# sourceMappingURL=cli-arguments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-arguments.js","sourceRoot":"","sources":["../../src/application/cli-arguments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-arguments.js","sourceRoot":"","sources":["../../src/application/cli-arguments.ts"],"names":[],"mappings":"AAYA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAkB;IAC7C,MAAM;IACN,aAAa;IACb,SAAS;CACV,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GACpB,oHAAoH,CAAA;AAEtH,MAAM,UAAU,iBAAiB,CAAC,UAA6B;IAC7D,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,CAAA;IAErC,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAA;QAChF,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAA;QAC9D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IACpD,CAAC;IAED,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAEvD,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,kBAAkB,CAAC,UAA6B;IACvD,IAAI,OAAoC,CAAA;IACxC,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,MAAM,kBAAkB,GACtB,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;IAC1E,MAAM,aAAa,GACjB,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;IAEnE,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,GAAG,IAAI,CAAA;YACZ,SAAQ;QACV,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAA2B,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,KAAK,SAAS,EAAE,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,GAAG,QAA2B,CAAA;IACvC,CAAC;IAED,OAAO,OAAO,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE;QAC3C,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAA;AACxD,CAAC"}
|
|
@@ -1,9 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
import type { BuildOptions } from "esbuild";
|
|
2
|
+
import type { InlineConfig } from "vite";
|
|
3
|
+
import type { TestProjectConfiguration, ViteUserConfig as VitestConfig } from "vitest/config";
|
|
4
|
+
export type BrowserName = "chromium" | "firefox" | "webkit";
|
|
5
|
+
export type ApplicationTestConfig = VitestConfig;
|
|
6
|
+
export type ApplicationTestProjectConfiguration = TestProjectConfiguration;
|
|
7
|
+
export interface DevelopmentProxyRoute {
|
|
8
|
+
readonly pathPrefix: string;
|
|
9
|
+
readonly preserveHostHeader?: boolean;
|
|
10
|
+
readonly rewriteLocalhostCookies?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ResolvedDevelopmentProxyRoute {
|
|
13
|
+
readonly pathPrefix: string;
|
|
14
|
+
readonly preserveHostHeader: boolean;
|
|
15
|
+
readonly rewriteLocalhostCookies: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface ApplicationToolingExtensions {
|
|
18
|
+
readonly vite?: (config: InlineConfig, context: {
|
|
19
|
+
readonly command: "develop" | "build";
|
|
20
|
+
}) => InlineConfig;
|
|
21
|
+
readonly serverBuild?: (options: BuildOptions) => BuildOptions;
|
|
22
|
+
readonly test?: (config: VitestConfig) => VitestConfig;
|
|
23
|
+
readonly afterBuild?: () => void | Promise<void>;
|
|
24
|
+
}
|
|
2
25
|
export interface TypeFerryConfig {
|
|
26
|
+
readonly extensions?: ApplicationToolingExtensions;
|
|
3
27
|
readonly development?: {
|
|
4
28
|
readonly clientPort?: number;
|
|
5
29
|
readonly serverPort?: number;
|
|
6
30
|
readonly serverEnvironmentFile?: string;
|
|
31
|
+
readonly proxyRoutes?: readonly DevelopmentProxyRoute[];
|
|
7
32
|
};
|
|
8
33
|
readonly build?: {
|
|
9
34
|
readonly target?: string;
|
|
@@ -31,6 +56,7 @@ export interface ResolvedApplicationConfig {
|
|
|
31
56
|
readonly clientPort: number;
|
|
32
57
|
readonly serverPort: number;
|
|
33
58
|
readonly serverEnvironmentFile: string;
|
|
59
|
+
readonly proxyRoutes: readonly ResolvedDevelopmentProxyRoute[];
|
|
34
60
|
};
|
|
35
61
|
readonly build: {
|
|
36
62
|
readonly target: string;
|
|
@@ -44,6 +70,7 @@ export interface ResolvedApplicationConfig {
|
|
|
44
70
|
readonly browser: BrowserName;
|
|
45
71
|
};
|
|
46
72
|
};
|
|
73
|
+
readonly extensions: ApplicationToolingExtensions;
|
|
47
74
|
}
|
|
48
75
|
export declare const DEFAULT_APPLICATION_CONFIG: {
|
|
49
76
|
readonly paths: {
|
|
@@ -57,6 +84,23 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
|
|
|
57
84
|
readonly clientPort: 8000;
|
|
58
85
|
readonly serverPort: 8002;
|
|
59
86
|
readonly serverEnvironmentFile: ".env.server";
|
|
87
|
+
readonly proxyRoutes: readonly [{
|
|
88
|
+
readonly pathPrefix: "/.well-known";
|
|
89
|
+
readonly preserveHostHeader: true;
|
|
90
|
+
readonly rewriteLocalhostCookies: false;
|
|
91
|
+
}, {
|
|
92
|
+
readonly pathPrefix: "/mcp";
|
|
93
|
+
readonly preserveHostHeader: true;
|
|
94
|
+
readonly rewriteLocalhostCookies: false;
|
|
95
|
+
}, {
|
|
96
|
+
readonly pathPrefix: "/oauth";
|
|
97
|
+
readonly preserveHostHeader: true;
|
|
98
|
+
readonly rewriteLocalhostCookies: false;
|
|
99
|
+
}, {
|
|
100
|
+
readonly pathPrefix: "/__h";
|
|
101
|
+
readonly preserveHostHeader: true;
|
|
102
|
+
readonly rewriteLocalhostCookies: true;
|
|
103
|
+
}];
|
|
60
104
|
};
|
|
61
105
|
readonly build: {
|
|
62
106
|
readonly target: "es2023";
|
|
@@ -70,6 +114,7 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
|
|
|
70
114
|
readonly browser: BrowserName;
|
|
71
115
|
};
|
|
72
116
|
};
|
|
117
|
+
readonly extensions: {};
|
|
73
118
|
};
|
|
74
119
|
/** Provides contextual typing without transforming application configuration. */
|
|
75
120
|
export declare function defineConfig(config: TypeFerryConfig): TypeFerryConfig;
|
|
@@ -1,16 +1,36 @@
|
|
|
1
|
-
import { access } from
|
|
2
|
-
import path from
|
|
3
|
-
import { createJiti } from
|
|
4
|
-
import { z } from
|
|
5
|
-
const browserNameSchema = z.enum([
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createJiti } from "jiti";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
const browserNameSchema = z.enum(["chromium", "firefox", "webkit"]);
|
|
6
6
|
const positivePortSchema = z.number().int().min(1).max(65_535);
|
|
7
|
+
const proxyPathPrefixSchema = z.string().regex(/^\/(?!$)[^?#]*[^/]$/u, {
|
|
8
|
+
error: "pathPrefix must be a non-root path without a query, fragment, or trailing slash",
|
|
9
|
+
});
|
|
10
|
+
const proxyRouteSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
pathPrefix: proxyPathPrefixSchema,
|
|
13
|
+
preserveHostHeader: z.boolean().optional(),
|
|
14
|
+
rewriteLocalhostCookies: z.boolean().optional(),
|
|
15
|
+
})
|
|
16
|
+
.strict();
|
|
17
|
+
const extensionsSchema = z
|
|
18
|
+
.object({
|
|
19
|
+
vite: z.function().optional(),
|
|
20
|
+
serverBuild: z.function().optional(),
|
|
21
|
+
test: z.function().optional(),
|
|
22
|
+
afterBuild: z.function().optional(),
|
|
23
|
+
})
|
|
24
|
+
.strict();
|
|
7
25
|
const configSchema = z
|
|
8
26
|
.object({
|
|
27
|
+
extensions: extensionsSchema.optional(),
|
|
9
28
|
development: z
|
|
10
29
|
.object({
|
|
11
30
|
clientPort: positivePortSchema.optional(),
|
|
12
31
|
serverPort: positivePortSchema.optional(),
|
|
13
32
|
serverEnvironmentFile: z.string().min(1).optional(),
|
|
33
|
+
proxyRoutes: z.array(proxyRouteSchema).optional(),
|
|
14
34
|
})
|
|
15
35
|
.strict()
|
|
16
36
|
.optional(),
|
|
@@ -38,25 +58,48 @@ const configSchema = z
|
|
|
38
58
|
.strict();
|
|
39
59
|
export const DEFAULT_APPLICATION_CONFIG = {
|
|
40
60
|
paths: {
|
|
41
|
-
client:
|
|
42
|
-
common:
|
|
43
|
-
server:
|
|
44
|
-
tests:
|
|
45
|
-
output:
|
|
61
|
+
client: "client",
|
|
62
|
+
common: "common",
|
|
63
|
+
server: "server",
|
|
64
|
+
tests: "test",
|
|
65
|
+
output: "dist",
|
|
46
66
|
},
|
|
47
67
|
development: {
|
|
48
68
|
clientPort: 8000,
|
|
49
69
|
serverPort: 8002,
|
|
50
|
-
serverEnvironmentFile:
|
|
70
|
+
serverEnvironmentFile: ".env.server",
|
|
71
|
+
proxyRoutes: [
|
|
72
|
+
{
|
|
73
|
+
pathPrefix: "/.well-known",
|
|
74
|
+
preserveHostHeader: true,
|
|
75
|
+
rewriteLocalhostCookies: false,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
pathPrefix: "/mcp",
|
|
79
|
+
preserveHostHeader: true,
|
|
80
|
+
rewriteLocalhostCookies: false,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
pathPrefix: "/oauth",
|
|
84
|
+
preserveHostHeader: true,
|
|
85
|
+
rewriteLocalhostCookies: false,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
pathPrefix: "/__h",
|
|
89
|
+
preserveHostHeader: true,
|
|
90
|
+
rewriteLocalhostCookies: true,
|
|
91
|
+
},
|
|
92
|
+
],
|
|
51
93
|
},
|
|
52
94
|
build: {
|
|
53
|
-
target:
|
|
95
|
+
target: "es2023",
|
|
54
96
|
sourceMaps: true,
|
|
55
97
|
},
|
|
56
98
|
test: {
|
|
57
99
|
integration: { timeout: 30_000 },
|
|
58
|
-
browser: { browser:
|
|
100
|
+
browser: { browser: "chromium" },
|
|
59
101
|
},
|
|
102
|
+
extensions: {},
|
|
60
103
|
};
|
|
61
104
|
/** Provides contextual typing without transforming application configuration. */
|
|
62
105
|
export function defineConfig(config) {
|
|
@@ -70,6 +113,14 @@ export function resolveApplicationConfig(root, input = {}) {
|
|
|
70
113
|
development: {
|
|
71
114
|
...DEFAULT_APPLICATION_CONFIG.development,
|
|
72
115
|
...config.development,
|
|
116
|
+
proxyRoutes: [
|
|
117
|
+
...DEFAULT_APPLICATION_CONFIG.development.proxyRoutes,
|
|
118
|
+
...(config.development?.proxyRoutes ?? []).map((route) => ({
|
|
119
|
+
preserveHostHeader: false,
|
|
120
|
+
rewriteLocalhostCookies: false,
|
|
121
|
+
...route,
|
|
122
|
+
})),
|
|
123
|
+
],
|
|
73
124
|
},
|
|
74
125
|
build: {
|
|
75
126
|
...DEFAULT_APPLICATION_CONFIG.build,
|
|
@@ -85,31 +136,35 @@ export function resolveApplicationConfig(root, input = {}) {
|
|
|
85
136
|
...config.test?.browser,
|
|
86
137
|
},
|
|
87
138
|
},
|
|
139
|
+
extensions: config.extensions ?? {},
|
|
88
140
|
};
|
|
89
141
|
}
|
|
90
142
|
export async function loadApplicationConfig(root) {
|
|
91
|
-
const configPath = path.join(root,
|
|
143
|
+
const configPath = path.join(root, "typeferry.config.ts");
|
|
92
144
|
try {
|
|
93
145
|
await access(configPath);
|
|
94
146
|
}
|
|
95
147
|
catch {
|
|
96
148
|
return resolveApplicationConfig(root, withEnvironmentFile({}));
|
|
97
149
|
}
|
|
98
|
-
const jiti = createJiti(import.meta.url, {
|
|
150
|
+
const jiti = createJiti(import.meta.url, {
|
|
151
|
+
alias: { "@": root },
|
|
152
|
+
interopDefault: true,
|
|
153
|
+
});
|
|
99
154
|
const loaded = await jiti.import(configPath, { default: true });
|
|
100
155
|
const parsed = configSchema.parse(loaded);
|
|
101
156
|
return resolveApplicationConfig(root, withEnvironmentFile(parsed));
|
|
102
157
|
}
|
|
103
158
|
function withEnvironmentFile(config) {
|
|
104
159
|
if (config.development?.serverEnvironmentFile !== undefined ||
|
|
105
|
-
process.env[
|
|
160
|
+
process.env["DEVELOP_ENV_FILE"] === undefined) {
|
|
106
161
|
return config;
|
|
107
162
|
}
|
|
108
163
|
return {
|
|
109
164
|
...config,
|
|
110
165
|
development: {
|
|
111
166
|
...config.development,
|
|
112
|
-
serverEnvironmentFile: process.env[
|
|
167
|
+
serverEnvironmentFile: process.env["DEVELOP_ENV_FILE"],
|
|
113
168
|
},
|
|
114
169
|
};
|
|
115
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type IncomingHttpHeaders } from
|
|
2
|
-
import type { Plugin } from
|
|
3
|
-
|
|
4
|
-
export declare function
|
|
1
|
+
import { type IncomingHttpHeaders } from "node:http";
|
|
2
|
+
import type { Plugin } from "vite";
|
|
3
|
+
import type { ResolvedDevelopmentProxyRoute } from "./config.js";
|
|
4
|
+
export declare function findDevelopmentProxyRoute(url: string | undefined, routes: readonly ResolvedDevelopmentProxyRoute[]): ResolvedDevelopmentProxyRoute | null;
|
|
5
|
+
export declare function createTypeFerryDevProxy(backendPort: number, routes: readonly ResolvedDevelopmentProxyRoute[]): Plugin;
|
|
5
6
|
/** Removes backend-only cookie domains without adding undefined headers. */
|
|
6
7
|
export declare function rewriteProxyHeaders(proxyHeaders: IncomingHttpHeaders): IncomingHttpHeaders;
|
|
@@ -1,17 +1,25 @@
|
|
|
1
|
-
import { request as createHttpRequest, } from
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { request as createHttpRequest, } from "node:http";
|
|
2
|
+
const COOKIE_DOMAIN_ATTRIBUTE_PATTERN = /;\s*Domain=[^;]*/giu;
|
|
3
|
+
const COOKIE_PATH_ATTRIBUTE_PATTERN = /;\s*Path=[^;]*/iu;
|
|
4
|
+
const COOKIE_SECURE_ATTRIBUTE_PATTERN = /;\s*Secure/giu;
|
|
5
|
+
export function findDevelopmentProxyRoute(url, routes) {
|
|
6
|
+
if (url === undefined)
|
|
7
|
+
return null;
|
|
8
|
+
const pathname = url.split("?", 1)[0];
|
|
9
|
+
return (routes.find((route) => pathname === route.pathPrefix ||
|
|
10
|
+
pathname?.startsWith(`${route.pathPrefix}/`) === true) ?? null);
|
|
4
11
|
}
|
|
5
|
-
export function createTypeFerryDevProxy(backendPort) {
|
|
12
|
+
export function createTypeFerryDevProxy(backendPort, routes) {
|
|
6
13
|
return {
|
|
7
|
-
name:
|
|
14
|
+
name: "typeferry-development-proxy",
|
|
8
15
|
configureServer(server) {
|
|
9
16
|
server.middlewares.use((request, response, next) => {
|
|
10
|
-
|
|
17
|
+
const route = findDevelopmentProxyRoute(request.url, routes);
|
|
18
|
+
if (route === null) {
|
|
11
19
|
next();
|
|
12
20
|
return;
|
|
13
21
|
}
|
|
14
|
-
proxyRequest(request, response, backendPort);
|
|
22
|
+
proxyRequest(request, response, backendPort, route);
|
|
15
23
|
});
|
|
16
24
|
},
|
|
17
25
|
};
|
|
@@ -19,33 +27,43 @@ export function createTypeFerryDevProxy(backendPort) {
|
|
|
19
27
|
/** Removes backend-only cookie domains without adding undefined headers. */
|
|
20
28
|
export function rewriteProxyHeaders(proxyHeaders) {
|
|
21
29
|
const headers = { ...proxyHeaders };
|
|
22
|
-
const setCookie = headers[
|
|
30
|
+
const setCookie = headers["set-cookie"];
|
|
23
31
|
if (setCookie) {
|
|
24
|
-
headers[
|
|
32
|
+
headers["set-cookie"] = setCookie.map((cookie) => {
|
|
33
|
+
const normalizedCookie = cookie
|
|
34
|
+
.replace(COOKIE_SECURE_ATTRIBUTE_PATTERN, "")
|
|
35
|
+
.replace(COOKIE_DOMAIN_ATTRIBUTE_PATTERN, "");
|
|
36
|
+
if (COOKIE_PATH_ATTRIBUTE_PATTERN.test(normalizedCookie)) {
|
|
37
|
+
return normalizedCookie.replace(COOKIE_PATH_ATTRIBUTE_PATTERN, "; Path=/");
|
|
38
|
+
}
|
|
39
|
+
return `${normalizedCookie}; Path=/`;
|
|
40
|
+
});
|
|
25
41
|
}
|
|
26
42
|
return headers;
|
|
27
43
|
}
|
|
28
|
-
function proxyRequest(clientRequest, clientResponse, backendPort) {
|
|
44
|
+
function proxyRequest(clientRequest, clientResponse, backendPort, route) {
|
|
29
45
|
const proxyRequest = createHttpRequest({
|
|
30
|
-
hostname:
|
|
46
|
+
hostname: "127.0.0.1",
|
|
31
47
|
port: backendPort,
|
|
32
48
|
method: clientRequest.method,
|
|
33
49
|
path: clientRequest.url,
|
|
34
|
-
headers:
|
|
35
|
-
|
|
36
|
-
host: `localhost:${backendPort}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
50
|
+
headers: route.preserveHostHeader
|
|
51
|
+
? clientRequest.headers
|
|
52
|
+
: { ...clientRequest.headers, host: `localhost:${backendPort}` },
|
|
53
|
+
}, (proxyResponse) => {
|
|
54
|
+
const headers = route.rewriteLocalhostCookies
|
|
55
|
+
? rewriteProxyHeaders(proxyResponse.headers)
|
|
56
|
+
: proxyResponse.headers;
|
|
57
|
+
clientResponse.writeHead(proxyResponse.statusCode ?? 502, headers);
|
|
40
58
|
proxyResponse.pipe(clientResponse);
|
|
41
59
|
});
|
|
42
|
-
proxyRequest.on(
|
|
60
|
+
proxyRequest.on("error", (error) => {
|
|
43
61
|
if (!clientResponse.headersSent) {
|
|
44
|
-
clientResponse.writeHead(502, {
|
|
62
|
+
clientResponse.writeHead(502, { "content-type": "text/plain" });
|
|
45
63
|
}
|
|
46
64
|
clientResponse.end(`TypeFerry development proxy error: ${error.message}`);
|
|
47
65
|
});
|
|
48
|
-
clientRequest.on(
|
|
66
|
+
clientRequest.on("aborted", () => proxyRequest.destroy());
|
|
49
67
|
clientRequest.pipe(proxyRequest);
|
|
50
68
|
}
|
|
51
69
|
//# sourceMappingURL=proxy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/application/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,OAAO,IAAI,iBAAiB,GAE7B,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/application/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { TestProjectName } from './cli-arguments.js';
|
|
2
2
|
import type { ResolvedApplicationConfig } from './config.js';
|
|
3
|
-
export declare function runTests(config: ResolvedApplicationConfig, project: TestProjectName | undefined, watch: boolean): Promise<void>;
|
|
3
|
+
export declare function runTests(config: ResolvedApplicationConfig, project: TestProjectName | undefined, watch: boolean, testArguments: readonly string[]): Promise<void>;
|
|
4
|
+
export declare function prepareTestEnvironment(): void;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { startVitest } from 'vitest/node';
|
|
2
2
|
import { createTestConfig } from './test-config.js';
|
|
3
|
-
export async function runTests(config, project, watch) {
|
|
4
|
-
|
|
3
|
+
export async function runTests(config, project, watch, testArguments) {
|
|
4
|
+
prepareTestEnvironment();
|
|
5
|
+
const vitest = await startVitest('test', [...testArguments], {
|
|
5
6
|
project: project === undefined ? undefined : [project],
|
|
6
7
|
root: config.root,
|
|
7
8
|
run: !watch,
|
|
@@ -10,4 +11,8 @@ export async function runTests(config, project, watch) {
|
|
|
10
11
|
if (!watch)
|
|
11
12
|
await vitest.close();
|
|
12
13
|
}
|
|
14
|
+
export function prepareTestEnvironment() {
|
|
15
|
+
if (!process.env['NODE_ENV'])
|
|
16
|
+
process.env['NODE_ENV'] = 'test';
|
|
17
|
+
}
|
|
13
18
|
//# sourceMappingURL=run-tests.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-tests.js","sourceRoot":"","sources":["../../src/application/run-tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAIzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAiC,EACjC,OAAoC,EACpC,KAAc;
|
|
1
|
+
{"version":3,"file":"run-tests.js","sourceRoot":"","sources":["../../src/application/run-tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAIzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,MAAiC,EACjC,OAAoC,EACpC,KAAc,EACd,aAAgC;IAEhC,sBAAsB,EAAE,CAAA;IAExB,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,MAAM,EACN,CAAC,GAAG,aAAa,CAAC,EAClB;QACE,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACtD,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,CAAC,KAAK;QACX,KAAK;KACN,EACD,gBAAgB,CAAC,MAAM,CAAC,CACzB,CAAA;IAED,IAAI,CAAC,KAAK;QAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,CAAA;AAChE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
export function createServerBuildOptions(config) {
|
|
3
|
-
|
|
3
|
+
const buildOptions = {
|
|
4
4
|
bundle: true,
|
|
5
5
|
entryPoints: [
|
|
6
6
|
path.join(config.root, config.paths.server, 'index.ts'),
|
|
@@ -12,5 +12,6 @@ export function createServerBuildOptions(config) {
|
|
|
12
12
|
supported: { decorators: false },
|
|
13
13
|
target: config.build.target,
|
|
14
14
|
};
|
|
15
|
+
return config.extensions.serverBuild?.(buildOptions) ?? buildOptions;
|
|
15
16
|
}
|
|
16
17
|
//# sourceMappingURL=server-build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-build.js","sourceRoot":"","sources":["../../src/application/server-build.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAM5B,MAAM,UAAU,wBAAwB,CACtC,MAAiC;IAEjC,
|
|
1
|
+
{"version":3,"file":"server-build.js","sourceRoot":"","sources":["../../src/application/server-build.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAM5B,MAAM,UAAU,wBAAwB,CACtC,MAAiC;IAEjC,MAAM,YAAY,GAAiB;QACjC,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC;SACxD;QACD,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,IAAI,CAAC,IAAI,CAChB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,CAAC,MAAM,EACnB,QAAQ,EACR,WAAW,CACZ;QACD,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;QAClC,SAAS,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;QAChC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;KAC5B,CAAA;IAED,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,IAAI,YAAY,CAAA;AACtE,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { playwright } from '@vitest/browser-playwright';
|
|
|
7
7
|
export function createTestConfig(config) {
|
|
8
8
|
const alias = { '@': config.root };
|
|
9
9
|
const projectRoots = '{client,common,server,test}';
|
|
10
|
-
|
|
10
|
+
const testConfig = {
|
|
11
11
|
configFile: false,
|
|
12
12
|
root: config.root,
|
|
13
13
|
resolve: { alias },
|
|
@@ -17,6 +17,8 @@ export function createTestConfig(config) {
|
|
|
17
17
|
resolve: { alias },
|
|
18
18
|
test: {
|
|
19
19
|
name: 'unit',
|
|
20
|
+
fileParallelism: false,
|
|
21
|
+
env: { NODE_ENV: process.env['NODE_ENV'] ?? 'test' },
|
|
20
22
|
include: [
|
|
21
23
|
`${projectRoots}/**/*.unit.spec.ts`,
|
|
22
24
|
`${projectRoots}/**/*.unit.spec.tsx`,
|
|
@@ -43,6 +45,7 @@ export function createTestConfig(config) {
|
|
|
43
45
|
test: {
|
|
44
46
|
name: 'integration',
|
|
45
47
|
fileParallelism: false,
|
|
48
|
+
env: { NODE_ENV: process.env['NODE_ENV'] ?? 'test' },
|
|
46
49
|
hookTimeout: config.test.integration.timeout,
|
|
47
50
|
include: [
|
|
48
51
|
`${projectRoots}/**/*.integration.spec.ts`,
|
|
@@ -63,6 +66,8 @@ export function createTestConfig(config) {
|
|
|
63
66
|
},
|
|
64
67
|
test: {
|
|
65
68
|
name: 'browser',
|
|
69
|
+
fileParallelism: false,
|
|
70
|
+
env: { NODE_ENV: process.env['NODE_ENV'] ?? 'test' },
|
|
66
71
|
// Vitest's browser mock API requires globals when it is mirrored
|
|
67
72
|
// through the public typeferry/test entry point.
|
|
68
73
|
globals: true,
|
|
@@ -83,6 +88,7 @@ export function createTestConfig(config) {
|
|
|
83
88
|
],
|
|
84
89
|
},
|
|
85
90
|
};
|
|
91
|
+
return config.extensions.test?.(testConfig) ?? testConfig;
|
|
86
92
|
}
|
|
87
93
|
function optionalSetup(root, fileName) {
|
|
88
94
|
const setupPath = path.join(root, 'test', fileName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-config.js","sourceRoot":"","sources":["../../src/application/test-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,sBAAsB,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAQvD,MAAM,UAAU,gBAAgB,CAC9B,MAAiC;IAEjC,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IAClC,MAAM,YAAY,GAAG,6BAA6B,CAAA;IAElD,
|
|
1
|
+
{"version":3,"file":"test-config.js","sourceRoot":"","sources":["../../src/application/test-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { InlineConfig } from
|
|
2
|
-
import type { ResolvedApplicationConfig } from
|
|
3
|
-
export declare function createViteConfig(config: ResolvedApplicationConfig, command:
|
|
1
|
+
import type { InlineConfig } from "vite";
|
|
2
|
+
import type { ResolvedApplicationConfig } from "./config.js";
|
|
3
|
+
export declare function createViteConfig(config: ResolvedApplicationConfig, command: "develop" | "build"): InlineConfig;
|
|
@@ -1,43 +1,44 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import tailwindcss from
|
|
3
|
-
import react from
|
|
4
|
-
import { createTypeFerryDevProxy } from
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
3
|
+
import react from "@vitejs/plugin-react";
|
|
4
|
+
import { createTypeFerryDevProxy } from "./proxy.js";
|
|
5
5
|
export function createViteConfig(config, command) {
|
|
6
6
|
const plugins = [react(), tailwindcss()];
|
|
7
|
-
if (command ===
|
|
8
|
-
plugins.unshift(createTypeFerryDevProxy(config.development.serverPort));
|
|
7
|
+
if (command === "develop") {
|
|
8
|
+
plugins.unshift(createTypeFerryDevProxy(config.development.serverPort, config.development.proxyRoutes));
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
const viteConfig = {
|
|
11
11
|
configFile: false,
|
|
12
12
|
root: path.join(config.root, config.paths.client),
|
|
13
13
|
plugins,
|
|
14
14
|
server: {
|
|
15
15
|
allowedHosts: true,
|
|
16
|
-
host:
|
|
16
|
+
host: "0.0.0.0",
|
|
17
17
|
port: config.development.clientPort,
|
|
18
18
|
hmr: { overlay: true },
|
|
19
19
|
watch: {
|
|
20
|
-
ignored: [
|
|
20
|
+
ignored: ["**/*.spec.ts", "**/*.spec.tsx"],
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
23
|
resolve: {
|
|
24
24
|
preserveSymlinks: true,
|
|
25
25
|
alias: {
|
|
26
|
-
react: path.join(config.root,
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
react: path.join(config.root, "node_modules", "react"),
|
|
27
|
+
"react-dom": path.join(config.root, "node_modules", "react-dom"),
|
|
28
|
+
"@": config.root,
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
31
|
build: {
|
|
32
|
-
outDir: path.relative(path.join(config.root, config.paths.client), path.join(config.root, config.paths.output,
|
|
32
|
+
outDir: path.relative(path.join(config.root, config.paths.client), path.join(config.root, config.paths.output, "client")),
|
|
33
33
|
emptyOutDir: true,
|
|
34
34
|
manifest: true,
|
|
35
35
|
target: config.build.target,
|
|
36
36
|
sourcemap: config.build.sourceMaps,
|
|
37
37
|
rollupOptions: {
|
|
38
|
-
input: path.join(config.root, config.paths.client,
|
|
38
|
+
input: path.join(config.root, config.paths.client, "index.html"),
|
|
39
39
|
},
|
|
40
40
|
},
|
|
41
41
|
};
|
|
42
|
+
return config.extensions.vite?.(viteConfig, { command }) ?? viteConfig;
|
|
42
43
|
}
|
|
43
44
|
//# sourceMappingURL=vite-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../src/application/vite-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"vite-config.js","sourceRoot":"","sources":["../../src/application/vite-config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,sBAAsB,CAAC;AAIzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,UAAU,gBAAgB,CAC9B,MAAiC,EACjC,OAA4B;IAE5B,MAAM,OAAO,GAAmB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACzD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CACb,uBAAuB,CACrB,MAAM,CAAC,WAAW,CAAC,UAAU,EAC7B,MAAM,CAAC,WAAW,CAAC,WAAW,CAC/B,CACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAiB;QAC/B,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACjD,OAAO;QACP,MAAM,EAAE;YACN,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU;YACnC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACtB,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;aAC3C;SACF;QACD,OAAO,EAAE;YACP,gBAAgB,EAAE,IAAI;YACtB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC;gBACtD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC;gBAChE,GAAG,EAAE,MAAM,CAAC,IAAI;aACjB;SACF;QACD,KAAK,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,QAAQ,CACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CACtD;YACD,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YAC3B,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;YAClC,aAAa,EAAE;gBACb,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC;aACjE;SACF;KACF,CAAC;IAEF,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,UAAU,CAAC;AACzE,CAAC"}
|
package/dist/cli/run.js
CHANGED
|
@@ -16,6 +16,6 @@ export async function runCli(arguments_) {
|
|
|
16
16
|
await runDevelop(config, parsed.serverArguments);
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
|
-
await runTests(config, parsed.project, parsed.watch);
|
|
19
|
+
await runTests(config, parsed.project, parsed.watch, parsed.testArguments);
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=run.js.map
|
package/dist/cli/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAA6B;IACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAEhD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAA;QACtB,OAAM;IACR,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QAChD,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAA6B;IACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAEhD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAA;QACtB,OAAM;IACR,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;QAChD,OAAM;IACR,CAAC;IAED,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;AAC5E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typeferry",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Type-safe real-time RPC framework for TypeScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"bin": {
|
|
9
|
-
"typeferry": "
|
|
9
|
+
"typeferry": "dist/cli/index.js"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"dist"
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"@lukeed/uuid": "^2.0.1",
|
|
97
97
|
"@rollup/plugin-babel": "^7.1.0",
|
|
98
98
|
"@tailwindcss/vite": "^4.3.3",
|
|
99
|
-
"@vitejs/plugin-react": "
|
|
99
|
+
"@vitejs/plugin-react": "^6.1.1",
|
|
100
100
|
"@vitest/browser": "4.1.11",
|
|
101
101
|
"@vitest/browser-playwright": "4.1.11",
|
|
102
102
|
"esbuild": "0.28.1",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"tree-kill": "^1.2.2",
|
|
115
115
|
"ua-parser-js": "^2.0.10",
|
|
116
116
|
"use-debounce": "^10.1.1",
|
|
117
|
-
"vite": "
|
|
117
|
+
"vite": "^8.2.2",
|
|
118
118
|
"vitest": "4.1.11",
|
|
119
119
|
"ws": "^8.21.3",
|
|
120
120
|
"zod": "^4.4.3"
|