typeferry 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,11 @@ The TypeScript implementation of TypeFerry provides the reference Node.js server
4
4
 
5
5
  Install the public TypeScript package with `npm install typeferry`. Repository contributors can use the local [`template/`](../template/) workflow described in the [quickstart](../docs/getting-started.md).
6
6
 
7
+ AI coding agents building consumer applications should begin with the
8
+ [agent application guide](https://github.com/leonardoventurini/typeferry/blob/main/docs/agents/application-development.md).
9
+ It defines the supported project structure, public imports, package-owned
10
+ commands, optional configuration, safety boundaries, and completion checks.
11
+
7
12
  ## Runtime requirements
8
13
 
9
14
  - Node.js `24.19.0`
@@ -71,6 +76,11 @@ export default defineConfig({
71
76
  })
72
77
  ```
73
78
 
79
+ See the full
80
+ [application framework guide](https://github.com/leonardoventurini/typeferry/blob/main/docs/typescript/application-framework.md)
81
+ for command behavior, test discovery, every configuration field, migration,
82
+ ownership boundaries, upgrades, and troubleshooting.
83
+
74
84
  ## Define and serve a typed method
75
85
 
76
86
  ```ts
@@ -127,4 +137,4 @@ npm pack --dry-run
127
137
 
128
138
  ## Guides
129
139
 
130
- Start at the [documentation home](../docs/README.md) or jump to [server and RPC](../docs/typescript/server-rpc.md), [client](../docs/typescript/client.md), [React](../docs/typescript/react.md), [authentication](../docs/typescript/authentication.md), [events and channels](../docs/typescript/events-and-channels.md), [MongoDB](../docs/typescript/mongodb.md), [EJSON](../docs/typescript/ejson.md), or [deployment](../docs/typescript/deployment.md).
140
+ Start at the [documentation home](../docs/README.md) or jump to the [application framework](../docs/typescript/application-framework.md), [server and RPC](../docs/typescript/server-rpc.md), [client](../docs/typescript/client.md), [React](../docs/typescript/react.md), [authentication](../docs/typescript/authentication.md), [events and channels](../docs/typescript/events-and-channels.md), [MongoDB](../docs/typescript/mongodb.md), [EJSON](../docs/typescript/ejson.md), or [deployment](../docs/typescript/deployment.md).
@@ -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;
@@ -31,6 +56,7 @@ export interface ResolvedApplicationConfig {
31
56
  readonly clientPort: number;
32
57
  readonly serverPort: number;
33
58
  readonly serverEnvironmentFile: string;
59
+ readonly proxyRoutes: readonly ResolvedDevelopmentProxyRoute[];
34
60
  };
35
61
  readonly build: {
36
62
  readonly target: string;
@@ -44,6 +70,7 @@ export interface ResolvedApplicationConfig {
44
70
  readonly browser: BrowserName;
45
71
  };
46
72
  };
73
+ readonly extensions: ApplicationToolingExtensions;
47
74
  }
48
75
  export declare const DEFAULT_APPLICATION_CONFIG: {
49
76
  readonly paths: {
@@ -57,6 +84,23 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
57
84
  readonly clientPort: 8000;
58
85
  readonly serverPort: 8002;
59
86
  readonly serverEnvironmentFile: ".env.server";
87
+ readonly proxyRoutes: readonly [{
88
+ readonly pathPrefix: "/.well-known";
89
+ readonly preserveHostHeader: true;
90
+ readonly rewriteLocalhostCookies: false;
91
+ }, {
92
+ readonly pathPrefix: "/mcp";
93
+ readonly preserveHostHeader: true;
94
+ readonly rewriteLocalhostCookies: false;
95
+ }, {
96
+ readonly pathPrefix: "/oauth";
97
+ readonly preserveHostHeader: true;
98
+ readonly rewriteLocalhostCookies: false;
99
+ }, {
100
+ readonly pathPrefix: "/__h";
101
+ readonly preserveHostHeader: true;
102
+ readonly rewriteLocalhostCookies: true;
103
+ }];
60
104
  };
61
105
  readonly build: {
62
106
  readonly target: "es2023";
@@ -70,6 +114,7 @@ export declare const DEFAULT_APPLICATION_CONFIG: {
70
114
  readonly browser: BrowserName;
71
115
  };
72
116
  };
117
+ readonly extensions: {};
73
118
  };
74
119
  /** Provides contextual typing without transforming application configuration. */
75
120
  export declare function defineConfig(config: TypeFerryConfig): TypeFerryConfig;
@@ -1,16 +1,36 @@
1
- import { access } from '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 proxyPathPrefixSchema = z.string().regex(/^\/(?!$)[^?#]*[^/]$/u, {
8
+ error: "pathPrefix must be a non-root path without a query, fragment, or trailing slash",
9
+ });
10
+ const proxyRouteSchema = z
11
+ .object({
12
+ pathPrefix: proxyPathPrefixSchema,
13
+ preserveHostHeader: z.boolean().optional(),
14
+ rewriteLocalhostCookies: z.boolean().optional(),
15
+ })
16
+ .strict();
17
+ const extensionsSchema = z
18
+ .object({
19
+ vite: z.function().optional(),
20
+ serverBuild: z.function().optional(),
21
+ test: z.function().optional(),
22
+ afterBuild: z.function().optional(),
23
+ })
24
+ .strict();
7
25
  const configSchema = z
8
26
  .object({
27
+ extensions: extensionsSchema.optional(),
9
28
  development: z
10
29
  .object({
11
30
  clientPort: positivePortSchema.optional(),
12
31
  serverPort: positivePortSchema.optional(),
13
32
  serverEnvironmentFile: z.string().min(1).optional(),
33
+ proxyRoutes: z.array(proxyRouteSchema).optional(),
14
34
  })
15
35
  .strict()
16
36
  .optional(),
@@ -38,25 +58,48 @@ const configSchema = z
38
58
  .strict();
39
59
  export const DEFAULT_APPLICATION_CONFIG = {
40
60
  paths: {
41
- client: 'client',
42
- common: 'common',
43
- server: 'server',
44
- tests: 'test',
45
- output: 'dist',
61
+ client: "client",
62
+ common: "common",
63
+ server: "server",
64
+ tests: "test",
65
+ output: "dist",
46
66
  },
47
67
  development: {
48
68
  clientPort: 8000,
49
69
  serverPort: 8002,
50
- serverEnvironmentFile: '.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
+ ],
51
93
  },
52
94
  build: {
53
- target: 'es2023',
95
+ target: "es2023",
54
96
  sourceMaps: true,
55
97
  },
56
98
  test: {
57
99
  integration: { timeout: 30_000 },
58
- browser: { browser: 'chromium' },
100
+ browser: { browser: "chromium" },
59
101
  },
102
+ extensions: {},
60
103
  };
61
104
  /** Provides contextual typing without transforming application configuration. */
62
105
  export function defineConfig(config) {
@@ -70,6 +113,14 @@ export function resolveApplicationConfig(root, input = {}) {
70
113
  development: {
71
114
  ...DEFAULT_APPLICATION_CONFIG.development,
72
115
  ...config.development,
116
+ proxyRoutes: [
117
+ ...DEFAULT_APPLICATION_CONFIG.development.proxyRoutes,
118
+ ...(config.development?.proxyRoutes ?? []).map((route) => ({
119
+ preserveHostHeader: false,
120
+ rewriteLocalhostCookies: false,
121
+ ...route,
122
+ })),
123
+ ],
73
124
  },
74
125
  build: {
75
126
  ...DEFAULT_APPLICATION_CONFIG.build,
@@ -85,31 +136,35 @@ export function resolveApplicationConfig(root, input = {}) {
85
136
  ...config.test?.browser,
86
137
  },
87
138
  },
139
+ extensions: config.extensions ?? {},
88
140
  };
89
141
  }
90
142
  export async function loadApplicationConfig(root) {
91
- const configPath = path.join(root, 'typeferry.config.ts');
143
+ const configPath = path.join(root, "typeferry.config.ts");
92
144
  try {
93
145
  await access(configPath);
94
146
  }
95
147
  catch {
96
148
  return resolveApplicationConfig(root, withEnvironmentFile({}));
97
149
  }
98
- const jiti = createJiti(import.meta.url, { interopDefault: true });
150
+ const jiti = createJiti(import.meta.url, {
151
+ alias: { "@": root },
152
+ interopDefault: true,
153
+ });
99
154
  const loaded = await jiti.import(configPath, { default: true });
100
155
  const parsed = configSchema.parse(loaded);
101
156
  return resolveApplicationConfig(root, withEnvironmentFile(parsed));
102
157
  }
103
158
  function withEnvironmentFile(config) {
104
159
  if (config.development?.serverEnvironmentFile !== undefined ||
105
- process.env['DEVELOP_ENV_FILE'] === undefined) {
160
+ process.env["DEVELOP_ENV_FILE"] === undefined) {
106
161
  return config;
107
162
  }
108
163
  return {
109
164
  ...config,
110
165
  development: {
111
166
  ...config.development,
112
- serverEnvironmentFile: process.env['DEVELOP_ENV_FILE'],
167
+ serverEnvironmentFile: process.env["DEVELOP_ENV_FILE"],
113
168
  },
114
169
  };
115
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAOlC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgFxB,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AACpE,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/D,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE;IACrE,KAAK,EACH,iFAAiF;CACpF,CAAC,CAAC;AACH,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,UAAU,EAAE,qBAAqB;IACjC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC1C,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChD,CAAC;KACD,MAAM,EAAE,CAAC;AACZ,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7B,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC7B,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC;KACD,MAAM,EAAE,CAAC;AACZ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,CAAC;IACN,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC;SACX,MAAM,CAAC;QACN,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE;QACzC,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE;QACzC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;KAClD,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACpC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC;QACN,WAAW,EAAE,CAAC;aACX,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;aAC3D,MAAM,EAAE;aACR,QAAQ,EAAE;QACb,OAAO,EAAE,CAAC;aACP,MAAM,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC;aACjD,MAAM,EAAE;aACR,QAAQ,EAAE;KACd,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,EAAE;CACd,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,KAAK,EAAE;QACL,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;KACf;IACD,WAAW,EAAE;QACX,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;QAChB,qBAAqB,EAAE,aAAa;QACpC,WAAW,EAAE;YACX;gBACE,UAAU,EAAE,cAAc;gBAC1B,kBAAkB,EAAE,IAAI;gBACxB,uBAAuB,EAAE,KAAK;aAC/B;YACD;gBACE,UAAU,EAAE,MAAM;gBAClB,kBAAkB,EAAE,IAAI;gBACxB,uBAAuB,EAAE,KAAK;aAC/B;YACD;gBACE,UAAU,EAAE,QAAQ;gBACpB,kBAAkB,EAAE,IAAI;gBACxB,uBAAuB,EAAE,KAAK;aAC/B;YACD;gBACE,UAAU,EAAE,MAAM;gBAClB,kBAAkB,EAAE,IAAI;gBACxB,uBAAuB,EAAE,IAAI;aAC9B;SACF;KACF;IACD,KAAK,EAAE;QACL,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,IAAI;KACjB;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;QAChC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAyB,EAAE;KAChD;IACD,UAAU,EAAE,EAAE;CACN,CAAC;AAEX,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,MAAuB;IAClD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,QAAiB,EAAE;IAEnB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAoB,CAAC;IAE5D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,KAAK,EAAE,0BAA0B,CAAC,KAAK;QACvC,WAAW,EAAE;YACX,GAAG,0BAA0B,CAAC,WAAW;YACzC,GAAG,MAAM,CAAC,WAAW;YACrB,WAAW,EAAE;gBACX,GAAG,0BAA0B,CAAC,WAAW,CAAC,WAAW;gBACrD,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACzD,kBAAkB,EAAE,KAAK;oBACzB,uBAAuB,EAAE,KAAK;oBAC9B,GAAG,KAAK;iBACT,CAAC,CAAC;aACJ;SACF;QACD,KAAK,EAAE;YACL,GAAG,0BAA0B,CAAC,KAAK;YACnC,GAAG,MAAM,CAAC,KAAK;SAChB;QACD,IAAI,EAAE;YACJ,WAAW,EAAE;gBACX,GAAG,0BAA0B,CAAC,IAAI,CAAC,WAAW;gBAC9C,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW;aAC5B;YACD,OAAO,EAAE;gBACP,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO;gBAC1C,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO;aACxB;SACF;QACD,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY;IAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAE1D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACvC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;QACpB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,MAAM,MAAM,GAAY,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAoB,CAAC;IAC7D,OAAO,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAuB;IAClD,IACE,MAAM,CAAC,WAAW,EAAE,qBAAqB,KAAK,SAAS;QACvD,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,SAAS,EAC7C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,WAAW,EAAE;YACX,GAAG,MAAM,CAAC,WAAW;YACrB,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;SACvD;KACF,CAAC;AACJ,CAAC"}
@@ -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
  entryPoints: [
6
6
  path.join(config.root, config.paths.server, 'index.ts'),
@@ -12,5 +12,6 @@ export function createServerBuildOptions(config) {
12
12
  supported: { decorators: false },
13
13
  target: config.build.target,
14
14
  };
15
+ return config.extensions.serverBuild?.(buildOptions) ?? buildOptions;
15
16
  }
16
17
  //# sourceMappingURL=server-build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-build.js","sourceRoot":"","sources":["../../src/application/server-build.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAM5B,MAAM,UAAU,wBAAwB,CACtC,MAAiC;IAEjC,OAAO;QACL,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;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":"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,MAAM,UAAU,GAA0B;QACxC,UAAU,EAAE,KAAK;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,EAAE,KAAK,EAAE;QAClB,IAAI,EAAE;YACJ,QAAQ,EAAE;gBACR;oBACE,OAAO,EAAE,EAAE,KAAK,EAAE;oBAClB,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM;wBACZ,eAAe,EAAE,KAAK;wBACtB,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,EAAE;wBACpD,OAAO,EAAE;4BACP,GAAG,YAAY,oBAAoB;4BACnC,GAAG,YAAY,qBAAqB;yBACrC;wBACD,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC;qBACxD;iBACF;gBACD;oBACE,OAAO,EAAE;wBACP,KAAK,CAAC;4BACJ,YAAY,EAAE,SAAS;4BACvB,OAAO,EAAE,KAAK;4BACd,UAAU,EAAE,KAAK;4BACjB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;4BAC3B,OAAO,EAAE;gCACP;oCACE,mCAAmC;oCACnC,EAAE,OAAO,EAAE,SAAS,EAAE;iCACvB;6BACF;yBACF,CAAC;qBACH;oBACD,OAAO,EAAE,EAAE,KAAK,EAAE;oBAClB,IAAI,EAAE;wBACJ,IAAI,EAAE,aAAa;wBACnB,eAAe,EAAE,KAAK;wBACtB,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,EAAE;wBACpD,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO;wBAC5C,OAAO,EAAE;4BACP,GAAG,YAAY,2BAA2B;4BAC1C,GAAG,YAAY,4BAA4B;yBAC5C;wBACD,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,CAAC;wBAC9D,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO;qBAC7C;iBACF;gBACD;oBACE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC;oBACjC,OAAO,EAAE;wBACP,KAAK,EAAE;4BACL,GAAG,KAAK;4BACR,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC;4BACtD,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC;yBACjE;qBACF;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,SAAS;wBACf,eAAe,EAAE,KAAK;wBACtB,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,EAAE;wBACpD,iEAAiE;wBACjE,iDAAiD;wBACjD,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE;4BACP,OAAO,EAAE,IAAI;4BACb,QAAQ,EAAE,IAAI;4BACd,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;4BACrD,QAAQ,EAAE,UAAU,EAAE;4BACtB,kBAAkB,EAAE,KAAK;yBAC1B;wBACD,OAAO,EAAE;4BACP,GAAG,YAAY,uBAAuB;4BACtC,GAAG,YAAY,wBAAwB;yBACxC;wBACD,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC;qBAC3D;iBACF;aACF;SACF;KACF,CAAA;IAED,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,UAAU,CAAA;AAC3D,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,QAAgB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IACnD,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACjD,CAAC"}
@@ -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.8.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"