zero-com 1.12.1 → 1.13.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/lib/common.d.ts +2 -0
- package/lib/common.js +28 -2
- package/lib/rollup.js +2 -17
- package/package.json +1 -1
package/lib/common.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ export declare const buildRegistry: (contextDir: string, registry: ServerFuncReg
|
|
|
38
38
|
export declare const updateRegistryForFile: (filePath: string, contextDir: string, registry: ServerFuncRegistry, project?: Project) => void;
|
|
39
39
|
export declare const getImportedServerFunctions: (sourceFile: SourceFile, registry: ServerFuncRegistry) => Map<string, ServerFuncInfo>;
|
|
40
40
|
export declare const collectCallSiteReplacements: (sourceFile: SourceFile, importedFuncs: Map<string, ServerFuncInfo>) => Replacement[];
|
|
41
|
+
export declare const hasHandleCall: (sourceFile: SourceFile) => boolean;
|
|
42
|
+
export declare const generateRegistryRequires: (registry: ServerFuncRegistry) => string;
|
|
41
43
|
export declare const collectHandleCallReplacements: (sourceFile: SourceFile) => Replacement[];
|
|
42
44
|
export declare const collectSendCallReplacements: (sourceFile: SourceFile) => Replacement[];
|
|
43
45
|
export declare const collectFuncCallReplacements: (sourceFile: SourceFile) => Replacement[];
|
package/lib/common.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.applyReplacements = exports.emitToJs = exports.transformSourceFile = exports.generateClientStubs = exports.appendRegistryCode = exports.applyReplacementsWithMap = exports.collectFuncCallReplacements = exports.collectSendCallReplacements = exports.collectHandleCallReplacements = exports.collectCallSiteReplacements = exports.getImportedServerFunctions = exports.updateRegistryForFile = exports.buildRegistry = exports.mightNeedTransform = exports.createProject = exports.resolveFilePath = exports.isFromLibrary = exports.getReplacements = exports.generateCompilationId = exports.formatFuncIdName = exports.FILE_EXTENSIONS = exports.LIBRARY_NAME = exports.CALL_NAME = exports.HANDLE_NAME = exports.SERVER_FUNCTION_WRAPPER_NAME = exports.ZERO_COM_CONTEXT_STORAGE = exports.ZERO_COM_SERVER_REGISTRY = exports.ZERO_COM_CLIENT_CALL = void 0;
|
|
6
|
+
exports.applyReplacements = exports.emitToJs = exports.transformSourceFile = exports.generateClientStubs = exports.appendRegistryCode = exports.applyReplacementsWithMap = exports.collectFuncCallReplacements = exports.collectSendCallReplacements = exports.collectHandleCallReplacements = exports.generateRegistryRequires = exports.hasHandleCall = exports.collectCallSiteReplacements = exports.getImportedServerFunctions = exports.updateRegistryForFile = exports.buildRegistry = exports.mightNeedTransform = exports.createProject = exports.resolveFilePath = exports.isFromLibrary = exports.getReplacements = exports.generateCompilationId = exports.formatFuncIdName = exports.FILE_EXTENSIONS = exports.LIBRARY_NAME = exports.CALL_NAME = exports.HANDLE_NAME = exports.SERVER_FUNCTION_WRAPPER_NAME = exports.ZERO_COM_CONTEXT_STORAGE = exports.ZERO_COM_SERVER_REGISTRY = exports.ZERO_COM_CLIENT_CALL = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const magic_string_1 = __importDefault(require("magic-string"));
|
|
@@ -213,6 +213,27 @@ const collectCallSiteReplacements = (sourceFile, importedFuncs) => {
|
|
|
213
213
|
return replacements;
|
|
214
214
|
};
|
|
215
215
|
exports.collectCallSiteReplacements = collectCallSiteReplacements;
|
|
216
|
+
const hasHandleCall = (sourceFile) => {
|
|
217
|
+
let found = false;
|
|
218
|
+
sourceFile.forEachDescendant((node) => {
|
|
219
|
+
if (found)
|
|
220
|
+
return;
|
|
221
|
+
if (node.getKind() !== ts_morph_1.SyntaxKind.CallExpression)
|
|
222
|
+
return;
|
|
223
|
+
const callExpr = node;
|
|
224
|
+
if ((0, exports.isFromLibrary)(callExpr, exports.LIBRARY_NAME) && getCalleeName(callExpr) === exports.HANDLE_NAME) {
|
|
225
|
+
found = true;
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
return found;
|
|
229
|
+
};
|
|
230
|
+
exports.hasHandleCall = hasHandleCall;
|
|
231
|
+
const generateRegistryRequires = (registry) => {
|
|
232
|
+
return Array.from(registry.keys())
|
|
233
|
+
.map(fp => `require(${JSON.stringify(fp)});`)
|
|
234
|
+
.join('\n');
|
|
235
|
+
};
|
|
236
|
+
exports.generateRegistryRequires = generateRegistryRequires;
|
|
216
237
|
const collectHandleCallReplacements = (sourceFile) => {
|
|
217
238
|
const replacements = [];
|
|
218
239
|
sourceFile.forEachDescendant((node) => {
|
|
@@ -352,9 +373,14 @@ const transformSourceFile = (filePath, content, registry, options = {}, project)
|
|
|
352
373
|
}
|
|
353
374
|
return { content: (0, exports.appendRegistryCode)(sourceFile, fileRegistry), transformed: true };
|
|
354
375
|
}
|
|
376
|
+
const isHandleFile = target === 'server' && (0, exports.hasHandleCall)(sourceFile);
|
|
355
377
|
if (replacements.length > 0) {
|
|
356
378
|
const { code, map } = (0, exports.applyReplacementsWithMap)(content, replacements, filePath);
|
|
357
|
-
|
|
379
|
+
const finalContent = isHandleFile ? (0, exports.generateRegistryRequires)(registry) + '\n' + code : code;
|
|
380
|
+
return { content: finalContent, transformed: true, map };
|
|
381
|
+
}
|
|
382
|
+
if (isHandleFile) {
|
|
383
|
+
return { content: (0, exports.generateRegistryRequires)(registry) + '\n' + content, transformed: true };
|
|
358
384
|
}
|
|
359
385
|
return { content, transformed: false };
|
|
360
386
|
};
|
package/lib/rollup.js
CHANGED
|
@@ -21,10 +21,6 @@ function zeroComRollupPlugin(options = {}) {
|
|
|
21
21
|
const compilationId = (0, common_1.generateCompilationId)();
|
|
22
22
|
const registry = new Map();
|
|
23
23
|
const project = (0, common_1.createProject)();
|
|
24
|
-
// Cache transform results by filePath → { content, result } to avoid re-running
|
|
25
|
-
// ts-morph on every SSR request in Vite dev mode (ssrLoadModule re-invokes transform
|
|
26
|
-
// for each navigation even when the file hasn't changed).
|
|
27
|
-
const transformCache = new Map();
|
|
28
24
|
let isVite = false;
|
|
29
25
|
let scanDir = optContextDir !== null && optContextDir !== void 0 ? optContextDir : process.cwd();
|
|
30
26
|
return {
|
|
@@ -37,7 +33,6 @@ function zeroComRollupPlugin(options = {}) {
|
|
|
37
33
|
if (!optContextDir)
|
|
38
34
|
scanDir = process.cwd();
|
|
39
35
|
(0, common_1.buildRegistry)(scanDir, registry, project);
|
|
40
|
-
transformCache.clear();
|
|
41
36
|
for (const fileRegistry of registry.values()) {
|
|
42
37
|
for (const info of fileRegistry.values()) {
|
|
43
38
|
console.log(`[ZeroComRollupPlugin] ${info.funcId}`);
|
|
@@ -48,7 +43,6 @@ function zeroComRollupPlugin(options = {}) {
|
|
|
48
43
|
if (!common_1.FILE_EXTENSIONS.slice(1).includes(path_1.default.extname(id)))
|
|
49
44
|
return;
|
|
50
45
|
(0, common_1.updateRegistryForFile)(id, scanDir, registry, project);
|
|
51
|
-
transformCache.clear();
|
|
52
46
|
},
|
|
53
47
|
// Rollup path: resolveId marks files, load transforms them.
|
|
54
48
|
// Skipped in Vite because meta doesn't propagate from resolveId to load.
|
|
@@ -95,25 +89,16 @@ function zeroComRollupPlugin(options = {}) {
|
|
|
95
89
|
return null;
|
|
96
90
|
if (!(0, common_1.mightNeedTransform)(code, id, registry))
|
|
97
91
|
return null;
|
|
98
|
-
// Return cached result if content hasn't changed (avoids re-running ts-morph
|
|
99
|
-
// on every SSR request in Vite dev mode where ssrLoadModule re-invokes transform)
|
|
100
|
-
const cached = transformCache.get(id);
|
|
101
|
-
if (cached && cached.content === code)
|
|
102
|
-
return cached.result;
|
|
103
92
|
// Derive effective target: explicit option takes precedence, otherwise infer from Vite's ssr flag
|
|
104
93
|
const ssr = typeof viteOptions === 'object' && viteOptions !== null && 'ssr' in viteOptions
|
|
105
94
|
? viteOptions.ssr
|
|
106
95
|
: undefined;
|
|
107
96
|
const effectiveTarget = target !== null && target !== void 0 ? target : (ssr === false ? 'client' : ssr === true ? 'server' : undefined);
|
|
108
97
|
const result = (0, common_1.transformSourceFile)(id, code, registry, { development, target: effectiveTarget }, project);
|
|
109
|
-
if (!result.transformed)
|
|
110
|
-
transformCache.set(id, { content: code, result: null });
|
|
98
|
+
if (!result.transformed)
|
|
111
99
|
return null;
|
|
112
|
-
}
|
|
113
|
-
const out = { code: result.content, map: (_a = result.map) !== null && _a !== void 0 ? _a : null };
|
|
114
|
-
transformCache.set(id, { content: code, result: out });
|
|
115
100
|
console.log(`[ZeroComRollupPlugin] Transformed: ${path_1.default.relative(process.cwd(), id)}`);
|
|
116
|
-
return
|
|
101
|
+
return { code: result.content, map: (_a = result.map) !== null && _a !== void 0 ? _a : null };
|
|
117
102
|
},
|
|
118
103
|
renderChunk(code) {
|
|
119
104
|
if (development)
|