stacks 0.58.49 → 0.58.50

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.
Files changed (113) hide show
  1. package/core/actions/dist/src/index.js +2 -0
  2. package/core/actions/dist/src/release.js +2 -0
  3. package/core/actions/dist/src/upgrade.js +1 -1
  4. package/core/actions/package.json +1 -1
  5. package/core/actions/src/action.ts +2 -0
  6. package/core/actions/src/generate/custom-cli-file.ts +24 -0
  7. package/core/ai/dist/index.js +6 -6
  8. package/core/ai/package.json +3 -3
  9. package/core/alias/package.json +1 -1
  10. package/core/analytics/package.json +1 -1
  11. package/core/api/package.json +1 -1
  12. package/core/arrays/package.json +1 -1
  13. package/core/auth/package.json +1 -1
  14. package/core/buddy/dist/{chunk-b32089b9556f373c.js → chunk-91084836e95161e8.js} +1 -1
  15. package/core/buddy/dist/cli.js +13 -1
  16. package/core/buddy/dist/index.js +1 -1
  17. package/core/buddy/package.json +1 -1
  18. package/core/buddy/src/cli.ts +17 -0
  19. package/core/buddy/src/commands/deploy.ts +1 -1
  20. package/core/buddy/src/custom-cli.ts +36 -0
  21. package/core/build/package.json +1 -1
  22. package/core/bun-create/bud/package.json +1 -1
  23. package/core/bun-create/buddy/package.json +1 -1
  24. package/core/bun-create/stack/package.json +1 -1
  25. package/core/bun-create/stacks/package.json +1 -1
  26. package/core/bun-create/stx/package.json +1 -1
  27. package/core/bun-plugin-yaml/package.json +1 -1
  28. package/core/cache/package.json +2 -2
  29. package/core/chat/package.json +1 -1
  30. package/core/cli/dist/index.js +2 -2
  31. package/core/cli/package.json +1 -1
  32. package/core/cli/src/cli.ts +1 -1
  33. package/core/cloud/deploy.ts +2 -2
  34. package/core/cloud/dist/index.js +144 -60
  35. package/core/cloud/package.json +32 -32
  36. package/core/cloud/src/cloud/aws-sdk-layer/nodejs/package-lock.json +6 -6
  37. package/core/cloud/src/cloud/aws-sdk-layer/nodejs/package.json +2 -2
  38. package/core/cloud/src/cloud/cdn.ts +5 -5
  39. package/core/cloud/src/cloud/compute.ts +150 -28
  40. package/core/cloud/src/cloud/index.ts +13 -9
  41. package/core/cloud/src/cloud/network.ts +4 -24
  42. package/core/cloud/src/cloud/package/package.json +1 -1
  43. package/core/cloud/src/cloud/router-layer/nodejs/package.json +2 -2
  44. package/core/collections/package.json +1 -1
  45. package/core/config/dist/index.js +13 -12
  46. package/core/config/package.json +2 -2
  47. package/core/config/src/config.ts +1 -1
  48. package/core/config/src/defaults.ts +3 -3
  49. package/core/config/src/overrides.ts +22 -22
  50. package/core/database/package.json +1 -1
  51. package/core/datetime/package.json +1 -1
  52. package/core/desktop/package.json +1 -1
  53. package/core/development/package.json +1 -1
  54. package/core/dns/package.json +7 -7
  55. package/core/docs/package.json +3 -3
  56. package/core/email/package.json +3 -3
  57. package/core/enums/package.json +1 -1
  58. package/core/env/package.json +1 -1
  59. package/core/error-handling/package.json +1 -1
  60. package/core/eslint-config/package.json +4 -4
  61. package/core/events/package.json +1 -1
  62. package/core/faker/package.json +1 -1
  63. package/core/git/package.json +1 -1
  64. package/core/health/package.json +1 -1
  65. package/core/http/package.json +1 -1
  66. package/core/lint/package.json +3 -3
  67. package/core/logging/package.json +1 -1
  68. package/core/notifications/package.json +1 -1
  69. package/core/objects/package.json +1 -1
  70. package/core/orm/package.json +1 -1
  71. package/core/path/package.json +1 -1
  72. package/core/payments/package.json +1 -1
  73. package/core/push/package.json +1 -1
  74. package/core/query-builder/package.json +1 -1
  75. package/core/queue/dist/index.js +3 -1
  76. package/core/queue/package.json +1 -1
  77. package/core/queue/src/index.ts +4 -2
  78. package/core/raycast/package.json +1 -1
  79. package/core/realtime/package.json +1 -1
  80. package/core/repl/package.json +1 -1
  81. package/core/router/package.json +1 -1
  82. package/core/scheduler/dist/index.js +3 -2
  83. package/core/scheduler/package.json +1 -1
  84. package/core/scheduler/src/index.ts +1 -1
  85. package/core/search-engine/package.json +1 -1
  86. package/core/security/package.json +1 -1
  87. package/core/server/package.json +1 -1
  88. package/core/signals/package.json +1 -1
  89. package/core/slug/package.json +1 -1
  90. package/core/sms/package.json +1 -1
  91. package/core/storage/package.json +1 -1
  92. package/core/strings/package.json +1 -1
  93. package/core/tables/package.json +1 -1
  94. package/core/testing/package.json +3 -3
  95. package/core/tinker/package.json +1 -1
  96. package/core/tsconfig.json +1 -0
  97. package/core/tunnel/package.json +1 -1
  98. package/core/types/package.json +4 -4
  99. package/core/types/src/api.ts +2 -0
  100. package/core/types/src/cron-jobs.ts +2 -1
  101. package/core/types/src/stacks.ts +6 -6
  102. package/core/ui/package.json +4 -4
  103. package/core/utils/dist/index.js +1 -1
  104. package/core/utils/package.json +1 -1
  105. package/core/validation/package.json +1 -1
  106. package/core/vite/dist/index.js +1 -1
  107. package/core/vite/package.json +1 -1
  108. package/core/whois/package.json +1 -1
  109. package/core/x-ray/package.json +1 -1
  110. package/core/zsh-buddy/package.json +1 -1
  111. package/ide/vscode/package.json +1 -1
  112. package/package.json +1 -1
  113. package/core/cloud/src/cloud/stacksjs-router-0.58.48.tgz +0 -0
@@ -1,9 +1,11 @@
1
1
  /* eslint-disable no-new */
2
- import type { aws_certificatemanager as acm, aws_ec2 as ec2, aws_efs as efs, aws_route53 as route53 } from 'aws-cdk-lib'
3
- import { Duration, CfnOutput as Output, aws_lambda as lambda, aws_logs as logs, aws_secretsmanager as secretsmanager } from 'aws-cdk-lib'
2
+ import type { aws_certificatemanager as acm, aws_efs as efs, aws_lambda as lambda, aws_route53 as route53 } from 'aws-cdk-lib'
3
+ import { Duration, CfnOutput as Output, RemovalPolicy, aws_ec2 as ec2, aws_ecs as ecs, aws_secretsmanager as secretsmanager } from 'aws-cdk-lib'
4
4
  import type { Construct } from 'constructs'
5
5
  import { path as p } from '@stacksjs/path'
6
6
  import { env } from '@stacksjs/env'
7
+ import { LogGroup } from 'aws-cdk-lib/aws-logs'
8
+ import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2'
7
9
  import type { NestedCloudProps } from '../types'
8
10
  import type { EnvKey } from '../../../../env'
9
11
 
@@ -15,6 +17,7 @@ export interface ComputeStackProps extends NestedCloudProps {
15
17
  }
16
18
 
17
19
  export class ComputeStack {
20
+ lb: elbv2.ApplicationLoadBalancer
18
21
  apiServer: lambda.Function
19
22
  apiServerUrl: lambda.FunctionUrl
20
23
 
@@ -25,22 +28,149 @@ export class ComputeStack {
25
28
  if (!fileSystem)
26
29
  throw new Error('The file system is missing. Please make sure it was created properly.')
27
30
 
28
- // const dockerImageAsset = new ecr_assets.DockerImageAsset(scope, 'ServerBuildImage', {
29
- // directory: p.cloudPath('src/server'),
30
- // })
31
+ const cluster = new ecs.Cluster(scope, 'StacksCluster', {
32
+ clusterName: `${props.slug}-${props.appEnv}-web-server-cluster`,
33
+ vpc,
34
+ })
35
+
36
+ const taskDefinition = new ecs.FargateTaskDefinition(scope, 'TaskDefinition', {
37
+ family: `${props.appName}-${props.appEnv}-api`,
38
+ memoryLimitMiB: 512, // Match your Lambda memory size
39
+ cpu: 256, // Choose an appropriate value
40
+ runtimePlatform: {
41
+ cpuArchitecture: ecs.CpuArchitecture.ARM64,
42
+ },
43
+ })
44
+
45
+ const container = taskDefinition.addContainer('WebServerContainer', {
46
+ containerName: `${props.appName}-${props.appEnv}-api`,
47
+ image: ecs.ContainerImage.fromAsset(p.frameworkPath('server')),
48
+ logging: new ecs.AwsLogDriver({
49
+ streamPrefix: `${props.appName}-${props.appEnv}-web`,
50
+ logGroup: new LogGroup(scope, 'StacksApiLogs', {
51
+ logGroupName: '/ecs/stacks-api',
52
+ removalPolicy: RemovalPolicy.DESTROY, // Automatically remove logs on stack deletion
53
+ }),
54
+ }),
55
+ healthCheck: {
56
+ command: ['CMD-SHELL', 'curl -f http://localhost:3000/health || exit 1'],
57
+ interval: Duration.seconds(10),
58
+ timeout: Duration.seconds(5),
59
+ retries: 3,
60
+ startPeriod: Duration.seconds(10),
61
+ },
62
+ })
63
+
64
+ container.addPortMappings({
65
+ containerPort: 3000,
66
+ hostPort: 3000,
67
+ })
68
+
69
+ const serviceSecurityGroup = new ec2.SecurityGroup(scope, 'ServiceSecurityGroup', {
70
+ securityGroupName: `${props.appName}-${props.appEnv}-api-service-sg`,
71
+ vpc,
72
+ description: 'Stacks Security Group for API Service',
73
+ })
74
+
75
+ const publicLoadBalancerSG = new ec2.SecurityGroup(scope, 'PublicLoadBalancerSG', {
76
+ securityGroupName: `${props.appName}-${props.appEnv}-public-load-balancer-sg`,
77
+ vpc,
78
+ description: 'Access to the public facing load balancer',
79
+ })
80
+
81
+ // Assuming serviceSecurityGroup and publicLoadBalancerSG are already defined
82
+ serviceSecurityGroup.addIngressRule(
83
+ publicLoadBalancerSG,
84
+ ec2.Port.allTraffic(),
85
+ 'Ingress from the public ALB',
86
+ )
87
+
88
+ // Assuming serviceSecurityGroup and publicLoadBalancerSG are already defined
89
+ serviceSecurityGroup.addIngressRule(publicLoadBalancerSG, ec2.Port.allTraffic(), 'Ingress from the public ALB')
90
+
91
+ this.lb = new elbv2.ApplicationLoadBalancer(scope, 'ApplicationLoadBalancer', {
92
+ loadBalancerName: `${props.appName}-${props.appEnv}-alb`,
93
+ vpc,
94
+ vpcSubnets: {
95
+ subnets: vpc.selectSubnets({
96
+ subnetType: ec2.SubnetType.PUBLIC,
97
+ onePerAz: true,
98
+ }).subnets,
99
+ },
100
+ internetFacing: true,
101
+ idleTimeout: Duration.seconds(30),
102
+ securityGroup: publicLoadBalancerSG,
103
+ })
31
104
 
32
- this.apiServer = new lambda.Function(scope, 'WebServer', {
33
- functionName: `${props.slug}-${props.appEnv}-web-server`,
34
- description: 'The web server for the Stacks application',
35
- code: lambda.Code.fromAssetImage(p.frameworkPath('server')),
36
- handler: lambda.Handler.FROM_IMAGE,
37
- runtime: lambda.Runtime.FROM_IMAGE,
105
+ const serviceTargetGroup = new elbv2.ApplicationTargetGroup(scope, 'ServiceTargetGroup', {
106
+ // targetGroupName: `${props.appName}-${props.appEnv}-service-tg`,
38
107
  vpc,
39
- memorySize: 512, // replace with your actual memory size
40
- timeout: Duration.minutes(5), // replace with your actual timeout
41
- logRetention: logs.RetentionDays.ONE_WEEK,
42
- architecture: lambda.Architecture.ARM_64,
43
- // filesystem: lambda.FileSystem.fromEfsAccessPoint(props.accessPoint, '/mnt/efs'),
108
+ targetType: elbv2.TargetType.IP,
109
+ protocol: elbv2.ApplicationProtocol.HTTP,
110
+ port: 3000,
111
+ healthCheck: {
112
+ interval: Duration.seconds(6),
113
+ path: '/',
114
+ protocol: elbv2.Protocol.HTTP,
115
+ timeout: Duration.seconds(5),
116
+ healthyThresholdCount: 2,
117
+ unhealthyThresholdCount: 10,
118
+ },
119
+ })
120
+
121
+ const service = new ecs.FargateService(scope, 'StacksApiService', {
122
+ serviceName: `${props.appName}-${props.appEnv}-api-service`,
123
+ cluster,
124
+ taskDefinition,
125
+ desiredCount: 2,
126
+ assignPublicIp: true,
127
+ maxHealthyPercent: 200,
128
+ vpcSubnets: vpc.selectSubnets({
129
+ subnetType: ec2.SubnetType.PUBLIC,
130
+ onePerAz: true,
131
+ }),
132
+ minHealthyPercent: 75,
133
+ securityGroups: [serviceSecurityGroup],
134
+ })
135
+
136
+ service.attachToApplicationTargetGroup(serviceTargetGroup)
137
+ publicLoadBalancerSG.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.allTraffic())
138
+
139
+ this.lb.addListener('HttpListener', {
140
+ port: 80,
141
+ defaultAction: elbv2.ListenerAction.forward([serviceTargetGroup]),
142
+ })
143
+
144
+ props.fileSystem.connections.allowFromAnyIpv4(ec2.Port.tcp(2049)) // port 2049 (NFS) for EFS
145
+
146
+ const volumeName = `${props.slug}-${props.appEnv}-efs`
147
+ taskDefinition.addVolume({
148
+ name: volumeName,
149
+ efsVolumeConfiguration: {
150
+ fileSystemId: props.fileSystem.fileSystemId,
151
+ },
152
+ })
153
+
154
+ container.addMountPoints({
155
+ sourceVolume: volumeName,
156
+ containerPath: '/mnt/efs',
157
+ readOnly: false,
158
+ })
159
+
160
+ // Setup AutoScaling policy
161
+ // TODO: make this configurable in cloud.compute
162
+ const scaling = service.autoScaleTaskCount({ maxCapacity: 2 })
163
+
164
+ scaling.scaleOnCpuUtilization('CpuScaling', {
165
+ targetUtilizationPercent: 50,
166
+ scaleInCooldown: Duration.seconds(60),
167
+ scaleOutCooldown: Duration.seconds(60),
168
+ })
169
+
170
+ scaling.scaleOnMemoryUtilization('MemoryScaling', {
171
+ targetUtilizationPercent: 60,
172
+ scaleInCooldown: Duration.seconds(60),
173
+ scaleOutCooldown: Duration.seconds(60),
44
174
  })
45
175
 
46
176
  const keysToRemove = ['_HANDLER', '_X_AMZN_TRACE_ID', 'AWS_REGION', 'AWS_EXECUTION_ENV', 'AWS_LAMBDA_FUNCTION_NAME', 'AWS_LAMBDA_FUNCTION_MEMORY_SIZE', 'AWS_LAMBDA_FUNCTION_VERSION', 'AWS_LAMBDA_INITIALIZATION_TYPE', 'AWS_LAMBDA_LOG_GROUP_NAME', 'AWS_LAMBDA_LOG_STREAM_NAME', 'AWS_ACCESS_KEY', 'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_SESSION_TOKEN', 'AWS_LAMBDA_RUNTIME_API', 'LAMBDA_TASK_ROOT', 'LAMBDA_RUNTIME_DIR', '_']
@@ -55,16 +185,8 @@ export class ComputeStack {
55
185
  },
56
186
  })
57
187
 
58
- secrets.grantRead(this.apiServer)
59
- this.apiServer.addEnvironment('SECRETS_ARN', secrets.secretArn)
60
-
61
- this.apiServerUrl = new lambda.FunctionUrl(scope, 'StacksServerUrl', {
62
- function: this.apiServer,
63
- authType: lambda.FunctionUrlAuthType.NONE, // becomes a public API
64
- cors: {
65
- allowedOrigins: ['*'],
66
- },
67
- })
188
+ secrets.grantRead(service.taskDefinition.executionRole!)
189
+ container.addEnvironment('SECRETS_ARN', secrets.secretArn)
68
190
 
69
191
  const apiPrefix = 'api'
70
192
  new Output(scope, 'ApiUrl', {
@@ -73,8 +195,8 @@ export class ComputeStack {
73
195
  })
74
196
 
75
197
  new Output(scope, 'ApiVanityUrl', {
76
- value: this.apiServerUrl.url,
77
- description: 'The Vanity URL of the deployed application',
198
+ value: `http://${this.lb.loadBalancerDnsName}`,
199
+ description: 'The Vanity URL / DNS name of the load balancer',
78
200
  })
79
201
  }
80
202
  }
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable no-new */
2
2
  import { Stack } from 'aws-cdk-lib'
3
3
  import type { Construct } from 'constructs'
4
+ import { config } from '@stacksjs/config'
4
5
  import type { CloudOptions } from '../types'
5
6
  import { AiStack } from './ai'
6
7
  import { CdnStack } from './cdn'
@@ -62,13 +63,16 @@ export class Cloud extends Stack {
62
63
 
63
64
  // new DashboardStack(this)
64
65
 
65
- const api = new ComputeStack(this, {
66
- ...props,
67
- vpc: network.vpc,
68
- fileSystem: fileSystem.fileSystem,
69
- zone: dns.zone,
70
- certificate: security.certificate,
71
- })
66
+ let api
67
+ if (config.cloud.api?.deploy) {
68
+ api = new ComputeStack(this, {
69
+ ...props,
70
+ vpc: network.vpc,
71
+ fileSystem: fileSystem.fileSystem,
72
+ zone: dns.zone,
73
+ certificate: security.certificate,
74
+ })
75
+ }
72
76
 
73
77
  const ai = new AiStack(this, props)
74
78
 
@@ -82,11 +86,11 @@ export class Cloud extends Stack {
82
86
  firewall: security.firewall,
83
87
  originRequestFunction: docs.originRequestFunction,
84
88
  zone: dns.zone,
85
- webServer: api.apiServer,
86
- webServerUrl: api.apiServerUrl,
87
89
  cliSetupUrl: cli.cliSetupUrl,
88
90
  askAiUrl: ai.askAiUrl,
89
91
  summarizeAiUrl: ai.summarizeAiUrl,
92
+ webServer: api?.apiServer,
93
+ webServerUrl: api?.apiServerUrl,
90
94
  })
91
95
 
92
96
  new DeploymentStack(this, {
@@ -17,34 +17,14 @@ export class NetworkStack {
17
17
  natGateways: 0,
18
18
  subnetConfiguration: [
19
19
  {
20
- cidrMask: 21,
21
- name: `${props.slug}-${props.appEnv}-public-subnet-1`,
20
+ name: 'public-subnet-1',
22
21
  subnetType: ec2.SubnetType.PUBLIC,
22
+ cidrMask: 24,
23
23
  },
24
24
  {
25
- cidrMask: 21,
26
- name: `${props.slug}-${props.appEnv}-public-subnet-2`,
27
- subnetType: ec2.SubnetType.PUBLIC,
28
- },
29
- {
30
- cidrMask: 21,
31
- name: `${props.slug}-${props.appEnv}-public-subnet-3`,
32
- subnetType: ec2.SubnetType.PUBLIC,
33
- },
34
- {
35
- cidrMask: 21,
36
- name: `${props.slug}-${props.appEnv}-private-subnet-1`,
37
- subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
38
- },
39
- {
40
- cidrMask: 21,
41
- name: `${props.slug}-${props.appEnv}-private-subnet-2`,
42
- subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
43
- },
44
- {
45
- cidrMask: 21,
46
- name: `${props.slug}-${props.appEnv}-private-subnet-3`,
25
+ name: 'private-subnet-1',
47
26
  subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
27
+ cidrMask: 28,
48
28
  },
49
29
  ],
50
30
  })
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/router",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks framework router.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stacks-router-layer",
3
- "version": "0.58.49",
3
+ "version": "0.58.50",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "license": "MIT",
@@ -10,6 +10,6 @@
10
10
  "test": "echo \"Error: no test specified\" && exit 1"
11
11
  },
12
12
  "dependencies": {
13
- "@stacksjs/router": "^0.58.48"
13
+ "@stacksjs/router": "^0.58.49"
14
14
  }
15
15
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/collections",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks collections.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -253,14 +253,14 @@ __export(exports_config, {
253
253
  return cloud2;
254
254
  }
255
255
  },
256
- cache: () => {
256
+ cli: () => {
257
257
  {
258
- return cache2;
258
+ return cli2;
259
259
  }
260
260
  },
261
- binary: () => {
261
+ cache: () => {
262
262
  {
263
- return binary;
263
+ return cache2;
264
264
  }
265
265
  },
266
266
  app: () => {
@@ -338,9 +338,9 @@ var defaults_default = {
338
338
  api: 3999
339
339
  }
340
340
  },
341
- binary: {
342
- name: "buddy",
343
- command: "buddy",
341
+ cli: {
342
+ name: "My Custom CLI",
343
+ command: "my-custom-cli",
344
344
  description: "Stacks is a full-stack framework for TypeScript.",
345
345
  source: p.appPath("commands")
346
346
  },
@@ -754,8 +754,8 @@ var cache_default = {
754
754
 
755
755
  // /home/runner/work/stacks/stacks/config/cli.ts
756
756
  var cli_default = {
757
- name: "Buddy CLI",
758
- command: "buddy",
757
+ name: "My Custom CLI",
758
+ command: "custom-cli",
759
759
  description: "This is an example command to illustrate how to create your own commands. Check out `../app/commands` for more."
760
760
  };
761
761
 
@@ -798,6 +798,7 @@ var cloud_default = {
798
798
  }
799
799
  },
800
800
  api: {
801
+ deploy: true,
801
802
  prefix: env6.API_PREFIX || "api",
802
803
  description: "Stacks API",
803
804
  memorySize: 512,
@@ -1407,8 +1408,8 @@ var ui_default = {
1407
1408
  var overrides_default = {
1408
1409
  ai: ai_default,
1409
1410
  app: app_default,
1410
- binary: cli_default,
1411
1411
  cache: cache_default,
1412
+ cli: cli_default,
1412
1413
  cloud: cloud_default,
1413
1414
  database: database_default,
1414
1415
  dns: dns_default,
@@ -1621,9 +1622,9 @@ var {
1621
1622
  analytics,
1622
1623
  api,
1623
1624
  app: app2,
1624
- binary,
1625
1625
  cache: cache2,
1626
1626
  cloud: cloud2,
1627
+ cli: cli2,
1627
1628
  database: database2,
1628
1629
  dns: dns2,
1629
1630
  docs: docs2,
@@ -1690,8 +1691,8 @@ export {
1690
1691
  database2 as database,
1691
1692
  exports_config as config,
1692
1693
  cloud2 as cloud,
1694
+ cli2 as cli,
1693
1695
  cache2 as cache,
1694
- binary,
1695
1696
  app2 as app,
1696
1697
  api,
1697
1698
  analytics,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/config",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks config helper methods.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "exports": {
28
28
  ".": {
29
- "bun": "./src/index.ts",
29
+ "bun": "./dist/index.js",
30
30
  "import": "./dist/index.js"
31
31
  },
32
32
  "./*": {
@@ -12,9 +12,9 @@ export const {
12
12
  analytics,
13
13
  api,
14
14
  app,
15
- binary,
16
15
  cache,
17
16
  cloud,
17
+ cli,
18
18
  database,
19
19
  dns,
20
20
  docs,
@@ -59,9 +59,9 @@ export default {
59
59
  },
60
60
  },
61
61
 
62
- binary: {
63
- name: 'buddy',
64
- command: 'buddy',
62
+ cli: {
63
+ name: 'My Custom CLI',
64
+ command: 'my-custom-cli',
65
65
  description: 'Stacks is a full-stack framework for TypeScript.',
66
66
  source: p.appPath('commands'),
67
67
  },
@@ -1,32 +1,32 @@
1
1
  import type { StacksConfig } from '@stacksjs/types'
2
- import ai from '../../../../../config/ai'
3
- import app from '../../../../../config/app'
4
- import cache from '../../../../../config/cache'
5
- import binary from '../../../../../config/cli'
6
- import cloud from '../../../../../config/cloud'
7
- import database from '../../../../../config/database'
8
- import dns from '../../../../../config/dns'
9
- import docs from '../../../../../config/docs'
10
- import email from '../../../../../config/email'
11
- import git from '../../../../../config/git'
12
- import hashing from '../../../../../config/hashing'
13
- import library from '../../../../../config/library'
14
- import queue from '../../../../../config/queue'
15
- import payment from '../../../../../config/payment'
16
- import notification from '../../../../../config/notification'
17
- import storage from '../../../../../config/storage'
18
- import searchEngine from '../../../../../config/search-engine'
19
- import security from '../../../../../config/security'
20
- import services from '../../../../../config/services'
21
- import team from '../../../../../config/team'
22
- import ui from '../../../../../config/ui'
2
+ import ai from 'config/ai'
3
+ import app from 'config/app'
4
+ import cache from 'config/cache'
5
+ import cli from 'config/cli'
6
+ import cloud from 'config/cloud'
7
+ import database from 'config/database'
8
+ import dns from 'config/dns'
9
+ import docs from 'config/docs'
10
+ import email from 'config/email'
11
+ import git from 'config/git'
12
+ import hashing from 'config/hashing'
13
+ import library from 'config/library'
14
+ import queue from 'config/queue'
15
+ import payment from 'config/payment'
16
+ import notification from 'config/notification'
17
+ import storage from 'config/storage'
18
+ import searchEngine from 'config/search-engine'
19
+ import security from 'config/security'
20
+ import services from 'config/services'
21
+ import team from 'config/team'
22
+ import ui from 'config/ui'
23
23
 
24
24
  // this "user config" will override the default config options
25
25
  export default {
26
26
  ai,
27
27
  app,
28
- binary,
29
28
  cache,
29
+ cli,
30
30
  cloud,
31
31
  database,
32
32
  dns,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/database",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks database integration.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/datetime",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks datetime helpers.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/desktop",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks Desktop engine.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/development",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks development dependencies.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/dns",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "Easily manage your DNS.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -51,27 +51,27 @@
51
51
  "prepublishOnly": "bun --bun run build"
52
52
  },
53
53
  "peerDependencies": {
54
- "@aws-sdk/client-route-53": "^3.503.1",
55
- "@aws-sdk/client-route-53-domains": "^3.503.1",
54
+ "@aws-sdk/client-route-53": "^3.504.0",
55
+ "@aws-sdk/client-route-53-domains": "^3.504.0",
56
56
  "@stacksjs/actions": "workspace:*",
57
57
  "@stacksjs/error-handling": "workspace:*",
58
58
  "@stacksjs/path": "workspace:*",
59
59
  "@stacksjs/storage": "workspace:*",
60
60
  "@stacksjs/whois": "workspace:*",
61
- "aws-cdk-lib": "^2.124.0"
61
+ "aws-cdk-lib": "^2.126.0"
62
62
  },
63
63
  "dependencies": {
64
- "@aws-sdk/client-route-53": "^3.503.1",
64
+ "@aws-sdk/client-route-53": "^3.504.0",
65
65
  "@stacksjs/actions": "workspace:*",
66
66
  "@stacksjs/error-handling": "workspace:*",
67
67
  "@stacksjs/path": "workspace:*",
68
68
  "@stacksjs/storage": "workspace:*",
69
69
  "@stacksjs/strings": "workspace:*",
70
70
  "@stacksjs/whois": "workspace:*",
71
- "aws-cdk-lib": "^2.124.0"
71
+ "aws-cdk-lib": "^2.126.0"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@stacksjs/development": "workspace:*",
75
- "aws-cdk-lib": "^2.124.0"
75
+ "aws-cdk-lib": "^2.126.0"
76
76
  }
77
77
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/docs",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks way to document.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -52,7 +52,7 @@
52
52
  "@stacksjs/path": "workspace:*",
53
53
  "@stacksjs/server": "workspace:*",
54
54
  "@stacksjs/vite": "workspace:*",
55
- "vitepress": "1.0.0-rc.40"
55
+ "vitepress": "1.0.0-rc.41"
56
56
  },
57
57
  "dependencies": {
58
58
  "@stacksjs/alias": "workspace:*",
@@ -60,7 +60,7 @@
60
60
  "@stacksjs/path": "workspace:*",
61
61
  "@stacksjs/server": "workspace:*",
62
62
  "@stacksjs/vite": "workspace:*",
63
- "vitepress": "1.0.0-rc.40",
63
+ "vitepress": "1.0.0-rc.41",
64
64
  "vitepress-plugin-twoslash": "^0.10.2"
65
65
  },
66
66
  "devDependencies": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/email",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "The Stacks Email integration. Painlessly create & manage your inboxes, templates, and send emails.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -71,10 +71,10 @@
71
71
  "@stacksjs/error-handling": "workspace:*",
72
72
  "@stacksjs/types": "workspace:*",
73
73
  "@types/mailparser": "^3.4.4",
74
- "mailparser": "^3.6.6",
74
+ "mailparser": "^3.6.7",
75
75
  "mime": "^4.0.1",
76
76
  "moment": "^2.30.1",
77
- "nodemailer": "^6.9.8",
77
+ "nodemailer": "^6.9.9",
78
78
  "uuid": "^9.0.1"
79
79
  },
80
80
  "optionalDependencies": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/enums",
3
3
  "type": "module",
4
- "version": "0.58.49",
4
+ "version": "0.58.50",
5
5
  "description": "Stacks enums.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",