1
1
// @ts -check
2
- const { join } = require ( "path" ) ;
2
+ const { normalize , join } = require ( "path" ) ;
3
3
const { copySync, removeSync } = require ( "fs-extra" ) ;
4
4
const { readdirSync, lstatSync, readFileSync, existsSync, writeFileSync } = require ( "fs" ) ;
5
5
@@ -37,11 +37,10 @@ const getOverwritablePredicate = (packageName) => (pathName) => {
37
37
* from codegen, but maintain the newer dependency versions
38
38
* in existing package.json
39
39
*/
40
- const mergeManifest = ( fromContent = { } , toContent ) => {
40
+ const mergeManifest = ( fromContent = { } , toContent = { } ) => {
41
41
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" ) {
45
44
merged [ name ] = mergeManifest ( fromContent [ name ] , toContent [ name ] ) ;
46
45
if ( name === "scripts" || name === "devDependencies" ) {
47
46
// Allow target package.json(toContent) has its own special script or
@@ -52,6 +51,10 @@ const mergeManifest = (fromContent = {}, toContent) => {
52
51
// Sort dependencies as done by lerna
53
52
merged [ name ] = Object . fromEntries ( Object . entries ( merged [ name ] ) . sort ( ) ) ;
54
53
}
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 ) ;
55
58
} else {
56
59
// If key (say dependency) is present in both codegen and
57
60
// package.json, we prefer latter
@@ -62,15 +65,24 @@ const mergeManifest = (fromContent = {}, toContent) => {
62
65
} ;
63
66
64
67
/**
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.
68
69
*/
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` ) ;
74
86
} ;
75
87
76
88
const copyToClients = async ( sourceDir , destinationDir ) => {
@@ -95,7 +107,6 @@ const copyToClients = async (sourceDir, destinationDir) => {
95
107
//copy manifest file
96
108
const destManifest = existsSync ( destSubPath ) ? JSON . parse ( readFileSync ( destSubPath ) . toString ( ) ) : { } ;
97
109
const mergedManifest = mergeManifest ( packageManifest , destManifest ) ;
98
- pinDependencies ( mergedManifest ) ;
99
110
writeFileSync ( destSubPath , JSON . stringify ( mergedManifest , null , 2 ) . concat ( `\n` ) ) ;
100
111
} else if ( overwritablePredicate ( packageSub ) || ! existsSync ( destSubPath ) ) {
101
112
if ( lstatSync ( packageSubPath ) . isDirectory ( ) ) removeSync ( destSubPath ) ;
0 commit comments