UNPKG

176 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.error(...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, basename} 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 objs = (await readdir(basePath))\n .filter(name => name.includes(path))\n .filter(name => !basename(name).startsWith(\".\"))\n .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 = await 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 file)\"}} {red ${this.sizeHR}}`;\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 get sizeHR(){\n let units = [\"B\", \"K\", \"M\", \"G\", \"T\"];\n\n let unitIdx = 0;\n\n let size = this.size;\n while(size > 1000){\n size /= 1024;\n unitIdx++;\n }\n\n if(size > 100){\n size = Math.round(size);\n }else{\n size = Math.round(size * 10) / 10;\n }\n\n return size + units[unitIdx];\n }\n\n get instancesList() {\n let instances = [];\n for(let [key, val] of Object.entries(this.instances)){\n let n = {id: key};\n Object.assign(n, val);\n instances.push(n);\n }\n return instances;\n }\n\n static rslURL(instance){\n return `rsl://${instance.storageLocationName}/${instance.name}`;\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 {configObject} from \"./config.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 async migrate(targetEnv){\n configObject.globalProgress = false;\n log(`Creating paired file in ${targetEnv}`);\n\n //Fetch metadata in parallel, we await it later\n let _mdPromise = this.getMetadata();\n\n let targetAsset = await Asset.getByName(targetEnv, this.name);\n if(targetAsset){\n log(`Asset already exists ${targetAsset.chalkPrint()}`);\n //if(configObject.script) process.exit(10);\n }else{\n targetAsset = await Asset.createNew(this.name, targetEnv);\n log(`Asset created ${targetAsset.chalkPrint()}`);\n }\n\n //wait for metadata to be ready before patching\n await _mdPromise;\n log(\"Adding asset metadata\");\n await targetAsset.patchMetadata(this.md);\n\n //FIXME\n //Currently, WORKFLOW_METADATA cannot be patched via api: we need to\n //start a ephemeral eval to upload it\n log(\"Adding asset workflow metadata\");\n let md = JSON.stringify(JSON.stringify(this.md.Workflow));\n let fakePreset = {\n code: `WORKFLOW_METADATA = json.loads(${md})`\n }\n await targetAsset.startEphemeralEvaluateIdeal(fakePreset);\n\n let fileCreations = [];\n for(let file of await this.getFiles()){\n //Check for any valid copy-able instances\n for(let inst of file.instancesList){\n //We need to skip internal files\n if(inst.storageLocationName === \"Rally Platform Bucket\") continue;\n\n log(`Adding file: ${file.chalkPrint()}`);\n fileCreations.push(targetAsset.addFileInstance(file, inst));\n }\n }\n await Promise.all(fileCreations);\n }\n\n async addFileInstance(file, inst, tagList = []){\n let newInst = {\n uri: File.rslURL(inst),\n name: inst.name,\n size: inst.size,\n lastModified: inst.lastModified,\n storageLocationName: inst.storageLocationName,\n };\n\n let request = lib.makeAPIRequest({\n env: this.remote, path: `/files`, method: \"POST\",\n\n payload: {\n data: {\n type: \"files\",\n attributes: {\n label: file.label,\n tagList,\n instances: {\n \"1\": newInst,\n }\n },\n relationships: {\n asset: {\n data: {\n id: this.id,\n type: \"assets\"\n },\n },\n },\n }\n }\n });\n\n\n try{\n let fileData = await request;\n let newFile = new File({data: fileData.data, remote: this.remote, parent: this})\n if(configObject.script) console.log(inst.uri, newFile.instancesList[0].uri);\n }catch(e){\n log(chalk`{red Failed file: ${file.chalkPrint()}}`)\n }\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 includeRegex = /@include/g;\n\n let includes = [];\n\n let inc;\n while(inc = includeRegex.exec(this.code)){\n includes.push(inc[1]);\n }\n\n //let includes = this.code\n //.split(\"\\n\")\n //.map(x => includeRegex.exec(x))\n //.filter(x => x)\n //.map(x => x[1]);\n //log(includes);\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 let file = await locals.findByName(include);\n if(file){\n await file.printDepends(indent + 2, locals, seen);\n }else{\n log(Array(indent + 1).join(\" \") + \" - (miss) \" + include);\n }\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","error","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","objs","basename","Provider","meta","getEditorConfig","editorConfig","fileExt","getFileExtension","providers","a","b","attributes","category","localeCompare","python","getmap","lang","pad","String","padStart","File","parent","sizeHR","canBeDownloaded","getContent","force","contentLink","delete","remove","selfLink","instances","round","units","unitIdx","instancesList","n","assign","rslURL","instance","storageLocationName","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","migrate","targetEnv","_mdPromise","targetAsset","fakePreset","fileCreations","inst","addFileInstance","tagList","newInst","lastModified","asset","fileData","newFile","script","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","proType","saveLocal","saveLocalMetadata","saveLocalFile","localpath","uploadRemote","uploadCodeToEnv","save","saved","downloadCode","headerRegex","hasHeader","header","substring","_code","v","sub","endsWith","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","inc","include","Notification","notifications","Rule","f","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","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","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