@stacksjs/ts-cloud 0.2.9 → 0.2.10

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 CHANGED
@@ -360,7 +360,7 @@ Run \`${this.name??"cli"} --help\` for usage.`;Q1.stderr.write(`${W}${Z}${G}
360
360
  `).length-1;this.output.write(t0.move(-999,$*-1))}render(){let $=K9(this._render(this)??"",B9.stdout.columns,{hard:!0,trim:!1});if($===this._prevFrame)return;if(this.state==="initial")this.output.write(t0.hide);else{let J=a7(this._prevFrame,$);if(this.restoreCursor(),J&&J?.length===1){let Y=J[0];this.output.write(t0.move(0,Y)),this.output.write(Y$.lines(1));let Q=$.split(`
361
361
  `);this.output.write(Q[Y]),this._prevFrame=$,this.output.write(t0.move(0,Q.length-Y-1));return}if(J&&J?.length>1){let Y=J[0];this.output.write(t0.move(0,Y)),this.output.write(Y$.down());let Z=$.split(`
362
362
  `).slice(Y);this.output.write(Z.join(`
363
- `)),this._prevFrame=$;return}this.output.write(Y$.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function e7($,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 $J($,J){return(J.label??String(J.value)).toLowerCase().includes($.toLowerCase())}function JJ($,J){if(!J)return;if($)return J;return J[0]}class YJ extends z${filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#Y="";#Q;#J;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return B2.inverse(B2.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`${$}${B2.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??$J;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((W)=>W.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.#W(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=JJ(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=[$]}#W($){if($!==this.#Y){this.#Y=$;let J=this.options;if($)this.filteredOptions=J.filter((Y)=>this.#Q($,Y));else this.filteredOptions=[...J];if(this.#$=e7(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 QJ extends z${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 ZJ=K7();var U0=($,J)=>ZJ?$:J,VQ=U0("◆","*"),XQ=U0("■","x"),_Q=U0("▲","x"),qQ=U0("◇","o"),LQ=U0("┌","T"),WJ=U0("│","|"),MQ=U0("└","—"),wQ=U0("●",">"),TQ=U0("○"," "),DQ=U0("◻","[•]"),NQ=U0("◼","[+]"),RQ=U0("◻","[ ]"),SQ=U0("▪","•"),PQ=U0("─","-"),xQ=U0("╮","+"),CQ=U0("├","+"),hQ=U0("╯","+"),IQ=U0("●","•"),kQ=U0("◆","*"),bQ=U0("▲","!"),yQ=U0("■","x");var vQ={light:U0("─","-"),heavy:U0("━","="),block:U0("█","#")};function GJ(){return`${B2.gray(WJ)} `}var fQ=GJ();var F$="0.2.9";import{existsSync as j$}from"node:fs";import{mkdir as EJ,writeFile as I9}from"node:fs/promises";var e={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 q1($,J){return`${e[J]}${$}${e.reset}`}function P($){console.log(`${e.green}✓${e.reset} ${$}`)}function M($){console.error(`${e.red}✗${e.reset} ${$}`)}function y($){console.warn(`${e.yellow}⚠${e.reset} ${$}`)}var d0=y;function z($){console.log(`${e.blue}ℹ${e.reset} ${$}`)}function t($){console.log(`${e.cyan}→${e.reset} ${$}`)}function q($){console.log(`
363
+ `)),this._prevFrame=$;return}this.output.write(Y$.down())}if(this.output.write($),this.state==="initial")this.state="active";this._prevFrame=$}}function e7($,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 $J($,J){return(J.label??String(J.value)).toLowerCase().includes($.toLowerCase())}function JJ($,J){if(!J)return;if($)return J;return J[0]}class YJ extends z${filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#$=0;#Y="";#Q;#J;get cursor(){return this.#$}get userInputWithCursor(){if(!this.userInput)return B2.inverse(B2.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`${$}${B2.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??$J;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((W)=>W.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.#W(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=JJ(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=[$]}#W($){if($!==this.#Y){this.#Y=$;let J=this.options;if($)this.filteredOptions=J.filter((Y)=>this.#Q($,Y));else this.filteredOptions=[...J];if(this.#$=e7(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 QJ extends z${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 ZJ=K7();var U0=($,J)=>ZJ?$:J,VQ=U0("◆","*"),XQ=U0("■","x"),_Q=U0("▲","x"),qQ=U0("◇","o"),LQ=U0("┌","T"),WJ=U0("│","|"),MQ=U0("└","—"),wQ=U0("●",">"),TQ=U0("○"," "),DQ=U0("◻","[•]"),NQ=U0("◼","[+]"),RQ=U0("◻","[ ]"),SQ=U0("▪","•"),PQ=U0("─","-"),xQ=U0("╮","+"),CQ=U0("├","+"),hQ=U0("╯","+"),IQ=U0("●","•"),kQ=U0("◆","*"),bQ=U0("▲","!"),yQ=U0("■","x");var vQ={light:U0("─","-"),heavy:U0("━","="),block:U0("█","#")};function GJ(){return`${B2.gray(WJ)} `}var fQ=GJ();var F$="0.2.10";import{existsSync as j$}from"node:fs";import{mkdir as EJ,writeFile as I9}from"node:fs/promises";var e={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 q1($,J){return`${e[J]}${$}${e.reset}`}function P($){console.log(`${e.green}✓${e.reset} ${$}`)}function M($){console.error(`${e.red}✗${e.reset} ${$}`)}function y($){console.warn(`${e.yellow}⚠${e.reset} ${$}`)}var d0=y;function z($){console.log(`${e.blue}ℹ${e.reset} ${$}`)}function t($){console.log(`${e.cyan}→${e.reset} ${$}`)}function q($){console.log(`
364
364
  ${e.bright}${e.cyan}${$}${e.reset}
365
365
  `)}var A$=!!(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=$,A$&&this.interval)console.log(` ${$}`)}start(){if(A$){console.log(` ${this.message}`),this.interval=!0;return}this.interval=setInterval(()=>{process.stdout.write(`\r${e.cyan}${this.frames[this.currentFrame]}${e.reset} ${this.message}`),this.currentFrame=(this.currentFrame+1)%this.frames.length},80)}succeed($){this.stop(),P($||this.message)}fail($){this.stop(),M($||this.message)}warn($){this.stop(),d0($||this.message)}stop(){if(this.interval){if(!A$)process.stdout.write("\r");if(typeof this.interval==="object")clearInterval(this.interval);this.interval=null}}}async function G0($,J){let Q=(await import("node:readline")).createInterface({input:process.stdin,output:process.stdout});return new Promise((Z)=>{let W=J?`${e.cyan}?${e.reset} ${$} ${e.gray}(${J})${e.reset}: `:`${e.cyan}?${e.reset} ${$}: `;Q.question(W,(G)=>{Q.close(),Z(G||J||"")})})}async function h($,J=!1){let Y=await G0(`${$} (y/n)`,J?"y":"n");return Y.toLowerCase()==="y"||Y.toLowerCase()==="yes"}async function O$($,J){console.log(`${e.cyan}?${e.reset} ${$}`),J.forEach((Z,W)=>{console.log(` ${e.gray}${W+1}.${e.reset} ${Z}`)});let Y=await G0("Select","1"),Q=Number.parseInt(Y)-1;if(Q>=0&&Q<J.length)return J[Q];return J[0]}function g($,J){let Y=$.map((Z,W)=>{let G=Math.max(...J.map((U)=>(U[W]||"").length));return Math.max(Z.length,G)}),Q=$.map((Z,W)=>Z.padEnd(Y[W])).join(" ");console.log(q1(Q,"bright")),console.log(q1("─".repeat(Q.length),"gray")),J.forEach((Z)=>{let W=Z.map((G,U)=>(G||"").padEnd(Y[U])).join(" ");console.log(W)})}function x1($,J="cyan"){let Y=$.split(`
366
366
  `),Q=Math.max(...Y.map((W)=>W.length)),Z="─".repeat(Q+2);console.log(q1(`┌${Z}┐`,J)),Y.forEach((W)=>{console.log(q1(`│ ${W.padEnd(Q)} │`,J))}),console.log(q1(`└${Z}┘`,J))}async function P9(){return!0}async function x9(){try{let{AWSClient:$}=await Promise.resolve().then(() => (Z0(),_1));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 C9(){try{let{AWSClient:$}=await Promise.resolve().then(() => (Z0(),_1)),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 h9(){try{let{AWSClient:$}=await Promise.resolve().then(() => (Z0(),_1)),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((W)=>W.regionName))}return Q.length>0?Q:S9()}catch{return S9()}}function S9(){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 E$($){$.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(q("Initializing ts-cloud Project"),j$("cloud.config.ts")){if(!await h("cloud.config.ts already exists. Overwrite?",!1)){z("Initialization cancelled");return}}let Y=J?.name||await G0("Project name","my-app"),Q=J?.mode||await O$("Select deployment mode",["serverless","server","hybrid"]),Z=J?.region||await O$("Select AWS region",["us-east-1","us-west-2","eu-west-1","eu-central-1","ap-southeast-1"]),W=new L("Creating configuration file...");W.start();let G=`import { defineConfig } from '@ts-cloud/core'
package/dist/index.d.ts CHANGED
@@ -5,8 +5,8 @@ export type { ValidationError as TemplateValidationError, ValidationResult as Te
5
5
  export { AWSClient, CloudFormationClient, CloudFormationClient as AWSCloudFormationClient, CloudFrontClient, CloudFrontClient as AWSCloudFrontClient, EC2Client, S3Client, Route53Client, Route53DomainsClient, ACMClient, ACMDnsValidator, ECRClient, ECSClient, STSClient, SSMClient, SecretsManagerClient, SESClient, EmailClient, SNSClient, SQSClient, LambdaClient, CloudWatchLogsClient, ConnectClient, ELBv2Client, RDSClient, DynamoDBClient, OpenSearchClient, TranscribeClient, BedrockClient, BedrockRuntimeClient, ComprehendClient, RekognitionClient, TextractClient, PollyClient, TranslateClient, PersonalizeClient, KendraClient, EventBridgeClient, ElastiCacheClient, SchedulerClient, IAMClient, ApplicationAutoScalingClient, SmsClient, VoiceClient, SupportClient, EFSClient, } from './aws';
6
6
  export type { AWSRequestOptions, AWSClientConfig, AWSError, AWSCredentials as AWSClientCredentials, StackParameter, StackTag, CreateStackOptions, UpdateStackOptions, DescribeStacksOptions, StackEvent, Stack, InvalidationOptions, Distribution, S3SyncOptions, S3CopyOptions, S3ListOptions, S3Object, CertificateDetail, Certificate as ELBv2Certificate, RekognitionS3Object, RekognitionBoundingBox, TextractS3Object, TextractBoundingBox, CountryCode, ContactType, ContactDetail, KendraCreateDataSourceCommandInput, KendraCreateDataSourceCommandOutput, KendraListDataSourcesCommandInput, KendraListDataSourcesCommandOutput, InvokeModelCommandInput, InvokeModelCommandOutput, InvokeModelWithResponseStreamCommandInput, InvokeModelWithResponseStreamCommandOutput, CreateModelCustomizationJobCommandInput, CreateModelCustomizationJobCommandOutput, GetModelCustomizationJobCommandInput, GetModelCustomizationJobCommandOutput, ListFoundationModelsCommandInput, ListFoundationModelsCommandOutput, AttributeValue as DynamoDBAttributeValue, KeySchemaElement, AttributeDefinition as DynamoDBAttributeDefinition, } from './aws';
7
7
  export * from './ssl';
8
- export { deployStaticSite, deployStaticSiteFull, uploadStaticFiles, invalidateCache, deleteStaticSite, generateStaticSiteTemplate, deployStaticSiteWithExternalDns, deployStaticSiteWithExternalDnsFull, generateExternalDnsStaticSiteTemplate, } from './deploy';
9
- export type { StaticSiteConfig, DeployResult, UploadOptions, ExternalDnsStaticSiteConfig, ExternalDnsDeployResult, } from './deploy';
8
+ export { deployStaticSite, deployStaticSiteFull, uploadStaticFiles, invalidateCache, deleteStaticSite, generateStaticSiteTemplate, deployStaticSiteWithExternalDns, deployStaticSiteWithExternalDnsFull, generateExternalDnsStaticSiteTemplate, deploySite, } from './deploy';
9
+ export type { StaticSiteConfig, DeployResult, UploadOptions, ExternalDnsStaticSiteConfig, ExternalDnsDeployResult, DeploySiteConfig, DeploySiteResult, StaticSiteDnsProvider, } from './deploy';
10
10
  export { createDnsProvider, detectDnsProvider, DnsProviderFactory, dnsProviders, PorkbunProvider, GoDaddyProvider, Route53Provider, UnifiedDnsValidator, createPorkbunValidator, createGoDaddyValidator, createRoute53Validator, } from './dns';
11
11
  export type { DnsProvider, DnsProviderConfig, DnsRecord, DnsRecordType, DnsRecordResult, CreateRecordResult, DeleteRecordResult, ListRecordsResult, } from './dns';
12
12
  export * from '@ts-cloud/core';
package/dist/index.js CHANGED
@@ -75343,6 +75343,80 @@ init_static_site_external_dns();
75343
75343
 
75344
75344
  // src/deploy/static-site-helper.ts
75345
75345
  init_static_site_external_dns();
75346
+ import process6 from "node:process";
75347
+ import { existsSync as existsSync10 } from "node:fs";
75348
+ import { join as join9 } from "node:path";
75349
+ async function deploySite(config4) {
75350
+ const start = Date.now();
75351
+ const sourceDir = config4.sourceDir ?? "dist";
75352
+ if (!existsSync10(join9(sourceDir, "index.html"))) {
75353
+ return fail(start, `${sourceDir}/ has no index.html — build first.`);
75354
+ }
75355
+ if (!process6.env.AWS_ACCESS_KEY_ID || !process6.env.AWS_SECRET_ACCESS_KEY) {
75356
+ return fail(start, "Missing AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY in env.");
75357
+ }
75358
+ const dns2 = resolveDnsProvider(config4.dnsProvider);
75359
+ if ("error" in dns2)
75360
+ return fail(start, dns2.error);
75361
+ const result = await deployStaticSiteWithExternalDnsFull({
75362
+ siteName: config4.siteName,
75363
+ region: config4.region ?? "us-east-1",
75364
+ domain: config4.domain,
75365
+ bucket: config4.bucket,
75366
+ stackName: config4.stackName,
75367
+ certificateArn: config4.certificateArn,
75368
+ defaultRootObject: config4.defaultRootObject ?? "index.html",
75369
+ errorDocument: config4.errorDocument ?? "404.html",
75370
+ cacheControl: config4.cacheControl ?? "max-age=3600, public",
75371
+ sourceDir,
75372
+ cleanBucket: config4.cleanBucket ?? false,
75373
+ singlePageApp: config4.singlePageApp ?? false,
75374
+ dnsProvider: dns2,
75375
+ tags: {
75376
+ ManagedBy: "ts-cloud",
75377
+ Application: config4.siteName,
75378
+ ...config4.tags
75379
+ },
75380
+ onProgress: config4.onProgress
75381
+ });
75382
+ return {
75383
+ success: !!result.success,
75384
+ domain: result.domain,
75385
+ url: result.domain ? `https://${result.domain}` : result.distributionDomain ? `https://${result.distributionDomain}` : undefined,
75386
+ bucket: result.bucket,
75387
+ distributionId: result.distributionId,
75388
+ distributionDomain: result.distributionDomain,
75389
+ certificateArn: result.certificateArn,
75390
+ filesUploaded: result.filesUploaded,
75391
+ filesSkipped: result.filesSkipped,
75392
+ message: result.message,
75393
+ durationMs: Date.now() - start
75394
+ };
75395
+ }
75396
+ function resolveDnsProvider(input) {
75397
+ const config4 = typeof input === "string" ? { provider: input } : input ?? { provider: "porkbun" };
75398
+ if (config4.provider === "porkbun") {
75399
+ const c = config4;
75400
+ const apiKey = c?.apiKey ?? process6.env.PORKBUN_API_KEY;
75401
+ const secretKey = c?.secretKey ?? process6.env.PORKBUN_SECRET_KEY ?? process6.env.PORKBUN_SECRET_API_KEY;
75402
+ if (!apiKey || !secretKey)
75403
+ return { error: "Missing PORKBUN_API_KEY / PORKBUN_SECRET_KEY in env." };
75404
+ return { provider: "porkbun", apiKey, secretKey };
75405
+ }
75406
+ if (config4.provider === "godaddy") {
75407
+ const c = config4;
75408
+ const apiKey = c?.apiKey ?? process6.env.GODADDY_API_KEY;
75409
+ const apiSecret = c?.secretKey ?? process6.env.GODADDY_API_SECRET;
75410
+ const environment = c?.environment ?? process6.env.GODADDY_ENVIRONMENT;
75411
+ if (!apiKey || !apiSecret)
75412
+ return { error: "Missing GODADDY_API_KEY / GODADDY_API_SECRET in env." };
75413
+ return { provider: "godaddy", apiKey, apiSecret, environment };
75414
+ }
75415
+ return { error: `Unsupported DNS provider: ${config4.provider}` };
75416
+ }
75417
+ function fail(start, message) {
75418
+ return { success: false, message, durationMs: Date.now() - start };
75419
+ }
75346
75420
  // src/index.ts
75347
75421
  init_dns();
75348
75422
  export {
@@ -75527,6 +75601,7 @@ export {
75527
75601
  deployStaticSiteWithExternalDns,
75528
75602
  deployStaticSiteFull,
75529
75603
  deployStaticSite,
75604
+ deploySite,
75530
75605
  deleteStaticSite,
75531
75606
  defaultLocalConfig,
75532
75607
  defaultConfig2 as defaultConfig,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/ts-cloud",
3
3
  "type": "module",
4
- "version": "0.2.9",
4
+ "version": "0.2.10",
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",
@@ -85,8 +85,8 @@
85
85
  "test": "bun test"
86
86
  },
87
87
  "dependencies": {
88
- "@ts-cloud/aws-types": "0.2.9",
89
- "@ts-cloud/core": "0.2.9",
88
+ "@ts-cloud/aws-types": "0.2.10",
89
+ "@ts-cloud/core": "0.2.10",
90
90
  "@stacksjs/ts-xml": "^0.1.0"
91
91
  },
92
92
  "devDependencies": {