@gooddata/create-gooddata-react-app
Advanced tools
Comparing version 0.10.3-0 to 0.11.0
@@ -1,1 +0,1 @@ | ||
"use strict";function _interopDefault(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var program=_interopDefault(require("commander")),chalk=_interopDefault(require("chalk")),path=_interopDefault(require("path")),execa=_interopDefault(require("execa")),Listr=_interopDefault(require("listr")),mkdirp=_interopDefault(require("mkdirp")),tar=_interopDefault(require("tar")),fs=_interopDefault(require("fs-extra")),globby=_interopDefault(require("globby")),kebabCase=_interopDefault(require("lodash/kebabCase")),flatMap=_interopDefault(require("lodash/flatMap")),inquirer=_interopDefault(require("inquirer"));const processTigerFile=async(e,a)=>{if(a){const a=e.replace(/--tiger(\..+)$/,"$1");await fs.remove(a),await fs.rename(e,a)}else await fs.remove(e)},processTigerFiles=async(e,a)=>{const t=path.posix.join(e,"./**/*--tiger.*").replace(/\\/g,"/"),r=await globby(t);return Promise.all(r.map(e=>processTigerFile(e,a)))},verboseLog=e=>{console.log(`[VERBOSE]: ${e}`)},DEFAULT_SCHEMA="https",getSchema=e=>{const a=/^(\w+):\/\//i.exec(e);return a&&a[1]?a[1]:""},getHostnameWithSchema=e=>getSchema(e)?e:`https://${e}`,sanitizeAppName=kebabCase,parseReplacementSpecTree=(e,a)=>Array.isArray(a)?{file:e,replacements:a}:flatMap(Object.entries(a),([a,t])=>parseReplacementSpecTree(path.join(e,a),t)),processFile=(e,a)=>async({file:t,replacements:r})=>{const o=await e(t,{encoding:"utf8",flag:"r"}),n=r.reduce((e,{regex:a,value:t,apply:r})=>r||void 0===r?e.replace(a,t):e,o);return a(t,n,{encoding:"utf8",flag:"w"})},replaceInFiles=async(e,a,t=fs.readFile,r=fs.writeFile)=>Promise.all(parseReplacementSpecTree(e,a).map(processFile(t,r))),performTemplateReplacements=async({targetDir:e,sanitizedAppName:a,hostname:t,backend:r,flavor:o})=>{const n="tiger"===r,s={"package.json":[{regex:/@gooddata\/gdc-app-name/,value:a},{regex:/@gooddata\/sdk-backend-bear/g,value:"@gooddata/sdk-backend-tiger",apply:n},{regex:/"refresh-ldm": "node .\/scripts\/refresh-ldm.js"/g,value:'"refresh-ldm": "node ./scripts/refresh-ldm.js --backend tiger"',apply:n},{regex:/HTTPS=true/g,value:"",apply:"https"!==(getSchema(t)||"https")},{regex:/PORT=3000/g,value:"PORT=8443",apply:n}],src:{[`constants.${o}`]:[{regex:/appName = "(.*?)"/,value:`appName = "${a}"`},{regex:/backend = "https:\/\/developer\.na\.gooddata\.com"/g,value:`backend = "${getHostnameWithSchema(t)}"`}],"setupProxy.js":[{regex:/proxy\("\/gdc"/g,value:'proxy("/api"',apply:n}],components:{Header:{["js"===o?"Header.js":"Header.tsx"]:[{regex:/import Aside from ".\/Aside";\n/g,value:"",apply:n},{regex:/<Aside \/>/g,value:"",apply:n}]}}}};return replaceInFiles(e,s)},getTargetDirPath=(e,a)=>path.resolve(a||process.cwd(),e),copyAppFiles=async({targetDir:e,flavor:a})=>{const t="js"===a?"bootstrap.js.tgz":"bootstrap.ts.tgz";return mkdirp(e),tar.x({file:path.resolve(__dirname,t),strip:1,cwd:e})},setupApp=async e=>{await performTemplateReplacements(e),await processTigerFiles(e.targetDir,"tiger"===e.backend)},runYarnInstall=({targetDir:e,install:a})=>a?execa("yarn",{cwd:e,stdio:[process.stdin,process.stdout,process.stderr]}).then(()=>!0).catch(()=>(console.log(chalk.red("Installation failed. Please make sure that you have yarn installed and try again.")),!1)):(console.log("Skipping installation because the --no-install flag was specified"),!0),outputFinalInstructions=({sanitizedAppName:e,install:a,targetDir:t})=>{console.log(`Success! Your GoodData-powered application "${e}" was created.`),console.log("You can start it using the following commands:"),console.log(chalk.cyan(` cd ${path.relative(process.cwd(),t)}`)),a||console.log(chalk.cyan(" yarn install")),console.log(chalk.cyan(" yarn start"))},main=async e=>{const a={...e,targetDir:getTargetDirPath(e.sanitizedAppName,e.targetDir)};a.verbose&&verboseLog(`Target directory: ${a.targetDir}`);const t=new Listr([{title:"Copy app files",task:()=>copyAppFiles(a)},{title:"Set up app",task:()=>setupApp(a)}]);await t.run(),await runYarnInstall(a)&&outputFinalInstructions(a)},inquireName=()=>inquirer.prompt({message:"What is your application name?",name:"name",type:"input"}).then(e=>e.name),inquireHostname=e=>inquirer.prompt([{message:"What is your hostname?",name:"hostname",type:"list",choices:[{value:"https://secure.gooddata.com"},{value:"https://developer.na.gooddata.com"},{value:"https://salesengineering.na.gooddata.com"},{name:"I have a custom hostname",value:"WHITE_LABELLED"}],when:()=>e},{message:"Insert your hostname",name:"hostname",type:"input",when:({hostname:a})=>"WHITE_LABELLED"===a||!e}]).then(e=>e.hostname),inquireFlavor=()=>inquirer.prompt({message:"What is your application desired flavor?",name:"flavor",type:"list",choices:[{name:"JavaScript",value:"js"},{name:"TypeScript",value:"ts"}]}).then(e=>e.flavor),getSanitizedAppName=async e=>{const a=e||await inquireName();if(!a)throw new Error("You must provide a name for your app");return sanitizeAppName(a)},getSanitizedFlavor=async e=>{return("ts"!==e&&"js"!==e?void 0:e)||inquireFlavor()},getBootstrapData=async(e,{hostname:a,backend:t,flavor:r})=>{return{sanitizedAppName:await getSanitizedAppName(e),hostname:a||await inquireHostname(!t||"bear"===t),flavor:await getSanitizedFlavor(r)}},parseConfig=(e,{hostname:a,appName:t,flavor:r})=>{if(!a)throw new Error("You must provide a hostname for your app");const o=sanitizeAppName(t||e);if(!o)throw new Error("You must provide a name for your app");if(void 0!==r&&"ts"!==r&&"js"!==r)throw new Error("You must provide valid flavor value");return{sanitizedAppName:o,hostname:a,flavor:r||"js"}},getBootstrapData$1=async(e,{config:a})=>{let t={};try{t=await fs.readJSON(a,{encoding:"utf8",flag:"r"})}catch(e){throw new Error("The config file specified using the -c option was not found. Please check that the path you provided is correct.")}return parseConfig(e,t)};process.on("unhandledRejection",e=>console.error(e.message)),program.name("@gooddata/create-react-app").arguments("[app-name]").option("--hostname <hostname>","URL of your GoodData host").option("-c, --config <config>","path to configuration file").option("--target-dir <path>",'path to the directory to create the app in (default: ".")').option("--no-install","skip yarn installing the app dependencies").option("--verbose","output additional logs, useful mainly for debugging and bug reports").option("--backend <backend>","setting backend of the app (default: bear backend)").option("--flavor <flavor>","language flavor of the app, either TypeScript (ts) or JavaScript (js)").action(async e=>{const a=program.config?getBootstrapData$1:getBootstrapData,t=await a(e,program);return main({...t,install:program.install,targetDir:program.targetDir,verbose:program.verbose,backend:program.backend})}).parse(process.argv); | ||
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var a=e(require("commander")),t=e(require("chalk")),r=e(require("path")),o=e(require("execa")),n=e(require("listr")),s=e(require("mkdirp")),i=e(require("tar")),p=e(require("fs-extra")),l=e(require("globby")),c=e(require("lodash/kebabCase")),d=e(require("lodash/flatMap")),g=e(require("inquirer"));const u=(e,a)=>r.posix.join(e,a).replace(/\\/g,"/"),m=async(e,a)=>{const t=u(e,"./**/*--tiger.*"),r=await l(t);return Promise.all(r.map(e=>(async(e,a)=>{if(a){const a=e.replace(/--tiger(\..+)$/,"$1");await p.remove(a),await p.rename(e,a)}else await p.remove(e)})(e,a)))},h=["./Dockerfile","./docker"],f=[],v=e=>{const a=/^(\w+):\/\//i.exec(e);return a&&a[1]?a[1]:""},y=e=>v(e)?e:"https://"+e,w=c,b=(e,a)=>Array.isArray(a)?{file:e,replacements:a}:d(Object.entries(a),([a,t])=>b(r.join(e,a),t)),k=async({targetDir:e,sanitizedAppName:a,hostname:t,backend:r,flavor:o})=>{const n="tiger"===r;return(async(e,a,t=p.readFile,r=p.writeFile)=>Promise.all(b(e,a).map(((e,a)=>async({file:t,replacements:r})=>{const o=await e(t,{encoding:"utf8",flag:"r"}),n=r.reduce((e,{regex:a,value:t,apply:r})=>r||void 0===r?e.replace(a,t):e,o);return a(t,n,{encoding:"utf8",flag:"w"})})(t,r))))(e,{"package.json":[{regex:/@gooddata\/gdc-app-name/,value:a},{regex:/@gooddata\/sdk-backend-bear/g,value:"@gooddata/sdk-backend-tiger",apply:n},{regex:/"refresh-ldm": "node .\/scripts\/refresh-ldm.js"/g,value:'"refresh-ldm": "node ./scripts/refresh-ldm.js --backend tiger"',apply:n},{regex:/HTTPS=true/g,value:"",apply:"https"!==(v(t)||"https")},{regex:/PORT=3000/g,value:"PORT=8443",apply:n}],src:{["constants."+o]:[{regex:/appName = "(.*?)"/,value:`appName = "${a}"`},{regex:/backend = "https:\/\/developer\.na\.gooddata\.com"/g,value:`backend = "${y(t)}"`}],"setupProxy.js":[{regex:/proxy\("\/gdc"/g,value:'proxy("/api"',apply:n}],components:{Header:{["js"===o?"Header.js":"Header.tsx"]:[{regex:/import Aside from ".\/Aside";\n/g,value:"",apply:n},{regex:/<Aside \/>/g,value:"",apply:n}]}}}})},x=async e=>{await k(e),await m(e.targetDir,"tiger"===e.backend),await(async(e,a)=>{const t=(a?h:f).map(a=>u(e,a));return Promise.all(t.map(e=>p.remove(e)))})(e.targetDir,"tiger"===e.backend)},j=async e=>{const a={...e,targetDir:(p=e.sanitizedAppName,l=e.targetDir,r.resolve(l||process.cwd(),p))};var p,l,c;a.verbose&&(c="Target directory: "+a.targetDir,console.log("[VERBOSE]: "+c));const d=new n([{title:"Copy app files",task:()=>(async({targetDir:e,flavor:a})=>{const t="js"===a?"bootstrap.js.tgz":"bootstrap.ts.tgz";return s(e),i.x({file:r.resolve(__dirname,t),strip:1,cwd:e})})(a)},{title:"Set up app",task:()=>x(a)}]);await d.run(),await(({targetDir:e,install:a})=>a?o("yarn",{cwd:e,stdio:[process.stdin,process.stdout,process.stderr]}).then(()=>!0).catch(()=>(console.log(t.red("Installation failed. Please make sure that you have yarn installed and try again.")),!1)):(console.log("Skipping installation because the --no-install flag was specified"),!0))(a)&&(({sanitizedAppName:e,install:a,targetDir:o})=>{console.log(`Success! Your GoodData-powered application "${e}" was created.`),console.log("You can start it using the following commands:"),console.log(t.cyan(" cd "+r.relative(process.cwd(),o))),a||console.log(t.cyan(" yarn install")),console.log(t.cyan(" yarn start"))})(a)},D=async e=>{const a=e||await g.prompt({message:"What is your application name?",name:"name",type:"input"}).then(e=>e.name);if(!a)throw new Error("You must provide a name for your app");return w(a)},q=async e=>("ts"!==e&&"js"!==e?void 0:e)||g.prompt({message:"What is your application desired flavor?",name:"flavor",type:"list",choices:[{name:"JavaScript",value:"js"},{name:"TypeScript",value:"ts"}]}).then(e=>e.flavor),E=async(e,{hostname:a,backend:t,flavor:r})=>{var o;return{sanitizedAppName:await D(e),hostname:a||await(o=!t||"bear"===t,g.prompt([{message:"What is your hostname?",name:"hostname",type:"list",choices:[{value:"https://secure.gooddata.com"},{value:"https://developer.na.gooddata.com"},{value:"https://salesengineering.na.gooddata.com"},{name:"I have a custom hostname",value:"WHITE_LABELLED"}],when:()=>o},{message:"Insert your hostname",name:"hostname",type:"input",when:({hostname:e})=>"WHITE_LABELLED"===e||!o}]).then(e=>e.hostname)),flavor:await q(r)}},A=async(e,{config:a})=>{let t={};try{t=await p.readJSON(a,{encoding:"utf8",flag:"r"})}catch(e){throw new Error("The config file specified using the -c option was not found. Please check that the path you provided is correct.")}return((e,{hostname:a,appName:t,flavor:r})=>{if(!a)throw new Error("You must provide a hostname for your app");const o=w(t||e);if(!o)throw new Error("You must provide a name for your app");if(void 0!==r&&"ts"!==r&&"js"!==r)throw new Error("You must provide valid flavor value");return{sanitizedAppName:o,hostname:a,flavor:r||"js"}})(e,t)};process.on("unhandledRejection",e=>console.error(e.message)),a.name("@gooddata/create-react-app").arguments("[app-name]").option("--hostname <hostname>","URL of your GoodData host").option("-c, --config <config>","path to configuration file").option("--target-dir <path>",'path to the directory to create the app in (default: ".")').option("--no-install","skip yarn installing the app dependencies").option("--verbose","output additional logs, useful mainly for debugging and bug reports").option("--backend <backend>","setting backend of the app (default: bear backend)").option("--flavor <flavor>","language flavor of the app, either TypeScript (ts) or JavaScript (js)").action(async e=>{const t=a.config?A:E,r=await t(e,a);return j({...r,install:a.install,targetDir:a.targetDir,verbose:a.verbose,backend:a.backend})}).parse(process.argv); |
@@ -8,3 +8,3 @@ { | ||
], | ||
"version": "0.10.3-0", | ||
"version": "0.11.0", | ||
"license": "BSD-3-Clause", | ||
@@ -11,0 +11,0 @@ "repository": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
642043
22