@stacksjs/ts-cloud 0.2.18 → 0.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +4 -4
- package/dist/index.js +6 -4
- package/package.json +3 -3
package/dist/bin/cli.js
CHANGED
|
@@ -6900,10 +6900,10 @@ async function sendFallbackSms(to, message) {
|
|
|
6900
6900
|
`)){let B=K.trim();if(!B||B.startsWith("#")||B.startsWith(";"))continue;let j=B.match(/^\[([^\]]+)\]$/);if(j){if(z===$&&G&&H)return{accessKeyId:G,secretAccessKey:H,sessionToken:A};z=j[1],G=void 0,H=void 0,A=void 0;continue}if(z===$){let[X,...O]=B.split("="),_=O.join("=").trim();switch(X.trim().toLowerCase()){case"aws_access_key_id":G=_;break;case"aws_secret_access_key":H=_;break;case"aws_session_token":A=_;break}}}if(z===$&&G&&H)return{accessKeyId:G,secretAccessKey:H,sessionToken:A};return null}var G5={};Z1(G5,{S3Client:()=>F0});import*as a from"node:crypto";import{readdir as UB}from"node:fs/promises";import{join as WB}from"node:path";import{readFileSync as kZ}from"node:fs";function hZ($){let{buffer:J,byteOffset:Y,byteLength:Q}=$;if(J instanceof ArrayBuffer)return J.slice(Y,Y+Q);let Z=new ArrayBuffer(Q);return new Uint8Array(Z).set(new Uint8Array($)),Z}class F0{client;region;explicitProfile;endpoint;forcePathStyle;explicitCredentials;constructor($="us-east-1",J,Y){this.region=$,this.explicitProfile=J,this.endpoint=Y?.endpoint,this.forcePathStyle=Y?.forcePathStyle,this.explicitCredentials=Y?.credentials,this.client=new t(Y?.credentials??E$(J),{endpoint:Y?.endpoint,forcePathStyle:Y?.forcePathStyle})}getCredentials(){if(this.explicitCredentials?.accessKeyId&&this.explicitCredentials.secretAccessKey)return this.explicitCredentials;let $=E$(this.explicitProfile);if($.accessKeyId&&$.secretAccessKey)return $;throw Error("S3 credentials not found. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (or pass explicit credentials/profile), or configure ~/.aws/credentials.")}s3BaseHost(){return this.endpoint||`s3.${this.region}.amazonaws.com`}s3VirtualHost($){return this.forcePathStyle?this.s3BaseHost():`${$}.${this.s3BaseHost()}`}async listBuckets(){let $=await this.client.request({service:"s3",region:this.region,method:"GET",path:"/"}),J=[],Q=($?.ListAllMyBucketsResult??$)?.Buckets?.Bucket;if(Q){let Z=Array.isArray(Q)?Q:[Q];for(let U of Z)J.push({Name:U.Name,CreationDate:U.CreationDate})}return{Buckets:J}}async createBucket($,J){let Y={};if(J?.acl)Y["x-amz-acl"]=J.acl;let Q;if(this.region!=="us-east-1"&&!this.endpoint)Q=`<?xml version="1.0" encoding="UTF-8"?>
|
|
6901
6901
|
<CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
|
|
6902
6902
|
<LocationConstraint>${this.region}</LocationConstraint>
|
|
6903
|
-
</CreateBucketConfiguration>`,Y["Content-Type"]="application/xml";await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${$}`,headers:Y,body:Q})}async deleteBucket($){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${$}`})}async emptyAndDeleteBucket($){let J=!0;while(J){let Y=await this.listAllObjects({bucket:$});if(Y.length===0){J=!1;break}let Q=Y.map((Z)=>Z.Key);for(let Z=0;Z<Q.length;Z+=1000){let U=Q.slice(Z,Z+1000);await this.deleteObjects($,U)}}await this.deleteBucket($)}async listAllObjects($){let J=[],Y;do{let Q={"list-type":"2","max-keys":"1000"};if($.prefix)Q.prefix=$.prefix;if(Y)Q["continuation-token"]=Y;let Z=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${$.bucket}`,queryParams:Q}),U=Z?.ListBucketResult??Z,W=U?.Contents;if(W){let G=Array.isArray(W)?W:[W];for(let H of G)J.push({Key:H.Key,LastModified:H.LastModified||"",Size:Number.parseInt(H.Size||"0"),ETag:H.ETag})}let z=U?.IsTruncated;Y=z==="true"||z===!0?U?.NextContinuationToken:void 0}while(Y);return J}async list($){let J=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${$.bucket}`}),Y=[],Z=(J?.ListBucketResult??J)?.Contents;if(Z){let U=Array.isArray(Z)?Z:[Z];for(let W of U){if($.prefix&&!W.Key?.startsWith($.prefix))continue;if(Y.push({Key:W.Key||"",LastModified:W.LastModified||"",Size:Number.parseInt(W.Size||"0"),ETag:W.ETag}),$.maxKeys&&Y.length>=$.maxKeys)break}}return Y}async putObject($){let J={};if($.acl)J["x-amz-acl"]=$.acl;if($.cacheControl)J["Cache-Control"]=$.cacheControl;if($.contentType)J["Content-Type"]=$.contentType;if($.metadata)for(let[
|
|
6904
|
-
`).join(""),_=Object.keys(X).sort().map((y)=>y.toLowerCase()).join(";"),w=["PUT",`/${
|
|
6903
|
+
</CreateBucketConfiguration>`,Y["Content-Type"]="application/xml";await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${$}`,headers:Y,body:Q})}async deleteBucket($){await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${$}`})}async emptyAndDeleteBucket($){let J=!0;while(J){let Y=await this.listAllObjects({bucket:$});if(Y.length===0){J=!1;break}let Q=Y.map((Z)=>Z.Key);for(let Z=0;Z<Q.length;Z+=1000){let U=Q.slice(Z,Z+1000);await this.deleteObjects($,U)}}await this.deleteBucket($)}async listAllObjects($){let J=[],Y;do{let Q={"list-type":"2","max-keys":"1000"};if($.prefix)Q.prefix=$.prefix;if(Y)Q["continuation-token"]=Y;let Z=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${$.bucket}`,queryParams:Q}),U=Z?.ListBucketResult??Z,W=U?.Contents;if(W){let G=Array.isArray(W)?W:[W];for(let H of G)J.push({Key:H.Key,LastModified:H.LastModified||"",Size:Number.parseInt(H.Size||"0"),ETag:H.ETag})}let z=U?.IsTruncated;Y=z==="true"||z===!0?U?.NextContinuationToken:void 0}while(Y);return J}async list($){let J=await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${$.bucket}`}),Y=[],Z=(J?.ListBucketResult??J)?.Contents;if(Z){let U=Array.isArray(Z)?Z:[Z];for(let W of U){if($.prefix&&!W.Key?.startsWith($.prefix))continue;if(Y.push({Key:W.Key||"",LastModified:W.LastModified||"",Size:Number.parseInt(W.Size||"0"),ETag:W.ETag}),$.maxKeys&&Y.length>=$.maxKeys)break}}return Y}async putObject($){let J={};if($.acl)J["x-amz-acl"]=$.acl;if($.cacheControl)J["Cache-Control"]=$.cacheControl;if($.contentType)J["Content-Type"]=$.contentType;if($.metadata)for(let[Z,U]of Object.entries($.metadata))J[`x-amz-meta-${Z}`]=U;let Y=$.key.split("/").map((Z)=>encodeURIComponent(Z)).join("/"),Q=$.body instanceof Uint8Array&&!Buffer.isBuffer($.body)?Buffer.from($.body):$.body;if(Buffer.isBuffer(Q)||Q instanceof Uint8Array){let Z=Buffer.isBuffer(Q)?Q:Buffer.from(Q),{accessKeyId:U,secretAccessKey:W,sessionToken:z}=this.getCredentials(),G=this.s3VirtualHost($.bucket),H=`https://${G}/${Y}`,A=new Date,K=A.toISOString().replace(/[:-]|\.\d{3}/g,""),B=A.toISOString().slice(0,10).replace(/-/g,""),j=a.createHash("sha256").update(Z).digest("hex"),X={host:G,"x-amz-date":K,"x-amz-content-sha256":j,...J};if(z)X["x-amz-security-token"]=z;let O=Object.keys(X).sort().map((y)=>`${y.toLowerCase()}:${X[y].trim()}
|
|
6904
|
+
`).join(""),_=Object.keys(X).sort().map((y)=>y.toLowerCase()).join(";"),w=["PUT",`/${Y}`,"",O,_,j].join(`
|
|
6905
6905
|
`),E="AWS4-HMAC-SHA256",M=`${B}/${this.region}/s3/aws4_request`,T=[E,K,M,a.createHash("sha256").update(w).digest("hex")].join(`
|
|
6906
|
-
`),D=a.createHmac("sha256",`AWS4${
|
|
6906
|
+
`),D=a.createHmac("sha256",`AWS4${W}`).update(B).digest(),N=a.createHmac("sha256",D).update(this.region).digest(),x=a.createHmac("sha256",N).update("s3").digest(),h=a.createHmac("sha256",x).update("aws4_request").digest(),I=a.createHmac("sha256",h).update(T).digest("hex"),b=`${E} Credential=${U}/${M}, SignedHeaders=${_}, Signature=${I}`,k=await fetch(H,{method:"PUT",headers:{...X,Authorization:b},body:hZ(Z)});if(!k.ok){let y=await k.text();throw Error(`S3 PUT failed: ${k.status} ${y}`)}return}await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${Y}`,bucket:$.bucket,headers:J,body:$.body})}async getObject($,J){let Y=J.split("/").map((Z)=>encodeURIComponent(Z)).join("/");return await this.client.request({service:"s3",region:this.region,method:"GET",path:`/${$}/${Y}`,rawResponse:!0})}async copyObject($){let J={"x-amz-copy-source":`/${$.sourceBucket}/${$.sourceKey}`};if($.metadataDirective)J["x-amz-metadata-directive"]=$.metadataDirective;if($.contentType)J["Content-Type"]=$.contentType;if($.metadata)for(let[Y,Q]of Object.entries($.metadata))J[`x-amz-meta-${Y}`]=Q;await this.client.request({service:"s3",region:this.region,method:"PUT",path:`/${$.destinationBucket}/${$.destinationKey}`,headers:J})}async deleteObject($,J){let Y=J.split("/").map((Q)=>encodeURIComponent(Q)).join("/");await this.client.request({service:"s3",region:this.region,method:"DELETE",path:`/${$}/${Y}`})}async deleteObjects($,J){let Y=`<?xml version="1.0" encoding="UTF-8"?>
|
|
6907
6907
|
<Delete>
|
|
6908
6908
|
${J.map((Z)=>`<Object><Key>${Z}</Key></Object>`).join(`
|
|
6909
6909
|
`)}
|
|
@@ -7215,7 +7215,7 @@ Run \`${this.name??"cli"} --help\` for usage.`;r1.stderr.write(`${U}${Z}${W}
|
|
|
7215
7215
|
`).length-1;this.output.write(h1.move(-999,$*-1))}render(){let $=BJ(this._render(this)??"",KJ.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(h1.hide);else{let J=ZW(this._prevFrame,$);if(this.restoreCursor(),J&&J?.length===1){let Y=J[0];this.output.write(h1.move(0,Y)),this.output.write(o9.lines(1));let Q=$.split(`
|
|
7216
7216
|
`);this.output.write(Q[Y]),this._prevFrame=$,this.output.write(h1.move(0,Q.length-Y-1));return}if(J&&J?.length>1){let Y=J[0];this.output.write(h1.move(0,Y)),this.output.write(o9.down());let Z=$.split(`
|
|
7217
7217
|
`).slice(Y);this.output.write(Z.join(`
|
|
7218
|
-
`)),this._prevFrame=$;return}this.output.write(o9.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function FW($,J){if($===void 0)return 0;if(J.length===0)return 0;let Q=J.findIndex((Z)=>Z.value===$);return Q!==-1?Q:0}function AW($,J){return(J.label??String(J.value)).toLowerCase().includes($.toLowerCase())}function KW($,J){if(!J)return;if($)return J;return J[0]}class BW extends Z8{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#Y="";#Q;#J;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return T$.inverse(T$.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let $=this.userInput.slice(0,this._cursor),[J,...Y]=this.userInput.slice(this._cursor);return`${$}${T$.inverse(J)}${Y.join("")}`}get options(){if(typeof this.#J==="function")return this.#J();return this.#J}constructor($){super($);this.#J=$.options;let J=this.options;this.filteredOptions=[...J],this.multiple=$.multiple===!0,this.#Q=$.filter??AW;let Y;if($.initialValue&&Array.isArray($.initialValue))if(this.multiple)Y=$.initialValue;else Y=$.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)Y=[this.options[0].value];if(Y)for(let Q of Y){let Z=J.findIndex((U)=>U.value===Q);if(Z!==-1)this.toggleSelected(Q),this.#$=Z}this.focusedValue=this.options[this.#$]?.value,this.on("key",(Q,Z)=>this.#Z(Q,Z)),this.on("userInput",(Q)=>this.#U(Q))}_isActionKey($,J){return $==="\t"||this.multiple&&this.isNavigating&&J.name==="space"&&$!==void 0&&$!==""}#Z($,J){let Y=J.name==="up",Q=J.name==="down",Z=J.name==="return";if(Y||Q){if(this.#$=Math.max(0,Math.min(this.#$+(Y?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(Z)this.value=KW(this.multiple,this.selectedValues);else if(this.multiple)if(this.focusedValue!==void 0&&(J.name==="tab"||this.isNavigating&&J.name==="space"))this.toggleSelected(this.focusedValue);else this.isNavigating=!1;else{if(this.focusedValue)this.selectedValues=[this.focusedValue];this.isNavigating=!1}}deselectAll(){this.selectedValues=[]}toggleSelected($){if(this.filteredOptions.length===0)return;if(this.multiple)if(this.selectedValues.includes($))this.selectedValues=this.selectedValues.filter((J)=>J!==$);else this.selectedValues=[...this.selectedValues,$];else this.selectedValues=[$]}#U($){if($!==this.#Y){this.#Y=$;let J=this.options;if($)this.filteredOptions=J.filter((Y)=>this.#Q($,Y));else this.filteredOptions=[...J];if(this.#$=FW(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)if(this.focusedValue!==void 0)this.toggleSelected(this.focusedValue);else this.deselectAll()}}}class jW extends Z8{options;cursor=0;#$;getGroupItems($){return this.options.filter((J)=>J.group===$)}isGroupSelected($){let J=this.getGroupItems($),Y=this.value;if(Y===void 0)return!1;return J.every((Q)=>Y.includes(Q.value))}toggleValue(){let $=this.options[this.cursor];if(this.value===void 0)this.value=[];if($.group===!0){let J=$.value,Y=this.getGroupItems(J);if(this.isGroupSelected(J))this.value=this.value.filter((Q)=>Y.findIndex((Z)=>Z.value===Q)===-1);else this.value=[...this.value,...Y.map((Q)=>Q.value)];this.value=Array.from(new Set(this.value))}else{let J=this.value.includes($.value);this.value=J?this.value.filter((Y)=>Y!==$.value):[...this.value,$.value]}}constructor($){super($,!1);let{options:J}=$;this.#$=$.selectableGroups!==!1,this.options=Object.entries(J).flatMap(([Y,Q])=>[{value:Y,group:!0,label:Y},...Q.map((Z)=>({...Z,group:Y}))]),this.value=[...$.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:Y})=>Y===$.cursorAt),this.#$?0:1),this.on("cursor",(Y)=>{switch(Y){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let Q=this.options[this.cursor]?.group===!0;if(!this.#$&&Q)this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let Q=this.options[this.cursor]?.group===!0;if(!this.#$&&Q)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var XW=MU();var j0=($,J)=>XW?$:J,Vj=j0("◆","*"),Lj=j0("■","x"),Mj=j0("▲","x"),Tj=j0("◇","o"),Rj=j0("┌","T"),OW=j0("│","|"),Dj=j0("└","—"),Nj=j0("●",">"),Sj=j0("○"," "),Pj=j0("◻","[•]"),xj=j0("◼","[+]"),Cj=j0("◻","[ ]"),Ij=j0("▪","•"),kj=j0("─","-"),hj=j0("╮","+"),bj=j0("├","+"),yj=j0("╯","+"),vj=j0("●","•"),fj=j0("◆","*"),gj=j0("▲","!"),uj=j0("■","x");var dj={light:j0("─","-"),heavy:j0("━","="),block:j0("█","#")};function _W(){return`${T$.gray(OW)} `}var mj=_W();var U8="0.2.
|
|
7218
|
+
`)),this._prevFrame=$;return}this.output.write(o9.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function FW($,J){if($===void 0)return 0;if(J.length===0)return 0;let Q=J.findIndex((Z)=>Z.value===$);return Q!==-1?Q:0}function AW($,J){return(J.label??String(J.value)).toLowerCase().includes($.toLowerCase())}function KW($,J){if(!J)return;if($)return J;return J[0]}class BW extends Z8{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#Y="";#Q;#J;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return T$.inverse(T$.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}█`;let $=this.userInput.slice(0,this._cursor),[J,...Y]=this.userInput.slice(this._cursor);return`${$}${T$.inverse(J)}${Y.join("")}`}get options(){if(typeof this.#J==="function")return this.#J();return this.#J}constructor($){super($);this.#J=$.options;let J=this.options;this.filteredOptions=[...J],this.multiple=$.multiple===!0,this.#Q=$.filter??AW;let Y;if($.initialValue&&Array.isArray($.initialValue))if(this.multiple)Y=$.initialValue;else Y=$.initialValue.slice(0,1);else if(!this.multiple&&this.options.length>0)Y=[this.options[0].value];if(Y)for(let Q of Y){let Z=J.findIndex((U)=>U.value===Q);if(Z!==-1)this.toggleSelected(Q),this.#$=Z}this.focusedValue=this.options[this.#$]?.value,this.on("key",(Q,Z)=>this.#Z(Q,Z)),this.on("userInput",(Q)=>this.#U(Q))}_isActionKey($,J){return $==="\t"||this.multiple&&this.isNavigating&&J.name==="space"&&$!==void 0&&$!==""}#Z($,J){let Y=J.name==="up",Q=J.name==="down",Z=J.name==="return";if(Y||Q){if(this.#$=Math.max(0,Math.min(this.#$+(Y?-1:1),this.filteredOptions.length-1)),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)this.selectedValues=[this.focusedValue];this.isNavigating=!0}else if(Z)this.value=KW(this.multiple,this.selectedValues);else if(this.multiple)if(this.focusedValue!==void 0&&(J.name==="tab"||this.isNavigating&&J.name==="space"))this.toggleSelected(this.focusedValue);else this.isNavigating=!1;else{if(this.focusedValue)this.selectedValues=[this.focusedValue];this.isNavigating=!1}}deselectAll(){this.selectedValues=[]}toggleSelected($){if(this.filteredOptions.length===0)return;if(this.multiple)if(this.selectedValues.includes($))this.selectedValues=this.selectedValues.filter((J)=>J!==$);else this.selectedValues=[...this.selectedValues,$];else this.selectedValues=[$]}#U($){if($!==this.#Y){this.#Y=$;let J=this.options;if($)this.filteredOptions=J.filter((Y)=>this.#Q($,Y));else this.filteredOptions=[...J];if(this.#$=FW(this.focusedValue,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#$]?.value,!this.multiple)if(this.focusedValue!==void 0)this.toggleSelected(this.focusedValue);else this.deselectAll()}}}class jW extends Z8{options;cursor=0;#$;getGroupItems($){return this.options.filter((J)=>J.group===$)}isGroupSelected($){let J=this.getGroupItems($),Y=this.value;if(Y===void 0)return!1;return J.every((Q)=>Y.includes(Q.value))}toggleValue(){let $=this.options[this.cursor];if(this.value===void 0)this.value=[];if($.group===!0){let J=$.value,Y=this.getGroupItems(J);if(this.isGroupSelected(J))this.value=this.value.filter((Q)=>Y.findIndex((Z)=>Z.value===Q)===-1);else this.value=[...this.value,...Y.map((Q)=>Q.value)];this.value=Array.from(new Set(this.value))}else{let J=this.value.includes($.value);this.value=J?this.value.filter((Y)=>Y!==$.value):[...this.value,$.value]}}constructor($){super($,!1);let{options:J}=$;this.#$=$.selectableGroups!==!1,this.options=Object.entries(J).flatMap(([Y,Q])=>[{value:Y,group:!0,label:Y},...Q.map((Z)=>({...Z,group:Y}))]),this.value=[...$.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:Y})=>Y===$.cursorAt),this.#$?0:1),this.on("cursor",(Y)=>{switch(Y){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let Q=this.options[this.cursor]?.group===!0;if(!this.#$&&Q)this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let Q=this.options[this.cursor]?.group===!0;if(!this.#$&&Q)this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}case"space":this.toggleValue();break}})}}var XW=MU();var j0=($,J)=>XW?$:J,Vj=j0("◆","*"),Lj=j0("■","x"),Mj=j0("▲","x"),Tj=j0("◇","o"),Rj=j0("┌","T"),OW=j0("│","|"),Dj=j0("└","—"),Nj=j0("●",">"),Sj=j0("○"," "),Pj=j0("◻","[•]"),xj=j0("◼","[+]"),Cj=j0("◻","[ ]"),Ij=j0("▪","•"),kj=j0("─","-"),hj=j0("╮","+"),bj=j0("├","+"),yj=j0("╯","+"),vj=j0("●","•"),fj=j0("◆","*"),gj=j0("▲","!"),uj=j0("■","x");var dj={light:j0("─","-"),heavy:j0("━","="),block:j0("█","#")};function _W(){return`${T$.gray(OW)} `}var mj=_W();var U8="0.2.19";import{existsSync as K8}from"node:fs";import{mkdir as NW,writeFile as hJ}from"node:fs/promises";var Y0={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m"};function A2($,J){return`${Y0[J]}${$}${Y0.reset}`}function C($){console.log(`${Y0.green}✓${Y0.reset} ${$}`)}function R($){console.error(`${Y0.red}✗${Y0.reset} ${$}`)}function g($){console.warn(`${Y0.yellow}⚠${Y0.reset} ${$}`)}var L1=g;function F($){console.log(`${Y0.blue}ℹ${Y0.reset} ${$}`)}function i($){console.log(`${Y0.cyan}→${Y0.reset} ${$}`)}function V($){console.log(`
|
|
7219
7219
|
${Y0.bright}${Y0.cyan}${$}${Y0.reset}
|
|
7220
7220
|
`)}var F8=!!(process.env.CI||process.env.GITHUB_ACTIONS||process.env.BUILDKITE||process.env.CIRCLECI||process.env.GITLAB_CI);class L{frames=["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];interval=null;currentFrame=0;message;constructor($){this.message=$}get text(){return this.message}set text($){if(this.message=$,F8&&this.interval)console.log(` ${$}`)}start(){if(F8){console.log(` ${this.message}`),this.interval=!0;return}this.interval=setInterval(()=>{process.stdout.write(`\r${Y0.cyan}${this.frames[this.currentFrame]}${Y0.reset} ${this.message}`),this.currentFrame=(this.currentFrame+1)%this.frames.length},80)}succeed($){this.stop(),C($||this.message)}fail($){this.stop(),R($||this.message)}warn($){this.stop(),L1($||this.message)}stop(){if(this.interval){if(!F8)process.stdout.write("\r");if(typeof this.interval==="object")clearInterval(this.interval);this.interval=null}}}async function A0($,J){let Q=(await import("node:readline")).createInterface({input:process.stdin,output:process.stdout});return new Promise((Z)=>{let U=J?`${Y0.cyan}?${Y0.reset} ${$} ${Y0.gray}(${J})${Y0.reset}: `:`${Y0.cyan}?${Y0.reset} ${$}: `;Q.question(U,(W)=>{Q.close(),Z(W||J||"")})})}async function v($,J=!1){let Y=await A0(`${$} (y/n)`,J?"y":"n");return Y.toLowerCase()==="y"||Y.toLowerCase()==="yes"}async function A8($,J){console.log(`${Y0.cyan}?${Y0.reset} ${$}`),J.forEach((Z,U)=>{console.log(` ${Y0.gray}${U+1}.${Y0.reset} ${Z}`)});let Y=await A0("Select","1"),Q=Number.parseInt(Y)-1;if(Q>=0&&Q<J.length)return J[Q];return J[0]}function d($,J){let Y=$.map((Z,U)=>{let W=Math.max(...J.map((z)=>(z[U]||"").length));return Math.max(Z.length,W)}),Q=$.map((Z,U)=>Z.padEnd(Y[U])).join(" ");console.log(A2(Q,"bright")),console.log(A2("─".repeat(Q.length),"gray")),J.forEach((Z)=>{let U=Z.map((W,z)=>(W||"").padEnd(Y[z])).join(" ");console.log(U)})}function M2($,J="cyan"){let Y=$.split(`
|
|
7221
7221
|
`),Q=Math.max(...Y.map((U)=>U.length)),Z="─".repeat(Q+2);console.log(A2(`┌${Z}┐`,J)),Y.forEach((U)=>{console.log(A2(`│ ${U.padEnd(Q)} │`,J))}),console.log(A2(`└${Z}┘`,J))}async function xJ(){return!0}async function CJ(){try{let{AWSClient:$}=await Promise.resolve().then(() => (z0(),F2));return await new $().request({service:"sts",region:"us-east-1",method:"POST",path:"/",body:new URLSearchParams({Action:"GetCallerIdentity",Version:"2011-06-15"}).toString()}),!0}catch{return!1}}async function IJ(){try{let{AWSClient:$}=await Promise.resolve().then(() => (z0(),F2)),Y=await new $().request({service:"sts",region:"us-east-1",method:"POST",path:"/",body:new URLSearchParams({Action:"GetCallerIdentity",Version:"2011-06-15"}).toString()});return Y.Account||Y.GetCallerIdentityResult?.Account||null}catch{return null}}async function kJ(){try{let{AWSClient:$}=await Promise.resolve().then(() => (z0(),F2)),Y=await new $().request({service:"ec2",region:"us-east-1",method:"POST",path:"/",body:new URLSearchParams({Action:"DescribeRegions",Version:"2016-11-15"}).toString()}),Q=[];if(Y.regionInfo){let Z=Array.isArray(Y.regionInfo)?Y.regionInfo:[Y.regionInfo];Q.push(...Z.map((U)=>U.regionName))}return Q.length>0?Q:PJ()}catch{return PJ()}}function PJ(){return["us-east-1","us-east-2","us-west-1","us-west-2","eu-west-1","eu-central-1","ap-southeast-1","ap-northeast-1"]}function B8($){$.command("init","Initialize a new ts-cloud project").option("--mode <mode>","Deployment mode: server, serverless, or hybrid").option("--name <name>","Project name").option("--region <region>","AWS Region").action(async(J)=>{if(V("Initializing ts-cloud Project"),K8("cloud.config.ts")){if(!await v("cloud.config.ts already exists. Overwrite?",!1)){F("Initialization cancelled");return}}let Y=J?.name||await A0("Project name","my-app"),Q=J?.mode||await A8("Select deployment mode",["serverless","server","hybrid"]),Z=J?.region||await A8("Select AWS region",["us-east-1","us-west-2","eu-west-1","eu-central-1","ap-southeast-1"]),U=new L("Creating configuration file...");U.start();let W=`import { defineConfig } from '@ts-cloud/core'
|
package/dist/index.js
CHANGED
|
@@ -2041,12 +2041,12 @@ class S3Client2 {
|
|
|
2041
2041
|
headers[`x-amz-meta-${key}`] = value;
|
|
2042
2042
|
}
|
|
2043
2043
|
}
|
|
2044
|
+
const encodedKey = options.key.split("/").map((seg) => encodeURIComponent(seg)).join("/");
|
|
2044
2045
|
const normalizedBody = options.body instanceof Uint8Array && !Buffer.isBuffer(options.body) ? Buffer.from(options.body) : options.body;
|
|
2045
2046
|
if (Buffer.isBuffer(normalizedBody) || normalizedBody instanceof Uint8Array) {
|
|
2046
2047
|
const binaryBody = Buffer.isBuffer(normalizedBody) ? normalizedBody : Buffer.from(normalizedBody);
|
|
2047
2048
|
const { accessKeyId, secretAccessKey, sessionToken } = this.getCredentials();
|
|
2048
2049
|
const host = this.s3VirtualHost(options.bucket);
|
|
2049
|
-
const encodedKey = options.key.split("/").map((seg) => encodeURIComponent(seg)).join("/");
|
|
2050
2050
|
const url = `https://${host}/${encodedKey}`;
|
|
2051
2051
|
const now = new Date;
|
|
2052
2052
|
const amzDate = now.toISOString().replace(/[:-]|\.\d{3}/g, "");
|
|
@@ -2106,18 +2106,19 @@ class S3Client2 {
|
|
|
2106
2106
|
service: "s3",
|
|
2107
2107
|
region: this.region,
|
|
2108
2108
|
method: "PUT",
|
|
2109
|
-
path: `/${
|
|
2109
|
+
path: `/${encodedKey}`,
|
|
2110
2110
|
bucket: options.bucket,
|
|
2111
2111
|
headers,
|
|
2112
2112
|
body: options.body
|
|
2113
2113
|
});
|
|
2114
2114
|
}
|
|
2115
2115
|
async getObject(bucket, key) {
|
|
2116
|
+
const encodedKey = key.split("/").map((seg) => encodeURIComponent(seg)).join("/");
|
|
2116
2117
|
const result = await this.client.request({
|
|
2117
2118
|
service: "s3",
|
|
2118
2119
|
region: this.region,
|
|
2119
2120
|
method: "GET",
|
|
2120
|
-
path: `/${bucket}/${
|
|
2121
|
+
path: `/${bucket}/${encodedKey}`,
|
|
2121
2122
|
rawResponse: true
|
|
2122
2123
|
});
|
|
2123
2124
|
return result;
|
|
@@ -2146,11 +2147,12 @@ class S3Client2 {
|
|
|
2146
2147
|
});
|
|
2147
2148
|
}
|
|
2148
2149
|
async deleteObject(bucket, key) {
|
|
2150
|
+
const encodedKey = key.split("/").map((seg) => encodeURIComponent(seg)).join("/");
|
|
2149
2151
|
await this.client.request({
|
|
2150
2152
|
service: "s3",
|
|
2151
2153
|
region: this.region,
|
|
2152
2154
|
method: "DELETE",
|
|
2153
|
-
path: `/${bucket}/${
|
|
2155
|
+
path: `/${bucket}/${encodedKey}`
|
|
2154
2156
|
});
|
|
2155
2157
|
}
|
|
2156
2158
|
async deleteObjects(bucket, keys) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/ts-cloud",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.19",
|
|
5
5
|
"description": "A lightweight, performant infrastructure-as-code library and CLI for deploying both server-based (EC2) and serverless applications.",
|
|
6
6
|
"author": "Chris Breuer <chris@stacksjs.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
"test": "bun test"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@ts-cloud/aws-types": "0.2.
|
|
93
|
-
"@ts-cloud/core": "0.2.
|
|
92
|
+
"@ts-cloud/aws-types": "0.2.19",
|
|
93
|
+
"@ts-cloud/core": "0.2.19",
|
|
94
94
|
"@stacksjs/ts-xml": "^0.1.0"
|
|
95
95
|
},
|
|
96
96
|
"devDependencies": {
|