UNPKG

167 kBSource Map (JSON)View Raw
1{"version":3,"file":"web.js","sources":["src/config.js","src/decorators.js","src/rally-tools.js","src/config-create.js","src/providers.js","src/file.js","src/asset.js","src/fswrap.js","src/preset.js","src/notification.js","src/rule.js","src/supply-chain.js","src/user.js","src/tag.js","src/trace.js","src/index.js"],"sourcesContent":["import {homedir} from \"os\";\nimport {readFileSync} from \"fs\";\n\nexport let configFile = null\n\nif(homedir){\n configFile = homedir() + \"/.rallyconfig\";\n}\n\nlet configObject;\nexport function loadConfig(file){\n if(file) configFile = file;\n if(!configFile) return;\n\n configObject = {hasConfig: true};\n try{\n let json = readFileSync(configFile);\n configObject = JSON.parse(json);\n configObject.hasConfig = true;\n }catch(e){\n if(e.code == \"ENOENT\"){\n configObject.hasConfig = false;\n //ok, they should probably make a config\n }else{\n throw e;\n }\n }\n}\n\nexport function loadConfigFromArgs(args){\n let tempConfig = {\n hasConfig: true,\n ...args.config\n };\n\n configObject = tempConfig;\n}\n\nexport function setConfig(obj){\n configObject = obj;\n}\n\nexport {configObject};\n","\n//these are the help entries for each command\nexport let helpEntries = {};\nlet helpEntry = name => helpEntries[name] ? helpEntries[name] : (helpEntries[name] = {name});\n\n//short description\nexport function helpText(text){\n return function(func, name){\n helpEntry(name).text = text;\n return func;\n }\n}\n\n//flag type argument like -f or --file\nexport function arg(long, short, desc){\n return function(func, name){\n let args = helpEntry(name).args = helpEntry(name).args || [];\n args.unshift({long, short, desc});\n return func;\n }\n}\n\n//normal argument\nexport function param(param, desc){\n return function(func, name){\n let params = helpEntry(name).params = helpEntry(name).params || [];\n params.unshift({param, desc});\n return func;\n }\n}\n\n//usage string\nexport function usage(usage){\n return function(func, name){\n usage = usage.replace(/[\\[<](\\w+)[\\]>]/g, chalk`[{blue $1}]`);\n helpEntry(name).usage = usage;\n return func;\n }\n}\n\nexport function cachedgetter(target, key, desc){\n let cachedVal;\n\n let oldget = desc.get;\n desc.get = function(){\n if(cachedVal) return cachedVal;\n return cachedVal = oldget.call(this);\n };\n desc.set = function(val){\n cachedVal = val;\n };\n}\n\nfunction findValueInCache(args, cache){\n for(let [argsKey, value] of cache){\n if(args.length !== argsKey.length) continue;\n for(let i in argsKey){\n if(args[i] !== argsKey[i]){\n continue\n }\n }\n return {found: true, value};\n }\n return {found: false};\n}\n\n//This decorator takes a function and returns a function that remembers the\n// value returned by given arguments\nexport function cached(target, key, desc){\n let oldFunc = desc.value;\n let cachedValues = [];\n function newFunc(...args){\n let {found, value} = findValueInCache(args, cachedValues);\n if(!found){\n //Call the old function to find the value, then store it in the cache\n value = oldFun(...args);\n cachedValues.push([args, value]);\n }\n return value;\n }\n newFunc.clearCache = function(){\n cachedValues = [];\n }\n newFunc.cachePush = function(args, value){\n cachedValues.push([args, value]);\n }\n newFunc.remove = function(...args){\n let {found, value} = findValueInCache(args, cachedValues);\n if(found){\n cachedValues = cachedValues.filter(([arg, item]) => item !== value);\n }\n }\n\n return {\n ...desc,\n value: newFunc,\n };\n}\n\n//Access a deep property of an object: if path is [\"a\", \"b\", \"c\"], then this\n//function retuns obj.a.b.c\nfunction deepAccess(obj, path){\n let o = obj;\n for(let key of path){\n if(!o) return [];\n o = o[key];\n }\n return o;\n}\n\n//This takes a class as the first argument, then adds a getter/setter pair that\n//corresponds to an object in this.data\nexport function defineAssoc(classname, shortname, path){\n path = path.split(\".\");\n let lastKey = path.pop();\n\n Object.defineProperty(classname.prototype, shortname, {\n get(){\n return deepAccess(this, path)[lastKey];\n },\n set(val){\n deepAccess(this, path)[lastKey] = val;\n },\n });\n}\n\nimport {spawn as cp_spawn} from \"child_process\";\nimport {performance} from \"perf_hooks\";\n\n//Spawn promise decorator, based on https://gist.github.com/Stuk/6226938\nexport function spawn(options, ...args){\n if(typeof options !== \"object\"){\n args.unshift(options);\n options = {};\n }\n //todo options\n return new Promise((resolve, reject) => {\n let start = performance.now();\n\n let stdout = \"\";\n let stderr = \"\";\n let cp = cp_spawn(...args);\n\n let write = global.write;\n if(options.noecho){\n write = () => {};\n }\n if(cp.stdout) cp.stdout.on(\"data\", chunk => {stdout += chunk; write(chunk)});\n if(cp.stderr) cp.stderr.on(\"data\", chunk => {stderr += chunk; write(chunk)});\n\n cp.on(\"error\", reject);\n cp.on(\"close\", code => {\n let end = performance.now();\n let time = end - start;\n let timestr = time > 1000 ? (time/100|0)/10 + \"s\" : (time|0) + \"ms\";\n resolve({stdout, stderr, exitCode: code, time, timestr});\n });\n });\n}\n","import chalk from \"chalk\";\nimport {configObject} from \"./config.js\";\nimport {cached} from \"./decorators.js\";\nimport rp from \"request-promise\";\n\nglobal.chalk = chalk;\nglobal.log = (...text) => console.log(...text);\nglobal.write = (...text) => process.stdout.write(...text);\nglobal.elog = (...text) => console.log(...text);\nglobal.ewrite = (...text) => process.stderr.write(...text);\nglobal.errorLog = (...text) => log(...text.map(chalk.red));\n\nexport class lib{\n //This function takes 2 required arguemnts:\n // env: the enviornment you wish to use\n // and either:\n // 'path', the short path to the resource. ex '/presets/'\n // 'path_full', the full path to the resource like 'https://discovery-dev.sdvi.com/presets'\n //\n // If the method is anything but GET, either payload or body should be set.\n // payload should be a javascript object to be turned into json as the request body\n // body should be a string that is passed as the body. for example: the python code of a preset.\n //\n // qs are the querystring parameters, in a key: value object.\n // {filter: \"name=test name\"} becomes something like 'filter=name=test+name'\n //\n // headers are the headers of the request. \"Content-Type\" is already set if\n // payload is given as a parameter\n //\n // fullResponse should be true if you want to receive the request object,\n // not just the returned data.\n static async makeAPIRequest({\n env, path, path_full, fullPath,\n payload, body, method = \"GET\",\n qs, headers = {},\n fullResponse = false, timeout = configObject.timeout || 20000\n }){\n //backwards compatability from ruby script\n if(fullPath) path_full = fullPath;\n //Keys are defined in enviornment variables\n let config = configObject?.api?.[env];\n if(!config) {\n throw new UnconfiguredEnvError(env);\n };\n //Protect PROD and UAT(?) if the --no-protect flag was not set.\n if(method !== \"GET\" && !configObject.dangerModify){\n if(env === \"UAT\" && configObject.restrictUAT || env === \"PROD\"){\n throw new ProtectedEnvError(env);\n }\n }\n\n let rally_api_key = config.key;\n let rally_api = config.url;\n if(path && path.startsWith(\"/v1.0/\")){\n rally_api = rally_api.replace(\"/api/v2\", \"/api\");\n }\n\n path = path_full || rally_api + path;\n if(payload){\n body = JSON.stringify(payload, null, 4);\n }\n\n if(payload){\n headers[\"Content-Type\"] = \"application/vnd.api+json\";\n }\n\n let fullHeaders = {\n //SDVI ignores this header sometimes.\n Accept: \"application/vnd.api+json\",\n \"X-SDVI-Client-Application\": \"Discovery-rtlib-\" + (configObject.appName || \"commandline\"),\n ...headers,\n }\n\n if(configObject.vvverbose){\n log(`${method} @ ${path}`)\n log(JSON.stringify(fullHeaders, null, 4))\n\n if(body){\n log(body);\n }else{\n log(\"(No body\")\n }\n }\n\n let requestOptions = {\n method, body, qs, uri: path,\n timeout,\n auth: {bearer: rally_api_key},\n headers: fullHeaders,\n simple: false, resolveWithFullResponse: true,\n };\n\n let response;\n try{\n response = await rp(requestOptions);\n if(configObject.vverbose || configObject.vvverbose){\n log(chalk`${method} @ ${response.request.uri.href}`);\n }\n }catch(e){\n if(e?.cause.code === \"ESOCKETTIMEDOUT\"){\n throw new APIError(response || {}, requestOptions, body);\n }else{\n throw e;\n }\n }\n\n //Throw an error for any 5xx or 4xx\n if(!fullResponse && ![200, 201, 202, 203, 204].includes(response.statusCode)){\n throw new APIError(response, requestOptions, body);\n }\n let contentType = response.headers[\"content-type\"];\n let isJSONResponse = contentType === \"application/vnd.api+json\" || contentType === \"application/json\";\n\n if(configObject.vvverbose){\n log(response.body);\n }\n\n if(fullResponse){\n return response;\n }else if(isJSONResponse){\n if([200, 201, 202, 203, 204].includes(response.statusCode) && !response?.body?.trim()) return {};\n try{\n return JSON.parse(response.body);\n }catch(e){\n log(response.body);\n throw new AbortError(\"Body is not valid json: \");\n }\n }else{\n return response.body;\n }\n }\n\n //Index a json endpoint that returns a {links} field.\n //This function returns the merged data objects as an array\n //\n //Additonal options (besides makeAPIRequest options):\n // - Observe: function to be called for each set of data from the api\n static async indexPath(env, path){\n let all = [];\n\n let opts = typeof env === \"string\" ? {env, path} : env;\n let json = await this.makeAPIRequest(opts);\n\n let [numPages, pageSize] = this.numPages(json.links.last);\n //log(`num pages: ${numPages} * ${pageSize}`);\n\n all = [...json.data];\n while(json.links.next){\n json = await this.makeAPIRequest({...opts, path_full: json.links.next});\n if(opts.observe) await opts.observe(json.data);\n all = [...all, ...json.data];\n }\n\n return all;\n }\n\n //Returns number of pages and pagination size\n static numPages(str){\n return /page=(\\d+)p(\\d+)/.exec(str).slice(1);\n }\n\n static arrayChunk(array, chunkSize){\n let newArr = [];\n for (let i = 0; i < array.length; i += chunkSize){\n newArr.push(array.slice(i, i + chunkSize));\n }\n return newArr;\n }\n\n static async doPromises(promises, result = [], cb){\n for(let promise of promises){\n let res = await promise;\n result.push(res);\n if(cb){\n cb(res.data);\n }\n }\n return result\n }\n\n static clearProgress(size = 30){\n if(!configObject.globalProgress) return;\n process.stderr.write(`\\r${\" \".repeat(size + 15)}\\r`);\n }\n\n static async drawProgress(i, max, size = process.stdout.columns - 15 || 15){\n if(!configObject.globalProgress) return;\n if(size > 45) size = 45;\n let pct = Number(i) / Number(max);\n //clamp between 0 and 1\n pct = pct < 0 ? 0 : pct > 1 ? 1 : pct;\n let numFilled = Math.floor(pct * size);\n let numEmpty = size - numFilled;\n\n this.clearProgress(size);\n process.stderr.write(`[${\"*\".repeat(numFilled)}${\" \".repeat(numEmpty)}] ${i} / ${max}`);\n }\n\n\n static async keepalive(func, inputData, {chunksize = 20, observe = async _=>_, progress = configObject.globalProgress} = {}){\n let total = inputData ? inputData.length : func.length;\n let i = 0;\n let createPromise = () => {\n let ret;\n if(i >= total) return [];\n if(inputData){\n ret = [i, func(inputData[i])];\n }else{\n ret = [i, func[i]()];\n }\n\n i++;\n return ret;\n }\n\n let values = [];\n let finished = 0;\n if(progress) process.stderr.write(\"\\n\");\n let threads = [...this.range(chunksize)].map(async whichThread => {\n while(true){\n let [i, currentPromise] = createPromise();\n if(i == undefined) break;\n values[i] = await observe(await currentPromise);\n if(progress) this.drawProgress(++finished, total);\n }\n });\n await Promise.all(threads);\n if(progress) process.stderr.write(\"\\n\");\n\n\n return values;\n }\n\n static *range(start, end){\n if(end === undefined){\n end = start;\n start = 0;\n }\n while(start < end) yield start++;\n }\n\n //Index a json endpoint that returns a {links} field.\n //\n //This function is faster than indexPath because it can guess the pages it\n //needs to retreive so that it can request all assets at once.\n //\n //This function assumes that the content from the inital request is the\n //first page, so starting on another page may cause issues. Consider\n //indexPath for that.\n //\n //Additional opts, besides default indexPath opts:\n // - chunksize[10]: How often to break apart concurrent requests\n static async indexPathFast(env, path){\n let opts = typeof env === \"string\" ? {env, path} : env;\n //Create a copy of the options in case we need to have a special first request\n let start = opts.start || 1;\n let initOpts = {...opts};\n if(opts.pageSize){\n initOpts.qs = {...opts.qs};\n initOpts.qs.page = `${start}p${opts.pageSize}`;\n }\n\n let json = await this.makeAPIRequest(initOpts);\n\n if(opts.observe && opts.start !== 1) json = await opts.observe(json);\n\n let baselink = json.links.first;\n const linkToPage = page => baselink.replace(`page=1p`, `page=${page}p`);\n\n let [numPages, pageSize] = this.numPages(json.links.last);\n\n //Construct an array of all the requests that are done simultanously.\n //Assume that the content from the inital request is the first page.\n let allResults = await this.keepalive(\n this.makeAPIRequest,\n [...this.range(start+1, Number(numPages) + 1 || opts.limit + 1)]\n .map(i => ({...opts, path_full: linkToPage(i)})),\n {chunksize: opts.chunksize, observe: opts.observe},\n );\n if(start == 1){\n allResults.unshift(json);\n }\n this.clearProgress();\n\n let all = [];\n for(let result of allResults){\n for(let item of result.data){\n all.push(item);\n }\n }\n\n return all;\n }\n static isLocalEnv(env){\n return !env || env === \"LOCAL\" || env === \"LOC\";\n }\n static envName(env){\n if(this.isLocalEnv(env)) return \"LOCAL\";\n return env;\n }\n};\n\nexport class AbortError extends Error{\n constructor(message){\n super(message);\n Error.captureStackTrace(this, this.constructor);\n this.name = \"AbortError\";\n }\n}\n\nexport class APIError extends Error{\n constructor(response, opts, body){\n super(chalk`\n{reset Request returned} {yellow ${response?.statusCode}}{\n{green ${JSON.stringify(opts, null, 4)}}\n{green ${body}}\n{reset ${response.body}}\n===============================\n{red ${response.body ? \"Request timed out\" : \"Bad response from API\"}}\n===============================\n `);\n this.response = response;\n this.opts = opts;\n this.body = body;\n\n Error.captureStackTrace(this, this.constructor);\n this.name = \"ApiError\";\n }\n}\n\nexport class UnconfiguredEnvError extends AbortError{\n constructor(env){\n super(\"Unconfigured enviornment: \" + env);\n this.name = \"Unconfigured Env Error\";\n }\n}\n\nexport class ProtectedEnvError extends AbortError{\n constructor(env){\n super(\"Protected enviornment: \" + env);\n this.name = \"Protected Env Error\";\n }\n}\n\nexport class FileTooLargeError extends Error{\n constructor(file){\n super(`File ${file.parentAsset ? file.parentAsset.name : \"(unknown)\"}/${file.name} size is: ${file.sizeGB}g (> ~.2G)`);\n this.name = \"File too large error\";\n }\n}\n\nexport class Collection{\n constructor(arr){\n this.arr = arr;\n }\n [Symbol.iterator](){\n return this.arr[Symbol.iterator]();\n }\n findById(id){\n return this.arr.find(x => x.id == id);\n }\n findByName(name){\n return this.arr.find(x => x.name == name);\n }\n findByNameContains(name){\n return this.arr.find(x => x.name.includes(name));\n }\n log(){\n for(let d of this){\n if(d){\n log(d.chalkPrint(true));\n }else{\n log(chalk`{red (None)}`);\n }\n }\n }\n get length(){return this.arr.length;}\n}\n\nexport class RallyBase{\n static handleCaching(){\n if(!this.cache) this.cache = [];\n }\n static isLoaded(env){\n if(!this.hasLoadedAll) return;\n return this.hasLoadedAll[env];\n }\n static async getById(env, id, qs){\n this.handleCaching();\n for(let item of this.cache){\n if(item.id == id && item.remote === env || `${env}-${id}` === item.metastring) return item;\n }\n\n let data = await lib.makeAPIRequest({\n env, path: `/${this.endpoint}/${id}`,\n qs\n });\n if(data.data){\n let o = new this({data: data.data, remote: env, included: data.included});\n this.cache.push(o);\n return o;\n }\n }\n\n static async getByName(env, name, qs){\n this.handleCaching();\n for(let item of this.cache){\n if(item.name === name && item.remote === env) return item;\n }\n\n let data = await lib.makeAPIRequest({\n env, path: `/${this.endpoint}`,\n qs: {...qs, filter: `name=${name}` + (qs ? qs.filter : \"\")},\n });\n //TODO included might not wokr correctly here\n if(data.data[0]){\n let o = new this({data: data.data[0], remote: env, included: data.included});\n this.cache.push(o);\n return o;\n }\n }\n\n static async getAllPreCollect(d){return d;}\n static async getAll(env){\n this.handleCaching();\n let datas = await lib.indexPathFast({\n env, path: `/${this.endpoint}`,\n pageSize: \"50\",\n qs: {sort: \"id\"},\n });\n datas = await this.getAllPreCollect(datas);\n let all = new Collection(datas.map(data => new this({data, remote: env})));\n this.cache = [...this.cache, ...all.arr];\n return all;\n }\n static async removeCache(env){\n this.handleCaching();\n this.cache = this.cache.filter(x => x.remote !== env);\n }\n\n //Specific turns name into id based on env\n //Generic turns ids into names\n async resolveApply(type, dataObj, direction){\n let obj;\n if(direction == \"generic\"){\n obj = await type.getById(this.remote, dataObj.id);\n if(obj){\n dataObj.name = obj.name\n }\n }else if(direction == \"specific\"){\n obj = await type.getByName(this.remote, dataObj.name);\n if(obj){\n dataObj.id = obj.id\n }\n }\n return obj;\n }\n\n //Type is the baseclass you are looking for (should extend RallyBase)\n //name is the name of the field\n //isArray is true if it has multiple cardinailty, false if it is single\n //direction gets passed directly to resolveApply\n async resolveField(type, name, isArray=false, direction=\"generic\"){\n // ignore empty fields\n let field = this.relationships[name];\n if(!field?.data) return;\n\n if(isArray){\n return await Promise.all(field.data.map(o => this.resolveApply(type, o, direction)));\n }else{\n return await this.resolveApply(type, field.data, direction);\n }\n }\n\n cleanup(){\n for(let [key, val] of Object.entries(this.relationships)){\n //Remove ids from data\n if(val.data){\n if(val.data.id){\n delete val.data.id;\n }else if(val.data[0]){\n for(let x of val.data) delete x.id;\n }\n }\n delete val.links;\n }\n // organization is unused (?)\n delete this.relationships.organization;\n // id is specific to envs\n // but save source inside meta string in case we need it\n this.metastring = this.remote + \"-\" + this.data.id;\n delete this.data.id;\n // links too\n delete this.data.links;\n }\n}\n\nexport function sleep(time = 1000){\n return new Promise(resolve => setTimeout(resolve, time));\n}\n","import {configObject} from \"./config.js\";\nimport {join} from \"path\";\nimport Preset from \"./preset.js\";\nimport Rule from \"./rule.js\";\nexport const inquirer = importLazy(\"inquirer\");\nconst readdir = importLazy(\"recursive-readdir\");\n\nlet hasAutoCompletePrompt = false;\nexport function addAutoCompletePrompt(){\n if(hasAutoCompletePrompt) return\n hasAutoCompletePrompt = true;\n inquirer.registerPrompt(\"autocomplete\", require(\"inquirer-autocomplete-prompt\"));\n}\n\nexport async function $api(propArray){\n let q;\n q = await inquirer.prompt([{\n type: \"input\",\n name: \"company\",\n message: `What is your company?`,\n default: `discovery`,\n }]);\n\n let company = q.company;\n\n const defaults = {\n DEV: `https://${company}-dev.sdvi.com/api/v2`,\n UAT: `https://${company}-uat.sdvi.com/api/v2`,\n QA: `https://${company}-qa.sdvi.com/api/v2`,\n PROD: `https://${company}.sdvi.com/api/v2`,\n };\n\n if(propArray && propArray[1]){\n q = {envs: [propArray[1]]};\n }else{\n //Create a checkbox prompt to choose enviornments\n q = await inquirer.prompt([{\n type: \"checkbox\",\n name: \"envs\",\n message: `What enviornments would you like to configure?`,\n choices: Object.keys(defaults).map(name => ({name, checked:true})),\n }]);\n }\n\n //Each env should ask 2 for two things: The url and the key.\n let questions = q.envs.map(env => {\n let defaultKey = process.env[`rally_api_key_${env}`];\n if(configObject && configObject.api && configObject.api[env]){\n defaultKey = configObject.api[env].key;\n }\n\n return [{\n type: \"input\",\n name: `api.${env}.url`,\n message: `What is the api endpoint for ${env}?`,\n default: defaults[env],\n }, {\n type: \"input\",\n name: `api.${env}.key`,\n message: `What is your api key for ${env}?`,\n default: defaultKey,\n }];\n });\n\n //flatten and ask\n questions = [].concat(...questions);\n q = await inquirer.prompt(questions);\n if(propArray){\n q.api = {...configObject.api, ...q.api};\n }\n return q;\n}\nexport async function $chalk(propArray){\n return {chalk: await askQuestion(\"Would you like chalk enabled (Adds coloring)?\")};\n}\nexport async function $restrictUAT(propArray){\n return {restrictUAT: await askQuestion(\"Would you like to protect UAT?\")};\n}\nexport async function $repodir(propArray){\n return await inquirer.prompt([{\n type: \"input\",\n name: `repodir`,\n message: `Where is your rally repository?`,\n default: process.env[\"rally_repo_path\"],\n }]);\n}\n\nexport async function $appName(propArray){\n let defaultAppName = \"cmdline-\" + (process.env.USERNAME || process.env.LOGNAME);\n let project = await askInput(\"Application name?\", defaultAppName);\n if(project === \"none\" || project === \"-\" || project === \"\" || !project){\n project = null\n }\n return {appName: project};\n}\n\nexport async function $project(propArray){\n let project = await askInput(\"Subproject directory?\");\n if(project === \"none\" || project === \"-\" || project === \"\" || !project){\n project = null\n }\n return {project};\n}\n\nexport async function $defaultEnv(propArray){\n return await inquirer.prompt([{\n type: \"input\",\n name: `defaultEnv`,\n message: `Default enviornment?`,\n default: \"DEV\",\n }]);\n}\n\n//Internal usage/testing\nexport async function selectProvider(providers, autoDefault = false){\n addAutoCompletePrompt();\n let defaultProvider = providers.findByName(\"SdviEvaluate\");\n if(autoDefault){\n return defaultProvider;\n }else{\n let choices = providers.arr.map(x => ({\n name: x.chalkPrint(true),\n value: x,\n }))\n let q = await inquirer.prompt([{\n type: \"autocomplete\",\n name: \"provider\",\n default: defaultProvider,\n source: async (sofar, input) => {\n return choices.filter(x => input ? x.value.name.toLowerCase().includes(input.toLowerCase()) : true);\n },\n }]);\n return q.provider;\n }\n}\n\nexport async function loadLocals(path, Class){\n let basePath = configObject.repodir;\n let f = await readdir(basePath);\n let objs = f.filter(name => name.includes(path)).map(name => new Class({path: name}));\n return objs;\n}\n\nexport async function selectLocal(path, typeName, Class, canSelectNone = true){\n addAutoCompletePrompt();\n let objs = loadLocals(path, Class);\n let objsMap = objs.map(x => ({\n name: x.chalkPrint(true),\n value: x,\n }));\n let none = {\n name: (chalk` {red None}: {red None}`),\n value: null,\n };\n\n if(canSelectNone) objsMap.unshift(none);\n\n let q = await inquirer.prompt([{\n type: \"autocomplete\",\n name: \"obj\",\n message: `What ${typeName} do you want?`,\n source: async (sofar, input) => {\n return objsMap.filter(x => input ? x.name.toLowerCase().includes(input.toLowerCase()) : true);\n },\n }]);\n return q.obj;\n}\n\nexport async function selectPreset({purpose = \"preset\", canSelectNone}){\n return selectLocal(\"silo-presets\", purpose, Preset, canSelectNone);\n}\nexport async function selectRule({purpose = \"rule\", canSelectNone}){\n return selectLocal(\"silo-rules\", purpose, Rule, canSelectNone);\n}\n\nexport async function askInput(question, def){\n return (await inquirer.prompt([{\n type: \"input\",\n name: \"ok\",\n message: question,\n default: def,\n }])).ok;\n}\n\nexport async function askQuestion(question){\n return (await inquirer.prompt([{\n type: \"confirm\",\n name: \"ok\",\n message: question,\n }])).ok;\n}\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nclass Provider extends RallyBase{\n constructor({data, remote}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n }\n //cached\n async getEditorConfig(){\n if(this.editorConfig) return this.editorConfig;\n\n this.editorConfig = await lib.makeAPIRequest({\n env: this.remote,\n path_full: this.data.links.editorConfig\n });\n this.editorConfig.fileExt = await this.getFileExtension();\n return this.editorConfig;\n }\n static async getAllPreCollect(providers){\n return providers.sort((a, b) => {\n return a.attributes.category.localeCompare(b.attributes.category) ||\n a.attributes.name .localeCompare(b.attributes.name);\n });\n }\n\n async getFileExtension(){\n let config = await this.getEditorConfig();\n let map = {\n python: \"py\",\n text: \"txt\",\n getmap(key){\n if(this.name === \"Aurora\") return \"zip\";\n if(this[key]) return this[key];\n return key;\n }\n }\n return map.getmap(config.lang);\n }\n\n chalkPrint(pad=true){\n let id = String(this.id)\n if(pad) id = id.padStart(4);\n return chalk`{green ${id}}: {blue ${this.category}} - {green ${this.name}}`;\n }\n}\n\ndefineAssoc(Provider, \"id\", \"data.id\");\ndefineAssoc(Provider, \"name\", \"data.attributes.name\");\ndefineAssoc(Provider, \"category\", \"data.attributes.category\");\ndefineAssoc(Provider, \"remote\", \"meta.remote\");\ndefineAssoc(Provider, \"editorConfig\", \"meta.editorConfig\");\nProvider.endpoint = \"providerTypes\";\n\nexport default Provider;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase, FileTooLargeError} from \"./rally-tools.js\";\n\nclass File extends RallyBase{\n constructor({data, remote, included, parent}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n this.parentAsset = parent;\n }\n\n chalkPrint(pad=false){\n let id = String(\"F-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n if(pad) id = id.padStart(15);\n return chalk`{green ${id}}: {blue ${this.data.attributes ? this.name : \"(lite asset)\"}}`;\n }\n\n canBeDownloaded(){\n return this.sizeGB <= .2;\n }\n\n async getContent(force = false){\n if(!this.canBeDownloaded() && !force){\n throw new FileTooLargeError(this);\n }\n\n return lib.makeAPIRequest({\n env: this.remote, fullPath: this.contentLink\n });\n }\n async delete(remove = true){\n return lib.makeAPIRequest({\n env: this.remote, fullPath: this.selfLink,\n method: \"DELETE\",\n });\n }\n get size(){\n return Object.values(this.data.attributes.instances)[0].size\n }\n\n get sizeGB(){\n return Math.round(this.size / 1024 / 1024 / 1024 * 10) / 10;\n }\n}\n\ndefineAssoc(File, \"id\", \"data.id\");\ndefineAssoc(File, \"name\", \"data.attributes.label\");\ndefineAssoc(File, \"contentLink\", \"data.links.content\");\ndefineAssoc(File, \"selfLink\", \"data.links.self\");\ndefineAssoc(File, \"label\", \"data.attributes.label\");\ndefineAssoc(File, \"md5\", \"data.attributes.md5\");\ndefineAssoc(File, \"sha512\", \"data.attributes.sha512\");\ndefineAssoc(File, \"tags\", \"data.attributes.tagList\");\ndefineAssoc(File, \"instances\", \"data.attributes.instances\");\nFile.endpoint = null\n\nexport default File;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase, sleep} from \"./rally-tools.js\";\nimport File from \"./file.js\";\nimport Provider from \"./providers.js\";\n\nclass Asset extends RallyBase{\n constructor({data, remote, included, lite}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n if(included){\n this.meta.metadata = Asset.normalizeMetadata(included);\n }\n this.lite = !!lite;\n }\n static normalizeMetadata(payload){\n let newMetadata = {}\n for(let md of payload){\n if(md.type !== \"metadata\") continue;\n newMetadata[md.attributes.usage] = md.attributes.metadata;\n }\n return newMetadata;\n }\n\n async getMetadata(forceRefresh = false){\n if(this.meta.metadata && !forceRefresh) return this.meta.metadata;\n let req = await lib.makeAPIRequest({\n env: this.remote, path: `/movies/${this.id}/metadata`,\n });\n\n return this.meta.metadata = Asset.normalizeMetadata(req.data);\n }\n\n async patchMetadata(metadata){\n if(metadata.Workflow && false){\n let req = await lib.makeAPIRequest({\n env: this.remote, path: `/movies/${this.id}/metadata/Workflow`,\n method: \"PATCH\",\n payload: {\n \"data\": {\n \"type\": \"metadata\",\n \"attributes\": {\n \"metadata\": metadata.Workflow\n },\n }\n }\n });\n }\n if(metadata.Metadata){\n let req = await lib.makeAPIRequest({\n env: this.remote, path: `/movies/${this.id}/metadata/Metadata`,\n method: \"PATCH\",\n payload: {\n \"data\": {\n \"type\": \"metadata\",\n \"attributes\": {\n \"metadata\": metadata.Metadata\n },\n }\n }\n });\n }\n }\n\n static lite(id, remote){\n return new this({data: {id}, remote, lite: true})\n }\n\n chalkPrint(pad=false){\n let id = String(\"A-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n if(pad) id = id.padStart(15);\n return chalk`{green ${id}}: {blue ${this.data.attributes ? this.name : \"(lite asset)\"}}`;\n }\n\n static async createNew(name, env){\n let req = await lib.makeAPIRequest({\n env, path: \"/assets\",\n method: \"POST\",\n payload: {\n data: {\n attributes: {name},\n type: \"assets\"\n }\n }\n });\n return new this({data: req.data, remote: env});\n }\n\n async delete(){\n let req = await lib.makeAPIRequest({\n env: this.remote, path: \"/assets/\" + this.id,\n method: \"DELETE\",\n });\n }\n\n async getFiles(){\n let req = await lib.indexPathFast({\n env: this.remote, path: `/assets/${this.id}/files`,\n method: \"GET\",\n });\n\n //return req;\n return new Collection(req.map(x => new File({data: x, remote: this.remote, parent: this})));\n }\n\n async addFile(label, fileuris){\n if(!Array.isArray(fileuris)) fileuris = [fileuris];\n\n let instances = {}\n for(let i = 0; i < fileuris.length; i++){\n instances[String(i + 1)] = {uri: fileuris[i]};\n }\n\n let req = await lib.makeAPIRequest({\n env: this.remote, path: \"/files\",\n method: \"POST\",\n payload: {\n \"data\": {\n \"attributes\": {\n label, instances,\n },\n \"relationships\": {\n \"asset\": {\n \"data\": {\n id: this.id,\n \"type\": \"assets\"\n }\n }\n },\n \"type\": \"files\"\n }\n\n }\n });\n return req;\n }\n async startWorkflow(jobName, {initData, priority} = {}){\n let attributes = {};\n if(initData){\n //Convert init data to string\n initData = typeof initData === \"string\" ? initData : JSON.stringify(initData);\n attributes.initData = initData;\n }\n if(priority){\n attributes.priority = priority\n }\n\n let req = await lib.makeAPIRequest({\n env: this.remote, path: \"/workflows\",\n method: \"POST\",\n payload: {\n \"data\": {\n \"type\": \"workflows\",\n attributes,\n \"relationships\": {\n \"movie\": {\n \"data\": {\n id: this.id,\n \"type\": \"movies\"\n }\n }, \"rule\": {\n \"data\": {\n \"attributes\": {\n \"name\": jobName,\n },\n \"type\": \"rules\"\n }\n }\n }\n }\n }\n });\n return req;\n }\n static async startAnonWorkflow(env, jobName, {initData, priority} = {}){\n let attributes = {};\n if(initData){\n //Convert init data to string\n initData = typeof initData === \"string\" ? initData : JSON.stringify(initData);\n attributes.initData = initData;\n }\n if(priority){\n attributes.priority = priority\n }\n\n let req = await lib.makeAPIRequest({\n env, path: \"/workflows\",\n method: \"POST\",\n payload: {\n \"data\": {\n \"type\": \"workflows\",\n attributes,\n \"relationships\": {\n \"rule\": {\n \"data\": {\n \"attributes\": {\n \"name\": jobName,\n },\n \"type\": \"rules\"\n }\n }\n }\n }\n }\n });\n return req;\n\n }\n\n async startEphemeralEvaluateIdeal(preset, dynamicPresetData){\n let res;\n const env = this.remote;\n let provider = await Provider.getByName(this.remote, \"SdviEvaluate\");\n\n write(chalk`Starting ephemeral evaluate on ${this.chalkPrint(false)}...`)\n\n // Fire and forget.\n let evalInfo = await lib.makeAPIRequest({\n env: this.remote, path: \"/jobs\", method: \"POST\",\n payload: {\n data: {\n attributes: {\n category: provider.category,\n providerTypeName: provider.name,\n rallyConfiguration: {},\n providerData: Buffer.from(preset.code, \"binary\").toString(\"base64\"),\n dynamicPresetData,\n },\n type: \"jobs\",\n relationships: {\n movie: {\n data: {\n id: this.id,\n type: \"movies\",\n }\n }\n }\n }\n }\n });\n\n write(\" Waiting for finish...\");\n for(;;){\n res = await lib.makeAPIRequest({\n env, path_full: evalInfo.data.links.self\n });\n write(\".\");\n if(res.data.attributes.state == \"Complete\"){\n write(chalk`{green Done}...\\n`);\n break;\n }\n await sleep(300);\n }\n\n return;\n }\n\n async startEvaluate(presetid, dynamicPresetData){\n // Fire and forget.\n let data = await lib.makeAPIRequest({\n env: this.remote, path: \"/jobs\", method: \"POST\",\n payload: {\n data: {\n type: \"jobs\",\n attributes: {\n dynamicPresetData,\n },\n relationships: {\n movie: {\n data: {\n id: this.id,\n type: \"movies\",\n }\n }, preset: {\n data: {\n id: presetid,\n type: \"presets\",\n }\n }\n }\n }\n }\n });\n return data;\n }\n async rename(newName){\n let req = await lib.makeAPIRequest({\n env: this.remote, path: `/assets/${this.id}`,\n method: \"PATCH\",\n payload: {\n data: {\n attributes: {\n name: newName,\n },\n type: \"assets\",\n }\n }\n });\n\n this.name = newName;\n\n return req;\n }\n}\n\ndefineAssoc(Asset, \"id\", \"data.id\");\ndefineAssoc(Asset, \"name\", \"data.attributes.name\");\ndefineAssoc(Asset, \"remote\", \"meta.remote\");\ndefineAssoc(Asset, \"md\", \"meta.metadata\");\ndefineAssoc(Asset, \"lite\", \"meta.lite\");\nAsset.endpoint = \"movies\"\n\nexport default Asset;\n","import fs from \"fs\";\nimport {dirname} from \"path\";\n\nimport {configObject} from \"./config.js\";\nimport {homedir} from \"os\";\n\n\nlet home;\nif(homedir){\n home = homedir();\n}\nconst colon = /:/g;\nconst siloLike = /(silo\\-\\w+?)s?\\/([^\\/]+)\\.([\\w1234567890]+)$/g;\nexport function pathTransform(path){\n if(path.includes(\":\")){\n //Ignore the first colon in window-like filesystems\n path = path.slice(0, 3) + path.slice(3).replace(colon, \"--\");\n }\n if(configObject.invertedPath){\n path = path.replace(siloLike, \"$2-$1.$3\")\n }\n if(path.includes(\"\\\\342\\\\200\\\\220\")){\n path = path.replace(\"\\\\342\\\\200\\\\220\", \"‐\");\n }\n return path;\n}\n\nexport function readFileSync(path, options){\n return fs.readFileSync(pathTransform(path), options);\n}\n//Create writefilesync, with ability to create directory if it doesnt exist\nexport function writeFileSync(path, data, options, dircreated = false){\n path = pathTransform(path);\n try{\n return fs.writeFileSync(path, data, options);\n }catch(e){\n if(dircreated) throw e;\n let directory = dirname(path);\n try{\n fs.statSync(directory);\n throw e;\n }catch(nodir){\n fs.mkdirSync(directory);\n return writeFileSync(path, data, options, true);\n }\n }\n}\n","import {RallyBase, lib, AbortError, Collection} from \"./rally-tools.js\";\nimport {basename, resolve as pathResolve, dirname} from \"path\";\nimport {cached, defineAssoc, spawn} from \"./decorators.js\";\nimport {configObject} from \"./config.js\";\nimport {loadLocals} from \"./config-create\";\nimport Provider from \"./providers.js\";\nimport Asset from \"./asset.js\";\n\n// pathtransform for hotfix\nimport {writeFileSync, readFileSync, pathTransform} from \"./fswrap.js\";\nimport path from \"path\";\nimport moment from \"moment\";\n\nlet exists = {};\n\nclass Preset extends RallyBase{\n constructor({path, remote, data, subProject} = {}){\n // Get full path if possible\n if(path){\n path = pathResolve(path);\n if(dirname(path).includes(\"silo-metadata\")){\n throw new AbortError(\"Constructing preset from metadata file\")\n }\n }\n\n super();\n\n\n // Cache by path\n if(path){\n if(exists[pathTransform(path)]) return exists[pathTransform(path)];\n exists[pathTransform(path)] = this;\n }\n\n this.meta = {};\n this.subproject = subProject;\n this.remote = remote\n if(lib.isLocalEnv(this.remote)){\n if(path){\n this.path = path;\n let pathspl = this.path.split(\".\");\n this.ext = pathspl[pathspl.length-1];\n try{\n this.code = this.getLocalCode();\n }catch(e){\n if(e.code === \"ENOENT\" && configObject.ignoreMissing){\n this.missing = true;\n return undefined;\n }else{\n log(chalk`{red Node Error} ${e.message}`);\n throw new AbortError(\"Could not load code of local file\");\n }\n }\n let name = this.parseFilenameForName() || this.parseCodeForName();\n try{\n this.data = this.getLocalMetadata();\n this.isGeneric = true;\n name = this.name;\n }catch(e){\n log(chalk`{yellow Warning}: ${path} does not have a readable metadata file! Looking for ${this.localmetadatapath}`);\n this.data = Preset.newShell(name);\n this.isGeneric = false;\n }\n this.name = name;\n }else{\n this.data = Preset.newShell();\n }\n }else{\n this.data = data;\n //this.name = data.attributes.name;\n //this.id = data.id;\n this.isGeneric = false;\n }\n this.data.attributes.rallyConfiguration = undefined;\n this.data.attributes.systemManaged = undefined;\n }\n //Given a metadata file, get its actualy file\n static async fromMetadata(path, subproject){\n let data;\n try{\n data = JSON.parse(readFileSync(path));\n }catch(e){\n if(e.code === \"ENOENT\" && configObject.ignoreMissing){\n return null;\n }else{\n throw e;\n }\n }\n let providerType = data.relationships.providerType.data.name;\n let provider = await Provider.getByName(\"DEV\", providerType);\n\n if(!provider){\n log(chalk`{red The provider type {green ${providerType}} does not exist}`);\n log(chalk`{red Skipping {green ${path}}.}`);\n return null;\n }\n\n let ext = await provider.getFileExtension();\n let name = data.attributes.name;\n\n let realpath = Preset.getLocalPath(name, ext, subproject);\n return new Preset({path: realpath, subProject: subproject});\n }\n\n static newShell(name = undefined){\n return {\n \"attributes\": {\n \"providerSettings\": {\n \"PresetName\": name\n }\n },\n \"relationships\": {},\n \"type\": \"presets\",\n };\n }\n cleanup(){\n super.cleanup();\n delete this.attributes[\"createdAt\"];\n delete this.attributes[\"updatedAt\"];\n }\n async acclimatize(env){\n if(!this.isGeneric) throw new AbortError(\"Cannot acclimatize non-generics or shells\");\n let providers = await Provider.getAll(env);\n let ptype = this.relationships[\"providerType\"];\n ptype = ptype.data;\n\n let provider = providers.findByName(ptype.name);\n ptype.id = provider.id;\n }\n get test(){\n if(!this.code) return [];\n\n const regex = /[^-]autotest:\\s?([\\w\\d_\\-. \\/]+)[\\r\\s\\n]*?/gm;\n let match\n let matches = []\n while(match = regex.exec(this.code)){\n matches.push(match[1]);\n }\n return matches\n }\n async runTest(env){\n let remote = await Preset.getByName(env, this.name);\n for(let test of this.test){\n log(\"Tests...\");\n let asset;\n\n if(test.startsWith(\"id\")){\n let match = /id:\\s*(\\d+)/g.exec(test);\n if(!match){\n log(chalk`{red Could not parse autotest} ${test}.`);\n throw new AbortError(\"Could not properly parse the preset header\");\n }\n asset = await Asset.getById(env, match[1]);\n }else{\n asset = await Asset.getByName(env, test);\n }\n\n if(!asset){\n log(chalk`{yellow No movie found}, skipping test.`);\n continue;\n }\n\n log(chalk`Starting job {green ${this.name}} on ${asset.chalkPrint(false)}... `);\n await asset.startEvaluate(remote.id);\n }\n }\n async resolve(){\n if(this.isGeneric) return;\n\n let proType = await this.resolveField(Provider, \"providerType\");\n\n this.ext = await proType.getFileExtension();\n\n this.isGeneric = true;\n\n return {proType};\n }\n async saveLocal(){\n await this.saveLocalMetadata();\n await this.saveLocalFile();\n }\n async saveLocalMetadata(){\n if(!this.isGeneric){\n await this.resolve();\n this.cleanup();\n }\n writeFileSync(this.localmetadatapath, JSON.stringify(this.data, null, 4));\n }\n async saveLocalFile(){\n writeFileSync(this.localpath, this.code);\n }\n async uploadRemote(env){\n await this.uploadCodeToEnv(env, true);\n }\n async save(env){\n this.saved = true;\n if(!this.isGeneric){\n await this.resolve();\n }\n\n this.cleanup();\n if(lib.isLocalEnv(env)){\n log(chalk`Saving preset {green ${this.name}} to {blue ${lib.envName(env)}}.`)\n await this.saveLocal();\n }else{\n await this.uploadRemote(env);\n }\n }\n\n async downloadCode(){\n if(!this.remote || this.code) return this.code;\n let code = await lib.makeAPIRequest({\n env: this.remote,\n path_full: this.data.links.providerData,\n json: false,\n });\n\n //match header like \n // # c: d\n // # b\n // # a\n // ##################\n let headerRegex = /(^# .+[\\r\\n]+)+#+[\\r\\n]+/gim;\n let hasHeader = headerRegex.exec(code);\n\n if(hasHeader){\n this.header = code.substring(0, hasHeader[0].length - 1);\n code = code.substring(hasHeader[0].length);\n }\n\n return this.code = code;\n }\n\n get code(){\n if(this._code) return this._code;\n }\n set code(v){this._code = v;}\n\n chalkPrint(pad=true){\n let id = String(\"P-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n let sub = \"\";\n if(this.subproject){\n sub = chalk`{yellow ${this.subproject}}`;\n }\n if(pad) id = id.padStart(10);\n if(this.name == undefined){\n return chalk`{green ${id}}: ${sub}{red ${this.path}}`;\n }else if(this.meta.proType){\n return chalk`{green ${id}}: ${sub}{red ${this.meta.proType.name}} {blue ${this.name}}`;\n }else{\n return chalk`{green ${id}}: ${sub}{blue ${this.name}}`;\n }\n }\n parseFilenameForName(){\n if(this.path.endsWith(\".jinja\") || this.path.endsWith(\".json\")){\n return basename(this.path)\n .replace(\"_\", \" \")\n .replace(\"-\", \" \")\n .replace(\".json\", \"\")\n .replace(\".jinja\", \"\");\n }\n }\n\n parseCodeForName(){\n const name_regex = /name\\s?:\\s([\\w\\d. \\/]+)[\\r\\s\\n]*?/;\n const match = name_regex.exec(this.code);\n if(match) return match[1];\n }\n\n findStringsInCode(strings){\n if(!this.code) return [];\n\n return strings.filter(str => {\n let regex = new RegExp(str);\n return !!this.code.match(regex);\n });\n }\n static getLocalPath(name, ext, subproject){\n return path.join(configObject.repodir, subproject || \"\", \"silo-presets\", name + \".\" + ext);\n }\n get localpath(){return Preset.getLocalPath(this.name, this.ext, this.subproject)}\n\n get path(){\n if(this._path) return this._path;\n }\n set path(val){\n this._path = val;\n }\n get name(){\n return this._nameOuter;\n }\n set name(val){\n if(!this._nameInner) this._nameInner = val;\n this._nameOuter = val;\n }\n set providerType(value){\n this.relationships[\"providerType\"] = {\n data: {\n ...value,\n type: \"providerTypes\",\n }\n };\n }\n get localmetadatapath(){\n if(this.path){\n return this.path.replace(\"silo-presets\", \"silo-metadata\").replace(new RegExp(this.ext + \"$\"), \"json\")\n }\n return path.join(configObject.repodir, this.subproject || \"\", \"silo-metadata\", this.name + \".json\");\n }\n get immutable(){\n return this.name.includes(\"Constant\") && !configObject.updateImmutable;\n }\n async uploadPresetData(env, id){\n if(this.code.trim() === \"NOUPLOAD\"){\n write(chalk`code skipped {yellow :)}, `);\n return;\n }\n\n let code = this.code;\n let headers = {};\n\n let providerName = this.relationships?.providerType?.data?.name;\n if(!configObject.skipHeader && (providerName === \"SdviEvaluate\" || providerName === \"SdviEvalPro\")){\n write(chalk`generate header, `);\n let repodir = configObject.repodir;\n let localpath = this.path.replace(repodir, \"\");\n if(localpath.startsWith(\"/\")) localpath = localpath.substring(1);\n\n try{\n let {stdout: headerText} = await spawn(\n {noecho: true},\n \"sh\",\n [\n path.join(configObject.repodir, `bin/header.sh`),\n moment(Date.now()).format(\"ddd YYYY/MM/DD hh:mm:ssa\"),\n localpath,\n ]\n );\n code = headerText + code;\n write(chalk`header ok, `);\n }catch(e){\n write(chalk`missing unix, `);\n }\n }\n\n //binary presets\n if(providerName == \"Vantage\"){\n code = code.toString(\"base64\");\n headers[\"Content-Transfer-Encoding\"] = \"base64\";\n }\n\n let res = await lib.makeAPIRequest({\n env, path: `/presets/${id}/providerData`,\n body: code, method: \"PUT\", fullResponse: true, timeout: 10000,\n headers,\n });\n write(chalk`code up {yellow ${res.statusCode}}, `);\n }\n async grabMetadata(env){\n let remote = await Preset.getByName(env, this.name);\n this.isGeneric = false;\n if(!remote){\n throw new AbortError(`No file found on remote ${env} with name ${this.name}`);\n }\n this.data = remote.data;\n this.remote = env;\n }\n\n async deleteRemoteVersion(env, id=null){\n if(lib.isLocalEnv(env)) return false;\n if(!id){\n let remote = await Preset.getByName(env, this.name);\n id = remote.id;\n }\n\n return await lib.makeAPIRequest({\n env, path: `/presets/${id}`,\n method: \"DELETE\",\n });\n }\n\n async delete(){\n if(lib.isLocalEnv(this.remote)) return false;\n\n return await this.deleteRemoteVersion(this.remote, this.id);\n }\n\n async uploadCodeToEnv(env, includeMetadata, shouldTest = true){\n if(!this.name){\n let match;\n if(match = /^(#|[\"']{3})\\s*EPH (\\d+)/.exec(this.code.trim())){\n let a = await Asset.getById(env, Number(match[2]))\n return a.startEphemeralEvaluateIdeal(this);\n }else{\n log(chalk`Failed uploading {red ${this.path}}. No name found.`);\n return;\n }\n }\n\n write(chalk`Uploading preset {green ${this.name}} to {green ${env}}: `);\n\n if(this.immutable){\n log(chalk`{magenta IMMUTABLE}. Nothing to do.`);\n return;\n }\n\n //First query the api to see if this already exists.\n let remote = await Preset.getByName(env, this.name);\n\n if(remote){\n //If it exists we can replace it\n write(\"replace, \");\n if(includeMetadata){\n let payload = {data: {attributes: this.data.attributes, type: \"presets\"}};\n if(this.relationships.tagNames){\n payload.relationships = {tagNames: this.relationships.tagNames};\n }\n let res = await lib.makeAPIRequest({\n env, path: `/presets/${remote.id}`, method: \"PATCH\",\n payload,\n fullResponse: true,\n });\n write(chalk`metadata {yellow ${res.statusCode}}, `);\n if(res.statusCode == 500){\n log(chalk`skipping code upload, did not successfully upload metadata`)\n return;\n }\n }\n\n await this.uploadPresetData(env, remote.id);\n }else{\n write(\"create, \");\n let metadata = {data: this.data};\n if(!this.relationships[\"providerType\"]){\n throw new AbortError(\"Cannot acclimatize shelled presets. (try creating it on the env first)\");\n }\n\n await this.acclimatize(env);\n write(\"Posting to create preset... \");\n let res = await lib.makeAPIRequest({\n env, path: `/presets`, method: \"POST\",\n payload: metadata, timeout: 5000,\n });\n let id = res.data.id;\n write(chalk`Created id {green ${id}}... Uploading Code... `);\n await this.uploadPresetData(env, id);\n }\n if(this.test[0] && shouldTest){\n await this.runTest(env);\n }else{\n log(\"No tests. Done.\");\n }\n }\n\n getLocalMetadata(){\n return JSON.parse(readFileSync(this.localmetadatapath, \"utf-8\"));\n }\n getLocalCode(){\n //todo fixup for binary presets, see uploadPresetData\n return readFileSync(this.path, \"utf-8\");\n }\n\n parseHeaderInfo(){\n if(!this.header) return null;\n let abs = {\n built: /Built On:(.+)/.exec(this.header)[1]?.trim(),\n author: /Author:(.+)/.exec(this.header)[1]?.trim(),\n build: /Build:(.+)/.exec(this.header)[1]?.trim(),\n version: /Version:(.+)/.exec(this.header)[1]?.trim(),\n branch: /Branch:(.+)/.exec(this.header)[1]?.trim(),\n commit: /Commit:(.+)/.exec(this.header)[1]?.trim(),\n local: /Local File:(.+)/.exec(this.header)[1]?.trim(),\n }\n\n let tryFormats = [\n [true, \"ddd MMM DD HH:mm:ss YYYY\"],\n [false, \"ddd YYYY/MM/DD LTS\"],\n ];\n\n for(let [isUTC, format] of tryFormats){\n let date;\n if(isUTC){\n date = moment.utc(abs.built, format)\n }else{\n date = moment(abs.built, format)\n }\n\n if(!date.isValid()) continue;\n\n abs.offset = date.fromNow();\n\n break;\n }\n\n return abs;\n }\n\n async printRemoteInfo(env){\n let remote = await Preset.getByName(env, this.name);\n await remote.downloadCode();\n let i = remote.parseHeaderInfo();\n\n if(i){\n log(chalk`\n ENV: {red ${env}}, updated {yellow ~${i.offset}}\n Built on {blue ${i.built}} by {green ${i.author}}\n From ${i.build || \"(unknown)\"} on ${i.branch} ({yellow ${i.commit}})\n `.replace(/^[ \\t]+/gim, \"\").trim());\n }else{\n log(chalk`No header on {red ${env}}`);\n }\n }\n\n async getInfo(envs){\n await this.printDepends();\n for(let env of envs.split(\",\")){\n await this.printRemoteInfo(env);\n }\n }\n\n async printDepends(indent=0, locals=null, seen={}){\n let includeRegex = /@include \"(.+)\"/gim;\n let includes = this.code\n .split(\"\\n\")\n .map(x => includeRegex.exec(x))\n .filter(x => x)\n .map(x => x[1]);\n\n if(!locals){\n locals = new Collection(await loadLocals(\"silo-presets\", Preset));\n }\n\n log(Array(indent + 1).join(\" \") + \"- \" + this.name);\n\n for(let include of includes){\n if(seen[include]){\n log(Array(indent + 1).join(\" \") + \" - (seen) \" + include);\n }else{\n seen[include] = true\n await locals.findByName(include).printDepends(indent + 2, locals, seen);\n }\n }\n }\n}\n\ndefineAssoc(Preset, \"_nameInner\", \"data.attributes.providerSettings.PresetName\");\ndefineAssoc(Preset, \"_nameOuter\", \"data.attributes.name\");\ndefineAssoc(Preset, \"id\", \"data.id\");\ndefineAssoc(Preset, \"attributes\", \"data.attributes\");\ndefineAssoc(Preset, \"relationships\", \"data.relationships\");\ndefineAssoc(Preset, \"remote\", \"meta.remote\");\ndefineAssoc(Preset, \"_code\", \"meta.code\");\ndefineAssoc(Preset, \"_path\", \"meta.path\");\ndefineAssoc(Preset, \"isGeneric\", \"meta.isGeneric\");\ndefineAssoc(Preset, \"ext\", \"meta.ext\");\ndefineAssoc(Preset, \"subproject\", \"meta.project\");\ndefineAssoc(Preset, \"metastring\", \"meta.metastring\");\nPreset.endpoint = \"presets\";\n\nexport default Preset;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nclass Notification extends RallyBase{\n constructor({data, remote}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n }\n\n static async getAllPreCollect(notifications){\n return notifications.sort((a, b) => {\n return a.attributes.type.localeCompare(b.attributes.type) ||\n a.attributes.name.localeCompare(b.attributes.name);\n });\n }\n\n chalkPrint(pad=false){\n let id = String(\"N-\" + this.id)\n if(pad) id = id.padStart(4);\n return chalk`{green ${id}}: {blue ${this.type}} - {green ${this.name}}`;\n }\n}\n\ndefineAssoc(Notification, \"id\", \"data.id\");\ndefineAssoc(Notification, \"name\", \"data.attributes.name\");\ndefineAssoc(Notification, \"address\", \"data.attributes.address\");\ndefineAssoc(Notification, \"type\", \"data.attributes.type\");\ndefineAssoc(Notification, \"remote\", \"meta.remote\");\nNotification.endpoint = \"notificationPresets\"\n\nexport default Notification;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {RallyBase, lib, Collection, AbortError} from \"./rally-tools.js\";\nimport {configObject} from \"./config.js\";\nimport Preset from \"./preset.js\";\nimport Provider from \"./providers.js\";\nimport Notification from \"./notification.js\";\n\nimport {writeFileSync, readFileSync} from \"./fswrap.js\";\nimport {join, resolve as pathResolve} from \"path\";\n\nclass Rule extends RallyBase{\n constructor({path, data, remote, subProject} = {}){\n super();\n if(path){\n path = pathResolve(path);\n try{\n let f = readFileSync(path, \"utf-8\")\n data = JSON.parse(readFileSync(path, \"utf-8\"));\n }catch(e){\n if(e.code === \"ENOENT\"){\n if(configObject.ignoreMissing){\n this.missing = true;\n return undefined;\n }else{\n throw new AbortError(\"Could not load code of local file\");\n }\n }else{\n throw new AbortError(`Unreadable JSON in ${path}. ${e}`);\n }\n }\n }\n this.meta = {};\n this.subproject = subProject;\n if(!data){\n data = Rule.newShell();\n }\n this.data = data;\n this.remote = remote;\n this.isGeneric = !this.remote;\n }\n\n static newShell(){\n return {\n \"attributes\": {\n \"description\": \"-\",\n \"priority\": \"PriorityNorm\",\n \"starred\": false,\n },\n \"relationships\": {},\n \"type\": \"workflowRules\",\n };\n }\n\n async acclimatize(env){\n this.remote = env;\n\n let preset = await this.resolveField(Preset, \"preset\", false, \"specific\");\n let pNext = await this.resolveField(Rule, \"passNext\", false, \"specific\");\n let eNext = await this.resolveField(Rule, \"errorNext\", false, \"specific\");\n let proType = await this.resolveField(Provider, \"providerType\", false, \"specific\");\n\n let dynamicNexts = await this.resolveField(Rule, \"dynamicNexts\", true, \"specific\");\n\n let enterNotif = await this.resolveField(Notification, \"enterNotifications\", true, \"specific\");\n let errorNotif = await this.resolveField(Notification, \"errorNotifications\", true, \"specific\");\n let passNotif = await this.resolveField(Notification, \"passNotifications\", true, \"specific\");\n }\n async saveA(env){\n if(lib.isLocalEnv(env)) return;\n return await this.createIfNotExist(env);\n }\n async saveB(env){\n if(!this.isGeneric){\n await this.resolve();\n }\n this.cleanup();\n if(lib.isLocalEnv(env)){\n log(chalk`Saving rule {green ${this.name}} to {blue ${lib.envName(env)}}.`)\n writeFileSync(this.localpath, JSON.stringify(this.data, null, 4));\n }else{\n await this.acclimatize(env);\n await this.uploadRemote(env);\n }\n }\n get immutable(){\n return false;\n }\n async createIfNotExist(env){\n write(chalk`First pass rule {green ${this.name}} to {green ${env}}: `);\n\n if(this.immutable){\n log(chalk`{magenta IMMUTABLE}. Nothing to do.`);\n return;\n }\n\n //First query the api to see if this already exists.\n let remote = await Rule.getByName(env, this.name);\n\n this.idMap = this.idMap || {};\n\n if(remote){\n this.idMap[env] = remote.id;\n log(chalk`exists ${remote.chalkPrint(false)}`);\n return;\n }\n\n //If it exists we can replace it\n write(\"create, \");\n let res = await lib.makeAPIRequest({\n env, path: `/workflowRules`, method: \"POST\",\n payload: {data: {attributes: {name: this.name}, type: \"workflowRules\"}},\n });\n this.idMap = this.idMap || {};\n this.idMap[env] = res.data.id;\n write(\"id \");\n log(this.idMap[env]);\n }\n\n async patchStrip(){\n delete this.data.attributes.createdAt;\n delete this.data.attributes.starred;\n delete this.data.attributes.updatedAt;\n\n // TEMP FIX FOR BUG IN SDVI\n if(this.relationships.passMetadata && this.relationships.passMetadata[0]){\n log(\"HAS PASS\");\n log(this.name);\n log(\"HAS PASS\");\n }\n delete this.relationships.passMetadata;\n\n if(this.relationships.errorMetadata && this.relationships.errorMetadata[0]){\n log(\"HAS PASS\");\n log(this.name);\n log(\"HAS PASS\");\n }\n delete this.relationships.errorMetadata;\n\n // This is commented out because it was fixed.\n //for(let key in this.relationships){\n //let relationship = this.relationships[key];\n //if(!relationship.data || relationship.data instanceof Array && !relationship.data[0]){\n //delete this.relationships[key];\n //}\n //}\n }\n\n async uploadRemote(env){\n write(chalk`Uploading rule {green ${this.name}} to {green ${env}}: `);\n\n if(this.immutable){\n log(chalk`{magenta IMMUTABLE}. Nothing to do.`);\n return;\n }\n\n if(this.idMap[env]){\n this.remote = env;\n\n await this.patchStrip();\n this.data.id = this.idMap[env];\n //If it exists we can replace it\n write(\"replace, \");\n let res = await lib.makeAPIRequest({\n env, path: `/workflowRules/${this.idMap[env]}`, method: \"PATCH\",\n payload: {data: this.data}, fullResponse: true,\n });\n\n log(chalk`response {yellow ${res.statusCode}}`);\n if(res.statusCode !== 200){\n log(res.body)\n log(JSON.stringify(this.data, null, 4));\n }\n }else{\n throw Error(\"Bad idmap!\");\n }\n }\n\n get localpath(){\n return join(configObject.repodir, this.subproject || \"\", \"silo-rules\", this.name + \".json\");\n }\n\n async resolve(){\n let preset = await this.resolveField(Preset, \"preset\", false);\n //log(preset);\n let pNext = await this.resolveField(Rule, \"passNext\", false);\n let eNext = await this.resolveField(Rule, \"errorNext\", false);\n let proType = await this.resolveField(Provider, \"providerType\", false);\n\n //log(\"Dynamic nexts\")\n let dynamicNexts = await this.resolveField(Rule, \"dynamicNexts\", true);\n //log(dynamicNexts);\n\n let enterNotif = await this.resolveField(Notification, \"enterNotifications\", true);\n let errorNotif = await this.resolveField(Notification, \"errorNotifications\", true);\n let passNotif = await this.resolveField(Notification, \"passNotifications\", true);\n\n //TODO Unsupported\n delete this.relationships[\"enterMetadata\"]\n delete this.relationships[\"errorMetadata\"]\n\n this.isGeneric = true;\n\n return {\n preset, proType,\n pNext, eNext,\n dynamicNexts,\n errorNotif, enterNotif, passNotif,\n };\n }\n\n chalkPrint(pad=true){\n let id = String(\"R-\" + (this.remote && this.remote + \"-\" + this.id || \"LOCAL\"))\n let sub = \"\";\n if(this.subproject){\n sub = chalk`{yellow ${this.subproject}}`;\n }\n if(pad) id = id.padStart(10);\n try{\n return chalk`{green ${id}}: ${sub}{blue ${this.name}}`;\n }catch(e){\n return this.data;\n }\n }\n}\n\ndefineAssoc(Rule, \"name\", \"data.attributes.name\");\ndefineAssoc(Rule, \"description\", \"data.attributes.description\");\ndefineAssoc(Rule, \"id\", \"data.id\");\ndefineAssoc(Rule, \"relationships\", \"data.relationships\");\ndefineAssoc(Rule, \"isGeneric\", \"meta.isGeneric\");\ndefineAssoc(Rule, \"remote\", \"meta.remote\");\ndefineAssoc(Rule, \"subproject\", \"meta.project\");\ndefineAssoc(Rule, \"idMap\", \"meta.idMap\");\nRule.endpoint = \"workflowRules\";\n\nexport default Rule;\n","import Rule from \"./rule.js\";\nimport Preset from \"./preset.js\";\nimport Provider from \"./providers.js\";\nimport Notification from \"./notification.js\";\nimport {Collection, lib} from \"./rally-tools.js\";\nimport {configObject} from \"./config.js\";\n\n\n//TODO\n//Move project into silo metadata\n//move autotest into silo metadata\n//\n\nexport default class SupplyChain{\n constructor(startingRule, stopRule){\n if(startingRule){\n this.startingRule = startingRule;\n this.stopRule = stopRule\n this.remote = startingRule.remote;\n }\n }\n async downloadPresetCode(objs = this.allPresets){\n log(\"Downloading code... \");\n await lib.keepalive(objs.arr.map(x => () => x.downloadCode()));\n }\n async calculate(){\n log(\"Getting rules... \");\n this.allRules = await Rule.getAll(this.remote);\n log(this.allRules.length);\n\n log(\"Getting presets... \");\n this.allPresets = await Preset.getAll(this.remote);\n log(this.allPresets.length);\n\n log(\"Getting providers... \");\n this.allProviders = await Provider.getAll(this.remote);\n log(this.allProviders.length);\n\n log(\"Getting notifications... \");\n this.allNotifications = await Notification.getAll(this.remote);\n log(this.allNotifications.length);\n\n if(!this.startingRule){\n this.rules = this.allRules;\n this.presets = this.allPresets;\n this.notifications = new Collection([]);\n\n await this.downloadPresetCode();\n return\n }else{\n await this.downloadPresetCode();\n }\n\n log(\"Done!\");\n\n //Now we have everything we need to find a whole supply chain\n\n write(\"Calculating Supply chain... \");\n log(this.startingRule.chalkPrint());\n\n let allRuleNames = this.allRules.arr.map(x => x.name).filter(x => x.length >= 4);\n let allPresetNames = this.allPresets.arr.map(x => x.name).filter(x => x.length >= 4);\n let allNotifNames = this.allNotifications.arr.map(x => x.name).filter(x => x.length >= 4);\n let requiredNotifications = new Set();\n\n let ruleQueue = [this.startingRule];\n let presetQueue = [];\n for(let currentRule of ruleQueue){\n if(currentRule === this.stopRule) continue;\n let {\n eNext, pNext, preset,\n passNotif, errorNotif, enterNotif\n } = await currentRule.resolve();\n\n\n passNotif .forEach(n => requiredNotifications.add(n));\n enterNotif.forEach(n => requiredNotifications.add(n));\n errorNotif.forEach(n => requiredNotifications.add(n));\n\n if(eNext && !ruleQueue.includes(eNext)) ruleQueue.push(eNext);\n if(pNext && !ruleQueue.includes(eNext)) ruleQueue.push(pNext);\n\n let neededPresets = preset.findStringsInCode(allPresetNames);\n neededPresets = neededPresets.map(x => this.allPresets.findByName(x));\n\n let neededRules = preset.findStringsInCode(allRuleNames);\n neededRules = neededRules.map(x => this.allRules.findByName(x));\n\n preset\n .findStringsInCode(allNotifNames)\n .map(str => this.allNotifications.findByName(str))\n .forEach(notif => requiredNotifications.add(notif));\n\n neededPresets.push(preset);\n\n for(let p of neededPresets) if(!presetQueue.includes(p)) presetQueue.push(p);\n for(let p of neededRules) if(!ruleQueue .includes(p)) ruleQueue .push(p);\n\n if(configObject.verbose){\n write(currentRule.chalkPrint(false));\n log(\":\");\n write(\" \");\n write(preset.chalkPrint(false));\n log(\":\");\n write(\" Pass Next: \"); if(pNext) write(pNext.chalkPrint(false)); else write(\"None\");\n log(\"\");\n write(\" Err Next: \"); if(eNext) write(eNext.chalkPrint(false)); else write(\"None\");\n log(\"\");\n log(\" Rules:\");\n\n for(let p of neededRules) log(\" \" + p.chalkPrint(true));\n\n log(\" Presets:\");\n for(let p of neededPresets) log(\" \" + p.chalkPrint(true));\n\n log(\"\\n\");\n }\n }\n\n log(\"Done!\")\n\n this.rules = new Collection(ruleQueue);\n this.presets = new Collection(presetQueue);\n requiredNotifications.delete(undefined);\n this.notifications = new Collection([...requiredNotifications]);\n }\n async log(){\n if(this.notifications.arr.length > 0){\n log(\"Required notifications: \");\n this.notifications.log();\n }\n\n if(this.rules.arr.length > 0){\n write(\"Required rules: \");\n log(this.rules.arr.length);\n this.rules.log();\n }\n\n if(this.presets.arr.length > 0){\n write(\"Required presets: \");\n log(this.presets.arr.length);\n this.presets.log();\n }\n\n if(configObject.rawOutput){\n return {presets: this.presets.arr, rules: this.rules.arr, notifications: this.notifications.arr};\n }\n }\n async deleteTo(env){\n for(let preset of this.presets){\n try{\n await preset.deleteRemoteVersion(env);\n }catch(e){log(e);}\n }\n }\n async syncTo(env){\n for(let preset of this.presets){\n try{\n await preset.save(env);\n }catch(e){log(e);}\n }\n if(this.rules.arr[0]){\n log(\"Starting create phase for rules\")\n for(let rule of this.rules){\n try{\n await rule.saveA(env);\n }catch(e){log(e);}\n }\n\n log(\"OK\")\n log(\"Starting link phase for rules\");\n Rule.removeCache(env);\n\n for(let rule of this.rules){\n try{\n await rule.saveB(env);\n }catch(e){log(e);}\n }\n }\n }\n}\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nclass User extends RallyBase{\n constructor({data, remote}){\n super();\n this.data = data;\n this.meta = {};\n this.remote = remote;\n }\n chalkPrint(pad=false){\n let id = String(\"U-\" + this.id)\n if(pad) id = id.padStart(7);\n return chalk`{green ${id}}: {blue ${this.name}}`;\n }\n}\n\ndefineAssoc(User, \"id\", \"data.id\");\ndefineAssoc(User, \"name\", \"data.attributes.name\");\ndefineAssoc(User, \"email\", \"data.attributes.email\");\ndefineAssoc(User, \"remote\", \"meta.remote\");\nUser.endpoint = \"users\"\n\nexport default User;\n","import {RallyBase, lib, AbortError, Collection} from \"./rally-tools.js\";\nimport {cached, defineAssoc} from \"./decorators.js\";\n\nclass Tag extends RallyBase{\n constructor({data, remote} = {}){\n super();\n\n this.meta = {};\n this.remote = remote\n this.data = data;\n\n //this.data.attributes.rallyConfiguration = undefined;\n //this.data.attributes.systemManaged = undefined;\n }\n chalkPrint(pad=true){\n let id = String(\"T-\" + this.remote + \"-\" + this.id)\n if(pad) id = id.padStart(10);\n\n let prefix = this.curated ? \"blue +\" : \"red -\";\n\n return chalk`{green ${id}}: {${prefix}${this.name}}`;\n }\n static async create(env, name, {notCurated} = {}){\n return new Tag({data: await lib.makeAPIRequest({\n env, path: `/${this.endpoint}`, method: \"POST\",\n payload: {\n data: {\n attributes: {\n name,\n curated: notCurated ? false : true,\n },\n type: \"tagNames\",\n }\n }\n }), remote: env});\n }\n}\n\ndefineAssoc(Tag, \"id\", \"data.id\");\ndefineAssoc(Tag, \"attributes\", \"data.attributes\");\ndefineAssoc(Tag, \"relationships\", \"data.relationships\");\ndefineAssoc(Tag, \"name\", \"data.attributes.name\");\ndefineAssoc(Tag, \"curated\", \"data.attributes.curated\");\ndefineAssoc(Tag, \"remote\", \"meta.remote\");\nTag.endpoint = \"tagNames\";\n\nexport default Tag;\n","import {cached, defineAssoc} from \"./decorators.js\";\nimport {lib, Collection, RallyBase} from \"./rally-tools.js\";\n\nexport async function findLineInFile(renderedPreset, lineNumber){\n let trueFileLine = lineNumber;\n\n let linedRenderedPreset = renderedPreset.split(\"\\n\").slice(2,-2);\n renderedPreset = renderedPreset.split(\"\\n\").slice(2,-2).join(\"\\n\");\n let includeLocation = renderedPreset.split(\"\\n\").filter(x => x.includes(\"@include\"));\n\n let endIncludeNumber = -1, addTabDepth = 2;\n let lineBeforeIncludeStatement = '';\n let withinInclude = true;\n\n if (lineNumber > linedRenderedPreset.indexOf(includeLocation[includeLocation.length -1])){\n addTabDepth = 0;\n withinInclude = false;\n }\n\n for (let index = includeLocation.length - 1; index >= 0; index--){\n let currIncludeIndex = linedRenderedPreset.indexOf(includeLocation[index]);\n let tabDepth = includeLocation[index].split(\" \").length;\n if (lineNumber > currIncludeIndex) {\n if (includeLocation[index].split(\" \").filter(Boolean)[1] != \"ERROR:\"){\n if (lineBeforeIncludeStatement.split(\" \").length == tabDepth && withinInclude){\n trueFileLine = trueFileLine - currIncludeIndex;\n break;\n } else if ((lineBeforeIncludeStatement.split(\" \").length + addTabDepth) == tabDepth && endIncludeNumber == -1){\n endIncludeNumber = currIncludeIndex;\n } else if ((lineBeforeIncludeStatement.split(\" \").length + addTabDepth) == tabDepth){\n trueFileLine = trueFileLine - (endIncludeNumber - currIncludeIndex);\n endIncludeNumber = -1;\n }\n }\n } else {\n lineBeforeIncludeStatement = includeLocation[index];\n }\n }\n\n let funcLine = \"\"\n for(let line of linedRenderedPreset.slice(0, lineNumber).reverse()){\n let match = /def (\\w+)/.exec(line);\n if(match){\n funcLine = match[1];\n break;\n }\n }\n\n let includeFilename;\n\n if(lineBeforeIncludeStatement != \"\"){\n includeFilename = lineBeforeIncludeStatement.slice(1).trim().slice(14, -1)\n }else{\n includeFilename = null;\n }\n\n if(includeLocation.length !== 0){\n trueFileLine -= 1;\n lineNumber -= 1;\n }\n\n return {\n lineNumber: trueFileLine,\n includeFilename,\n line: linedRenderedPreset[lineNumber],\n funcLine,\n };\n\n}\n\nexport function printOutLine(eLine){\n return log(chalk`{blue ${eLine.includeFilename || \"Main\"}}:{green ${eLine.lineNumber}} in ${eLine.funcLine}\n${eLine.line}`)\n}\n\nexport async function getInfo(env, jobid){\n log(env, jobid);\n let trace = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/trace`,\n }).catch(x => null);\n\n let renderedPreset = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/preset`,\n }).catch(x => null);\n\n let result = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/result`,\n }).catch(x => null);\n\n let error = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/error`,\n }).catch(x => null);\n\n let output = lib.makeAPIRequest({\n env, path: `/jobs/${jobid}/artifacts/output`,\n }).catch(x => null);\n\n [trace, renderedPreset, result, output, error] = await Promise.all([trace, renderedPreset, result, output, error]);\n\n return {trace, renderedPreset, result, output, error}\n}\n\nexport async function parseTrace(env, jobid){\n\n let {trace, renderedPreset} = await getInfo(env, jobid);\n\n let fileName = '';\n let lineNumber = -1;\n\n let errorLines = []\n let shouldBreak = 0;\n for(let tr of trace.split(\"\\n\\n\").reverse()){\n errorLines.push(tr);\n shouldBreak--;\n if(tr.includes(\"Exception\")) shouldBreak = 1;\n if(tr.includes(\"raised\")) shouldBreak = 1;\n if(!shouldBreak) break;\n }\n\n let errorList = [];\n for(let errLine of errorLines){\n\n lineNumber = /^[\\w ]+:(\\d+):/g.exec(errLine);\n if(lineNumber && lineNumber[1]){\n errorList.push(await findLineInFile(renderedPreset, lineNumber[1]));\n }else{\n errorList.push(errLine);\n }\n }\n\n return errorList;\n}\n\nconst Trace = {parseTrace, printOutLine, getInfo, findLineInFile};\nexport default Trace;\n","require(\"source-map-support\").install();\n\nimport {lib} from \"./rally-tools.js\";\nimport {cached} from \"./decorators.js\";\n\nexport {default as SupplyChain} from \"./supply-chain.js\";\nexport {default as Preset} from \"./preset.js\";\nexport {default as Rule} from \"./rule.js\";\nexport {default as Provider} from \"./providers.js\";\nexport {default as Notification} from \"./notification.js\";\nexport {default as Asset} from \"./asset.js\";\nexport {default as User} from \"./user.js\";\nexport {default as Tag} from \"./tag.js\";\n//TODO fix export from index\nexport {default as Trace} from \"./trace.js\";\n\nexport * from \"./config.js\";\n\nexport * from \"./rally-tools.js\";\n\nexport const rallyFunctions = {\n async bestPagintation(){\n global.silentAPI = true;\n for(let i = 10; i <= 30; i+=5){\n console.time(\"test with \" + i);\n let dl = await lib.indexPathFast(\"DEV\", `/workflowRules?page=1p${i}`);\n console.timeEnd(\"test with \" + i);\n }\n },\n async uploadPresets(env, presets, createFunc = ()=>false){\n for(let preset of presets){\n await preset.uploadCodeToEnv(env, createFunc);\n }\n },\n //Dummy test access\n async testAccess(env){\n if(lib.isLocalEnv(env)){\n //TODO\n return true;\n }\n let result = await lib.makeAPIRequest({env, path: \"/providers?page=1p1\", fullResponse: true, timeout: 1000});\n return result.statusCode;\n },\n}\n"],"names":["configFile","homedir","loadConfig","file","configObject","hasConfig","json","readFileSync","JSON","parse","e","code","loadConfigFromArgs","args","tempConfig","config","setConfig","obj","deepAccess","path","o","key","defineAssoc","classname","shortname","split","lastKey","pop","Object","defineProperty","prototype","get","set","val","spawn","options","unshift","Promise","resolve","reject","start","performance","now","stdout","stderr","cp","cp_spawn","write","global","noecho","on","chunk","end","time","timestr","exitCode","chalk","log","text","console","process","elog","ewrite","errorLog","map","red","lib","makeAPIRequest","env","path_full","fullPath","payload","body","method","qs","headers","fullResponse","timeout","api","UnconfiguredEnvError","dangerModify","restrictUAT","ProtectedEnvError","rally_api_key","rally_api","url","startsWith","replace","stringify","fullHeaders","Accept","appName","vvverbose","requestOptions","uri","auth","bearer","simple","resolveWithFullResponse","response","rp","vverbose","request","href","cause","APIError","includes","statusCode","contentType","isJSONResponse","trim","AbortError","indexPath","all","opts","numPages","pageSize","links","last","data","next","observe","str","exec","slice","arrayChunk","array","chunkSize","newArr","i","length","push","doPromises","promises","result","cb","promise","res","clearProgress","size","globalProgress","repeat","drawProgress","max","columns","pct","Number","numFilled","Math","floor","numEmpty","keepalive","func","inputData","chunksize","_","progress","total","createPromise","ret","values","finished","threads","range","whichThread","currentPromise","undefined","indexPathFast","initOpts","page","baselink","first","linkToPage","allResults","limit","item","isLocalEnv","envName","Error","constructor","message","captureStackTrace","name","FileTooLargeError","parentAsset","sizeGB","Collection","arr","Symbol","iterator","findById","id","find","x","findByName","findByNameContains","d","chalkPrint","RallyBase","handleCaching","cache","isLoaded","hasLoadedAll","getById","remote","metastring","endpoint","included","getByName","filter","getAllPreCollect","getAll","datas","sort","removeCache","resolveApply","type","dataObj","direction","resolveField","isArray","field","relationships","cleanup","entries","organization","sleep","setTimeout","inquirer","importLazy","readdir","loadLocals","Class","basePath","repodir","f","objs","Provider","meta","getEditorConfig","editorConfig","fileExt","getFileExtension","providers","a","b","attributes","category","localeCompare","python","getmap","lang","pad","String","padStart","File","parent","canBeDownloaded","getContent","force","contentLink","delete","remove","selfLink","instances","round","Asset","lite","metadata","normalizeMetadata","newMetadata","md","usage","getMetadata","forceRefresh","req","patchMetadata","Workflow","Metadata","createNew","getFiles","addFile","label","fileuris","Array","startWorkflow","jobName","initData","priority","startAnonWorkflow","startEphemeralEvaluateIdeal","preset","dynamicPresetData","provider","evalInfo","providerTypeName","rallyConfiguration","providerData","Buffer","from","toString","movie","self","state","startEvaluate","presetid","rename","newName","home","colon","siloLike","pathTransform","invertedPath","fs","writeFileSync","dircreated","directory","dirname","statSync","nodir","mkdirSync","exists","Preset","subProject","pathResolve","subproject","pathspl","ext","getLocalCode","ignoreMissing","missing","parseFilenameForName","parseCodeForName","getLocalMetadata","isGeneric","localmetadatapath","newShell","systemManaged","fromMetadata","providerType","realpath","getLocalPath","acclimatize","ptype","test","regex","match","matches","runTest","asset","proType","saveLocal","saveLocalMetadata","saveLocalFile","localpath","uploadRemote","uploadCodeToEnv","save","saved","downloadCode","headerRegex","hasHeader","header","substring","_code","v","sub","endsWith","basename","name_regex","findStringsInCode","strings","RegExp","join","_path","_nameOuter","_nameInner","value","immutable","updateImmutable","uploadPresetData","providerName","skipHeader","headerText","moment","Date","format","grabMetadata","deleteRemoteVersion","includeMetadata","shouldTest","tagNames","parseHeaderInfo","abs","built","author","build","version","branch","commit","local","tryFormats","isUTC","date","utc","isValid","offset","fromNow","printRemoteInfo","getInfo","envs","printDepends","indent","locals","seen","includeRegex","include","Notification","notifications","Rule","pNext","eNext","dynamicNexts","enterNotif","errorNotif","passNotif","saveA","createIfNotExist","saveB","idMap","patchStrip","createdAt","starred","updatedAt","passMetadata","errorMetadata","SupplyChain","startingRule","stopRule","downloadPresetCode","allPresets","calculate","allRules","allProviders","allNotifications","rules","presets","allRuleNames","allPresetNames","allNotifNames","requiredNotifications","Set","ruleQueue","presetQueue","currentRule","forEach","n","add","neededPresets","neededRules","notif","p","verbose","rawOutput","deleteTo","syncTo","rule","User","Tag","prefix","curated","create","notCurated","findLineInFile","renderedPreset","lineNumber","trueFileLine","linedRenderedPreset","includeLocation","endIncludeNumber","addTabDepth","lineBeforeIncludeStatement","withinInclude","indexOf","index","currIncludeIndex","tabDepth","Boolean","funcLine","line","reverse","includeFilename","printOutLine","eLine","jobid","trace","catch","error","output","parseTrace","errorLines","shouldBreak","tr","errorList","errLine","Trace","require","install","rallyFunctions","bestPagintation","silentAPI","dl","timeEnd","uploadPresets","createFunc","testAccess"],"mappings":"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"}
\No newline at end of file