typeferry 0.9.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 CHANGED
@@ -73,18 +73,9 @@ export default defineConfig({
73
73
  clientPort: 8000,
74
74
  serverPort: 8002,
75
75
  },
76
- build: {
77
- server: {
78
- external: ['sharp'],
79
- },
80
- },
81
76
  })
82
77
  ```
83
78
 
84
- Server dependencies are bundled by default. Configured externals must be direct
85
- application `dependencies`, and the application must ship them in its
86
- production runtime installation.
87
-
88
79
  See the full
89
80
  [application framework guide](https://github.com/leonardoventurini/typeferry/blob/main/docs/typescript/application-framework.md)
90
81
  for command behavior, test discovery, every configuration field, migration,
@@ -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,16 +1,38 @@
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;
10
35
  readonly sourceMaps?: boolean;
11
- readonly server?: {
12
- readonly external?: readonly string[];
13
- };
14
36
  };
15
37
  readonly test?: {
16
38
  readonly integration?: {
@@ -34,13 +56,11 @@ export interface ResolvedApplicationConfig {
34
56
  readonly clientPort: number;
35
57
  readonly serverPort: number;
36
58
  readonly serverEnvironmentFile: string;
59
+ readonly proxyRoutes: readonly ResolvedDevelopmentProxyRoute[];
37
60
  };
38
61
  readonly build: {
39
62
  readonly target: string;
40
63
  readonly sourceMaps: boolean;
41
- readonly server: {
42
- readonly external: readonly string[];
43
- };
44
64
  };
45
65
  readonly test: {
46
66
  readonly integration: {
@@ -50,6 +70,7 @@ export interface ResolvedApplicationConfig {
50
70
  readonly browser: BrowserName;
51
71
  };
52
72
  };
73
+ readonly extensions: ApplicationToolingExtensions;
53
74
  }
54
75
  export declare const DEFAULT_APPLICATION_CONFIG: {
55
76
  readonly paths: {
@@ -63,13 +84,27 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
63
84
  readonly clientPort: 8000;
64
85
  readonly serverPort: 8002;
65
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
+ }];
66
104
  };
67
105
  readonly build: {
68
106
  readonly target: "es2023";
69
107
  readonly sourceMaps: true;
70
- readonly server: {
71
- readonly external: readonly string[];
72
- };
73
108
  };
74
109
  readonly test: {
75
110
  readonly integration: {
@@ -79,6 +114,7 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
79
114
  readonly browser: BrowserName;
80
115
  };
81
116
  };
117
+ readonly extensions: {};
82
118
  };
83
119
  /** Provides contextual typing without transforming application configuration. */
84
120
  export declare function defineConfig(config: TypeFerryConfig): TypeFerryConfig;
@@ -1,28 +1,36 @@
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 } 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 packageManifestSchema = z.object({
8
- dependencies: z.record(z.string(), z.string()).optional(),
9
- devDependencies: z.record(z.string(), z.string()).optional(),
10
- });
11
- const serverExternalSchema = z
12
- .array(z
13
- .string()
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',
7
+ const proxyPathPrefixSchema = z.string().regex(/^\/(?!$)[^?#]*[^/]$/u, {
8
+ error: "pathPrefix must be a non-root path without a query, fragment, or trailing slash",
18
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();
19
25
  const configSchema = z
20
26
  .object({
27
+ extensions: extensionsSchema.optional(),
21
28
  development: z
22
29
  .object({
23
30
  clientPort: positivePortSchema.optional(),
24
31
  serverPort: positivePortSchema.optional(),
25
32
  serverEnvironmentFile: z.string().min(1).optional(),
33
+ proxyRoutes: z.array(proxyRouteSchema).optional(),
26
34
  })
27
35
  .strict()
28
36
  .optional(),
@@ -30,10 +38,6 @@ const configSchema = z
30
38
  .object({
31
39
  target: z.string().min(1).optional(),
32
40
  sourceMaps: z.boolean().optional(),
33
- server: z
34
- .object({ external: serverExternalSchema.optional() })
35
- .strict()
36
- .optional(),
37
41
  })
38
42
  .strict()
39
43
  .optional(),
@@ -54,28 +58,48 @@ const configSchema = z
54
58
  .strict();
55
59
  export const DEFAULT_APPLICATION_CONFIG = {
56
60
  paths: {
57
- client: 'client',
58
- common: 'common',
59
- server: 'server',
60
- tests: 'test',
61
- output: 'dist',
61
+ client: "client",
62
+ common: "common",
63
+ server: "server",
64
+ tests: "test",
65
+ output: "dist",
62
66
  },
63
67
  development: {
64
68
  clientPort: 8000,
65
69
  serverPort: 8002,
66
- serverEnvironmentFile: '.env.server',
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
+ ],
67
93
  },
68
94
  build: {
69
- target: 'es2023',
95
+ target: "es2023",
70
96
  sourceMaps: true,
71
- server: {
72
- external: [],
73
- },
74
97
  },
75
98
  test: {
76
99
  integration: { timeout: 30_000 },
77
- browser: { browser: 'chromium' },
100
+ browser: { browser: "chromium" },
78
101
  },
102
+ extensions: {},
79
103
  };
80
104
  /** Provides contextual typing without transforming application configuration. */
81
105
  export function defineConfig(config) {
@@ -89,14 +113,18 @@ export function resolveApplicationConfig(root, input = {}) {
89
113
  development: {
90
114
  ...DEFAULT_APPLICATION_CONFIG.development,
91
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
+ ],
92
124
  },
93
125
  build: {
94
126
  ...DEFAULT_APPLICATION_CONFIG.build,
95
127
  ...config.build,
96
- server: {
97
- ...DEFAULT_APPLICATION_CONFIG.build.server,
98
- ...config.build?.server,
99
- },
100
128
  },
101
129
  test: {
102
130
  integration: {
@@ -108,69 +136,35 @@ export function resolveApplicationConfig(root, input = {}) {
108
136
  ...config.test?.browser,
109
137
  },
110
138
  },
139
+ extensions: config.extensions ?? {},
111
140
  };
112
141
  }
113
142
  export async function loadApplicationConfig(root) {
114
- const configPath = path.join(root, 'typeferry.config.ts');
143
+ const configPath = path.join(root, "typeferry.config.ts");
115
144
  try {
116
145
  await access(configPath);
117
146
  }
118
147
  catch {
119
148
  return resolveApplicationConfig(root, withEnvironmentFile({}));
120
149
  }
121
- const jiti = createJiti(import.meta.url, { interopDefault: true });
150
+ const jiti = createJiti(import.meta.url, {
151
+ alias: { "@": root },
152
+ interopDefault: true,
153
+ });
122
154
  const loaded = await jiti.import(configPath, { default: true });
123
155
  const parsed = configSchema.parse(loaded);
124
- const resolved = resolveApplicationConfig(root, withEnvironmentFile(parsed));
125
- await validateServerExternalDependencies(resolved);
126
- return resolved;
127
- }
128
- async function validateServerExternalDependencies(config) {
129
- if (config.build.server.external.length === 0)
130
- return;
131
- const manifestPath = path.join(config.root, 'package.json');
132
- const manifest = packageManifestSchema.parse(JSON.parse(await readFile(manifestPath, 'utf8')));
133
- for (const external of config.build.server.external) {
134
- const packageName = packageNameFromSpecifier(external);
135
- if (manifest.dependencies?.[packageName] !== undefined)
136
- continue;
137
- if (manifest.devDependencies?.[packageName] !== undefined) {
138
- throw new Error(`Server external "${external}" must be declared in dependencies, not devDependencies`);
139
- }
140
- throw new Error(`Server external "${external}" must be declared in package.json dependencies`);
141
- }
142
- }
143
- function isPackageSpecifier(value) {
144
- if (value.includes('*') || value.includes('\\') || value.includes(':')) {
145
- return false;
146
- }
147
- const segments = value.split('/');
148
- if (value.startsWith('@')) {
149
- return (segments.length >= 2 &&
150
- isPackageNameSegment(segments[0]?.slice(1) ?? '') &&
151
- segments.every((segment, index) => index === 0 ? true : isPackageNameSegment(segment)));
152
- }
153
- return segments.every(isPackageNameSegment);
154
- }
155
- function isPackageNameSegment(value) {
156
- return /^[a-z0-9][a-z0-9._~-]*$/u.test(value);
157
- }
158
- function packageNameFromSpecifier(specifier) {
159
- const segments = specifier.split('/');
160
- return specifier.startsWith('@')
161
- ? `${segments[0]}/${segments[1]}`
162
- : (segments[0] ?? specifier);
156
+ return resolveApplicationConfig(root, withEnvironmentFile(parsed));
163
157
  }
164
158
  function withEnvironmentFile(config) {
165
159
  if (config.development?.serverEnvironmentFile !== undefined ||
166
- process.env['DEVELOP_ENV_FILE'] === undefined) {
160
+ process.env["DEVELOP_ENV_FILE"] === undefined) {
167
161
  return config;
168
162
  }
169
163
  return {
170
164
  ...config,
171
165
  development: {
172
166
  ...config.development,
173
- serverEnvironmentFile: process.env['DEVELOP_ENV_FILE'],
167
+ serverEnvironmentFile: process.env["DEVELOP_ENV_FILE"],
174
168
  },
175
169
  };
176
170
  }
@@ -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":"AAAA,OAAO,EAGL,OAAO,IAAI,iBAAiB,GAE7B,MAAM,WAAW,CAAC;AAMnB,MAAM,+BAA+B,GAAG,qBAAqB,CAAC;AAC9D,MAAM,6BAA6B,GAAG,kBAAkB,CAAC;AACzD,MAAM,+BAA+B,GAAG,eAAe,CAAC;AAExD,MAAM,UAAU,yBAAyB,CACvC,GAAuB,EACvB,MAAgD;IAEhD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEnC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,CACL,MAAM,CAAC,IAAI,CACT,CAAC,KAAK,EAAE,EAAE,CACR,QAAQ,KAAK,KAAK,CAAC,UAAU;QAC7B,QAAQ,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,IAAI,CACxD,IAAI,IAAI,CACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAmB,EACnB,MAAgD;IAEhD,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,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC7D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,EAAE,CAAC;oBACP,OAAO;gBACT,CAAC;gBAED,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CACjC,YAAiC;IAEjC,MAAM,OAAO,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/C,MAAM,gBAAgB,GAAG,MAAM;iBAC5B,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;iBAC5C,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;YAEhD,IAAI,6BAA6B,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACzD,OAAO,gBAAgB,CAAC,OAAO,CAC7B,6BAA6B,EAC7B,UAAU,CACX,CAAC;YACJ,CAAC;YAED,OAAO,GAAG,gBAAgB,UAAU,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,YAAY,CACnB,aAA8B,EAC9B,cAA8B,EAC9B,WAAmB,EACnB,KAAoC;IAEpC,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,KAAK,CAAC,kBAAkB;YAC/B,CAAC,CAAC,aAAa,CAAC,OAAO;YACvB,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,WAAW,EAAE,EAAE;KACnE,EACD,CAAC,aAAa,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,KAAK,CAAC,uBAAuB;YAC3C,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC;YAC5C,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC;QAC1B,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;QACnE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,CACF,CAAC;IAEF,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,CAAC;QAClE,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC"}
@@ -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,8 +1,7 @@
1
1
  import path from 'node:path';
2
2
  export function createServerBuildOptions(config) {
3
- return {
3
+ const buildOptions = {
4
4
  bundle: true,
5
- external: [...config.build.server.external],
6
5
  entryPoints: [
7
6
  path.join(config.root, config.paths.server, 'index.ts'),
8
7
  ],
@@ -13,5 +12,6 @@ export function createServerBuildOptions(config) {
13
12
  supported: { decorators: false },
14
13
  target: config.build.target,
15
14
  };
15
+ return config.extensions.serverBuild?.(buildOptions) ?? buildOptions;
16
16
  }
17
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,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,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.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": "./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"