vike 0.4.230-commit-8b60b8c → 0.4.230-commit-eea72b2

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.
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.assertExtensionsConventions = assertExtensionsConventions;
7
7
  exports.assertExtensionsRequire = assertExtensionsRequire;
8
8
  const picocolors_1 = __importDefault(require("@brillout/picocolors"));
9
- const isObjectOfStrings_js_1 = require("../../../../../../utils/isObjectOfStrings.js");
10
9
  const utils_js_1 = require("../../../../utils.js");
11
10
  const getVikeConfig_js_1 = require("../getVikeConfig.js");
12
11
  const path_1 = __importDefault(require("path"));
@@ -46,34 +45,53 @@ function assertExtensionsRequire(plusFiles) {
46
45
  });
47
46
  // Enforce `require`
48
47
  plusFilesRelevantList.forEach((plusFile) => {
49
- const require = getConfigRequireValue(plusFile);
48
+ const require = resolveRequireSetting(plusFile);
50
49
  if (!require)
51
50
  return;
52
51
  const name = getNameValue(plusFile);
53
52
  const filePathToShowToUser = getFilePathToShowToUser(plusFile);
54
53
  (0, utils_js_1.assertUsage)(name, `Setting ${picocolors_1.default.bold('name')} is required for being able to use setting ${picocolors_1.default.bold('require')} in ${filePathToShowToUser}.`);
55
- Object.entries(require).forEach(([reqName, reqVersion]) => {
54
+ Object.entries(require).forEach(([reqName, req]) => {
56
55
  const errBase = `${picocolors_1.default.bold(name)} requires ${picocolors_1.default.bold(reqName)}`;
57
56
  if (reqName === 'vike') {
58
- (0, utils_js_1.assertUsage)(isVersionRange(utils_js_1.PROJECT_VERSION, reqVersion), `${errBase} version ${picocolors_1.default.bold(reqVersion)}, but ${picocolors_1.default.bold(utils_js_1.PROJECT_VERSION)} is installed.`);
57
+ (0, utils_js_1.assertUsage)(isVersionRange(utils_js_1.PROJECT_VERSION, req.version), `${errBase} version ${picocolors_1.default.bold(req.version)}, but ${picocolors_1.default.bold(utils_js_1.PROJECT_VERSION)} is installed.`);
59
58
  return;
60
59
  }
61
60
  const extensionVersion = extensions[reqName];
62
- (0, utils_js_1.assertUsage)(extensionVersion, `${errBase}.`);
63
- (0, utils_js_1.assertUsage)(isVersionRange(extensionVersion, reqVersion), `${errBase} version ${picocolors_1.default.bold(reqVersion)}, but ${picocolors_1.default.bold(extensionVersion)} is installed.`);
61
+ if (!extensionVersion) {
62
+ if (req.optional) {
63
+ return;
64
+ }
65
+ else {
66
+ (0, utils_js_1.assertUsage)(false, `${errBase}.`);
67
+ }
68
+ }
69
+ (0, utils_js_1.assertUsage)(isVersionRange(extensionVersion, req.version), `${errBase} version ${picocolors_1.default.bold(req.version)}, but ${picocolors_1.default.bold(extensionVersion)} is installed.`);
64
70
  });
65
71
  });
66
72
  }
67
- function getConfigRequireValue(plusFile) {
73
+ function resolveRequireSetting(plusFile) {
68
74
  const confVal = (0, getVikeConfig_js_1.getConfVal)(plusFile, 'require');
69
75
  if (!confVal)
70
76
  return null;
71
77
  (0, utils_js_1.assert)(confVal.valueIsLoaded);
72
- const require = confVal.value;
78
+ const requireValue = confVal.value;
73
79
  const { filePathToShowToUserResolved } = plusFile.filePath;
74
80
  (0, utils_js_1.assert)(filePathToShowToUserResolved);
75
- (0, utils_js_1.assertUsage)((0, isObjectOfStrings_js_1.isObjectOfStrings)(require), `The setting ${picocolors_1.default.bold('require')} defined at ${filePathToShowToUserResolved} should be an object with string values (${picocolors_1.default.bold('Record<string, string>')}).`);
76
- return require;
81
+ (0, utils_js_1.assertUsage)((0, utils_js_1.isObject)(requireValue), `The setting ${picocolors_1.default.bold('+require')} defined at ${filePathToShowToUserResolved} should be an object`);
82
+ const requireSetting = {};
83
+ Object.entries(requireValue).forEach(([reqName, req]) => {
84
+ if (typeof req === 'string') {
85
+ requireSetting[reqName] = { version: req, optional: false };
86
+ return;
87
+ }
88
+ if ((0, utils_js_1.isObject)(req)) {
89
+ requireSetting[reqName] = req;
90
+ return;
91
+ }
92
+ (0, utils_js_1.assertUsage)(false, `Invalid +require[${JSON.stringify(reqName)}] value ${picocolors_1.default.cyan(JSON.stringify(req))}`);
93
+ });
94
+ return requireSetting;
77
95
  }
78
96
  function getNameValue(plusFile) {
79
97
  const confVal = (0, getVikeConfig_js_1.getConfVal)(plusFile, 'name');
@@ -87,6 +87,7 @@ async function getPlusFilesAll(userRootDir, esbuildCache) {
87
87
  }
88
88
  function assertPlusFiles(plusFilesAll) {
89
89
  const plusFiles = Object.values(plusFilesAll).flat();
90
+ // The earlier we call it the better, so that +require can be used by Vike extensions to depend on new Vike features
90
91
  (0, assertExtensions_js_1.assertExtensionsRequire)(plusFiles);
91
92
  }
92
93
  function getPlusFileFromConfigFile(configFile, isExtensionConfig, locationId, userRootDir) {
@@ -2,4 +2,4 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PROJECT_VERSION = void 0;
4
4
  // Automatically updated by @brillout/release-me
5
- exports.PROJECT_VERSION = '0.4.230-commit-8b60b8c';
5
+ exports.PROJECT_VERSION = '0.4.230-commit-eea72b2';
@@ -1,8 +1,7 @@
1
1
  export { assertExtensionsConventions };
2
2
  export { assertExtensionsRequire };
3
3
  import pc from '@brillout/picocolors';
4
- import { isObjectOfStrings } from '../../../../../../utils/isObjectOfStrings.js';
5
- import { PROJECT_VERSION, assert, assertUsage, assertWarning, findPackageJson } from '../../../../utils.js';
4
+ import { PROJECT_VERSION, assert, assertUsage, assertWarning, findPackageJson, isObject } from '../../../../utils.js';
6
5
  import { getConfVal } from '../getVikeConfig.js';
7
6
  import path from 'path';
8
7
  import semver from 'semver';
@@ -41,34 +40,53 @@ function assertExtensionsRequire(plusFiles) {
41
40
  });
42
41
  // Enforce `require`
43
42
  plusFilesRelevantList.forEach((plusFile) => {
44
- const require = getConfigRequireValue(plusFile);
43
+ const require = resolveRequireSetting(plusFile);
45
44
  if (!require)
46
45
  return;
47
46
  const name = getNameValue(plusFile);
48
47
  const filePathToShowToUser = getFilePathToShowToUser(plusFile);
49
48
  assertUsage(name, `Setting ${pc.bold('name')} is required for being able to use setting ${pc.bold('require')} in ${filePathToShowToUser}.`);
50
- Object.entries(require).forEach(([reqName, reqVersion]) => {
49
+ Object.entries(require).forEach(([reqName, req]) => {
51
50
  const errBase = `${pc.bold(name)} requires ${pc.bold(reqName)}`;
52
51
  if (reqName === 'vike') {
53
- assertUsage(isVersionRange(PROJECT_VERSION, reqVersion), `${errBase} version ${pc.bold(reqVersion)}, but ${pc.bold(PROJECT_VERSION)} is installed.`);
52
+ assertUsage(isVersionRange(PROJECT_VERSION, req.version), `${errBase} version ${pc.bold(req.version)}, but ${pc.bold(PROJECT_VERSION)} is installed.`);
54
53
  return;
55
54
  }
56
55
  const extensionVersion = extensions[reqName];
57
- assertUsage(extensionVersion, `${errBase}.`);
58
- assertUsage(isVersionRange(extensionVersion, reqVersion), `${errBase} version ${pc.bold(reqVersion)}, but ${pc.bold(extensionVersion)} is installed.`);
56
+ if (!extensionVersion) {
57
+ if (req.optional) {
58
+ return;
59
+ }
60
+ else {
61
+ assertUsage(false, `${errBase}.`);
62
+ }
63
+ }
64
+ assertUsage(isVersionRange(extensionVersion, req.version), `${errBase} version ${pc.bold(req.version)}, but ${pc.bold(extensionVersion)} is installed.`);
59
65
  });
60
66
  });
61
67
  }
62
- function getConfigRequireValue(plusFile) {
68
+ function resolveRequireSetting(plusFile) {
63
69
  const confVal = getConfVal(plusFile, 'require');
64
70
  if (!confVal)
65
71
  return null;
66
72
  assert(confVal.valueIsLoaded);
67
- const require = confVal.value;
73
+ const requireValue = confVal.value;
68
74
  const { filePathToShowToUserResolved } = plusFile.filePath;
69
75
  assert(filePathToShowToUserResolved);
70
- assertUsage(isObjectOfStrings(require), `The setting ${pc.bold('require')} defined at ${filePathToShowToUserResolved} should be an object with string values (${pc.bold('Record<string, string>')}).`);
71
- return require;
76
+ assertUsage(isObject(requireValue), `The setting ${pc.bold('+require')} defined at ${filePathToShowToUserResolved} should be an object`);
77
+ const requireSetting = {};
78
+ Object.entries(requireValue).forEach(([reqName, req]) => {
79
+ if (typeof req === 'string') {
80
+ requireSetting[reqName] = { version: req, optional: false };
81
+ return;
82
+ }
83
+ if (isObject(req)) {
84
+ requireSetting[reqName] = req;
85
+ return;
86
+ }
87
+ assertUsage(false, `Invalid +require[${JSON.stringify(reqName)}] value ${pc.cyan(JSON.stringify(req))}`);
88
+ });
89
+ return requireSetting;
72
90
  }
73
91
  function getNameValue(plusFile) {
74
92
  const confVal = getConfVal(plusFile, 'name');
@@ -85,6 +85,7 @@ async function getPlusFilesAll(userRootDir, esbuildCache) {
85
85
  }
86
86
  function assertPlusFiles(plusFilesAll) {
87
87
  const plusFiles = Object.values(plusFilesAll).flat();
88
+ // The earlier we call it the better, so that +require can be used by Vike extensions to depend on new Vike features
88
89
  assertExtensionsRequire(plusFiles);
89
90
  }
90
91
  function getPlusFileFromConfigFile(configFile, isExtensionConfig, locationId, userRootDir) {
@@ -538,7 +538,10 @@ type ConfigBuiltIn = {
538
538
  *
539
539
  * https://vike.dev/require
540
540
  */
541
- require?: Record<string, string>;
541
+ require?: Record<string, string | {
542
+ version: string;
543
+ optional?: boolean;
544
+ }>;
542
545
  /** Whether the page scrolls to the top upon navigation.
543
546
  *
544
547
  * https://vike.dev/keepScrollPosition
@@ -1 +1 @@
1
- export declare const PROJECT_VERSION: "0.4.230-commit-8b60b8c";
1
+ export declare const PROJECT_VERSION: "0.4.230-commit-eea72b2";
@@ -1,2 +1,2 @@
1
1
  // Automatically updated by @brillout/release-me
2
- export const PROJECT_VERSION = '0.4.230-commit-8b60b8c';
2
+ export const PROJECT_VERSION = '0.4.230-commit-eea72b2';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vike",
3
- "version": "0.4.230-commit-8b60b8c",
3
+ "version": "0.4.230-commit-eea72b2",
4
4
  "repository": "https://github.com/vikejs/vike",
5
5
  "exports": {
6
6
  "./server": {