@vercel/static-build 2.7.22 → 2.7.24

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 (2) hide show
  1. package/dist/index.js +342 -10
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -9713,14 +9713,14 @@ var require_frameworks = __commonJS({
9713
9713
  ]
9714
9714
  },
9715
9715
  {
9716
- name: "Nuxt.js",
9716
+ name: "Nuxt",
9717
9717
  slug: "nuxtjs",
9718
9718
  demo: "https://nuxtjs-template.vercel.app",
9719
9719
  logo: "https://api-frameworks.vercel.sh/framework-logos/nuxt.svg",
9720
9720
  screenshot: "https://assets.vercel.com/image/upload/v1647366075/front/import/nuxtjs.png",
9721
- tagline: "Nuxt.js is the web comprehensive framework that lets you dream big with Vue.js.",
9722
- description: "A Nuxt.js app, bootstrapped with create-nuxt-app.",
9723
- website: "https://nuxtjs.org",
9721
+ tagline: "Nuxt is the open source framework that makes full-stack development with Vue.js intuitive.",
9722
+ description: "A Nuxt app, bootstrapped with create-nuxt-app.",
9723
+ website: "https://nuxt.com",
9724
9724
  sort: 2,
9725
9725
  envPrefix: "NUXT_ENV_",
9726
9726
  supersedes: ["nitro"],
@@ -9734,6 +9734,9 @@ var require_frameworks = __commonJS({
9734
9734
  },
9735
9735
  {
9736
9736
  matchPackage: "nuxt-edge"
9737
+ },
9738
+ {
9739
+ matchPackage: "nuxt-nightly"
9737
9740
  }
9738
9741
  ]
9739
9742
  },
@@ -9746,7 +9749,7 @@ var require_frameworks = __commonJS({
9746
9749
  value: "nuxt build"
9747
9750
  },
9748
9751
  devCommand: {
9749
- value: "nuxt"
9752
+ value: "nuxt dev"
9750
9753
  },
9751
9754
  outputDirectory: {
9752
9755
  value: "dist"
@@ -10193,7 +10196,60 @@ var require_frameworks = __commonJS({
10193
10196
  ]
10194
10197
  },
10195
10198
  {
10196
- name: "FastHTML (Experimental)",
10199
+ name: "FastAPI",
10200
+ slug: "fastapi",
10201
+ demo: "https://vercel-fastapi-gamma-smoky.vercel.app/",
10202
+ logo: "https://api-frameworks.vercel.sh/framework-logos/fastapi.svg",
10203
+ darkModeLogo: "https://api-frameworks.vercel.sh/framework-logos/fastapi.svg",
10204
+ tagline: "FastAPI framework, high performance, easy to learn, fast to code, ready for production",
10205
+ description: "FastAPI framework, high performance, easy to learn, fast to code, ready for production",
10206
+ website: "https://fastapi.tiangolo.com",
10207
+ useRuntime: { src: "index.py", use: "@vercel/python" },
10208
+ detectors: {
10209
+ some: [
10210
+ {
10211
+ path: "requirements.txt",
10212
+ matchContent: "fastapi"
10213
+ },
10214
+ {
10215
+ path: "pyproject.toml",
10216
+ matchContent: "fastapi"
10217
+ },
10218
+ {
10219
+ path: "Pipfile",
10220
+ matchContent: "fastapi"
10221
+ }
10222
+ ]
10223
+ },
10224
+ settings: {
10225
+ installCommand: {
10226
+ placeholder: "`pip install -r requirements.txt`"
10227
+ },
10228
+ buildCommand: {
10229
+ placeholder: "None",
10230
+ value: null
10231
+ },
10232
+ devCommand: {
10233
+ placeholder: "None",
10234
+ value: null
10235
+ },
10236
+ outputDirectory: {
10237
+ value: "N/A"
10238
+ }
10239
+ },
10240
+ getOutputDirName: async () => "public",
10241
+ defaultRoutes: [
10242
+ {
10243
+ handle: "filesystem"
10244
+ },
10245
+ {
10246
+ src: "/(.*)",
10247
+ dest: "/"
10248
+ }
10249
+ ]
10250
+ },
10251
+ {
10252
+ name: "FastHTML",
10197
10253
  slug: "fasthtml",
10198
10254
  demo: "https://fasthtml-template.vercel.app",
10199
10255
  logo: "https://api-frameworks.vercel.sh/framework-logos/fasthtml.png",
@@ -10603,6 +10659,7 @@ var require_frameworks = __commonJS({
10603
10659
  name: "Express",
10604
10660
  slug: "express",
10605
10661
  logo: "https://api-frameworks.vercel.sh/framework-logos/express.svg",
10662
+ demo: "https://express-vercel-example-demo.vercel.app/",
10606
10663
  darkModeLogo: "https://api-frameworks.vercel.sh/framework-logos/express-dark.svg",
10607
10664
  tagline: "Fast, unopinionated, minimalist web framework for Node.js",
10608
10665
  description: "Fast, unopinionated, minimalist web framework for Node.js",
@@ -10785,6 +10842,236 @@ var require_frameworks = __commonJS({
10785
10842
  dependency: "express",
10786
10843
  getOutputDirName: async () => "public"
10787
10844
  },
10845
+ {
10846
+ name: "H3",
10847
+ slug: "h3",
10848
+ logo: "https://api-frameworks.vercel.sh/framework-logos/h3.svg",
10849
+ tagline: "Universal, Tiny, and Fast Servers",
10850
+ description: "H(TTP) server framework built on top of web standards for high performance and composability.",
10851
+ website: "https://h3.dev/",
10852
+ useRuntime: { src: "index.js", use: "@vercel/h3" },
10853
+ defaultRoutes: [
10854
+ {
10855
+ handle: "filesystem"
10856
+ },
10857
+ {
10858
+ src: "/(.*)",
10859
+ dest: "/"
10860
+ }
10861
+ ],
10862
+ detectors: {
10863
+ every: [{ matchPackage: "h3" }],
10864
+ some: [
10865
+ {
10866
+ path: "app.cjs",
10867
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10868
+ },
10869
+ {
10870
+ path: "app.js",
10871
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10872
+ },
10873
+ {
10874
+ path: "app.mjs",
10875
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10876
+ },
10877
+ {
10878
+ path: "app.mts",
10879
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10880
+ },
10881
+ {
10882
+ path: "app.ts",
10883
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10884
+ },
10885
+ {
10886
+ path: "app.cts",
10887
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10888
+ },
10889
+ {
10890
+ path: "index.cjs",
10891
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10892
+ },
10893
+ {
10894
+ path: "index.js",
10895
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10896
+ },
10897
+ {
10898
+ path: "index.mjs",
10899
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10900
+ },
10901
+ {
10902
+ path: "index.mts",
10903
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10904
+ },
10905
+ {
10906
+ path: "index.ts",
10907
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10908
+ },
10909
+ {
10910
+ path: "index.cts",
10911
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10912
+ },
10913
+ {
10914
+ path: "server.cjs",
10915
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10916
+ },
10917
+ {
10918
+ path: "server.js",
10919
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10920
+ },
10921
+ {
10922
+ path: "server.mjs",
10923
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10924
+ },
10925
+ {
10926
+ path: "server.mts",
10927
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10928
+ },
10929
+ {
10930
+ path: "server.ts",
10931
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10932
+ },
10933
+ {
10934
+ path: "server.cts",
10935
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10936
+ },
10937
+ {
10938
+ path: "src/index.cjs",
10939
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10940
+ },
10941
+ {
10942
+ path: "src/index.js",
10943
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10944
+ },
10945
+ {
10946
+ path: "src/index.mjs",
10947
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10948
+ },
10949
+ {
10950
+ path: "src/index.mts",
10951
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10952
+ },
10953
+ {
10954
+ path: "src/index.ts",
10955
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10956
+ },
10957
+ {
10958
+ path: "src/index.cts",
10959
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10960
+ },
10961
+ {
10962
+ path: "src/app.cjs",
10963
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10964
+ },
10965
+ {
10966
+ path: "src/app.js",
10967
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10968
+ },
10969
+ {
10970
+ path: "src/app.mjs",
10971
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10972
+ },
10973
+ {
10974
+ path: "src/app.mts",
10975
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10976
+ },
10977
+ {
10978
+ path: "src/app.ts",
10979
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10980
+ },
10981
+ {
10982
+ path: "src/app.cts",
10983
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10984
+ },
10985
+ {
10986
+ path: "src/server.cjs",
10987
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10988
+ },
10989
+ {
10990
+ path: "src/server.js",
10991
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10992
+ },
10993
+ {
10994
+ path: "src/server.mjs",
10995
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
10996
+ },
10997
+ {
10998
+ path: "src/server.mts",
10999
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
11000
+ },
11001
+ {
11002
+ path: "src/server.ts",
11003
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
11004
+ },
11005
+ {
11006
+ path: "src/server.cts",
11007
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']h3["']\\s*(?:\\))?`
11008
+ }
11009
+ ]
11010
+ },
11011
+ settings: {
11012
+ installCommand: {
11013
+ placeholder: "`yarn install`, `pnpm install`, `npm install`, or `bun install`"
11014
+ },
11015
+ buildCommand: {
11016
+ placeholder: "None",
11017
+ value: null
11018
+ },
11019
+ devCommand: {
11020
+ placeholder: "None",
11021
+ value: null
11022
+ },
11023
+ outputDirectory: {
11024
+ value: "N/A"
11025
+ }
11026
+ },
11027
+ dependency: "h3",
11028
+ getOutputDirName: async () => "public"
11029
+ },
11030
+ {
11031
+ name: "NestJS",
11032
+ slug: "nestjs",
11033
+ logo: "https://api-frameworks.vercel.sh/framework-logos/nestjs.svg",
11034
+ tagline: "Framework for building efficient, scalable Node.js server-side applications",
11035
+ description: "A progressive Node.js framework for building efficient, reliable and scalable server-side applications.",
11036
+ website: "https://nestjs.com/",
11037
+ useRuntime: { src: "index.js", use: "@vercel/nestjs" },
11038
+ defaultRoutes: [
11039
+ {
11040
+ handle: "filesystem"
11041
+ },
11042
+ {
11043
+ src: "/(.*)",
11044
+ dest: "/"
11045
+ }
11046
+ ],
11047
+ detectors: {
11048
+ every: [{ matchPackage: "@nestjs/core" }],
11049
+ some: [
11050
+ {
11051
+ path: "src/main.ts",
11052
+ matchContent: `(?:from|require|import)\\s*(?:\\(\\s*)?["']@nestjs/core["']\\s*(?:\\))?`
11053
+ }
11054
+ ]
11055
+ },
11056
+ settings: {
11057
+ installCommand: {
11058
+ placeholder: "`yarn install`, `pnpm install`, `npm install`, or `bun install`"
11059
+ },
11060
+ buildCommand: {
11061
+ placeholder: "None",
11062
+ value: null
11063
+ },
11064
+ devCommand: {
11065
+ placeholder: "None",
11066
+ value: null
11067
+ },
11068
+ outputDirectory: {
11069
+ value: "N/A"
11070
+ }
11071
+ },
11072
+ dependency: "nestjs",
11073
+ getOutputDirName: async () => "public"
11074
+ },
10788
11075
  {
10789
11076
  name: "xmcp",
10790
11077
  slug: "xmcp",
@@ -18575,6 +18862,16 @@ var require_detect_builders = __commonJS({
18575
18862
  builders.push(...apiBuilders);
18576
18863
  }
18577
18864
  if (frontendBuilder) {
18865
+ if (frontendBuilder?.use === "@vercel/express" || frontendBuilder?.use === "@vercel/hono" || frontendBuilder?.use === "@vercel/python") {
18866
+ builders.push({
18867
+ src: "public/**/*",
18868
+ use: "@vercel/static",
18869
+ config: {
18870
+ zeroConfig: true,
18871
+ outputDirectory: "public"
18872
+ }
18873
+ });
18874
+ }
18578
18875
  builders.push(frontendBuilder);
18579
18876
  if (hasNextApiFiles && apiBuilders.some((b) => (0, import_is_official_runtime.isOfficialRuntime)("node", b.use))) {
18580
18877
  warnings.push({
@@ -18832,6 +19129,25 @@ var require_detect_builders = __commonJS({
18832
19129
  }
18833
19130
  }
18834
19131
  }
19132
+ if (frontendBuilder && ((0, import_is_official_runtime.isOfficialRuntime)("express", frontendBuilder.use) || (0, import_is_official_runtime.isOfficialRuntime)("hono", frontendBuilder.use))) {
19133
+ const validFilenames = [
19134
+ "app",
19135
+ "index",
19136
+ "server",
19137
+ "src/app",
19138
+ "src/index",
19139
+ "src/server"
19140
+ ];
19141
+ const validExtensions = ["js", "cjs", "mjs", "ts", "cts", "mts"];
19142
+ const validEntrypoints = validFilenames.flatMap(
19143
+ (filename) => validExtensions.map((extension) => `${filename}.${extension}`)
19144
+ );
19145
+ for (const fnKey of unusedFunctions.values()) {
19146
+ if (validEntrypoints.includes(fnKey)) {
19147
+ unusedFunctions.delete(fnKey);
19148
+ }
19149
+ }
19150
+ }
18835
19151
  if (unusedFunctions.size) {
18836
19152
  const [fnKey] = Array.from(unusedFunctions);
18837
19153
  return {
@@ -27877,16 +28193,32 @@ async function checkForPort(port, timeout) {
27877
28193
  await sleep(100);
27878
28194
  }
27879
28195
  }
27880
- function validateDistDir(distDir) {
28196
+ function validateDistDir(distDir, workPath) {
27881
28197
  const distDirName = import_path6.default.basename(distDir);
27882
28198
  const exists = () => (0, import_fs4.existsSync)(distDir);
27883
28199
  const isDirectory = () => (0, import_fs4.statSync)(distDir).isDirectory();
27884
28200
  const isEmpty = () => (0, import_fs4.readdirSync)(distDir).length === 0;
27885
28201
  const link = "https://vercel.link/missing-public-directory";
27886
28202
  if (!exists()) {
28203
+ const vercelJsonPath = import_path6.default.join(workPath, "vercel.json");
28204
+ const vercelJsonExists = (0, import_fs4.existsSync)(vercelJsonPath);
28205
+ let buildCommandExists = false;
28206
+ if (vercelJsonExists) {
28207
+ try {
28208
+ const vercelJson = JSON.parse((0, import_fs4.readFileSync)(vercelJsonPath, "utf8"));
28209
+ buildCommandExists = vercelJson.buildCommand !== void 0;
28210
+ } catch (e) {
28211
+ }
28212
+ }
28213
+ let message = `No Output Directory named "${distDirName}" found after the Build completed.`;
28214
+ if (vercelJsonExists && buildCommandExists) {
28215
+ message += ` Update vercel.json#outputDirectory to ensure the correct output directory is generated.`;
28216
+ } else {
28217
+ message += ` Configure the Output Directory in your Project Settings. Alternatively, configure vercel.json#outputDirectory.`;
28218
+ }
27887
28219
  throw new import_build_utils4.NowBuildError({
27888
28220
  code: "STATIC_BUILD_NO_OUT_DIR",
27889
- message: `No Output Directory named "${distDirName}" found after the Build completed. You can configure the Output Directory in your Project Settings.`,
28221
+ message,
27890
28222
  link
27891
28223
  });
27892
28224
  }
@@ -28426,7 +28758,7 @@ Details: https://err.sh/vercel/vercel/now-static-build-failed-to-detect-a-server
28426
28758
  );
28427
28759
  } else {
28428
28760
  if (!extraOutputs.functions) {
28429
- validateDistDir(distPath);
28761
+ validateDistDir(distPath, workPath);
28430
28762
  }
28431
28763
  if (framework && !extraOutputs.routes) {
28432
28764
  const frameworkRoutes = await getFrameworkRoutes(
@@ -28467,7 +28799,7 @@ Details: https://err.sh/vercel/vercel/now-static-build-failed-to-detect-a-server
28467
28799
  );
28468
28800
  const spawnOpts = (0, import_build_utils4.getSpawnOptions)(meta, nodeVersion);
28469
28801
  await (0, import_build_utils4.runShellScript)(import_path6.default.join(workPath, entrypoint), [], spawnOpts);
28470
- validateDistDir(distPath);
28802
+ validateDistDir(distPath, workPath);
28471
28803
  const output = await (0, import_build_utils4.glob)("**", distPath, mountpoint);
28472
28804
  return {
28473
28805
  output,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/static-build",
3
- "version": "2.7.22",
3
+ "version": "2.7.24",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index",
6
6
  "homepage": "https://vercel.com/docs/build-step",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@vercel/gatsby-plugin-vercel-analytics": "1.0.11",
17
- "@vercel/gatsby-plugin-vercel-builder": "2.0.95",
17
+ "@vercel/gatsby-plugin-vercel-builder": "2.0.96",
18
18
  "@vercel/static-config": "3.1.2",
19
19
  "ts-morph": "12.0.0"
20
20
  },
@@ -28,11 +28,11 @@
28
28
  "@types/node-fetch": "2.5.4",
29
29
  "@types/promise-timeout": "1.3.0",
30
30
  "@types/semver": "7.3.13",
31
- "@vercel/build-utils": "12.1.0",
31
+ "@vercel/build-utils": "12.1.1",
32
32
  "@vercel/error-utils": "2.0.3",
33
- "@vercel/frameworks": "3.8.2",
34
- "@vercel/fs-detectors": "5.5.0",
35
- "@vercel/routing-utils": "5.1.1",
33
+ "@vercel/frameworks": "3.11.0",
34
+ "@vercel/fs-detectors": "5.6.0",
35
+ "@vercel/routing-utils": "5.2.0",
36
36
  "execa": "3.2.0",
37
37
  "fs-extra": "10.0.0",
38
38
  "get-port": "5.0.0",