3
3
import * as vscode from 'vscode' ;
4
4
import * as fs from 'fs' ;
5
5
import * as path from 'path' ;
6
+ const fetch = require ( 'node-fetch' ) ;
6
7
7
8
export function activate ( context : vscode . ExtensionContext ) {
8
-
9
9
// Implementation of the commands that has been defined in the package.json file
10
10
const listAllImportsDisposable = vscode . commands . registerCommand ( 'angulartools.listAllImports' , ( ) => {
11
11
// The code you place here will be executed every time your command is executed
12
12
var directoryPath : string = getWorkspaceFolder ( ) ;
13
13
const excludeDirectories = [ 'bin' , 'obj' , 'node_modules' , 'dist' , 'packages' , '.git' , '.vs' , '.github' ] ;
14
14
const isTypescriptFile = ( filename : string ) : boolean => filename . endsWith ( '.ts' ) && ! filename . endsWith ( 'index.ts' ) ;
15
15
const files = listFiles ( directoryPath , excludeDirectories , isTypescriptFile ) ;
16
- writeResult ( 'ReadMe-Imports.md' , files ) ;
16
+ writeResult ( files ) ;
17
17
} ) ;
18
18
context . subscriptions . push ( listAllImportsDisposable ) ;
19
19
@@ -24,6 +24,15 @@ export function activate(context: vscode.ExtensionContext) {
24
24
writeDirectoryStructure ( workspaceDirectory , 'ReadMe-ProjectDirectoryStructure.md' , directories ) ;
25
25
} ) ;
26
26
context . subscriptions . push ( projectDirectoryStructureDisposable ) ;
27
+
28
+ const packageJsonToMarkdownDisposable = vscode . commands . registerCommand ( 'angulartools.packageJsonToMarkdown' , ( ) => {
29
+ var directoryPath : string = getWorkspaceFolder ( ) ;
30
+ const excludeDirectories = [ 'bin' , 'obj' , 'node_modules' , 'dist' , 'packages' , '.git' , '.vs' , '.github' ] ;
31
+ const isPackageJson = ( filename : string ) : boolean => filename . toLowerCase ( ) . endsWith ( 'package.json' ) ;
32
+ const files = listFiles ( directoryPath , excludeDirectories , isPackageJson ) ;
33
+ writeMarkdownFile ( files ) ;
34
+ } ) ;
35
+ context . subscriptions . push ( packageJsonToMarkdownDisposable ) ;
27
36
}
28
37
29
38
function getWorkspaceFolder ( ) : string {
@@ -36,7 +45,7 @@ function getWorkspaceFolder(): string {
36
45
}
37
46
38
47
const imports : { [ module : string ] : number } = { } ;
39
- function writeResult ( filename : string , results : string [ ] ) {
48
+ function writeResult ( results : string [ ] ) {
40
49
if ( ! results ) { return ; }
41
50
for ( let i = 0 ; i < results . length ; i ++ ) {
42
51
var file = results [ i ] ;
@@ -69,15 +78,16 @@ function writeResult(filename: string, results: string[]) {
69
78
function listFiles (
70
79
dir : string ,
71
80
excludeDirectories : string [ ] ,
72
- isTypescriptFile : ( filename : string ) => boolean
81
+ isMatchingFile : ( filename : string ) => boolean
73
82
) : string [ ] {
74
83
const directories = listDirectories ( dir , excludeDirectories ) ;
84
+ directories . push ( dir ) ;
75
85
let files : string [ ] = [ ] ;
76
86
directories . forEach ( directory => {
77
87
const filesInDirectory = fs . readdirSync ( directory )
78
88
. map ( name => path . join ( directory , name ) )
79
89
. filter ( ( name : any ) => fs . lstatSync ( name ) . isFile ( ) )
80
- . filter ( ( name : string ) => isTypescriptFile ( name ) ) ;
90
+ . filter ( ( name : string ) => isMatchingFile ( name ) ) ;
81
91
files = files . concat ( filesInDirectory ) ;
82
92
} ) ;
83
93
return files ;
@@ -94,15 +104,6 @@ function writeDirectoryStructure(workSpaceDirectory: string, filename: string, d
94
104
angularToolsOutput . appendLine ( directoryName ) ;
95
105
} ) ;
96
106
angularToolsOutput . show ( ) ;
97
-
98
- // var output: string = `# Project Directory Structure\n\nWorkspace directory: ${workSpaceDirectory}\n\n## Directories\n\n` + "```text\n";
99
- // directories?.forEach(directoryFullPath => {
100
- // var directoryName = directoryFullPath.replace(workSpaceDirectory, '.');
101
- // output = output + directoryName + '\n';
102
- // });
103
- // output = output + "```\n";
104
- // var directoryPath: string = getWorkspaceFolder();
105
- // writeFileAndOpen(path.join(directoryPath, filename), output);
106
107
}
107
108
108
109
const isDirectory = ( directoryName : any ) => fs . lstatSync ( directoryName ) . isDirectory ( ) ;
@@ -129,6 +130,100 @@ function listDirectories(
129
130
return result ;
130
131
} ;
131
132
133
+ function writeMarkdownFile ( packageJsonFiles : string [ ] ) {
134
+ let devDependencies : string [ ] = [ ] ;
135
+ let dependencies : string [ ] = [ ] ;
136
+ let peerDependencies : string [ ] = [ ] ;
137
+ packageJsonFiles . forEach ( packageJsonFile => {
138
+ // console.log('Package file: ' + packageJsonFile);
139
+ const contents = fs . readFileSync ( packageJsonFile ) . toString ( 'utf8' ) ;
140
+ const packageJson = JSON . parse ( contents ) ;
141
+ if ( packageJson . devDependencies ) {
142
+ devDependencies = [ ...new Set ( [ ...devDependencies , ...Object . keys ( packageJson . devDependencies ) ] ) ]
143
+ }
144
+ if ( packageJson . dependencies ) {
145
+ dependencies = [ ...new Set ( [ ...dependencies , ...Object . keys ( packageJson . dependencies ) ] ) ]
146
+ }
147
+ if ( packageJson . peerDependencies ) {
148
+ peerDependencies = [ ...new Set ( [ ...peerDependencies , ...Object . keys ( packageJson . peerDependencies ) ] ) ]
149
+ }
150
+ } ) ;
151
+ // console.log('Dependencies: ' + dependencies.length);
152
+ // console.log('Dev dependencies: ' + devDependencies.length);
153
+ // console.log('Peer dependencies: ' + peerDependencies.length);
154
+
155
+ let dependenciesMarkdown = '' ;
156
+ let devDependenciesMarkdown = '' ;
157
+ let peerDependenciesMarkdown = '' ;
158
+ const dependenciesRequests : Promise < { name : string , description : string } > [ ] = [ ] ;
159
+ dependencies . sort ( ) . forEach ( pckName => {
160
+ dependenciesRequests . push ( makeRequest ( pckName ) ) ;
161
+ } ) ;
162
+ Promise . all ( dependenciesRequests ) . then ( responses => {
163
+ responses . forEach ( response => {
164
+ if ( response ) {
165
+ dependenciesMarkdown += `| ${ response . name } | ${ response . description } |\n` ;
166
+ }
167
+ } ) ;
168
+ } ) . then ( ( ) => {
169
+ const devDependenciesRequests : Promise < { name : string , description : string } > [ ] = [ ] ;
170
+ devDependencies . sort ( ) . forEach ( pckName => {
171
+ devDependenciesRequests . push ( makeRequest ( pckName ) ) ;
172
+ } ) ;
173
+ Promise . all ( devDependenciesRequests ) . then ( responses => {
174
+ responses . forEach ( response => {
175
+ if ( response ) {
176
+ devDependenciesMarkdown += `| ${ response . name } | ${ response . description } |\n` ;
177
+ }
178
+ } ) ;
179
+ } ) . then ( ( ) => {
180
+ const peerDependenciesRequests : Promise < { name : string , description : string } > [ ] = [ ] ;
181
+ peerDependencies . sort ( ) . forEach ( pckName => {
182
+ peerDependenciesRequests . push ( makeRequest ( pckName ) ) ;
183
+ } ) ;
184
+ Promise . all ( peerDependenciesRequests ) . then ( responses => {
185
+ responses . forEach ( response => {
186
+ if ( response ) {
187
+ peerDependenciesMarkdown += `| ${ response . name } | ${ response . description } |\n` ;
188
+ }
189
+ } ) ;
190
+ } ) . then ( ( ) => {
191
+ const markdownContent =
192
+ '# Package.json\n\n' +
193
+ '## Dependencies\n\n' +
194
+ '| Name | Description|\n' +
195
+ '| ---- |:-----------|\n' +
196
+ dependenciesMarkdown + '\n' +
197
+ '## Dev dependencies\n\n' +
198
+ '| Name | Description|\n' +
199
+ '| ---- |:-----------|\n' +
200
+ devDependenciesMarkdown + '\n' +
201
+ '## Peer dependencies\n\n' +
202
+ '| Name | Description|\n' +
203
+ '| ---- |:-----------|\n' +
204
+ peerDependenciesMarkdown
205
+ const workspaceFolder : string = getWorkspaceFolder ( ) ;
206
+ writeFileAndOpen ( path . join ( workspaceFolder , 'ReadMe-PackagesJson.md' ) , markdownContent ) ;
207
+ } ) ;
208
+ } ) ;
209
+ } ) ;
210
+ }
211
+
212
+ function makeRequest ( pckName : string ) : Promise < { name : string , description : string } > {
213
+ const uri = 'https://api.npms.io/v2/search?q=' + pckName + '%20not:deprecated,insecure,unstable' ;
214
+ const request = fetch ( uri ) . then ( ( res : any ) => res . json ( ) )
215
+ . then ( ( json : any ) => {
216
+ if ( json . results [ 0 ] && json . results [ 0 ] . package ) {
217
+ const packageName = json . results [ 0 ] . package . name ;
218
+ const packageDescription = json . results [ 0 ] . package . description ;
219
+ return { name : packageName , description : packageDescription } ;
220
+ } else {
221
+ console . log ( 'Package not found: ' + pckName ) ;
222
+ }
223
+ } ) ;
224
+ return request ;
225
+ }
226
+
132
227
function writeFileAndOpen ( filename : string , content : string ) {
133
228
fs . writeFile ( filename , content , function ( err ) {
134
229
if ( err ) {
0 commit comments