@@ -97,82 +97,89 @@ export class PackageJsonEditor {
9797 this . _sourceData = data ;
9898 this . _modified = false ;
9999
100- this . _dependencies = new Map < string , PackageJsonDependency > ( ) ;
101- this . _devDependencies = new Map < string , PackageJsonDependency > ( ) ;
102- this . _resolutions = new Map < string , PackageJsonDependency > ( ) ;
103- this . _dependenciesMeta = new Map < string , PackageJsonDependencyMeta > ( ) ;
104-
105- const dependencies : { [ key : string ] : string } = data . dependencies || { } ;
106- const optionalDependencies : { [ key : string ] : string } = data . optionalDependencies || { } ;
107- const peerDependencies : { [ key : string ] : string } = data . peerDependencies || { } ;
108-
109- const devDependencies : { [ key : string ] : string } = data . devDependencies || { } ;
110- const resolutions : { [ key : string ] : string } = data . resolutions || { } ;
111-
112- const dependenciesMeta : { [ key : string ] : { [ key : string ] : boolean } } = data . dependenciesMeta || { } ;
100+ const {
101+ dependencies = { } ,
102+ optionalDependencies = { } ,
103+ peerDependencies = { } ,
104+ devDependencies = { } ,
105+ resolutions = { } ,
106+ dependenciesMeta = { }
107+ } = data ;
113108
114109 const _onChange : ( ) => void = this . _onChange . bind ( this ) ;
115110
111+ const optionalDependenciesSet : Set < string > = new Set ( Object . keys ( optionalDependencies ) ) ;
112+ const peerDependenciesSet : Set < string > = new Set ( Object . keys ( peerDependencies ) ) ;
116113 try {
117- Object . entries ( dependencies || { } ) . forEach ( ( [ packageName , version ] : [ string , string ] ) => {
118- if ( Object . prototype . hasOwnProperty . call ( optionalDependencies , packageName ) ) {
119- throw new Error (
120- `The package "${ packageName } " cannot be listed in both ` +
121- `"dependencies" and "optionalDependencies"`
122- ) ;
123- }
124- if ( Object . prototype . hasOwnProperty . call ( peerDependencies , packageName ) ) {
125- throw new Error (
126- `The package "${ packageName } " cannot be listed in both "dependencies" and "peerDependencies"`
127- ) ;
128- }
114+ const dependenciesMapEntries : [ string , PackageJsonDependency ] [ ] = Object . entries ( dependencies ) . map (
115+ ( [ packageName , version ] : [ string , string ] ) => {
116+ if ( optionalDependenciesSet . has ( packageName ) ) {
117+ throw new Error (
118+ `The package "${ packageName } " cannot be listed in both ` +
119+ `"dependencies" and "optionalDependencies"`
120+ ) ;
121+ }
122+ if ( peerDependenciesSet . has ( packageName ) ) {
123+ throw new Error (
124+ `The package "${ packageName } " cannot be listed in both "dependencies" and "peerDependencies"`
125+ ) ;
126+ }
129127
130- this . _dependencies . set (
131- packageName ,
132- new PackageJsonDependency ( packageName , version , DependencyType . Regular , _onChange )
133- ) ;
134- } ) ;
128+ return [
129+ packageName ,
130+ new PackageJsonDependency ( packageName , version , DependencyType . Regular , _onChange )
131+ ] ;
132+ }
133+ ) ;
135134
136- Object . entries ( optionalDependencies || { } ) . forEach ( ( [ packageName , version ] : [ string , string ] ) => {
137- if ( Object . prototype . hasOwnProperty . call ( peerDependencies , packageName ) ) {
135+ const optionalDependenciesMapEntries : [ string , PackageJsonDependency ] [ ] = Object . entries (
136+ optionalDependencies
137+ ) . map ( ( [ packageName , version ] ) => {
138+ if ( peerDependenciesSet . has ( packageName ) ) {
138139 throw new Error (
139140 `The package "${ packageName } " cannot be listed in both ` +
140141 `"optionalDependencies" and "peerDependencies"`
141142 ) ;
142143 }
143- this . _dependencies . set (
144+ return [
144145 packageName ,
145146 new PackageJsonDependency ( packageName , version , DependencyType . Optional , _onChange )
146- ) ;
147- } ) ;
148-
149- Object . entries ( peerDependencies || { } ) . forEach ( ( [ packageName , version ] : [ string , string ] ) => {
150- this . _dependencies . set (
151- packageName ,
152- new PackageJsonDependency ( packageName , version , DependencyType . Peer , _onChange )
153- ) ;
147+ ] ;
154148 } ) ;
155149
156- Object . entries ( devDependencies || { } ) . forEach ( ( [ packageName , version ] : [ string , string ] ) => {
157- this . _devDependencies . set (
150+ const peerDependenciesMapEntries : [ string , PackageJsonDependency ] [ ] = Object . entries (
151+ peerDependencies
152+ ) . map ( ( [ packageName , version ] ) => [
153+ packageName ,
154+ new PackageJsonDependency ( packageName , version , DependencyType . Peer , _onChange )
155+ ] ) ;
156+
157+ this . _dependencies = new Map ( [
158+ ...dependenciesMapEntries ,
159+ ...optionalDependenciesMapEntries ,
160+ ...peerDependenciesMapEntries
161+ ] ) ;
162+
163+ this . _devDependencies = new Map (
164+ Object . entries ( devDependencies ) . map ( ( [ packageName , version ] ) => [
158165 packageName ,
159166 new PackageJsonDependency ( packageName , version , DependencyType . Dev , _onChange )
160- ) ;
161- } ) ;
167+ ] )
168+ ) ;
162169
163- Object . entries ( resolutions || { } ) . forEach ( ( [ packageName , version ] : [ string , string ] ) => {
164- this . _resolutions . set (
170+ this . _resolutions = new Map (
171+ Object . entries ( resolutions ) . map ( ( [ packageName , version ] ) => [
165172 packageName ,
166173 new PackageJsonDependency ( packageName , version , DependencyType . YarnResolutions , _onChange )
167- ) ;
168- } ) ;
174+ ] )
175+ ) ;
169176
170- Object . entries ( dependenciesMeta || { } ) . forEach ( ( [ packageName , { injected = false } ] ) => {
171- this . _dependenciesMeta . set (
177+ this . _dependenciesMeta = new Map (
178+ Object . entries ( dependenciesMeta ) . map ( ( [ packageName , { injected = false } ] ) => [
172179 packageName ,
173180 new PackageJsonDependencyMeta ( packageName , injected , _onChange )
174- ) ;
175- } ) ;
181+ ] )
182+ ) ;
176183
177184 // (Do not sort this._resolutions because order may be significant; the RFC is unclear about that.)
178185 Sort . sortMapKeys ( this . _dependencies ) ;
0 commit comments