11// @ts -check
2- const { join } = require ( "path" ) ;
2+ const { normalize , join } = require ( "path" ) ;
33const { copySync, removeSync } = require ( "fs-extra" ) ;
44const { 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
7688const 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