vike 0.4.179 → 0.4.180

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.
Files changed (52) hide show
  1. package/dist/cjs/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -0
  2. package/dist/cjs/node/runtime/html/injectAssets/getHtmlTags.js +46 -15
  3. package/dist/cjs/node/runtime/html/injectAssets/injectHtmlTags.js +3 -2
  4. package/dist/cjs/node/runtime/html/injectAssets.js +18 -3
  5. package/dist/cjs/node/runtime/html/renderHtml.js +12 -11
  6. package/dist/cjs/node/runtime/html/serializePageContextClientSide.js +14 -4
  7. package/dist/cjs/node/runtime/html/stream.js +12 -5
  8. package/dist/cjs/node/runtime/renderPage/executeOnRenderHtmlHook.js +1 -1
  9. package/dist/cjs/node/runtime/renderPage.js +14 -13
  10. package/dist/cjs/node/runtime/utils.js +1 -0
  11. package/dist/cjs/shared/page-configs/serialize/serializeConfigValues.js +4 -0
  12. package/dist/cjs/shared/route/index.js +4 -6
  13. package/dist/cjs/utils/augmentType.js +10 -0
  14. package/dist/cjs/utils/getPropAccessNotation.js +4 -1
  15. package/dist/cjs/utils/objectAssign.js +2 -0
  16. package/dist/cjs/utils/projectInfo.js +1 -1
  17. package/dist/esm/client/client-routing-runtime/createPageContext.d.ts +1 -0
  18. package/dist/esm/client/client-routing-runtime/createPageContext.js +2 -1
  19. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.d.ts +5 -3
  20. package/dist/esm/client/client-routing-runtime/getPageContextFromHooks.js +22 -27
  21. package/dist/esm/client/client-routing-runtime/renderPageClientSide.js +6 -12
  22. package/dist/esm/client/client-routing-runtime/utils.d.ts +1 -0
  23. package/dist/esm/client/client-routing-runtime/utils.js +1 -0
  24. package/dist/esm/client/shared/getPageContextProxyForUser.js +1 -1
  25. package/dist/esm/node/plugin/plugins/importUserCode/v1-design/getVikeConfig/configDefinitionsBuiltIn.js +3 -0
  26. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.d.ts +3 -2
  27. package/dist/esm/node/runtime/html/injectAssets/getHtmlTags.js +46 -15
  28. package/dist/esm/node/runtime/html/injectAssets/injectHtmlTags.d.ts +3 -1
  29. package/dist/esm/node/runtime/html/injectAssets/injectHtmlTags.js +2 -1
  30. package/dist/esm/node/runtime/html/injectAssets.d.ts +1 -0
  31. package/dist/esm/node/runtime/html/injectAssets.js +19 -4
  32. package/dist/esm/node/runtime/html/renderHtml.js +12 -11
  33. package/dist/esm/node/runtime/html/serializePageContextClientSide.js +15 -5
  34. package/dist/esm/node/runtime/html/stream.d.ts +2 -1
  35. package/dist/esm/node/runtime/html/stream.js +12 -5
  36. package/dist/esm/node/runtime/renderPage/executeOnRenderHtmlHook.js +1 -1
  37. package/dist/esm/node/runtime/renderPage.js +14 -13
  38. package/dist/esm/node/runtime/utils.d.ts +1 -0
  39. package/dist/esm/node/runtime/utils.js +1 -0
  40. package/dist/esm/shared/page-configs/Config.d.ts +5 -0
  41. package/dist/esm/shared/page-configs/serialize/serializeConfigValues.js +4 -0
  42. package/dist/esm/shared/route/index.d.ts +1 -1
  43. package/dist/esm/shared/route/index.js +4 -6
  44. package/dist/esm/shared/types.d.ts +1 -1
  45. package/dist/esm/utils/augmentType.d.ts +3 -0
  46. package/dist/esm/utils/augmentType.js +7 -0
  47. package/dist/esm/utils/getPropAccessNotation.js +4 -1
  48. package/dist/esm/utils/objectAssign.d.ts +1 -1
  49. package/dist/esm/utils/objectAssign.js +2 -0
  50. package/dist/esm/utils/projectInfo.d.ts +2 -2
  51. package/dist/esm/utils/projectInfo.js +1 -1
  52. package/package.json +4 -4
@@ -241,8 +241,7 @@ function logHttpResponse(urlOriginal, httpRequestId, pageContextReturn) {
241
241
  logRuntimeInfo?.(msg, httpRequestId, isNominal ? 'info' : 'error');
242
242
  }
243
243
  function getPageContextHttpResponseNullWithError(err, pageContextInit) {
244
- const pageContextHttpResponseNull = {};
245
- objectAssign(pageContextHttpResponseNull, pageContextInit);
244
+ const pageContextHttpResponseNull = createPageContext(pageContextInit);
246
245
  objectAssign(pageContextHttpResponseNull, {
247
246
  httpResponse: null,
248
247
  errorWhileRendering: err
@@ -250,14 +249,20 @@ function getPageContextHttpResponseNullWithError(err, pageContextInit) {
250
249
  return pageContextHttpResponseNull;
251
250
  }
252
251
  function getPageContextHttpResponseNull(pageContextInit) {
253
- const pageContextHttpResponseNull = {};
254
- objectAssign(pageContextHttpResponseNull, pageContextInit);
252
+ const pageContextHttpResponseNull = createPageContext(pageContextInit);
255
253
  objectAssign(pageContextHttpResponseNull, {
256
254
  httpResponse: null,
257
255
  errorWhileRendering: null
258
256
  });
259
257
  return pageContextHttpResponseNull;
260
258
  }
259
+ function createPageContext(pageContextInit) {
260
+ const pageContext = {
261
+ _isPageContextObject: true
262
+ };
263
+ Object.assign(pageContext, pageContextInit);
264
+ return pageContext;
265
+ }
261
266
  async function renderPageNominal(pageContext) {
262
267
  objectAssign(pageContext, { errorWhileRendering: null });
263
268
  // Route
@@ -341,8 +346,7 @@ function normalizeUrl(pageContextInit, httpRequestId) {
341
346
  return null;
342
347
  logRuntimeInfo?.(`URL normalized from ${pc.cyan(urlOriginal)} to ${pc.cyan(urlNormalized)} (https://vike.dev/url-normalization)`, httpRequestId, 'info');
343
348
  const httpResponse = createHttpResponseObjectRedirect({ url: urlNormalized, statusCode: 301 }, pageContextInit.urlOriginal);
344
- const pageContextHttpResponse = {};
345
- objectAssign(pageContextHttpResponse, pageContextInit);
349
+ const pageContextHttpResponse = createPageContext(pageContextInit);
346
350
  objectAssign(pageContextHttpResponse, { httpResponse });
347
351
  return pageContextHttpResponse;
348
352
  }
@@ -378,8 +382,7 @@ function getPermanentRedirect(pageContextInit, httpRequestId) {
378
382
  }
379
383
  logRuntimeInfo?.(`Permanent redirect defined by your config.redirects (https://vike.dev/redirects)`, httpRequestId, 'info');
380
384
  const httpResponse = createHttpResponseObjectRedirect({ url: urlTarget, statusCode: 301 }, urlWithoutBase);
381
- const pageContextHttpResponse = {};
382
- objectAssign(pageContextHttpResponse, pageContextInit);
385
+ const pageContextHttpResponse = createPageContext(pageContextInit);
383
386
  objectAssign(pageContextHttpResponse, { httpResponse });
384
387
  return pageContextHttpResponse;
385
388
  }
@@ -395,9 +398,8 @@ pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageIn
395
398
  const abortCall = pageContextAbort._abortCall;
396
399
  assert(abortCall);
397
400
  assertUsage(errorPageId, `You called ${pc.cyan(abortCall)} but you didn't define an error page, make sure to define one https://vike.dev/error-page`);
398
- const pageContext = {
399
- _pageId: errorPageId
400
- };
401
+ const pageContext = createPageContext({});
402
+ objectAssign(pageContext, { _pageId: errorPageId });
401
403
  objectAssign(pageContext, pageContextAbort);
402
404
  objectAssign(pageContext, pageContextErrorPageInit);
403
405
  objectAssign(pageContext, renderContext);
@@ -421,8 +423,7 @@ pageContextNominalPageInit, httpRequestId, renderContext, pageContextErrorPageIn
421
423
  return { pageContextReturn };
422
424
  }
423
425
  if (pageContextAbort._urlRedirect) {
424
- const pageContextReturn = {};
425
- objectAssign(pageContextReturn, pageContextInit);
426
+ const pageContextReturn = createPageContext(pageContextInit);
426
427
  objectAssign(pageContextReturn, pageContextAbort);
427
428
  const httpResponse = createHttpResponseObjectRedirect(pageContextAbort._urlRedirect, (() => {
428
429
  const { pathname, searchOriginal } = pageContextNominalPageInit.urlParsed;
@@ -52,3 +52,4 @@ export * from '../../utils/isArrayOfStrings.js';
52
52
  export * from '../../utils/escapeHtml.js';
53
53
  export * from '../../utils/normalizeHeaders.js';
54
54
  export * from '../../utils/isVikeReactApp.js';
55
+ export * from '../../utils/getPropAccessNotation.js';
@@ -55,3 +55,4 @@ export * from '../../utils/isArrayOfStrings.js';
55
55
  export * from '../../utils/escapeHtml.js';
56
56
  export * from '../../utils/normalizeHeaders.js';
57
57
  export * from '../../utils/isVikeReactApp.js';
58
+ export * from '../../utils/getPropAccessNotation.js';
@@ -354,6 +354,11 @@ type ConfigBuiltIn = {
354
354
  * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
355
355
  */
356
356
  cacheControl?: string;
357
+ /** Where scripts are injected in the HTML.
358
+ *
359
+ * https://vike.dev/injectScriptsAt
360
+ */
361
+ injectScriptsAt?: 'HTML_BEGIN' | 'HTML_END' | 'STREAM' | null;
357
362
  /** Used by Vike extensions to set their name.
358
363
  *
359
364
  * https://vike.dev/extends
@@ -151,6 +151,10 @@ function valueToJson(value, configName, definedAtData, importStatements) {
151
151
  configValueSerialized = stringify(value, {
152
152
  valueName,
153
153
  forbidReactElements: true,
154
+ // Replace import strings with import variables.
155
+ // - We don't need this anymore and could remove it.
156
+ // - We temporarily needed it for nested document configs (`config.document.{title,description,favicon}`), but we finally decided to go for flat document configs instead (`config.{title,description,favicon}`).
157
+ // - https://github.com/vikejs/vike-react/pull/113
154
158
  replacer(_, value) {
155
159
  if (typeof value === 'string') {
156
160
  const importData = parsePointerImportData(value);
@@ -30,4 +30,4 @@ type RouteMatch = {
30
30
  routeParams: Record<string, string>;
31
31
  };
32
32
  type RouteMatches = 'CUSTOM_ROUTING' | RouteMatch[];
33
- declare function route(pageContextForRoute: PageContextForRoute): Promise<PageContextFromRoute>;
33
+ declare function route(pageContext: PageContextForRoute): Promise<PageContextFromRoute>;
@@ -13,12 +13,12 @@ import { resolveRouteFunction } from './resolveRouteFunction.js';
13
13
  import { executeOnBeforeRouteHook } from './executeOnBeforeRouteHook.js';
14
14
  import { debug } from './debug.js';
15
15
  import pc from '@brillout/picocolors';
16
- async function route(pageContextForRoute) {
17
- debug('Pages routes:', pageContextForRoute._pageRoutes);
18
- assertPageContextUrl(pageContextForRoute);
16
+ async function route(pageContext) {
17
+ debug('Pages routes:', pageContext._pageRoutes);
18
+ assertPageContextUrl(pageContext);
19
19
  const pageContextFromRoute = {};
20
20
  // onBeforeRoute()
21
- const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContextForRoute);
21
+ const pageContextFromOnBeforeRouteHook = await executeOnBeforeRouteHook(pageContext);
22
22
  if (pageContextFromOnBeforeRouteHook) {
23
23
  if (pageContextFromOnBeforeRouteHook._routingProvidedByOnBeforeRouteHook) {
24
24
  assert(pageContextFromOnBeforeRouteHook._pageId);
@@ -29,8 +29,6 @@ async function route(pageContextForRoute) {
29
29
  }
30
30
  }
31
31
  // We take into account pageContext.urlLogical set by onBeforeRoute()
32
- const pageContext = {};
33
- objectAssign(pageContext, pageContextForRoute);
34
32
  objectAssign(pageContext, pageContextFromOnBeforeRouteHook);
35
33
  // Vike's routing
36
34
  const allPageIds = pageContext._allPageIds;
@@ -120,7 +120,7 @@ type PageContextBuiltInCommon<Data> = {
120
120
  pageExports: Record<string, unknown>;
121
121
  };
122
122
  type PageContextBuiltInServer<Data> = PageContextBuiltInCommon<Data> & PageContextUrlServer;
123
- type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'source' | 'sources' | 'from'> & {
123
+ type PageContextBuiltInClientWithClientRouting<Data> = Partial<PageContextBuiltInCommon<Data>> & Pick<PageContextBuiltInCommon<Data>, 'Page' | 'routeParams' | 'pageExports' | 'config' | 'configEntries' | 'exports' | 'exportsAll' | 'abortReason' | 'data' | 'source' | 'sources' | 'from'> & {
124
124
  /** Whether the current page is already rendered to HTML */
125
125
  isHydration: boolean;
126
126
  /**
@@ -0,0 +1,3 @@
1
+ export { augmentType };
2
+ /** Help TypeScript augment the type of objects. */
3
+ declare function augmentType<Thing, Clone>(thing: Thing, clone: Clone): asserts thing is Thing & Clone;
@@ -0,0 +1,7 @@
1
+ export { augmentType };
2
+ import { assert } from './assert.js';
3
+ /** Help TypeScript augment the type of objects. */
4
+ function augmentType(thing, clone) {
5
+ // @ts-ignore
6
+ assert(thing === clone);
7
+ }
@@ -1,3 +1,6 @@
1
1
  export function getPropAccessNotation(key) {
2
- return typeof key === 'string' && /^[a-z0-9\$_]+$/i.test(key) ? `.${key}` : `[${JSON.stringify(key)}]`;
2
+ return typeof key === 'string' && isKeyDotNotationCompatible(key) ? `.${key}` : `[${JSON.stringify(key)}]`;
3
+ }
4
+ function isKeyDotNotationCompatible(key) {
5
+ return /^[a-z0-9\$_]+$/i.test(key);
3
6
  }
@@ -1,2 +1,2 @@
1
1
  export { objectAssign };
2
- declare function objectAssign<Obj extends object, ObjAddendum>(obj: Obj, objAddendum: ObjAddendum): asserts obj is Obj & ObjAddendum;
2
+ declare function objectAssign<Obj extends object, ObjAddendum extends object | null>(obj: Obj, objAddendum: ObjAddendum): asserts obj is Obj & ObjAddendum;
@@ -1,9 +1,11 @@
1
1
  export { objectAssign };
2
+ import { assert } from './assert.js';
2
3
  // Same as Object.assign() but:
3
4
  // - With type inference
4
5
  // - Preserves property descriptors, which we need for preserving the getters added by getPageContextUrlComputed()
5
6
  function objectAssign(obj, objAddendum) {
6
7
  if (objAddendum) {
8
+ assert(!('_isPageContextObject' in objAddendum));
7
9
  Object.defineProperties(obj, Object.getOwnPropertyDescriptors(objAddendum));
8
10
  }
9
11
  }
@@ -1,7 +1,7 @@
1
1
  export { projectInfo };
2
2
  export { PROJECT_VERSION };
3
- declare const PROJECT_VERSION: "0.4.179";
3
+ declare const PROJECT_VERSION: "0.4.180";
4
4
  declare const projectInfo: {
5
5
  projectName: "Vike";
6
- projectVersion: "0.4.179";
6
+ projectVersion: "0.4.180";
7
7
  };
@@ -1,6 +1,6 @@
1
1
  export { projectInfo };
2
2
  export { PROJECT_VERSION };
3
- const PROJECT_VERSION = '0.4.179';
3
+ const PROJECT_VERSION = '0.4.180';
4
4
  const projectInfo = {
5
5
  projectName: 'Vike',
6
6
  projectVersion: PROJECT_VERSION
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.179",
3
+ "version": "0.4.180",
4
4
  "scripts": {
5
5
  "dev": "tsc --watch",
6
6
  "build": "rimraf dist/ && pnpm run build:esm && pnpm run build:cjs",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@brillout/import": "^0.2.3",
17
- "@brillout/json-serializer": "^0.5.10",
17
+ "@brillout/json-serializer": "^0.5.13",
18
18
  "@brillout/picocolors": "^1.0.13",
19
19
  "@brillout/require-shim": "^0.1.2",
20
20
  "@brillout/vite-plugin-server-entry": "^0.4.5",
@@ -138,7 +138,7 @@
138
138
  }
139
139
  },
140
140
  "peerDependencies": {
141
- "react-streaming": ">=0.3.41",
141
+ "react-streaming": ">=0.3.42",
142
142
  "vite": ">=4.4.0"
143
143
  },
144
144
  "peerDependenciesMeta": {
@@ -209,7 +209,7 @@
209
209
  "es-module-lexer": "^1.4.1",
210
210
  "esbuild": "^0.19.10",
211
211
  "fast-glob": "^3.3.2",
212
- "react-streaming": "^0.3.41",
212
+ "react-streaming": "^0.3.42",
213
213
  "rimraf": "^5.0.5",
214
214
  "sirv": "^2.0.4",
215
215
  "source-map-support": "^0.5.21",