UNPKG

dt-app

Version:

The Dynatrace App Toolkit is a tool you can use from your command line to create, develop, and deploy apps on your Dynatrace environment.

40 lines (29 loc) 15.6 kB
"use strict";var rt=Object.create;var B=Object.defineProperty;var it=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var ct=(e,t)=>{for(var n in t)B(e,n,{get:t[n],enumerable:!0})},xe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ot(t))!at.call(e,o)&&o!==n&&B(e,o,{get:()=>t[o],enumerable:!(r=it(t,o))||r.enumerable});return e};var x=(e,t,n)=>(n=e!=null?rt(st(e)):{},xe(t||!e||!e.__esModule?B(n,"default",{value:e,enumerable:!0}):n,e)),pt=e=>xe(B({},"__esModule",{value:!0}),e);var jt={};ct(jt,{initiateTypeCheckerWatchers:()=>Xe,watch:()=>Ze});module.exports=pt(jt);var Z=require("worker_threads");var z=require("lodash"),lt=require("micromatch"),Ee=require("fs"),G=require("path");function ee(e,t){return require.resolve(e,{paths:[t]})}var te;function y(e){return te||(te=require(ee("typescript",e))),te}function ne(e,t){let n=y(t),r=`TS${e.code}`,o=n.flattenDiagnosticMessageText(e.messageText,` `),a=e.category===n.DiagnosticCategory.Error?"Error":"Warning";if(e.file){let{line:g,character:m}=n.getLineAndCharacterOfPosition(e.file,e.start);return{code:r,category:a,text:o,filePath:e.file.fileName,column:m+1,line:g+1}}return{code:r,category:a,text:o,filePath:void 0,line:1,column:1}}var W={noEmit:!0,skipLibCheck:!0};function re(e){let{ScriptTarget:t}=y(e);return{ui:{target:t.ES2021,...W},functions:{target:t.ESNext,...W},actions:{target:t.ESNext,...W},widgets:{target:t.ESNext,...W}}}function Te(e,t){let{sys:n,readConfigFile:r,parseJsonConfigFileContent:o}=y(e),a=r(t,w=>(0,Ee.readFileSync)(w).toString()),g=[];a.error&&(0,z.has)(a.error.file,"parseDiagnostics")&&(g=(0,z.get)(a.error?.file,"parseDiagnostics"));let m=o(a.config,n,(0,G.dirname)(t));return g.push(...m.errors),{tsConfigContents:m,tsConfigFileDiagnostics:g}}var j=require("path"),Je=require("chokidar");var he=x(require("fast-glob")),Se=require("path");function f(e,t){let r=(Array.isArray(e)?e:e.split(/[\/\\]/g)).map(o=>o?o.replace(/\\/g,"/"):"").join("/").replace(/\/\.\//g,"/").replace(/(?<!:)\/{2,}/g,"/").replace(/^.\//,"");return t?.keepFullPath?r:r.replace(/^([a-zA-Z]):/,"")}var ie=require("undici");var oe=require("path");var ut=require("chalk");var pn=`Authentication failed! Please make sure that: * The provided client ID and the secret are correct. * The provided client ID has needed scopes. Deploy scopes: * app-engine:apps:run * app-engine:apps:install * app-engine:apps:delete Uninstall scopes: * app-engine:apps:delete Telemetry scopes: * app-engine:apps:run Development server needs all the scopes specified in the app.config. For more details on how you can configure authentication, see https://dt-url.net/qw024j8 `;function se(e){return e?e.replace(/\(|\)/g,"").split(" ").filter(Boolean).map((t,n)=>n===0&&t.toLocaleLowerCase()==="error:"?"":t).map(t=>t.includes("http")||t.includes("://")?"":t).map(t=>t.includes(oe.sep)?`${t.replace(/["']/g,"").split(oe.sep).pop()}`:t).join(" ").substring(0,200).trim():""}function ae(e){return e instanceof Error?e:new Error(String(e))}var gt=x(require("fastify"));var ft=x(require("ws"));var dt=process.env.CODESPACE_NAME&&process.env.CODESPACE_NAME.trim()!==""?process.env.CODESPACE_NAME:void 0;var yt=process.env.GITPOD_WORKSPACE_URL&&process.env.GITPOD_WORKSPACE_URL.trim()!==""?process.env.GITPOD_WORKSPACE_URL:void 0;var xn=process.env.DT_APP_DEV_ENVIRONMENT_URL&&process.env.DT_APP_DEV_ENVIRONMENT_URL.trim()!==""?process.env.DT_APP_DEV_ENVIRONMENT_URL:void 0;var Et=x(require("chalk"));var c=require("chalk"),I=require("lodash");var l=require("fs"),we=require("fs/promises"),q=require("path"),Tt=new RegExp(/[0-9]{4}-[0-9]{2}-[0-9]{2}_log.txt/),ve=e=>(e>9?"":"0")+e,bt=e=>`${e.getFullYear()}-${ve(e.getMonth()+1)}-${ve(e.getDate())}_log.txt`,vt=e=>{try{let t=e.split("-");return new Date(Number(t[0]),Number(t[1]),Number(t[2].split("_")[0]))}catch{return}},ce=class{async setup(t){return Promise.resolve()}write(t){}getLogFile(){return""}},pe=class{logFolder;logFile;stream;async setup(t){this.logFolder=(0,q.join)(t,".dt-app/logs"),(0,l.existsSync)(this.logFolder)||(0,l.mkdirSync)(this.logFolder,{recursive:!0}),await this.rotate()}async rotate(){if(this.logFile=(0,q.join)(this.logFolder,bt(new Date)),!(0,l.existsSync)(this.logFile)){let t=(0,l.readdirSync)(this.logFolder).map(n=>n.trim()).filter(n=>Tt.test(n));if(t.length>=10){let n=t.map(r=>({path:r,date:vt(r)})).filter(r=>r.date).sort((r,o)=>r.date.getTime()-o.date.getTime())[0].path;(0,we.unlink)((0,q.join)(this.logFolder,n))}(0,l.closeSync)((0,l.openSync)(this.logFile,"w"))}await new Promise(t=>{this.stream=(0,l.createWriteStream)(this.logFile,{encoding:"utf-8",flags:"a"}),this.stream.on("open",()=>t())})}write(t){this.stream&&this.stream.write(t)}getLogFile(){return this.logFile}};async function Fe(e){return K=new pe,K.setup(e)}var K=new ce;var _e=require("os");var ge=x(require("ora"));var le=[],A=!1;function wt(e){return new Promise((t,n)=>{le.push(async()=>{try{let r=await e();t(r)}catch(r){n(r)}}),Ft()})}async function Ft(){if(!A){for(A=!0;le.length>0;)await le.shift()();A=!1}}async function De(e){return wt(e)}var U=process.env.DT_APP_DEACTIVATE_SPINNER!=="true",$={interval:80},E=[],_="idle",M=(0,ge.default)({spinner:{frames:[""],interval:$.interval},isSilent:!U}),Dt=()=>` ${E.map(e=>e.getFrame()).join(` `)}`;function Pt(){M.text=Dt()}var k;function Ot(){U&&_!=="running"&&!A&&(k===void 0&&(k=setInterval(Pt,$.interval)),M.start(),_="running")}function Pe(){_==="running"&&(_="paused",M.stop())}function Oe(){_==="paused"&&!A&&(_="running",M.start())}function ue(){_="idle",M.stop(),E.forEach(e=>e.abort()),k!==void 0&&(clearInterval(k),k=void 0)}var J=class{spinner;constructor(t){this.spinner=(0,ge.default)({...t,isSilent:!U})}get text(){return this.spinner.text}set text(t){this.spinner.text=t}cleanup(){let t=E.indexOf(this);t>-1&&(this.spinner.isSpinning&&this.spinner.stop(),E.splice(t,1)),E.length===0&&ue()}getFrame(){return this.spinner.frame()}start(t){return t&&(this.text=t),E.includes(this)||E.push(this),Ot(),this}_stop(t,n="abort"){switch(this.text=t??this.text,Pe(),n){case"success":this.spinner.succeed(this.text);break;case"info":this.spinner.info(this.text);break;case"fail":this.spinner.fail(this.text);break;case"warn":this.spinner.warn(this.text);break;case"abort":this.spinner.stop();break;default:this.spinner.stopAndPersist(n)}return this.cleanup(),Oe(),this}stop(t,n={}){return this._stop(t,n)}abort(){return this._stop(void 0,"abort")}info(t){return this._stop(t,"info")}succeed(t){return this._stop(t,"success")}fail(t){return this._stop(t,"fail")}warn(t){return this._stop(t,"warn")}},h={create:(e={})=>new J({...e,interval:$.interval}),start:(e,t={})=>new J({...t,interval:$.interval}).start(e),pause:Pe,resume:Oe,reset:ue,successAll:e=>E.forEach(t=>t.succeed(e)),failAll:e=>E.forEach(t=>t.fail(e)),disable:()=>{U=!1,ue()},enable:()=>{U=!0},getInterval:()=>$.interval,_getMockedSpinner:function(e){let t={abort:(...n)=>t,fail:(...n)=>t,info:(...n)=>t,start:(...n)=>t,stop:(...n)=>t,succeed:(...n)=>t,text:e??"",warn:(...n)=>t};return t}};var fe=class{boxSize=80;warningBoxSize=90;disabled=!1;spinner={create:()=>h.create(),disable:h.disable,start:t=>h.start(t),pause:h.pause,resume:h.resume,abort:h.reset};disable(){this.disabled=!0,h.disable()}log(t){this._log(`${this._padString(t,1)}`,"INFO")}debug(t,n){global.VERBOSE_MODE&&n.startsWith(global.VERBOSE_MODE.replace("%",""))&&(this.spinner.pause(),console.log(`${(0,c.yellow)("DEBUG")}${this._padString(`[${n}] ${t}`,1)}`),this.debounceTimeout=setTimeout(()=>{this.spinner.resume()},h.getInterval())),this._printToFile(`[${n}] ${t}`,"DEBUG")}info(t,n){this._log(n===void 0||n?this._padString(t,0):t,"INFO")}success(t){this._log((0,c.green)(this._padString(t,0)),"INFO")}error(t){this._log((0,c.red)(this._padString(t,0)),"ERROR")}warn(t){let n=` ${(0,c.yellow)("Warning "+(0,I.repeat)("─",this.warningBoxSize-8))} ${(0,c.yellow)(this._padString(t))} ${(0,c.yellow)((0,I.repeat)("─",this.warningBoxSize))} `;this._log(n,"WARNING")}logBox(t){if(this.disabled)return;let n=` ${(0,c.magenta)((0,I.repeat)("─",this.boxSize))} ${(0,c.magenta)(this._padString(t))} ${(0,c.magenta)((0,I.repeat)("─",this.boxSize))} `;this._log(n,"INFO")}clean(){this.spinner.abort()}async initLogFile(t){this.disabled||await Fe(t)}debounceTimeout;_log(t,n){this.disabled||(this.debounceTimeout&&clearTimeout(this.debounceTimeout),this.spinner.pause(),n==="ERROR"?console.log(t):De(()=>Promise.resolve(console.log(t))),this.debounceTimeout=setTimeout(()=>{this.spinner.resume()},h.getInterval()),this._printToFile(t,n))}_printToFile(t,n){K.write(`${Ct().toISOString()} ${n} ${_t(t)} `)}_padString(t,n=2){return`${t}`.split(/[\n\r]/).map(r=>`${(0,I.repeat)(" ",n)}${r}`).join(_e.EOL)}};function _t(e){let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return e.replace(new RegExp(t,"g"),"")}function Ct(){let e=new Date,t=e.getTimezoneOffset()*6e4;return e.setTime(e.getTime()-t),e}var T=new fe;var Rt=x(require("chalk"));var ye=x(require("chalk")),d=require("path"),V=require("fs/promises");function b(e){return e.startsWith("../")?e:e.startsWith("./")?e.slice(1):e.startsWith("/")?e:"/"+e}var me=require("@dynatrace/openkit-js"),Nt=require("lodash");var L=require("os"),Le=require("path");var At=require("commander");function Ce(e){let t=new URL(e),[n,...r]=t.hostname.split(".");if(!r||r.length<1)throw new Error(`Invalid environment URL: "${e}"`,{cause:258});return{tenant:n,hostname:r.join(".")}}var $t=require("jsonwebtoken");var Re=require("path"),Ae=require("os");var lr=(0,Re.join)((0,Ae.homedir)(),".dt-app",".session");function Ie(e){return e instanceof Error?{error:{name:e.name,message:e.message,stack:e.stack,cause:e.cause}}:e}function de(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,Ne(n)]))}function Ne(e){return e==null?e:Array.isArray(e)?e.map(t=>Ne(t)):typeof e=="object"?de(e):typeof e=="string"?se(e):e}function $e(e){return e.includes("dev")?"dev":e.includes("hardening")?"hardening":"prod"}var Fr=(0,Le.join)((0,L.homedir)(),".dt-app",".uuid");var Dr=process.env.NODE_ENV==="test";var ke,Ue,Me,kt=!1,Y;function Ve(e,t){if(!kt||!ke||!Ue)return;let n=de(Ie(e.payload||{})),r=t?.environmentUrl||Y?.environmentUrl||"",o=t?.app?.id||Y.appId||"",a=t?.app?.version||Y.appVersion||"",g=process.version.charAt(0)==="v"?process.version.substring(1):process.version,m=r?{tenantId:Ce(r).tenant,sessionType:$e(r)}:{tenantId:"",sessionType:""},w={...Me&&{userId:Me},userType:Y.userType||""},p={sessionId:Ue.toString(),"event.type":`dt-app.${e["event.category"]}.${e.name}`,"event.category":e["event.category"],"event.provider":"dt-app",operatingSystemVersion:(0,L.version)(),nodejsVersion:g,appId:o,appVersion:a,cliVersion:global.DT_APP_VERSION,...m,...w,...n};ke.sendBizEvent(p["event.type"],p)}var Be=x(require("fast-glob")),We=require("fs"),je={created:ye.default.green`CREATED:`,updated:"UPDATED:",deleted:ye.default.red`DELETED:`,copied:"COPIED:"};function Ut(e){let t={},n={fileExists:r,throwIfFileDoesNotExist:o,getFile:a,getFilePathsByRegex:g,getFileMap:m,getFileName:w,setFile:p,setFiles:C,mapEsbuildOutputFiles:Q,deleteFile:F,writeFileToDisc:D,writeFileMapToDisc:S,addAssetFiles:Qe,resetFileMap:et};return e&&C(e),n;function r(i){let s=b(i);return!!t[s]}function o(i){let s=b(i);if(!r(i))throw Ve({"event.category":"crash",name:"fileManager.setFile",payload:{error:`Failed to set file ${i} with fileManager.`}}),new Error(`File ${s} does not exist in fileMap!`)}function a(i){return i=b(f(i)),o(i),t[i]}function g(i){return Object.keys(t).filter(s=>s.match(i))}function m(){return t}function w(i){return i=b(f(i)),o(i),(0,d.basename)(i)}function p(i,s){i=b(f(i)),t[i]={content:s}}function C(i){for(let s in i)p(s,i[s].content)}function Q(i,s,v="dist"){let R=f([s,"dist"]);return(i||[]).forEach(P=>{let O=f(P.path),tt=f([v,O.replace(R,"")]),nt=b(tt);t[nt]={content:Buffer.from(P.contents)}}),n}function F(i){i=b(f(i)),delete t[i]}async function D(i){i=b(f(i)),o(i),await(0,V.writeFile)((0,d.join)(i),t[i].content)}async function S(i){await Promise.all(Object.entries(t).map(async([s,{content:v,mode:R}])=>{let P=(Buffer.byteLength(v,"utf8")/Math.pow(2,10)).toFixed(2),O=(0,d.join)(i,s);return T.debug(`${R!==void 0?je[R]:je.created} ${O} ${`(${P} KB)`}`,"FILES"),await(0,V.mkdir)((0,d.dirname)(O),{recursive:!0}),(0,V.writeFile)(O,v)}))}async function Qe(i){for(let s of i.assetConfigs){let v=(0,d.isAbsolute)(s.input)?s.input:(0,d.join)(i.root,s.input),R=await(0,Be.default)(s.glob,{cwd:v,dot:!0,ignore:s.ignore});for(let P of R){let O=f([i.distDir,s.output,P]);p(O,(0,We.readFileSync)((0,d.join)(v,P)))}}}function et(){t={}}}var Mt=Ut();async function ze(e,t){return(await(0,he.default)(t,{cwd:e,ignore:["**/*.{test,spec}.ts","node_modules"]})).map(r=>(0,Se.join)(e,r))}var Ge=require("@babel/code-frame"),u=require("chalk"),He=require("fs"),qe=x(require("ansi-to-html"));var ti=new qe.default({});var Ke=e=>{let t=e.filePath?`${(0,u.cyan)(e.filePath)}:${(0,u.yellow)(e.line)}:${(0,u.yellow)(e.column)}`:"<no file>",n=e.category==="Error"?(0,u.red)("Error:"):(0,u.yellow)("Warning:"),r=e.code?(0,u.gray)(` ${e.code}`):"",o=`> ${t} - ${n}${r} ${e.text}`,a=(0,u.bold)(`${Lt(e)}`);return`${o} ${a}`};var Lt=e=>{try{if(!e.filePath)return"";let t=(0,He.readFileSync)(e.filePath,"utf-8"),n=t==="",r={start:{line:e.line,column:n?1:e.column}};return(0,Ge.codeFrameColumns)(n?" ":t,r,{forceColor:!0})}catch(t){console.error(t)}return""};var Ye=require("micromatch");var N=Z.workerData;(async()=>await Xe({appRoot:N.appRoot,buildType:N.buildType,tsconfigFullPath:N.tsconfigFullPath,entrypoints:N.entrypoints,glob:N.glob}))();function X(e){Z.parentPort?.postMessage(e)}async function Xe(e){let t=await Ze({appRoot:e.appRoot,entrypoints:e.entrypoints,tsConfigFullPath:e.tsconfigFullPath,buildType:e.buildType});try{let n=(0,Je.watch)(e.glob,{cwd:e.appRoot,ignoreInitial:!0});n.on("all",async r=>{if(r==="add"||r==="unlink"){let o=await ze(e.appRoot,e.glob);X({type:"entrypoints-changed",payload:{buildType:e.buildType,entrypoints:o,event:r}}),t.updateRootFileNames(o)}}),n.on("ready",()=>{X({type:"initialized",payload:N.buildType})})}catch(n){let r=ae(n);X({type:"send-biz-event",payload:r})}}async function Ze(e){let{createSemanticDiagnosticsBuilderProgram:t,sys:n,createWatchCompilerHost:r,createWatchProgram:o}=y(e.appRoot),a=e.appRoot,g=re(a);function m(F){let D=ne(F,a),S=Ke(D);X({type:"type-error",payload:S})}function w(F){let{formatDiagnostic:D}=y(a);T.debug("Watch status change: "+D(F,Vt(a)),"TYPE_CHECKER")}let p=Te(e.appRoot,e.tsConfigFullPath),C=[];if(p.tsConfigContents.options.composite)C=[...new Set([...e.entrypoints,...p.tsConfigContents.fileNames])];else{let F=p.tsConfigContents.fileNames.filter(S=>S.endsWith(".d.ts")),D=(0,Ye.not)(F,p.tsConfigContents.raw.exclude).map(S=>(0,j.isAbsolute)(S)?S:(0,j.join)(a,S));C=[...new Set([...e.entrypoints,...D])]}let Q=r(C,{...p.tsConfigContents.options,...g[e.buildType],incremental:!0,tsBuildInfoFile:(0,j.join)(e.appRoot,`.dt-app/type-checker/${e.buildType}-type-check-build-info`)},{...n,getCurrentDirectory:()=>e.appRoot},t,m,w,void 0,{excludeDirectories:p.tsConfigContents.raw?.exclude});return o(Q)}function Vt(e){let{sys:t}=y(e);return{getCanonicalFileName:n=>n,getCurrentDirectory:t.getCurrentDirectory,getNewLine:()=>t.newLine}}0&&(module.exports={initiateTypeCheckerWatchers,watch}); //# sourceMappingURL=ts-worker.js.map