@@ -5,9 +5,9 @@ import * as chalk from "chalk";
5
5
import { getAllUsers } from "dataverse-ify/lib/webapi/node/MsalAuth" ;
6
6
import * as Enquirer from "enquirer" ;
7
7
import * as fs from "fs-extra" ;
8
- import * as minimist from "minimist" ;
9
8
import * as path from "path" ;
10
9
import { FileSystemCodeWriter } from "./CodeWriter" ;
10
+ import { DataverseGenArgs , DataverseGenCommands } from "./DataverseGenArgs" ;
11
11
import { DataverseGenOptions } from "./MetadataGeneratorConfig" ;
12
12
import { DataverseMetadataService , MetadataService } from "./MetadataService" ;
13
13
import { SchemaModel } from "./SchemaModel" ;
@@ -57,32 +57,38 @@ function saveConfig(
57
57
fs . writeFileSync ( configPath , JSON . stringify ( config , null , 2 ) ) ;
58
58
}
59
59
60
- function help ( ) : void {
61
- console . log ( " dataverse-gen init : Adds .dataverse-gen.json config file to your project" ) ;
62
- console . log ( " dataverse-gen eject : Adds the templates to your project to allow you to customize them!" ) ;
60
+ async function GetMetadataService ( args : DataverseGenArgs ) : Promise < DataverseMetadataService > {
61
+ const metadataService = new DataverseMetadataService ( ) ;
62
+ if ( args . environmentUrl && args . applicationId && args . tenantId && args . clientSecret ) {
63
+ console . log ( chalk . yellow ( "Using Client Secret Auth" ) ) ;
64
+ await metadataService . authorize ( args . environmentUrl , args . tenantId , args . applicationId , args . clientSecret ) ;
65
+ } else if ( args . environmentUrl ) {
66
+ await metadataService . authorize ( args . environmentUrl ) ;
67
+ } else {
68
+ const server = await selectServer ( ) ;
69
+ args . environmentUrl = "https://" + server ;
70
+ await metadataService . authorize ( args . environmentUrl ) ;
71
+ }
72
+ return metadataService ;
63
73
}
64
74
65
- async function init ( ) : Promise < void > {
75
+ async function init ( args : DataverseGenArgs ) : Promise < void > {
66
76
const pathToTemplate = path . resolve ( packageDir , "../.dataverse-gen.template.json" ) ;
67
77
const pathToOutput = path . resolve ( projectDir , configFileName ) ;
68
78
69
79
initDataverseGenConfig ( pathToOutput , pathToTemplate ) ;
70
80
71
- const server = await selectServer ( ) ;
72
- if ( server ) {
73
- // Load EDMX
74
- const metadataService = new DataverseMetadataService ( ) ;
75
- await metadataService . authorize ( "https://" + server ) ;
81
+ // Load EDMX
82
+ const metadataService = await GetMetadataService ( args ) ;
76
83
77
- // Load existing config (if there is one)
78
- const currentConfig = readConfig ( ) ;
79
- const updates = await updateConfig ( currentConfig , metadataService ) ;
84
+ // Load existing config (if there is one)
85
+ const currentConfig = readConfig ( ) ;
86
+ const updates = await updateConfig ( currentConfig , metadataService ) ;
80
87
81
- saveConfig ( currentConfig , updates ) ;
88
+ saveConfig ( currentConfig , updates ) ;
82
89
83
- if ( await generateNow ( ) ) {
84
- await generate ( server ) ;
85
- }
90
+ if ( await generateNow ( ) ) {
91
+ await generate ( args ) ;
86
92
}
87
93
}
88
94
@@ -230,19 +236,15 @@ function eject(): void {
230
236
fs . copySync ( source , target ) ;
231
237
}
232
238
233
- async function generate ( server ? : string ) : Promise < void > {
234
- const selectedServer = server || ( await selectServer ( ) ) ;
239
+ async function generate ( args : DataverseGenArgs ) : Promise < void > {
240
+ const metadataService = args . connectedService || ( await GetMetadataService ( args ) ) ;
235
241
const config : DataverseGenOptions = readConfig ( ) ;
236
- if ( selectedServer ) {
237
- const metadataService = new DataverseMetadataService ( ) ;
238
- await metadataService . authorize ( "https://" + selectedServer ) ;
239
- const codeWriter = new FileSystemCodeWriter ( config ) ;
240
- const templateProvider = new FileSystemTemplateProvider ( config ) ;
241
- const model = new SchemaModel ( metadataService , config ) ;
242
- await model . generate ( ) ;
243
- const codeGenerator = new TypescriptGenerator ( model , codeWriter , templateProvider , config ) ;
244
- await codeGenerator . generate ( ) ;
245
- }
242
+ const codeWriter = new FileSystemCodeWriter ( config ) ;
243
+ const templateProvider = new FileSystemTemplateProvider ( config ) ;
244
+ const model = new SchemaModel ( metadataService , config ) ;
245
+ await model . generate ( ) ;
246
+ const codeGenerator = new TypescriptGenerator ( model , codeWriter , templateProvider , config ) ;
247
+ await codeGenerator . generate ( ) ;
246
248
}
247
249
248
250
async function selectServer ( ) : Promise < string | undefined > {
@@ -296,23 +298,19 @@ async function main(): Promise<void> {
296
298
console . log ( `dataverse-gen v${ version } ` ) ;
297
299
console . log ( chalk . gray ( "Running from package:" + packageDir ) ) ;
298
300
299
- const args = minimist ( process . argv . slice ( 2 ) ) ;
300
- // Check command arg
301
- const mainArg = args . _ && args . _ [ 0 ] ;
302
- switch ( mainArg ) {
303
- case "help ":
304
- case "h ":
305
- case "?":
306
- help ( ) ;
301
+ const args = new DataverseGenArgs ( process . argv . slice ( 2 ) ) ;
302
+ switch ( args . command ) {
303
+ case DataverseGenCommands . Help :
304
+ args . outputHelp ( ) ;
307
305
break ;
308
- case " init " :
309
- await init ( ) ;
306
+ case DataverseGenCommands . Init :
307
+ await init ( args ) ;
310
308
break ;
311
- case " eject " :
309
+ case DataverseGenCommands . Eject :
312
310
eject ( ) ;
313
311
break ;
314
312
default :
315
- await generate ( args . s ) ;
313
+ await generate ( args ) ;
316
314
break ;
317
315
}
318
316
}
@@ -322,8 +320,10 @@ main().then(
322
320
console . log ( chalk . green ( "\nComplete!" ) ) ;
323
321
} ,
324
322
( ex ) => {
325
- if ( ex . message ) {
326
- console . log ( chalk . red ( `\nError:${ ex . message } ` ) ) ;
323
+ const message = ex . message || ex ;
324
+
325
+ console . log ( chalk . red ( `\nError:${ message } ` ) ) ;
326
+ if ( ex . stack ) {
327
327
console . log ( `Stack:${ ex . stack } ` ) ;
328
328
console . log ( JSON . stringify ( ex ) ) ;
329
329
}
0 commit comments