@vercel/build-utils 2.12.3-canary.42 → 2.12.3-canary.43

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.
@@ -1,5 +1,5 @@
1
1
  import { Route } from '@vercel/routing-utils';
2
- import { PackageJson, Builder, BuilderFunctions } from './types';
2
+ import { PackageJson, Builder, BuilderFunctions, ProjectSettings } from './types';
3
3
  interface ErrorResponse {
4
4
  code: string;
5
5
  message: string;
@@ -10,14 +10,7 @@ interface Options {
10
10
  tag?: 'canary' | 'latest' | string;
11
11
  functions?: BuilderFunctions;
12
12
  ignoreBuildScript?: boolean;
13
- projectSettings?: {
14
- framework?: string | null;
15
- devCommand?: string | null;
16
- installCommand?: string | null;
17
- buildCommand?: string | null;
18
- outputDirectory?: string | null;
19
- createdAt?: number;
20
- };
13
+ projectSettings?: ProjectSettings;
21
14
  cleanUrls?: boolean;
22
15
  trailingSlash?: boolean;
23
16
  featHandleMiss?: boolean;
@@ -0,0 +1,33 @@
1
+ import type { Builder, BuilderFunctions, PackageJson, ProjectSettings } from './types';
2
+ interface Metadata {
3
+ plugins: string[];
4
+ hasDotOutput: boolean;
5
+ hasMiddleware: boolean;
6
+ }
7
+ /**
8
+ * If the Deployment can be built with the new File System API,
9
+ * we'll return the new Builder here, otherwise return `null`.
10
+ */
11
+ export declare function detectFileSystemAPI({ files, projectSettings, builders, vercelConfig, pkg, tag, enableFlag, }: {
12
+ files: {
13
+ [relPath: string]: any;
14
+ };
15
+ projectSettings: ProjectSettings;
16
+ builders: Builder[];
17
+ vercelConfig: {
18
+ builds?: Builder[];
19
+ functions?: BuilderFunctions;
20
+ } | null | undefined;
21
+ pkg: PackageJson | null | undefined;
22
+ tag: string | undefined;
23
+ enableFlag: boolean | undefined;
24
+ }): Promise<{
25
+ metadata: Metadata;
26
+ fsApiBuilder: Builder;
27
+ reason: null;
28
+ } | {
29
+ metadata: Metadata;
30
+ fsApiBuilder: null;
31
+ reason: string;
32
+ }>;
33
+ export {};
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectFileSystemAPI = void 0;
7
+ const semver_1 = __importDefault(require("semver"));
8
+ const _1 = require("./");
9
+ const enableFileSystemApiFrameworks = new Set(['solidstart']);
10
+ /**
11
+ * If the Deployment can be built with the new File System API,
12
+ * we'll return the new Builder here, otherwise return `null`.
13
+ */
14
+ async function detectFileSystemAPI({ files, projectSettings, builders, vercelConfig, pkg, tag, enableFlag = false, }) {
15
+ const framework = projectSettings.framework || '';
16
+ const deps = Object.assign({}, pkg === null || pkg === void 0 ? void 0 : pkg.dependencies, pkg === null || pkg === void 0 ? void 0 : pkg.devDependencies);
17
+ const plugins = Object.keys(deps).filter(dep => dep.startsWith('vercel-plugin-'));
18
+ const hasDotOutput = Object.keys(files).some(file => file.startsWith('.output/'));
19
+ const hasMiddleware = Boolean(files['_middleware.js'] || files['_middleware.ts']);
20
+ const metadata = {
21
+ plugins,
22
+ hasDotOutput,
23
+ hasMiddleware,
24
+ };
25
+ const isEnabled = enableFlag ||
26
+ hasMiddleware ||
27
+ hasDotOutput ||
28
+ enableFileSystemApiFrameworks.has(framework);
29
+ if (!isEnabled) {
30
+ return { metadata, fsApiBuilder: null, reason: 'Flag not enabled.' };
31
+ }
32
+ if ((vercelConfig === null || vercelConfig === void 0 ? void 0 : vercelConfig.builds) && vercelConfig.builds.length > 0) {
33
+ return {
34
+ metadata,
35
+ fsApiBuilder: null,
36
+ reason: 'Detected `builds` in vercel.json. Please remove it in favor of CLI plugins.',
37
+ };
38
+ }
39
+ if (Object.values((vercelConfig === null || vercelConfig === void 0 ? void 0 : vercelConfig.functions) || {}).some(fn => !!fn.runtime)) {
40
+ return {
41
+ metadata,
42
+ fsApiBuilder: null,
43
+ reason: 'Detected `functions.runtime` in vercel.json. Please remove it in favor of CLI plugins.',
44
+ };
45
+ }
46
+ if (process.env.HUGO_VERSION) {
47
+ return {
48
+ metadata,
49
+ fsApiBuilder: null,
50
+ reason: 'Detected `HUGO_VERSION` environment variable. Please remove it.',
51
+ };
52
+ }
53
+ if (process.env.ZOLA_VERSION) {
54
+ return {
55
+ metadata,
56
+ fsApiBuilder: null,
57
+ reason: 'Detected `ZOLA_VERSION` environment variable. Please remove it.',
58
+ };
59
+ }
60
+ if (process.env.GUTENBERG_VERSION) {
61
+ return {
62
+ metadata,
63
+ fsApiBuilder: null,
64
+ reason: 'Detected `GUTENBERG_VERSION` environment variable. Please remove it.',
65
+ };
66
+ }
67
+ const invalidBuilder = builders.find(({ use }) => {
68
+ const valid = _1.isOfficialRuntime('go', use) ||
69
+ _1.isOfficialRuntime('python', use) ||
70
+ _1.isOfficialRuntime('ruby', use) ||
71
+ _1.isOfficialRuntime('node', use) ||
72
+ _1.isOfficialRuntime('next', use) ||
73
+ _1.isOfficialRuntime('static', use) ||
74
+ _1.isOfficialRuntime('static-build', use);
75
+ return !valid;
76
+ });
77
+ if (invalidBuilder) {
78
+ return {
79
+ metadata,
80
+ fsApiBuilder: null,
81
+ reason: `Detected \`${invalidBuilder.use}\` in vercel.json. Please remove it in favor of CLI plugins.`,
82
+ };
83
+ }
84
+ for (const lang of ['go', 'python', 'ruby']) {
85
+ for (const { use } of builders) {
86
+ const plugin = 'vercel-plugin-' + lang;
87
+ if (_1.isOfficialRuntime(lang, use) && !deps[plugin]) {
88
+ return {
89
+ metadata,
90
+ fsApiBuilder: null,
91
+ reason: `Detected \`${lang}\` Serverless Function usage without plugin \`${plugin}\`. Please run \`npm i ${plugin}\`.`,
92
+ };
93
+ }
94
+ }
95
+ }
96
+ if (framework === 'nuxtjs' ||
97
+ framework === 'sveltekit' ||
98
+ framework === 'redwoodjs') {
99
+ return {
100
+ metadata,
101
+ fsApiBuilder: null,
102
+ reason: `Detected framework \`${framework}\` that only supports legacy File System API. Please contact the framework author.`,
103
+ };
104
+ }
105
+ if (framework === 'nextjs' && !hasDotOutput) {
106
+ // Use the old pipeline if a custom output directory was specified for Next.js
107
+ // because `vercel build` cannot ensure that the directory will be in the same
108
+ // location as `.output`, which can break imports (not just nft.json files).
109
+ if (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.outputDirectory) {
110
+ return {
111
+ metadata,
112
+ fsApiBuilder: null,
113
+ reason: `Detected Next.js with Output Directory \`${projectSettings.outputDirectory}\` override. Please change it back to the default.`,
114
+ };
115
+ }
116
+ const versionRange = deps['next'];
117
+ if (!versionRange) {
118
+ return {
119
+ metadata,
120
+ fsApiBuilder: null,
121
+ reason: `Detected Next.js in Project Settings but missing \`next\` package.json dependencies. Please run \`npm i next\`.`,
122
+ };
123
+ }
124
+ // TODO: We'll need to check the lockfile if one is present.
125
+ if (versionRange !== 'latest' && versionRange !== 'canary') {
126
+ const fixedVersion = semver_1.default.valid(semver_1.default.coerce(versionRange) || '');
127
+ if (!fixedVersion || !semver_1.default.gte(fixedVersion, '12.0.0')) {
128
+ return {
129
+ metadata,
130
+ fsApiBuilder: null,
131
+ reason: `Detected legacy Next.js version "${versionRange}" in package.json. Please run \`npm i next@latest\` to upgrade.`,
132
+ };
133
+ }
134
+ }
135
+ }
136
+ const frontendBuilder = builders.find(({ use }) => _1.isOfficialRuntime('next', use) ||
137
+ _1.isOfficialRuntime('static', use) ||
138
+ _1.isOfficialRuntime('static-build', use));
139
+ const config = (frontendBuilder === null || frontendBuilder === void 0 ? void 0 : frontendBuilder.config) || {};
140
+ const withTag = tag ? `@${tag}` : '';
141
+ const fsApiBuilder = {
142
+ use: `@vercelruntimes/file-system-api${withTag}`,
143
+ src: '**',
144
+ config: {
145
+ ...config,
146
+ fileSystemAPI: true,
147
+ framework: config.framework || framework || null,
148
+ projectSettings,
149
+ hasMiddleware,
150
+ hasDotOutput,
151
+ },
152
+ };
153
+ return { metadata, fsApiBuilder, reason: null };
154
+ }
155
+ exports.detectFileSystemAPI = detectFileSystemAPI;
package/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ import debug from './debug';
16
16
  import getIgnoreFilter from './get-ignore-filter';
17
17
  export { FileBlob, FileFsRef, FileRef, Lambda, createLambda, Prerender, download, DownloadedFiles, getWriteableDirectory, glob, GlobOptions, rename, execAsync, spawnAsync, getScriptName, installDependencies, runPackageJsonScript, execCommand, spawnCommand, walkParentDirs, getNodeBinPath, runNpmInstall, runBundleInstall, runPipInstall, runShellScript, getNodeVersion, getLatestNodeVersion, getDiscontinuedNodeVersions, getSpawnOptions, streamToBuffer, shouldServe, debug, isSymbolicLink, getLambdaOptionsFromFunction, scanParentDirs, getIgnoreFilter, };
18
18
  export { detectBuilders, detectOutputDirectory, detectApiDirectory, detectApiExtensions, } from './detect-builders';
19
+ export { detectFileSystemAPI } from './detect-file-system-api';
19
20
  export { detectFramework } from './detect-framework';
20
21
  export { DetectorFilesystem } from './detectors/filesystem';
21
22
  export { readConfigFile } from './fs/read-config-file';
package/dist/index.js CHANGED
@@ -33839,6 +33839,169 @@ function sortFilesBySegmentCount(fileA, fileB) {
33839
33839
  }
33840
33840
 
33841
33841
 
33842
+ /***/ }),
33843
+
33844
+ /***/ 1182:
33845
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
33846
+
33847
+ "use strict";
33848
+
33849
+ var __importDefault = (this && this.__importDefault) || function (mod) {
33850
+ return (mod && mod.__esModule) ? mod : { "default": mod };
33851
+ };
33852
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
33853
+ exports.detectFileSystemAPI = void 0;
33854
+ const semver_1 = __importDefault(__webpack_require__(2879));
33855
+ const _1 = __webpack_require__(2855);
33856
+ const enableFileSystemApiFrameworks = new Set(['solidstart']);
33857
+ /**
33858
+ * If the Deployment can be built with the new File System API,
33859
+ * we'll return the new Builder here, otherwise return `null`.
33860
+ */
33861
+ async function detectFileSystemAPI({ files, projectSettings, builders, vercelConfig, pkg, tag, enableFlag = false, }) {
33862
+ const framework = projectSettings.framework || '';
33863
+ const deps = Object.assign({}, pkg === null || pkg === void 0 ? void 0 : pkg.dependencies, pkg === null || pkg === void 0 ? void 0 : pkg.devDependencies);
33864
+ const plugins = Object.keys(deps).filter(dep => dep.startsWith('vercel-plugin-'));
33865
+ const hasDotOutput = Object.keys(files).some(file => file.startsWith('.output/'));
33866
+ const hasMiddleware = Boolean(files['_middleware.js'] || files['_middleware.ts']);
33867
+ const metadata = {
33868
+ plugins,
33869
+ hasDotOutput,
33870
+ hasMiddleware,
33871
+ };
33872
+ const isEnabled = enableFlag ||
33873
+ hasMiddleware ||
33874
+ hasDotOutput ||
33875
+ enableFileSystemApiFrameworks.has(framework);
33876
+ if (!isEnabled) {
33877
+ return { metadata, fsApiBuilder: null, reason: 'Flag not enabled.' };
33878
+ }
33879
+ if ((vercelConfig === null || vercelConfig === void 0 ? void 0 : vercelConfig.builds) && vercelConfig.builds.length > 0) {
33880
+ return {
33881
+ metadata,
33882
+ fsApiBuilder: null,
33883
+ reason: 'Detected `builds` in vercel.json. Please remove it in favor of CLI plugins.',
33884
+ };
33885
+ }
33886
+ if (Object.values((vercelConfig === null || vercelConfig === void 0 ? void 0 : vercelConfig.functions) || {}).some(fn => !!fn.runtime)) {
33887
+ return {
33888
+ metadata,
33889
+ fsApiBuilder: null,
33890
+ reason: 'Detected `functions.runtime` in vercel.json. Please remove it in favor of CLI plugins.',
33891
+ };
33892
+ }
33893
+ if (process.env.HUGO_VERSION) {
33894
+ return {
33895
+ metadata,
33896
+ fsApiBuilder: null,
33897
+ reason: 'Detected `HUGO_VERSION` environment variable. Please remove it.',
33898
+ };
33899
+ }
33900
+ if (process.env.ZOLA_VERSION) {
33901
+ return {
33902
+ metadata,
33903
+ fsApiBuilder: null,
33904
+ reason: 'Detected `ZOLA_VERSION` environment variable. Please remove it.',
33905
+ };
33906
+ }
33907
+ if (process.env.GUTENBERG_VERSION) {
33908
+ return {
33909
+ metadata,
33910
+ fsApiBuilder: null,
33911
+ reason: 'Detected `GUTENBERG_VERSION` environment variable. Please remove it.',
33912
+ };
33913
+ }
33914
+ const invalidBuilder = builders.find(({ use }) => {
33915
+ const valid = _1.isOfficialRuntime('go', use) ||
33916
+ _1.isOfficialRuntime('python', use) ||
33917
+ _1.isOfficialRuntime('ruby', use) ||
33918
+ _1.isOfficialRuntime('node', use) ||
33919
+ _1.isOfficialRuntime('next', use) ||
33920
+ _1.isOfficialRuntime('static', use) ||
33921
+ _1.isOfficialRuntime('static-build', use);
33922
+ return !valid;
33923
+ });
33924
+ if (invalidBuilder) {
33925
+ return {
33926
+ metadata,
33927
+ fsApiBuilder: null,
33928
+ reason: `Detected \`${invalidBuilder.use}\` in vercel.json. Please remove it in favor of CLI plugins.`,
33929
+ };
33930
+ }
33931
+ for (const lang of ['go', 'python', 'ruby']) {
33932
+ for (const { use } of builders) {
33933
+ const plugin = 'vercel-plugin-' + lang;
33934
+ if (_1.isOfficialRuntime(lang, use) && !deps[plugin]) {
33935
+ return {
33936
+ metadata,
33937
+ fsApiBuilder: null,
33938
+ reason: `Detected \`${lang}\` Serverless Function usage without plugin \`${plugin}\`. Please run \`npm i ${plugin}\`.`,
33939
+ };
33940
+ }
33941
+ }
33942
+ }
33943
+ if (framework === 'nuxtjs' ||
33944
+ framework === 'sveltekit' ||
33945
+ framework === 'redwoodjs') {
33946
+ return {
33947
+ metadata,
33948
+ fsApiBuilder: null,
33949
+ reason: `Detected framework \`${framework}\` that only supports legacy File System API. Please contact the framework author.`,
33950
+ };
33951
+ }
33952
+ if (framework === 'nextjs' && !hasDotOutput) {
33953
+ // Use the old pipeline if a custom output directory was specified for Next.js
33954
+ // because `vercel build` cannot ensure that the directory will be in the same
33955
+ // location as `.output`, which can break imports (not just nft.json files).
33956
+ if (projectSettings === null || projectSettings === void 0 ? void 0 : projectSettings.outputDirectory) {
33957
+ return {
33958
+ metadata,
33959
+ fsApiBuilder: null,
33960
+ reason: `Detected Next.js with Output Directory \`${projectSettings.outputDirectory}\` override. Please change it back to the default.`,
33961
+ };
33962
+ }
33963
+ const versionRange = deps['next'];
33964
+ if (!versionRange) {
33965
+ return {
33966
+ metadata,
33967
+ fsApiBuilder: null,
33968
+ reason: `Detected Next.js in Project Settings but missing \`next\` package.json dependencies. Please run \`npm i next\`.`,
33969
+ };
33970
+ }
33971
+ // TODO: We'll need to check the lockfile if one is present.
33972
+ if (versionRange !== 'latest' && versionRange !== 'canary') {
33973
+ const fixedVersion = semver_1.default.valid(semver_1.default.coerce(versionRange) || '');
33974
+ if (!fixedVersion || !semver_1.default.gte(fixedVersion, '12.0.0')) {
33975
+ return {
33976
+ metadata,
33977
+ fsApiBuilder: null,
33978
+ reason: `Detected legacy Next.js version "${versionRange}" in package.json. Please run \`npm i next@latest\` to upgrade.`,
33979
+ };
33980
+ }
33981
+ }
33982
+ }
33983
+ const frontendBuilder = builders.find(({ use }) => _1.isOfficialRuntime('next', use) ||
33984
+ _1.isOfficialRuntime('static', use) ||
33985
+ _1.isOfficialRuntime('static-build', use));
33986
+ const config = (frontendBuilder === null || frontendBuilder === void 0 ? void 0 : frontendBuilder.config) || {};
33987
+ const withTag = tag ? `@${tag}` : '';
33988
+ const fsApiBuilder = {
33989
+ use: `@vercelruntimes/file-system-api${withTag}`,
33990
+ src: '**',
33991
+ config: {
33992
+ ...config,
33993
+ fileSystemAPI: true,
33994
+ framework: config.framework || framework || null,
33995
+ projectSettings,
33996
+ hasMiddleware,
33997
+ hasDotOutput,
33998
+ },
33999
+ };
34000
+ return { metadata, fsApiBuilder, reason: null };
34001
+ }
34002
+ exports.detectFileSystemAPI = detectFileSystemAPI;
34003
+
34004
+
33842
34005
  /***/ }),
33843
34006
 
33844
34007
  /***/ 5224:
@@ -35070,7 +35233,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35070
35233
  return (mod && mod.__esModule) ? mod : { "default": mod };
35071
35234
  };
35072
35235
  Object.defineProperty(exports, "__esModule", ({ value: true }));
35073
- exports.getInputHash = exports.getPlatformEnv = exports.isStaticRuntime = exports.isOfficialRuntime = exports.updateRoutesManifest = exports.updateFunctionsManifest = exports.convertRuntimeToPlugin = exports.normalizePath = exports.readConfigFile = exports.DetectorFilesystem = exports.detectFramework = exports.detectApiExtensions = exports.detectApiDirectory = exports.detectOutputDirectory = exports.detectBuilders = exports.getIgnoreFilter = exports.scanParentDirs = exports.getLambdaOptionsFromFunction = exports.isSymbolicLink = exports.debug = exports.shouldServe = exports.streamToBuffer = exports.getSpawnOptions = exports.getDiscontinuedNodeVersions = exports.getLatestNodeVersion = exports.getNodeVersion = exports.runShellScript = exports.runPipInstall = exports.runBundleInstall = exports.runNpmInstall = exports.getNodeBinPath = exports.walkParentDirs = exports.spawnCommand = exports.execCommand = exports.runPackageJsonScript = exports.installDependencies = exports.getScriptName = exports.spawnAsync = exports.execAsync = exports.rename = exports.glob = exports.getWriteableDirectory = exports.download = exports.Prerender = exports.createLambda = exports.Lambda = exports.FileRef = exports.FileFsRef = exports.FileBlob = void 0;
35236
+ exports.getInputHash = exports.getPlatformEnv = exports.isStaticRuntime = exports.isOfficialRuntime = exports.updateRoutesManifest = exports.updateFunctionsManifest = exports.convertRuntimeToPlugin = exports.normalizePath = exports.readConfigFile = exports.DetectorFilesystem = exports.detectFramework = exports.detectFileSystemAPI = exports.detectApiExtensions = exports.detectApiDirectory = exports.detectOutputDirectory = exports.detectBuilders = exports.getIgnoreFilter = exports.scanParentDirs = exports.getLambdaOptionsFromFunction = exports.isSymbolicLink = exports.debug = exports.shouldServe = exports.streamToBuffer = exports.getSpawnOptions = exports.getDiscontinuedNodeVersions = exports.getLatestNodeVersion = exports.getNodeVersion = exports.runShellScript = exports.runPipInstall = exports.runBundleInstall = exports.runNpmInstall = exports.getNodeBinPath = exports.walkParentDirs = exports.spawnCommand = exports.execCommand = exports.runPackageJsonScript = exports.installDependencies = exports.getScriptName = exports.spawnAsync = exports.execAsync = exports.rename = exports.glob = exports.getWriteableDirectory = exports.download = exports.Prerender = exports.createLambda = exports.Lambda = exports.FileRef = exports.FileFsRef = exports.FileBlob = void 0;
35074
35237
  const crypto_1 = __webpack_require__(6417);
35075
35238
  const file_blob_1 = __importDefault(__webpack_require__(2397));
35076
35239
  exports.FileBlob = file_blob_1.default;
@@ -35127,6 +35290,8 @@ Object.defineProperty(exports, "detectBuilders", ({ enumerable: true, get: funct
35127
35290
  Object.defineProperty(exports, "detectOutputDirectory", ({ enumerable: true, get: function () { return detect_builders_1.detectOutputDirectory; } }));
35128
35291
  Object.defineProperty(exports, "detectApiDirectory", ({ enumerable: true, get: function () { return detect_builders_1.detectApiDirectory; } }));
35129
35292
  Object.defineProperty(exports, "detectApiExtensions", ({ enumerable: true, get: function () { return detect_builders_1.detectApiExtensions; } }));
35293
+ var detect_file_system_api_1 = __webpack_require__(1182);
35294
+ Object.defineProperty(exports, "detectFileSystemAPI", ({ enumerable: true, get: function () { return detect_file_system_api_1.detectFileSystemAPI; } }));
35130
35295
  var detect_framework_1 = __webpack_require__(5224);
35131
35296
  Object.defineProperty(exports, "detectFramework", ({ enumerable: true, get: function () { return detect_framework_1.detectFramework; } }));
35132
35297
  var filesystem_1 = __webpack_require__(461);
package/dist/types.d.ts CHANGED
@@ -21,7 +21,7 @@ export interface Files {
21
21
  export interface Config {
22
22
  [key: string]: string | string[] | boolean | number | {
23
23
  [key: string]: string;
24
- } | BuilderFunctions | undefined;
24
+ } | BuilderFunctions | ProjectSettings | undefined | null;
25
25
  maxLambdaSize?: string;
26
26
  includeFiles?: string | string[];
27
27
  excludeFiles?: string | string[];
@@ -35,11 +35,12 @@ export interface Config {
35
35
  [key: string]: string;
36
36
  };
37
37
  functions?: BuilderFunctions;
38
+ projectSettings?: ProjectSettings;
38
39
  outputDirectory?: string;
39
40
  installCommand?: string;
40
41
  buildCommand?: string;
41
42
  devCommand?: string;
42
- framework?: string;
43
+ framework?: string | null;
43
44
  nodeVersion?: string;
44
45
  }
45
46
  export interface Meta {
@@ -305,3 +306,16 @@ export interface BuilderFunctions {
305
306
  excludeFiles?: string;
306
307
  };
307
308
  }
309
+ export interface ProjectSettings {
310
+ framework?: string | null;
311
+ devCommand?: string | null;
312
+ installCommand?: string | null;
313
+ buildCommand?: string | null;
314
+ outputDirectory?: string | null;
315
+ rootDirectory?: string | null;
316
+ createdAt?: number;
317
+ autoExposeSystemEnvs?: boolean;
318
+ sourceFilesOutsideRootDirectory?: boolean;
319
+ directoryListing?: boolean;
320
+ gitForkProtection?: boolean;
321
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/build-utils",
3
- "version": "2.12.3-canary.42",
3
+ "version": "2.12.3-canary.43",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.js",
@@ -49,5 +49,5 @@
49
49
  "typescript": "4.3.4",
50
50
  "yazl": "2.4.3"
51
51
  },
52
- "gitHead": "d3ef240f6e01fff3d11d0499c9aaf892968748e3"
52
+ "gitHead": "01ea7b4b2a4acb47b6de5f593d9c33856caf4403"
53
53
  }