You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.1 KiB

  1. import path, { resolve } from 'node:path';
  2. import { fileURLToPath } from 'node:url';
  3. import { readFileSync } from 'node:fs';
  4. const { version } = JSON.parse(
  5. readFileSync(new URL("../../package.json", import.meta.url)).toString()
  6. );
  7. const ROLLUP_HOOKS = [
  8. "options",
  9. "buildStart",
  10. "buildEnd",
  11. "renderStart",
  12. "renderError",
  13. "renderChunk",
  14. "writeBundle",
  15. "generateBundle",
  16. "banner",
  17. "footer",
  18. "augmentChunkHash",
  19. "outputOptions",
  20. "renderDynamicImport",
  21. "resolveFileUrl",
  22. "resolveImportMeta",
  23. "intro",
  24. "outro",
  25. "closeBundle",
  26. "closeWatcher",
  27. "load",
  28. "moduleParsed",
  29. "watchChange",
  30. "resolveDynamicImport",
  31. "resolveId",
  32. "shouldTransformCachedModule",
  33. "transform",
  34. "onLog"
  35. ];
  36. const VERSION = version;
  37. const DEFAULT_MAIN_FIELDS = [
  38. "browser",
  39. "module",
  40. "jsnext:main",
  41. // moment still uses this...
  42. "jsnext"
  43. ];
  44. const DEFAULT_CLIENT_MAIN_FIELDS = Object.freeze(DEFAULT_MAIN_FIELDS);
  45. const DEFAULT_SERVER_MAIN_FIELDS = Object.freeze(
  46. DEFAULT_MAIN_FIELDS.filter((f) => f !== "browser")
  47. );
  48. const DEV_PROD_CONDITION = `development|production`;
  49. const DEFAULT_CONDITIONS = ["module", "browser", "node", DEV_PROD_CONDITION];
  50. const DEFAULT_CLIENT_CONDITIONS = Object.freeze(
  51. DEFAULT_CONDITIONS.filter((c) => c !== "node")
  52. );
  53. const DEFAULT_SERVER_CONDITIONS = Object.freeze(
  54. DEFAULT_CONDITIONS.filter((c) => c !== "browser")
  55. );
  56. const ESBUILD_MODULES_TARGET = [
  57. "es2020",
  58. "edge88",
  59. "firefox78",
  60. "chrome87",
  61. "safari14"
  62. ];
  63. const DEFAULT_CONFIG_FILES = [
  64. "vite.config.js",
  65. "vite.config.mjs",
  66. "vite.config.ts",
  67. "vite.config.cjs",
  68. "vite.config.mts",
  69. "vite.config.cts"
  70. ];
  71. const JS_TYPES_RE = /\.(?:j|t)sx?$|\.mjs$/;
  72. const CSS_LANGS_RE = /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/;
  73. const OPTIMIZABLE_ENTRY_RE = /\.[cm]?[jt]s$/;
  74. const SPECIAL_QUERY_RE = /[?&](?:worker|sharedworker|raw|url)\b/;
  75. const FS_PREFIX = `/@fs/`;
  76. const CLIENT_PUBLIC_PATH = `/@vite/client`;
  77. const ENV_PUBLIC_PATH = `/@vite/env`;
  78. const VITE_PACKAGE_DIR = resolve(
  79. // import.meta.url is `dist/node/constants.js` after bundle
  80. fileURLToPath(import.meta.url),
  81. "../../.."
  82. );
  83. const CLIENT_ENTRY = resolve(VITE_PACKAGE_DIR, "dist/client/client.mjs");
  84. const ENV_ENTRY = resolve(VITE_PACKAGE_DIR, "dist/client/env.mjs");
  85. const CLIENT_DIR = path.dirname(CLIENT_ENTRY);
  86. const KNOWN_ASSET_TYPES = [
  87. // images
  88. "apng",
  89. "bmp",
  90. "png",
  91. "jpe?g",
  92. "jfif",
  93. "pjpeg",
  94. "pjp",
  95. "gif",
  96. "svg",
  97. "ico",
  98. "webp",
  99. "avif",
  100. "cur",
  101. "jxl",
  102. // media
  103. "mp4",
  104. "webm",
  105. "ogg",
  106. "mp3",
  107. "wav",
  108. "flac",
  109. "aac",
  110. "opus",
  111. "mov",
  112. "m4a",
  113. "vtt",
  114. // fonts
  115. "woff2?",
  116. "eot",
  117. "ttf",
  118. "otf",
  119. // other
  120. "webmanifest",
  121. "pdf",
  122. "txt"
  123. ];
  124. const DEFAULT_ASSETS_RE = new RegExp(
  125. `\\.(` + KNOWN_ASSET_TYPES.join("|") + `)(\\?.*)?$`
  126. );
  127. const DEP_VERSION_RE = /[?&](v=[\w.-]+)\b/;
  128. const loopbackHosts = /* @__PURE__ */ new Set([
  129. "localhost",
  130. "127.0.0.1",
  131. "::1",
  132. "0000:0000:0000:0000:0000:0000:0000:0001"
  133. ]);
  134. const wildcardHosts = /* @__PURE__ */ new Set([
  135. "0.0.0.0",
  136. "::",
  137. "0000:0000:0000:0000:0000:0000:0000:0000"
  138. ]);
  139. const DEFAULT_DEV_PORT = 5173;
  140. const DEFAULT_PREVIEW_PORT = 4173;
  141. const DEFAULT_ASSETS_INLINE_LIMIT = 4096;
  142. const defaultAllowedOrigins = /^https?:\/\/(?:(?:[^:]+\.)?localhost|127\.0\.0\.1|\[::1\])(?::\d+)?$/;
  143. const METADATA_FILENAME = "_metadata.json";
  144. const ERR_OPTIMIZE_DEPS_PROCESSING_ERROR = "ERR_OPTIMIZE_DEPS_PROCESSING_ERROR";
  145. const ERR_FILE_NOT_FOUND_IN_OPTIMIZED_DEP_DIR = "ERR_FILE_NOT_FOUND_IN_OPTIMIZED_DEP_DIR";
  146. export { CLIENT_DIR, CLIENT_ENTRY, CLIENT_PUBLIC_PATH, CSS_LANGS_RE, DEFAULT_ASSETS_INLINE_LIMIT, DEFAULT_ASSETS_RE, DEFAULT_CLIENT_CONDITIONS, DEFAULT_CLIENT_MAIN_FIELDS, DEFAULT_CONFIG_FILES, DEFAULT_DEV_PORT, DEFAULT_PREVIEW_PORT, DEFAULT_SERVER_CONDITIONS, DEFAULT_SERVER_MAIN_FIELDS, DEP_VERSION_RE, DEV_PROD_CONDITION, ENV_ENTRY, ENV_PUBLIC_PATH, ERR_FILE_NOT_FOUND_IN_OPTIMIZED_DEP_DIR, ERR_OPTIMIZE_DEPS_PROCESSING_ERROR, ESBUILD_MODULES_TARGET, FS_PREFIX, JS_TYPES_RE, KNOWN_ASSET_TYPES, METADATA_FILENAME, OPTIMIZABLE_ENTRY_RE, ROLLUP_HOOKS, SPECIAL_QUERY_RE, VERSION, VITE_PACKAGE_DIR, defaultAllowedOrigins, loopbackHosts, wildcardHosts };