@tanstack/start-plugin-core 1.162.9 → 1.163.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/dist/esm/import-protection-plugin/defaults.js +4 -2
- package/dist/esm/import-protection-plugin/defaults.js.map +1 -1
- package/dist/esm/import-protection-plugin/plugin.d.ts +0 -1
- package/dist/esm/import-protection-plugin/plugin.js +79 -99
- package/dist/esm/import-protection-plugin/plugin.js.map +1 -1
- package/dist/esm/import-protection-plugin/virtualModules.d.ts +18 -6
- package/dist/esm/import-protection-plugin/virtualModules.js +50 -9
- package/dist/esm/import-protection-plugin/virtualModules.js.map +1 -1
- package/dist/esm/schema.d.ts +29 -0
- package/dist/esm/schema.js +2 -1
- package/dist/esm/schema.js.map +1 -1
- package/package.json +2 -2
- package/src/import-protection-plugin/INTERNALS.md +25 -17
- package/src/import-protection-plugin/defaults.ts +2 -0
- package/src/import-protection-plugin/plugin.ts +133 -140
- package/src/import-protection-plugin/virtualModules.ts +85 -13
- package/src/schema.ts +1 -0
package/dist/esm/schema.d.ts
CHANGED
|
@@ -4,12 +4,15 @@ declare const importProtectionBehaviorSchema: z.ZodEnum<["error", "mock"]>;
|
|
|
4
4
|
declare const importProtectionEnvRulesSchema: z.ZodObject<{
|
|
5
5
|
specifiers: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
6
6
|
files: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
7
|
+
excludeFiles: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
7
8
|
}, "strip", z.ZodTypeAny, {
|
|
8
9
|
specifiers?: (string | RegExp)[] | undefined;
|
|
9
10
|
files?: (string | RegExp)[] | undefined;
|
|
11
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
10
12
|
}, {
|
|
11
13
|
specifiers?: (string | RegExp)[] | undefined;
|
|
12
14
|
files?: (string | RegExp)[] | undefined;
|
|
15
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
13
16
|
}>;
|
|
14
17
|
declare const importProtectionOptionsSchema: z.ZodOptional<z.ZodObject<{
|
|
15
18
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -38,22 +41,28 @@ declare const importProtectionOptionsSchema: z.ZodOptional<z.ZodObject<{
|
|
|
38
41
|
client: z.ZodOptional<z.ZodObject<{
|
|
39
42
|
specifiers: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
40
43
|
files: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
44
|
+
excludeFiles: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
41
45
|
}, "strip", z.ZodTypeAny, {
|
|
42
46
|
specifiers?: (string | RegExp)[] | undefined;
|
|
43
47
|
files?: (string | RegExp)[] | undefined;
|
|
48
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
44
49
|
}, {
|
|
45
50
|
specifiers?: (string | RegExp)[] | undefined;
|
|
46
51
|
files?: (string | RegExp)[] | undefined;
|
|
52
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
47
53
|
}>>;
|
|
48
54
|
server: z.ZodOptional<z.ZodObject<{
|
|
49
55
|
specifiers: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
50
56
|
files: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
57
|
+
excludeFiles: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
51
58
|
}, "strip", z.ZodTypeAny, {
|
|
52
59
|
specifiers?: (string | RegExp)[] | undefined;
|
|
53
60
|
files?: (string | RegExp)[] | undefined;
|
|
61
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
54
62
|
}, {
|
|
55
63
|
specifiers?: (string | RegExp)[] | undefined;
|
|
56
64
|
files?: (string | RegExp)[] | undefined;
|
|
65
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
57
66
|
}>>;
|
|
58
67
|
ignoreImporters: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
59
68
|
maxTraceDepth: z.ZodOptional<z.ZodNumber>;
|
|
@@ -62,10 +71,12 @@ declare const importProtectionOptionsSchema: z.ZodOptional<z.ZodObject<{
|
|
|
62
71
|
client?: {
|
|
63
72
|
specifiers?: (string | RegExp)[] | undefined;
|
|
64
73
|
files?: (string | RegExp)[] | undefined;
|
|
74
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
65
75
|
} | undefined;
|
|
66
76
|
server?: {
|
|
67
77
|
specifiers?: (string | RegExp)[] | undefined;
|
|
68
78
|
files?: (string | RegExp)[] | undefined;
|
|
79
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
69
80
|
} | undefined;
|
|
70
81
|
exclude?: (string | RegExp)[] | undefined;
|
|
71
82
|
enabled?: boolean | undefined;
|
|
@@ -83,10 +94,12 @@ declare const importProtectionOptionsSchema: z.ZodOptional<z.ZodObject<{
|
|
|
83
94
|
client?: {
|
|
84
95
|
specifiers?: (string | RegExp)[] | undefined;
|
|
85
96
|
files?: (string | RegExp)[] | undefined;
|
|
97
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
86
98
|
} | undefined;
|
|
87
99
|
server?: {
|
|
88
100
|
specifiers?: (string | RegExp)[] | undefined;
|
|
89
101
|
files?: (string | RegExp)[] | undefined;
|
|
102
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
90
103
|
} | undefined;
|
|
91
104
|
exclude?: (string | RegExp)[] | undefined;
|
|
92
105
|
enabled?: boolean | undefined;
|
|
@@ -402,10 +415,12 @@ export declare function parseStartConfig(opts: z.input<typeof tanstackStartOptio
|
|
|
402
415
|
client?: {
|
|
403
416
|
specifiers?: (string | RegExp)[] | undefined;
|
|
404
417
|
files?: (string | RegExp)[] | undefined;
|
|
418
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
405
419
|
} | undefined;
|
|
406
420
|
server?: {
|
|
407
421
|
specifiers?: (string | RegExp)[] | undefined;
|
|
408
422
|
files?: (string | RegExp)[] | undefined;
|
|
423
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
409
424
|
} | undefined;
|
|
410
425
|
exclude?: (string | RegExp)[] | undefined;
|
|
411
426
|
enabled?: boolean | undefined;
|
|
@@ -3236,22 +3251,28 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3236
3251
|
client: z.ZodOptional<z.ZodObject<{
|
|
3237
3252
|
specifiers: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
3238
3253
|
files: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
3254
|
+
excludeFiles: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
3239
3255
|
}, "strip", z.ZodTypeAny, {
|
|
3240
3256
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3241
3257
|
files?: (string | RegExp)[] | undefined;
|
|
3258
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3242
3259
|
}, {
|
|
3243
3260
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3244
3261
|
files?: (string | RegExp)[] | undefined;
|
|
3262
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3245
3263
|
}>>;
|
|
3246
3264
|
server: z.ZodOptional<z.ZodObject<{
|
|
3247
3265
|
specifiers: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
3248
3266
|
files: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
3267
|
+
excludeFiles: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
3249
3268
|
}, "strip", z.ZodTypeAny, {
|
|
3250
3269
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3251
3270
|
files?: (string | RegExp)[] | undefined;
|
|
3271
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3252
3272
|
}, {
|
|
3253
3273
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3254
3274
|
files?: (string | RegExp)[] | undefined;
|
|
3275
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3255
3276
|
}>>;
|
|
3256
3277
|
ignoreImporters: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodType<RegExp, z.ZodTypeDef, RegExp>]>, "many">>;
|
|
3257
3278
|
maxTraceDepth: z.ZodOptional<z.ZodNumber>;
|
|
@@ -3260,10 +3281,12 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3260
3281
|
client?: {
|
|
3261
3282
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3262
3283
|
files?: (string | RegExp)[] | undefined;
|
|
3284
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3263
3285
|
} | undefined;
|
|
3264
3286
|
server?: {
|
|
3265
3287
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3266
3288
|
files?: (string | RegExp)[] | undefined;
|
|
3289
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3267
3290
|
} | undefined;
|
|
3268
3291
|
exclude?: (string | RegExp)[] | undefined;
|
|
3269
3292
|
enabled?: boolean | undefined;
|
|
@@ -3281,10 +3304,12 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3281
3304
|
client?: {
|
|
3282
3305
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3283
3306
|
files?: (string | RegExp)[] | undefined;
|
|
3307
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3284
3308
|
} | undefined;
|
|
3285
3309
|
server?: {
|
|
3286
3310
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3287
3311
|
files?: (string | RegExp)[] | undefined;
|
|
3312
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3288
3313
|
} | undefined;
|
|
3289
3314
|
exclude?: (string | RegExp)[] | undefined;
|
|
3290
3315
|
enabled?: boolean | undefined;
|
|
@@ -3598,10 +3623,12 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3598
3623
|
client?: {
|
|
3599
3624
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3600
3625
|
files?: (string | RegExp)[] | undefined;
|
|
3626
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3601
3627
|
} | undefined;
|
|
3602
3628
|
server?: {
|
|
3603
3629
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3604
3630
|
files?: (string | RegExp)[] | undefined;
|
|
3631
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3605
3632
|
} | undefined;
|
|
3606
3633
|
exclude?: (string | RegExp)[] | undefined;
|
|
3607
3634
|
enabled?: boolean | undefined;
|
|
@@ -3915,10 +3942,12 @@ declare const tanstackStartOptionsSchema: z.ZodDefault<z.ZodOptional<z.ZodObject
|
|
|
3915
3942
|
client?: {
|
|
3916
3943
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3917
3944
|
files?: (string | RegExp)[] | undefined;
|
|
3945
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3918
3946
|
} | undefined;
|
|
3919
3947
|
server?: {
|
|
3920
3948
|
specifiers?: (string | RegExp)[] | undefined;
|
|
3921
3949
|
files?: (string | RegExp)[] | undefined;
|
|
3950
|
+
excludeFiles?: (string | RegExp)[] | undefined;
|
|
3922
3951
|
} | undefined;
|
|
3923
3952
|
exclude?: (string | RegExp)[] | undefined;
|
|
3924
3953
|
enabled?: boolean | undefined;
|
package/dist/esm/schema.js
CHANGED
|
@@ -6,7 +6,8 @@ const patternSchema = z.union([z.string(), z.instanceof(RegExp)]);
|
|
|
6
6
|
const importProtectionBehaviorSchema = z.enum(["error", "mock"]);
|
|
7
7
|
const importProtectionEnvRulesSchema = z.object({
|
|
8
8
|
specifiers: z.array(patternSchema).optional(),
|
|
9
|
-
files: z.array(patternSchema).optional()
|
|
9
|
+
files: z.array(patternSchema).optional(),
|
|
10
|
+
excludeFiles: z.array(patternSchema).optional()
|
|
10
11
|
});
|
|
11
12
|
const importProtectionOptionsSchema = z.object({
|
|
12
13
|
enabled: z.boolean().optional(),
|
package/dist/esm/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sources":["../../src/schema.ts"],"sourcesContent":["import path from 'node:path'\nimport { z } from 'zod'\nimport { configSchema, getConfig } from '@tanstack/router-plugin'\nimport type { TanStackStartVitePluginCoreOptions } from './types'\n\nconst tsrConfig = configSchema\n .omit({ autoCodeSplitting: true, target: true, verboseFileRoutes: true })\n .partial()\n\n// --- Import Protection Schema ---\n\nconst patternSchema = z.union([z.string(), z.instanceof(RegExp)])\n\nconst importProtectionBehaviorSchema = z.enum(['error', 'mock'])\n\nconst importProtectionEnvRulesSchema = z.object({\n specifiers: z.array(patternSchema).optional(),\n files: z.array(patternSchema).optional(),\n})\n\nconst importProtectionOptionsSchema = z\n .object({\n enabled: z.boolean().optional(),\n behavior: z\n .union([\n importProtectionBehaviorSchema,\n z.object({\n dev: importProtectionBehaviorSchema.optional(),\n build: importProtectionBehaviorSchema.optional(),\n }),\n ])\n .optional(),\n /**\n * In `behavior: 'mock'`, control whether mocked imports emit a runtime\n * console diagnostic when accessed.\n *\n * - 'error': console.error(new Error(...)) (default)\n * - 'warn': console.warn(new Error(...))\n * - 'off': disable runtime diagnostics\n */\n mockAccess: z.enum(['error', 'warn', 'off']).optional(),\n onViolation: z\n .function()\n .args(z.any())\n .returns(\n z.union([\n z.boolean(),\n z.void(),\n z.promise(z.union([z.boolean(), z.void()])),\n ]),\n )\n .optional(),\n include: z.array(patternSchema).optional(),\n exclude: z.array(patternSchema).optional(),\n client: importProtectionEnvRulesSchema.optional(),\n server: importProtectionEnvRulesSchema.optional(),\n ignoreImporters: z.array(patternSchema).optional(),\n maxTraceDepth: z.number().optional(),\n log: z.enum(['once', 'always']).optional(),\n })\n .optional()\n\nexport function parseStartConfig(\n opts: z.input<typeof tanstackStartOptionsSchema>,\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n root: string,\n) {\n const options = tanstackStartOptionsSchema.parse(opts)\n\n const srcDirectory = options.srcDirectory\n\n const routesDirectory = path.resolve(\n root,\n srcDirectory,\n options.router.routesDirectory ?? 'routes',\n )\n\n const generatedRouteTree = path.resolve(\n root,\n srcDirectory,\n options.router.generatedRouteTree ?? 'routeTree.gen.ts',\n )\n\n return {\n ...options,\n router: {\n ...options.router,\n ...getConfig(\n {\n ...options.router,\n routesDirectory,\n generatedRouteTree,\n },\n root,\n ),\n target: corePluginOpts.framework,\n },\n }\n}\n\nconst pageSitemapOptionsSchema = z.object({\n exclude: z.boolean().optional(),\n priority: z.number().min(0).max(1).optional(),\n changefreq: z\n .enum(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'])\n .optional(),\n lastmod: z.union([z.string(), z.date()]).optional(),\n alternateRefs: z\n .array(\n z.object({\n href: z.string(),\n hreflang: z.string(),\n }),\n )\n .optional(),\n images: z\n .array(\n z.object({\n loc: z.string(),\n caption: z.string().optional(),\n title: z.string().optional(),\n }),\n )\n .optional(),\n news: z\n .object({\n publication: z.object({\n name: z.string(),\n language: z.string(),\n }),\n publicationDate: z.union([z.string(), z.date()]),\n title: z.string(),\n })\n .optional(),\n})\n\nconst pageBaseSchema = z.object({\n path: z.string(),\n sitemap: pageSitemapOptionsSchema.optional(),\n fromCrawl: z.boolean().optional(),\n})\n\nconst pagePrerenderOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n outputPath: z.string().optional(),\n autoSubfolderIndex: z.boolean().optional(),\n crawlLinks: z.boolean().optional(),\n retryCount: z.number().optional(),\n retryDelay: z.number().optional(),\n onSuccess: z\n .function()\n .args(\n z.object({\n page: pageBaseSchema,\n html: z.string(),\n }),\n )\n .returns(z.any())\n .optional(),\n headers: z.record(z.string(), z.string()).optional(),\n})\n\nconst spaSchema = z.object({\n enabled: z.boolean().optional().default(true),\n maskPath: z.string().optional().default('/'),\n prerender: pagePrerenderOptionsSchema\n .optional()\n .default({})\n .transform((opts) => ({\n outputPath: opts.outputPath ?? '/_shell',\n crawlLinks: false,\n retryCount: 0,\n ...opts,\n enabled: true,\n })),\n})\n\nconst pageSchema = pageBaseSchema.extend({\n prerender: pagePrerenderOptionsSchema.optional(),\n})\n\nconst tanstackStartOptionsSchema = z\n .object({\n srcDirectory: z.string().optional().default('src'),\n start: z\n .object({\n entry: z.string().optional(),\n })\n .optional()\n .default({}),\n router: z\n .object({\n entry: z.string().optional(),\n basepath: z.string().optional(),\n })\n .and(tsrConfig.optional().default({}))\n .optional()\n .default({}),\n client: z\n .object({\n entry: z.string().optional(),\n base: z.string().optional().default('/_build'),\n })\n .optional()\n .default({}),\n server: z\n .object({\n entry: z.string().optional(),\n build: z\n .object({\n staticNodeEnv: z.boolean().optional().default(true),\n })\n .optional()\n .default({}),\n })\n .optional()\n .default({}),\n serverFns: z\n .object({\n base: z.string().optional().default('/_serverFn'),\n generateFunctionId: z\n .function()\n .args(\n z.object({\n filename: z.string(),\n functionName: z.string(),\n }),\n )\n .returns(z.string().optional())\n .optional(),\n })\n .optional()\n .default({}),\n pages: z.array(pageSchema).optional().default([]),\n sitemap: z\n .object({\n enabled: z.boolean().optional().default(true),\n host: z.string().optional(),\n outputPath: z.string().optional().default('sitemap.xml'),\n })\n .optional(),\n prerender: z\n .object({\n enabled: z.boolean().optional(),\n concurrency: z.number().optional(),\n filter: z.function().args(pageSchema).returns(z.any()).optional(),\n failOnError: z.boolean().optional(),\n autoStaticPathsDiscovery: z.boolean().optional(),\n maxRedirects: z.number().min(0).optional(),\n })\n .and(pagePrerenderOptionsSchema.optional())\n .optional(),\n spa: spaSchema.optional(),\n vite: z\n .object({ installDevServerMiddleware: z.boolean().optional() })\n .optional(),\n importProtection: importProtectionOptionsSchema,\n })\n .optional()\n .default({})\n\nexport type Page = z.infer<typeof pageSchema>\n\nexport type TanStackStartInputConfig = z.input<\n typeof tanstackStartOptionsSchema\n>\nexport type TanStackStartOutputConfig = ReturnType<typeof parseStartConfig>\n\nexport type ImportProtectionBehavior = z.infer<\n typeof importProtectionBehaviorSchema\n>\nexport type ImportProtectionEnvRules = z.infer<\n typeof importProtectionEnvRulesSchema\n>\nexport type ImportProtectionOptions = z.input<\n typeof importProtectionOptionsSchema\n>\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sources":["../../src/schema.ts"],"sourcesContent":["import path from 'node:path'\nimport { z } from 'zod'\nimport { configSchema, getConfig } from '@tanstack/router-plugin'\nimport type { TanStackStartVitePluginCoreOptions } from './types'\n\nconst tsrConfig = configSchema\n .omit({ autoCodeSplitting: true, target: true, verboseFileRoutes: true })\n .partial()\n\n// --- Import Protection Schema ---\n\nconst patternSchema = z.union([z.string(), z.instanceof(RegExp)])\n\nconst importProtectionBehaviorSchema = z.enum(['error', 'mock'])\n\nconst importProtectionEnvRulesSchema = z.object({\n specifiers: z.array(patternSchema).optional(),\n files: z.array(patternSchema).optional(),\n excludeFiles: z.array(patternSchema).optional(),\n})\n\nconst importProtectionOptionsSchema = z\n .object({\n enabled: z.boolean().optional(),\n behavior: z\n .union([\n importProtectionBehaviorSchema,\n z.object({\n dev: importProtectionBehaviorSchema.optional(),\n build: importProtectionBehaviorSchema.optional(),\n }),\n ])\n .optional(),\n /**\n * In `behavior: 'mock'`, control whether mocked imports emit a runtime\n * console diagnostic when accessed.\n *\n * - 'error': console.error(new Error(...)) (default)\n * - 'warn': console.warn(new Error(...))\n * - 'off': disable runtime diagnostics\n */\n mockAccess: z.enum(['error', 'warn', 'off']).optional(),\n onViolation: z\n .function()\n .args(z.any())\n .returns(\n z.union([\n z.boolean(),\n z.void(),\n z.promise(z.union([z.boolean(), z.void()])),\n ]),\n )\n .optional(),\n include: z.array(patternSchema).optional(),\n exclude: z.array(patternSchema).optional(),\n client: importProtectionEnvRulesSchema.optional(),\n server: importProtectionEnvRulesSchema.optional(),\n ignoreImporters: z.array(patternSchema).optional(),\n maxTraceDepth: z.number().optional(),\n log: z.enum(['once', 'always']).optional(),\n })\n .optional()\n\nexport function parseStartConfig(\n opts: z.input<typeof tanstackStartOptionsSchema>,\n corePluginOpts: TanStackStartVitePluginCoreOptions,\n root: string,\n) {\n const options = tanstackStartOptionsSchema.parse(opts)\n\n const srcDirectory = options.srcDirectory\n\n const routesDirectory = path.resolve(\n root,\n srcDirectory,\n options.router.routesDirectory ?? 'routes',\n )\n\n const generatedRouteTree = path.resolve(\n root,\n srcDirectory,\n options.router.generatedRouteTree ?? 'routeTree.gen.ts',\n )\n\n return {\n ...options,\n router: {\n ...options.router,\n ...getConfig(\n {\n ...options.router,\n routesDirectory,\n generatedRouteTree,\n },\n root,\n ),\n target: corePluginOpts.framework,\n },\n }\n}\n\nconst pageSitemapOptionsSchema = z.object({\n exclude: z.boolean().optional(),\n priority: z.number().min(0).max(1).optional(),\n changefreq: z\n .enum(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'])\n .optional(),\n lastmod: z.union([z.string(), z.date()]).optional(),\n alternateRefs: z\n .array(\n z.object({\n href: z.string(),\n hreflang: z.string(),\n }),\n )\n .optional(),\n images: z\n .array(\n z.object({\n loc: z.string(),\n caption: z.string().optional(),\n title: z.string().optional(),\n }),\n )\n .optional(),\n news: z\n .object({\n publication: z.object({\n name: z.string(),\n language: z.string(),\n }),\n publicationDate: z.union([z.string(), z.date()]),\n title: z.string(),\n })\n .optional(),\n})\n\nconst pageBaseSchema = z.object({\n path: z.string(),\n sitemap: pageSitemapOptionsSchema.optional(),\n fromCrawl: z.boolean().optional(),\n})\n\nconst pagePrerenderOptionsSchema = z.object({\n enabled: z.boolean().optional(),\n outputPath: z.string().optional(),\n autoSubfolderIndex: z.boolean().optional(),\n crawlLinks: z.boolean().optional(),\n retryCount: z.number().optional(),\n retryDelay: z.number().optional(),\n onSuccess: z\n .function()\n .args(\n z.object({\n page: pageBaseSchema,\n html: z.string(),\n }),\n )\n .returns(z.any())\n .optional(),\n headers: z.record(z.string(), z.string()).optional(),\n})\n\nconst spaSchema = z.object({\n enabled: z.boolean().optional().default(true),\n maskPath: z.string().optional().default('/'),\n prerender: pagePrerenderOptionsSchema\n .optional()\n .default({})\n .transform((opts) => ({\n outputPath: opts.outputPath ?? '/_shell',\n crawlLinks: false,\n retryCount: 0,\n ...opts,\n enabled: true,\n })),\n})\n\nconst pageSchema = pageBaseSchema.extend({\n prerender: pagePrerenderOptionsSchema.optional(),\n})\n\nconst tanstackStartOptionsSchema = z\n .object({\n srcDirectory: z.string().optional().default('src'),\n start: z\n .object({\n entry: z.string().optional(),\n })\n .optional()\n .default({}),\n router: z\n .object({\n entry: z.string().optional(),\n basepath: z.string().optional(),\n })\n .and(tsrConfig.optional().default({}))\n .optional()\n .default({}),\n client: z\n .object({\n entry: z.string().optional(),\n base: z.string().optional().default('/_build'),\n })\n .optional()\n .default({}),\n server: z\n .object({\n entry: z.string().optional(),\n build: z\n .object({\n staticNodeEnv: z.boolean().optional().default(true),\n })\n .optional()\n .default({}),\n })\n .optional()\n .default({}),\n serverFns: z\n .object({\n base: z.string().optional().default('/_serverFn'),\n generateFunctionId: z\n .function()\n .args(\n z.object({\n filename: z.string(),\n functionName: z.string(),\n }),\n )\n .returns(z.string().optional())\n .optional(),\n })\n .optional()\n .default({}),\n pages: z.array(pageSchema).optional().default([]),\n sitemap: z\n .object({\n enabled: z.boolean().optional().default(true),\n host: z.string().optional(),\n outputPath: z.string().optional().default('sitemap.xml'),\n })\n .optional(),\n prerender: z\n .object({\n enabled: z.boolean().optional(),\n concurrency: z.number().optional(),\n filter: z.function().args(pageSchema).returns(z.any()).optional(),\n failOnError: z.boolean().optional(),\n autoStaticPathsDiscovery: z.boolean().optional(),\n maxRedirects: z.number().min(0).optional(),\n })\n .and(pagePrerenderOptionsSchema.optional())\n .optional(),\n spa: spaSchema.optional(),\n vite: z\n .object({ installDevServerMiddleware: z.boolean().optional() })\n .optional(),\n importProtection: importProtectionOptionsSchema,\n })\n .optional()\n .default({})\n\nexport type Page = z.infer<typeof pageSchema>\n\nexport type TanStackStartInputConfig = z.input<\n typeof tanstackStartOptionsSchema\n>\nexport type TanStackStartOutputConfig = ReturnType<typeof parseStartConfig>\n\nexport type ImportProtectionBehavior = z.infer<\n typeof importProtectionBehaviorSchema\n>\nexport type ImportProtectionEnvRules = z.infer<\n typeof importProtectionEnvRulesSchema\n>\nexport type ImportProtectionOptions = z.input<\n typeof importProtectionOptionsSchema\n>\n"],"names":[],"mappings":";;;AAKA,MAAM,YAAY,aACf,KAAK,EAAE,mBAAmB,MAAM,QAAQ,MAAM,mBAAmB,KAAA,CAAM,EACvE,QAAA;AAIH,MAAM,gBAAgB,EAAE,MAAM,CAAC,EAAE,OAAA,GAAU,EAAE,WAAW,MAAM,CAAC,CAAC;AAEhE,MAAM,iCAAiC,EAAE,KAAK,CAAC,SAAS,MAAM,CAAC;AAE/D,MAAM,iCAAiC,EAAE,OAAO;AAAA,EAC9C,YAAY,EAAE,MAAM,aAAa,EAAE,SAAA;AAAA,EACnC,OAAO,EAAE,MAAM,aAAa,EAAE,SAAA;AAAA,EAC9B,cAAc,EAAE,MAAM,aAAa,EAAE,SAAA;AACvC,CAAC;AAED,MAAM,gCAAgC,EACnC,OAAO;AAAA,EACN,SAAS,EAAE,QAAA,EAAU,SAAA;AAAA,EACrB,UAAU,EACP,MAAM;AAAA,IACL;AAAA,IACA,EAAE,OAAO;AAAA,MACP,KAAK,+BAA+B,SAAA;AAAA,MACpC,OAAO,+BAA+B,SAAA;AAAA,IAAS,CAChD;AAAA,EAAA,CACF,EACA,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASH,YAAY,EAAE,KAAK,CAAC,SAAS,QAAQ,KAAK,CAAC,EAAE,SAAA;AAAA,EAC7C,aAAa,EACV,SAAA,EACA,KAAK,EAAE,IAAA,CAAK,EACZ;AAAA,IACC,EAAE,MAAM;AAAA,MACN,EAAE,QAAA;AAAA,MACF,EAAE,KAAA;AAAA,MACF,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAA,CAAM,CAAC,CAAC;AAAA,IAAA,CAC3C;AAAA,EAAA,EAEF,SAAA;AAAA,EACH,SAAS,EAAE,MAAM,aAAa,EAAE,SAAA;AAAA,EAChC,SAAS,EAAE,MAAM,aAAa,EAAE,SAAA;AAAA,EAChC,QAAQ,+BAA+B,SAAA;AAAA,EACvC,QAAQ,+BAA+B,SAAA;AAAA,EACvC,iBAAiB,EAAE,MAAM,aAAa,EAAE,SAAA;AAAA,EACxC,eAAe,EAAE,OAAA,EAAS,SAAA;AAAA,EAC1B,KAAK,EAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,SAAA;AAClC,CAAC,EACA,SAAA;AAEI,SAAS,iBACd,MACA,gBACA,MACA;AACA,QAAM,UAAU,2BAA2B,MAAM,IAAI;AAErD,QAAM,eAAe,QAAQ;AAE7B,QAAM,kBAAkB,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,mBAAmB;AAAA,EAAA;AAGpC,QAAM,qBAAqB,KAAK;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,sBAAsB;AAAA,EAAA;AAGvC,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG,QAAQ;AAAA,MACX,GAAG;AAAA,QACD;AAAA,UACE,GAAG,QAAQ;AAAA,UACX;AAAA,UACA;AAAA,QAAA;AAAA,QAEF;AAAA,MAAA;AAAA,MAEF,QAAQ,eAAe;AAAA,IAAA;AAAA,EACzB;AAEJ;AAEA,MAAM,2BAA2B,EAAE,OAAO;AAAA,EACxC,SAAS,EAAE,QAAA,EAAU,SAAA;AAAA,EACrB,UAAU,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAA;AAAA,EACnC,YAAY,EACT,KAAK,CAAC,UAAU,UAAU,SAAS,UAAU,WAAW,UAAU,OAAO,CAAC,EAC1E,SAAA;AAAA,EACH,SAAS,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,KAAA,CAAM,CAAC,EAAE,SAAA;AAAA,EACzC,eAAe,EACZ;AAAA,IACC,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAA;AAAA,MACR,UAAU,EAAE,OAAA;AAAA,IAAO,CACpB;AAAA,EAAA,EAEF,SAAA;AAAA,EACH,QAAQ,EACL;AAAA,IACC,EAAE,OAAO;AAAA,MACP,KAAK,EAAE,OAAA;AAAA,MACP,SAAS,EAAE,OAAA,EAAS,SAAA;AAAA,MACpB,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,IAAS,CAC5B;AAAA,EAAA,EAEF,SAAA;AAAA,EACH,MAAM,EACH,OAAO;AAAA,IACN,aAAa,EAAE,OAAO;AAAA,MACpB,MAAM,EAAE,OAAA;AAAA,MACR,UAAU,EAAE,OAAA;AAAA,IAAO,CACpB;AAAA,IACD,iBAAiB,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,KAAA,CAAM,CAAC;AAAA,IAC/C,OAAO,EAAE,OAAA;AAAA,EAAO,CACjB,EACA,SAAA;AACL,CAAC;AAED,MAAM,iBAAiB,EAAE,OAAO;AAAA,EAC9B,MAAM,EAAE,OAAA;AAAA,EACR,SAAS,yBAAyB,SAAA;AAAA,EAClC,WAAW,EAAE,QAAA,EAAU,SAAA;AACzB,CAAC;AAED,MAAM,6BAA6B,EAAE,OAAO;AAAA,EAC1C,SAAS,EAAE,QAAA,EAAU,SAAA;AAAA,EACrB,YAAY,EAAE,OAAA,EAAS,SAAA;AAAA,EACvB,oBAAoB,EAAE,QAAA,EAAU,SAAA;AAAA,EAChC,YAAY,EAAE,QAAA,EAAU,SAAA;AAAA,EACxB,YAAY,EAAE,OAAA,EAAS,SAAA;AAAA,EACvB,YAAY,EAAE,OAAA,EAAS,SAAA;AAAA,EACvB,WAAW,EACR,SAAA,EACA;AAAA,IACC,EAAE,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM,EAAE,OAAA;AAAA,IAAO,CAChB;AAAA,EAAA,EAEF,QAAQ,EAAE,IAAA,CAAK,EACf,SAAA;AAAA,EACH,SAAS,EAAE,OAAO,EAAE,OAAA,GAAU,EAAE,OAAA,CAAQ,EAAE,SAAA;AAC5C,CAAC;AAED,MAAM,YAAY,EAAE,OAAO;AAAA,EACzB,SAAS,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,IAAI;AAAA,EAC5C,UAAU,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,GAAG;AAAA,EAC3C,WAAW,2BACR,WACA,QAAQ,CAAA,CAAE,EACV,UAAU,CAAC,UAAU;AAAA,IACpB,YAAY,KAAK,cAAc;AAAA,IAC/B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,GAAG;AAAA,IACH,SAAS;AAAA,EAAA,EACT;AACN,CAAC;AAED,MAAM,aAAa,eAAe,OAAO;AAAA,EACvC,WAAW,2BAA2B,SAAA;AACxC,CAAC;AAED,MAAM,6BAA6B,EAChC,OAAO;AAAA,EACN,cAAc,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,KAAK;AAAA,EACjD,OAAO,EACJ,OAAO;AAAA,IACN,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,EAAS,CAC5B,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,QAAQ,EACL,OAAO;AAAA,IACN,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,IAClB,UAAU,EAAE,OAAA,EAAS,SAAA;AAAA,EAAS,CAC/B,EACA,IAAI,UAAU,WAAW,QAAQ,CAAA,CAAE,CAAC,EACpC,WACA,QAAQ,CAAA,CAAE;AAAA,EACb,QAAQ,EACL,OAAO;AAAA,IACN,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,IAClB,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,SAAS;AAAA,EAAA,CAC9C,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,QAAQ,EACL,OAAO;AAAA,IACN,OAAO,EAAE,OAAA,EAAS,SAAA;AAAA,IAClB,OAAO,EACJ,OAAO;AAAA,MACN,eAAe,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,IAAI;AAAA,IAAA,CACnD,EACA,WACA,QAAQ,CAAA,CAAE;AAAA,EAAA,CACd,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,WAAW,EACR,OAAO;AAAA,IACN,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,YAAY;AAAA,IAChD,oBAAoB,EACjB,SAAA,EACA;AAAA,MACC,EAAE,OAAO;AAAA,QACP,UAAU,EAAE,OAAA;AAAA,QACZ,cAAc,EAAE,OAAA;AAAA,MAAO,CACxB;AAAA,IAAA,EAEF,QAAQ,EAAE,OAAA,EAAS,SAAA,CAAU,EAC7B,SAAA;AAAA,EAAS,CACb,EACA,SAAA,EACA,QAAQ,EAAE;AAAA,EACb,OAAO,EAAE,MAAM,UAAU,EAAE,SAAA,EAAW,QAAQ,EAAE;AAAA,EAChD,SAAS,EACN,OAAO;AAAA,IACN,SAAS,EAAE,QAAA,EAAU,SAAA,EAAW,QAAQ,IAAI;AAAA,IAC5C,MAAM,EAAE,OAAA,EAAS,SAAA;AAAA,IACjB,YAAY,EAAE,OAAA,EAAS,SAAA,EAAW,QAAQ,aAAa;AAAA,EAAA,CACxD,EACA,SAAA;AAAA,EACH,WAAW,EACR,OAAO;AAAA,IACN,SAAS,EAAE,QAAA,EAAU,SAAA;AAAA,IACrB,aAAa,EAAE,OAAA,EAAS,SAAA;AAAA,IACxB,QAAQ,EAAE,SAAA,EAAW,KAAK,UAAU,EAAE,QAAQ,EAAE,IAAA,CAAK,EAAE,SAAA;AAAA,IACvD,aAAa,EAAE,QAAA,EAAU,SAAA;AAAA,IACzB,0BAA0B,EAAE,QAAA,EAAU,SAAA;AAAA,IACtC,cAAc,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAAS,CAC1C,EACA,IAAI,2BAA2B,SAAA,CAAU,EACzC,SAAA;AAAA,EACH,KAAK,UAAU,SAAA;AAAA,EACf,MAAM,EACH,OAAO,EAAE,4BAA4B,EAAE,QAAA,EAAU,SAAA,GAAY,EAC7D,SAAA;AAAA,EACH,kBAAkB;AACpB,CAAC,EACA,SAAA,EACA,QAAQ,EAAE;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/start-plugin-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.163.1",
|
|
4
4
|
"description": "Modern and scalable routing for React applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -61,9 +61,9 @@
|
|
|
61
61
|
"xmlbuilder2": "^4.0.3",
|
|
62
62
|
"zod": "^3.24.2",
|
|
63
63
|
"@tanstack/router-core": "1.162.9",
|
|
64
|
+
"@tanstack/router-plugin": "1.162.9",
|
|
64
65
|
"@tanstack/router-generator": "1.162.9",
|
|
65
66
|
"@tanstack/router-utils": "1.161.4",
|
|
66
|
-
"@tanstack/router-plugin": "1.162.9",
|
|
67
67
|
"@tanstack/start-client-core": "1.162.9",
|
|
68
68
|
"@tanstack/start-server-core": "1.162.9"
|
|
69
69
|
},
|
|
@@ -78,9 +78,9 @@ analysing a module's exports. These are tracked via `serverFnLookupModules` and
|
|
|
78
78
|
### Central functions
|
|
79
79
|
|
|
80
80
|
- **`handleViolation()`**: Formats + reports (or silences) the violation. Returns
|
|
81
|
-
a mock module ID (
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
a mock-edge module ID (string) so `resolveId` can substitute the offending
|
|
82
|
+
import. May also return `undefined` (suppressed by `onViolation` or
|
|
83
|
+
silent+error in dev) or throw via `ctx.error()` (dev+error).
|
|
84
84
|
- **`reportOrDeferViolation()`**: Dispatch layer. Either defers (stores for later
|
|
85
85
|
verification) or reports immediately, depending on `shouldDefer`.
|
|
86
86
|
|
|
@@ -138,8 +138,11 @@ In dev, each violation gets a **per-importer mock edge module** that:
|
|
|
138
138
|
- Delegates to a **runtime mock module** that contains a recursive Proxy and
|
|
139
139
|
optional runtime diagnostics (console warnings when mocked values are used).
|
|
140
140
|
|
|
141
|
-
This differs from build mode, where
|
|
142
|
-
|
|
141
|
+
This differs from build mode, where each violation gets a **per-violation mock
|
|
142
|
+
edge module** wrapping a unique base mock module
|
|
143
|
+
(`\0tanstack-start-import-protection:mock:build:N`). The edge module re-exports
|
|
144
|
+
the named exports the importer expects, just like in dev, ensuring compatibility
|
|
145
|
+
with both Rollup and Rolldown (which doesn't support `syntheticNamedExports`).
|
|
143
146
|
|
|
144
147
|
## Build Mode Strategy
|
|
145
148
|
|
|
@@ -148,15 +151,19 @@ handle named export resolution from the silent mock.
|
|
|
148
151
|
Both mock and error build modes follow the same pattern:
|
|
149
152
|
|
|
150
153
|
1. **`resolveId`**: Call `handleViolation({ silent: true })`. Generate a
|
|
151
|
-
**unique per-violation mock module
|
|
152
|
-
|
|
153
|
-
|
|
154
|
+
**unique per-violation mock-edge module** that wraps a base mock module
|
|
155
|
+
(`\0tanstack-start-import-protection:mock:build:N`) and provides explicit
|
|
156
|
+
named exports matching the importer's import bindings. Store the violation +
|
|
157
|
+
mock-edge ID in `env.deferredBuildViolations`. Return the mock-edge ID so the
|
|
158
|
+
bundler substitutes the offending import.
|
|
154
159
|
|
|
155
|
-
2. **`load`**:
|
|
156
|
-
|
|
160
|
+
2. **`load`**: For the base mock module, return a silent Proxy-based mock. For
|
|
161
|
+
the mock-edge module, return code that imports from the base mock and
|
|
162
|
+
re-exports the expected named bindings (e.g. `export const Foo = mock.Foo`).
|
|
157
163
|
|
|
158
|
-
3. **Tree-shaking**:
|
|
159
|
-
the mock module is actually used at runtime, the
|
|
164
|
+
3. **Tree-shaking**: The bundler processes the bundle normally. If no binding from
|
|
165
|
+
the mock-edge module is actually used at runtime, both the edge and base
|
|
166
|
+
modules are eliminated.
|
|
160
167
|
|
|
161
168
|
4. **`generateBundle`**: Inspect the output chunks. For each deferred violation,
|
|
162
169
|
check whether its unique mock module ID appears in any chunk's `modules`.
|
|
@@ -171,15 +178,16 @@ Both mock and error build modes follow the same pattern:
|
|
|
171
178
|
The original `RESOLVED_MOCK_MODULE_ID` is a single shared virtual module used
|
|
172
179
|
for all mock-mode violations. If multiple violations are deferred, we need to
|
|
173
180
|
know _which specific ones_ survived tree-shaking. A shared ID would tell us
|
|
174
|
-
"something survived" but not which violation it corresponds to.
|
|
175
|
-
|
|
181
|
+
"something survived" but not which violation it corresponds to. Each violation
|
|
182
|
+
gets a unique mock-edge module (wrapping a unique base mock
|
|
183
|
+
`...mock:build:0`, `...mock:build:1`, etc.) to provide this granularity.
|
|
176
184
|
|
|
177
185
|
### Why mocking doesn't affect tree-shaking
|
|
178
186
|
|
|
179
187
|
From the consumer's perspective, the import bindings are identical whether they
|
|
180
|
-
point to the real module or the mock.
|
|
181
|
-
not module content. If a binding from the barrel's re-export of `.server`
|
|
182
|
-
unused after the Start compiler strips server fn handlers, tree-shaking
|
|
188
|
+
point to the real module or the mock. The bundler tree-shakes based on binding
|
|
189
|
+
usage, not module content. If a binding from the barrel's re-export of `.server`
|
|
190
|
+
is unused after the Start compiler strips server fn handlers, tree-shaking
|
|
183
191
|
eliminates it regardless of whether it points to real DB code or a Proxy mock.
|
|
184
192
|
|
|
185
193
|
### Per-environment operation
|
|
@@ -23,10 +23,12 @@ export function getDefaultImportProtectionRules(): DefaultImportProtectionRules
|
|
|
23
23
|
client: {
|
|
24
24
|
specifiers: clientSpecifiers,
|
|
25
25
|
files: ['**/*.server.*'],
|
|
26
|
+
excludeFiles: ['**/node_modules/**'],
|
|
26
27
|
},
|
|
27
28
|
server: {
|
|
28
29
|
specifiers: [],
|
|
29
30
|
files: ['**/*.client.*'],
|
|
31
|
+
excludeFiles: ['**/node_modules/**'],
|
|
30
32
|
},
|
|
31
33
|
}
|
|
32
34
|
}
|