@@ -43,12 +43,17 @@ const getOverwritablePredicate = packageName => pathName => {
43
43
* from codegen, but maintain the newer dependency versions
44
44
* in existing package.json
45
45
*/
46
- const mergeManifest = ( fromContent , toContent ) => {
46
+ const mergeManifest = ( fromContent = { } , toContent ) => {
47
47
const merged = { } ;
48
48
const fromNames = Object . keys ( fromContent ) ;
49
49
for ( const name of fromNames ) {
50
50
if ( typeof toContent [ name ] === "object" ) {
51
51
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
+ }
52
57
if ( name === "dependencies" || name === "devDependencies" ) {
53
58
// Sort dependencies as done by lerna
54
59
merged [ name ] = Object . fromEntries ( Object . entries ( merged [ name ] ) . sort ( ) ) ;
@@ -62,6 +67,24 @@ const mergeManifest = (fromContent, toContent) => {
62
67
return merged ;
63
68
} ;
64
69
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
+
65
88
const copyToClients = async ( sourceDir , destinationDir ) => {
66
89
for ( const modelName of readdirSync ( sourceDir ) ) {
67
90
if ( modelName === "source" ) continue ;
@@ -90,6 +113,7 @@ const copyToClients = async (sourceDir, destinationDir) => {
90
113
? JSON . parse ( readFileSync ( destSubPath ) . toString ( ) )
91
114
: { } ;
92
115
const mergedManifest = mergeManifest ( packageManifest , destManifest ) ;
116
+ pinDependencies ( mergedManifest ) ;
93
117
writeFileSync (
94
118
destSubPath ,
95
119
JSON . stringify ( mergedManifest , null , 2 ) . concat ( `\n` )
0 commit comments