@quilted/quilt 0.8.5 → 0.8.7

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.
@@ -1,8 +1,10 @@
1
1
  import type { RenderableProps, VNode } from 'preact';
2
2
  import { type BrowserDetails } from '@quilted/preact-browser/server';
3
+ import { type BrowserAssets } from '@quilted/assets';
3
4
  interface Props {
4
5
  browser?: BrowserDetails;
6
+ assets?: BrowserAssets;
5
7
  }
6
- export declare function ServerContext({ browser, children }: RenderableProps<Props>): VNode<{}>;
8
+ export declare function ServerContext({ browser, assets, children, }: RenderableProps<Props>): VNode<{}>;
7
9
  export {};
8
10
  //# sourceMappingURL=ServerContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServerContext.d.ts","sourceRoot":"","sources":["../../../source/server/ServerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAE,KAAK,EAAC,MAAM,QAAQ,CAAC;AAEnD,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAExC,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAC,EAAE,eAAe,CAAC,KAAK,CAAC,GASjD,KAAK,CAAC,EAAE,CAAC,CAChC"}
1
+ {"version":3,"file":"ServerContext.d.ts","sourceRoot":"","sources":["../../../source/server/ServerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAE,KAAK,EAAC,MAAM,QAAQ,CAAC;AAEnD,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAEnD,UAAU,KAAK;IACb,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE,eAAe,CAAC,KAAK,CAAC,GAiBF,KAAK,CAAC,EAAE,CAAC,CAC/B"}
@@ -1,10 +1,7 @@
1
1
  import { type VNode } from 'preact';
2
2
  import { type BrowserAssets } from '@quilted/assets';
3
- import { BrowserDetails, BrowserResponse } from '@quilted/preact-browser/server';
3
+ import { BrowserResponse } from '@quilted/preact-browser/server';
4
4
  import { EnhancedResponse } from '@quilted/request-router';
5
- export declare function renderToStringWithServerContext(element: VNode<any>, { browser }?: {
6
- browser?: BrowserDetails;
7
- }): Promise<string>;
8
5
  export interface RenderHTMLFunction {
9
6
  (content: ReadableStream<string>, context: {
10
7
  readonly response: BrowserResponse;
@@ -1 +1 @@
1
- {"version":3,"file":"request-router.d.ts","sourceRoot":"","sources":["../../../source/server/request-router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,KAAK,EAAW,MAAM,QAAQ,CAAC;AAM5D,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,eAAe,EAKhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAe,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAIvE,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EACnB,EAAC,OAAO,EAAC,GAAE;IAAC,OAAO,CAAC,EAAE,cAAc,CAAA;CAAM,mBAO3C;AAED,MAAM,WAAW,kBAAkB;IACjC,CACE,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE;QACP,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;KACpC,GACA,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,kBAAkB,CAAC;IAC7E,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACzC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC7B,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"request-router.d.ts","sourceRoot":"","sources":["../../../source/server/request-router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,KAAK,EAAC,MAAM,QAAQ,CAAC;AAMlD,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAKL,eAAe,EAMhB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAe,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAIvE,MAAM,WAAW,kBAAkB;IACjC,CACE,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE;QACP,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;KACpC,GACA,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,kBAAkB,CAAC;IAC7E,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACzC;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EACnB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC7B,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAC"}
@@ -7,4 +7,6 @@ declare function noopCreateRequestRouterLocalization(): void;
7
7
  export { noopCreateRequestRouterLocalization as createRequestRouterLocalization };
8
8
  declare function noopRenderToResponse(): void;
9
9
  export { noopRenderToResponse as renderToResponse };
10
+ declare function NoopServerContext(): null;
11
+ export { NoopServerContext as ServerContext };
10
12
  //# sourceMappingURL=server.browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.browser.d.ts","sourceRoot":"","sources":["../../source/server.browser.ts"],"names":[],"mappings":"AAAA,iBAAS,kBAAkB,SAAK;AAEhC,OAAO,EACL,kBAAkB,IAAI,cAAc,EACpC,kBAAkB,IAAI,mBAAmB,EACzC,kBAAkB,IAAI,oBAAoB,GAC3C,CAAC;AACF,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAC,yBAAyB,EAAC,MAAM,0BAA0B,CAAC;AAEnE,iBAAS,mCAAmC,SAAK;AACjD,OAAO,EAAC,mCAAmC,IAAI,+BAA+B,EAAC,CAAC;AAEhF,iBAAS,oBAAoB,SAAK;AAClC,OAAO,EAAC,oBAAoB,IAAI,gBAAgB,EAAC,CAAC"}
1
+ {"version":3,"file":"server.browser.d.ts","sourceRoot":"","sources":["../../source/server.browser.ts"],"names":[],"mappings":"AAAA,iBAAS,kBAAkB,SAAK;AAEhC,OAAO,EACL,kBAAkB,IAAI,cAAc,EACpC,kBAAkB,IAAI,mBAAmB,EACzC,kBAAkB,IAAI,oBAAoB,GAC3C,CAAC;AACF,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAC,yBAAyB,EAAC,MAAM,0BAA0B,CAAC;AAEnE,iBAAS,mCAAmC,SAAK;AACjD,OAAO,EAAC,mCAAmC,IAAI,+BAA+B,EAAC,CAAC;AAEhF,iBAAS,oBAAoB,SAAK;AAClC,OAAO,EAAC,oBAAoB,IAAI,gBAAgB,EAAC,CAAC;AAElD,iBAAS,iBAAiB,SAEzB;AACD,OAAO,EAAC,iBAAiB,IAAI,aAAa,EAAC,CAAC"}
@@ -3,5 +3,6 @@ export * from '@quilted/preact-browser/server';
3
3
  export * from '@quilted/assets';
4
4
  export { parseAcceptLanguageHeader } from '@quilted/preact-localize';
5
5
  export { createRequestRouterLocalization } from '@quilted/preact-localize/request-router';
6
- export { renderToResponse, renderToStringWithServerContext, type RenderToResponseOptions, type RenderHTMLFunction, } from './server/request-router.tsx';
6
+ export { renderToResponse, type RenderToResponseOptions, type RenderHTMLFunction, } from './server/request-router.tsx';
7
+ export { ServerContext } from './server/ServerContext.tsx';
7
8
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../source/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAC,yBAAyB,EAAC,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAC,+BAA+B,EAAC,MAAM,yCAAyC,CAAC;AAExF,OAAO,EACL,gBAAgB,EAChB,+BAA+B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../source/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAC,yBAAyB,EAAC,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAC,+BAA+B,EAAC,MAAM,yCAAyC,CAAC;AAExF,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@quilted/quilt",
3
3
  "type": "module",
4
- "version": "0.8.5",
4
+ "version": "0.8.7",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/lemonmade/quilt.git",
@@ -242,14 +242,14 @@
242
242
  ],
243
243
  "dependencies": {
244
244
  "@quilted/assets": "^0.1.5",
245
- "@quilted/async": "^0.4.2",
245
+ "@quilted/async": "^0.4.22",
246
246
  "@quilted/events": "^2.1.1",
247
- "@quilted/graphql": "^3.3.5",
247
+ "@quilted/graphql": "^3.3.8",
248
248
  "@quilted/preact-async": "^0.1.2",
249
- "@quilted/preact-browser": "^0.1.9",
249
+ "@quilted/preact-browser": "^0.1.11",
250
250
  "@quilted/preact-context": "^0.1.2",
251
251
  "@quilted/preact-graphql": "^0.1.0",
252
- "@quilted/preact-localize": "^0.3.0",
252
+ "@quilted/preact-localize": "^0.3.4",
253
253
  "@quilted/preact-performance": "^0.1.0",
254
254
  "@quilted/preact-router": "^0.2.10",
255
255
  "@quilted/preact-signals": "^0.1.0",
@@ -2,14 +2,22 @@ import type {RenderableProps, VNode} from 'preact';
2
2
 
3
3
  import {
4
4
  BrowserDetailsContext,
5
+ BrowserAssetsManifestContext,
5
6
  type BrowserDetails,
6
7
  } from '@quilted/preact-browser/server';
7
8
 
9
+ import {type BrowserAssets} from '@quilted/assets';
10
+
8
11
  interface Props {
9
12
  browser?: BrowserDetails;
13
+ assets?: BrowserAssets;
10
14
  }
11
15
 
12
- export function ServerContext({browser, children}: RenderableProps<Props>) {
16
+ export function ServerContext({
17
+ browser,
18
+ assets,
19
+ children,
20
+ }: RenderableProps<Props>) {
13
21
  const withBrowser = browser ? (
14
22
  <BrowserDetailsContext.Provider value={browser}>
15
23
  {children}
@@ -18,5 +26,13 @@ export function ServerContext({browser, children}: RenderableProps<Props>) {
18
26
  children
19
27
  );
20
28
 
21
- return withBrowser as VNode<{}>;
29
+ const withAssets = assets ? (
30
+ <BrowserAssetsManifestContext.Provider value={assets}>
31
+ {withBrowser}
32
+ </BrowserAssetsManifestContext.Provider>
33
+ ) : (
34
+ withBrowser
35
+ );
36
+
37
+ return withAssets as VNode<{}>;
22
38
  }
@@ -1,4 +1,4 @@
1
- import {isValidElement, type VNode, type JSX} from 'preact';
1
+ import {isValidElement, type VNode} from 'preact';
2
2
  import {
3
3
  renderToStaticMarkup,
4
4
  renderToStringAsync,
@@ -11,29 +11,22 @@ import {
11
11
  type BrowserAssetsEntry,
12
12
  } from '@quilted/assets';
13
13
  import {
14
- BrowserDetails,
14
+ Title,
15
+ Link,
16
+ Meta,
17
+ Serialization,
15
18
  BrowserResponse,
16
19
  ScriptAsset,
17
20
  ScriptAssetPreload,
18
21
  StyleAsset,
19
22
  StyleAssetPreload,
23
+ BrowserEffectsAreActiveContext,
20
24
  } from '@quilted/preact-browser/server';
21
25
 
22
26
  import {HTMLResponse, EnhancedResponse} from '@quilted/request-router';
23
27
 
24
28
  import {ServerContext} from './ServerContext.tsx';
25
29
 
26
- export async function renderToStringWithServerContext(
27
- element: VNode<any>,
28
- {browser}: {browser?: BrowserDetails} = {},
29
- ) {
30
- const rendered = await renderToStringAsync(
31
- <ServerContext browser={browser}>{element}</ServerContext>,
32
- );
33
-
34
- return rendered;
35
- }
36
-
37
30
  export interface RenderHTMLFunction {
38
31
  (
39
32
  content: ReadableStream<string>,
@@ -101,9 +94,11 @@ export async function renderToResponse(
101
94
  let rendered: string;
102
95
 
103
96
  try {
104
- rendered = await renderToStringWithServerContext(element, {
105
- browser: browserResponse,
106
- });
97
+ rendered = await renderToStringAsync(
98
+ <ServerContext assets={assets} browser={browserResponse}>
99
+ {element}
100
+ </ServerContext>,
101
+ );
107
102
  } catch (error) {
108
103
  if (error instanceof Response) {
109
104
  const mergedHeaders = new Headers(browserResponse.headers);
@@ -149,9 +144,11 @@ export async function renderToResponse(
149
144
  // this, they will explicitly turn on streaming and will have to use some in-app
150
145
  // to manually handle redirects (e.g., by rendering a script tag that uses JavaScript
151
146
  // to redirect)
152
- const rendered = await renderToStringWithServerContext(element, {
153
- browser: browserResponse,
154
- });
147
+ const rendered = await renderToStringAsync(
148
+ <ServerContext assets={assets} browser={browserResponse}>
149
+ {element}
150
+ </ServerContext>,
151
+ );
155
152
 
156
153
  appWriter.write(rendered);
157
154
  }
@@ -218,55 +215,54 @@ export async function renderToResponse(
218
215
  }
219
216
 
220
217
  const htmlContent = renderToStaticMarkup(
221
- <html {...browserResponse.htmlAttributes.value}>
222
- <head>
223
- {browserResponse.title.value && (
224
- <title>{browserResponse.title.value}</title>
225
- )}
226
- {browserResponse.links.value.map((link) => (
227
- <link {...(link as JSX.HTMLAttributes<HTMLLinkElement>)} />
228
- ))}
229
- {browserResponse.metas.value.map((meta) => (
230
- <meta {...(meta as JSX.HTMLAttributes<HTMLMetaElement>)} />
231
- ))}
232
- {browserResponse.serializations.value.map(({name, content}) => (
233
- // @ts-expect-error a custom element that I don’t want to define,
234
- // since it’s an optional part of the browser library.
235
- <browser-serialization
236
- name={name}
237
- content={JSON.stringify(content)}
238
- />
239
- ))}
240
- {synchronousAssets?.scripts.map((script) => (
241
- <ScriptAsset
242
- key={script.source}
243
- asset={script}
244
- baseURL={baseURL}
245
- />
246
- ))}
247
- {synchronousAssets?.styles.map((style) => (
248
- <StyleAsset key={style.source} asset={style} baseURL={baseURL} />
249
- ))}
250
- {preloadAssets?.styles.map((style) => (
251
- <StyleAssetPreload
252
- key={style.source}
253
- asset={style}
254
- baseURL={baseURL}
255
- />
256
- ))}
257
- {preloadAssets?.scripts.map((script) => (
258
- <ScriptAssetPreload
259
- key={script.source}
260
- asset={script}
261
- baseURL={baseURL}
262
- />
263
- ))}
264
- </head>
265
- <body
266
- {...browserResponse.bodyAttributes.value}
267
- dangerouslySetInnerHTML={{__html: '%%CONTENT%%'}}
268
- ></body>
269
- </html>,
218
+ <BrowserEffectsAreActiveContext.Provider value={false}>
219
+ <html {...browserResponse.htmlAttributes.value}>
220
+ <head>
221
+ <Title>{browserResponse.title.value}</Title>
222
+ {browserResponse.links.value.map((link) => (
223
+ <Link {...link} />
224
+ ))}
225
+ {browserResponse.metas.value.map((meta) => (
226
+ <Meta {...meta} />
227
+ ))}
228
+ {browserResponse.serializations.value.map(({name, content}) => (
229
+ <Serialization name={name} content={content} />
230
+ ))}
231
+ {synchronousAssets?.scripts.map((script) => (
232
+ <ScriptAsset
233
+ key={script.source}
234
+ asset={script}
235
+ baseURL={baseURL}
236
+ />
237
+ ))}
238
+ {synchronousAssets?.styles.map((style) => (
239
+ <StyleAsset
240
+ key={style.source}
241
+ asset={style}
242
+ baseURL={baseURL}
243
+ />
244
+ ))}
245
+ {preloadAssets?.styles.map((style) => (
246
+ <StyleAssetPreload
247
+ key={style.source}
248
+ asset={style}
249
+ baseURL={baseURL}
250
+ />
251
+ ))}
252
+ {preloadAssets?.scripts.map((script) => (
253
+ <ScriptAssetPreload
254
+ key={script.source}
255
+ asset={script}
256
+ baseURL={baseURL}
257
+ />
258
+ ))}
259
+ </head>
260
+ <body
261
+ {...browserResponse.bodyAttributes.value}
262
+ dangerouslySetInnerHTML={{__html: '%%CONTENT%%'}}
263
+ ></body>
264
+ </html>
265
+ </BrowserEffectsAreActiveContext.Provider>,
270
266
  );
271
267
 
272
268
  const [firstChunk, secondChunk] = htmlContent.split('%%CONTENT%%');
@@ -15,3 +15,8 @@ export {noopCreateRequestRouterLocalization as createRequestRouterLocalization};
15
15
 
16
16
  function noopRenderToResponse() {}
17
17
  export {noopRenderToResponse as renderToResponse};
18
+
19
+ function NoopServerContext() {
20
+ return null;
21
+ }
22
+ export {NoopServerContext as ServerContext};
package/source/server.ts CHANGED
@@ -11,7 +11,7 @@ export {createRequestRouterLocalization} from '@quilted/preact-localize/request-
11
11
 
12
12
  export {
13
13
  renderToResponse,
14
- renderToStringWithServerContext,
15
14
  type RenderToResponseOptions,
16
15
  type RenderHTMLFunction,
17
16
  } from './server/request-router.tsx';
17
+ export {ServerContext} from './server/ServerContext.tsx';