@rpcbase/vite 0.121.0 → 0.123.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
CHANGED
|
@@ -10,7 +10,7 @@ import { createRequire } from "node:module";
|
|
|
10
10
|
import { spawn } from "node:child_process";
|
|
11
11
|
import path$1 from "node:path";
|
|
12
12
|
import { fileURLToPath } from "node:url";
|
|
13
|
-
import
|
|
13
|
+
import MagicString from "magic-string";
|
|
14
14
|
import * as ts from "typescript";
|
|
15
15
|
import { globSync } from "glob";
|
|
16
16
|
const envFilePath = path.resolve(process.cwd(), ".env");
|
|
@@ -149,38 +149,65 @@ function isForbiddenModuleSource(source) {
|
|
|
149
149
|
}
|
|
150
150
|
return false;
|
|
151
151
|
}
|
|
152
|
+
function getModuleSpecifierValue(importDeclaration) {
|
|
153
|
+
const moduleSpecifier = importDeclaration.moduleSpecifier;
|
|
154
|
+
if (!ts.isStringLiteralLike(moduleSpecifier)) return null;
|
|
155
|
+
return moduleSpecifier.text;
|
|
156
|
+
}
|
|
157
|
+
function isTypeOnlyImport(importDeclaration) {
|
|
158
|
+
const importClause = importDeclaration.importClause;
|
|
159
|
+
if (!importClause) return false;
|
|
160
|
+
return importClause.isTypeOnly === true;
|
|
161
|
+
}
|
|
152
162
|
function getImportValueLocals(importDeclaration) {
|
|
153
|
-
if (importDeclaration
|
|
163
|
+
if (isTypeOnlyImport(importDeclaration)) return [];
|
|
164
|
+
const importClause = importDeclaration.importClause;
|
|
165
|
+
if (!importClause) return [];
|
|
154
166
|
const locals = [];
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if (
|
|
161
|
-
|
|
162
|
-
|
|
167
|
+
if (importClause.name) locals.push(importClause.name.text);
|
|
168
|
+
const namedBindings = importClause.namedBindings;
|
|
169
|
+
if (namedBindings) {
|
|
170
|
+
if (ts.isNamespaceImport(namedBindings)) {
|
|
171
|
+
locals.push(namedBindings.name.text);
|
|
172
|
+
} else if (ts.isNamedImports(namedBindings)) {
|
|
173
|
+
for (const specifier of namedBindings.elements) {
|
|
174
|
+
if (specifier.isTypeOnly) continue;
|
|
175
|
+
locals.push(specifier.name.text);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
163
178
|
}
|
|
164
179
|
return locals;
|
|
165
180
|
}
|
|
181
|
+
function getNamedImportSpecifiers(importDeclaration) {
|
|
182
|
+
const importClause = importDeclaration.importClause;
|
|
183
|
+
if (!importClause) return null;
|
|
184
|
+
if (!importClause.namedBindings) return null;
|
|
185
|
+
if (!ts.isNamedImports(importClause.namedBindings)) return null;
|
|
186
|
+
return importClause.namedBindings.elements;
|
|
187
|
+
}
|
|
166
188
|
function rewriteRpcbaseDbImport(importDeclaration, forbiddenIdentifiers) {
|
|
167
189
|
const valueLocals = getImportValueLocals(importDeclaration);
|
|
168
190
|
const zLocals = /* @__PURE__ */ new Set();
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
191
|
+
const namedImports = getNamedImportSpecifiers(importDeclaration);
|
|
192
|
+
if (namedImports && !isTypeOnlyImport(importDeclaration)) {
|
|
193
|
+
for (const specifier of namedImports) {
|
|
194
|
+
if (specifier.isTypeOnly) continue;
|
|
195
|
+
const imported = specifier.propertyName?.text ?? specifier.name.text;
|
|
196
|
+
if (imported !== "z") continue;
|
|
197
|
+
zLocals.add(specifier.name.text);
|
|
198
|
+
}
|
|
174
199
|
}
|
|
175
200
|
for (const local of valueLocals) {
|
|
176
201
|
if (!zLocals.has(local)) forbiddenIdentifiers.add(local);
|
|
177
202
|
}
|
|
178
203
|
if (zLocals.size === 0) {
|
|
179
|
-
|
|
180
|
-
return;
|
|
204
|
+
return { rewriteText: null, remainingValueLocals: [] };
|
|
181
205
|
}
|
|
182
206
|
const specifierText = Array.from(zLocals).map((local) => local === "z" ? "z" : `z as ${local}`).join(", ");
|
|
183
|
-
|
|
207
|
+
return {
|
|
208
|
+
rewriteText: `import { ${specifierText} } from "@rpcbase/db"`,
|
|
209
|
+
remainingValueLocals: Array.from(zLocals)
|
|
210
|
+
};
|
|
184
211
|
}
|
|
185
212
|
function collectBindingNames(name, out) {
|
|
186
213
|
if (ts.isIdentifier(name)) {
|
|
@@ -262,37 +289,90 @@ function referencesForbiddenRuntime(statement, forbidden) {
|
|
|
262
289
|
visit(statement);
|
|
263
290
|
return found;
|
|
264
291
|
}
|
|
292
|
+
function scriptKindFromFilePath(filePath) {
|
|
293
|
+
const ext = path$1.extname(filePath).toLowerCase();
|
|
294
|
+
if (ext === ".tsx") return ts.ScriptKind.TSX;
|
|
295
|
+
return ts.ScriptKind.TS;
|
|
296
|
+
}
|
|
297
|
+
function collectRuntimeIdentifierReferences(statement, out) {
|
|
298
|
+
const visit = (node) => {
|
|
299
|
+
if (ts.isTypeNode(node)) return;
|
|
300
|
+
if (ts.isHeritageClause(node) && node.token === ts.SyntaxKind.ImplementsKeyword) return;
|
|
301
|
+
if (ts.isIdentifier(node) && isRuntimeReferenceIdentifier(node)) {
|
|
302
|
+
out.add(node.text);
|
|
303
|
+
}
|
|
304
|
+
ts.forEachChild(node, visit);
|
|
305
|
+
};
|
|
306
|
+
visit(statement);
|
|
307
|
+
}
|
|
265
308
|
function createTransformSource() {
|
|
266
|
-
const project = new Project({ compilerOptions: { noUnusedLocals: true } });
|
|
267
309
|
return ({ code, filePath }) => {
|
|
268
|
-
const sourceFile = project.createSourceFile(filePath, code, { overwrite: true });
|
|
269
310
|
const forbiddenIdentifiers = /* @__PURE__ */ new Set();
|
|
270
|
-
|
|
271
|
-
|
|
311
|
+
const scriptKind = scriptKindFromFilePath(filePath);
|
|
312
|
+
const sourceFile = ts.createSourceFile(filePath, code, ts.ScriptTarget.Latest, true, scriptKind);
|
|
313
|
+
const importActions = /* @__PURE__ */ new Map();
|
|
314
|
+
for (const statement of sourceFile.statements) {
|
|
315
|
+
if (!ts.isImportDeclaration(statement)) continue;
|
|
316
|
+
const source = getModuleSpecifierValue(statement);
|
|
317
|
+
if (!source) continue;
|
|
272
318
|
if (source === "@rpcbase/db") {
|
|
273
|
-
rewriteRpcbaseDbImport(
|
|
319
|
+
const { rewriteText, remainingValueLocals } = rewriteRpcbaseDbImport(statement, forbiddenIdentifiers);
|
|
320
|
+
if (!rewriteText) importActions.set(statement, { type: "remove" });
|
|
321
|
+
else importActions.set(statement, { type: "overwrite", text: rewriteText, remainingValueLocals });
|
|
274
322
|
continue;
|
|
275
323
|
}
|
|
276
324
|
if (!isForbiddenModuleSource(source)) continue;
|
|
277
|
-
getImportValueLocals(
|
|
278
|
-
|
|
325
|
+
getImportValueLocals(statement).forEach((local) => forbiddenIdentifiers.add(local));
|
|
326
|
+
importActions.set(statement, { type: "remove" });
|
|
279
327
|
}
|
|
280
328
|
let changed = true;
|
|
329
|
+
const statementsToRemove = /* @__PURE__ */ new Set();
|
|
281
330
|
while (changed) {
|
|
282
331
|
changed = false;
|
|
283
|
-
for (const statement of sourceFile.
|
|
284
|
-
|
|
285
|
-
if (
|
|
286
|
-
if (!referencesForbiddenRuntime(
|
|
287
|
-
getTopLevelBindings(
|
|
288
|
-
|
|
332
|
+
for (const statement of sourceFile.statements) {
|
|
333
|
+
if (ts.isImportDeclaration(statement)) continue;
|
|
334
|
+
if (statementsToRemove.has(statement)) continue;
|
|
335
|
+
if (!referencesForbiddenRuntime(statement, forbiddenIdentifiers)) continue;
|
|
336
|
+
getTopLevelBindings(statement).forEach((name) => forbiddenIdentifiers.add(name));
|
|
337
|
+
statementsToRemove.add(statement);
|
|
289
338
|
changed = true;
|
|
290
339
|
}
|
|
291
340
|
}
|
|
292
|
-
|
|
293
|
-
sourceFile.
|
|
294
|
-
|
|
295
|
-
|
|
341
|
+
const usedRuntimeIdentifiers = /* @__PURE__ */ new Set();
|
|
342
|
+
for (const statement of sourceFile.statements) {
|
|
343
|
+
if (ts.isImportDeclaration(statement)) continue;
|
|
344
|
+
if (statementsToRemove.has(statement)) continue;
|
|
345
|
+
collectRuntimeIdentifierReferences(statement, usedRuntimeIdentifiers);
|
|
346
|
+
}
|
|
347
|
+
for (const statement of sourceFile.statements) {
|
|
348
|
+
if (!ts.isImportDeclaration(statement)) continue;
|
|
349
|
+
const currentAction = importActions.get(statement);
|
|
350
|
+
if (currentAction?.type === "remove") continue;
|
|
351
|
+
const remainingValueLocals = currentAction?.type === "overwrite" ? currentAction.remainingValueLocals : getImportValueLocals(statement);
|
|
352
|
+
if (remainingValueLocals.length === 0) continue;
|
|
353
|
+
if (remainingValueLocals.some((local) => usedRuntimeIdentifiers.has(local))) continue;
|
|
354
|
+
importActions.set(statement, { type: "remove" });
|
|
355
|
+
}
|
|
356
|
+
const s = new MagicString(code);
|
|
357
|
+
for (const [importDeclaration, action] of importActions) {
|
|
358
|
+
if (action.type === "remove") {
|
|
359
|
+
s.remove(importDeclaration.pos, importDeclaration.end);
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
const start = importDeclaration.getStart(sourceFile);
|
|
363
|
+
s.overwrite(start, importDeclaration.end, action.text);
|
|
364
|
+
}
|
|
365
|
+
for (const statement of statementsToRemove) {
|
|
366
|
+
s.remove(statement.pos, statement.end);
|
|
367
|
+
}
|
|
368
|
+
if (!s.hasChanged()) return null;
|
|
369
|
+
const map = JSON.parse(s.generateMap({ hires: true, includeContent: true, source: filePath, file: filePath }).toString());
|
|
370
|
+
map.file = filePath;
|
|
371
|
+
map.sources = [filePath];
|
|
372
|
+
return {
|
|
373
|
+
code: s.toString(),
|
|
374
|
+
map: JSON.stringify(map)
|
|
375
|
+
};
|
|
296
376
|
};
|
|
297
377
|
}
|
|
298
378
|
function inferIsSsrTransform(transformOptions) {
|
|
@@ -308,7 +388,7 @@ function isPrunableModelsFilePath(filePath) {
|
|
|
308
388
|
if (!parts.some((part, index) => part === "models" && index < parts.length - 1)) return false;
|
|
309
389
|
if (normalized.endsWith(".d.ts")) return false;
|
|
310
390
|
const ext = path$1.posix.extname(normalized);
|
|
311
|
-
return ext === ".ts" || ext === ".tsx"
|
|
391
|
+
return ext === ".ts" || ext === ".tsx";
|
|
312
392
|
}
|
|
313
393
|
function pruneModelsForClientPlugin() {
|
|
314
394
|
const prune = createTransformSource();
|
|
@@ -319,9 +399,9 @@ function pruneModelsForClientPlugin() {
|
|
|
319
399
|
if (inferIsSsrTransform(transformOptions)) return;
|
|
320
400
|
const filePath = id.split("?", 1)[0] ?? id;
|
|
321
401
|
if (!isPrunableModelsFilePath(filePath)) return;
|
|
322
|
-
const
|
|
323
|
-
if (!
|
|
324
|
-
return
|
|
402
|
+
const result = prune({ code, filePath });
|
|
403
|
+
if (!result) return;
|
|
404
|
+
return result;
|
|
325
405
|
}
|
|
326
406
|
};
|
|
327
407
|
}
|
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 { Project, type ImportDeclaration } from \"ts-morph\"\nimport * as ts from \"typescript\"\n\n\nexport type PruneModelsForClientTransform = (args: { code: string; filePath: string }) => string | 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 getImportValueLocals(importDeclaration: ImportDeclaration): string[] {\n if (importDeclaration.isTypeOnly()) return []\n\n const locals: string[] = []\n\n const defaultImport = importDeclaration.getDefaultImport()\n if (defaultImport) locals.push(defaultImport.getText())\n\n const namespaceImport = importDeclaration.getNamespaceImport()\n if (namespaceImport) locals.push(namespaceImport.getText())\n\n for (const specifier of importDeclaration.getNamedImports()) {\n if (specifier.isTypeOnly()) continue\n const alias = specifier.getAliasNode()?.getText()\n locals.push(alias ?? specifier.getName())\n }\n\n return locals\n}\n\nfunction rewriteRpcbaseDbImport(importDeclaration: ImportDeclaration, forbiddenIdentifiers: Set<string>): void {\n const valueLocals = getImportValueLocals(importDeclaration)\n\n const zLocals = new Set<string>()\n for (const specifier of importDeclaration.getNamedImports()) {\n if (importDeclaration.isTypeOnly() || specifier.isTypeOnly()) continue\n if (specifier.getName() !== \"z\") continue\n const local = specifier.getAliasNode()?.getText() ?? \"z\"\n zLocals.add(local)\n }\n\n for (const local of valueLocals) {\n if (!zLocals.has(local)) forbiddenIdentifiers.add(local)\n }\n\n if (zLocals.size === 0) {\n importDeclaration.remove()\n return\n }\n\n const specifierText = Array.from(zLocals)\n .map((local) => (local === \"z\" ? \"z\" : `z as ${local}`))\n .join(\", \")\n\n importDeclaration.replaceWithText(`import { ${specifierText} } from \"@rpcbase/db\"`)\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\nexport function createTransformSource(): PruneModelsForClientTransform {\n const project = new Project({ compilerOptions: { noUnusedLocals: true } })\n\n return ({ code, filePath }) => {\n const sourceFile = project.createSourceFile(filePath, code, { overwrite: true })\n const forbiddenIdentifiers = new Set<string>()\n\n for (const importDeclaration of sourceFile.getImportDeclarations()) {\n const source = importDeclaration.getModuleSpecifierValue()\n\n if (source === \"@rpcbase/db\") {\n rewriteRpcbaseDbImport(importDeclaration, forbiddenIdentifiers)\n continue\n }\n\n if (!isForbiddenModuleSource(source)) continue\n\n getImportValueLocals(importDeclaration).forEach((local) => forbiddenIdentifiers.add(local))\n importDeclaration.remove()\n }\n\n let changed = true\n while (changed) {\n changed = false\n\n for (const statement of sourceFile.getStatements()) {\n const compilerStatement = statement.compilerNode\n if (ts.isImportDeclaration(compilerStatement)) continue\n if (!referencesForbiddenRuntime(compilerStatement, forbiddenIdentifiers)) continue\n\n getTopLevelBindings(compilerStatement).forEach((name) => forbiddenIdentifiers.add(name))\n statement.remove()\n changed = true\n }\n }\n\n sourceFile.fixUnusedIdentifiers()\n sourceFile.organizeImports()\n\n const nextCode = sourceFile.getFullText()\n return nextCode === code ? null : nextCode\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\" || ext === \".mts\" || ext === \".cts\"\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 nextCode = prune({ code, filePath })\n if (!nextCode) return\n return { code: nextCode }\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.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 (!absId.endsWith(\".spec.ts\")) 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\"\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\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 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/server\",\n \"@rpcbase/client\",\n \"@rpcbase/form\",\n \"@rpcbase/router\",\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 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 && posthogSourcemapsPlugin({}),\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 \"Cache-Control\": \"no-store\",\n },\n watch: {\n ignored: [\"**/build/playwright/**\"],\n },\n },\n resolve: {\n alias: {\n ...resolveAliases,\n },\n dedupe: [\"react\", \"react-dom\", \"react-router\", \"react-hook-form\"],\n preserveSymlinks: true,\n },\n ssr: {\n external: [\n // \"react\", \"react-dom\",\n \"cookie\",\n \"mongoose\",\n \"mongodb\",\n ],\n noExternal: [\n ...rbPackagesNeedingEnvPolyfill,\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 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.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 (!absId.endsWith(\".spec.ts\")) 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\"\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\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 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/server\",\n \"@rpcbase/client\",\n \"@rpcbase/form\",\n \"@rpcbase/router\",\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 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 && posthogSourcemapsPlugin({}),\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 \"Cache-Control\": \"no-store\",\n },\n watch: {\n ignored: [\"**/build/playwright/**\"],\n },\n },\n resolve: {\n alias: {\n ...resolveAliases,\n },\n dedupe: [\"react\", \"react-dom\", \"react-router\", \"react-hook-form\"],\n preserveSymlinks: true,\n },\n ssr: {\n external: [\n // \"react\", \"react-dom\",\n \"cookie\",\n \"mongoose\",\n \"mongodb\",\n ],\n noExternal: [\n ...rbPackagesNeedingEnvPolyfill,\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 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,6 +1,11 @@
|
|
|
1
|
+
import { SourceMapInput } from 'rollup';
|
|
2
|
+
export type PruneModelsForClientTransformResult = {
|
|
3
|
+
code: string;
|
|
4
|
+
map: SourceMapInput;
|
|
5
|
+
};
|
|
1
6
|
export type PruneModelsForClientTransform = (args: {
|
|
2
7
|
code: string;
|
|
3
8
|
filePath: string;
|
|
4
|
-
}) =>
|
|
9
|
+
}) => PruneModelsForClientTransformResult | null;
|
|
5
10
|
export declare function createTransformSource(): PruneModelsForClientTransform;
|
|
6
11
|
//# sourceMappingURL=transformSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformSource.d.ts","sourceRoot":"","sources":["../../../src/plugins/prune-models-for-client/transformSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transformSource.d.ts","sourceRoot":"","sources":["../../../src/plugins/prune-models-for-client/transformSource.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAI5C,MAAM,MAAM,mCAAmC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,CAAA;AACvF,MAAM,MAAM,6BAA6B,GAAG,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,KAAK,mCAAmC,GAAG,IAAI,CAAA;AA6NpI,wBAAgB,qBAAqB,IAAI,6BAA6B,CA6FrE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rpcbase/vite",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.123.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
"glob": "13.0.0",
|
|
77
77
|
"libphonenumber-js": "1.12.33",
|
|
78
78
|
"lucide-react": "0.562.0",
|
|
79
|
+
"magic-string": "0.30.21",
|
|
79
80
|
"mongoose": "9.1.2",
|
|
80
81
|
"posthog-js": "1.316.0",
|
|
81
82
|
"posthog-node": "5.20.0",
|
|
@@ -90,5 +91,8 @@
|
|
|
90
91
|
"vite-plugin-html": "3.2.2",
|
|
91
92
|
"vite-plugin-singlefile": "2.3.0",
|
|
92
93
|
"zod": "4.3.5"
|
|
94
|
+
},
|
|
95
|
+
"devDependencies": {
|
|
96
|
+
"@jridgewell/trace-mapping": "0.3.31"
|
|
93
97
|
}
|
|
94
98
|
}
|