/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/@philcatterall/dataverse-gen@1.0.6/lib/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
#!/usr/bin/env node
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),process.env.SUPPRESS_NO_CONFIG_WARNING="true";const chalk=require("chalk"),MsalAuth_1=require("dataverse-ify/lib/webapi/node/MsalAuth"),Enquirer=require("enquirer"),fs=require("fs-extra"),path=require("path"),CodeWriter_1=require("./CodeWriter"),DataverseGenArgs_1=require("./DataverseGenArgs"),MetadataService_1=require("./MetadataService"),SchemaModel_1=require("./SchemaModel"),TemplateProvider_1=require("./TemplateProvider"),TypescriptGenerator_1=require("./TypescriptGenerator"),version_1=require("./version"),projectDir=path.resolve("."),packageDir=path.resolve(__dirname),configFileName=".dataverse-gen.json";function readConfig(){const e=path.join(projectDir,configFileName),t={};if(fs.existsSync(e)){console.log(chalk.white("Loading config: "+e));const t=fs.readFileSync(e).toString(),n=JSON.parse(t);return console.log(`${chalk.white.dim(JSON.stringify(n))}`),n}return t.entities=t.entities||[],t.actions=t.actions||[],t.functions=t.functions||[],t}function saveConfig(e,t){t.entities+t.actions+t.functions>0?(console.log(chalk.green("\n\nConfiguration updated:")),console.log(`${chalk.cyanBright(t.entities)} entities(s) added`),console.log(`${chalk.cyanBright(t.actions)} actions(s) added`),console.log(`${chalk.cyanBright(t.functions)} functions(s) added`)):console.log(chalk.yellow("No items added to configuration"));const n=path.join(projectDir,configFileName);fs.writeFileSync(n,JSON.stringify(e,null,2))}async function GetMetadataService(e){const t=new MetadataService_1.DataverseMetadataService;if(e.environmentUrl&&e.applicationId&&e.tenantId&&e.clientSecret)console.log(chalk.yellow("Using Client Secret Auth")),await t.authorize(e.environmentUrl,e.tenantId,e.applicationId,e.clientSecret);else if(e.environmentUrl)await t.authorize(e.environmentUrl);else{const n=await selectServer();e.environmentUrl="https://"+n,await t.authorize(e.environmentUrl)}return t}async function init(e){const t=path.resolve(packageDir,"../.dataverse-gen.template.json");initDataverseGenConfig(path.resolve(projectDir,configFileName),t);const n=await GetMetadataService(e),o=readConfig();saveConfig(o,await updateConfig(o,n)),await generateNow()&&await generate(e)}async function updateConfig(e,t){var n,o,a;await chooseOptions(e);const i={entities:0,actions:0,functions:0};if(!e.generateEntityTypes&&!e.generateFormContext)return e.entities=[],e.actions=[],e.functions=[],i;const r=await chooseTypesToGenerate(t,e);for(const t of r.entities)-1===(null===(n=e.entities)||void 0===n?void 0:n.indexOf(t))&&(e.entities.push(t),i.entities++);for(const t of r.actions)-1===(null===(o=e.actions)||void 0===o?void 0:o.indexOf(t))&&(e.actions.push(t),i.actions++);for(const t of r.functions)-1===(null===(a=e.functions)||void 0===a?void 0:a.indexOf(t))&&(e.functions.push(t),i.functions++);return i}async function generateNow(){return(await Enquirer.prompt({name:"generate",type:"confirm",message:"Would you like to generate the types now?"})).generate}async function getSchema(e){const t=new SchemaModel_1.SchemaModel(e);await t.loadEdmxMetadata();return{entities:t.EntityTypes.filter((e=>e.EntitySetName)).map((e=>e.Name)),actions:t.Actions.map((e=>e.Name)),functions:t.Functions.map((e=>e.Name))}}async function chooseTypesToGenerate(e,t){const n=await getSchema(e),o="[type to filter list, space to select]",a=chalk.whiteBright("[Space - Select] [Return Accept] [Scroll up and down to see more]");return await Enquirer.prompt([{name:"entities",type:"autocomplete",message:"Select entities to include "+o,multiple:!0,limit:10,footer:()=>a,choices:n.entities,initial:t.entities},{name:"actions",type:"autocomplete",message:"Select actions to include "+o,multiple:!0,limit:10,footer:()=>a,choices:n.actions,initial:t.actions},{name:"functions",type:"autocomplete",message:"Select functions to include "+o,multiple:!0,limit:10,footer:()=>a,choices:n.functions,initial:t.functions}])}async function chooseOptions(e){const t=await Enquirer.prompt([{name:"generateFormContext",type:"confirm",message:"Generate form context helpers?"},{name:"generateEntityTypes",type:"confirm",message:"Generate dataverse-ify entity types?"}]);e.generateFormContext=!0===t.generateFormContext,e.generateEntityTypes=!0===t.generateEntityTypes}function initDataverseGenConfig(e,t){fs.existsSync(e)?console.log(`dataverse-gen.json config already added: ${e}`):(console.log(`Initializing project with: ${e}`),fs.copyFileSync(t,e))}function eject(){var e;const t=(null===(e=readConfig().output)||void 0===e?void 0:e.templateRoot)||"./_templates",n=path.resolve(packageDir,"../_templates"),o=path.resolve(projectDir,t);if(console.log(`Ejecting templates to template root ${o}`),o.indexOf(n)>-1)throw new Error("Template source is the same as the target");fs.copySync(n,o)}async function generate(e){const t=e.connectedService||await GetMetadataService(e),n=readConfig(),o=new CodeWriter_1.FileSystemCodeWriter(n),a=new TemplateProvider_1.FileSystemTemplateProvider(n),i=new SchemaModel_1.SchemaModel(t,n);await i.generate();const r=new TypescriptGenerator_1.TypescriptGenerator(i,o,a,n);await r.generate()}async function selectServer(){const e=(0,MsalAuth_1.getAllUsers)();if(console.log(chalk.blue("Run 'npx dataverse-auth' to add a new Microsoft Dataverse environment")),0===e.length)return void console.log("No server auth tokens found.");let t=1;const n=[];for(const o of e)console.log(` (${t})  ${o.environment} ${o.userName}`),n.push(o.environment),t++;const o=await Enquirer.prompt({name:"number",style:"number",type:"numeral",min:1,max:n.length,round:0,message:"Select server to connect to",validate:e=>!(e<1||e>n.length)||chalk.red(`Please select a value between 1 and ${n.length}`)}),a=n[o.number-1];return console.log(`Using server: ${a}`),a}async function main(){console.log(chalk.yellow("\n       __      __                                        _ ____     \n  ____/ /___ _/ /_____ __   _____  _____________        (_) __/_  __\n / __  / __ `/ __/ __ `/ | / / _ \\/ ___/ ___/ _ \\______/ / /_/ / / /\n/ /_/ / /_/ / /_/ /_/ /| |/ /  __/ /  (__  )  __/_____/ / __/ /_/ / \n\\__,_/\\__,_/\\__/\\__,_/ |___/\\___/_/  /____/\\___/     /_/_/  \\__, /  \n                                                           /____/   \n")),console.log(`dataverse-gen v${version_1.version}`),console.log(chalk.gray("Running from package:"+packageDir));const e=new DataverseGenArgs_1.DataverseGenArgs(process.argv.slice(2));switch(e.command){case DataverseGenArgs_1.DataverseGenCommands.Help:e.outputHelp();break;case DataverseGenArgs_1.DataverseGenCommands.Init:await init(e);break;case DataverseGenArgs_1.DataverseGenCommands.Eject:eject();break;default:await generate(e)}}main().then((()=>{console.log(chalk.green("\nComplete!"))}),(e=>{const t=e.message||e;console.log(chalk.red(`\nError:${t}`)),e.stack&&(console.log(`Stack:${e.stack}`),console.log(JSON.stringify(e)))}));
//# sourceMappingURL=/sm/ab18c436df249d7859e1cbb3b4ddba8371de8be55ceaa44d29aa60b158c8d923.map