@vercel/build-utils 8.8.0 → 9.0.0
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.
- package/CHANGELOG.md +12 -0
- package/dist/fs/run-user-scripts.d.ts +16 -8
- package/dist/fs/run-user-scripts.js +37 -27
- package/dist/index.js +201 -1790
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# @vercel/build-utils
|
2
2
|
|
3
|
+
## 9.0.0
|
4
|
+
|
5
|
+
### Major Changes
|
6
|
+
|
7
|
+
- Change getPathOverrideForPackageManager() to use detectedLockfile argument ([#12813](https://github.com/vercel/vercel/pull/12813))
|
8
|
+
|
9
|
+
### Patch Changes
|
10
|
+
|
11
|
+
- Refactor build-util usage to reuse detected lockfile ([#12813](https://github.com/vercel/vercel/pull/12813))
|
12
|
+
|
13
|
+
- add support for `images.qualities` ([#12813](https://github.com/vercel/vercel/pull/12813))
|
14
|
+
|
3
15
|
## 8.8.0
|
4
16
|
|
5
17
|
### Minor Changes
|
@@ -37,6 +37,11 @@ export interface ScanParentDirsResult {
|
|
37
37
|
* `undefined` if not a Turborepo project.
|
38
38
|
*/
|
39
39
|
turboSupportsCorepackHome?: boolean;
|
40
|
+
/**
|
41
|
+
* Name of the lockfile (`yarn.lock`, `package-lock.json`, ...) detected
|
42
|
+
* or `undefined` if no lockfile was detected.
|
43
|
+
*/
|
44
|
+
detectedLockfile?: string;
|
40
45
|
}
|
41
46
|
export interface TraverseUpDirectoriesProps {
|
42
47
|
/**
|
@@ -97,7 +102,7 @@ export declare function runNpmInstall(destPath: string, args?: string[], spawnOp
|
|
97
102
|
* Prepares the input environment based on the used package manager and lockfile
|
98
103
|
* versions.
|
99
104
|
*/
|
100
|
-
export declare function getEnvForPackageManager({ cliType, lockfileVersion, packageJsonPackageManager, nodeVersion, env, packageJsonEngines, turboSupportsCorepackHome, }: {
|
105
|
+
export declare function getEnvForPackageManager({ cliType, lockfileVersion, packageJsonPackageManager, nodeVersion, env, packageJsonEngines, turboSupportsCorepackHome, detectedLockfile, }: {
|
101
106
|
cliType: CliType;
|
102
107
|
lockfileVersion: number | undefined;
|
103
108
|
packageJsonPackageManager?: string | undefined;
|
@@ -107,6 +112,7 @@ export declare function getEnvForPackageManager({ cliType, lockfileVersion, pack
|
|
107
112
|
};
|
108
113
|
packageJsonEngines?: PackageJson.Engines;
|
109
114
|
turboSupportsCorepackHome?: boolean | undefined;
|
115
|
+
detectedLockfile: string | undefined;
|
110
116
|
}): {
|
111
117
|
[x: string]: string | undefined;
|
112
118
|
};
|
@@ -114,13 +120,14 @@ export declare function getEnvForPackageManager({ cliType, lockfileVersion, pack
|
|
114
120
|
* Helper to get the binary paths that link to the used package manager.
|
115
121
|
* Note: Make sure it doesn't contain any `console.log` calls.
|
116
122
|
*/
|
117
|
-
export declare function getPathOverrideForPackageManager({ cliType, lockfileVersion, corepackPackageManager, corepackEnabled, packageJsonEngines, }: {
|
123
|
+
export declare function getPathOverrideForPackageManager({ cliType, lockfileVersion, corepackPackageManager, corepackEnabled, packageJsonEngines, detectedLockfile, }: {
|
118
124
|
cliType: CliType;
|
119
125
|
lockfileVersion: number | undefined;
|
120
126
|
corepackPackageManager: string | undefined;
|
121
127
|
nodeVersion: NodeVersion | undefined;
|
122
128
|
corepackEnabled?: boolean;
|
123
129
|
packageJsonEngines?: PackageJson.Engines;
|
130
|
+
detectedLockfile?: string;
|
124
131
|
}): {
|
125
132
|
/**
|
126
133
|
* Which lockfile was detected.
|
@@ -136,24 +143,24 @@ export declare function getPathOverrideForPackageManager({ cliType, lockfileVers
|
|
136
143
|
*/
|
137
144
|
path: string | undefined;
|
138
145
|
};
|
139
|
-
export declare function detectPackageManager(cliType: CliType, lockfileVersion: number | undefined): {
|
146
|
+
export declare function detectPackageManager(cliType: CliType, lockfileVersion: number | undefined, detectedLockfile: string | undefined): {
|
140
147
|
path: string;
|
141
|
-
detectedLockfile: string;
|
148
|
+
detectedLockfile: string | undefined;
|
142
149
|
detectedPackageManager: string;
|
143
150
|
pnpmVersionRange: string;
|
144
151
|
} | {
|
145
152
|
path: undefined;
|
146
|
-
detectedLockfile: string;
|
153
|
+
detectedLockfile: string | undefined;
|
147
154
|
detectedPackageManager: string;
|
148
155
|
pnpmVersionRange: string;
|
149
156
|
} | {
|
150
157
|
path: string;
|
151
|
-
detectedLockfile: string;
|
158
|
+
detectedLockfile: string | undefined;
|
152
159
|
detectedPackageManager: string;
|
153
160
|
pnpmVersionRange?: undefined;
|
154
161
|
} | {
|
155
162
|
path: undefined;
|
156
|
-
detectedLockfile: string;
|
163
|
+
detectedLockfile: string | undefined;
|
157
164
|
detectedPackageManager: string;
|
158
165
|
pnpmVersionRange?: undefined;
|
159
166
|
} | undefined;
|
@@ -162,13 +169,14 @@ export declare function detectPackageManager(cliType: CliType, lockfileVersion:
|
|
162
169
|
* Note: Make sure it doesn't contain any `console.log` calls.
|
163
170
|
* @deprecated use `getEnvForPackageManager` instead
|
164
171
|
*/
|
165
|
-
export declare function getPathForPackageManager({ cliType, lockfileVersion, nodeVersion, env, }: {
|
172
|
+
export declare function getPathForPackageManager({ cliType, lockfileVersion, nodeVersion, env, detectedLockfile, }: {
|
166
173
|
cliType: CliType;
|
167
174
|
lockfileVersion: number | undefined;
|
168
175
|
nodeVersion: NodeVersion | undefined;
|
169
176
|
env: {
|
170
177
|
[x: string]: string | undefined;
|
171
178
|
};
|
179
|
+
detectedLockfile: string;
|
172
180
|
}): {
|
173
181
|
/**
|
174
182
|
* Which lockfile was detected.
|
@@ -280,7 +280,6 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
|
|
280
280
|
if (bunLock && hasYarnLock) {
|
281
281
|
cliType = "bun";
|
282
282
|
lockfilePath = bunLockPath;
|
283
|
-
lockfileVersion = bunLockTextPath ? 1 : 0;
|
284
283
|
} else if (hasYarnLock) {
|
285
284
|
cliType = "yarn";
|
286
285
|
lockfilePath = yarnLockPath;
|
@@ -295,7 +294,6 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
|
|
295
294
|
} else if (bunLock) {
|
296
295
|
cliType = "bun";
|
297
296
|
lockfilePath = bunLockPath;
|
298
|
-
lockfileVersion = bunLockTextPath ? 1 : 0;
|
299
297
|
} else {
|
300
298
|
cliType = detectPackageManagerNameWithoutLockfile(
|
301
299
|
packageJsonPackageManager,
|
@@ -310,7 +308,8 @@ async function scanParentDirs(destPath, readPackageJson = false, base = "/") {
|
|
310
308
|
lockfilePath,
|
311
309
|
lockfileVersion,
|
312
310
|
packageJsonPath,
|
313
|
-
turboSupportsCorepackHome
|
311
|
+
turboSupportsCorepackHome,
|
312
|
+
detectedLockfile: lockfilePath ? import_path.default.basename(lockfilePath) : void 0
|
314
313
|
};
|
315
314
|
}
|
316
315
|
async function checkTurboSupportsCorepack(turboVersionRange, rootDir) {
|
@@ -436,7 +435,8 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, nodeVersion)
|
|
436
435
|
packageJson,
|
437
436
|
lockfileVersion,
|
438
437
|
packageJsonPackageManager,
|
439
|
-
turboSupportsCorepackHome
|
438
|
+
turboSupportsCorepackHome,
|
439
|
+
detectedLockfile
|
440
440
|
} = await scanParentDirs(destPath, true);
|
441
441
|
if (!packageJsonPath) {
|
442
442
|
(0, import_debug.default)(
|
@@ -470,7 +470,8 @@ async function runNpmInstall(destPath, args = [], spawnOpts, meta, nodeVersion)
|
|
470
470
|
nodeVersion,
|
471
471
|
env,
|
472
472
|
packageJsonEngines: packageJson?.engines,
|
473
|
-
turboSupportsCorepackHome
|
473
|
+
turboSupportsCorepackHome,
|
474
|
+
detectedLockfile
|
474
475
|
});
|
475
476
|
let commandArgs;
|
476
477
|
const isPotentiallyBrokenNpm = cliType === "npm" && (nodeVersion?.major === 16 || opts.env.PATH?.includes("/node16/bin-npm7")) && !args.includes("--legacy-peer-deps") && spawnOpts?.env?.ENABLE_EXPERIMENTAL_COREPACK !== "1";
|
@@ -524,24 +525,22 @@ function getEnvForPackageManager({
|
|
524
525
|
nodeVersion,
|
525
526
|
env,
|
526
527
|
packageJsonEngines,
|
527
|
-
turboSupportsCorepackHome
|
528
|
+
turboSupportsCorepackHome,
|
529
|
+
detectedLockfile
|
528
530
|
}) {
|
529
531
|
const corepackEnabled = usingCorepack(
|
530
532
|
env,
|
531
533
|
packageJsonPackageManager,
|
532
534
|
turboSupportsCorepackHome
|
533
535
|
);
|
534
|
-
const {
|
535
|
-
detectedLockfile,
|
536
|
-
detectedPackageManager,
|
537
|
-
path: newPath
|
538
|
-
} = getPathOverrideForPackageManager({
|
536
|
+
const { detectedPackageManager, path: newPath } = getPathOverrideForPackageManager({
|
539
537
|
cliType,
|
540
538
|
lockfileVersion,
|
541
539
|
corepackPackageManager: packageJsonPackageManager,
|
542
540
|
nodeVersion,
|
543
541
|
corepackEnabled,
|
544
|
-
packageJsonEngines
|
542
|
+
packageJsonEngines,
|
543
|
+
detectedLockfile
|
545
544
|
});
|
546
545
|
if (corepackEnabled) {
|
547
546
|
(0, import_debug.default)(
|
@@ -625,9 +624,14 @@ function getPathOverrideForPackageManager({
|
|
625
624
|
lockfileVersion,
|
626
625
|
corepackPackageManager,
|
627
626
|
corepackEnabled = true,
|
628
|
-
packageJsonEngines
|
627
|
+
packageJsonEngines,
|
628
|
+
detectedLockfile
|
629
629
|
}) {
|
630
|
-
const detectedPackageManger = detectPackageManager(
|
630
|
+
const detectedPackageManger = detectPackageManager(
|
631
|
+
cliType,
|
632
|
+
lockfileVersion,
|
633
|
+
detectedLockfile
|
634
|
+
);
|
631
635
|
if (!corepackPackageManager || !corepackEnabled) {
|
632
636
|
if (cliType === "pnpm" && packageJsonEngines?.pnpm) {
|
633
637
|
checkEnginesPnpmAgainstDetected(
|
@@ -718,7 +722,7 @@ function validateVersionSpecifier(version) {
|
|
718
722
|
packageVersion
|
719
723
|
};
|
720
724
|
}
|
721
|
-
function detectPackageManager(cliType, lockfileVersion) {
|
725
|
+
function detectPackageManager(cliType, lockfileVersion, detectedLockfile) {
|
722
726
|
switch (cliType) {
|
723
727
|
case "npm":
|
724
728
|
return void 0;
|
@@ -727,21 +731,21 @@ function detectPackageManager(cliType, lockfileVersion) {
|
|
727
731
|
case "pnpm 7":
|
728
732
|
return {
|
729
733
|
path: "/pnpm7/node_modules/.bin",
|
730
|
-
detectedLockfile
|
734
|
+
detectedLockfile,
|
731
735
|
detectedPackageManager: "pnpm@7.x",
|
732
736
|
pnpmVersionRange: "7.x"
|
733
737
|
};
|
734
738
|
case "pnpm 8":
|
735
739
|
return {
|
736
740
|
path: "/pnpm8/node_modules/.bin",
|
737
|
-
detectedLockfile
|
741
|
+
detectedLockfile,
|
738
742
|
detectedPackageManager: "pnpm@8.x",
|
739
743
|
pnpmVersionRange: "8.x"
|
740
744
|
};
|
741
745
|
case "pnpm 9":
|
742
746
|
return {
|
743
747
|
path: "/pnpm9/node_modules/.bin",
|
744
|
-
detectedLockfile
|
748
|
+
detectedLockfile,
|
745
749
|
detectedPackageManager: "pnpm@9.x",
|
746
750
|
pnpmVersionRange: "9.x"
|
747
751
|
};
|
@@ -749,7 +753,7 @@ function detectPackageManager(cliType, lockfileVersion) {
|
|
749
753
|
return {
|
750
754
|
// undefined because pnpm@6 is the current default in the build container
|
751
755
|
path: void 0,
|
752
|
-
detectedLockfile
|
756
|
+
detectedLockfile,
|
753
757
|
detectedPackageManager: "pnpm@6.x",
|
754
758
|
pnpmVersionRange: "6.x"
|
755
759
|
};
|
@@ -759,13 +763,13 @@ function detectPackageManager(cliType, lockfileVersion) {
|
|
759
763
|
case "bun":
|
760
764
|
return {
|
761
765
|
path: "/bun1",
|
762
|
-
detectedLockfile
|
766
|
+
detectedLockfile,
|
763
767
|
detectedPackageManager: "bun@1.x"
|
764
768
|
};
|
765
769
|
case "yarn":
|
766
770
|
return {
|
767
771
|
path: void 0,
|
768
|
-
detectedLockfile
|
772
|
+
detectedLockfile,
|
769
773
|
detectedPackageManager: "yarn"
|
770
774
|
};
|
771
775
|
}
|
@@ -774,14 +778,16 @@ function getPathForPackageManager({
|
|
774
778
|
cliType,
|
775
779
|
lockfileVersion,
|
776
780
|
nodeVersion,
|
777
|
-
env
|
781
|
+
env,
|
782
|
+
detectedLockfile
|
778
783
|
}) {
|
779
784
|
const corepackEnabled = env.ENABLE_EXPERIMENTAL_COREPACK === "1";
|
780
785
|
let overrides = getPathOverrideForPackageManager({
|
781
786
|
cliType,
|
782
787
|
lockfileVersion,
|
783
788
|
corepackPackageManager: void 0,
|
784
|
-
nodeVersion
|
789
|
+
nodeVersion,
|
790
|
+
detectedLockfile
|
785
791
|
});
|
786
792
|
if (corepackEnabled) {
|
787
793
|
overrides = NO_OVERRIDE;
|
@@ -816,7 +822,8 @@ async function runCustomInstallCommand({
|
|
816
822
|
lockfileVersion,
|
817
823
|
packageJson,
|
818
824
|
packageJsonPackageManager,
|
819
|
-
turboSupportsCorepackHome
|
825
|
+
turboSupportsCorepackHome,
|
826
|
+
detectedLockfile
|
820
827
|
} = await scanParentDirs(destPath, true);
|
821
828
|
const env = getEnvForPackageManager({
|
822
829
|
cliType,
|
@@ -825,7 +832,8 @@ async function runCustomInstallCommand({
|
|
825
832
|
nodeVersion,
|
826
833
|
env: spawnOpts?.env || {},
|
827
834
|
packageJsonEngines: packageJson?.engines,
|
828
|
-
turboSupportsCorepackHome
|
835
|
+
turboSupportsCorepackHome,
|
836
|
+
detectedLockfile
|
829
837
|
});
|
830
838
|
(0, import_debug.default)(`Running with $PATH:`, env?.PATH || "");
|
831
839
|
await execCommand(installCommand, {
|
@@ -841,7 +849,8 @@ async function runPackageJsonScript(destPath, scriptNames, spawnOpts) {
|
|
841
849
|
cliType,
|
842
850
|
lockfileVersion,
|
843
851
|
packageJsonPackageManager,
|
844
|
-
turboSupportsCorepackHome
|
852
|
+
turboSupportsCorepackHome,
|
853
|
+
detectedLockfile
|
845
854
|
} = await scanParentDirs(destPath, true);
|
846
855
|
const scriptName = getScriptName(
|
847
856
|
packageJson,
|
@@ -861,7 +870,8 @@ async function runPackageJsonScript(destPath, scriptNames, spawnOpts) {
|
|
861
870
|
nodeVersion: void 0,
|
862
871
|
env: (0, import_clone_env.cloneEnv)(process.env, spawnOpts?.env),
|
863
872
|
packageJsonEngines: packageJson?.engines,
|
864
|
-
turboSupportsCorepackHome
|
873
|
+
turboSupportsCorepackHome,
|
874
|
+
detectedLockfile
|
865
875
|
})
|
866
876
|
};
|
867
877
|
if (cliType === "npm") {
|