typeferry 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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 +83 -28
- 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
|
@@ -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;
|
|
@@ -34,6 +59,7 @@ export interface ResolvedApplicationConfig {
|
|
|
34
59
|
readonly clientPort: number;
|
|
35
60
|
readonly serverPort: number;
|
|
36
61
|
readonly serverEnvironmentFile: string;
|
|
62
|
+
readonly proxyRoutes: readonly ResolvedDevelopmentProxyRoute[];
|
|
37
63
|
};
|
|
38
64
|
readonly build: {
|
|
39
65
|
readonly target: string;
|
|
@@ -50,6 +76,7 @@ export interface ResolvedApplicationConfig {
|
|
|
50
76
|
readonly browser: BrowserName;
|
|
51
77
|
};
|
|
52
78
|
};
|
|
79
|
+
readonly extensions: ApplicationToolingExtensions;
|
|
53
80
|
}
|
|
54
81
|
export declare const DEFAULT_APPLICATION_CONFIG: {
|
|
55
82
|
readonly paths: {
|
|
@@ -63,6 +90,23 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
|
|
|
63
90
|
readonly clientPort: 8000;
|
|
64
91
|
readonly serverPort: 8002;
|
|
65
92
|
readonly serverEnvironmentFile: ".env.server";
|
|
93
|
+
readonly proxyRoutes: readonly [{
|
|
94
|
+
readonly pathPrefix: "/.well-known";
|
|
95
|
+
readonly preserveHostHeader: true;
|
|
96
|
+
readonly rewriteLocalhostCookies: false;
|
|
97
|
+
}, {
|
|
98
|
+
readonly pathPrefix: "/mcp";
|
|
99
|
+
readonly preserveHostHeader: true;
|
|
100
|
+
readonly rewriteLocalhostCookies: false;
|
|
101
|
+
}, {
|
|
102
|
+
readonly pathPrefix: "/oauth";
|
|
103
|
+
readonly preserveHostHeader: true;
|
|
104
|
+
readonly rewriteLocalhostCookies: false;
|
|
105
|
+
}, {
|
|
106
|
+
readonly pathPrefix: "/__h";
|
|
107
|
+
readonly preserveHostHeader: true;
|
|
108
|
+
readonly rewriteLocalhostCookies: true;
|
|
109
|
+
}];
|
|
66
110
|
};
|
|
67
111
|
readonly build: {
|
|
68
112
|
readonly target: "es2023";
|
|
@@ -79,6 +123,7 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
|
|
|
79
123
|
readonly browser: BrowserName;
|
|
80
124
|
};
|
|
81
125
|
};
|
|
126
|
+
readonly extensions: {};
|
|
82
127
|
};
|
|
83
128
|
/** Provides contextual typing without transforming application configuration. */
|
|
84
129
|
export declare function defineConfig(config: TypeFerryConfig): TypeFerryConfig;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { access, readFile } from
|
|
2
|
-
import path from
|
|
3
|
-
import { createJiti } from
|
|
4
|
-
import { z } from
|
|
5
|
-
const browserNameSchema = z.enum([
|
|
1
|
+
import { access, readFile } 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
7
|
const packageManifestSchema = z.object({
|
|
8
8
|
dependencies: z.record(z.string(), z.string()).optional(),
|
|
@@ -12,17 +12,37 @@ const serverExternalSchema = z
|
|
|
12
12
|
.array(z
|
|
13
13
|
.string()
|
|
14
14
|
.min(1)
|
|
15
|
-
.refine(isPackageSpecifier,
|
|
16
|
-
.refine(values => new Set(values).size === values.length, {
|
|
17
|
-
message:
|
|
15
|
+
.refine(isPackageSpecifier, "Expected an npm package specifier"))
|
|
16
|
+
.refine((values) => new Set(values).size === values.length, {
|
|
17
|
+
message: "Server external package specifiers must not contain duplicates",
|
|
18
18
|
});
|
|
19
|
+
const proxyPathPrefixSchema = z.string().regex(/^\/(?!$)[^?#]*[^/]$/u, {
|
|
20
|
+
error: "pathPrefix must be a non-root path without a query, fragment, or trailing slash",
|
|
21
|
+
});
|
|
22
|
+
const proxyRouteSchema = z
|
|
23
|
+
.object({
|
|
24
|
+
pathPrefix: proxyPathPrefixSchema,
|
|
25
|
+
preserveHostHeader: z.boolean().optional(),
|
|
26
|
+
rewriteLocalhostCookies: z.boolean().optional(),
|
|
27
|
+
})
|
|
28
|
+
.strict();
|
|
29
|
+
const extensionsSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
vite: z.function().optional(),
|
|
32
|
+
serverBuild: z.function().optional(),
|
|
33
|
+
test: z.function().optional(),
|
|
34
|
+
afterBuild: z.function().optional(),
|
|
35
|
+
})
|
|
36
|
+
.strict();
|
|
19
37
|
const configSchema = z
|
|
20
38
|
.object({
|
|
39
|
+
extensions: extensionsSchema.optional(),
|
|
21
40
|
development: z
|
|
22
41
|
.object({
|
|
23
42
|
clientPort: positivePortSchema.optional(),
|
|
24
43
|
serverPort: positivePortSchema.optional(),
|
|
25
44
|
serverEnvironmentFile: z.string().min(1).optional(),
|
|
45
|
+
proxyRoutes: z.array(proxyRouteSchema).optional(),
|
|
26
46
|
})
|
|
27
47
|
.strict()
|
|
28
48
|
.optional(),
|
|
@@ -54,19 +74,41 @@ const configSchema = z
|
|
|
54
74
|
.strict();
|
|
55
75
|
export const DEFAULT_APPLICATION_CONFIG = {
|
|
56
76
|
paths: {
|
|
57
|
-
client:
|
|
58
|
-
common:
|
|
59
|
-
server:
|
|
60
|
-
tests:
|
|
61
|
-
output:
|
|
77
|
+
client: "client",
|
|
78
|
+
common: "common",
|
|
79
|
+
server: "server",
|
|
80
|
+
tests: "test",
|
|
81
|
+
output: "dist",
|
|
62
82
|
},
|
|
63
83
|
development: {
|
|
64
84
|
clientPort: 8000,
|
|
65
85
|
serverPort: 8002,
|
|
66
|
-
serverEnvironmentFile:
|
|
86
|
+
serverEnvironmentFile: ".env.server",
|
|
87
|
+
proxyRoutes: [
|
|
88
|
+
{
|
|
89
|
+
pathPrefix: "/.well-known",
|
|
90
|
+
preserveHostHeader: true,
|
|
91
|
+
rewriteLocalhostCookies: false,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
pathPrefix: "/mcp",
|
|
95
|
+
preserveHostHeader: true,
|
|
96
|
+
rewriteLocalhostCookies: false,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
pathPrefix: "/oauth",
|
|
100
|
+
preserveHostHeader: true,
|
|
101
|
+
rewriteLocalhostCookies: false,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
pathPrefix: "/__h",
|
|
105
|
+
preserveHostHeader: true,
|
|
106
|
+
rewriteLocalhostCookies: true,
|
|
107
|
+
},
|
|
108
|
+
],
|
|
67
109
|
},
|
|
68
110
|
build: {
|
|
69
|
-
target:
|
|
111
|
+
target: "es2023",
|
|
70
112
|
sourceMaps: true,
|
|
71
113
|
server: {
|
|
72
114
|
external: [],
|
|
@@ -74,8 +116,9 @@ export const DEFAULT_APPLICATION_CONFIG = {
|
|
|
74
116
|
},
|
|
75
117
|
test: {
|
|
76
118
|
integration: { timeout: 30_000 },
|
|
77
|
-
browser: { browser:
|
|
119
|
+
browser: { browser: "chromium" },
|
|
78
120
|
},
|
|
121
|
+
extensions: {},
|
|
79
122
|
};
|
|
80
123
|
/** Provides contextual typing without transforming application configuration. */
|
|
81
124
|
export function defineConfig(config) {
|
|
@@ -89,6 +132,14 @@ export function resolveApplicationConfig(root, input = {}) {
|
|
|
89
132
|
development: {
|
|
90
133
|
...DEFAULT_APPLICATION_CONFIG.development,
|
|
91
134
|
...config.development,
|
|
135
|
+
proxyRoutes: [
|
|
136
|
+
...DEFAULT_APPLICATION_CONFIG.development.proxyRoutes,
|
|
137
|
+
...(config.development?.proxyRoutes ?? []).map((route) => ({
|
|
138
|
+
preserveHostHeader: false,
|
|
139
|
+
rewriteLocalhostCookies: false,
|
|
140
|
+
...route,
|
|
141
|
+
})),
|
|
142
|
+
],
|
|
92
143
|
},
|
|
93
144
|
build: {
|
|
94
145
|
...DEFAULT_APPLICATION_CONFIG.build,
|
|
@@ -108,17 +159,21 @@ export function resolveApplicationConfig(root, input = {}) {
|
|
|
108
159
|
...config.test?.browser,
|
|
109
160
|
},
|
|
110
161
|
},
|
|
162
|
+
extensions: config.extensions ?? {},
|
|
111
163
|
};
|
|
112
164
|
}
|
|
113
165
|
export async function loadApplicationConfig(root) {
|
|
114
|
-
const configPath = path.join(root,
|
|
166
|
+
const configPath = path.join(root, "typeferry.config.ts");
|
|
115
167
|
try {
|
|
116
168
|
await access(configPath);
|
|
117
169
|
}
|
|
118
170
|
catch {
|
|
119
171
|
return resolveApplicationConfig(root, withEnvironmentFile({}));
|
|
120
172
|
}
|
|
121
|
-
const jiti = createJiti(import.meta.url, {
|
|
173
|
+
const jiti = createJiti(import.meta.url, {
|
|
174
|
+
alias: { "@": root },
|
|
175
|
+
interopDefault: true,
|
|
176
|
+
});
|
|
122
177
|
const loaded = await jiti.import(configPath, { default: true });
|
|
123
178
|
const parsed = configSchema.parse(loaded);
|
|
124
179
|
const resolved = resolveApplicationConfig(root, withEnvironmentFile(parsed));
|
|
@@ -128,8 +183,8 @@ export async function loadApplicationConfig(root) {
|
|
|
128
183
|
async function validateServerExternalDependencies(config) {
|
|
129
184
|
if (config.build.server.external.length === 0)
|
|
130
185
|
return;
|
|
131
|
-
const manifestPath = path.join(config.root,
|
|
132
|
-
const manifest = packageManifestSchema.parse(JSON.parse(await readFile(manifestPath,
|
|
186
|
+
const manifestPath = path.join(config.root, "package.json");
|
|
187
|
+
const manifest = packageManifestSchema.parse(JSON.parse(await readFile(manifestPath, "utf8")));
|
|
133
188
|
for (const external of config.build.server.external) {
|
|
134
189
|
const packageName = packageNameFromSpecifier(external);
|
|
135
190
|
if (manifest.dependencies?.[packageName] !== undefined)
|
|
@@ -141,13 +196,13 @@ async function validateServerExternalDependencies(config) {
|
|
|
141
196
|
}
|
|
142
197
|
}
|
|
143
198
|
function isPackageSpecifier(value) {
|
|
144
|
-
if (value.includes(
|
|
199
|
+
if (value.includes("*") || value.includes("\\") || value.includes(":")) {
|
|
145
200
|
return false;
|
|
146
201
|
}
|
|
147
|
-
const segments = value.split(
|
|
148
|
-
if (value.startsWith(
|
|
202
|
+
const segments = value.split("/");
|
|
203
|
+
if (value.startsWith("@")) {
|
|
149
204
|
return (segments.length >= 2 &&
|
|
150
|
-
isPackageNameSegment(segments[0]?.slice(1) ??
|
|
205
|
+
isPackageNameSegment(segments[0]?.slice(1) ?? "") &&
|
|
151
206
|
segments.every((segment, index) => index === 0 ? true : isPackageNameSegment(segment)));
|
|
152
207
|
}
|
|
153
208
|
return segments.every(isPackageNameSegment);
|
|
@@ -156,21 +211,21 @@ function isPackageNameSegment(value) {
|
|
|
156
211
|
return /^[a-z0-9][a-z0-9._~-]*$/u.test(value);
|
|
157
212
|
}
|
|
158
213
|
function packageNameFromSpecifier(specifier) {
|
|
159
|
-
const segments = specifier.split(
|
|
160
|
-
return specifier.startsWith(
|
|
214
|
+
const segments = specifier.split("/");
|
|
215
|
+
return specifier.startsWith("@")
|
|
161
216
|
? `${segments[0]}/${segments[1]}`
|
|
162
217
|
: (segments[0] ?? specifier);
|
|
163
218
|
}
|
|
164
219
|
function withEnvironmentFile(config) {
|
|
165
220
|
if (config.development?.serverEnvironmentFile !== undefined ||
|
|
166
|
-
process.env[
|
|
221
|
+
process.env["DEVELOP_ENV_FILE"] === undefined) {
|
|
167
222
|
return config;
|
|
168
223
|
}
|
|
169
224
|
return {
|
|
170
225
|
...config,
|
|
171
226
|
development: {
|
|
172
227
|
...config.development,
|
|
173
|
-
serverEnvironmentFile: process.env[
|
|
228
|
+
serverEnvironmentFile: process.env["DEVELOP_ENV_FILE"],
|
|
174
229
|
},
|
|
175
230
|
};
|
|
176
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,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
|
external: [...config.build.server.external],
|
|
6
6
|
entryPoints: [
|
|
@@ -13,5 +13,6 @@ export function createServerBuildOptions(config) {
|
|
|
13
13
|
supported: { decorators: false },
|
|
14
14
|
target: config.build.target,
|
|
15
15
|
};
|
|
16
|
+
return config.extensions.serverBuild?.(buildOptions) ?? buildOptions;
|
|
16
17
|
}
|
|
17
18
|
//# 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,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3C,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.10.0",
|
|
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"
|