Skip to content

Commit 13a81d3

Browse files
refactor: rename useUserContext to useEnvData (#901)
Co-authored-by: Adam Bradley <adamdbradley@users.noreply.github.com>
1 parent dc1e2ed commit 13a81d3

File tree

16 files changed

+82
-72
lines changed

16 files changed

+82
-72
lines changed

packages/qwik-city/buildtime/vite/dev-server.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import type { BuildContext } from '../types';
77
import type { EndpointModule } from '../../runtime/src/library/types';
88
import type { QwikViteDevResponse } from '../../../qwik/src/optimizer/src/plugins/vite';
99
import { loadUserResponse } from '../../middleware/request-handler/user-response';
10-
import { getQwikCityUserContext } from '../../middleware/request-handler/page-handler';
10+
import { getQwikCityEnvData } from '../../middleware/request-handler/page-handler';
1111
import { buildFromUrlPathname } from '../build';
1212
import { endpointHandler } from '../../middleware/request-handler/endpoint-handler';
1313
import { notFoundHandler } from '../../middleware/request-handler/error-handler';
@@ -71,17 +71,23 @@ export function configureDevServer(ctx: BuildContext, server: ViteDevServer) {
7171

7272
// qwik city vite plugin should handle dev ssr rendering
7373
// but add the qwik city user context to the response object
74-
const userContext = getQwikCityUserContext(userResponse);
74+
const envData = getQwikCityEnvData(userResponse);
7575
if (ctx.isDevServerClientOnly) {
7676
// because we stringify this content for the client only
7777
// dev server, there's some potential stringify issues
7878
// client only dev server will re-fetch anyways, so reset
79-
userContext.qwikcity.response.body = undefined;
79+
envData.qwikcity.response.body = undefined;
8080
}
8181

82-
(res as QwikViteDevResponse)._qwikUserCtx = {
83-
...(res as QwikViteDevResponse)._qwikUserCtx,
84-
...userContext,
82+
// TODO: removed after @deprecation period
83+
(res as any)._qwikUserCtx = {
84+
...(res as any)._qwikUserCtx,
85+
...envData,
86+
};
87+
88+
(res as QwikViteDevResponse)._qwikEnvData = {
89+
...(res as QwikViteDevResponse)._qwikEnvData,
90+
...envData,
8591
};
8692

8793
// update node response with status and headers

packages/qwik-city/middleware/request-handler/page-handler.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Render, RenderToStringResult } from '@builder.io/qwik/server';
2-
import type { QwikCityUserContext } from '../../runtime/src/library/types';
2+
import type { QwikCityEnvData } from '../../runtime/src/library/types';
33
import type { QwikCityRequestContext, QwikCityRequestOptions, UserResponseContext } from './types';
44

55
export function pageHandler<T = any>(
@@ -20,7 +20,7 @@ export function pageHandler<T = any>(
2020
const result = await render({
2121
stream,
2222
url: url.href,
23-
userContext: getQwikCityUserContext(userResponse),
23+
envData: getQwikCityEnvData(userResponse),
2424
...opts,
2525
});
2626
if ((typeof result as any as RenderToStringResult).html === 'string') {
@@ -29,10 +29,10 @@ export function pageHandler<T = any>(
2929
});
3030
}
3131

32-
export function getQwikCityUserContext(userResponseContext: UserResponseContext): {
33-
qwikcity: QwikCityUserContext;
32+
export function getQwikCityEnvData(userResponse: UserResponseContext): {
33+
qwikcity: QwikCityEnvData;
3434
} {
35-
const { url, params, pendingBody, resolvedBody, status } = userResponseContext;
35+
const { url, params, pendingBody, resolvedBody, status } = userResponse;
3636
return {
3737
qwikcity: {
3838
route: {

packages/qwik-city/runtime/src/library/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ export interface EndpointResponse {
290290

291291
export interface QwikCityRenderDocument extends Document {}
292292

293-
export interface QwikCityUserContext {
293+
export interface QwikCityEnvData {
294294
route: MutableRouteLocation;
295295
response: EndpointResponse;
296296
}

packages/qwik-city/runtime/src/library/use-functions.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
1-
import { noSerialize, useContext, useUserContext } from '@builder.io/qwik';
1+
import { noSerialize, useContext, useEnvData } from '@builder.io/qwik';
22
import {
33
ContentContext,
44
DocumentHeadContext,
55
RouteLocationContext,
66
RouteNavigateContext,
77
} from './contexts';
8-
import type {
9-
RouteLocation,
10-
ResolvedDocumentHead,
11-
RouteNavigate,
12-
QwikCityUserContext,
13-
} from './types';
8+
import type { RouteLocation, ResolvedDocumentHead, RouteNavigate, QwikCityEnvData } from './types';
149

1510
/**
1611
* @public
@@ -34,5 +29,5 @@ export const useLocation = (): RouteLocation => useContext(RouteLocationContext)
3429
export const useNavigate = (): RouteNavigate => useContext(RouteNavigateContext);
3530

3631
export const useQwikCityContext = () => {
37-
return noSerialize(useUserContext<QwikCityUserContext>('qwikcity'));
32+
return noSerialize(useEnvData<QwikCityEnvData>('qwikcity'));
3833
};

packages/qwik/src/core/api.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ export interface RenderOptions {
397397
// (undocumented)
398398
allowRerender?: boolean;
399399
// (undocumented)
400-
userContext?: Record<string, any>;
400+
envData?: Record<string, any>;
401401
}
402402

403403
// Warning: (ae-forgotten-export) The symbol "RenderSSROptions" needs to be exported by the entry point index.d.ts
@@ -572,6 +572,12 @@ export interface UseEffectOptions {
572572
eagerness?: EagernessOptions;
573573
}
574574

575+
// @alpha (undocumented)
576+
export function useEnvData<T>(key: string): T | undefined;
577+
578+
// @alpha (undocumented)
579+
export function useEnvData<T, B = T>(key: string, defaultValue: B): T | B;
580+
575581
// @public
576582
export const useHostElement: () => Element;
577583

@@ -639,11 +645,8 @@ export const useStylesScoped$: (first: string) => void;
639645
// @alpha (undocumented)
640646
export const useStylesScopedQrl: (styles: QRL<string>) => void;
641647

642-
// @alpha (undocumented)
643-
export function useUserContext<T>(key: string): T | undefined;
644-
645-
// @alpha (undocumented)
646-
export function useUserContext<T, B = T>(key: string, defaultValue: B): T | B;
648+
// @alpha @deprecated (undocumented)
649+
export const useUserContext: typeof useEnvData;
647650

648651
// Warning: (ae-forgotten-export) The symbol "UseWatchOptions" needs to be exported by the entry point index.d.ts
649652
// Warning: (ae-incompatible-release-tags) The symbol "useWatch$" is marked as @public, but its signature references "WatchFn" which is marked as @alpha

packages/qwik/src/core/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export { useDocument } from './use/use-document.public';
8181
export { useLexicalScope } from './use/use-lexical-scope.public';
8282
export { useStore, useRef } from './use/use-store.public';
8383
export { useContext, useContextProvider, createContext } from './use/use-context';
84-
export { useUserContext } from './use/use-user-context';
84+
export { useEnvData, useUserContext } from './use/use-env-data';
8585
export { useStylesQrl, useStyles$, useStylesScopedQrl, useStylesScoped$ } from './use/use-styles';
8686
export { useOn, useOnDocument, useOnWindow, useCleanupQrl, useCleanup$ } from './use/use-on';
8787
export type { Context } from './use/use-context';

packages/qwik/src/core/render/container.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export interface ContainerState {
4242
$hostsRendering$: Set<Element> | undefined;
4343
$renderPromise$: Promise<RenderContext> | undefined;
4444

45-
$userContext$: Record<string, any>;
45+
$envData$: Record<string, any>;
4646
$elementIndex$: number;
4747

4848
$styleIds$: Set<string>;
@@ -68,7 +68,7 @@ export const getContainerState = (containerEl: Element): ContainerState => {
6868
$renderPromise$: undefined,
6969
$hostsRendering$: undefined,
7070

71-
$userContext$: {},
71+
$envData$: {},
7272
$elementIndex$: 0,
7373

7474
$styleIds$: new Set(),

packages/qwik/src/core/render/dom/render.public.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { BASE_QWIK_STYLES, createRenderContext } from '../execute-component';
2121
*/
2222
export interface RenderOptions {
2323
allowRerender?: boolean;
24-
userContext?: Record<string, any>;
24+
envData?: Record<string, any>;
2525
}
2626

2727
/**
@@ -53,9 +53,9 @@ export const render = async (
5353
injectQContainer(containerEl);
5454

5555
const containerState = getContainerState(containerEl);
56-
const userContext = opts?.userContext;
57-
if (userContext) {
58-
Object.assign(containerState.$userContext$, userContext);
56+
const envData = opts?.envData;
57+
if (envData) {
58+
Object.assign(containerState.$envData$, envData);
5959
}
6060
containerState.$hostsRendering$ = new Set();
6161
containerState.$renderPromise$ = renderRoot(parent, jsxNode, doc, containerState, containerEl);

packages/qwik/src/core/render/ssr/render-ssr.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export interface RenderSSROptions {
5656
fragmentTagName?: string;
5757
stream: StreamWriter;
5858
base?: string;
59-
userContext?: Record<string, any>;
59+
envData?: Record<string, any>;
6060
url?: string;
6161
beforeContent?: JSXNode[];
6262
beforeClose?: (contexts: QContext[], containerState: ContainerState) => Promise<JSXNode>;
@@ -93,10 +93,10 @@ export const renderSSR = async (doc: Document, node: JSXNode, opts: RenderSSROpt
9393
containerAttributes['q:base'] = opts.base;
9494
}
9595
if (opts.url) {
96-
containerState.$userContext$['url'] = opts.url;
96+
containerState.$envData$['url'] = opts.url;
9797
}
98-
if (opts.userContext) {
99-
Object.assign(containerState.$userContext$, opts.userContext);
98+
if (opts.envData) {
99+
Object.assign(containerState.$envData$, opts.envData);
100100
}
101101

102102
if (opts.fragmentTagName) {
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { useInvokeContext } from './use-core';
2+
3+
/**
4+
* @alpha
5+
*/
6+
export function useEnvData<T>(key: string): T | undefined;
7+
8+
/**
9+
* @alpha
10+
*/
11+
export function useEnvData<T, B = T>(key: string, defaultValue: B): T | B;
12+
13+
/**
14+
* @alpha
15+
*/
16+
export function useEnvData(key: string, defaultValue?: any) {
17+
const ctx = useInvokeContext();
18+
return ctx.$renderCtx$.$containerState$.$envData$[key] ?? defaultValue;
19+
}
20+
21+
/**
22+
* @alpha
23+
* @deprecated Please use `useEnvData` instead.
24+
*/
25+
export const useUserContext = useEnvData;

0 commit comments

Comments
 (0)