zuby 1.0.74 → 1.0.76
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/contexts/globalContext.d.ts +5 -0
- package/contexts/pageContext.d.ts +11 -0
- package/contexts/pageContext.js +15 -0
- package/package.json +1 -1
- package/plugins/contextPlugin/index.js +1 -0
- package/preload/index.js +4 -0
- package/server/index.js +15 -0
- package/server/zubyDevRenderer.d.ts +1 -1
- package/server/zubyDevRenderer.js +2 -1
- package/types.d.ts +28 -1
|
@@ -39,6 +39,11 @@ export interface GlobalContext {
|
|
|
39
39
|
* The build ID of the site.
|
|
40
40
|
*/
|
|
41
41
|
buildId: string;
|
|
42
|
+
/**
|
|
43
|
+
* The environment of the site.
|
|
44
|
+
* @example development
|
|
45
|
+
*/
|
|
46
|
+
environment?: 'development' | 'production' | string;
|
|
42
47
|
/**
|
|
43
48
|
* The internalization config from ZubyConfig.
|
|
44
49
|
* @example {
|
|
@@ -58,6 +58,17 @@ export declare class PageContext {
|
|
|
58
58
|
* Returns true if the current environment is browser.
|
|
59
59
|
*/
|
|
60
60
|
get isBrowserEnv(): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Returns true if app
|
|
63
|
+
* is running in production environment.
|
|
64
|
+
*/
|
|
65
|
+
get isProductionEnv(): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Returns the current environment
|
|
68
|
+
* where the app is running.
|
|
69
|
+
* @example development
|
|
70
|
+
*/
|
|
71
|
+
get environment(): string | undefined;
|
|
61
72
|
/**
|
|
62
73
|
* The value of 'site' property from the ZubyConfig.
|
|
63
74
|
* @example https://example.com
|
package/contexts/pageContext.js
CHANGED
|
@@ -85,6 +85,21 @@ export class PageContext {
|
|
|
85
85
|
get isBrowserEnv() {
|
|
86
86
|
return typeof window !== 'undefined';
|
|
87
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns true if app
|
|
90
|
+
* is running in production environment.
|
|
91
|
+
*/
|
|
92
|
+
get isProductionEnv() {
|
|
93
|
+
return this._globalContext.environment === 'production';
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Returns the current environment
|
|
97
|
+
* where the app is running.
|
|
98
|
+
* @example development
|
|
99
|
+
*/
|
|
100
|
+
get environment() {
|
|
101
|
+
return this._globalContext.environment;
|
|
102
|
+
}
|
|
88
103
|
/**
|
|
89
104
|
* The value of 'site' property from the ZubyConfig.
|
|
90
105
|
* @example https://example.com
|
package/package.json
CHANGED
|
@@ -36,6 +36,7 @@ export async function generateCompileTimeContextCode(ssr) {
|
|
|
36
36
|
generator: 'Zuby.js ${version}',
|
|
37
37
|
version: '${version}',
|
|
38
38
|
buildId: '${buildId}',
|
|
39
|
+
environment: '${process.env.NODE_ENV || 'development'}',
|
|
39
40
|
props: ${JSON.stringify(props)},
|
|
40
41
|
image: ${await generateImageCode()},
|
|
41
42
|
serverProps: ${JSON.stringify(ssr ? serverProps : {})},
|
package/preload/index.js
CHANGED
|
@@ -59,6 +59,10 @@ export function preloadPage(href, onHandle = () => { }) {
|
|
|
59
59
|
preload(href);
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
+
// Do nothing if app runs in development mode
|
|
63
|
+
if (context.environment === 'development') {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
62
66
|
window.requestIdleCallback(async () => {
|
|
63
67
|
const preloadManifest = await getPreloadManifest();
|
|
64
68
|
// Preload assets such as scripts and styles
|
package/server/index.js
CHANGED
|
@@ -1927,6 +1927,21 @@ var PageContext = class {
|
|
|
1927
1927
|
get isBrowserEnv() {
|
|
1928
1928
|
return typeof window !== "undefined";
|
|
1929
1929
|
}
|
|
1930
|
+
/**
|
|
1931
|
+
* Returns true if app
|
|
1932
|
+
* is running in production environment.
|
|
1933
|
+
*/
|
|
1934
|
+
get isProductionEnv() {
|
|
1935
|
+
return this._globalContext.environment === "production";
|
|
1936
|
+
}
|
|
1937
|
+
/**
|
|
1938
|
+
* Returns the current environment
|
|
1939
|
+
* where the app is running.
|
|
1940
|
+
* @example development
|
|
1941
|
+
*/
|
|
1942
|
+
get environment() {
|
|
1943
|
+
return this._globalContext.environment;
|
|
1944
|
+
}
|
|
1930
1945
|
/**
|
|
1931
1946
|
* The value of 'site' property from the ZubyConfig.
|
|
1932
1947
|
* @example https://example.com
|
|
@@ -12,6 +12,6 @@ export default class ZubyDevRenderer extends ZubyRenderer {
|
|
|
12
12
|
getJs(_templates: LazyTemplate[]): Promise<string[]>;
|
|
13
13
|
getTemplateMods(template: LazyTemplate): Set<ModuleNode>;
|
|
14
14
|
collectCss(mod: ModuleNode | undefined, cssUrls: Set<string>, visitedModules: Set<string>): void;
|
|
15
|
-
errorHtmlResponse(
|
|
15
|
+
errorHtmlResponse(error: any): Response;
|
|
16
16
|
errorJsonResponse(error: any): Response;
|
|
17
17
|
}
|
|
@@ -66,7 +66,8 @@ export default class ZubyDevRenderer extends ZubyRenderer {
|
|
|
66
66
|
this.collectCss(dep, cssUrls, visitedModules);
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
|
-
errorHtmlResponse(
|
|
69
|
+
errorHtmlResponse(error) {
|
|
70
|
+
console.error(`[Zuby.js] Internal Server Error:`, error.stack || error.toString());
|
|
70
71
|
return new Response(`<!DOCTYPE html>
|
|
71
72
|
<html>
|
|
72
73
|
<head>
|
package/types.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import type { UserConfig as ViteUserConfig, InlineConfig as ViteInlineConfig, PluginOption as VitePluginOption, Plugin as VitePlugin } from 'vite';
|
|
3
3
|
import { ZubyLogger } from './logger/types.js';
|
|
4
|
-
import ReadableStream = NodeJS.ReadableStream;
|
|
5
4
|
import { PathParamsType, Template, TemplateFile } from './templates/types.js';
|
|
6
5
|
import ZubyDevServer from './server/zubyDevServer.js';
|
|
7
6
|
import { GlobalContext } from './contexts/index.js';
|
|
7
|
+
import ReadableStream = NodeJS.ReadableStream;
|
|
8
|
+
import WritableStream = NodeJS.WritableStream;
|
|
8
9
|
export interface ZubyConfig {
|
|
9
10
|
/**
|
|
10
11
|
* The JSX provider which will be used to render the pages.
|
|
@@ -335,8 +336,34 @@ export interface JsxProvider {
|
|
|
335
336
|
errorTemplateFile: string;
|
|
336
337
|
loaderTemplateFile: string;
|
|
337
338
|
}
|
|
339
|
+
export interface PipeableStream {
|
|
340
|
+
abort: (reason?: unknown) => void;
|
|
341
|
+
pipe: <Writable extends WritableStream>(destination: Writable) => Writable;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Function that renders the passed JSX vnode to a string.
|
|
345
|
+
* NOTE: This follows the pattern of the `renderToString` from `react-dom/server`
|
|
346
|
+
* but unlike the original function, it should support waiting for Suspense and re-hydratation.
|
|
347
|
+
* See https://react.dev/reference/react-dom/server/renderToString
|
|
348
|
+
*/
|
|
338
349
|
export type RenderToString = (vnode: any) => Promise<string> | string;
|
|
350
|
+
/**
|
|
351
|
+
* Function that renders the passed JSX vnode to static Node.js stream.
|
|
352
|
+
* NOTE: This follows the pattern of the `renderToStaticNodeStream` from `react-dom/server` (deprecated from React 18.3.0).
|
|
353
|
+
* See https://react.dev/reference/react-dom/server/renderToStaticNodeStream
|
|
354
|
+
*/
|
|
339
355
|
export type RenderToStream = (vnode: any) => Promise<ReadableStream> | ReadableStream;
|
|
356
|
+
/**
|
|
357
|
+
* Function that renders the passed JSX vnode to a pipeable Node.js stream.
|
|
358
|
+
* NOTE: This follows the pattern of the `renderToPipeableStream` from `react-dom/server`.
|
|
359
|
+
* See https://react.dev/reference/react-dom/server/renderToPipeableStream
|
|
360
|
+
*/
|
|
361
|
+
export type RenderToPipeableStream = (vnode: any) => Promise<PipeableStream> | PipeableStream;
|
|
362
|
+
export type JsxRenderer = {
|
|
363
|
+
renderToString?: RenderToString;
|
|
364
|
+
renderToStream?: RenderToStream;
|
|
365
|
+
renderToPipeableStream?: RenderToPipeableStream;
|
|
366
|
+
};
|
|
340
367
|
/**
|
|
341
368
|
* Export this property with boolean value from page module
|
|
342
369
|
* to enable/disable the pre-rendering of the page.
|