@rpcbase/vite 0.141.0 → 0.142.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +148 -112
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -17,26 +17,39 @@ import { globSync } from "glob";
|
|
|
17
17
|
const envFilePath = path.resolve(process.cwd(), ".env");
|
|
18
18
|
if (fs.existsSync(envFilePath)) {
|
|
19
19
|
const parsedFile = dotenv.parse(fs.readFileSync(envFilePath));
|
|
20
|
-
const expanded = expand({
|
|
20
|
+
const expanded = expand({
|
|
21
|
+
parsed: parsedFile
|
|
22
|
+
}).parsed || {};
|
|
21
23
|
Object.assign(process.env, expanded);
|
|
22
24
|
}
|
|
23
25
|
const require$1 = createRequire(import.meta.url);
|
|
24
26
|
const splitPackageSpecifier = (specifier) => {
|
|
25
|
-
if (!specifier) return {
|
|
27
|
+
if (!specifier) return {
|
|
28
|
+
pkgName: specifier,
|
|
29
|
+
subpath: ""
|
|
30
|
+
};
|
|
26
31
|
if (specifier.startsWith("@")) {
|
|
27
32
|
const segments = specifier.split("/");
|
|
28
|
-
if (segments.length < 2) return {
|
|
33
|
+
if (segments.length < 2) return {
|
|
34
|
+
pkgName: specifier,
|
|
35
|
+
subpath: ""
|
|
36
|
+
};
|
|
29
37
|
return {
|
|
30
38
|
pkgName: `${segments[0]}/${segments[1]}`,
|
|
31
39
|
subpath: segments.slice(2).join("/")
|
|
32
40
|
};
|
|
33
41
|
}
|
|
34
42
|
const [pkgName, ...rest] = specifier.split("/");
|
|
35
|
-
return {
|
|
43
|
+
return {
|
|
44
|
+
pkgName,
|
|
45
|
+
subpath: rest.join("/")
|
|
46
|
+
};
|
|
36
47
|
};
|
|
37
48
|
const withTrailingSep = (p) => p.endsWith(path.sep) ? p : p + path.sep;
|
|
38
49
|
const resolvePackageRoot = (pkg) => {
|
|
39
|
-
const {
|
|
50
|
+
const {
|
|
51
|
+
pkgName
|
|
52
|
+
} = splitPackageSpecifier(pkg);
|
|
40
53
|
if (!pkgName) return pkg;
|
|
41
54
|
try {
|
|
42
55
|
const pkgJson = require$1.resolve(`${pkgName}/package.json`);
|
|
@@ -67,7 +80,10 @@ const resolvePackageRoot = (pkg) => {
|
|
|
67
80
|
}
|
|
68
81
|
};
|
|
69
82
|
const resolveIntegratedPackagePath = (specifier) => {
|
|
70
|
-
const {
|
|
83
|
+
const {
|
|
84
|
+
pkgName,
|
|
85
|
+
subpath
|
|
86
|
+
} = splitPackageSpecifier(specifier);
|
|
71
87
|
if (!pkgName) return specifier;
|
|
72
88
|
const root = resolvePackageRoot(pkgName);
|
|
73
89
|
if (!subpath) {
|
|
@@ -94,7 +110,9 @@ const resolveIntegratedPackagePath = (specifier) => {
|
|
|
94
110
|
const __dirname$1 = path$1.dirname(fileURLToPath(import.meta.url));
|
|
95
111
|
function run(bin, args) {
|
|
96
112
|
return new Promise((resolve, reject) => {
|
|
97
|
-
const p = spawn(bin, args, {
|
|
113
|
+
const p = spawn(bin, args, {
|
|
114
|
+
stdio: "inherit"
|
|
115
|
+
});
|
|
98
116
|
p.on("close", (code) => code === 0 ? resolve() : reject(new Error(`posthog-cli exited ${code}`)));
|
|
99
117
|
});
|
|
100
118
|
}
|
|
@@ -202,7 +220,10 @@ function rewriteRpcbaseDbImport(importDeclaration, forbiddenIdentifiers) {
|
|
|
202
220
|
if (!zLocals.has(local)) forbiddenIdentifiers.add(local);
|
|
203
221
|
}
|
|
204
222
|
if (zLocals.size === 0) {
|
|
205
|
-
return {
|
|
223
|
+
return {
|
|
224
|
+
rewriteText: null,
|
|
225
|
+
remainingValueLocals: []
|
|
226
|
+
};
|
|
206
227
|
}
|
|
207
228
|
const specifierText = Array.from(zLocals).map((local) => local === "z" ? "z" : `z as ${local}`).join(", ");
|
|
208
229
|
return {
|
|
@@ -307,7 +328,10 @@ function collectRuntimeIdentifierReferences(statement, out) {
|
|
|
307
328
|
visit(statement);
|
|
308
329
|
}
|
|
309
330
|
function createTransformSource() {
|
|
310
|
-
return ({
|
|
331
|
+
return ({
|
|
332
|
+
code,
|
|
333
|
+
filePath
|
|
334
|
+
}) => {
|
|
311
335
|
const forbiddenIdentifiers = /* @__PURE__ */ new Set();
|
|
312
336
|
const scriptKind = scriptKindFromFilePath(filePath);
|
|
313
337
|
const sourceFile = ts.createSourceFile(filePath, code, ts.ScriptTarget.Latest, true, scriptKind);
|
|
@@ -317,14 +341,25 @@ function createTransformSource() {
|
|
|
317
341
|
const source = getModuleSpecifierValue(statement);
|
|
318
342
|
if (!source) continue;
|
|
319
343
|
if (source === "@rpcbase/db") {
|
|
320
|
-
const {
|
|
321
|
-
|
|
322
|
-
|
|
344
|
+
const {
|
|
345
|
+
rewriteText,
|
|
346
|
+
remainingValueLocals
|
|
347
|
+
} = rewriteRpcbaseDbImport(statement, forbiddenIdentifiers);
|
|
348
|
+
if (!rewriteText) importActions.set(statement, {
|
|
349
|
+
type: "remove"
|
|
350
|
+
});
|
|
351
|
+
else importActions.set(statement, {
|
|
352
|
+
type: "overwrite",
|
|
353
|
+
text: rewriteText,
|
|
354
|
+
remainingValueLocals
|
|
355
|
+
});
|
|
323
356
|
continue;
|
|
324
357
|
}
|
|
325
358
|
if (!isForbiddenModuleSource(source)) continue;
|
|
326
359
|
getImportValueLocals(statement).forEach((local) => forbiddenIdentifiers.add(local));
|
|
327
|
-
importActions.set(statement, {
|
|
360
|
+
importActions.set(statement, {
|
|
361
|
+
type: "remove"
|
|
362
|
+
});
|
|
328
363
|
}
|
|
329
364
|
let changed = true;
|
|
330
365
|
const statementsToRemove = /* @__PURE__ */ new Set();
|
|
@@ -352,7 +387,9 @@ function createTransformSource() {
|
|
|
352
387
|
const remainingValueLocals = currentAction?.type === "overwrite" ? currentAction.remainingValueLocals : getImportValueLocals(statement);
|
|
353
388
|
if (remainingValueLocals.length === 0) continue;
|
|
354
389
|
if (remainingValueLocals.some((local) => usedRuntimeIdentifiers.has(local))) continue;
|
|
355
|
-
importActions.set(statement, {
|
|
390
|
+
importActions.set(statement, {
|
|
391
|
+
type: "remove"
|
|
392
|
+
});
|
|
356
393
|
}
|
|
357
394
|
const s = new MagicString(code);
|
|
358
395
|
for (const [importDeclaration, action] of importActions) {
|
|
@@ -367,7 +404,12 @@ function createTransformSource() {
|
|
|
367
404
|
s.remove(statement.pos, statement.end);
|
|
368
405
|
}
|
|
369
406
|
if (!s.hasChanged()) return null;
|
|
370
|
-
const map = JSON.parse(s.generateMap({
|
|
407
|
+
const map = JSON.parse(s.generateMap({
|
|
408
|
+
hires: true,
|
|
409
|
+
includeContent: true,
|
|
410
|
+
source: filePath,
|
|
411
|
+
file: filePath
|
|
412
|
+
}).toString());
|
|
371
413
|
map.file = filePath;
|
|
372
414
|
map.sources = [filePath];
|
|
373
415
|
return {
|
|
@@ -400,7 +442,10 @@ function pruneModelsForClientPlugin() {
|
|
|
400
442
|
if (inferIsSsrTransform(transformOptions)) return;
|
|
401
443
|
const filePath = id.split("?", 1)[0] ?? id;
|
|
402
444
|
if (!isPrunableModelsFilePath(filePath)) return;
|
|
403
|
-
const result = prune({
|
|
445
|
+
const result = prune({
|
|
446
|
+
code,
|
|
447
|
+
filePath
|
|
448
|
+
});
|
|
404
449
|
if (!result) return;
|
|
405
450
|
return result;
|
|
406
451
|
}
|
|
@@ -408,7 +453,11 @@ function pruneModelsForClientPlugin() {
|
|
|
408
453
|
}
|
|
409
454
|
const toPosixPath = (p) => p.split(path$1.sep).join("/");
|
|
410
455
|
const computeInputs = (args) => {
|
|
411
|
-
const {
|
|
456
|
+
const {
|
|
457
|
+
root,
|
|
458
|
+
pattern,
|
|
459
|
+
specDir
|
|
460
|
+
} = args;
|
|
412
461
|
const specDirAbs = path$1.resolve(root, specDir);
|
|
413
462
|
const filesAbs = globSync(pattern, {
|
|
414
463
|
cwd: root,
|
|
@@ -432,7 +481,10 @@ const hasRollupInput = (input) => {
|
|
|
432
481
|
return false;
|
|
433
482
|
};
|
|
434
483
|
function specInputsPlugin(opts = {}) {
|
|
435
|
-
const {
|
|
484
|
+
const {
|
|
485
|
+
pattern = "spec/**/*.spec{,.desktop,.mobile}.ts",
|
|
486
|
+
specDir = "spec"
|
|
487
|
+
} = opts;
|
|
436
488
|
let rootAbs;
|
|
437
489
|
let specDirAbs;
|
|
438
490
|
let outDirAbs;
|
|
@@ -453,7 +505,11 @@ function specInputsPlugin(opts = {}) {
|
|
|
453
505
|
active = !hasRollupInput(inputOptions.input);
|
|
454
506
|
if (!active) return;
|
|
455
507
|
if (!currentInputs || inputsDirty) {
|
|
456
|
-
currentInputs = computeInputs({
|
|
508
|
+
currentInputs = computeInputs({
|
|
509
|
+
root: rootAbs,
|
|
510
|
+
pattern,
|
|
511
|
+
specDir
|
|
512
|
+
});
|
|
457
513
|
inputsDirty = false;
|
|
458
514
|
}
|
|
459
515
|
inputOptions.input = currentInputs;
|
|
@@ -487,7 +543,10 @@ function specInputsPlugin(opts = {}) {
|
|
|
487
543
|
if (!outDirAbs || !currentInputs) return;
|
|
488
544
|
const key = inputsKey(currentInputs);
|
|
489
545
|
if (lastInputsKey && lastInputsKey !== key) {
|
|
490
|
-
fs.rmSync(outDirAbs, {
|
|
546
|
+
fs.rmSync(outDirAbs, {
|
|
547
|
+
recursive: true,
|
|
548
|
+
force: true
|
|
549
|
+
});
|
|
491
550
|
}
|
|
492
551
|
lastInputsKey = key;
|
|
493
552
|
}
|
|
@@ -498,7 +557,9 @@ const ensureEnvPolyfillInjectPath = () => {
|
|
|
498
557
|
const injectDir = path.resolve(process.cwd(), "node_modules/.rpcbase");
|
|
499
558
|
const injectPath = path.join(injectDir, "rb-env-polyfill-inject.js");
|
|
500
559
|
const injectContents = 'import "@rpcbase/env/polyfill"\n';
|
|
501
|
-
fs.mkdirSync(injectDir, {
|
|
560
|
+
fs.mkdirSync(injectDir, {
|
|
561
|
+
recursive: true
|
|
562
|
+
});
|
|
502
563
|
try {
|
|
503
564
|
const existing = fs.readFileSync(injectPath, "utf8");
|
|
504
565
|
if (existing === injectContents) {
|
|
@@ -511,26 +572,26 @@ const ensureEnvPolyfillInjectPath = () => {
|
|
|
511
572
|
};
|
|
512
573
|
const esbuildInjectPath = ensureEnvPolyfillInjectPath();
|
|
513
574
|
const esbuildInject = [esbuildInjectPath];
|
|
514
|
-
const esbuildInjectPlugins = [
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
575
|
+
const esbuildInjectPlugins = [{
|
|
576
|
+
name: "rb-env-polyfill-inject",
|
|
577
|
+
setup(build) {
|
|
578
|
+
build.onResolve({
|
|
579
|
+
filter: /.*/
|
|
580
|
+
}, (args) => {
|
|
581
|
+
if (args.path === esbuildInjectPath) {
|
|
582
|
+
return {
|
|
583
|
+
path: esbuildInjectPath,
|
|
584
|
+
namespace: "file"
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
return void 0;
|
|
588
|
+
});
|
|
525
589
|
}
|
|
526
|
-
];
|
|
590
|
+
}];
|
|
527
591
|
const isCI = ["true", "yes", "1"].includes(process.env.CI?.trim());
|
|
528
592
|
const isProduction = process.env.NODE_ENV === "production";
|
|
529
593
|
const ALLOWED_DEV_ENV = ["NODE_ENV", "APP_NAME"];
|
|
530
|
-
const ALLOWED_ENV_PREFIXES = [
|
|
531
|
-
"RB_PUBLIC_",
|
|
532
|
-
...isProduction ? [] : ALLOWED_DEV_ENV
|
|
533
|
-
];
|
|
594
|
+
const ALLOWED_ENV_PREFIXES = ["RB_PUBLIC_", ...isProduction ? [] : ALLOWED_DEV_ENV];
|
|
534
595
|
const htmlMinifyOptions = {
|
|
535
596
|
collapseWhitespace: true,
|
|
536
597
|
keepClosingSlash: true,
|
|
@@ -548,17 +609,7 @@ const resolveAliases = {
|
|
|
548
609
|
"@/types": path.resolve(process.cwd(), "./src/types/"),
|
|
549
610
|
"@": path.resolve(process.cwd(), "./src/client/")
|
|
550
611
|
};
|
|
551
|
-
const integratedPackages = [
|
|
552
|
-
"@hookform/resolvers",
|
|
553
|
-
"axios",
|
|
554
|
-
"events",
|
|
555
|
-
"libphonenumber-js",
|
|
556
|
-
"posthog-js",
|
|
557
|
-
"posthog-js/react",
|
|
558
|
-
"posthog-node",
|
|
559
|
-
"react-router",
|
|
560
|
-
"react-hook-form"
|
|
561
|
-
];
|
|
612
|
+
const integratedPackages = ["@hookform/resolvers", "axios", "events", "libphonenumber-js", "posthog-js", "posthog-js/react", "posthog-node", "react-router", "react-hook-form"];
|
|
562
613
|
integratedPackages.forEach((pkg) => {
|
|
563
614
|
const resolved = resolveIntegratedPackagePath(pkg);
|
|
564
615
|
resolveAliases[pkg] = resolved;
|
|
@@ -575,26 +626,18 @@ const rbPackagesNeedingEnvPolyfill = [
|
|
|
575
626
|
"@rpcbase/form",
|
|
576
627
|
"@rpcbase/router"
|
|
577
628
|
];
|
|
578
|
-
const rbSsrNoExternalPackages = [
|
|
579
|
-
|
|
580
|
-
"@rpcbase/server"
|
|
581
|
-
];
|
|
582
|
-
const rpcbaseDedupePackages = [
|
|
583
|
-
"@rpcbase/api",
|
|
584
|
-
"@rpcbase/auth",
|
|
585
|
-
"@rpcbase/client",
|
|
586
|
-
"@rpcbase/db",
|
|
587
|
-
"@rpcbase/debug",
|
|
588
|
-
"@rpcbase/env",
|
|
589
|
-
"@rpcbase/form",
|
|
590
|
-
"@rpcbase/router",
|
|
591
|
-
"@rpcbase/server",
|
|
592
|
-
"@rpcbase/ui",
|
|
593
|
-
"@rpcbase/worker"
|
|
594
|
-
];
|
|
629
|
+
const rbSsrNoExternalPackages = [...rbPackagesNeedingEnvPolyfill, "@rpcbase/server"];
|
|
630
|
+
const rpcbaseDedupePackages = ["@rpcbase/api", "@rpcbase/auth", "@rpcbase/client", "@rpcbase/db", "@rpcbase/debug", "@rpcbase/env", "@rpcbase/form", "@rpcbase/router", "@rpcbase/server", "@rpcbase/ui", "@rpcbase/worker"];
|
|
595
631
|
const createRuntimeEnv = (args) => {
|
|
596
|
-
const {
|
|
597
|
-
|
|
632
|
+
const {
|
|
633
|
+
env,
|
|
634
|
+
configEnv
|
|
635
|
+
} = args;
|
|
636
|
+
const {
|
|
637
|
+
command,
|
|
638
|
+
mode,
|
|
639
|
+
isSsrBuild
|
|
640
|
+
} = configEnv;
|
|
598
641
|
const isDevCommand = command === "serve";
|
|
599
642
|
const mergedEnv = {
|
|
600
643
|
...env
|
|
@@ -609,33 +652,31 @@ const createRuntimeEnv = (args) => {
|
|
|
609
652
|
};
|
|
610
653
|
};
|
|
611
654
|
const getBaseConfig = (configEnv) => {
|
|
612
|
-
const {
|
|
655
|
+
const {
|
|
656
|
+
mode
|
|
657
|
+
} = configEnv;
|
|
613
658
|
const env = loadEnv(mode, process.cwd(), ALLOWED_ENV_PREFIXES);
|
|
614
|
-
const runtimeEnv = createRuntimeEnv({
|
|
659
|
+
const runtimeEnv = createRuntimeEnv({
|
|
660
|
+
env,
|
|
661
|
+
configEnv
|
|
662
|
+
});
|
|
615
663
|
return {
|
|
616
664
|
clearScreen: false,
|
|
617
|
-
plugins: [
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
deleteInlinedFiles: true,
|
|
633
|
-
inlinePattern: ["**/*.css"],
|
|
634
|
-
removeViteModuleLoader: false
|
|
635
|
-
}),
|
|
636
|
-
isProduction && isCI && posthogSourcemapsPlugin({}),
|
|
637
|
-
shouldAnalyze && analyzer()
|
|
638
|
-
].filter(Boolean),
|
|
665
|
+
plugins: [pruneModelsForClientPlugin(), react({
|
|
666
|
+
babel: {
|
|
667
|
+
plugins: [["babel-plugin-react-compiler", {
|
|
668
|
+
target: "19"
|
|
669
|
+
}]]
|
|
670
|
+
}
|
|
671
|
+
}), createHtmlPlugin({
|
|
672
|
+
// IMPORTANT: minify removes comments by default, which are used by the app ssr
|
|
673
|
+
minify: htmlMinifyOptions
|
|
674
|
+
}), viteSingleFile({
|
|
675
|
+
useRecommendedBuildConfig: false,
|
|
676
|
+
deleteInlinedFiles: true,
|
|
677
|
+
inlinePattern: ["**/*.css"],
|
|
678
|
+
removeViteModuleLoader: false
|
|
679
|
+
}), isProduction && isCI && posthogSourcemapsPlugin({}), shouldAnalyze && analyzer()].filter(Boolean),
|
|
639
680
|
define: {
|
|
640
681
|
__vite_env__: runtimeEnv
|
|
641
682
|
},
|
|
@@ -650,7 +691,9 @@ const getBaseConfig = (configEnv) => {
|
|
|
650
691
|
app: "./src/client/index.html"
|
|
651
692
|
}
|
|
652
693
|
},
|
|
653
|
-
commonjsOptions: {
|
|
694
|
+
commonjsOptions: {
|
|
695
|
+
transformMixedEsModules: true
|
|
696
|
+
}
|
|
654
697
|
},
|
|
655
698
|
server: {
|
|
656
699
|
allowedHosts: true,
|
|
@@ -665,13 +708,7 @@ const getBaseConfig = (configEnv) => {
|
|
|
665
708
|
alias: {
|
|
666
709
|
...resolveAliases
|
|
667
710
|
},
|
|
668
|
-
dedupe: [
|
|
669
|
-
"react",
|
|
670
|
-
"react-dom",
|
|
671
|
-
"react-router",
|
|
672
|
-
"react-hook-form",
|
|
673
|
-
...rpcbaseDedupePackages
|
|
674
|
-
],
|
|
711
|
+
dedupe: ["react", "react-dom", "react-router", "react-hook-form", ...rpcbaseDedupePackages],
|
|
675
712
|
preserveSymlinks: true
|
|
676
713
|
},
|
|
677
714
|
ssr: {
|
|
@@ -720,37 +757,36 @@ const extendConfig = (userConfig) => {
|
|
|
720
757
|
};
|
|
721
758
|
};
|
|
722
759
|
const getSpecBaseConfig = (configEnv) => {
|
|
723
|
-
const {
|
|
760
|
+
const {
|
|
761
|
+
mode
|
|
762
|
+
} = configEnv;
|
|
724
763
|
const env = loadEnv(mode, process.cwd(), ALLOWED_ENV_PREFIXES);
|
|
725
|
-
const runtimeEnv = createRuntimeEnv({
|
|
764
|
+
const runtimeEnv = createRuntimeEnv({
|
|
765
|
+
env,
|
|
766
|
+
configEnv
|
|
767
|
+
});
|
|
726
768
|
return {
|
|
727
769
|
clearScreen: false,
|
|
728
770
|
define: {
|
|
729
771
|
__vite_env__: runtimeEnv
|
|
730
772
|
},
|
|
731
773
|
envPrefix: ALLOWED_ENV_PREFIXES,
|
|
732
|
-
plugins: [
|
|
733
|
-
specInputsPlugin()
|
|
734
|
-
],
|
|
774
|
+
plugins: [specInputsPlugin()],
|
|
735
775
|
build: {
|
|
736
776
|
outDir: "./build/spec/",
|
|
737
777
|
ssr: true,
|
|
738
778
|
rollupOptions: {
|
|
739
779
|
input: {}
|
|
740
780
|
},
|
|
741
|
-
commonjsOptions: {
|
|
781
|
+
commonjsOptions: {
|
|
782
|
+
transformMixedEsModules: true
|
|
783
|
+
}
|
|
742
784
|
},
|
|
743
785
|
resolve: {
|
|
744
786
|
alias: {
|
|
745
787
|
...resolveAliases
|
|
746
788
|
},
|
|
747
|
-
dedupe: [
|
|
748
|
-
"react",
|
|
749
|
-
"react-dom",
|
|
750
|
-
"react-router",
|
|
751
|
-
"react-hook-form",
|
|
752
|
-
...rpcbaseDedupePackages
|
|
753
|
-
],
|
|
789
|
+
dedupe: ["react", "react-dom", "react-router", "react-hook-form", ...rpcbaseDedupePackages],
|
|
754
790
|
preserveSymlinks: true
|
|
755
791
|
},
|
|
756
792
|
ssr: {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/dotEnvExpand.ts","../src/resolveIntegratedPackagePath.ts","../src/plugins/posthog-sourcemaps/index.ts","../src/plugins/prune-models-for-client/transformSource.ts","../src/plugins/prune-models-for-client/index.ts","../src/plugins/spec-inputs/index.ts","../src/index.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport path from \"path\"\n\nimport dotenv from \"dotenv\"\nimport { expand } from \"dotenv-expand\"\n\n\nconst envFilePath = path.resolve(process.cwd(), \".env\")\n\nif (fs.existsSync(envFilePath)) {\n const parsedFile = dotenv.parse(fs.readFileSync(envFilePath))\n const expanded = expand({ parsed: parsedFile }).parsed || {}\n Object.assign(process.env, expanded)\n}\n","import path from \"path\"\nimport { createRequire } from \"node:module\"\nimport { existsSync, readFileSync } from \"node:fs\"\n\n\nconst require = createRequire(import.meta.url)\n\nconst splitPackageSpecifier = (specifier: string) => {\n if (!specifier) return { pkgName: specifier, subpath: \"\" }\n\n if (specifier.startsWith(\"@\")) {\n const segments = specifier.split(\"/\")\n if (segments.length < 2) return { pkgName: specifier, subpath: \"\" }\n return {\n pkgName: `${segments[0]}/${segments[1]}`,\n subpath: segments.slice(2).join(\"/\"),\n }\n }\n\n const [pkgName, ...rest] = specifier.split(\"/\")\n return { pkgName, subpath: rest.join(\"/\") }\n}\n\nconst withTrailingSep = (p: string) => (p.endsWith(path.sep) ? p : p + path.sep)\n\nconst resolvePackageRoot = (pkg: string) => {\n const { pkgName } = splitPackageSpecifier(pkg)\n if (!pkgName) return pkg\n\n // 1) chemin rapide: si le package exporte son package.json\n try {\n const pkgJson = require.resolve(`${pkgName}/package.json`)\n return path.dirname(pkgJson)\n } catch (err) {\n // 2) fallback: résoudre l'entrée du package puis remonter jusqu'à sa racine\n const entry = require.resolve(pkgName) // ex: .../node_modules/<pkg>/dist/...\n let dir = path.dirname(entry)\n\n // remonter jusqu'à un package.json dont \"name\" === pkg\n while (true) {\n const pkgJsonPath = path.join(dir, \"package.json\")\n if (existsSync(pkgJsonPath)) {\n try {\n const json = JSON.parse(readFileSync(pkgJsonPath, \"utf8\"))\n if (json && json.name === pkgName) return dir\n } catch {\n // ignore parsing errors\n }\n }\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n\n // 3) dernier recours: reconstruire depuis le segment node_modules (ok avec pnpm)\n const nmMarker = `${path.sep}node_modules${path.sep}`\n const idx = entry.lastIndexOf(nmMarker)\n if (idx !== -1) {\n const nmRoot = entry.slice(0, idx + nmMarker.length)\n return path.join(nmRoot, pkgName)\n }\n\n // si vraiment rien trouvé, relancer l'erreur d'origine\n throw err\n }\n}\n\nexport const resolveIntegratedPackagePath = (specifier: string) => {\n const { pkgName, subpath } = splitPackageSpecifier(specifier)\n if (!pkgName) return specifier\n\n const root = resolvePackageRoot(pkgName)\n if (!subpath) {\n return withTrailingSep(root)\n }\n\n const subDir = path.join(root, subpath)\n const pkgJsonPath = path.join(subDir, \"package.json\")\n if (existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(readFileSync(pkgJsonPath, \"utf8\"))\n const entry = pkgJson.module || pkgJson.main\n if (entry) {\n return path.join(subDir, entry)\n }\n } catch {\n // ignore parsing errors\n }\n }\n\n try {\n return require.resolve(specifier)\n } catch {\n return withTrailingSep(subDir)\n }\n}\n","import { spawn } from \"node:child_process\"\nimport path from \"node:path\"\nimport fs from \"node:fs\"\nimport { fileURLToPath } from \"node:url\"\n\nimport type { Plugin } from \"vite\"\n\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\nfunction run(bin: string, args: string[]) {\n return new Promise<void>((resolve, reject) => {\n const p = spawn(bin, args, { stdio: \"inherit\" })\n p.on(\"close\", (code) => code === 0 ? resolve() : reject(new Error(`posthog-cli exited ${code}`)))\n })\n}\n\nfunction resolvePosthogCliBin() {\n const binName = \"posthog-cli\"\n\n const fromCwd = path.join(process.cwd(), \"node_modules\", \".bin\", binName)\n if (fs.existsSync(fromCwd)) return fromCwd\n\n let dir = __dirname\n while (true) {\n const candidate = path.join(dir, \"node_modules\", \".bin\", binName)\n if (fs.existsSync(candidate)) return candidate\n\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n\n return binName\n}\n\nexport function posthogSourcemapsPlugin(opts: {\n directory?: string\n version?: string\n host?: string\n deleteAfterUpload?: boolean\n} = {}): Plugin {\n const {\n directory = \"build/dist\",\n version,\n host = process.env.RB_PUBLIC_POSTHOG_HOST || \"https://eu.posthog.com\",\n deleteAfterUpload = true\n } = opts\n\n const bin = resolvePosthogCliBin()\n const globalArgs = [\"--host\", host]\n\n return {\n name: \"posthog-sourcemaps\",\n apply: \"build\",\n closeBundle: async () => {\n const orange = \"\\x1b[38;5;208m\"\n const reset = \"\\x1b[0m\"\n\n const envId = process.env.POSTHOG_CLI_ENV_ID\n const token = process.env.POSTHOG_CLI_TOKEN\n if (!envId || !token) {\n\n console.warn(`${orange}posthog-sourcemaps: plugin is enabled but no env vars for auth configured (POSTHOG_CLI_ENV_ID/POSTHOG_CLI_TOKEN). Skipping without failing.${reset}`)\n return\n }\n\n // if (!process.env.CI) {\n // console.warn(`${orange}posthog-sourcemaps: plugin has correct configuration, but refusing to run when process.env.CI is not set. Skipping without failing.${reset}`)\n // return\n // }\n\n const injectArgs = [\"sourcemap\", \"inject\", \"--directory\", directory]\n if (version) injectArgs.push(\"--version\", version)\n\n const uploadArgs = [\"sourcemap\", \"upload\", \"--directory\", directory]\n if (deleteAfterUpload) uploadArgs.push(\"--delete-after\")\n\n await run(bin, [...globalArgs, ...injectArgs])\n await run(bin, [...globalArgs, ...uploadArgs])\n }\n }\n}\n","import path from \"node:path\"\n\nimport MagicString from \"magic-string\"\nimport type { SourceMapInput } from \"rollup\"\nimport * as ts from \"typescript\"\n\n\nexport type PruneModelsForClientTransformResult = { code: string; map: SourceMapInput }\nexport type PruneModelsForClientTransform = (args: { code: string; filePath: string }) => PruneModelsForClientTransformResult | null\n\nfunction isForbiddenModuleSource(source: string): boolean {\n if (source === \"mongoose\") return true\n if (source.startsWith(\"node:\")) return true\n if (source.endsWith(\"/extendMongooseSchema\") || source.endsWith(\"./extendMongooseSchema\") || source.endsWith(\"extendMongooseSchema\")) {\n return true\n }\n return false\n}\n\nfunction getModuleSpecifierValue(importDeclaration: ts.ImportDeclaration): string | null {\n const moduleSpecifier = importDeclaration.moduleSpecifier\n if (!ts.isStringLiteralLike(moduleSpecifier)) return null\n return moduleSpecifier.text\n}\n\nfunction isTypeOnlyImport(importDeclaration: ts.ImportDeclaration): boolean {\n const importClause = importDeclaration.importClause\n if (!importClause) return false\n return importClause.isTypeOnly === true\n}\n\nfunction getImportValueLocals(importDeclaration: ts.ImportDeclaration): string[] {\n if (isTypeOnlyImport(importDeclaration)) return []\n\n const importClause = importDeclaration.importClause\n if (!importClause) return []\n\n const locals: string[] = []\n\n if (importClause.name) locals.push(importClause.name.text)\n\n const namedBindings = importClause.namedBindings\n if (namedBindings) {\n if (ts.isNamespaceImport(namedBindings)) {\n locals.push(namedBindings.name.text)\n } else if (ts.isNamedImports(namedBindings)) {\n for (const specifier of namedBindings.elements) {\n if (specifier.isTypeOnly) continue\n locals.push(specifier.name.text)\n }\n }\n }\n\n return locals\n}\n\nfunction getNamedImportSpecifiers(importDeclaration: ts.ImportDeclaration): ts.NodeArray<ts.ImportSpecifier> | null {\n const importClause = importDeclaration.importClause\n if (!importClause) return null\n if (!importClause.namedBindings) return null\n if (!ts.isNamedImports(importClause.namedBindings)) return null\n return importClause.namedBindings.elements\n}\n\nfunction rewriteRpcbaseDbImport(importDeclaration: ts.ImportDeclaration, forbiddenIdentifiers: Set<string>): {\n rewriteText: string | null\n remainingValueLocals: string[]\n} {\n const valueLocals = getImportValueLocals(importDeclaration)\n\n const zLocals = new Set<string>()\n\n const namedImports = getNamedImportSpecifiers(importDeclaration)\n if (namedImports && !isTypeOnlyImport(importDeclaration)) {\n for (const specifier of namedImports) {\n if (specifier.isTypeOnly) continue\n const imported = specifier.propertyName?.text ?? specifier.name.text\n if (imported !== \"z\") continue\n zLocals.add(specifier.name.text)\n }\n }\n\n for (const local of valueLocals) {\n if (!zLocals.has(local)) forbiddenIdentifiers.add(local)\n }\n\n if (zLocals.size === 0) {\n return { rewriteText: null, remainingValueLocals: [] }\n }\n\n const specifierText = Array.from(zLocals)\n .map((local) => (local === \"z\" ? \"z\" : `z as ${local}`))\n .join(\", \")\n\n return {\n rewriteText: `import { ${specifierText} } from \"@rpcbase/db\"`,\n remainingValueLocals: Array.from(zLocals),\n }\n}\n\nfunction collectBindingNames(name: ts.BindingName, out: string[]): void {\n if (ts.isIdentifier(name)) {\n out.push(name.text)\n return\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) continue\n collectBindingNames(element.name, out)\n }\n}\n\nfunction getTopLevelBindings(statement: ts.Statement): string[] {\n if (ts.isVariableStatement(statement)) {\n const names: string[] = []\n for (const decl of statement.declarationList.declarations) {\n collectBindingNames(decl.name, names)\n }\n return names\n }\n\n if (ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement) || ts.isEnumDeclaration(statement)) {\n return statement.name ? [statement.name.text] : []\n }\n\n return []\n}\n\nfunction isRuntimeReferenceIdentifier(identifier: ts.Identifier): boolean {\n const parent = identifier.parent\n if (!parent) return true\n\n if (ts.isVariableDeclaration(parent) && parent.name === identifier) return false\n if (ts.isParameter(parent) && parent.name === identifier) return false\n\n if ((ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(parent)) && parent.name === identifier) return false\n if ((ts.isClassDeclaration(parent) || ts.isClassExpression(parent)) && parent.name === identifier) return false\n if (ts.isEnumDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isTypeAliasDeclaration(parent) && parent.name === identifier) return false\n if (ts.isInterfaceDeclaration(parent) && parent.name === identifier) return false\n if (ts.isModuleDeclaration(parent) && parent.name === identifier) return false\n if (ts.isTypeParameterDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isImportClause(parent) && parent.name === identifier) return false\n if (ts.isNamespaceImport(parent) && parent.name === identifier) return false\n if (ts.isImportSpecifier(parent) && parent.name === identifier) return false\n if (ts.isImportEqualsDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isBindingElement(parent)) {\n if (parent.name === identifier) return false\n if (parent.propertyName === identifier) return false\n }\n\n if (ts.isPropertyAccessExpression(parent) && parent.name === identifier) return false\n if (ts.isQualifiedName(parent)) return false\n\n if (ts.isPropertyAssignment(parent) && parent.name === identifier) return false\n if (ts.isPropertyDeclaration(parent) && parent.name === identifier) return false\n if (ts.isPropertySignature(parent) && parent.name === identifier) return false\n\n if (ts.isMethodDeclaration(parent) && parent.name === identifier) return false\n if (ts.isMethodSignature(parent) && parent.name === identifier) return false\n if (ts.isGetAccessorDeclaration(parent) && parent.name === identifier) return false\n if (ts.isSetAccessorDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isShorthandPropertyAssignment(parent) && parent.name === identifier) return true\n\n if (ts.isExportSpecifier(parent)) {\n const local = parent.propertyName ?? parent.name\n return identifier === local\n }\n\n if (ts.isLabeledStatement(parent) && parent.label === identifier) return false\n if ((ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) && parent.label === identifier) return false\n\n return true\n}\n\nfunction referencesForbiddenRuntime(statement: ts.Statement, forbidden: Set<string>): boolean {\n if (forbidden.size === 0) return false\n\n if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) return false\n\n let found = false\n\n const visit = (node: ts.Node): void => {\n if (found) return\n\n if (ts.isTypeNode(node)) return\n\n if (ts.isHeritageClause(node) && node.token === ts.SyntaxKind.ImplementsKeyword) return\n\n if (ts.isIdentifier(node)) {\n if (forbidden.has(node.text) && isRuntimeReferenceIdentifier(node)) {\n found = true\n return\n }\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(statement)\n\n return found\n}\n\nfunction scriptKindFromFilePath(filePath: string): ts.ScriptKind {\n const ext = path.extname(filePath).toLowerCase()\n if (ext === \".tsx\") return ts.ScriptKind.TSX\n return ts.ScriptKind.TS\n}\n\nfunction collectRuntimeIdentifierReferences(statement: ts.Statement, out: Set<string>): void {\n const visit = (node: ts.Node): void => {\n if (ts.isTypeNode(node)) return\n if (ts.isHeritageClause(node) && node.token === ts.SyntaxKind.ImplementsKeyword) return\n\n if (ts.isIdentifier(node) && isRuntimeReferenceIdentifier(node)) {\n out.add(node.text)\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(statement)\n}\n\nexport function createTransformSource(): PruneModelsForClientTransform {\n return ({ code, filePath }) => {\n const forbiddenIdentifiers = new Set<string>()\n const scriptKind = scriptKindFromFilePath(filePath)\n const sourceFile = ts.createSourceFile(filePath, code, ts.ScriptTarget.Latest, true, scriptKind)\n\n const importActions = new Map<ts.ImportDeclaration, { type: \"remove\" } | { type: \"overwrite\"; text: string; remainingValueLocals: string[] }>()\n\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement)) continue\n\n const source = getModuleSpecifierValue(statement)\n if (!source) continue\n\n if (source === \"@rpcbase/db\") {\n const { rewriteText, remainingValueLocals } = rewriteRpcbaseDbImport(statement, forbiddenIdentifiers)\n if (!rewriteText) importActions.set(statement, { type: \"remove\" })\n else importActions.set(statement, { type: \"overwrite\", text: rewriteText, remainingValueLocals })\n continue\n }\n\n if (!isForbiddenModuleSource(source)) continue\n\n getImportValueLocals(statement).forEach((local) => forbiddenIdentifiers.add(local))\n importActions.set(statement, { type: \"remove\" })\n }\n\n let changed = true\n const statementsToRemove = new Set<ts.Statement>()\n while (changed) {\n changed = false\n\n for (const statement of sourceFile.statements) {\n if (ts.isImportDeclaration(statement)) continue\n if (statementsToRemove.has(statement)) continue\n if (!referencesForbiddenRuntime(statement, forbiddenIdentifiers)) continue\n\n getTopLevelBindings(statement).forEach((name) => forbiddenIdentifiers.add(name))\n statementsToRemove.add(statement)\n changed = true\n }\n }\n\n const usedRuntimeIdentifiers = new Set<string>()\n for (const statement of sourceFile.statements) {\n if (ts.isImportDeclaration(statement)) continue\n if (statementsToRemove.has(statement)) continue\n collectRuntimeIdentifierReferences(statement, usedRuntimeIdentifiers)\n }\n\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement)) continue\n\n const currentAction = importActions.get(statement)\n if (currentAction?.type === \"remove\") continue\n\n const remainingValueLocals = currentAction?.type === \"overwrite\"\n ? currentAction.remainingValueLocals\n : getImportValueLocals(statement)\n\n if (remainingValueLocals.length === 0) continue\n if (remainingValueLocals.some((local) => usedRuntimeIdentifiers.has(local))) continue\n\n importActions.set(statement, { type: \"remove\" })\n }\n\n const s = new MagicString(code)\n\n for (const [importDeclaration, action] of importActions) {\n if (action.type === \"remove\") {\n s.remove(importDeclaration.pos, importDeclaration.end)\n continue\n }\n\n const start = importDeclaration.getStart(sourceFile)\n s.overwrite(start, importDeclaration.end, action.text)\n }\n\n for (const statement of statementsToRemove) {\n s.remove(statement.pos, statement.end)\n }\n\n if (!s.hasChanged()) return null\n\n const map = JSON.parse(s.generateMap({ hires: true, includeContent: true, source: filePath, file: filePath }).toString())\n map.file = filePath\n map.sources = [filePath]\n\n return {\n code: s.toString(),\n map: JSON.stringify(map),\n }\n }\n}\n","import path from \"node:path\"\n\nimport type { Plugin } from \"vite\"\n\nimport { createTransformSource } from \"./transformSource\"\n\n\ntype TransformOptionsLike = boolean | { ssr?: boolean } | undefined\n\nfunction inferIsSsrTransform(transformOptions: TransformOptionsLike): boolean {\n if (typeof transformOptions === \"boolean\") return transformOptions\n if (!transformOptions || typeof transformOptions !== \"object\") return false\n return transformOptions.ssr === true\n}\n\nfunction isPrunableModelsFilePath(filePath: string): boolean {\n const normalized = filePath.replaceAll(\"\\\\\", \"/\")\n\n const parts = normalized.split(\"/\")\n if (parts.includes(\"node_modules\")) return false\n if (parts.length < 2) return false\n if (!parts.some((part, index) => part === \"models\" && index < parts.length - 1)) return false\n\n if (normalized.endsWith(\".d.ts\")) return false\n\n const ext = path.posix.extname(normalized)\n return ext === \".ts\" || ext === \".tsx\"\n}\n\nexport function pruneModelsForClientPlugin(): Plugin {\n const prune = createTransformSource()\n\n return {\n name: \"lz-models-prune-for-browser\",\n enforce: \"pre\",\n transform(code, id, transformOptions) {\n if (inferIsSsrTransform(transformOptions as TransformOptionsLike)) return\n\n const filePath = id.split(\"?\", 1)[0] ?? id\n if (!isPrunableModelsFilePath(filePath)) return\n\n const result = prune({ code, filePath })\n if (!result) return\n return result\n },\n }\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\n\nimport { globSync } from \"glob\"\nimport type { Plugin } from \"vite\"\n\n\ntype SpecInputsPluginOpts = {\n pattern?: string\n specDir?: string\n}\n\nconst toPosixPath = (p: string) => p.split(path.sep).join(\"/\")\n\nconst computeInputs = (args: { root: string; pattern: string; specDir: string }) => {\n const { root, pattern, specDir } = args\n const specDirAbs = path.resolve(root, specDir)\n\n const filesAbs = globSync(pattern, {\n cwd: root,\n absolute: true,\n nodir: true,\n })\n\n const inputs: Record<string, string> = {}\n for (const fileAbs of filesAbs) {\n const relFromSpec = path.relative(specDirAbs, fileAbs)\n const outputName = toPosixPath(relFromSpec).replace(/\\.ts$/, \"\")\n inputs[outputName] = fileAbs\n }\n\n return inputs\n}\n\nconst inputsKey = (inputs: Record<string, string>) => Object.keys(inputs).sort().join(\"\\n\")\n\nconst hasRollupInput = (input: unknown) => {\n if (!input) return false\n if (typeof input === \"string\") return true\n if (Array.isArray(input)) return input.length > 0\n if (typeof input === \"object\") return Object.keys(input as any).length > 0\n return false\n}\n\nexport function specInputsPlugin(opts: SpecInputsPluginOpts = {}): Plugin {\n const { pattern = \"spec/**/*.spec{,.desktop,.mobile}.ts\", specDir = \"spec\" } = opts\n\n let rootAbs: string | undefined\n let specDirAbs: string | undefined\n let outDirAbs: string | undefined\n\n let active = false\n let inputsDirty = true\n let currentInputs: Record<string, string> | undefined\n let lastInputsKey: string | undefined\n\n return {\n name: \"rb-spec-inputs\",\n apply: \"build\",\n configResolved(config) {\n rootAbs = config.root\n specDirAbs = path.resolve(rootAbs, specDir)\n outDirAbs = path.resolve(rootAbs, config.build.outDir)\n },\n options(inputOptions) {\n if (!rootAbs) return\n\n active = !hasRollupInput((inputOptions as any).input)\n if (!active) return\n\n if (!currentInputs || inputsDirty) {\n currentInputs = computeInputs({ root: rootAbs, pattern, specDir })\n inputsDirty = false\n }\n ;(inputOptions as any).input = currentInputs\n\n return inputOptions\n },\n watchChange(id, change) {\n if (!active) return\n if (!rootAbs || !specDirAbs) return\n\n const absId = path.isAbsolute(id) ? id : path.resolve(rootAbs, id)\n\n if (absId === specDirAbs) {\n inputsDirty = true\n return\n }\n\n if (!absId.startsWith(specDirAbs + path.sep)) return\n if (!/\\.spec(?:\\.(?:desktop|mobile))?\\.ts$/.test(absId)) return\n if (change.event === \"create\" || change.event === \"delete\") {\n inputsDirty = true\n }\n if (change.event === \"update\") {\n const relFromSpec = path.relative(specDirAbs, absId)\n const outputName = toPosixPath(relFromSpec).replace(/\\.ts$/, \"\")\n if (!currentInputs || currentInputs[outputName] !== absId) {\n inputsDirty = true\n }\n }\n },\n buildStart() {\n if (!active) return\n if (!specDirAbs) return\n\n this.addWatchFile(specDirAbs)\n\n if (!outDirAbs || !currentInputs) return\n\n const key = inputsKey(currentInputs)\n if (lastInputsKey && lastInputsKey !== key) {\n fs.rmSync(outDirAbs, { recursive: true, force: true })\n }\n lastInputsKey = key\n },\n }\n}\n","import \"./dotEnvExpand\"\n\nimport path from \"path\"\nimport fs from \"node:fs\"\n\nimport {\n createServer as viteCreateServer,\n mergeConfig,\n loadEnv,\n} from \"vite\"\nimport type { ConfigEnv, UserConfig, UserConfigExport, UserConfigFn } from \"vite\"\nimport { viteSingleFile } from \"vite-plugin-singlefile\"\nimport react from \"@vitejs/plugin-react\"\nimport { createHtmlPlugin } from \"vite-plugin-html\"\nimport { analyzer } from \"vite-bundle-analyzer\"\n\nimport { resolveIntegratedPackagePath } from \"./resolveIntegratedPackagePath\"\nimport { posthogSourcemapsPlugin } from \"./plugins/posthog-sourcemaps\"\nimport { pruneModelsForClientPlugin } from \"./plugins/prune-models-for-client\"\nimport { specInputsPlugin } from \"./plugins/spec-inputs\"\n\n\nexport { pruneModelsForClientPlugin }\n\n\nconst shouldAnalyze = process.env.ANALYZE === \"1\"\n\nconst ensureEnvPolyfillInjectPath = () => {\n const injectDir = path.resolve(process.cwd(), \"node_modules/.rpcbase\")\n const injectPath = path.join(injectDir, \"rb-env-polyfill-inject.js\")\n const injectContents = \"import \\\"@rpcbase/env/polyfill\\\"\\n\"\n\n fs.mkdirSync(injectDir, { recursive: true })\n try {\n const existing = fs.readFileSync(injectPath, \"utf8\")\n if (existing === injectContents) {\n return injectPath\n }\n } catch {\n // file does not exist yet\n }\n\n fs.writeFileSync(injectPath, injectContents, \"utf8\")\n return injectPath\n}\n\nconst esbuildInjectPath = ensureEnvPolyfillInjectPath()\nconst esbuildInject = [esbuildInjectPath]\nconst esbuildInjectPlugins: any[] = [\n {\n name: \"rb-env-polyfill-inject\",\n setup(build: any) {\n build.onResolve({ filter: /.*/ }, (args: any) => {\n if (args.path === esbuildInjectPath) {\n return { path: esbuildInjectPath, namespace: \"file\" }\n }\n\n return undefined\n })\n },\n },\n]\n\nconst isCI = [\"true\", \"yes\", \"1\"].includes((process.env.CI as string)?.trim())\nconst isProduction = process.env.NODE_ENV === \"production\"\n\nconst ALLOWED_DEV_ENV = [\"NODE_ENV\", \"APP_NAME\"]\n// workaround vite.ssrLoadModule not setting ssrBuild properly\nconst ALLOWED_ENV_PREFIXES = [\n \"RB_PUBLIC_\",\n ...(isProduction ? [] : ALLOWED_DEV_ENV),\n]\n\n// https://github.com/vbenjs/vite-plugin-html?tab=readme-ov-file#minifyoptions\nconst htmlMinifyOptions = {\n collapseWhitespace: true,\n keepClosingSlash: true,\n removeComments: false,\n removeRedundantAttributes: true,\n removeScriptTypeAttributes: true,\n removeStyleLinkTypeAttributes: true,\n useShortDoctype: true,\n minifyCSS: true,\n}\n\nconst resolveAliases: Record<string, string> = {\n \"@/api\": path.resolve(process.cwd(), \"./src/api/\"),\n \"@/models\": path.resolve(process.cwd(), \"./src/models/\"),\n \"@/shared\": path.resolve(process.cwd(), \"./src/shared/\"),\n \"@/types\": path.resolve(process.cwd(), \"./src/types/\"),\n \"@\": path.resolve(process.cwd(), \"./src/client/\"),\n}\n\nconst integratedPackages = [\n \"@hookform/resolvers\",\n \"axios\",\n \"events\",\n \"libphonenumber-js\",\n \"posthog-js\",\n \"posthog-js/react\",\n \"posthog-node\",\n \"react-router\",\n \"react-hook-form\",\n]\n\n// Add each integrated package to resolveAliases\nintegratedPackages.forEach((pkg) => {\n const resolved = resolveIntegratedPackagePath(pkg)\n resolveAliases[pkg] = resolved\n})\n\nresolveAliases[\"node:events\"] = resolveIntegratedPackagePath(\"events\")\n\n// Force PostHog React imports to resolve to the ESM bundle to avoid Node ESM\n// directory import errors while keeping SSR compatibility.\nconst posthogReactEsm = resolveIntegratedPackagePath(\"posthog-js/react/dist/esm/index.js\")\nresolveAliases[\"posthog-js/react\"] = posthogReactEsm\nresolveAliases[\"posthog-js/react/dist/esm/index.js\"] = posthogReactEsm\n\nexport { resolveAliases }\n\nconst rbPackagesNeedingEnvPolyfill = [\n \"@rpcbase/auth\",\n \"@rpcbase/env\",\n // \"@rpcbase/env/polyfill\",\n \"@rpcbase/client\",\n \"@rpcbase/form\",\n \"@rpcbase/router\",\n]\n\nconst rbSsrNoExternalPackages = [\n ...rbPackagesNeedingEnvPolyfill,\n \"@rpcbase/server\",\n]\n\nconst rpcbaseDedupePackages = [\n \"@rpcbase/api\",\n \"@rpcbase/auth\",\n \"@rpcbase/client\",\n \"@rpcbase/db\",\n \"@rpcbase/debug\",\n \"@rpcbase/env\",\n \"@rpcbase/form\",\n \"@rpcbase/router\",\n \"@rpcbase/server\",\n \"@rpcbase/ui\",\n \"@rpcbase/worker\",\n]\n\nconst createRuntimeEnv = (args: {\n env: Record<string, string>\n configEnv: ConfigEnv\n}) => {\n const { env, configEnv } = args\n const { command, mode, isSsrBuild } = configEnv\n const isDevCommand = command === \"serve\"\n\n const mergedEnv = {\n ...env,\n }\n\n return {\n ...mergedEnv,\n BASE_URL: mergedEnv.BASE_URL ?? \"/\",\n MODE: mode,\n DEV: isDevCommand,\n PROD: !isDevCommand,\n SSR: Boolean(isSsrBuild),\n }\n}\n\n// https://vite.dev/config/\nconst getBaseConfig = (configEnv: ConfigEnv): UserConfig => {\n const { mode } = configEnv\n const env = loadEnv(mode, process.cwd(), ALLOWED_ENV_PREFIXES)\n const runtimeEnv = createRuntimeEnv({ env, configEnv })\n\n return {\n clearScreen: false,\n plugins: [\n pruneModelsForClientPlugin(),\n react({\n babel: {\n plugins: [\n [\"babel-plugin-react-compiler\", { target: \"19\" }],\n ],\n },\n }),\n createHtmlPlugin({\n // IMPORTANT: minify removes comments by default, which are used by the app ssr\n minify: htmlMinifyOptions,\n }),\n viteSingleFile({\n useRecommendedBuildConfig: false,\n deleteInlinedFiles: true,\n inlinePattern: [\"**/*.css\"],\n removeViteModuleLoader: false,\n }),\n isProduction && isCI && posthogSourcemapsPlugin({}),\n shouldAnalyze && analyzer(),\n ].filter(Boolean),\n define: {\n __vite_env__: runtimeEnv,\n },\n envPrefix: ALLOWED_ENV_PREFIXES,\n publicDir: path.join(process.cwd(), \"./src/client/public\"),\n build: {\n sourcemap: isProduction ? \"hidden\" : false,\n cssCodeSplit: false,\n outDir: \"./build/dist/\",\n rollupOptions: {\n input: {\n app: \"./src/client/index.html\",\n },\n },\n commonjsOptions: { transformMixedEsModules: true },\n },\n server: {\n allowedHosts: true,\n headers: {\n // \"X-Custom-Header\": \"test-custom\",\n },\n watch: {\n ignored: [\"**/build/playwright/**\"],\n },\n },\n resolve: {\n alias: {\n ...resolveAliases,\n },\n dedupe: [\n \"react\",\n \"react-dom\",\n \"react-router\",\n \"react-hook-form\",\n ...rpcbaseDedupePackages,\n ],\n preserveSymlinks: true,\n },\n ssr: {\n external: [\n // \"react\", \"react-dom\",\n \"cookie\",\n \"mongoose\",\n \"mongodb\",\n ],\n noExternal: [\n ...rbSsrNoExternalPackages,\n // \"react-use\",\n ],\n },\n optimizeDeps: {\n include: [\n // Force RPC Base packages through esbuild so rb-env-polyfill injects before their dist code touches globalThis.__rb_env__\n ...rbPackagesNeedingEnvPolyfill,\n \"hoist-non-react-statics\",\n // \"react\", \"react-dom\", \"react-dom/server\"\n // \"cookie\"\n ],\n exclude: [\n \"@radix-ui/*\",\n \"@rpcbase/ui\",\n // TMP only in sample app?\n // \"react\", \"react-dom/server\",\n // \"react-hook-form\",\n // \"react-dom\"\n ],\n esbuildOptions: {\n inject: esbuildInject,\n plugins: esbuildInjectPlugins,\n },\n },\n // future: {\n // removeSsrLoadModule: true\n // },\n }\n}\n\nexport const extendConfig = (userConfig: UserConfigExport): UserConfigFn => {\n return async (configEnv) => {\n const config =\n typeof userConfig === \"function\"\n ? await (userConfig as UserConfigFn)(configEnv)\n : userConfig\n\n const baseConfig = getBaseConfig(configEnv)\n\n return mergeConfig(baseConfig, config as any)\n }\n}\n\nconst getSpecBaseConfig = (configEnv: ConfigEnv): UserConfig => {\n const { mode } = configEnv\n const env = loadEnv(mode, process.cwd(), ALLOWED_ENV_PREFIXES)\n const runtimeEnv = createRuntimeEnv({ env, configEnv })\n\n return {\n clearScreen: false,\n define: {\n __vite_env__: runtimeEnv,\n },\n envPrefix: ALLOWED_ENV_PREFIXES,\n plugins: [\n specInputsPlugin(),\n ],\n build: {\n outDir: \"./build/spec/\",\n ssr: true,\n rollupOptions: {\n input: {},\n },\n commonjsOptions: { transformMixedEsModules: true },\n },\n resolve: {\n alias: {\n ...resolveAliases,\n },\n dedupe: [\n \"react\",\n \"react-dom\",\n \"react-router\",\n \"react-hook-form\",\n ...rpcbaseDedupePackages,\n ],\n preserveSymlinks: true,\n },\n ssr: {\n external: [\"mongoose\"],\n noExternal: [\"@rpcbase/*\"],\n },\n }\n}\n\nexport const extendSpecConfig = (userConfig: UserConfigExport): UserConfigFn => {\n return async (configEnv) => {\n const config =\n typeof userConfig === \"function\"\n ? await (userConfig as UserConfigFn)(configEnv)\n : userConfig\n\n const baseConfig = getSpecBaseConfig(configEnv)\n\n return mergeConfig(baseConfig, config as any)\n }\n}\n\nexport const createServer = viteCreateServer\n"],"names":["require","__dirname","path","viteCreateServer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/dotEnvExpand.ts","../src/resolveIntegratedPackagePath.ts","../src/plugins/posthog-sourcemaps/index.ts","../src/plugins/prune-models-for-client/transformSource.ts","../src/plugins/prune-models-for-client/index.ts","../src/plugins/spec-inputs/index.ts","../src/index.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport path from \"path\"\n\nimport dotenv from \"dotenv\"\nimport { expand } from \"dotenv-expand\"\n\n\nconst envFilePath = path.resolve(process.cwd(), \".env\")\n\nif (fs.existsSync(envFilePath)) {\n const parsedFile = dotenv.parse(fs.readFileSync(envFilePath))\n const expanded = expand({ parsed: parsedFile }).parsed || {}\n Object.assign(process.env, expanded)\n}\n","import path from \"path\"\nimport { createRequire } from \"node:module\"\nimport { existsSync, readFileSync } from \"node:fs\"\n\n\nconst require = createRequire(import.meta.url)\n\nconst splitPackageSpecifier = (specifier: string) => {\n if (!specifier) return { pkgName: specifier, subpath: \"\" }\n\n if (specifier.startsWith(\"@\")) {\n const segments = specifier.split(\"/\")\n if (segments.length < 2) return { pkgName: specifier, subpath: \"\" }\n return {\n pkgName: `${segments[0]}/${segments[1]}`,\n subpath: segments.slice(2).join(\"/\"),\n }\n }\n\n const [pkgName, ...rest] = specifier.split(\"/\")\n return { pkgName, subpath: rest.join(\"/\") }\n}\n\nconst withTrailingSep = (p: string) => (p.endsWith(path.sep) ? p : p + path.sep)\n\nconst resolvePackageRoot = (pkg: string) => {\n const { pkgName } = splitPackageSpecifier(pkg)\n if (!pkgName) return pkg\n\n // 1) chemin rapide: si le package exporte son package.json\n try {\n const pkgJson = require.resolve(`${pkgName}/package.json`)\n return path.dirname(pkgJson)\n } catch (err) {\n // 2) fallback: résoudre l'entrée du package puis remonter jusqu'à sa racine\n const entry = require.resolve(pkgName) // ex: .../node_modules/<pkg>/dist/...\n let dir = path.dirname(entry)\n\n // remonter jusqu'à un package.json dont \"name\" === pkg\n while (true) {\n const pkgJsonPath = path.join(dir, \"package.json\")\n if (existsSync(pkgJsonPath)) {\n try {\n const json = JSON.parse(readFileSync(pkgJsonPath, \"utf8\"))\n if (json && json.name === pkgName) return dir\n } catch {\n // ignore parsing errors\n }\n }\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n\n // 3) dernier recours: reconstruire depuis le segment node_modules (ok avec pnpm)\n const nmMarker = `${path.sep}node_modules${path.sep}`\n const idx = entry.lastIndexOf(nmMarker)\n if (idx !== -1) {\n const nmRoot = entry.slice(0, idx + nmMarker.length)\n return path.join(nmRoot, pkgName)\n }\n\n // si vraiment rien trouvé, relancer l'erreur d'origine\n throw err\n }\n}\n\nexport const resolveIntegratedPackagePath = (specifier: string) => {\n const { pkgName, subpath } = splitPackageSpecifier(specifier)\n if (!pkgName) return specifier\n\n const root = resolvePackageRoot(pkgName)\n if (!subpath) {\n return withTrailingSep(root)\n }\n\n const subDir = path.join(root, subpath)\n const pkgJsonPath = path.join(subDir, \"package.json\")\n if (existsSync(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(readFileSync(pkgJsonPath, \"utf8\"))\n const entry = pkgJson.module || pkgJson.main\n if (entry) {\n return path.join(subDir, entry)\n }\n } catch {\n // ignore parsing errors\n }\n }\n\n try {\n return require.resolve(specifier)\n } catch {\n return withTrailingSep(subDir)\n }\n}\n","import { spawn } from \"node:child_process\"\nimport path from \"node:path\"\nimport fs from \"node:fs\"\nimport { fileURLToPath } from \"node:url\"\n\nimport type { Plugin } from \"vite\"\n\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\nfunction run(bin: string, args: string[]) {\n return new Promise<void>((resolve, reject) => {\n const p = spawn(bin, args, { stdio: \"inherit\" })\n p.on(\"close\", (code) => code === 0 ? resolve() : reject(new Error(`posthog-cli exited ${code}`)))\n })\n}\n\nfunction resolvePosthogCliBin() {\n const binName = \"posthog-cli\"\n\n const fromCwd = path.join(process.cwd(), \"node_modules\", \".bin\", binName)\n if (fs.existsSync(fromCwd)) return fromCwd\n\n let dir = __dirname\n while (true) {\n const candidate = path.join(dir, \"node_modules\", \".bin\", binName)\n if (fs.existsSync(candidate)) return candidate\n\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n\n return binName\n}\n\nexport function posthogSourcemapsPlugin(opts: {\n directory?: string\n version?: string\n host?: string\n deleteAfterUpload?: boolean\n} = {}): Plugin {\n const {\n directory = \"build/dist\",\n version,\n host = process.env.RB_PUBLIC_POSTHOG_HOST || \"https://eu.posthog.com\",\n deleteAfterUpload = true\n } = opts\n\n const bin = resolvePosthogCliBin()\n const globalArgs = [\"--host\", host]\n\n return {\n name: \"posthog-sourcemaps\",\n apply: \"build\",\n closeBundle: async () => {\n const orange = \"\\x1b[38;5;208m\"\n const reset = \"\\x1b[0m\"\n\n const envId = process.env.POSTHOG_CLI_ENV_ID\n const token = process.env.POSTHOG_CLI_TOKEN\n if (!envId || !token) {\n\n console.warn(`${orange}posthog-sourcemaps: plugin is enabled but no env vars for auth configured (POSTHOG_CLI_ENV_ID/POSTHOG_CLI_TOKEN). Skipping without failing.${reset}`)\n return\n }\n\n // if (!process.env.CI) {\n // console.warn(`${orange}posthog-sourcemaps: plugin has correct configuration, but refusing to run when process.env.CI is not set. Skipping without failing.${reset}`)\n // return\n // }\n\n const injectArgs = [\"sourcemap\", \"inject\", \"--directory\", directory]\n if (version) injectArgs.push(\"--version\", version)\n\n const uploadArgs = [\"sourcemap\", \"upload\", \"--directory\", directory]\n if (deleteAfterUpload) uploadArgs.push(\"--delete-after\")\n\n await run(bin, [...globalArgs, ...injectArgs])\n await run(bin, [...globalArgs, ...uploadArgs])\n }\n }\n}\n","import path from \"node:path\"\n\nimport MagicString from \"magic-string\"\nimport type { SourceMapInput } from \"rollup\"\nimport * as ts from \"typescript\"\n\n\nexport type PruneModelsForClientTransformResult = { code: string; map: SourceMapInput }\nexport type PruneModelsForClientTransform = (args: { code: string; filePath: string }) => PruneModelsForClientTransformResult | null\n\nfunction isForbiddenModuleSource(source: string): boolean {\n if (source === \"mongoose\") return true\n if (source.startsWith(\"node:\")) return true\n if (source.endsWith(\"/extendMongooseSchema\") || source.endsWith(\"./extendMongooseSchema\") || source.endsWith(\"extendMongooseSchema\")) {\n return true\n }\n return false\n}\n\nfunction getModuleSpecifierValue(importDeclaration: ts.ImportDeclaration): string | null {\n const moduleSpecifier = importDeclaration.moduleSpecifier\n if (!ts.isStringLiteralLike(moduleSpecifier)) return null\n return moduleSpecifier.text\n}\n\nfunction isTypeOnlyImport(importDeclaration: ts.ImportDeclaration): boolean {\n const importClause = importDeclaration.importClause\n if (!importClause) return false\n return importClause.isTypeOnly === true\n}\n\nfunction getImportValueLocals(importDeclaration: ts.ImportDeclaration): string[] {\n if (isTypeOnlyImport(importDeclaration)) return []\n\n const importClause = importDeclaration.importClause\n if (!importClause) return []\n\n const locals: string[] = []\n\n if (importClause.name) locals.push(importClause.name.text)\n\n const namedBindings = importClause.namedBindings\n if (namedBindings) {\n if (ts.isNamespaceImport(namedBindings)) {\n locals.push(namedBindings.name.text)\n } else if (ts.isNamedImports(namedBindings)) {\n for (const specifier of namedBindings.elements) {\n if (specifier.isTypeOnly) continue\n locals.push(specifier.name.text)\n }\n }\n }\n\n return locals\n}\n\nfunction getNamedImportSpecifiers(importDeclaration: ts.ImportDeclaration): ts.NodeArray<ts.ImportSpecifier> | null {\n const importClause = importDeclaration.importClause\n if (!importClause) return null\n if (!importClause.namedBindings) return null\n if (!ts.isNamedImports(importClause.namedBindings)) return null\n return importClause.namedBindings.elements\n}\n\nfunction rewriteRpcbaseDbImport(importDeclaration: ts.ImportDeclaration, forbiddenIdentifiers: Set<string>): {\n rewriteText: string | null\n remainingValueLocals: string[]\n} {\n const valueLocals = getImportValueLocals(importDeclaration)\n\n const zLocals = new Set<string>()\n\n const namedImports = getNamedImportSpecifiers(importDeclaration)\n if (namedImports && !isTypeOnlyImport(importDeclaration)) {\n for (const specifier of namedImports) {\n if (specifier.isTypeOnly) continue\n const imported = specifier.propertyName?.text ?? specifier.name.text\n if (imported !== \"z\") continue\n zLocals.add(specifier.name.text)\n }\n }\n\n for (const local of valueLocals) {\n if (!zLocals.has(local)) forbiddenIdentifiers.add(local)\n }\n\n if (zLocals.size === 0) {\n return { rewriteText: null, remainingValueLocals: [] }\n }\n\n const specifierText = Array.from(zLocals)\n .map((local) => (local === \"z\" ? \"z\" : `z as ${local}`))\n .join(\", \")\n\n return {\n rewriteText: `import { ${specifierText} } from \"@rpcbase/db\"`,\n remainingValueLocals: Array.from(zLocals),\n }\n}\n\nfunction collectBindingNames(name: ts.BindingName, out: string[]): void {\n if (ts.isIdentifier(name)) {\n out.push(name.text)\n return\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) continue\n collectBindingNames(element.name, out)\n }\n}\n\nfunction getTopLevelBindings(statement: ts.Statement): string[] {\n if (ts.isVariableStatement(statement)) {\n const names: string[] = []\n for (const decl of statement.declarationList.declarations) {\n collectBindingNames(decl.name, names)\n }\n return names\n }\n\n if (ts.isFunctionDeclaration(statement) || ts.isClassDeclaration(statement) || ts.isEnumDeclaration(statement)) {\n return statement.name ? [statement.name.text] : []\n }\n\n return []\n}\n\nfunction isRuntimeReferenceIdentifier(identifier: ts.Identifier): boolean {\n const parent = identifier.parent\n if (!parent) return true\n\n if (ts.isVariableDeclaration(parent) && parent.name === identifier) return false\n if (ts.isParameter(parent) && parent.name === identifier) return false\n\n if ((ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(parent)) && parent.name === identifier) return false\n if ((ts.isClassDeclaration(parent) || ts.isClassExpression(parent)) && parent.name === identifier) return false\n if (ts.isEnumDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isTypeAliasDeclaration(parent) && parent.name === identifier) return false\n if (ts.isInterfaceDeclaration(parent) && parent.name === identifier) return false\n if (ts.isModuleDeclaration(parent) && parent.name === identifier) return false\n if (ts.isTypeParameterDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isImportClause(parent) && parent.name === identifier) return false\n if (ts.isNamespaceImport(parent) && parent.name === identifier) return false\n if (ts.isImportSpecifier(parent) && parent.name === identifier) return false\n if (ts.isImportEqualsDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isBindingElement(parent)) {\n if (parent.name === identifier) return false\n if (parent.propertyName === identifier) return false\n }\n\n if (ts.isPropertyAccessExpression(parent) && parent.name === identifier) return false\n if (ts.isQualifiedName(parent)) return false\n\n if (ts.isPropertyAssignment(parent) && parent.name === identifier) return false\n if (ts.isPropertyDeclaration(parent) && parent.name === identifier) return false\n if (ts.isPropertySignature(parent) && parent.name === identifier) return false\n\n if (ts.isMethodDeclaration(parent) && parent.name === identifier) return false\n if (ts.isMethodSignature(parent) && parent.name === identifier) return false\n if (ts.isGetAccessorDeclaration(parent) && parent.name === identifier) return false\n if (ts.isSetAccessorDeclaration(parent) && parent.name === identifier) return false\n\n if (ts.isShorthandPropertyAssignment(parent) && parent.name === identifier) return true\n\n if (ts.isExportSpecifier(parent)) {\n const local = parent.propertyName ?? parent.name\n return identifier === local\n }\n\n if (ts.isLabeledStatement(parent) && parent.label === identifier) return false\n if ((ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) && parent.label === identifier) return false\n\n return true\n}\n\nfunction referencesForbiddenRuntime(statement: ts.Statement, forbidden: Set<string>): boolean {\n if (forbidden.size === 0) return false\n\n if (ts.isInterfaceDeclaration(statement) || ts.isTypeAliasDeclaration(statement)) return false\n\n let found = false\n\n const visit = (node: ts.Node): void => {\n if (found) return\n\n if (ts.isTypeNode(node)) return\n\n if (ts.isHeritageClause(node) && node.token === ts.SyntaxKind.ImplementsKeyword) return\n\n if (ts.isIdentifier(node)) {\n if (forbidden.has(node.text) && isRuntimeReferenceIdentifier(node)) {\n found = true\n return\n }\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(statement)\n\n return found\n}\n\nfunction scriptKindFromFilePath(filePath: string): ts.ScriptKind {\n const ext = path.extname(filePath).toLowerCase()\n if (ext === \".tsx\") return ts.ScriptKind.TSX\n return ts.ScriptKind.TS\n}\n\nfunction collectRuntimeIdentifierReferences(statement: ts.Statement, out: Set<string>): void {\n const visit = (node: ts.Node): void => {\n if (ts.isTypeNode(node)) return\n if (ts.isHeritageClause(node) && node.token === ts.SyntaxKind.ImplementsKeyword) return\n\n if (ts.isIdentifier(node) && isRuntimeReferenceIdentifier(node)) {\n out.add(node.text)\n }\n\n ts.forEachChild(node, visit)\n }\n\n visit(statement)\n}\n\nexport function createTransformSource(): PruneModelsForClientTransform {\n return ({ code, filePath }) => {\n const forbiddenIdentifiers = new Set<string>()\n const scriptKind = scriptKindFromFilePath(filePath)\n const sourceFile = ts.createSourceFile(filePath, code, ts.ScriptTarget.Latest, true, scriptKind)\n\n const importActions = new Map<ts.ImportDeclaration, { type: \"remove\" } | { type: \"overwrite\"; text: string; remainingValueLocals: string[] }>()\n\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement)) continue\n\n const source = getModuleSpecifierValue(statement)\n if (!source) continue\n\n if (source === \"@rpcbase/db\") {\n const { rewriteText, remainingValueLocals } = rewriteRpcbaseDbImport(statement, forbiddenIdentifiers)\n if (!rewriteText) importActions.set(statement, { type: \"remove\" })\n else importActions.set(statement, { type: \"overwrite\", text: rewriteText, remainingValueLocals })\n continue\n }\n\n if (!isForbiddenModuleSource(source)) continue\n\n getImportValueLocals(statement).forEach((local) => forbiddenIdentifiers.add(local))\n importActions.set(statement, { type: \"remove\" })\n }\n\n let changed = true\n const statementsToRemove = new Set<ts.Statement>()\n while (changed) {\n changed = false\n\n for (const statement of sourceFile.statements) {\n if (ts.isImportDeclaration(statement)) continue\n if (statementsToRemove.has(statement)) continue\n if (!referencesForbiddenRuntime(statement, forbiddenIdentifiers)) continue\n\n getTopLevelBindings(statement).forEach((name) => forbiddenIdentifiers.add(name))\n statementsToRemove.add(statement)\n changed = true\n }\n }\n\n const usedRuntimeIdentifiers = new Set<string>()\n for (const statement of sourceFile.statements) {\n if (ts.isImportDeclaration(statement)) continue\n if (statementsToRemove.has(statement)) continue\n collectRuntimeIdentifierReferences(statement, usedRuntimeIdentifiers)\n }\n\n for (const statement of sourceFile.statements) {\n if (!ts.isImportDeclaration(statement)) continue\n\n const currentAction = importActions.get(statement)\n if (currentAction?.type === \"remove\") continue\n\n const remainingValueLocals = currentAction?.type === \"overwrite\"\n ? currentAction.remainingValueLocals\n : getImportValueLocals(statement)\n\n if (remainingValueLocals.length === 0) continue\n if (remainingValueLocals.some((local) => usedRuntimeIdentifiers.has(local))) continue\n\n importActions.set(statement, { type: \"remove\" })\n }\n\n const s = new MagicString(code)\n\n for (const [importDeclaration, action] of importActions) {\n if (action.type === \"remove\") {\n s.remove(importDeclaration.pos, importDeclaration.end)\n continue\n }\n\n const start = importDeclaration.getStart(sourceFile)\n s.overwrite(start, importDeclaration.end, action.text)\n }\n\n for (const statement of statementsToRemove) {\n s.remove(statement.pos, statement.end)\n }\n\n if (!s.hasChanged()) return null\n\n const map = JSON.parse(s.generateMap({ hires: true, includeContent: true, source: filePath, file: filePath }).toString())\n map.file = filePath\n map.sources = [filePath]\n\n return {\n code: s.toString(),\n map: JSON.stringify(map),\n }\n }\n}\n","import path from \"node:path\"\n\nimport type { Plugin } from \"vite\"\n\nimport { createTransformSource } from \"./transformSource\"\n\n\ntype TransformOptionsLike = boolean | { ssr?: boolean } | undefined\n\nfunction inferIsSsrTransform(transformOptions: TransformOptionsLike): boolean {\n if (typeof transformOptions === \"boolean\") return transformOptions\n if (!transformOptions || typeof transformOptions !== \"object\") return false\n return transformOptions.ssr === true\n}\n\nfunction isPrunableModelsFilePath(filePath: string): boolean {\n const normalized = filePath.replaceAll(\"\\\\\", \"/\")\n\n const parts = normalized.split(\"/\")\n if (parts.includes(\"node_modules\")) return false\n if (parts.length < 2) return false\n if (!parts.some((part, index) => part === \"models\" && index < parts.length - 1)) return false\n\n if (normalized.endsWith(\".d.ts\")) return false\n\n const ext = path.posix.extname(normalized)\n return ext === \".ts\" || ext === \".tsx\"\n}\n\nexport function pruneModelsForClientPlugin(): Plugin {\n const prune = createTransformSource()\n\n return {\n name: \"lz-models-prune-for-browser\",\n enforce: \"pre\",\n transform(code, id, transformOptions) {\n if (inferIsSsrTransform(transformOptions as TransformOptionsLike)) return\n\n const filePath = id.split(\"?\", 1)[0] ?? id\n if (!isPrunableModelsFilePath(filePath)) return\n\n const result = prune({ code, filePath })\n if (!result) return\n return result\n },\n }\n}\n","import fs from \"node:fs\"\nimport path from \"node:path\"\n\nimport { globSync } from \"glob\"\nimport type { Plugin } from \"vite\"\n\n\ntype SpecInputsPluginOpts = {\n pattern?: string\n specDir?: string\n}\n\nconst toPosixPath = (p: string) => p.split(path.sep).join(\"/\")\n\nconst computeInputs = (args: { root: string; pattern: string; specDir: string }) => {\n const { root, pattern, specDir } = args\n const specDirAbs = path.resolve(root, specDir)\n\n const filesAbs = globSync(pattern, {\n cwd: root,\n absolute: true,\n nodir: true,\n })\n\n const inputs: Record<string, string> = {}\n for (const fileAbs of filesAbs) {\n const relFromSpec = path.relative(specDirAbs, fileAbs)\n const outputName = toPosixPath(relFromSpec).replace(/\\.ts$/, \"\")\n inputs[outputName] = fileAbs\n }\n\n return inputs\n}\n\nconst inputsKey = (inputs: Record<string, string>) => Object.keys(inputs).sort().join(\"\\n\")\n\nconst hasRollupInput = (input: unknown) => {\n if (!input) return false\n if (typeof input === \"string\") return true\n if (Array.isArray(input)) return input.length > 0\n if (typeof input === \"object\") return Object.keys(input as any).length > 0\n return false\n}\n\nexport function specInputsPlugin(opts: SpecInputsPluginOpts = {}): Plugin {\n const { pattern = \"spec/**/*.spec{,.desktop,.mobile}.ts\", specDir = \"spec\" } = opts\n\n let rootAbs: string | undefined\n let specDirAbs: string | undefined\n let outDirAbs: string | undefined\n\n let active = false\n let inputsDirty = true\n let currentInputs: Record<string, string> | undefined\n let lastInputsKey: string | undefined\n\n return {\n name: \"rb-spec-inputs\",\n apply: \"build\",\n configResolved(config) {\n rootAbs = config.root\n specDirAbs = path.resolve(rootAbs, specDir)\n outDirAbs = path.resolve(rootAbs, config.build.outDir)\n },\n options(inputOptions) {\n if (!rootAbs) return\n\n active = !hasRollupInput((inputOptions as any).input)\n if (!active) return\n\n if (!currentInputs || inputsDirty) {\n currentInputs = computeInputs({ root: rootAbs, pattern, specDir })\n inputsDirty = false\n }\n ;(inputOptions as any).input = currentInputs\n\n return inputOptions\n },\n watchChange(id, change) {\n if (!active) return\n if (!rootAbs || !specDirAbs) return\n\n const absId = path.isAbsolute(id) ? id : path.resolve(rootAbs, id)\n\n if (absId === specDirAbs) {\n inputsDirty = true\n return\n }\n\n if (!absId.startsWith(specDirAbs + path.sep)) return\n if (!/\\.spec(?:\\.(?:desktop|mobile))?\\.ts$/.test(absId)) return\n if (change.event === \"create\" || change.event === \"delete\") {\n inputsDirty = true\n }\n if (change.event === \"update\") {\n const relFromSpec = path.relative(specDirAbs, absId)\n const outputName = toPosixPath(relFromSpec).replace(/\\.ts$/, \"\")\n if (!currentInputs || currentInputs[outputName] !== absId) {\n inputsDirty = true\n }\n }\n },\n buildStart() {\n if (!active) return\n if (!specDirAbs) return\n\n this.addWatchFile(specDirAbs)\n\n if (!outDirAbs || !currentInputs) return\n\n const key = inputsKey(currentInputs)\n if (lastInputsKey && lastInputsKey !== key) {\n fs.rmSync(outDirAbs, { recursive: true, force: true })\n }\n lastInputsKey = key\n },\n }\n}\n","import \"./dotEnvExpand\"\n\nimport path from \"path\"\nimport fs from \"node:fs\"\n\nimport {\n createServer as viteCreateServer,\n mergeConfig,\n loadEnv,\n} from \"vite\"\nimport type { ConfigEnv, UserConfig, UserConfigExport, UserConfigFn } from \"vite\"\nimport { viteSingleFile } from \"vite-plugin-singlefile\"\nimport react from \"@vitejs/plugin-react\"\nimport { createHtmlPlugin } from \"vite-plugin-html\"\nimport { analyzer } from \"vite-bundle-analyzer\"\n\nimport { resolveIntegratedPackagePath } from \"./resolveIntegratedPackagePath\"\nimport { posthogSourcemapsPlugin } from \"./plugins/posthog-sourcemaps\"\nimport { pruneModelsForClientPlugin } from \"./plugins/prune-models-for-client\"\nimport { specInputsPlugin } from \"./plugins/spec-inputs\"\n\n\nexport { pruneModelsForClientPlugin }\n\n\nconst shouldAnalyze = process.env.ANALYZE === \"1\"\n\nconst ensureEnvPolyfillInjectPath = () => {\n const injectDir = path.resolve(process.cwd(), \"node_modules/.rpcbase\")\n const injectPath = path.join(injectDir, \"rb-env-polyfill-inject.js\")\n const injectContents = \"import \\\"@rpcbase/env/polyfill\\\"\\n\"\n\n fs.mkdirSync(injectDir, { recursive: true })\n try {\n const existing = fs.readFileSync(injectPath, \"utf8\")\n if (existing === injectContents) {\n return injectPath\n }\n } catch {\n // file does not exist yet\n }\n\n fs.writeFileSync(injectPath, injectContents, \"utf8\")\n return injectPath\n}\n\nconst esbuildInjectPath = ensureEnvPolyfillInjectPath()\nconst esbuildInject = [esbuildInjectPath]\nconst esbuildInjectPlugins: any[] = [\n {\n name: \"rb-env-polyfill-inject\",\n setup(build: any) {\n build.onResolve({ filter: /.*/ }, (args: any) => {\n if (args.path === esbuildInjectPath) {\n return { path: esbuildInjectPath, namespace: \"file\" }\n }\n\n return undefined\n })\n },\n },\n]\n\nconst isCI = [\"true\", \"yes\", \"1\"].includes((process.env.CI as string)?.trim())\nconst isProduction = process.env.NODE_ENV === \"production\"\n\nconst ALLOWED_DEV_ENV = [\"NODE_ENV\", \"APP_NAME\"]\n// workaround vite.ssrLoadModule not setting ssrBuild properly\nconst ALLOWED_ENV_PREFIXES = [\n \"RB_PUBLIC_\",\n ...(isProduction ? [] : ALLOWED_DEV_ENV),\n]\n\n// https://github.com/vbenjs/vite-plugin-html?tab=readme-ov-file#minifyoptions\nconst htmlMinifyOptions = {\n collapseWhitespace: true,\n keepClosingSlash: true,\n removeComments: false,\n removeRedundantAttributes: true,\n removeScriptTypeAttributes: true,\n removeStyleLinkTypeAttributes: true,\n useShortDoctype: true,\n minifyCSS: true,\n}\n\nconst resolveAliases: Record<string, string> = {\n \"@/api\": path.resolve(process.cwd(), \"./src/api/\"),\n \"@/models\": path.resolve(process.cwd(), \"./src/models/\"),\n \"@/shared\": path.resolve(process.cwd(), \"./src/shared/\"),\n \"@/types\": path.resolve(process.cwd(), \"./src/types/\"),\n \"@\": path.resolve(process.cwd(), \"./src/client/\"),\n}\n\nconst integratedPackages = [\n \"@hookform/resolvers\",\n \"axios\",\n \"events\",\n \"libphonenumber-js\",\n \"posthog-js\",\n \"posthog-js/react\",\n \"posthog-node\",\n \"react-router\",\n \"react-hook-form\",\n]\n\n// Add each integrated package to resolveAliases\nintegratedPackages.forEach((pkg) => {\n const resolved = resolveIntegratedPackagePath(pkg)\n resolveAliases[pkg] = resolved\n})\n\nresolveAliases[\"node:events\"] = resolveIntegratedPackagePath(\"events\")\n\n// Force PostHog React imports to resolve to the ESM bundle to avoid Node ESM\n// directory import errors while keeping SSR compatibility.\nconst posthogReactEsm = resolveIntegratedPackagePath(\"posthog-js/react/dist/esm/index.js\")\nresolveAliases[\"posthog-js/react\"] = posthogReactEsm\nresolveAliases[\"posthog-js/react/dist/esm/index.js\"] = posthogReactEsm\n\nexport { resolveAliases }\n\nconst rbPackagesNeedingEnvPolyfill = [\n \"@rpcbase/auth\",\n \"@rpcbase/env\",\n // \"@rpcbase/env/polyfill\",\n \"@rpcbase/client\",\n \"@rpcbase/form\",\n \"@rpcbase/router\",\n]\n\nconst rbSsrNoExternalPackages = [\n ...rbPackagesNeedingEnvPolyfill,\n \"@rpcbase/server\",\n]\n\nconst rpcbaseDedupePackages = [\n \"@rpcbase/api\",\n \"@rpcbase/auth\",\n \"@rpcbase/client\",\n \"@rpcbase/db\",\n \"@rpcbase/debug\",\n \"@rpcbase/env\",\n \"@rpcbase/form\",\n \"@rpcbase/router\",\n \"@rpcbase/server\",\n \"@rpcbase/ui\",\n \"@rpcbase/worker\",\n]\n\nconst createRuntimeEnv = (args: {\n env: Record<string, string>\n configEnv: ConfigEnv\n}) => {\n const { env, configEnv } = args\n const { command, mode, isSsrBuild } = configEnv\n const isDevCommand = command === \"serve\"\n\n const mergedEnv = {\n ...env,\n }\n\n return {\n ...mergedEnv,\n BASE_URL: mergedEnv.BASE_URL ?? \"/\",\n MODE: mode,\n DEV: isDevCommand,\n PROD: !isDevCommand,\n SSR: Boolean(isSsrBuild),\n }\n}\n\n// https://vite.dev/config/\nconst getBaseConfig = (configEnv: ConfigEnv): UserConfig => {\n const { mode } = configEnv\n const env = loadEnv(mode, process.cwd(), ALLOWED_ENV_PREFIXES)\n const runtimeEnv = createRuntimeEnv({ env, configEnv })\n\n return {\n clearScreen: false,\n plugins: [\n pruneModelsForClientPlugin(),\n react({\n babel: {\n plugins: [\n [\"babel-plugin-react-compiler\", { target: \"19\" }],\n ],\n },\n }),\n createHtmlPlugin({\n // IMPORTANT: minify removes comments by default, which are used by the app ssr\n minify: htmlMinifyOptions,\n }),\n viteSingleFile({\n useRecommendedBuildConfig: false,\n deleteInlinedFiles: true,\n inlinePattern: [\"**/*.css\"],\n removeViteModuleLoader: false,\n }),\n isProduction && isCI && posthogSourcemapsPlugin({}),\n shouldAnalyze && analyzer(),\n ].filter(Boolean),\n define: {\n __vite_env__: runtimeEnv,\n },\n envPrefix: ALLOWED_ENV_PREFIXES,\n publicDir: path.join(process.cwd(), \"./src/client/public\"),\n build: {\n sourcemap: isProduction ? \"hidden\" : false,\n cssCodeSplit: false,\n outDir: \"./build/dist/\",\n rollupOptions: {\n input: {\n app: \"./src/client/index.html\",\n },\n },\n commonjsOptions: { transformMixedEsModules: true },\n },\n server: {\n allowedHosts: true,\n headers: {\n // \"X-Custom-Header\": \"test-custom\",\n },\n watch: {\n ignored: [\"**/build/playwright/**\"],\n },\n },\n resolve: {\n alias: {\n ...resolveAliases,\n },\n dedupe: [\n \"react\",\n \"react-dom\",\n \"react-router\",\n \"react-hook-form\",\n ...rpcbaseDedupePackages,\n ],\n preserveSymlinks: true,\n },\n ssr: {\n external: [\n // \"react\", \"react-dom\",\n \"cookie\",\n \"mongoose\",\n \"mongodb\",\n ],\n noExternal: [\n ...rbSsrNoExternalPackages,\n // \"react-use\",\n ],\n },\n optimizeDeps: {\n include: [\n // Force RPC Base packages through esbuild so rb-env-polyfill injects before their dist code touches globalThis.__rb_env__\n ...rbPackagesNeedingEnvPolyfill,\n \"hoist-non-react-statics\",\n // \"react\", \"react-dom\", \"react-dom/server\"\n // \"cookie\"\n ],\n exclude: [\n \"@radix-ui/*\",\n \"@rpcbase/ui\",\n // TMP only in sample app?\n // \"react\", \"react-dom/server\",\n // \"react-hook-form\",\n // \"react-dom\"\n ],\n esbuildOptions: {\n inject: esbuildInject,\n plugins: esbuildInjectPlugins,\n },\n },\n // future: {\n // removeSsrLoadModule: true\n // },\n }\n}\n\nexport const extendConfig = (userConfig: UserConfigExport): UserConfigFn => {\n return async (configEnv) => {\n const config =\n typeof userConfig === \"function\"\n ? await (userConfig as UserConfigFn)(configEnv)\n : userConfig\n\n const baseConfig = getBaseConfig(configEnv)\n\n return mergeConfig(baseConfig, config as any)\n }\n}\n\nconst getSpecBaseConfig = (configEnv: ConfigEnv): UserConfig => {\n const { mode } = configEnv\n const env = loadEnv(mode, process.cwd(), ALLOWED_ENV_PREFIXES)\n const runtimeEnv = createRuntimeEnv({ env, configEnv })\n\n return {\n clearScreen: false,\n define: {\n __vite_env__: runtimeEnv,\n },\n envPrefix: ALLOWED_ENV_PREFIXES,\n plugins: [\n specInputsPlugin(),\n ],\n build: {\n outDir: \"./build/spec/\",\n ssr: true,\n rollupOptions: {\n input: {},\n },\n commonjsOptions: { transformMixedEsModules: true },\n },\n resolve: {\n alias: {\n ...resolveAliases,\n },\n dedupe: [\n \"react\",\n \"react-dom\",\n \"react-router\",\n \"react-hook-form\",\n ...rpcbaseDedupePackages,\n ],\n preserveSymlinks: true,\n },\n ssr: {\n external: [\"mongoose\"],\n noExternal: [\"@rpcbase/*\"],\n },\n }\n}\n\nexport const extendSpecConfig = (userConfig: UserConfigExport): UserConfigFn => {\n return async (configEnv) => {\n const config =\n typeof userConfig === \"function\"\n ? await (userConfig as UserConfigFn)(configEnv)\n : userConfig\n\n const baseConfig = getSpecBaseConfig(configEnv)\n\n return mergeConfig(baseConfig, config as any)\n }\n}\n\nexport const createServer = viteCreateServer\n"],"names":["envFilePath","path","resolve","process","cwd","fs","existsSync","parsedFile","dotenv","parse","readFileSync","expanded","expand","parsed","Object","assign","env","require","createRequire","import","url","splitPackageSpecifier","specifier","pkgName","subpath","startsWith","segments","split","length","slice","join","rest","withTrailingSep","p","endsWith","sep","resolvePackageRoot","pkg","pkgJson","dirname","err","entry","dir","pkgJsonPath","json","JSON","name","parent","nmMarker","idx","lastIndexOf","nmRoot","resolveIntegratedPackagePath","root","subDir","module","main","__dirname","fileURLToPath","run","bin","args","Promise","reject","spawn","stdio","on","code","Error","resolvePosthogCliBin","binName","fromCwd","candidate","posthogSourcemapsPlugin","opts","directory","version","host","RB_PUBLIC_POSTHOG_HOST","deleteAfterUpload","globalArgs","apply","closeBundle","orange","reset","envId","POSTHOG_CLI_ENV_ID","token","POSTHOG_CLI_TOKEN","console","warn","injectArgs","push","uploadArgs","isForbiddenModuleSource","source","getModuleSpecifierValue","importDeclaration","moduleSpecifier","ts","isStringLiteralLike","text","isTypeOnlyImport","importClause","isTypeOnly","getImportValueLocals","locals","namedBindings","isNamespaceImport","isNamedImports","elements","getNamedImportSpecifiers","rewriteRpcbaseDbImport","forbiddenIdentifiers","valueLocals","zLocals","Set","namedImports","imported","propertyName","add","local","has","size","rewriteText","remainingValueLocals","specifierText","Array","from","map","collectBindingNames","out","isIdentifier","element","isOmittedExpression","getTopLevelBindings","statement","isVariableStatement","names","decl","declarationList","declarations","isFunctionDeclaration","isClassDeclaration","isEnumDeclaration","isRuntimeReferenceIdentifier","identifier","isVariableDeclaration","isParameter","isFunctionExpression","isClassExpression","isTypeAliasDeclaration","isInterfaceDeclaration","isModuleDeclaration","isTypeParameterDeclaration","isImportClause","isImportSpecifier","isImportEqualsDeclaration","isBindingElement","isPropertyAccessExpression","isQualifiedName","isPropertyAssignment","isPropertyDeclaration","isPropertySignature","isMethodDeclaration","isMethodSignature","isGetAccessorDeclaration","isSetAccessorDeclaration","isShorthandPropertyAssignment","isExportSpecifier","isLabeledStatement","label","isBreakStatement","isContinueStatement","referencesForbiddenRuntime","forbidden","found","visit","node","isTypeNode","isHeritageClause","SyntaxKind","ImplementsKeyword","forEachChild","scriptKindFromFilePath","filePath","ext","extname","toLowerCase","ScriptKind","TSX","TS","collectRuntimeIdentifierReferences","createTransformSource","scriptKind","sourceFile","createSourceFile","ScriptTarget","Latest","importActions","Map","statements","isImportDeclaration","set","type","forEach","changed","statementsToRemove","usedRuntimeIdentifiers","currentAction","get","some","s","MagicString","action","remove","pos","end","start","getStart","overwrite","hasChanged","generateMap","hires","includeContent","file","toString","sources","stringify","inferIsSsrTransform","transformOptions","ssr","isPrunableModelsFilePath","normalized","replaceAll","parts","includes","part","index","posix","pruneModelsForClientPlugin","prune","enforce","transform","id","result","toPosixPath","computeInputs","pattern","specDir","specDirAbs","filesAbs","globSync","absolute","nodir","inputs","fileAbs","relFromSpec","relative","outputName","replace","inputsKey","keys","sort","hasRollupInput","input","isArray","specInputsPlugin","rootAbs","outDirAbs","active","inputsDirty","currentInputs","lastInputsKey","configResolved","config","build","outDir","options","inputOptions","watchChange","change","absId","isAbsolute","test","event","buildStart","addWatchFile","key","rmSync","recursive","force","shouldAnalyze","ANALYZE","ensureEnvPolyfillInjectPath","injectDir","injectPath","injectContents","mkdirSync","existing","writeFileSync","esbuildInjectPath","esbuildInject","esbuildInjectPlugins","setup","onResolve","filter","namespace","undefined","isCI","CI","trim","isProduction","NODE_ENV","ALLOWED_DEV_ENV","ALLOWED_ENV_PREFIXES","htmlMinifyOptions","collapseWhitespace","keepClosingSlash","removeComments","removeRedundantAttributes","removeScriptTypeAttributes","removeStyleLinkTypeAttributes","useShortDoctype","minifyCSS","resolveAliases","integratedPackages","resolved","posthogReactEsm","rbPackagesNeedingEnvPolyfill","rbSsrNoExternalPackages","rpcbaseDedupePackages","createRuntimeEnv","configEnv","command","mode","isSsrBuild","isDevCommand","mergedEnv","BASE_URL","MODE","DEV","PROD","SSR","Boolean","getBaseConfig","loadEnv","runtimeEnv","clearScreen","plugins","react","babel","target","createHtmlPlugin","minify","viteSingleFile","useRecommendedBuildConfig","deleteInlinedFiles","inlinePattern","removeViteModuleLoader","analyzer","define","__vite_env__","envPrefix","publicDir","sourcemap","cssCodeSplit","rollupOptions","app","commonjsOptions","transformMixedEsModules","server","allowedHosts","headers","watch","ignored","alias","dedupe","preserveSymlinks","external","noExternal","optimizeDeps","include","exclude","esbuildOptions","inject","extendConfig","userConfig","baseConfig","mergeConfig","getSpecBaseConfig","extendSpecConfig","createServer","viteCreateServer"],"mappings":"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"}
|