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.
@@ -17,5 +17,6 @@ export async function runBuild(config) {
17
17
  buildClient(createViteConfig(config, 'build')),
18
18
  buildServer(createServerBuildOptions(config)),
19
19
  ]);
20
+ await config.extensions.afterBuild?.();
20
21
  }
21
22
  //# sourceMappingURL=build.js.map
@@ -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;AACJ,CAAC"}
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
- for (const argument of arguments_) {
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":"AAWA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAkB;IAC7C,MAAM;IACN,aAAa;IACb,SAAS;CACV,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GACpB,gGAAgG,CAAA;AAElG,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;IAEjB,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,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,KAAK,EAAE;QAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AACzC,CAAC"}
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
- export type BrowserName = 'chromium' | 'firefox' | 'webkit';
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 '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']);
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, 'Expected an npm package specifier'))
16
- .refine(values => new Set(values).size === values.length, {
17
- message: 'Server external package specifiers must not contain duplicates',
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: 'client',
58
- common: 'common',
59
- server: 'server',
60
- tests: 'test',
61
- output: 'dist',
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: '.env.server',
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: 'es2023',
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: 'chromium' },
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, 'typeferry.config.ts');
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, { interopDefault: true });
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, 'package.json');
132
- const manifest = packageManifestSchema.parse(JSON.parse(await readFile(manifestPath, 'utf8')));
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('*') || value.includes('\\') || 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['DEVELOP_ENV_FILE'] === undefined) {
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['DEVELOP_ENV_FILE'],
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":"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"}
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 'node:http';
2
- import type { Plugin } from 'vite';
3
- export declare function isTypeFerryHttpPath(url: string | undefined): boolean;
4
- export declare function createTypeFerryDevProxy(backendPort: number): Plugin;
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 'node:http';
2
- export function isTypeFerryHttpPath(url) {
3
- return url === '/__h' || url?.startsWith('/__h/') === true;
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: 'typeferry-development-proxy',
14
+ name: "typeferry-development-proxy",
8
15
  configureServer(server) {
9
16
  server.middlewares.use((request, response, next) => {
10
- if (!isTypeFerryHttpPath(request.url)) {
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['set-cookie'];
30
+ const setCookie = headers["set-cookie"];
23
31
  if (setCookie) {
24
- headers['set-cookie'] = setCookie.map(cookie => cookie.replace(/;\s*Domain=[^;]+/giu, ''));
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: '127.0.0.1',
46
+ hostname: "127.0.0.1",
31
47
  port: backendPort,
32
48
  method: clientRequest.method,
33
49
  path: clientRequest.url,
34
- headers: {
35
- ...clientRequest.headers,
36
- host: `localhost:${backendPort}`,
37
- },
38
- }, proxyResponse => {
39
- clientResponse.writeHead(proxyResponse.statusCode ?? 502, rewriteProxyHeaders(proxyResponse.headers));
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('error', (error) => {
60
+ proxyRequest.on("error", (error) => {
43
61
  if (!clientResponse.headersSent) {
44
- clientResponse.writeHead(502, { 'content-type': 'text/plain' });
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('aborted', () => proxyRequest.destroy());
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,CAAA;AAIlB,MAAM,UAAU,mBAAmB,CAAC,GAAuB;IACzD,OAAO,GAAG,KAAK,MAAM,IAAI,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IACzD,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,eAAe,CAAC,MAAM;YACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;gBACjD,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtC,IAAI,EAAE,CAAA;oBACN,OAAM;gBACR,CAAC;gBAED,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;YAC9C,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CACjC,YAAiC;IAEjC,MAAM,OAAO,GAAG,EAAE,GAAG,YAAY,EAAE,CAAA;IACnC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAC7C,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAC1C,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,aAA8B,EAC9B,cAA8B,EAC9B,WAAmB;IAEnB,MAAM,YAAY,GAAG,iBAAiB,CACpC;QACE,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,aAAa,CAAC,MAAM;QAC5B,IAAI,EAAE,aAAa,CAAC,GAAG;QACvB,OAAO,EAAE;YACP,GAAG,aAAa,CAAC,OAAO;YACxB,IAAI,EAAE,aAAa,WAAW,EAAE;SACjC;KACF,EACD,aAAa,CAAC,EAAE;QACd,cAAc,CAAC,SAAS,CACtB,aAAa,CAAC,UAAU,IAAI,GAAG,EAC/B,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAC3C,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACpC,CAAC,CACF,CAAA;IAED,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;QACxC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;YAChC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;QACjE,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3E,CAAC,CAAC,CAAA;IACF,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAA;IACzD,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;AAClC,CAAC"}
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
- const vitest = await startVitest('test', [], {
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;IAEd,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,MAAM,EACN,EAAE,EACF;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"}
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
- return {
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,OAAO;QACL,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;AACH,CAAC"}
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
- return {
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":"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"}
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 'vite';
2
- import type { ResolvedApplicationConfig } from './config.js';
3
- export declare function createViteConfig(config: ResolvedApplicationConfig, command: 'develop' | 'build'): InlineConfig;
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 'node:path';
2
- import tailwindcss from '@tailwindcss/vite';
3
- import react from '@vitejs/plugin-react';
4
- import { createTypeFerryDevProxy } from './proxy.js';
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 === 'develop') {
8
- plugins.unshift(createTypeFerryDevProxy(config.development.serverPort));
7
+ if (command === "develop") {
8
+ plugins.unshift(createTypeFerryDevProxy(config.development.serverPort, config.development.proxyRoutes));
9
9
  }
10
- return {
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: '0.0.0.0',
16
+ host: "0.0.0.0",
17
17
  port: config.development.clientPort,
18
18
  hmr: { overlay: true },
19
19
  watch: {
20
- ignored: ['**/*.spec.ts', '**/*.spec.tsx'],
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, 'node_modules', 'react'),
27
- 'react-dom': path.join(config.root, 'node_modules', 'react-dom'),
28
- '@': config.root,
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, 'client')),
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, 'index.html'),
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,CAAA;AAE5B,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,sBAAsB,CAAA;AAIxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAEjD,MAAM,UAAU,gBAAgB,CAC9B,MAAiC,EACjC,OAA4B;IAE5B,MAAM,OAAO,GAAmB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAA;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,OAAO;QACL,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,CAAA;AACH,CAAC"}
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
@@ -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;AACtD,CAAC"}
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.9.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": "./dist/cli/index.js"
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": "5.2.0",
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": "7.3.6",
117
+ "vite": "^8.2.2",
118
118
  "vitest": "4.1.11",
119
119
  "ws": "^8.21.3",
120
120
  "zod": "^4.4.3"