Skip to content

Commit edfb958

Browse files
committed
feat(core): getClientManifest()
Part of the effort to make external qwik libraries independent from the build process
1 parent b798a4c commit edfb958

15 files changed

Lines changed: 80 additions & 11 deletions

File tree

.changeset/modern-emus-share.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@qwik.dev/core': minor
3+
---
4+
5+
FEAT: `getClientManifest()` is now the way to get the client build manifest. Importing from `@qwik-client-manifest` is deprecated.

packages/docs/src/routes/api/qwik/api.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,20 @@
731731
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/shared/jsx/types/jsx-node.ts",
732732
"mdFile": "core.functioncomponent.md"
733733
},
734+
{
735+
"name": "getClientManifest",
736+
"id": "getclientmanifest",
737+
"hierarchy": [
738+
{
739+
"name": "getClientManifest",
740+
"id": "getclientmanifest"
741+
}
742+
],
743+
"kind": "Function",
744+
"content": "Returns the client build manifest, which includes the mappings from symbols to bundles, the bundlegraph etc.\n\n\n```typescript\ngetClientManifest: () => ServerQwikManifest\n```\n**Returns:**\n\nServerQwikManifest",
745+
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/shared/get-client-manifest.ts",
746+
"mdFile": "core.getclientmanifest.md"
747+
},
734748
{
735749
"name": "getDomContainer",
736750
"id": "getdomcontainer",

packages/docs/src/routes/api/qwik/index.mdx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1655,6 +1655,20 @@ export type FunctionComponent<P = unknown> = {
16551655
16561656
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/shared/jsx/types/jsx-node.ts)
16571657
1658+
## getClientManifest
1659+
1660+
Returns the client build manifest, which includes the mappings from symbols to bundles, the bundlegraph etc.
1661+
1662+
```typescript
1663+
getClientManifest: () => ServerQwikManifest;
1664+
```
1665+
1666+
**Returns:**
1667+
1668+
ServerQwikManifest
1669+
1670+
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/shared/get-client-manifest.ts)
1671+
16581672
## getDomContainer
16591673
16601674
```typescript

packages/insights/tsconfig.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
"noEmit": true,
2020
"types": ["node", "vite/client"],
2121
"paths": {
22-
"~/*": ["./src/*"],
23-
"@qwik-client-manifest": ["../../qwik/src/server/server-modules.d.ts"]
22+
"~/*": ["./src/*"]
2423
}
2524
},
2625
"exclude": ["./dist", "eslint.config.mjs"]

packages/qwik-router/src/buildtime/vite/plugin.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ import { validatePlugin } from './validate-plugin';
2424
import { getRouterIndexTags, makeRouterDevMiddleware } from './dev-middleware';
2525

2626
export const QWIK_ROUTER_CONFIG_ID = '@qwik-router-config';
27+
/**
28+
* This virtual module is used to generate dynamic entries for user route files, which are added as
29+
* dynamic imports to the qwik-router-config as a way to create new entry points for the build.
30+
*/
2731
const QWIK_ROUTER_ENTRIES_ID = '@qwik-router-entries';
2832
const QWIK_ROUTER = '@qwik.dev/router';
2933
const QWIK_ROUTER_SW_REGISTER = '@qwik-router-sw-register';

packages/qwik/src/core/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export { getPlatform, setPlatform } from './shared/platform/platform';
5858
export type { CorePlatform } from './shared/platform/types';
5959
export type { ClientContainer } from './client/types';
6060
export type { DomContainer } from './client/dom-container';
61+
export { getClientManifest } from './shared/get-client-manifest';
6162

6263
//////////////////////////////////////////////////////////////////////////////////////////
6364
// JSX Runtime

packages/qwik/src/core/qwik.core.api.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import * as CSS_2 from 'csstype';
88
import { isBrowser } from '@qwik.dev/core/build';
99
import { isDev } from '@qwik.dev/core/build';
1010
import { isServer } from '@qwik.dev/core/build';
11+
import type { ServerQwikManifest } from '@qwik.dev/core/optimizer';
1112

1213
// @public
1314
export const $: <T>(expression: T) => QRL<T>;
@@ -398,6 +399,9 @@ export type FunctionComponent<P = unknown> = {
398399
renderFn(props: P, key: string | null, flags: number, dev?: DevJSX): JSXOutput;
399400
}['renderFn'];
400401

402+
// @public
403+
export const getClientManifest: () => ServerQwikManifest;
404+
401405
// Warning: (ae-forgotten-export) The symbol "PropsProxy" needs to be exported by the entry point index.d.ts
402406
//
403407
// @internal
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { manifest } from '@qwik-client-manifest';
2+
import type { ServerQwikManifest } from '@qwik.dev/core/optimizer';
3+
4+
/**
5+
* Returns the client build manifest, which includes the mappings from symbols to bundles, the
6+
* bundlegraph etc.
7+
*
8+
* @public
9+
*/
10+
export const getClientManifest = (): ServerQwikManifest => manifest;

packages/qwik/src/optimizer/src/plugins/plugin.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,11 @@ export function createQwikPlugin(optimizerOptions: OptimizerOptions = {}) {
539539
};
540540
}
541541
} else if (pathId.endsWith(QWIK_CLIENT_MANIFEST_ID)) {
542+
if (!importerId || !importerId.includes('core')) {
543+
console.error(
544+
`${importerId}: importing ${QWIK_CLIENT_MANIFEST_ID} is deprecated. Use \`getClientManifest()\` instead.`
545+
);
546+
}
542547
debug(`resolveId(${count})`, 'Resolved', QWIK_CLIENT_MANIFEST_ID);
543548
result = {
544549
id: QWIK_CLIENT_MANIFEST_ID,
@@ -1207,10 +1212,11 @@ export const QWIK_JSX_DEV_RUNTIME_ID = '@qwik.dev/core/jsx-dev-runtime';
12071212

12081213
export const QWIK_CORE_SERVER = '@qwik.dev/core/server';
12091214

1215+
/** Internal use only - use `getClientManifest()` instead */
12101216
export const QWIK_CLIENT_MANIFEST_ID = '@qwik-client-manifest';
12111217

12121218
export const QWIK_PRELOADER_ID = '@qwik.dev/core/preloader';
1213-
1219+
/** @internal virtual import to ensure the _run etc handlers are exported as-is */
12141220
export const QWIK_HANDLERS_ID = '@qwik-handlers';
12151221

12161222
export const SRC_DIR_DEFAULT = 'src';

packages/qwik/src/optimizer/src/plugins/plugin.unit.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ describe('resolveId', () => {
296296
'id',
297297
'@qwik.dev/core/build'
298298
);
299-
expect(await plugin.resolveId(null!, '@qwik-client-manifest', '/foo/bar')).toHaveProperty(
299+
expect(await plugin.resolveId(null!, '@qwik-client-manifest', '/foo/bar/core')).toHaveProperty(
300300
'id',
301301
'@qwik-client-manifest'
302302
);

0 commit comments

Comments
 (0)