Skip to content

Commit 22c9c7b

Browse files
chore: allow un-overwritable scripts and devDependencies in package.json (#1207)
Co-authored-by: Trivikram Kamat <[email protected]>
1 parent 7e7ee6e commit 22c9c7b

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

scripts/generate-clients/copy-to-clients.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,17 @@ const getOverwritablePredicate = packageName => pathName => {
4343
* from codegen, but maintain the newer dependency versions
4444
* in existing package.json
4545
*/
46-
const mergeManifest = (fromContent, toContent) => {
46+
const mergeManifest = (fromContent = {}, toContent) => {
4747
const merged = {};
4848
const fromNames = Object.keys(fromContent);
4949
for (const name of fromNames) {
5050
if (typeof toContent[name] === "object") {
5151
merged[name] = mergeManifest(fromContent[name], toContent[name]);
52+
if (name === "scripts" || name === "devDependencies") {
53+
// Allow target package.json(toContent) has its own special script or
54+
// dev dependencies that won't be overwritten in codegen
55+
merged[name] = { ...toContent[name], ...merged[name] };
56+
}
5257
if (name === "dependencies" || name === "devDependencies") {
5358
// Sort dependencies as done by lerna
5459
merged[name] = Object.fromEntries(Object.entries(merged[name]).sort());
@@ -62,6 +67,24 @@ const mergeManifest = (fromContent, toContent) => {
6267
return merged;
6368
};
6469

70+
/**
71+
* Remove "^" from the the version of dependencies on @aws-sdk packages.
72+
* e.g. "@aws-sdk/config-resolver": "^1.0.0-gamma.0"
73+
* => "@aws-sdk/config-resolver": "1.0.0-gamma.0"
74+
*/
75+
const pinDependencies = manifest => {
76+
const removeRangeVersion = ([name, version]) =>
77+
name.indexOf("@aws-sdk/") === 0
78+
? [name, version.replace("^", "")]
79+
: [name, version];
80+
manifest.dependencies = Object.fromEntries(
81+
Object.entries(manifest.dependencies).map(removeRangeVersion)
82+
);
83+
manifest.devDependencies = Object.fromEntries(
84+
Object.entries(manifest.devDependencies).map(removeRangeVersion)
85+
);
86+
};
87+
6588
const copyToClients = async (sourceDir, destinationDir) => {
6689
for (const modelName of readdirSync(sourceDir)) {
6790
if (modelName === "source") continue;
@@ -90,6 +113,7 @@ const copyToClients = async (sourceDir, destinationDir) => {
90113
? JSON.parse(readFileSync(destSubPath).toString())
91114
: {};
92115
const mergedManifest = mergeManifest(packageManifest, destManifest);
116+
pinDependencies(mergedManifest);
93117
writeFileSync(
94118
destSubPath,
95119
JSON.stringify(mergedManifest, null, 2).concat(`\n`)

0 commit comments

Comments
 (0)