UNPKG

@hotglue/cli

Version:
33 lines 77.1 kB
#!/usr/bin/env node "use strict";var e=require("fs"),n=require("path"),t=require("os"),o=require("yargs"),s=require("util"),r=require("assert"),a=require("url"),i=require("fs/promises"),c=require("cosmiconfig"),l=require("chalk"),d=require("aws-sdk"),u=require("debug"),f=require("yaml"),p=require("cli-table"),y=require("ora"),g=require("micromatch"),h=require("axios");require("progress");var m=require("node:fs/promises"),w="undefined"!=typeof document?document.currentScript:null;function b(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var v,$,k,_,j,O,x,E={};function T(){if(v)return E;v=1;const o=e,s=n,r=t;function a(e){console.log(`[dotenv][DEBUG] ${e}`)}const i=/^\s*([\w.-]+)\s*=\s*("[^"]*"|'[^']*'|[^#]*)?(\s*|\s*#.*)?$/,c=/\\n/g,l=/\r\n|\n|\r/;function d(e,n){const t=Boolean(n&&n.debug),o={};return e.toString().split(l).forEach((function(e,n){const s=e.match(i);if(null!=s){const e=s[1];let n=s[2]||"";const t=n.length-1,r='"'===n[0]&&'"'===n[t];"'"===n[0]&&"'"===n[t]||r?(n=n.substring(1,t),r&&(n=n.replace(c,"\n"))):n=n.trim(),o[e]=n}else if(t){const t=e.trim();t.length&&"#"!==t[0]&&a(`Failed to match key and value when parsing line ${n+1}: ${e}`)}})),o}return E.config=function(e){let n=s.resolve(process.cwd(),".env"),t="utf8";const i=Boolean(e&&e.debug),c=Boolean(e&&e.override);var l;e&&(null!=e.path&&(n="~"===(l=e.path)[0]?s.join(r.homedir(),l.slice(1)):l),null!=e.encoding&&(t=e.encoding));try{const e=d(o.readFileSync(n,{encoding:t}),{debug:i});return Object.keys(e).forEach((function(n){Object.prototype.hasOwnProperty.call(process.env,n)?(!0===c&&(process.env[n]=e[n]),i&&a(!0===c?`"${n}" is already defined in \`process.env\` and WAS overwritten`:`"${n}" is already defined in \`process.env\` and was NOT overwritten`)):process.env[n]=e[n]})),{parsed:e}}catch(e){return i&&a(`Failed to load ${n} ${e.message}`),{error:e}}},E.parse=d,E}O||(O=1,T().config(Object.assign({},function(){if(k)return $;k=1;const e={};return null!=process.env.DOTENV_CONFIG_ENCODING&&(e.encoding=process.env.DOTENV_CONFIG_ENCODING),null!=process.env.DOTENV_CONFIG_PATH&&(e.path=process.env.DOTENV_CONFIG_PATH),null!=process.env.DOTENV_CONFIG_DEBUG&&(e.debug=process.env.DOTENV_CONFIG_DEBUG),null!=process.env.DOTENV_CONFIG_OVERRIDE&&(e.override=process.env.DOTENV_CONFIG_OVERRIDE),$=e}(),function(){if(j)return _;j=1;const e=/^dotenv_config_(encoding|path|debug|override)=(.+)$/;return _=function(n){return n.reduce((function(n,t){const o=t.match(e);return o&&(n[o[1]]=o[2]),n}),{})}}()(process.argv))));Error;function S(){return process.versions.electron&&!process.defaultApp?0:1} /** * @license * Copyright (c) 2016, Contributors * SPDX-License-Identifier: ISC */ function F(e){if(e!==e.toLowerCase()&&e!==e.toUpperCase()||(e=e.toLowerCase()),-1===e.indexOf("-")&&-1===e.indexOf("_"))return e;{let n="",t=!1;const o=e.match(/^-+/);for(let s=o?o[0].length:0;s<e.length;s++){let o=e.charAt(s);t&&(t=!1,o=o.toUpperCase()),0===s||"-"!==o&&"_"!==o?"-"!==o&&"_"!==o&&(n+=o):t=!0}return n}}function I(e,n){const t=e.toLowerCase();n=n||"-";let o="";for(let s=0;s<e.length;s++){const r=t.charAt(s),a=e.charAt(s);o+=r!==a&&s>0?`${n}${t.charAt(s)}`:a}return o}function A(e){return null!=e&&("number"==typeof e||(!!/^0x[0-9a-f]+$/i.test(e)||!/^0[^.]/.test(e)&&/^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(e)))} /** * @license * Copyright (c) 2016, Contributors * SPDX-License-Identifier: ISC */ /** * @license * Copyright (c) 2016, Contributors * SPDX-License-Identifier: ISC */ let U;!function(e){e.BOOLEAN="boolean",e.STRING="string",e.NUMBER="number",e.ARRAY="array"}(x||(x={}));function N(e){return void 0!==e?e+1:1}function K(e){return"__proto__"===e?"___proto___":e} /** * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js * CJS and ESM environments. * * @license * Copyright (c) 2016, Contributors * SPDX-License-Identifier: ISC */ const B=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process.env.YARGS_MIN_NODE_VERSION):12;if(process&&process.version){if(Number(process.version.match(/v([^.]+)/)[1])<B)throw Error(`yargs parser supports a minimum Node.js version of ${B}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`)}const D=process?process.env:{},P=new class{constructor(e){U=e}parse(e,n){const t=Object.assign({alias:void 0,array:void 0,boolean:void 0,config:void 0,configObjects:void 0,configuration:void 0,coerce:void 0,count:void 0,default:void 0,envPrefix:void 0,narg:void 0,normalize:void 0,string:void 0,number:void 0,__:void 0,key:void 0},n),o=function(e){if(Array.isArray(e))return e.map((e=>"string"!=typeof e?e+"":e));e=e.trim();let n=0,t=null,o=null,s=null;const r=[];for(let a=0;a<e.length;a++)t=o,o=e.charAt(a)," "!==o||s?(o===s?s=null:"'"!==o&&'"'!==o||s||(s=o),r[n]||(r[n]=""),r[n]+=o):" "!==t&&n++;return r} /** * @license * Copyright (c) 2016, Contributors * SPDX-License-Identifier: ISC */(e),s="string"==typeof e,r=function(e){const n=[],t=Object.create(null);let o=!0;Object.keys(e).forEach((function(t){n.push([].concat(e[t],t))}));for(;o;){o=!1;for(let e=0;e<n.length;e++)for(let t=e+1;t<n.length;t++){if(n[e].filter((function(e){return-1!==n[t].indexOf(e)})).length){n[e]=n[e].concat(n[t]),n.splice(t,1),o=!0;break}}}return n.forEach((function(e){const n=(e=e.filter((function(e,n,t){return t.indexOf(e)===n}))).pop();void 0!==n&&"string"==typeof n&&(t[n]=e)})),t}(Object.assign(Object.create(null),t.alias)),a=Object.assign({"boolean-negation":!0,"camel-case-expansion":!0,"combine-arrays":!1,"dot-notation":!0,"duplicate-arguments-array":!0,"flatten-duplicate-arrays":!0,"greedy-arrays":!0,"halt-at-non-option":!1,"nargs-eats-options":!1,"negation-prefix":"no-","parse-numbers":!0,"parse-positional-numbers":!0,"populate--":!1,"set-placeholder-key":!1,"short-option-groups":!0,"strip-aliased":!1,"strip-dashed":!1,"unknown-options-as-args":!1},t.configuration),i=Object.assign(Object.create(null),t.default),c=t.configObjects||[],l=t.envPrefix,d=a["populate--"],u=d?"--":"_",f=Object.create(null),p=Object.create(null),y=t.__||U.format,g={aliases:Object.create(null),arrays:Object.create(null),bools:Object.create(null),strings:Object.create(null),numbers:Object.create(null),counts:Object.create(null),normalize:Object.create(null),configs:Object.create(null),nargs:Object.create(null),coercions:Object.create(null),keys:[]},h=/^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/,m=new RegExp("^--"+a["negation-prefix"]+"(.+)");[].concat(t.array||[]).filter(Boolean).forEach((function(e){const n="object"==typeof e?e.key:e,t=Object.keys(e).map((function(e){return{boolean:"bools",string:"strings",number:"numbers"}[e]})).filter(Boolean).pop();t&&(g[t][n]=!0),g.arrays[n]=!0,g.keys.push(n)})),[].concat(t.boolean||[]).filter(Boolean).forEach((function(e){g.bools[e]=!0,g.keys.push(e)})),[].concat(t.string||[]).filter(Boolean).forEach((function(e){g.strings[e]=!0,g.keys.push(e)})),[].concat(t.number||[]).filter(Boolean).forEach((function(e){g.numbers[e]=!0,g.keys.push(e)})),[].concat(t.count||[]).filter(Boolean).forEach((function(e){g.counts[e]=!0,g.keys.push(e)})),[].concat(t.normalize||[]).filter(Boolean).forEach((function(e){g.normalize[e]=!0,g.keys.push(e)})),"object"==typeof t.narg&&Object.entries(t.narg).forEach((([e,n])=>{"number"==typeof n&&(g.nargs[e]=n,g.keys.push(e))})),"object"==typeof t.coerce&&Object.entries(t.coerce).forEach((([e,n])=>{"function"==typeof n&&(g.coercions[e]=n,g.keys.push(e))})),void 0!==t.config&&(Array.isArray(t.config)||"string"==typeof t.config?[].concat(t.config).filter(Boolean).forEach((function(e){g.configs[e]=!0})):"object"==typeof t.config&&Object.entries(t.config).forEach((([e,n])=>{"boolean"!=typeof n&&"function"!=typeof n||(g.configs[e]=n)}))),function(...e){e.forEach((function(e){Object.keys(e||{}).forEach((function(e){g.aliases[e]||(g.aliases[e]=[].concat(r[e]||[]),g.aliases[e].concat(e).forEach((function(n){if(/-/.test(n)&&a["camel-case-expansion"]){const t=F(n);t!==e&&-1===g.aliases[e].indexOf(t)&&(g.aliases[e].push(t),f[t]=!0)}})),g.aliases[e].concat(e).forEach((function(n){if(n.length>1&&/[A-Z]/.test(n)&&a["camel-case-expansion"]){const t=I(n,"-");t!==e&&-1===g.aliases[e].indexOf(t)&&(g.aliases[e].push(t),f[t]=!0)}})),g.aliases[e].forEach((function(n){g.aliases[n]=[e].concat(g.aliases[e].filter((function(e){return n!==e})))})))}))}))}(t.key,r,t.default,g.arrays),Object.keys(i).forEach((function(e){(g.aliases[e]||[]).forEach((function(n){i[n]=i[e]}))}));let w=null;Object.keys(g.counts).find((e=>C(e,g.arrays)?(w=Error(y("Invalid configuration: %s, opts.count excludes opts.array.",e)),!0):!!C(e,g.nargs)&&(w=Error(y("Invalid configuration: %s, opts.count excludes opts.narg.",e)),!0)));let b=[];const v=Object.assign(Object.create(null),{_:[]}),$={};for(let e=0;e<o.length;e++){const n=o[e],t=n.replace(/^-{3,}/,"---");let s,r,i,c,l,d;if("--"!==n&&z(n))k(n);else{if(t.match(/---+(=|$)/)){k(n);continue}if(n.match(/^--.+=/)||!a["short-option-groups"]&&n.match(/^-.+=/))c=n.match(/^--?([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&(C(c[1],g.arrays)?e=j(e,c[1],o,c[2]):!1!==C(c[1],g.nargs)?e=_(e,c[1],o,c[2]):O(c[1],c[2],!0));else if(n.match(m)&&a["boolean-negation"])c=n.match(m),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],O(r,!!C(r,g.arrays)&&[!1]));else if(n.match(/^--.+/)||!a["short-option-groups"]&&n.match(/^-[^-]+/))c=n.match(/^--?(.+)/),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],C(r,g.arrays)?e=j(e,r,o):!1!==C(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||l.match(/^-/)&&!l.match(h)||C(r,g.bools)||C(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,q(r)):(O(r,l),e++)));else if(n.match(/^-.\..+=/))c=n.match(/^-([^=]+)=([\s\S]*)$/),null!==c&&Array.isArray(c)&&c.length>=3&&O(c[1],c[2]);else if(n.match(/^-.\..+/)&&!n.match(h))l=o[e+1],c=n.match(/^-(.\..+)/),null!==c&&Array.isArray(c)&&c.length>=2&&(r=c[1],void 0===l||l.match(/^-/)||C(r,g.bools)||C(r,g.counts)?O(r,q(r)):(O(r,l),e++));else if(n.match(/^-[^-]+/)&&!n.match(h)){i=n.slice(1,-1).split(""),s=!1;for(let t=0;t<i.length;t++){if(l=n.slice(t+2),i[t+1]&&"="===i[t+1]){d=n.slice(t+3),r=i[t],C(r,g.arrays)?e=j(e,r,o,d):!1!==C(r,g.nargs)?e=_(e,r,o,d):O(r,d),s=!0;break}if("-"!==l){if(/[A-Za-z]/.test(i[t])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(l)&&!1===C(l,g.bools)){O(i[t],l),s=!0;break}if(i[t+1]&&i[t+1].match(/\W/)){O(i[t],l),s=!0;break}O(i[t],q(i[t]))}else O(i[t],l)}r=n.slice(-1)[0],s||"-"===r||(C(r,g.arrays)?e=j(e,r,o):!1!==C(r,g.nargs)?e=_(e,r,o):(l=o[e+1],void 0===l||/^(-|--)[^-]/.test(l)&&!l.match(h)||C(r,g.bools)||C(r,g.counts)?/^(true|false)$/.test(l)?(O(r,l),e++):O(r,q(r)):(O(r,l),e++)))}else if(n.match(/^-[0-9]$/)&&n.match(h)&&C(n.slice(1),g.bools))r=n.slice(1),O(r,q(r));else{if("--"===n){b=o.slice(e+1);break}if(a["halt-at-non-option"]){b=o.slice(e);break}k(n)}}}function k(e){const n=S("_",e);"string"!=typeof n&&"number"!=typeof n||v._.push(n)}function _(e,n,t,o){let s,r=C(n,g.nargs);if(r="number"!=typeof r||isNaN(r)?1:r,0===r)return V(o)||(w=Error(y("Argument unexpected for: %s",n))),O(n,q(n)),e;let i=V(o)?0:1;if(a["nargs-eats-options"])t.length-(e+1)+i<r&&(w=Error(y("Not enough arguments following: %s",n))),i=r;else{for(s=e+1;s<t.length&&(!t[s].match(/^-[^0-9]/)||t[s].match(h)||z(t[s]));s++)i++;i<r&&(w=Error(y("Not enough arguments following: %s",n)))}let c=Math.min(i,r);for(!V(o)&&c>0&&(O(n,o),c--),s=e+1;s<c+e+1;s++)O(n,t[s]);return e+c}function j(e,n,t,o){let r=[],c=o||t[e+1];const l=C(n,g.nargs);if(C(n,g.bools)&&!/^(true|false)$/.test(c))r.push(!0);else if(V(c)||V(o)&&/^-/.test(c)&&!h.test(c)&&!z(c)){if(void 0!==i[n]){const e=i[n];r=Array.isArray(e)?e:[e]}}else{V(o)||r.push(T(n,o,!0));for(let o=e+1;o<t.length&&!(!a["greedy-arrays"]&&r.length>0||l&&"number"==typeof l&&r.length>=l)&&(c=t[o],!/^-/.test(c)||h.test(c)||z(c));o++)e=o,r.push(T(n,c,s))}return"number"==typeof l&&(l&&r.length<l||isNaN(l)&&0===r.length)&&(w=Error(y("Not enough arguments following: %s",n))),O(n,r),e}function O(e,n,t=s){if(/-/.test(e)&&a["camel-case-expansion"]){const n=e.split(".").map((function(e){return F(e)})).join(".");E(e,n)}const o=T(e,n,t),r=e.split(".");if(L(v,r,o),g.aliases[e]&&g.aliases[e].forEach((function(e){const n=e.split(".");L(v,n,o)})),r.length>1&&a["dot-notation"]&&(g.aliases[r[0]]||[]).forEach((function(n){let t=n.split(".");const s=[].concat(r);s.shift(),t=t.concat(s),(g.aliases[e]||[]).includes(t.join("."))||L(v,t,o)})),C(e,g.normalize)&&!C(e,g.arrays)){[e].concat(g.aliases[e]||[]).forEach((function(e){Object.defineProperty($,e,{enumerable:!0,get:()=>n,set(e){n="string"==typeof e?U.normalize(e):e}})}))}}function E(e,n){g.aliases[e]&&g.aliases[e].length||(g.aliases[e]=[n],f[n]=!0),g.aliases[n]&&g.aliases[n].length||E(n,e)}function T(e,n,t){t&&(n=function(e){return"string"!=typeof e||"'"!==e[0]&&'"'!==e[0]||e[e.length-1]!==e[0]?e:e.substring(1,e.length-1)}(n)),(C(e,g.bools)||C(e,g.counts))&&"string"==typeof n&&(n="true"===n);let o=Array.isArray(n)?n.map((function(n){return S(e,n)})):S(e,n);return C(e,g.counts)&&(V(o)||"boolean"==typeof o)&&(o=N()),C(e,g.normalize)&&C(e,g.arrays)&&(o=Array.isArray(n)?n.map((e=>U.normalize(e))):U.normalize(n)),o}function S(e,n){if(!a["parse-positional-numbers"]&&"_"===e)return n;if(!C(e,g.strings)&&!C(e,g.bools)&&!Array.isArray(n)){(A(n)&&a["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${n}`)))||!V(n)&&C(e,g.numbers))&&(n=Number(n))}return n}function B(e,n){Object.keys(e).forEach((function(t){const o=e[t],s=n?n+"."+t:t;"object"==typeof o&&null!==o&&!Array.isArray(o)&&a["dot-notation"]?B(o,s):(!M(v,s.split("."))||C(s,g.arrays)&&a["combine-arrays"])&&O(s,o)}))}function D(e,n){if(void 0===l)return;const t="string"==typeof l?l:"",o=U.env();Object.keys(o).forEach((function(s){if(""===t||0===s.lastIndexOf(t,0)){const r=s.split("__").map((function(e,n){return 0===n&&(e=e.substring(t.length)),F(e)}));(n&&g.configs[r.join(".")]||!n)&&!M(e,r)&&O(r.join("."),o[s])}}))}function P(e,n,t,o=!1){Object.keys(t).forEach((function(s){M(e,s.split("."))||(L(e,s.split("."),t[s]),o&&(p[s]=!0),(n[s]||[]).forEach((function(n){M(e,n.split("."))||L(e,n.split("."),t[s])})))}))}function M(e,n){let t=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){t=t[e]||{}}));const o=n[n.length-1];return"object"==typeof t&&o in t}function L(e,n,t){let o=e;a["dot-notation"]||(n=[n.join(".")]),n.slice(0,-1).forEach((function(e){e=K(e),"object"==typeof o&&void 0===o[e]&&(o[e]={}),"object"!=typeof o[e]||Array.isArray(o[e])?(Array.isArray(o[e])?o[e].push({}):o[e]=[o[e],{}],o=o[e][o[e].length-1]):o=o[e]}));const s=K(n[n.length-1]),r=C(n.join("."),g.arrays),i=Array.isArray(t);let c=a["duplicate-arguments-array"];!c&&C(s,g.nargs)&&(c=!0,(!V(o[s])&&1===g.nargs[s]||Array.isArray(o[s])&&o[s].length===g.nargs[s])&&(o[s]=void 0)),t===N()?o[s]=N(o[s]):Array.isArray(o[s])?c&&r&&i?o[s]=a["flatten-duplicate-arrays"]?o[s].concat(t):(Array.isArray(o[s][0])?o[s]:[o[s]]).concat([t]):c||Boolean(r)!==Boolean(i)?o[s]=o[s].concat([t]):o[s]=t:void 0===o[s]&&r?o[s]=i?t:[t]:!c||void 0===o[s]||C(s,g.counts)||C(s,g.bools)?o[s]=t:o[s]=[o[s],t]}function C(e,n){const t=[].concat(g.aliases[e]||[],e),o=Object.keys(n),s=t.find((e=>o.includes(e)));return!!s&&n[s]}function R(e){const n=Object.keys(g);return[].concat(n.map((e=>g[e]))).some((function(n){return Array.isArray(n)?n.includes(e):n[e]}))}function z(e){return a["unknown-options-as-args"]&&function(e){if(e=e.replace(/^-{3,}/,"--"),e.match(h))return!1;if(function(e){if(e.match(h)||!e.match(/^-[^-]+/))return!1;let n,t=!0;const o=e.slice(1).split("");for(let s=0;s<o.length;s++){if(n=e.slice(s+2),!R(o[s])){t=!1;break}if(o[s+1]&&"="===o[s+1]||"-"===n||/[A-Za-z]/.test(o[s])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(n)||o[s+1]&&o[s+1].match(/\W/))break}return t}(e))return!1;return!function(e,...n){return[].concat(...n).some((function(n){const t=e.match(n);return t&&R(t[1])}))}(e,/^-+([^=]+?)=[\s\S]*$/,m,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(e)}function q(e){return C(e,g.bools)||C(e,g.counts)||!(`${e}`in i)?(n=function(e){let n=x.BOOLEAN;return C(e,g.strings)?n=x.STRING:C(e,g.numbers)?n=x.NUMBER:C(e,g.bools)?n=x.BOOLEAN:C(e,g.arrays)&&(n=x.ARRAY),n}(e),{[x.BOOLEAN]:!0,[x.STRING]:"",[x.NUMBER]:void 0,[x.ARRAY]:[]}[n]):i[e];var n}function V(e){return void 0===e}return D(v,!0),D(v,!1),function(e){const n=Object.create(null);P(n,g.aliases,i),Object.keys(g.configs).forEach((function(t){const o=e[t]||n[t];if(o)try{let e=null;const n=U.resolve(U.cwd(),o),s=g.configs[t];if("function"==typeof s){try{e=s(n)}catch(n){e=n}if(e instanceof Error)return void(w=e)}else e=U.require(n);B(e)}catch(n){"PermissionDenied"===n.name?w=n:e[t]&&(w=Error(y("Invalid JSON config file: %s",o)))}}))}(v),void 0!==c&&c.forEach((function(e){B(e)})),P(v,g.aliases,i,!0),function(e){let n;const t=new Set;Object.keys(e).forEach((function(o){if(!t.has(o)&&(n=C(o,g.coercions),"function"==typeof n))try{const s=S(o,n(e[o]));[].concat(g.aliases[o]||[],o).forEach((n=>{t.add(n),e[n]=s}))}catch(e){w=e}}))}(v),a["set-placeholder-key"]&&function(e){g.keys.forEach((n=>{~n.indexOf(".")||void 0===e[n]&&(e[n]=void 0)}))}(v),Object.keys(g.counts).forEach((function(e){M(v,e.split("."))||O(e,0)})),d&&b.length&&(v[u]=[]),b.forEach((function(e){v[u].push(e)})),a["camel-case-expansion"]&&a["strip-dashed"]&&Object.keys(v).filter((e=>"--"!==e&&e.includes("-"))).forEach((e=>{delete v[e]})),a["strip-aliased"]&&[].concat(...Object.keys(r).map((e=>r[e]))).forEach((e=>{a["camel-case-expansion"]&&e.includes("-")&&delete v[e.split(".").map((e=>F(e))).join(".")],delete v[e]})),{aliases:Object.assign({},g.aliases),argv:Object.assign($,v),configuration:a,defaulted:Object.assign({},p),error:w,newAliases:Object.assign({},f)}}}({cwd:process.cwd,env:()=>D,format:s.format,normalize:n.normalize,resolve:n.resolve,require:n=>{if("undefined"!=typeof require)return require(n);if(n.match(/\.json$/))return JSON.parse(e.readFileSync(n,"utf8"));throw Error("only .json config files are supported in ESM")}}),M=function(e,n){return P.parse(e.slice(),n).argv};M.detailed=function(e,n){return P.parse(e.slice(),n)},M.camelCase=F,M.decamelize=I,M.looksLikeNumber=A;new RegExp("(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)","g");var L={fs:{readFileSync:e.readFileSync,writeFile:e.writeFile},format:s.format,resolve:n.resolve,exists:n=>{try{return e.statSync(n).isFile()}catch(e){return!1}}};let C;class R{constructor(e){e=e||{},this.directory=e.directory||"./locales",this.updateFiles="boolean"!=typeof e.updateFiles||e.updateFiles,this.locale=e.locale||"en",this.fallbackToLanguage="boolean"!=typeof e.fallbackToLanguage||e.fallbackToLanguage,this.cache=Object.create(null),this.writeQueue=[]}__(...e){if("string"!=typeof arguments[0])return this._taggedLiteral(arguments[0],...arguments);const n=e.shift();let t=function(){};return"function"==typeof e[e.length-1]&&(t=e.pop()),t=t||function(){},this.cache[this.locale]||this._readLocaleFile(),!this.cache[this.locale][n]&&this.updateFiles?(this.cache[this.locale][n]=n,this._enqueueWrite({directory:this.directory,locale:this.locale,cb:t})):t(),C.format.apply(C.format,[this.cache[this.locale][n]||n].concat(e))}__n(){const e=Array.prototype.slice.call(arguments),n=e.shift(),t=e.shift(),o=e.shift();let s=function(){};"function"==typeof e[e.length-1]&&(s=e.pop()),this.cache[this.locale]||this._readLocaleFile();let r=1===o?n:t;if(this.cache[this.locale][n]){r=this.cache[this.locale][n][1===o?"one":"other"]}!this.cache[this.locale][n]&&this.updateFiles?(this.cache[this.locale][n]={one:n,other:t},this._enqueueWrite({directory:this.directory,locale:this.locale,cb:s})):s();const a=[r];return~r.indexOf("%d")&&a.push(o),C.format.apply(C.format,a.concat(e))}setLocale(e){this.locale=e}getLocale(){return this.locale}updateLocale(e){this.cache[this.locale]||this._readLocaleFile();for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(this.cache[this.locale][n]=e[n])}_taggedLiteral(e,...n){let t="";return e.forEach((function(e,o){const s=n[o+1];t+=e,void 0!==s&&(t+="%s")})),this.__.apply(this,[t].concat([].slice.call(n,1)))}_enqueueWrite(e){this.writeQueue.push(e),1===this.writeQueue.length&&this._processWriteQueue()}_processWriteQueue(){const e=this,n=this.writeQueue[0],t=n.directory,o=n.locale,s=n.cb,r=this._resolveLocaleFile(t,o),a=JSON.stringify(this.cache[o],null,2);C.fs.writeFile(r,a,"utf-8",(function(n){e.writeQueue.shift(),e.writeQueue.length>0&&e._processWriteQueue(),s(n)}))}_readLocaleFile(){let e={};const n=this._resolveLocaleFile(this.directory,this.locale);try{C.fs.readFileSync&&(e=JSON.parse(C.fs.readFileSync(n,"utf-8")))}catch(t){if(t instanceof SyntaxError&&(t.message="syntax error in "+n),"ENOENT"!==t.code)throw t;e={}}this.cache[this.locale]=e}_resolveLocaleFile(e,n){let t=C.resolve(e,"./",n+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(t)&&~n.lastIndexOf("_")){const o=C.resolve(e,"./",n.split("_")[0]+".json");this._fileExistsSync(o)&&(t=o)}return t}_fileExistsSync(e){return C.exists(e)}}let z;try{z=a.fileURLToPath("undefined"==typeof document?require("url").pathToFileURL(__filename).href:w&&"SCRIPT"===w.tagName.toUpperCase()&&w.src||new URL("index.js",document.baseURI).href)}catch(e){z=process.cwd()}const q=z.split("node_modules")[0];r.notStrictEqual,r.strictEqual,s.inspect,q||process.cwd(),n.basename,n.dirname,n.extname,n.relative,n.resolve,process.cwd,process.exit,process.nextTick,void 0!==process.stdout.columns&&process.stdout.columns,e.readFileSync,function(e,n){C=n;const t=new R(e);t.__.bind(t),t.__n.bind(t),t.setLocale.bind(t),t.getLocale.bind(t),t.updateLocale.bind(t),t.locale}({directory:n.resolve(z,"../../../locales"),updateFiles:!1},L);const V={hg:{appName:"hotglue",clientApiBaseUri:process.env.HOTGLUE_CLIENT_API_BASE_URI||"https://client-api.hotglue.xyz",defaultConfigFileName:"config.yaml"}},W={},G=()=>n.resolve(t.homedir(),`.${V.hg.appName}`,V.hg.defaultConfigFileName),J=async()=>{const{appName:e}=V.hg;try{return await c.cosmiconfig(e).load(G())||{}}catch(e){return{}}},Q=async()=>{const{appName:e}=V.hg,n=c.cosmiconfig(e,{searchPlaces:[`${e}.yaml`,`.${e}.yaml`,`.${e}rc.yaml`,`.${e}rc.yml`,`.${e}rc`,`.${e}rc.json`,`.${e}rc.js`]});try{return await n.search()||{}}catch(e){throw console.log(e),new Error(`Malformed configuration file: ${e.message}`)}},Y={primary:e=>l.whiteBright(e),secondary:e=>l.white(e),info:e=>l.green(e),warn:e=>l.yellow(e),error:e=>l.redBright(e),success:e=>l.greenBright(e)};let H=Y,Z="primary";function X(e){return H={...Y,...e},re}function ee(e){process.stdout.write(e)}const ne=(e,n=Z)=>{if(!e)return"";if("string"==typeof e)return H[n]?H[n](e):H[Z](e);const t=s.inspect(e,{colors:!0});return H[n]?H[n](t):t};function te(...e){return console.log(...e),re}function oe(e,n){return ee(ne(e,n)),ee("\n"),re}function se(e,n){return ee(ne(e,n)),re}const re={cl:te,pr:oe,pp:se,setTheme:X,setDefault:function(e="primary"){return H[e]&&(Z=e),re}},ae=e=>{console.log(JSON.stringify(e))},ie=u("hotglue-cli");function ce(e){return ie.extend(e)}const le=ce("commands:config:set"),de="set <setting> <value>";var ue=Object.freeze({__proto__:null,builder:async e=>(le("builder",de,e),e.option("setting",{describe:"The configuration parameter you wish to set",type:"string"}).option("value",{describe:"The configuration parameter's value",type:"string"}),e),command:de,desc:"Set configuration key-value pairs",handler:async e=>{le("handler",de,e);const{json:t,setting:o,value:s}=e;if(["apikey"].includes(o))try{const e=await J();e&&e.config?!t&&se("Updating profile config file..."):!t&&se("Creating profile config file...");const r=e&&e.config?{...e.config,[o]:s}:{[o]:s},a=f.stringify(r),c=e&&e.filepath?e.filepath:G();await(async(e,t)=>{await i.mkdir(n.dirname(e),{recursive:!0}),await i.writeFile(e,t)})(c,a),t?ae({status:"success"}):se("Done").pr()}catch(e){t?ae({status:"error",error:e}):console.log(e)}else t?ae({status:"error",error:"Invalid settings parameter"}):console.error("Invalid settings parameter")}});const fe=[ue],pe=ce("commands:config"),ye="config [action]";var ge=Object.freeze({__proto__:null,builder:async function(e){return pe("builder",ye),e.command(fe)},command:ye,desc:"Configure your hotglue CLI",handler:async function(e){pe("handler",ye,e);const{action:t}=e;if(!t)try{const e=await J();e.config&&0!==Object.keys(e.config).length||oe("No profile configuration found. Run config set to configure the hotglue CLI.");const t=new p({head:["Setting","Value","Config File","Type"]});e.config&&Object.entries(e.config).forEach((([n,o])=>t.push([n,o,e.filepath,"Profile"])));const o=await Q();o.config&&Object.entries(o.config).forEach((([e,s])=>t.push([e,s,n.relative(process.cwd(),o.filepath),"Project"]))),t.length>0&&console.log(t.toString())}catch(e){throw console.log(e),e}}}),he={env:{config:{describe:"Environment Id",type:"string",alias:["e"]},demandText:'The "env" parameter (Environment Id) is required. Either pass here using `-e [env_id]` or add an env property in your rc file.'},apikey:{config:{describe:"API key",type:"string",alias:["k"]},demandText:"API key is required. Either pass here using -k [key] or configure your profile using config set."},json:{config:{describe:"Makes the output format to be JSON",type:"boolean",default:!1},demandText:""},tenant:{config:{describe:"Tenant (user) ID",type:"string",alias:["u"]},demandText:"TenantId is required. You can pass it using -u [tenantId]."},flow:{config:{describe:"Flow ID",type:"string",alias:["f"]},demandText:"FlowId is required. You can pass it using -f [flow_id]."},tap:{config:{describe:"Tap name",type:"string",alias:["t"]},demandText:"Tap name is required. You can pass it using -t <tap_name>."},connector:{config:{describe:"Connector ID",type:"string",alias:["c"]},demandText:"Connector ID is required. You can pass it using -c <connector>."},all:{config:{describe:"Run command for all taps/connectors",type:"boolean",default:!1,alias:["a"]},demandText:'This "all" flag is required. You can pass it using -a or --all.'},jobroot:{config:{describe:"Job Root (S3 prefix)",type:"string",alias:["j"]},demandText:"JobRoot key is required. You can pass it using -j [job_root]."},count:{config:{describe:"Max returned records",type:"number"}},downloadTo:{config:{describe:"Download folder",default:".",type:"string",alias:["d"]},demandText:"A destination folder is required. You can pass it using -d [folder] and can be either relative from cwd or absolute."},sourceFolder:{config:{describe:"Source folder",type:"string",default:".",alias:["s"]},demandText:""},configFilePath:{config:{describe:"Config file path",type:"string",default:"./config.json",alias:["p"]},demandText:'Local path of the config (with .json extension). Example: "/home/hotglue/config.json"'},overwrite:{config:{describe:"Overwrite existing",type:"boolean",default:!1,alias:["o"]},demandText:""},cleanup:{config:{describe:"Clean up target prior to action",type:"boolean",default:!1,alias:["c"]},demandText:""}};const me=ce("base"),we=async e=>{me("builder");const n=await(async()=>{const e=await J(),n=await Q();return{...W,...e.config,...n.config}})();return e.option("apikey",he.apikey.config).option("env",he.env.config).option("json",he.json.config).config(n).demandOption(["env"],he.env.demandText).demandOption(["apikey"],he.apikey.demandText)},be=ce("utils.js"),ve=async(e,t,o=[])=>{const{includeSymLinks:s,recursive:r,filter:a}=t,{matcher:c}=a,l=n.resolve(e),d=await i.readdir(l,{withFileTypes:!0});for(const e of d){const a=n.resolve(l,e.name);e.isSymbolicLink()&&!s||(!c||c(a)?e.isFile()?o.push(n.resolve(l,e.name)):e.isDirectory()&&r&&await ve(n.resolve(l,e.name),t,o):be("skip",a))}return o},$e=async(e,n)=>{const t={includeSymLinks:!1,recursive:!1,filter:{},...n},{pattern:o}=t.filter;return o&&(t.filter.matcher=g.matcher(o,{dot:!0})),ve(e,t)},ke=(e,n)=>{be("filter-in",e);const{pattern:t}={...n};let o=e;return t&&(o=g(o,t)),be("filter-out",o),o};const _e=e=>{const n=[];return new Promise(((t,o)=>{e.on("error",o),e.on("data",(e=>n.push(Buffer.from(e)))),e.on("end",(()=>t(Buffer.concat(n).toString("utf8"))))}))},je=(e,n=10)=>{const t=[];for(let o=0;o<e.length;o+=n){const s=e.slice(o,o+n);t.push(s)}return t},Oe=async({debug:e,baseUri:n,env:t,apiKey:o})=>{const s=new URL(`${n}/${t}/resetAvailableEntities`),{data:r}=await h.delete(s,{headers:{"x-api-key":o,"Content-type":"application/json"}});e({data:r})},xe=async({debug:e,baseUri:n,task:t,env:o,apikey:s,...r})=>{const a=new URL(`${n}/credentials/${t}/${o}`);r&&Object.entries(r).forEach((([e,n])=>{a.searchParams.set(e,n)}));const i=a.toString();e&&e("uri:",i);const{data:c}=await h.get(i,{headers:{"x-api-key":s}}),{accessKeyId:l,secretAccessKey:d,sessionToken:u}=c;return{accessKeyId:l,secretAccessKey:d,sessionToken:u}},Ee=async({debug:e,baseUri:n,env:t,apikey:o})=>{const s=`${n}/tenants/${t}`;e("requesting:",s);const{data:r}=await h.get(s,{headers:{"x-api-key":o}});return e("response-data",r),r},Te=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/${o}/supportedSources`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Se=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/v2/${t}/${o}/supportedConnectors`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Fe=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,config:a})=>{const i=new URL(`${n}/${t}/${o}/${s}/linkedSources`);a&&i.searchParams.set("config","true");const c={"x-api-key":r},l=i.toString();e&&e("uri:",l);const{data:d}=await h.get(l,{headers:c});return d},Ie=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,config:a})=>{const i=new URL(`${n}/v2/${t}/${o}/${s}/linkedConnectors`);a&&i.searchParams.set("config","true");const c={"x-api-key":r},l=i.toString();e&&e("uri:",l);const{data:d}=await h.get(l,{headers:c});return d},Ae=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,connectorId:a,config:i})=>{const c={"x-api-key":r},l=new URL(`${n}/${t}/${o}/${s}/linkedSources`).toString(),d={tap:a,config:i};e&&e("uri:",l);const{data:u}=await h.patch(l,d,{headers:c});return u},Ue=async({debug:e,baseUri:n,env:t,flow:o,tenant:s,apikey:r,connectorId:a,config:i})=>{const c={"x-api-key":r},l=new URL(`${n}/v2/${t}/${o}/${s}/linkedConnectors`).toString(),d={connector_id:a,config:i};e&&e("uri:",l);const{data:u}=await h.patch(l,d,{headers:c});return u},Ne=async({debug:e,baseUri:n,env:t,apikey:o})=>{const s={"x-api-key":o},r=new URL(`${n}/${t}/flows/supported`).toString();e&&e("uri:",r);const{data:a}=await h.get(r,{headers:s});return a},Ke=async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/flows/${o}/supported`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i},Be=u("commands:env:validators"),De=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableSources.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>await Te({debug:Be,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.tap)throw new Error(`Source ${JSON.stringify(e)} has no tap id`);return e.tap})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate source id(s) found in availableSources.json: ${i.join(", ")}. All sources must have a unique tap id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.tap)));if(c.length>0)throw new Error(`Sources ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableSources.json`)},Pe=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableTargets.json must be an array of objects");const r=(await Promise.all(o.filter((e=>1==e.version)).map((async e=>{const o=await(async({debug:e,baseUri:n,env:t,flow:o,apikey:s})=>{const r={"x-api-key":s},a=new URL(`${n}/${t}/${o}/supportedTargets`).toString();e&&e("uri:",a);const{data:i}=await h.get(a,{headers:r});return i})({debug:Be,baseUri:n,env:s,flow:e.id,apikey:t});return o})))).flat(),a=e.map((e=>{if(!e.target)throw new Error(`Target ${JSON.stringify(e)} has no target id`);return e.target})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate target id(s) found in availableTargets.json: ${i.join(", ")}. All targets must have a unique target id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.target)));if(c.length>0)throw new Error(`Targets ${c.map((e=>e.label)).join(", ")} are linked, but missing from your availableTargets.json`)},Me=async(e,n,t,o,s)=>{if(!Array.isArray(e))throw new Error("availableConnectors.json must be an array of objects");const r=(await Promise.all(o.filter((e=>2==e.version)).map((async e=>await Se({debug:Be,baseUri:n,env:s,flow:e.id,apikey:t}))))).flat(),a=e.map((e=>{if(!e.id)throw new Error(`Connector ${JSON.stringify(e)} has no id`);return e.id})),i=a.filter(((e,n)=>a.indexOf(e)!==n));if(i.length>0)throw new Error(`Duplicate connector id(s) found in availableConnectors.json: ${i.join(", ")}. All connectors must have a unique id.`);const c=r.filter((e=>e.isForked&&!a.includes(e.id)));if(c.length>0)throw new Error(`Connectors ${c.map((e=>e.id)).join(", ")} are linked, but missing from your availableConnectors.json`)},Le=ce("commands:env:deploy"),Ce="deploy";var Re=Object.freeze({__proto__:null,builder:async e=>(Le("builder",Ce),e.option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:Ce,desc:"Deploy Environment settings",handler:async e=>{Le("handler",Ce,e);const{hg:t,json:o,apikey:s,env:r,sourceFolder:a}=e,{clientApiBaseUri:c}=t,l=n.resolve(process.cwd(),a);let u,f=y();try{u=ne(`Scanning ${ne(l,"info")} for deployable files`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const e=await $e(l,{filter:{pattern:"((**/requirements.txt)|(**/availableSources.json)|(**/availableTargets.json)|(**/availableConnectors.json)|(**/customTaps.json))"}});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne("There are no files to deploy at the specified location!")}`,"secondary"))));!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));for(const n of e)if(n.endsWith(".json"))try{const e=await i.readFile(n,{encoding:"utf-8"});JSON.parse(e)}catch(e){throw new Error(`File ${n} is not a valid JSON: ${String(e)}`)}const t=await Ne({debug:Le,baseUri:c,env:r,apikey:s});for(const n of e){if(n.endsWith("availableSources.json")){const e=JSON.parse(await i.readFile(n,{encoding:"utf-8"}));await De(e,c,s,t,r)}if(n.endsWith("availableTargets.json")){const e=JSON.parse(await i.readFile(n,{encoding:"utf-8"}));await Pe(e,c,s,t,r)}if(n.endsWith("availableConnectors.json")){const e=JSON.parse(await i.readFile(n,{encoding:"utf-8"}));await Me(e,c,s,t,r)}}u=ne("Verifying user and authorizing"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:a,secretAccessKey:y,sessionToken:g}=await xe({debug:Le,baseUri:c,task:"env-deploy",env:r,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const h=new d.S3({accessKeyId:a,secretAccessKey:y,sessionToken:g});u=ne("Deploying environment files"),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const m="config/",w=new p({head:["File","Status"]});for await(const t of e){const e=n.basename(t);u=ne(`Pushing file: ${ne(e,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a={Bucket:r,Key:`${m}${e}`,Body:await i.readFile(t)},l=await h.putObject(a).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),Le("s3-put-res",l),w.push([e,"Deployed"]),await Oe({debug:Le,baseUri:c,env:r,apiKey:s})}o?ae({status:"success",deployedFiles:e}):te(w.toString())}catch(e){!o&&f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Le(e),e&&e.response&&e.response.data&&Le("response",e.response.data)}}});const ze=ce("commands:env:download"),qe="download";var Ve=Object.freeze({__proto__:null,builder:async e=>(ze("builder",qe),e.option("downloadTo",he.downloadTo.config)),command:qe,desc:"Download Environment settings",handler:async e=>{ze("handler",qe,e);const{hg:t,json:o,apikey:s,env:r,downloadTo:a}=e,{clientApiBaseUri:c}=t,l=n.resolve(process.cwd(),a);let u,f=y();try{u=ne("Verifying user and authorizing"),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const{accessKeyId:e,secretAccessKey:t,sessionToken:a}=await xe({debug:ze,baseUri:c,task:"env-download",env:r,apikey:s});!o&&f.succeed(ne(`Finished: ${u}.`,"secondary"));const y=new d.S3({accessKeyId:e,secretAccessKey:t,sessionToken:a});u=ne(`Scanning environment ${ne(r,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const g={Bucket:r,Prefix:"config/"},{Contents:h}=await y.listObjectsV2(g).promise();!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),ze("s3-files",h);const m=h?ke(h.map((e=>e.Key)),{pattern:"((*/requirements.txt)|(*/availableSources.json)|(*/availableTargets.json)|(*/availableConnectors.json)|(*/customTaps.json))"}):[];if(!m||0===m.length)return void(o?ae({status:"success",downloadedFiles:[]}):f.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));u=ne(`Downloading to ${ne(l,"info")}`),!o&&f.info(ne(`Info: ${u}.`,"secondary"));const w=new p({head:["File","Status"]});for await(const e of m){const t=n.basename(e),s=n.resolve(l,t);ze("local-file",s),await i.mkdir(n.dirname(s),{recursive:!0}),u=ne(`Downloading file: ${ne(t,"info")}`),!o&&f.start(ne(`In progress: ${u}...`,"secondary"));const a=y.getObject({Bucket:r,Key:e}).createReadStream();await i.writeFile(s,await _e(a)),!o&&f.succeed(ne(`Finished: ${u}.`,"secondary")),w.push([t,"Downloaded"])}o?ae({status:"success",downloadedFiles:m}):te(w.toString())}catch(e){o?ae({status:"error",error:e}):(f.fail(ne(`Error: ${u}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),ze(e),e&&e.response&&e.response.data&&ze("response",e.response.data))}}});const We=[Re,Ve],Ge=ce("commands:env"),Je="env <action>";var Qe=Object.freeze({__proto__:null,builder:async function(e){Ge("builder",Je);return(await we(e)).command(We)},command:Je,desc:"Manage environment settings",handler:async function(e){Ge("handler",Je,e)}});const Ye=async(e,n,t,o)=>{try{const s=e.getObject({Bucket:n,Key:`${t}/flows/${o}/flow.json`}).createReadStream(),r=await _e(s);return 2===JSON.parse(r).version}catch(e){return!1}},He=async(e,n,t,o,s=void 0)=>s??await Ye(e,n,t,o)?"connectors":"taps",Ze=ce("commands:etl:delete"),Xe="delete";var en=Object.freeze({__proto__:null,builder:async e=>(Ze("builder",Xe),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).demandOption("tap",he.tap.demandText).option("tenant",{...he.tenant.config}).demandOption("tenant",he.tenant.demandText)),command:Xe,desc:"Delete ETL scripts",handler:async e=>{Ze("handler",Xe,e);const{hg:n,json:t,apikey:o,env:s,flow:r,tap:a,tenant:i}=e,{clientApiBaseUri:c}=n;let l,u=y();try{l=ne(`Deleting ETL scripts for Tenant ${ne(i,"info")} Flow ${ne(r,"info")} and Tap ${ne(a,"info")} to ${ne(s,"info")}`),!t&&u.info(ne(`Info: ${l}.`,"secondary")),l=ne("Verifying user and authorizing"),!t&&u.start(ne(`In progress: ${l}...`,"secondary"));const{accessKeyId:e,secretAccessKey:n,sessionToken:f}=await xe({debug:Ze,baseUri:c,task:"etl-deploy",env:s,tenant:i,flow:r,tap:a,apikey:o}),y=new d.S3({accessKeyId:e,secretAccessKey:n,sessionToken:f});!t&&u.succeed(ne(`Finished: ${l}.`,"secondary")),l=ne("Deleting ETL scripts"),!t&&u.start(ne(`In progress: ${l}...`,"secondary"));const g=`${i}/flows/${r}/${await He(y,s,i,r)}/${a}/etl/`,h=await y.listObjectsV2({Bucket:s,Prefix:g}).promise();if(Ze("s3-list-objects-res",h),h.Contents?.length>0){const e=await y.deleteObjects({Bucket:s,Delete:{Objects:h.Contents.map((e=>({Key:e.Key})))}}).promise();Ze("s3-list-objects-res",e)}const m=await y.deleteObject({Bucket:s,Key:g}).promise();if(Ze("s3-delete-object-res",m),!t&&u.succeed(ne(`Finished: ${l}.`,"secondary")),h.Contents?.length>0){const e=new p({head:["File","Status"]});h.Contents.filter((({Key:e})=>e!==g)).forEach((({Key:n})=>{const t=n.split("/"),o=t[t.length-1];e.push([o,ne("Deleted","info")])})),t?ae({status:"success",deletedObjects:(h.Contents??[]).map((({Key:e})=>e))}):te(e.toString())}else l=ne("There was no file or folder to be deleted"),t?ae({status:"success",deletedObjects:[]}):u.info(ne(`Info: ${l}.`,"secondary"))}catch(e){t?ae({status:"error",error:e}):(u.fail(ne(`Error: ${l}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),Ze(e),e&&e.response&&e.response.data&&Ze("response",e.response.data))}}});const nn=ce("commands:etl:deploy"),tn="deploy";var on=Object.freeze({__proto__:null,builder:async e=>(nn("builder",tn),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).option("all",he.all.config).option("tenant",{...he.tenant.config,default:"default"}).option("sourceFolder",he.sourceFolder.config).demandOption("sourceFolder",he.sourceFolder.demandText)),command:tn,desc:"Deploy ETL scripts",handler:async e=>{nn("handler",tn,e);const{hg:t,json:o,apikey:s,env:r,flow:a,tap:c,all:l,tenant:u,sourceFolder:f}=e,{clientApiBaseUri:g}=t;if(!l&&!c)throw new Error(`${he.tap.demandText} Or you can pass the --all flag to run this command for all taps/connectors.`);let h,m=y();const w=n.resolve(process.cwd(),f);try{h=ne(`Deploying script for Tenant ${ne(u,"info")} Flow ${ne(a,"info")}${c?` and Tap ${ne(c,"info")}`:""} to ${ne(r,"info")}`),!o&&m.info(ne(`Info: ${h}.`,"secondary"));const e=await $e(w,{recursive:!0,filter:{pattern:"!((**/sync-output)|(**/etl-output)|(**/snapshots))"}});if(0===e.length)return void(o?ae({status:"error",error:"There are no files to deploy at the specified location!"}):m.fail(ne(`Error: ${ne("There are no files to deploy at the specified location!")}.`,"secondary")));h=ne("Verifying user and authorizing"),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const t={debug:nn,baseUri:g,task:"etl-deploy",env:r,tenant:u,flow:a,apikey:s};c&&(t.tap=c);const{accessKeyId:l,secretAccessKey:y,sessionToken:b}=await xe(t);!o&&m.succeed(ne(`Finished: ${h}.`,"secondary"));const v=new d.S3({accessKeyId:l,secretAccessKey:y,sessionToken:b}),$=await Ye(v,r,u,a);h=ne("Validating flow and tap location"),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const k=(await Ne({debug:nn,baseUri:g,apikey:s,env:r})).find((({id:e})=>e===a));let _=[];try{if("default"===u||k?.type){if(_=(($?await Se({debug:nn,baseUri:g,env:r,flow:a,apikey:s}):await Te({debug:nn,baseUri:g,env:r,flow:a,apikey:s}))??[]).filter((e=>!c||e[$?"id":"tap"]===c)),c&&0===_.length)throw new Error("Tap is not supported")}else{if(_=(($?await Ie({debug:nn,baseUri:g,env:r,flow:a,tenant:u,apikey:s}):await Fe({debug:nn,baseUri:g,env:r,flow:a,tenant:u,apikey:s}))??[]).filter((e=>!c||e[$?"id":"tap"]===c)),c&&0===_.length)throw new Error("Tap is not linked")}}catch(e){throw nn("err",e),new Error("Target location doesn't exist. Check your tenant, flow and tap arguments.")}!o&&m.succeed(ne(`Finished: ${h}.`,"secondary"));const j=new p({head:["File","Status"]});for(const t of _){const s=t[$?"id":"tap"];h=ne(`Preparing ${s} deployment target`),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const c=`${u}/flows/${a}/${await He(null,null,null,null,$)}/${s}/etl/`,{Contents:l}=await v.listObjectsV2({Bucket:r,Prefix:`${c}`}).promise();!o&&m.succeed(ne(`Finished: ${h}.`,"secondary")),nn("contents",l);const d=l.map((e=>({Key:e.Key})));if(d.length>0){h=ne(`Removing old ${s} ETL files`),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const e={Bucket:r,Delete:{Objects:d,Quiet:!0}};await v.deleteObjects(e).promise(),d.forEach((({Key:e})=>j.push([`${s}/${e.substring(c.length)}`,ne("Deleted","warn")]))),!o&&m.succeed(ne(`Finished: ${h}.`,"secondary"))}for await(const t of e){const e="win32"===process.platform?n.relative(f,t).replace(/\\/g,"/"):n.relative(f,t),a=`${c}${e}`;h=ne(`Deploying file: ${ne(`${s}/${e}`,"info")}`),!o&&m.start(ne(`In progress: ${h}...`,"secondary"));const l={Bucket:r,Key:a,Body:await i.readFile(t)},d=await v.putObject(l).promise();!o&&m.succeed(ne(`Finished: ${h}.`,"secondary")),nn("s3-put-res",d),j.push([`${s}/${e}`,ne("Deployed","info")])}}o?ae({status:"success",deployedFiles:e}):te(j.toString())}catch(e){o?ae({status:"error",error:e}):(m.fail(ne(`Error: ${h}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),nn(e),e&&e.response&&e.response.data&&nn("response",e.response.data))}}});const sn=ce("commands:etl:download"),rn="download";var an=Object.freeze({__proto__:null,builder:async e=>(sn("builder",rn),e.option("flow",he.flow.config).demandOption("flow",he.flow.demandText).option("tap",he.tap.config).demandOption("tap",he.tap.demandText).option("downloadTo",he.downloadTo.config).demandOption("downloadTo",he.downloadTo.demandText).option("tenant",{...he.tenant.config,default:"default"}).option("overwrite",he.overwrite.config).demandOption("overwrite",he.overwrite.demandText)),command:rn,desc:"Download ETL scripts",handler:async t=>{sn("handler",rn,t);const{hg:o,json:s,apikey:r,env:a,flow:c,tap:l,tenant:u,downloadTo:f,overwrite:g}=t,{clientApiBaseUri:h}=o;let m,w=y();const b=n.resolve(process.cwd(),f);try{m=ne("Verifying user and authorizing"),!s&&w.start(ne(`In progress: ${m}...`,"secondary"));const{accessKeyId:t,secretAccessKey:o,sessionToken:f}=await xe({debug:sn,baseUri:h,task:"etl-download",env:a,tenant:u,flow:c,tap:l,apikey:r}),y=new d.S3({accessKeyId:t,secretAccessKey:o,sessionToken:f});!s&&w.succeed(ne(`Finished: ${m}.`,"secondary")),m=ne("Scanning for downloadable files"),!s&&w.start(ne(`In progress: ${m}...`,"secondary"));const v=`${u}/flows/${c}/${await He(y,a,u,c)}/${l}/etl/`,$={Bucket:a,Prefix:v},{Contents:k}=await y.listObjectsV2($).promise();!s&&w.succeed(ne(`Finished: ${m}.`,"secondary")),sn("s3-list-res",k);const _=k?ke(k.map((e=>e.Key)),{pattern:"!(.ipynb_checkpoints/*)"}):[];if(!_||0===_.length)return void(s?ae({status:"success",downloadedFiles:[]}):w.warn(ne(`Warning: ${ne("Nothing to download!")}`,"secondary")));m=ne(`Downloading script files to ${ne(b,"info")}`),!s&&w.info(ne(`Info: ${m}.`,"secondary"));const j=new p({head:["File","Status"]});for await(const t of _){const o=t.substring(v.length),r=n.resolve(b,o);if(sn("file",r),t.endsWith("/")){!e.existsSync(r)&&await i.mkdir(r,{recursive:!0});continue}if(!g)try{await i.stat(r),sn("exists, skipping"),j.push([o,"Skipped"]);continue}catch(e){"ENOENT"!==e.code&&te(e)}m=ne(`Downloading file: ${ne(o,"info")}`),!s&&w.start(ne(`In progress: ${m}...`,"secondary")),await i.mkdir(n.dirname(r),{recursive:!0});const c=y.getObject({Bucket:a,Key:t}).createReadStream();await i.writeFile(r,await _e(c)),!s&&w.succeed(ne(`Finished: ${m}.`,"secondary")),j.push([o,"Downloaded"])}s?ae({status:"success",downloadedFiles:_}):te(j.toString())}catch(e){s?ae({status:"error",error:e}):(w.fail(ne(`Error: ${m}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),sn(e),e&&e.response&&e.response.data&&sn("response",e.response.data))}}});const cn=[en,on,an],ln=ce("commands:etl"),dn="etl <action>";var un=Object.freeze({__proto__:null,builder:async function(e){ln("builder",dn);return(await we(e)).command(cn)},command:dn,desc:"Manage ETL scripts",handler:async function(e){ln("handler",dn,e)}});const fn=ce("commands:flows:list"),pn="list";var yn=Object.freeze({__proto__:null,builder:async e=>(fn("builder",pn),e.option("tenant",{...he.tenant.config})),command:pn,desc:"List flows",handler:async e=>{fn("handler",pn,e);const{hg:n,json:t,apikey:o,env:r,tenant:a}=e,{clientApiBaseUri:i}=n;let c,l=y();try{c=ne(`Retrieving ${a?`${ne(a,"info")} tenant's`:"the"} flows for environment: ${ne(r,"info")}`);const e=`${i}/${r}/flows/${a?`linked?user_id=${a}`:"supported"}`;fn("requesting:",e),!t&&l.start(ne(`In progress: ${c}...`,"secondary"));const{data:n}=await h.get(e,{headers:{"x-api-key":o}});if(!t&&l.succeed(ne(`Finished: ${c}.`,"secondary")),fn("response-data",n),!n||0===n.length)return void(t?ae([]):l.warn(ne(`Warning: ${ne("No flows for specified environment and tenant")}.`,"secondary")));if(t)ae(n);else{const e=new p({head:["ID","Name","isPush","Taps","Targets"]});n.forEach((n=>e.push([n.id,n.name||"",n.type||!1,n.taps?s.inspect(n.taps):"",n.targets?s.inspect(n.targets):"none"]))),console.log(e.toString())}}catch(e){t?ae({status:"error",error:e}):(l.fail(ne(`Error: ${c}.`,"secondary")),oe(ne(`Message: ${ne(e.message)}`,"secondary")),fn(e),e&&e.response&&e.response.data&&fn("response",e.response.data))}}});const gn=[yn],hn=ce("commands:flows"),mn="flows <action>";var wn,bn=Object.freeze({__proto__:null,builder:async function(e){hn("builder",mn);return(await we(e)).command(gn)},command:mn,desc:"Manage flows",handler:async function(e){hn("handler",mn,e)}}),vn={exports:{}},$n={exports:{}},kn={exports:{}},_n={exports:{}};var jn,On={exports:{}},xn={exports:{}};var En,Tn,Sn={exports:{}};function Fn(){return Tn||(Tn=1,function(e,n){Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){if((0,o.default)(e))return function(e){var n=-1,t=e.length;return function(){return++n<t?{value:e[n],key:n}:null}}(e);var n=(0,r.default)(e);return n?function(e){var n=-1;return function(){var t=e.next();return t.done?null:(n++,{value:t.value,key:n})}}(n):(t=e,s=t?Object.keys(t):[],a=-1,i=s.length,function e(){var n=s[++a];return"__proto__"===n?e():a<i?{value:t[n],key:n}:null});var t,s,a,i};var t=function(){return jn||(jn=1,e=xn,n=xn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e&&"number"==typeof e.length&&e.length>=0&&e.length%1==0},e.exports=n.default),xn.exports;var e,n}(),o=a(t),s=function(){return En||(En=1,e=Sn,n=Sn.exports,Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e){return e[Symbol.iterator]&&e[Symbol.iterator]()},e.exports=n.default),Sn.exports;var e,n}(),r=a(s);function a(e){return e&&e.__esModule?e:{default:e}}e.exports=n.default}(On,On.exports)),On.exports}var In,An={exports:{}};var Un,Nn={},Kn={exports:{}},Bn={exports:{}};var Dn,Pn,Mn,Ln={};function Cn(){r