Skip to content

Commit 9fb8850

Browse files
authored
fix: use current versions of internal deps in new clients (#1496)
1 parent ead3816 commit 9fb8850

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

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

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// @ts-check
2-
const { join } = require("path");
2+
const { normalize, join } = require("path");
33
const { copySync, removeSync } = require("fs-extra");
44
const { readdirSync, lstatSync, readFileSync, existsSync, writeFileSync } = require("fs");
55

@@ -37,11 +37,10 @@ const getOverwritablePredicate = (packageName) => (pathName) => {
3737
* from codegen, but maintain the newer dependency versions
3838
* in existing package.json
3939
*/
40-
const mergeManifest = (fromContent = {}, toContent) => {
40+
const mergeManifest = (fromContent = {}, toContent = {}) => {
4141
const merged = {};
42-
const fromNames = Object.keys(fromContent);
43-
for (const name of fromNames) {
44-
if (typeof toContent[name] === "object") {
42+
for (const name of Object.keys(fromContent)) {
43+
if (typeof fromContent[name] === "object") {
4544
merged[name] = mergeManifest(fromContent[name], toContent[name]);
4645
if (name === "scripts" || name === "devDependencies") {
4746
// Allow target package.json(toContent) has its own special script or
@@ -52,6 +51,10 @@ const mergeManifest = (fromContent = {}, toContent) => {
5251
// Sort dependencies as done by lerna
5352
merged[name] = Object.fromEntries(Object.entries(merged[name]).sort());
5453
}
54+
} else if (name.indexOf("@aws-sdk/") === 0) {
55+
// If it's internal dependency, use current version in the repo if not
56+
// present in package.json
57+
merged[name] = toContent[name] || getInternalDepVersion(name);
5558
} else {
5659
// If key (say dependency) is present in both codegen and
5760
// package.json, we prefer latter
@@ -62,15 +65,24 @@ const mergeManifest = (fromContent = {}, toContent) => {
6265
};
6366

6467
/**
65-
* Remove "^" from the the version of dependencies on @aws-sdk packages.
66-
* e.g. "@aws-sdk/config-resolver": "^1.0.0-gamma.0"
67-
* => "@aws-sdk/config-resolver": "1.0.0-gamma.0"
68+
* Returns current version number of the internal dependency version passed.
6869
*/
69-
const pinDependencies = (manifest) => {
70-
const removeRangeVersion = ([name, version]) =>
71-
name.indexOf("@aws-sdk/") === 0 ? [name, version.replace("^", "")] : [name, version];
72-
manifest.dependencies = Object.fromEntries(Object.entries(manifest.dependencies).map(removeRangeVersion));
73-
manifest.devDependencies = Object.fromEntries(Object.entries(manifest.devDependencies).map(removeRangeVersion));
70+
const getInternalDepVersion = (depName) => {
71+
if (depName.indexOf("@aws-sdk/") !== 0) {
72+
throw new Error(`getInternalDepVersion called for external dep: "${depName}"`);
73+
}
74+
75+
const packageName = depName.substr(9);
76+
const packagesDir = normalize(join(__dirname, "..", "..", "packages"));
77+
const clientsDir = normalize(join(__dirname, "..", "..", "clients"));
78+
79+
if (existsSync(`${packagesDir}/${packageName}`)) {
80+
return require(`${packagesDir}/${packageName}/package.json`).version;
81+
} else if (existsSync(`${clientsDir}/${packageName}`)) {
82+
return require(`${clientsDir}/${packageName}/package.json`).version;
83+
}
84+
85+
throw new Error(`Internal dependency "${packageName}" not found`);
7486
};
7587

7688
const copyToClients = async (sourceDir, destinationDir) => {
@@ -95,7 +107,6 @@ const copyToClients = async (sourceDir, destinationDir) => {
95107
//copy manifest file
96108
const destManifest = existsSync(destSubPath) ? JSON.parse(readFileSync(destSubPath).toString()) : {};
97109
const mergedManifest = mergeManifest(packageManifest, destManifest);
98-
pinDependencies(mergedManifest);
99110
writeFileSync(destSubPath, JSON.stringify(mergedManifest, null, 2).concat(`\n`));
100111
} else if (overwritablePredicate(packageSub) || !existsSync(destSubPath)) {
101112
if (lstatSync(packageSubPath).isDirectory()) removeSync(destSubPath);

0 commit comments

Comments
 (0)