@sst-community/sst 4.20.0 → 5.0.0-alpha.1

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 (832) hide show
  1. package/README.md +92 -52
  2. package/package.json +35 -11
  3. package/platform/js/chunks/chunk-HIZZCEDS.js +328 -0
  4. package/platform/js/chunks/chunk-HIZZCEDS.js.map +6 -0
  5. package/platform/js/chunks/chunk-KOKHGKJ2.js +639 -0
  6. package/platform/js/chunks/chunk-KOKHGKJ2.js.map +6 -0
  7. package/platform/js/chunks/chunk-ONNI4XNK.js +367 -0
  8. package/platform/js/chunks/chunk-ONNI4XNK.js.map +6 -0
  9. package/platform/js/chunks/chunk-VIFHC73J.js +108 -0
  10. package/platform/js/chunks/chunk-VIFHC73J.js.map +6 -0
  11. package/platform/js/chunks/chunk-WJ6BVA46.js +10 -0
  12. package/platform/js/chunks/chunk-WJ6BVA46.js.map +6 -0
  13. package/platform/js/chunks/chunk-ZOXXXME5.js +472 -0
  14. package/platform/js/chunks/chunk-ZOXXXME5.js.map +6 -0
  15. package/platform/js/chunks/component-32FCLIRK.js +26 -0
  16. package/platform/js/chunks/component-32FCLIRK.js.map +6 -0
  17. package/platform/js/chunks/config-DMGMTLNB.js +10 -0
  18. package/platform/js/chunks/config-DMGMTLNB.js.map +6 -0
  19. package/platform/js/chunks/link-OJ3RNGQ3.js +9 -0
  20. package/platform/js/chunks/link-OJ3RNGQ3.js.map +6 -0
  21. package/platform/js/components/aws/index.js +35362 -0
  22. package/platform/js/components/aws/index.js.map +6 -0
  23. package/platform/js/components/cloudflare/index.js +3246 -0
  24. package/platform/js/components/cloudflare/index.js.map +6 -0
  25. package/platform/js/components/core.js +114 -0
  26. package/platform/js/components/core.js.map +6 -0
  27. package/platform/js/components/vercel/index.js +120 -0
  28. package/platform/js/components/vercel/index.js.map +6 -0
  29. package/platform/js/testing/index.js +569 -0
  30. package/platform/js/testing/index.js.map +6 -0
  31. package/platform/package.json +25 -0
  32. package/platform/src/ast/add.mjs +190 -0
  33. package/platform/src/auto/run.ts +109 -0
  34. package/platform/src/components/README.md +652 -0
  35. package/platform/src/components/args.ts +133 -0
  36. package/platform/src/components/aws/alb.ts +577 -0
  37. package/platform/src/components/aws/analog.ts +462 -0
  38. package/platform/src/components/aws/apigateway-websocket-route.ts +206 -0
  39. package/platform/src/components/aws/apigateway-websocket.ts +894 -0
  40. package/platform/src/components/aws/apigatewayv1-api-key.ts +90 -0
  41. package/platform/src/components/aws/apigatewayv1-authorizer.ts +178 -0
  42. package/platform/src/components/aws/apigatewayv1-base-route.ts +78 -0
  43. package/platform/src/components/aws/apigatewayv1-integration-route.ts +92 -0
  44. package/platform/src/components/aws/apigatewayv1-lambda-route.ts +152 -0
  45. package/platform/src/components/aws/apigatewayv1-usage-plan.ts +109 -0
  46. package/platform/src/components/aws/apigatewayv1.ts +1691 -0
  47. package/platform/src/components/aws/apigatewayv2-authorizer.ts +199 -0
  48. package/platform/src/components/aws/apigatewayv2-base-route.ts +69 -0
  49. package/platform/src/components/aws/apigatewayv2-lambda-route.ts +141 -0
  50. package/platform/src/components/aws/apigatewayv2-private-route.ts +101 -0
  51. package/platform/src/components/aws/apigatewayv2-url-route.ts +90 -0
  52. package/platform/src/components/aws/apigatewayv2.ts +1439 -0
  53. package/platform/src/components/aws/app-sync-data-source.ts +264 -0
  54. package/platform/src/components/aws/app-sync-function.ts +79 -0
  55. package/platform/src/components/aws/app-sync-resolver.ts +110 -0
  56. package/platform/src/components/aws/app-sync.ts +849 -0
  57. package/platform/src/components/aws/astro.ts +580 -0
  58. package/platform/src/components/aws/aurora.ts +1356 -0
  59. package/platform/src/components/aws/auth-v1.ts +69 -0
  60. package/platform/src/components/aws/auth.ts +417 -0
  61. package/platform/src/components/aws/bucket-lambda-subscriber.ts +162 -0
  62. package/platform/src/components/aws/bucket-notification.ts +254 -0
  63. package/platform/src/components/aws/bucket-queue-subscriber.ts +122 -0
  64. package/platform/src/components/aws/bucket-topic-subscriber.ts +144 -0
  65. package/platform/src/components/aws/bucket.ts +2046 -0
  66. package/platform/src/components/aws/bus-base-subscriber.ts +52 -0
  67. package/platform/src/components/aws/bus-lambda-subscriber.ts +125 -0
  68. package/platform/src/components/aws/bus-queue-subscriber.ts +88 -0
  69. package/platform/src/components/aws/bus.ts +630 -0
  70. package/platform/src/components/aws/cdn.ts +561 -0
  71. package/platform/src/components/aws/cluster-v1.ts +932 -0
  72. package/platform/src/components/aws/cluster.ts +584 -0
  73. package/platform/src/components/aws/cognito-identity-pool.ts +433 -0
  74. package/platform/src/components/aws/cognito-identity-provider.ts +96 -0
  75. package/platform/src/components/aws/cognito-user-pool-client.ts +114 -0
  76. package/platform/src/components/aws/cognito-user-pool.ts +1089 -0
  77. package/platform/src/components/aws/cron-v2.ts +555 -0
  78. package/platform/src/components/aws/cron.ts +435 -0
  79. package/platform/src/components/aws/dns-validated-certificate.ts +108 -0
  80. package/platform/src/components/aws/dns.ts +221 -0
  81. package/platform/src/components/aws/dsql.ts +741 -0
  82. package/platform/src/components/aws/dynamo-lambda-subscriber.ts +124 -0
  83. package/platform/src/components/aws/dynamo.ts +929 -0
  84. package/platform/src/components/aws/efs.ts +410 -0
  85. package/platform/src/components/aws/email.ts +673 -0
  86. package/platform/src/components/aws/fargate.ts +1279 -0
  87. package/platform/src/components/aws/function.ts +3227 -0
  88. package/platform/src/components/aws/helpers/apigateway-account.ts +78 -0
  89. package/platform/src/components/aws/helpers/apigatewayv2-domain.ts +144 -0
  90. package/platform/src/components/aws/helpers/arn.ts +182 -0
  91. package/platform/src/components/aws/helpers/bootstrap.ts +16 -0
  92. package/platform/src/components/aws/helpers/client.ts +76 -0
  93. package/platform/src/components/aws/helpers/container-builder.ts +33 -0
  94. package/platform/src/components/aws/helpers/custom-domain.ts +128 -0
  95. package/platform/src/components/aws/helpers/event-source.ts +41 -0
  96. package/platform/src/components/aws/helpers/fargate.ts +727 -0
  97. package/platform/src/components/aws/helpers/function-builder.ts +133 -0
  98. package/platform/src/components/aws/helpers/function-code.ts +224 -0
  99. package/platform/src/components/aws/helpers/function-part.ts +202 -0
  100. package/platform/src/components/aws/helpers/function-permission.ts +29 -0
  101. package/platform/src/components/aws/helpers/load-balancer-args.ts +88 -0
  102. package/platform/src/components/aws/helpers/load-balancer.ts +17 -0
  103. package/platform/src/components/aws/helpers/provider.ts +36 -0
  104. package/platform/src/components/aws/helpers/queue-policy.ts +33 -0
  105. package/platform/src/components/aws/helpers/rds.ts +212 -0
  106. package/platform/src/components/aws/helpers/site-builder.ts +41 -0
  107. package/platform/src/components/aws/helpers/subscriber.ts +23 -0
  108. package/platform/src/components/aws/helpers/vpc.ts +27 -0
  109. package/platform/src/components/aws/https-redirect.ts +216 -0
  110. package/platform/src/components/aws/iam-edit.ts +50 -0
  111. package/platform/src/components/aws/index.ts +61 -0
  112. package/platform/src/components/aws/kinesis-stream-lambda-subscriber.ts +122 -0
  113. package/platform/src/components/aws/kinesis-stream.ts +416 -0
  114. package/platform/src/components/aws/linkable.ts +32 -0
  115. package/platform/src/components/aws/logging.ts +25 -0
  116. package/platform/src/components/aws/microvm.ts +988 -0
  117. package/platform/src/components/aws/mysql.ts +1047 -0
  118. package/platform/src/components/aws/nextjs.ts +1052 -0
  119. package/platform/src/components/aws/nuxt.ts +527 -0
  120. package/platform/src/components/aws/open-search.ts +603 -0
  121. package/platform/src/components/aws/opencontrol.ts +235 -0
  122. package/platform/src/components/aws/permission.ts +80 -0
  123. package/platform/src/components/aws/postgres-v1.ts +537 -0
  124. package/platform/src/components/aws/postgres.ts +1074 -0
  125. package/platform/src/components/aws/providers/bucket-files.ts +32 -0
  126. package/platform/src/components/aws/providers/distribution-deployment-waiter.ts +27 -0
  127. package/platform/src/components/aws/providers/distribution-invalidation.ts +24 -0
  128. package/platform/src/components/aws/providers/function-environment-update.ts +46 -0
  129. package/platform/src/components/aws/providers/hosted-zone-lookup.ts +25 -0
  130. package/platform/src/components/aws/providers/kv-keys.ts +15 -0
  131. package/platform/src/components/aws/providers/kv-routes-update.ts +24 -0
  132. package/platform/src/components/aws/providers/microvm-image-prune.ts +48 -0
  133. package/platform/src/components/aws/providers/origin-access-control.ts +21 -0
  134. package/platform/src/components/aws/providers/rds-role-lookup.ts +21 -0
  135. package/platform/src/components/aws/providers/vector-table.ts +25 -0
  136. package/platform/src/components/aws/queue-lambda-subscriber.ts +135 -0
  137. package/platform/src/components/aws/queue.ts +712 -0
  138. package/platform/src/components/aws/react.ts +510 -0
  139. package/platform/src/components/aws/realtime-lambda-subscriber.ts +129 -0
  140. package/platform/src/components/aws/realtime.ts +345 -0
  141. package/platform/src/components/aws/redis-v1.ts +595 -0
  142. package/platform/src/components/aws/redis.ts +1078 -0
  143. package/platform/src/components/aws/remix.ts +576 -0
  144. package/platform/src/components/aws/router-base-route.ts +83 -0
  145. package/platform/src/components/aws/router-bucket-route.ts +63 -0
  146. package/platform/src/components/aws/router-url-route.ts +75 -0
  147. package/platform/src/components/aws/router.ts +3281 -0
  148. package/platform/src/components/aws/service-v1.ts +876 -0
  149. package/platform/src/components/aws/service.ts +2994 -0
  150. package/platform/src/components/aws/sns-topic-lambda-subscriber.ts +127 -0
  151. package/platform/src/components/aws/sns-topic-queue-subscriber.ts +105 -0
  152. package/platform/src/components/aws/sns-topic.ts +700 -0
  153. package/platform/src/components/aws/solid-start.ts +467 -0
  154. package/platform/src/components/aws/ssr-site.ts +2204 -0
  155. package/platform/src/components/aws/static-site.ts +1389 -0
  156. package/platform/src/components/aws/step-functions/choice.ts +123 -0
  157. package/platform/src/components/aws/step-functions/fail.ts +69 -0
  158. package/platform/src/components/aws/step-functions/map.ts +264 -0
  159. package/platform/src/components/aws/step-functions/parallel.ts +170 -0
  160. package/platform/src/components/aws/step-functions/pass.ts +48 -0
  161. package/platform/src/components/aws/step-functions/state.ts +376 -0
  162. package/platform/src/components/aws/step-functions/succeed.ts +31 -0
  163. package/platform/src/components/aws/step-functions/task.ts +538 -0
  164. package/platform/src/components/aws/step-functions/wait.ts +105 -0
  165. package/platform/src/components/aws/step-functions.ts +804 -0
  166. package/platform/src/components/aws/svelte-kit.ts +563 -0
  167. package/platform/src/components/aws/takeover/alb.ts +9 -0
  168. package/platform/src/components/aws/takeover/apigatewayv2.ts +43 -0
  169. package/platform/src/components/aws/takeover/app-sync.ts +45 -0
  170. package/platform/src/components/aws/takeover/aurora.ts +19 -0
  171. package/platform/src/components/aws/takeover/bucket.ts +94 -0
  172. package/platform/src/components/aws/takeover/bus.ts +43 -0
  173. package/platform/src/components/aws/takeover/cognito-user-pool.ts +21 -0
  174. package/platform/src/components/aws/takeover/cron-v2.ts +9 -0
  175. package/platform/src/components/aws/takeover/dsql.ts +12 -0
  176. package/platform/src/components/aws/takeover/dynamo.ts +31 -0
  177. package/platform/src/components/aws/takeover/efs.ts +9 -0
  178. package/platform/src/components/aws/takeover/function.ts +21 -0
  179. package/platform/src/components/aws/takeover/helpers.ts +26 -0
  180. package/platform/src/components/aws/takeover/index.ts +27 -0
  181. package/platform/src/components/aws/takeover/mysql.ts +17 -0
  182. package/platform/src/components/aws/takeover/postgres.ts +17 -0
  183. package/platform/src/components/aws/takeover/queue.ts +21 -0
  184. package/platform/src/components/aws/takeover/redis.ts +10 -0
  185. package/platform/src/components/aws/takeover/service.ts +22 -0
  186. package/platform/src/components/aws/takeover/sns-topic.ts +27 -0
  187. package/platform/src/components/aws/takeover/task.ts +13 -0
  188. package/platform/src/components/aws/tan-stack-start.ts +479 -0
  189. package/platform/src/components/aws/task.ts +571 -0
  190. package/platform/src/components/aws/v5/alb.ts +310 -0
  191. package/platform/src/components/aws/v5/apigatewayv2.ts +845 -0
  192. package/platform/src/components/aws/v5/app-sync.ts +673 -0
  193. package/platform/src/components/aws/v5/aurora.ts +855 -0
  194. package/platform/src/components/aws/v5/bucket.ts +1001 -0
  195. package/platform/src/components/aws/v5/bus.ts +321 -0
  196. package/platform/src/components/aws/v5/cluster.ts +230 -0
  197. package/platform/src/components/aws/v5/cognito-user-pool-client.ts +100 -0
  198. package/platform/src/components/aws/v5/cognito-user-pool.ts +693 -0
  199. package/platform/src/components/aws/v5/cron-v2.ts +316 -0
  200. package/platform/src/components/aws/v5/dsql.ts +665 -0
  201. package/platform/src/components/aws/v5/dynamo.ts +477 -0
  202. package/platform/src/components/aws/v5/efs.ts +311 -0
  203. package/platform/src/components/aws/v5/function.ts +1527 -0
  204. package/platform/src/components/aws/v5/index.ts +26 -0
  205. package/platform/src/components/aws/v5/mysql.ts +604 -0
  206. package/platform/src/components/aws/v5/postgres.ts +612 -0
  207. package/platform/src/components/aws/v5/queue.ts +271 -0
  208. package/platform/src/components/aws/v5/redis.ts +550 -0
  209. package/platform/src/components/aws/v5/service.ts +2209 -0
  210. package/platform/src/components/aws/v5/sns-topic.ts +284 -0
  211. package/platform/src/components/aws/v5/task.ts +549 -0
  212. package/platform/src/components/aws/vector.ts +316 -0
  213. package/platform/src/components/aws/vpc-v1.ts +580 -0
  214. package/platform/src/components/aws/vpc.ts +1641 -0
  215. package/platform/src/components/aws/workflow.ts +421 -0
  216. package/platform/src/components/base/base-site.ts +101 -0
  217. package/platform/src/components/base/base-ssr-site.ts +120 -0
  218. package/platform/src/components/base/base-static-site.ts +314 -0
  219. package/platform/src/components/cloudflare/account-id.ts +1 -0
  220. package/platform/src/components/cloudflare/ai.ts +77 -0
  221. package/platform/src/components/cloudflare/astro.ts +355 -0
  222. package/platform/src/components/cloudflare/auth.ts +69 -0
  223. package/platform/src/components/cloudflare/binding.ts +132 -0
  224. package/platform/src/components/cloudflare/bucket.ts +142 -0
  225. package/platform/src/components/cloudflare/cron.ts +207 -0
  226. package/platform/src/components/cloudflare/d1.ts +230 -0
  227. package/platform/src/components/cloudflare/dns.ts +253 -0
  228. package/platform/src/components/cloudflare/durable-object.ts +144 -0
  229. package/platform/src/components/cloudflare/experimental/index.ts +3 -0
  230. package/platform/src/components/cloudflare/experimental/solid-start.ts +288 -0
  231. package/platform/src/components/cloudflare/experimental/static-site.ts +4 -0
  232. package/platform/src/components/cloudflare/helpers/compatibility.ts +44 -0
  233. package/platform/src/components/cloudflare/helpers/fetch.ts +81 -0
  234. package/platform/src/components/cloudflare/helpers/validation.ts +74 -0
  235. package/platform/src/components/cloudflare/helpers/worker-builder.ts +57 -0
  236. package/platform/src/components/cloudflare/helpers/wrangler.ts +222 -0
  237. package/platform/src/components/cloudflare/hyperdrive.ts +402 -0
  238. package/platform/src/components/cloudflare/index.ts +25 -0
  239. package/platform/src/components/cloudflare/kv.ts +218 -0
  240. package/platform/src/components/cloudflare/providers/dns-record.ts +43 -0
  241. package/platform/src/components/cloudflare/providers/kv-data.ts +107 -0
  242. package/platform/src/components/cloudflare/providers/worker-assets.ts +41 -0
  243. package/platform/src/components/cloudflare/providers/worker-placement.ts +93 -0
  244. package/platform/src/components/cloudflare/providers/worker-script.ts +47 -0
  245. package/platform/src/components/cloudflare/providers/worker-url.ts +109 -0
  246. package/platform/src/components/cloudflare/providers/zone-lookup.ts +85 -0
  247. package/platform/src/components/cloudflare/queue-worker-subscriber.ts +192 -0
  248. package/platform/src/components/cloudflare/queue.ts +310 -0
  249. package/platform/src/components/cloudflare/rate-limit.ts +178 -0
  250. package/platform/src/components/cloudflare/react-router.ts +322 -0
  251. package/platform/src/components/cloudflare/ssr-site.ts +293 -0
  252. package/platform/src/components/cloudflare/static-site-v2.ts +428 -0
  253. package/platform/src/components/cloudflare/static-site.ts +470 -0
  254. package/platform/src/components/cloudflare/tan-stack-start.ts +408 -0
  255. package/platform/src/components/cloudflare/worker.ts +1080 -0
  256. package/platform/src/components/cloudflare/workflow.ts +319 -0
  257. package/platform/src/components/component.ts +242 -0
  258. package/platform/src/components/core.ts +43 -0
  259. package/platform/src/components/cpu.ts +10 -0
  260. package/platform/src/components/dns.ts +82 -0
  261. package/platform/src/components/duration.ts +67 -0
  262. package/platform/src/components/error.ts +5 -0
  263. package/platform/src/components/esbuild.ts +15 -0
  264. package/platform/src/components/experimental/dev-command.ts +127 -0
  265. package/platform/src/components/experimental/index.ts +1 -0
  266. package/platform/src/components/groups.ts +9 -0
  267. package/platform/src/components/index.ts +9 -0
  268. package/platform/src/components/input.ts +2 -0
  269. package/platform/src/components/link.ts +201 -0
  270. package/platform/src/components/linkable.ts +360 -0
  271. package/platform/src/components/naming-rules.ts +299 -0
  272. package/platform/src/components/naming.ts +189 -0
  273. package/platform/src/components/parts-component.ts +662 -0
  274. package/platform/src/components/parts.ts +299 -0
  275. package/platform/src/components/path.ts +5 -0
  276. package/platform/src/components/rpc/rpc.ts +110 -0
  277. package/platform/src/components/secret.ts +159 -0
  278. package/platform/src/components/size.ts +28 -0
  279. package/platform/src/components/takeover.ts +131 -0
  280. package/platform/src/components/transform.ts +107 -0
  281. package/platform/src/components/vercel/account-id.ts +1 -0
  282. package/platform/src/components/vercel/dns.ts +171 -0
  283. package/platform/src/components/vercel/index.ts +2 -0
  284. package/platform/src/components/vercel/providers/dns-record.ts +34 -0
  285. package/platform/src/config.ts +1460 -0
  286. package/platform/src/global-aliases.d.ts +37 -0
  287. package/platform/src/global.d.ts +374 -0
  288. package/platform/src/internal.d.ts +18 -0
  289. package/platform/src/runtime/worker/unenv.d.ts +14 -0
  290. package/platform/src/runtime/worker/unenv.mjs +26 -0
  291. package/platform/src/shim/run.js +25 -0
  292. package/platform/src/testing/global.ts +83 -0
  293. package/platform/src/testing/index.ts +103 -0
  294. package/platform/src/testing/mock.ts +646 -0
  295. package/platform/src/testing/vitest.ts +36 -0
  296. package/platform/src/util/compare-semver.ts +23 -0
  297. package/platform/src/util/fs.ts +49 -0
  298. package/platform/src/util/lazy.ts +12 -0
  299. package/platform/src/util/minify.ts +10 -0
  300. package/platform/src/util/package.ts +29 -0
  301. package/platform/src/util/semaphore.ts +29 -0
  302. package/platform/src/util/warn.ts +7 -0
  303. package/platform/types/auto/run.d.ts +9 -0
  304. package/platform/types/auto/run.d.ts.map +1 -0
  305. package/platform/types/components/args.d.ts +77 -0
  306. package/platform/types/components/args.d.ts.map +1 -0
  307. package/platform/types/components/aws/alb.d.ts +283 -0
  308. package/platform/types/components/aws/alb.d.ts.map +1 -0
  309. package/platform/types/components/aws/analog.d.ts +408 -0
  310. package/platform/types/components/aws/analog.d.ts.map +1 -0
  311. package/platform/types/components/aws/apigateway-websocket-route.d.ts +74 -0
  312. package/platform/types/components/aws/apigateway-websocket-route.d.ts.map +1 -0
  313. package/platform/types/components/aws/apigateway-websocket.d.ts +560 -0
  314. package/platform/types/components/aws/apigateway-websocket.d.ts.map +1 -0
  315. package/platform/types/components/aws/apigatewayv1-api-key.d.ts +48 -0
  316. package/platform/types/components/aws/apigatewayv1-api-key.d.ts.map +1 -0
  317. package/platform/types/components/aws/apigatewayv1-authorizer.d.ts +55 -0
  318. package/platform/types/components/aws/apigatewayv1-authorizer.d.ts.map +1 -0
  319. package/platform/types/components/aws/apigatewayv1-base-route.d.ts +36 -0
  320. package/platform/types/components/aws/apigatewayv1-base-route.d.ts.map +1 -0
  321. package/platform/types/components/aws/apigatewayv1-integration-route.d.ts +39 -0
  322. package/platform/types/components/aws/apigatewayv1-integration-route.d.ts.map +1 -0
  323. package/platform/types/components/aws/apigatewayv1-lambda-route.d.ts +53 -0
  324. package/platform/types/components/aws/apigatewayv1-lambda-route.d.ts.map +1 -0
  325. package/platform/types/components/aws/apigatewayv1-usage-plan.d.ts +53 -0
  326. package/platform/types/components/aws/apigatewayv1-usage-plan.d.ts.map +1 -0
  327. package/platform/types/components/aws/apigatewayv1.d.ts +1028 -0
  328. package/platform/types/components/aws/apigatewayv1.d.ts.map +1 -0
  329. package/platform/types/components/aws/apigatewayv2-authorizer.d.ts +54 -0
  330. package/platform/types/components/aws/apigatewayv2-authorizer.d.ts.map +1 -0
  331. package/platform/types/components/aws/apigatewayv2-base-route.d.ts +28 -0
  332. package/platform/types/components/aws/apigatewayv2-base-route.d.ts.map +1 -0
  333. package/platform/types/components/aws/apigatewayv2-lambda-route.d.ts +59 -0
  334. package/platform/types/components/aws/apigatewayv2-lambda-route.d.ts.map +1 -0
  335. package/platform/types/components/aws/apigatewayv2-private-route.d.ts +54 -0
  336. package/platform/types/components/aws/apigatewayv2-private-route.d.ts.map +1 -0
  337. package/platform/types/components/aws/apigatewayv2-url-route.d.ts +44 -0
  338. package/platform/types/components/aws/apigatewayv2-url-route.d.ts.map +1 -0
  339. package/platform/types/components/aws/apigatewayv2.d.ts +955 -0
  340. package/platform/types/components/aws/apigatewayv2.d.ts.map +1 -0
  341. package/platform/types/components/aws/app-sync-data-source.d.ts +52 -0
  342. package/platform/types/components/aws/app-sync-data-source.d.ts.map +1 -0
  343. package/platform/types/components/aws/app-sync-function.d.ts +33 -0
  344. package/platform/types/components/aws/app-sync-function.d.ts.map +1 -0
  345. package/platform/types/components/aws/app-sync-resolver.d.ts +41 -0
  346. package/platform/types/components/aws/app-sync-resolver.d.ts.map +1 -0
  347. package/platform/types/components/aws/app-sync.d.ts +638 -0
  348. package/platform/types/components/aws/app-sync.d.ts.map +1 -0
  349. package/platform/types/components/aws/astro.d.ts +409 -0
  350. package/platform/types/components/aws/astro.d.ts.map +1 -0
  351. package/platform/types/components/aws/aurora.d.ts +720 -0
  352. package/platform/types/components/aws/aurora.d.ts.map +1 -0
  353. package/platform/types/components/aws/auth-v1.d.ts +26 -0
  354. package/platform/types/components/aws/auth-v1.d.ts.map +1 -0
  355. package/platform/types/components/aws/auth.d.ts +295 -0
  356. package/platform/types/components/aws/auth.d.ts.map +1 -0
  357. package/platform/types/components/aws/bucket-lambda-subscriber.d.ts +61 -0
  358. package/platform/types/components/aws/bucket-lambda-subscriber.d.ts.map +1 -0
  359. package/platform/types/components/aws/bucket-notification.d.ts +47 -0
  360. package/platform/types/components/aws/bucket-notification.d.ts.map +1 -0
  361. package/platform/types/components/aws/bucket-queue-subscriber.d.ts +55 -0
  362. package/platform/types/components/aws/bucket-queue-subscriber.d.ts.map +1 -0
  363. package/platform/types/components/aws/bucket-topic-subscriber.d.ts +55 -0
  364. package/platform/types/components/aws/bucket-topic-subscriber.d.ts.map +1 -0
  365. package/platform/types/components/aws/bucket.d.ts +1356 -0
  366. package/platform/types/components/aws/bucket.d.ts.map +1 -0
  367. package/platform/types/components/aws/bus-base-subscriber.d.ts +20 -0
  368. package/platform/types/components/aws/bus-base-subscriber.d.ts.map +1 -0
  369. package/platform/types/components/aws/bus-lambda-subscriber.d.ts +50 -0
  370. package/platform/types/components/aws/bus-lambda-subscriber.d.ts.map +1 -0
  371. package/platform/types/components/aws/bus-queue-subscriber.d.ts +44 -0
  372. package/platform/types/components/aws/bus-queue-subscriber.d.ts.map +1 -0
  373. package/platform/types/components/aws/bus.d.ts +447 -0
  374. package/platform/types/components/aws/bus.d.ts.map +1 -0
  375. package/platform/types/components/aws/cdn.d.ts +310 -0
  376. package/platform/types/components/aws/cdn.d.ts.map +1 -0
  377. package/platform/types/components/aws/cluster-v1.d.ts +885 -0
  378. package/platform/types/components/aws/cluster-v1.d.ts.map +1 -0
  379. package/platform/types/components/aws/cluster.d.ts +364 -0
  380. package/platform/types/components/aws/cluster.d.ts.map +1 -0
  381. package/platform/types/components/aws/cognito-identity-pool.d.ts +199 -0
  382. package/platform/types/components/aws/cognito-identity-pool.d.ts.map +1 -0
  383. package/platform/types/components/aws/cognito-identity-provider.d.ts +38 -0
  384. package/platform/types/components/aws/cognito-identity-provider.d.ts.map +1 -0
  385. package/platform/types/components/aws/cognito-user-pool-client.d.ts +50 -0
  386. package/platform/types/components/aws/cognito-user-pool-client.d.ts.map +1 -0
  387. package/platform/types/components/aws/cognito-user-pool.d.ts +703 -0
  388. package/platform/types/components/aws/cognito-user-pool.d.ts.map +1 -0
  389. package/platform/types/components/aws/cron-v2.d.ts +325 -0
  390. package/platform/types/components/aws/cron-v2.d.ts.map +1 -0
  391. package/platform/types/components/aws/cron.d.ts +259 -0
  392. package/platform/types/components/aws/cron.d.ts.map +1 -0
  393. package/platform/types/components/aws/dns-validated-certificate.d.ts +27 -0
  394. package/platform/types/components/aws/dns-validated-certificate.d.ts.map +1 -0
  395. package/platform/types/components/aws/dns.d.ts +94 -0
  396. package/platform/types/components/aws/dns.d.ts.map +1 -0
  397. package/platform/types/components/aws/dsql.d.ts +369 -0
  398. package/platform/types/components/aws/dsql.d.ts.map +1 -0
  399. package/platform/types/components/aws/dynamo-lambda-subscriber.d.ts +55 -0
  400. package/platform/types/components/aws/dynamo-lambda-subscriber.d.ts.map +1 -0
  401. package/platform/types/components/aws/dynamo.d.ts +628 -0
  402. package/platform/types/components/aws/dynamo.d.ts.map +1 -0
  403. package/platform/types/components/aws/efs.d.ts +217 -0
  404. package/platform/types/components/aws/efs.d.ts.map +1 -0
  405. package/platform/types/components/aws/email.d.ts +370 -0
  406. package/platform/types/components/aws/email.d.ts.map +1 -0
  407. package/platform/types/components/aws/fargate.d.ts +894 -0
  408. package/platform/types/components/aws/fargate.d.ts.map +1 -0
  409. package/platform/types/components/aws/function.d.ts +1755 -0
  410. package/platform/types/components/aws/function.d.ts.map +1 -0
  411. package/platform/types/components/aws/helpers/apigateway-account.d.ts +3 -0
  412. package/platform/types/components/aws/helpers/apigateway-account.d.ts.map +1 -0
  413. package/platform/types/components/aws/helpers/apigatewayv2-domain.d.ts +144 -0
  414. package/platform/types/components/aws/helpers/apigatewayv2-domain.d.ts.map +1 -0
  415. package/platform/types/components/aws/helpers/arn.d.ts +51 -0
  416. package/platform/types/components/aws/helpers/arn.d.ts.map +1 -0
  417. package/platform/types/components/aws/helpers/bootstrap.d.ts +13 -0
  418. package/platform/types/components/aws/helpers/bootstrap.d.ts.map +1 -0
  419. package/platform/types/components/aws/helpers/client.d.ts +7 -0
  420. package/platform/types/components/aws/helpers/client.d.ts.map +1 -0
  421. package/platform/types/components/aws/helpers/container-builder.d.ts +4 -0
  422. package/platform/types/components/aws/helpers/container-builder.d.ts.map +1 -0
  423. package/platform/types/components/aws/helpers/custom-domain.d.ts +111 -0
  424. package/platform/types/components/aws/helpers/custom-domain.d.ts.map +1 -0
  425. package/platform/types/components/aws/helpers/event-source.d.ts +26 -0
  426. package/platform/types/components/aws/helpers/event-source.d.ts.map +1 -0
  427. package/platform/types/components/aws/helpers/fargate.d.ts +225 -0
  428. package/platform/types/components/aws/helpers/fargate.d.ts.map +1 -0
  429. package/platform/types/components/aws/helpers/function-builder.d.ts +14 -0
  430. package/platform/types/components/aws/helpers/function-builder.d.ts.map +1 -0
  431. package/platform/types/components/aws/helpers/function-code.d.ts +80 -0
  432. package/platform/types/components/aws/helpers/function-code.d.ts.map +1 -0
  433. package/platform/types/components/aws/helpers/function-part.d.ts +61 -0
  434. package/platform/types/components/aws/helpers/function-part.d.ts.map +1 -0
  435. package/platform/types/components/aws/helpers/function-permission.d.ts +17 -0
  436. package/platform/types/components/aws/helpers/function-permission.d.ts.map +1 -0
  437. package/platform/types/components/aws/helpers/load-balancer-args.d.ts +40 -0
  438. package/platform/types/components/aws/helpers/load-balancer-args.d.ts.map +1 -0
  439. package/platform/types/components/aws/helpers/load-balancer.d.ts +9 -0
  440. package/platform/types/components/aws/helpers/load-balancer.d.ts.map +1 -0
  441. package/platform/types/components/aws/helpers/provider.d.ts +3 -0
  442. package/platform/types/components/aws/helpers/provider.d.ts.map +1 -0
  443. package/platform/types/components/aws/helpers/queue-policy.d.ts +11 -0
  444. package/platform/types/components/aws/helpers/queue-policy.d.ts.map +1 -0
  445. package/platform/types/components/aws/helpers/rds.d.ts +98 -0
  446. package/platform/types/components/aws/helpers/rds.d.ts.map +1 -0
  447. package/platform/types/components/aws/helpers/site-builder.d.ts +4 -0
  448. package/platform/types/components/aws/helpers/site-builder.d.ts.map +1 -0
  449. package/platform/types/components/aws/helpers/subscriber.d.ts +6 -0
  450. package/platform/types/components/aws/helpers/subscriber.d.ts.map +1 -0
  451. package/platform/types/components/aws/helpers/vpc.d.ts +14 -0
  452. package/platform/types/components/aws/helpers/vpc.d.ts.map +1 -0
  453. package/platform/types/components/aws/https-redirect.d.ts +38 -0
  454. package/platform/types/components/aws/https-redirect.d.ts.map +1 -0
  455. package/platform/types/components/aws/iam-edit.d.ts +39 -0
  456. package/platform/types/components/aws/iam-edit.d.ts.map +1 -0
  457. package/platform/types/components/aws/index.d.ts +56 -0
  458. package/platform/types/components/aws/index.d.ts.map +1 -0
  459. package/platform/types/components/aws/kinesis-stream-lambda-subscriber.d.ts +49 -0
  460. package/platform/types/components/aws/kinesis-stream-lambda-subscriber.d.ts.map +1 -0
  461. package/platform/types/components/aws/kinesis-stream.d.ts +254 -0
  462. package/platform/types/components/aws/kinesis-stream.d.ts.map +1 -0
  463. package/platform/types/components/aws/linkable.d.ts +17 -0
  464. package/platform/types/components/aws/linkable.d.ts.map +1 -0
  465. package/platform/types/components/aws/logging.d.ts +26 -0
  466. package/platform/types/components/aws/logging.d.ts.map +1 -0
  467. package/platform/types/components/aws/microvm.d.ts +439 -0
  468. package/platform/types/components/aws/microvm.d.ts.map +1 -0
  469. package/platform/types/components/aws/mysql.d.ts +525 -0
  470. package/platform/types/components/aws/mysql.d.ts.map +1 -0
  471. package/platform/types/components/aws/nextjs.d.ts +534 -0
  472. package/platform/types/components/aws/nextjs.d.ts.map +1 -0
  473. package/platform/types/components/aws/nuxt.d.ts +480 -0
  474. package/platform/types/components/aws/nuxt.d.ts.map +1 -0
  475. package/platform/types/components/aws/open-search.d.ts +306 -0
  476. package/platform/types/components/aws/open-search.d.ts.map +1 -0
  477. package/platform/types/components/aws/opencontrol.d.ts +169 -0
  478. package/platform/types/components/aws/opencontrol.d.ts.map +1 -0
  479. package/platform/types/components/aws/permission.d.ts +80 -0
  480. package/platform/types/components/aws/permission.d.ts.map +1 -0
  481. package/platform/types/components/aws/postgres-v1.d.ts +328 -0
  482. package/platform/types/components/aws/postgres-v1.d.ts.map +1 -0
  483. package/platform/types/components/aws/postgres.d.ts +529 -0
  484. package/platform/types/components/aws/postgres.d.ts.map +1 -0
  485. package/platform/types/components/aws/providers/bucket-files.d.ts +18 -0
  486. package/platform/types/components/aws/providers/bucket-files.d.ts.map +1 -0
  487. package/platform/types/components/aws/providers/distribution-deployment-waiter.d.ts +13 -0
  488. package/platform/types/components/aws/providers/distribution-deployment-waiter.d.ts.map +1 -0
  489. package/platform/types/components/aws/providers/distribution-invalidation.d.ts +11 -0
  490. package/platform/types/components/aws/providers/distribution-invalidation.d.ts.map +1 -0
  491. package/platform/types/components/aws/providers/function-environment-update.d.ts +33 -0
  492. package/platform/types/components/aws/providers/function-environment-update.d.ts.map +1 -0
  493. package/platform/types/components/aws/providers/hosted-zone-lookup.d.ts +11 -0
  494. package/platform/types/components/aws/providers/hosted-zone-lookup.d.ts.map +1 -0
  495. package/platform/types/components/aws/providers/kv-keys.d.ts +11 -0
  496. package/platform/types/components/aws/providers/kv-keys.d.ts.map +1 -0
  497. package/platform/types/components/aws/providers/kv-routes-update.d.ts +11 -0
  498. package/platform/types/components/aws/providers/kv-routes-update.d.ts.map +1 -0
  499. package/platform/types/components/aws/providers/microvm-image-prune.d.ts +35 -0
  500. package/platform/types/components/aws/providers/microvm-image-prune.d.ts.map +1 -0
  501. package/platform/types/components/aws/providers/origin-access-control.d.ts +8 -0
  502. package/platform/types/components/aws/providers/origin-access-control.d.ts.map +1 -0
  503. package/platform/types/components/aws/providers/rds-role-lookup.d.ts +8 -0
  504. package/platform/types/components/aws/providers/rds-role-lookup.d.ts.map +1 -0
  505. package/platform/types/components/aws/providers/vector-table.d.ts +12 -0
  506. package/platform/types/components/aws/providers/vector-table.d.ts.map +1 -0
  507. package/platform/types/components/aws/queue-lambda-subscriber.d.ts +53 -0
  508. package/platform/types/components/aws/queue-lambda-subscriber.d.ts.map +1 -0
  509. package/platform/types/components/aws/queue.d.ts +494 -0
  510. package/platform/types/components/aws/queue.d.ts.map +1 -0
  511. package/platform/types/components/aws/react.d.ts +407 -0
  512. package/platform/types/components/aws/react.d.ts.map +1 -0
  513. package/platform/types/components/aws/realtime-lambda-subscriber.d.ts +53 -0
  514. package/platform/types/components/aws/realtime-lambda-subscriber.d.ts.map +1 -0
  515. package/platform/types/components/aws/realtime.d.ts +237 -0
  516. package/platform/types/components/aws/realtime.d.ts.map +1 -0
  517. package/platform/types/components/aws/redis-v1.d.ts +348 -0
  518. package/platform/types/components/aws/redis-v1.d.ts.map +1 -0
  519. package/platform/types/components/aws/redis.d.ts +545 -0
  520. package/platform/types/components/aws/redis.d.ts.map +1 -0
  521. package/platform/types/components/aws/remix.d.ts +408 -0
  522. package/platform/types/components/aws/remix.d.ts.map +1 -0
  523. package/platform/types/components/aws/router-base-route.d.ts +28 -0
  524. package/platform/types/components/aws/router-base-route.d.ts.map +1 -0
  525. package/platform/types/components/aws/router-bucket-route.d.ts +29 -0
  526. package/platform/types/components/aws/router-bucket-route.d.ts.map +1 -0
  527. package/platform/types/components/aws/router-url-route.d.ts +28 -0
  528. package/platform/types/components/aws/router-url-route.d.ts.map +1 -0
  529. package/platform/types/components/aws/router.d.ts +1754 -0
  530. package/platform/types/components/aws/router.d.ts.map +1 -0
  531. package/platform/types/components/aws/service-v1.d.ts +78 -0
  532. package/platform/types/components/aws/service-v1.d.ts.map +1 -0
  533. package/platform/types/components/aws/service.d.ts +1756 -0
  534. package/platform/types/components/aws/service.d.ts.map +1 -0
  535. package/platform/types/components/aws/sns-topic-lambda-subscriber.d.ts +53 -0
  536. package/platform/types/components/aws/sns-topic-lambda-subscriber.d.ts.map +1 -0
  537. package/platform/types/components/aws/sns-topic-queue-subscriber.d.ts +55 -0
  538. package/platform/types/components/aws/sns-topic-queue-subscriber.d.ts.map +1 -0
  539. package/platform/types/components/aws/sns-topic.d.ts +394 -0
  540. package/platform/types/components/aws/sns-topic.d.ts.map +1 -0
  541. package/platform/types/components/aws/solid-start.d.ts +399 -0
  542. package/platform/types/components/aws/solid-start.d.ts.map +1 -0
  543. package/platform/types/components/aws/ssr-site.d.ts +895 -0
  544. package/platform/types/components/aws/ssr-site.d.ts.map +1 -0
  545. package/platform/types/components/aws/static-site.d.ts +744 -0
  546. package/platform/types/components/aws/static-site.d.ts.map +1 -0
  547. package/platform/types/components/aws/step-functions/choice.d.ts +73 -0
  548. package/platform/types/components/aws/step-functions/choice.d.ts.map +1 -0
  549. package/platform/types/components/aws/step-functions/fail.d.ts +63 -0
  550. package/platform/types/components/aws/step-functions/fail.d.ts.map +1 -0
  551. package/platform/types/components/aws/step-functions/map.d.ts +236 -0
  552. package/platform/types/components/aws/step-functions/map.d.ts.map +1 -0
  553. package/platform/types/components/aws/step-functions/parallel.d.ts +127 -0
  554. package/platform/types/components/aws/step-functions/parallel.d.ts.map +1 -0
  555. package/platform/types/components/aws/step-functions/pass.d.ts +39 -0
  556. package/platform/types/components/aws/step-functions/pass.d.ts.map +1 -0
  557. package/platform/types/components/aws/step-functions/state.d.ts +231 -0
  558. package/platform/types/components/aws/step-functions/state.d.ts.map +1 -0
  559. package/platform/types/components/aws/step-functions/succeed.d.ts +26 -0
  560. package/platform/types/components/aws/step-functions/succeed.d.ts.map +1 -0
  561. package/platform/types/components/aws/step-functions/task.d.ts +485 -0
  562. package/platform/types/components/aws/step-functions/task.d.ts.map +1 -0
  563. package/platform/types/components/aws/step-functions/wait.d.ts +91 -0
  564. package/platform/types/components/aws/step-functions/wait.d.ts.map +1 -0
  565. package/platform/types/components/aws/step-functions.d.ts +478 -0
  566. package/platform/types/components/aws/step-functions.d.ts.map +1 -0
  567. package/platform/types/components/aws/svelte-kit.d.ts +456 -0
  568. package/platform/types/components/aws/svelte-kit.d.ts.map +1 -0
  569. package/platform/types/components/aws/takeover/alb.d.ts +2 -0
  570. package/platform/types/components/aws/takeover/alb.d.ts.map +1 -0
  571. package/platform/types/components/aws/takeover/apigatewayv2.d.ts +2 -0
  572. package/platform/types/components/aws/takeover/apigatewayv2.d.ts.map +1 -0
  573. package/platform/types/components/aws/takeover/app-sync.d.ts +2 -0
  574. package/platform/types/components/aws/takeover/app-sync.d.ts.map +1 -0
  575. package/platform/types/components/aws/takeover/aurora.d.ts +2 -0
  576. package/platform/types/components/aws/takeover/aurora.d.ts.map +1 -0
  577. package/platform/types/components/aws/takeover/bucket.d.ts +2 -0
  578. package/platform/types/components/aws/takeover/bucket.d.ts.map +1 -0
  579. package/platform/types/components/aws/takeover/bus.d.ts +2 -0
  580. package/platform/types/components/aws/takeover/bus.d.ts.map +1 -0
  581. package/platform/types/components/aws/takeover/cognito-user-pool.d.ts +2 -0
  582. package/platform/types/components/aws/takeover/cognito-user-pool.d.ts.map +1 -0
  583. package/platform/types/components/aws/takeover/cron-v2.d.ts +2 -0
  584. package/platform/types/components/aws/takeover/cron-v2.d.ts.map +1 -0
  585. package/platform/types/components/aws/takeover/dsql.d.ts +2 -0
  586. package/platform/types/components/aws/takeover/dsql.d.ts.map +1 -0
  587. package/platform/types/components/aws/takeover/dynamo.d.ts +2 -0
  588. package/platform/types/components/aws/takeover/dynamo.d.ts.map +1 -0
  589. package/platform/types/components/aws/takeover/efs.d.ts +2 -0
  590. package/platform/types/components/aws/takeover/efs.d.ts.map +1 -0
  591. package/platform/types/components/aws/takeover/function.d.ts +2 -0
  592. package/platform/types/components/aws/takeover/function.d.ts.map +1 -0
  593. package/platform/types/components/aws/takeover/helpers.d.ts +16 -0
  594. package/platform/types/components/aws/takeover/helpers.d.ts.map +1 -0
  595. package/platform/types/components/aws/takeover/index.d.ts +28 -0
  596. package/platform/types/components/aws/takeover/index.d.ts.map +1 -0
  597. package/platform/types/components/aws/takeover/mysql.d.ts +2 -0
  598. package/platform/types/components/aws/takeover/mysql.d.ts.map +1 -0
  599. package/platform/types/components/aws/takeover/postgres.d.ts +2 -0
  600. package/platform/types/components/aws/takeover/postgres.d.ts.map +1 -0
  601. package/platform/types/components/aws/takeover/queue.d.ts +2 -0
  602. package/platform/types/components/aws/takeover/queue.d.ts.map +1 -0
  603. package/platform/types/components/aws/takeover/redis.d.ts +2 -0
  604. package/platform/types/components/aws/takeover/redis.d.ts.map +1 -0
  605. package/platform/types/components/aws/takeover/service.d.ts +2 -0
  606. package/platform/types/components/aws/takeover/service.d.ts.map +1 -0
  607. package/platform/types/components/aws/takeover/sns-topic.d.ts +2 -0
  608. package/platform/types/components/aws/takeover/sns-topic.d.ts.map +1 -0
  609. package/platform/types/components/aws/takeover/task.d.ts +2 -0
  610. package/platform/types/components/aws/takeover/task.d.ts.map +1 -0
  611. package/platform/types/components/aws/tan-stack-start.d.ts +359 -0
  612. package/platform/types/components/aws/tan-stack-start.d.ts.map +1 -0
  613. package/platform/types/components/aws/task.d.ts +342 -0
  614. package/platform/types/components/aws/task.d.ts.map +1 -0
  615. package/platform/types/components/aws/v5/alb.d.ts +177 -0
  616. package/platform/types/components/aws/v5/alb.d.ts.map +1 -0
  617. package/platform/types/components/aws/v5/apigatewayv2.d.ts +482 -0
  618. package/platform/types/components/aws/v5/apigatewayv2.d.ts.map +1 -0
  619. package/platform/types/components/aws/v5/app-sync.d.ts +424 -0
  620. package/platform/types/components/aws/v5/app-sync.d.ts.map +1 -0
  621. package/platform/types/components/aws/v5/aurora.d.ts +459 -0
  622. package/platform/types/components/aws/v5/aurora.d.ts.map +1 -0
  623. package/platform/types/components/aws/v5/bucket.d.ts +578 -0
  624. package/platform/types/components/aws/v5/bucket.d.ts.map +1 -0
  625. package/platform/types/components/aws/v5/bus.d.ts +255 -0
  626. package/platform/types/components/aws/v5/bus.d.ts.map +1 -0
  627. package/platform/types/components/aws/v5/cluster.d.ts +167 -0
  628. package/platform/types/components/aws/v5/cluster.d.ts.map +1 -0
  629. package/platform/types/components/aws/v5/cognito-user-pool-client.d.ts +69 -0
  630. package/platform/types/components/aws/v5/cognito-user-pool-client.d.ts.map +1 -0
  631. package/platform/types/components/aws/v5/cognito-user-pool.d.ts +396 -0
  632. package/platform/types/components/aws/v5/cognito-user-pool.d.ts.map +1 -0
  633. package/platform/types/components/aws/v5/cron-v2.d.ts +206 -0
  634. package/platform/types/components/aws/v5/cron-v2.d.ts.map +1 -0
  635. package/platform/types/components/aws/v5/dsql.d.ts +453 -0
  636. package/platform/types/components/aws/v5/dsql.d.ts.map +1 -0
  637. package/platform/types/components/aws/v5/dynamo.d.ts +328 -0
  638. package/platform/types/components/aws/v5/dynamo.d.ts.map +1 -0
  639. package/platform/types/components/aws/v5/efs.d.ts +178 -0
  640. package/platform/types/components/aws/v5/efs.d.ts.map +1 -0
  641. package/platform/types/components/aws/v5/function.d.ts +582 -0
  642. package/platform/types/components/aws/v5/function.d.ts.map +1 -0
  643. package/platform/types/components/aws/v5/index.d.ts +27 -0
  644. package/platform/types/components/aws/v5/index.d.ts.map +1 -0
  645. package/platform/types/components/aws/v5/mysql.d.ts +347 -0
  646. package/platform/types/components/aws/v5/mysql.d.ts.map +1 -0
  647. package/platform/types/components/aws/v5/postgres.d.ts +348 -0
  648. package/platform/types/components/aws/v5/postgres.d.ts.map +1 -0
  649. package/platform/types/components/aws/v5/queue.d.ts +190 -0
  650. package/platform/types/components/aws/v5/queue.d.ts.map +1 -0
  651. package/platform/types/components/aws/v5/redis.d.ts +214 -0
  652. package/platform/types/components/aws/v5/redis.d.ts.map +1 -0
  653. package/platform/types/components/aws/v5/service.d.ts +1347 -0
  654. package/platform/types/components/aws/v5/service.d.ts.map +1 -0
  655. package/platform/types/components/aws/v5/sns-topic.d.ts +226 -0
  656. package/platform/types/components/aws/v5/sns-topic.d.ts.map +1 -0
  657. package/platform/types/components/aws/v5/task.d.ts +346 -0
  658. package/platform/types/components/aws/v5/task.d.ts.map +1 -0
  659. package/platform/types/components/aws/vector.d.ts +163 -0
  660. package/platform/types/components/aws/vector.d.ts.map +1 -0
  661. package/platform/types/components/aws/vpc-v1.d.ts +208 -0
  662. package/platform/types/components/aws/vpc-v1.d.ts.map +1 -0
  663. package/platform/types/components/aws/vpc.d.ts +491 -0
  664. package/platform/types/components/aws/vpc.d.ts.map +1 -0
  665. package/platform/types/components/aws/workflow.d.ts +331 -0
  666. package/platform/types/components/aws/workflow.d.ts.map +1 -0
  667. package/platform/types/components/base/base-site.d.ts +53 -0
  668. package/platform/types/components/base/base-site.d.ts.map +1 -0
  669. package/platform/types/components/base/base-ssr-site.d.ts +13 -0
  670. package/platform/types/components/base/base-ssr-site.d.ts.map +1 -0
  671. package/platform/types/components/base/base-static-site.d.ts +199 -0
  672. package/platform/types/components/base/base-static-site.d.ts.map +1 -0
  673. package/platform/types/components/cloudflare/account-id.d.ts +2 -0
  674. package/platform/types/components/cloudflare/account-id.d.ts.map +1 -0
  675. package/platform/types/components/cloudflare/ai.d.ts +68 -0
  676. package/platform/types/components/cloudflare/ai.d.ts.map +1 -0
  677. package/platform/types/components/cloudflare/astro.d.ts +249 -0
  678. package/platform/types/components/cloudflare/astro.d.ts.map +1 -0
  679. package/platform/types/components/cloudflare/auth.d.ts +22 -0
  680. package/platform/types/components/cloudflare/auth.d.ts.map +1 -0
  681. package/platform/types/components/cloudflare/binding.d.ts +109 -0
  682. package/platform/types/components/cloudflare/binding.d.ts.map +1 -0
  683. package/platform/types/components/cloudflare/bucket.d.ts +98 -0
  684. package/platform/types/components/cloudflare/bucket.d.ts.map +1 -0
  685. package/platform/types/components/cloudflare/cron.d.ts +151 -0
  686. package/platform/types/components/cloudflare/cron.d.ts.map +1 -0
  687. package/platform/types/components/cloudflare/d1.d.ts +142 -0
  688. package/platform/types/components/cloudflare/d1.d.ts.map +1 -0
  689. package/platform/types/components/cloudflare/dns.d.ts +100 -0
  690. package/platform/types/components/cloudflare/dns.d.ts.map +1 -0
  691. package/platform/types/components/cloudflare/durable-object.d.ts +125 -0
  692. package/platform/types/components/cloudflare/durable-object.d.ts.map +1 -0
  693. package/platform/types/components/cloudflare/experimental/index.d.ts +4 -0
  694. package/platform/types/components/cloudflare/experimental/index.d.ts.map +1 -0
  695. package/platform/types/components/cloudflare/experimental/solid-start.d.ts +219 -0
  696. package/platform/types/components/cloudflare/experimental/solid-start.d.ts.map +1 -0
  697. package/platform/types/components/cloudflare/experimental/static-site.d.ts +3 -0
  698. package/platform/types/components/cloudflare/experimental/static-site.d.ts.map +1 -0
  699. package/platform/types/components/cloudflare/helpers/compatibility.d.ts +21 -0
  700. package/platform/types/components/cloudflare/helpers/compatibility.d.ts.map +1 -0
  701. package/platform/types/components/cloudflare/helpers/fetch.d.ts +19 -0
  702. package/platform/types/components/cloudflare/helpers/fetch.d.ts.map +1 -0
  703. package/platform/types/components/cloudflare/helpers/validation.d.ts +15 -0
  704. package/platform/types/components/cloudflare/helpers/validation.d.ts.map +1 -0
  705. package/platform/types/components/cloudflare/helpers/worker-builder.d.ts +10 -0
  706. package/platform/types/components/cloudflare/helpers/worker-builder.d.ts.map +1 -0
  707. package/platform/types/components/cloudflare/helpers/wrangler.d.ts +31 -0
  708. package/platform/types/components/cloudflare/helpers/wrangler.d.ts.map +1 -0
  709. package/platform/types/components/cloudflare/hyperdrive.d.ts +302 -0
  710. package/platform/types/components/cloudflare/hyperdrive.d.ts.map +1 -0
  711. package/platform/types/components/cloudflare/index.d.ts +25 -0
  712. package/platform/types/components/cloudflare/index.d.ts.map +1 -0
  713. package/platform/types/components/cloudflare/kv.d.ts +140 -0
  714. package/platform/types/components/cloudflare/kv.d.ts.map +1 -0
  715. package/platform/types/components/cloudflare/providers/dns-record.d.ts +21 -0
  716. package/platform/types/components/cloudflare/providers/dns-record.d.ts.map +1 -0
  717. package/platform/types/components/cloudflare/providers/kv-data.d.ts +23 -0
  718. package/platform/types/components/cloudflare/providers/kv-data.d.ts.map +1 -0
  719. package/platform/types/components/cloudflare/providers/worker-assets.d.ts +19 -0
  720. package/platform/types/components/cloudflare/providers/worker-assets.d.ts.map +1 -0
  721. package/platform/types/components/cloudflare/providers/worker-placement.d.ts +27 -0
  722. package/platform/types/components/cloudflare/providers/worker-placement.d.ts.map +1 -0
  723. package/platform/types/components/cloudflare/providers/worker-script.d.ts +23 -0
  724. package/platform/types/components/cloudflare/providers/worker-script.d.ts.map +1 -0
  725. package/platform/types/components/cloudflare/providers/worker-url.d.ts +24 -0
  726. package/platform/types/components/cloudflare/providers/worker-url.d.ts.map +1 -0
  727. package/platform/types/components/cloudflare/providers/zone-lookup.d.ts +22 -0
  728. package/platform/types/components/cloudflare/providers/zone-lookup.d.ts.map +1 -0
  729. package/platform/types/components/cloudflare/queue-worker-subscriber.d.ts +122 -0
  730. package/platform/types/components/cloudflare/queue-worker-subscriber.d.ts.map +1 -0
  731. package/platform/types/components/cloudflare/queue.d.ts +235 -0
  732. package/platform/types/components/cloudflare/queue.d.ts.map +1 -0
  733. package/platform/types/components/cloudflare/rate-limit.d.ts +117 -0
  734. package/platform/types/components/cloudflare/rate-limit.d.ts.map +1 -0
  735. package/platform/types/components/cloudflare/react-router.d.ts +262 -0
  736. package/platform/types/components/cloudflare/react-router.d.ts.map +1 -0
  737. package/platform/types/components/cloudflare/ssr-site.d.ts +60 -0
  738. package/platform/types/components/cloudflare/ssr-site.d.ts.map +1 -0
  739. package/platform/types/components/cloudflare/static-site-v2.d.ts +302 -0
  740. package/platform/types/components/cloudflare/static-site-v2.d.ts.map +1 -0
  741. package/platform/types/components/cloudflare/static-site.d.ts +270 -0
  742. package/platform/types/components/cloudflare/static-site.d.ts.map +1 -0
  743. package/platform/types/components/cloudflare/tan-stack-start.d.ts +259 -0
  744. package/platform/types/components/cloudflare/tan-stack-start.d.ts.map +1 -0
  745. package/platform/types/components/cloudflare/worker.d.ts +483 -0
  746. package/platform/types/components/cloudflare/worker.d.ts.map +1 -0
  747. package/platform/types/components/cloudflare/workflow.d.ts +248 -0
  748. package/platform/types/components/cloudflare/workflow.d.ts.map +1 -0
  749. package/platform/types/components/component.d.ts +67 -0
  750. package/platform/types/components/component.d.ts.map +1 -0
  751. package/platform/types/components/core.d.ts +16 -0
  752. package/platform/types/components/core.d.ts.map +1 -0
  753. package/platform/types/components/cpu.d.ts +3 -0
  754. package/platform/types/components/cpu.d.ts.map +1 -0
  755. package/platform/types/components/dns.d.ts +63 -0
  756. package/platform/types/components/dns.d.ts.map +1 -0
  757. package/platform/types/components/duration.d.ts +9 -0
  758. package/platform/types/components/duration.d.ts.map +1 -0
  759. package/platform/types/components/error.d.ts +4 -0
  760. package/platform/types/components/error.d.ts.map +1 -0
  761. package/platform/types/components/esbuild.d.ts +3 -0
  762. package/platform/types/components/esbuild.d.ts.map +1 -0
  763. package/platform/types/components/experimental/dev-command.d.ts +99 -0
  764. package/platform/types/components/experimental/dev-command.d.ts.map +1 -0
  765. package/platform/types/components/experimental/index.d.ts +2 -0
  766. package/platform/types/components/experimental/index.d.ts.map +1 -0
  767. package/platform/types/components/groups.d.ts +6 -0
  768. package/platform/types/components/groups.d.ts.map +1 -0
  769. package/platform/types/components/index.d.ts +5 -0
  770. package/platform/types/components/index.d.ts.map +1 -0
  771. package/platform/types/components/input.d.ts +3 -0
  772. package/platform/types/components/input.d.ts.map +1 -0
  773. package/platform/types/components/link.d.ts +41 -0
  774. package/platform/types/components/link.d.ts.map +1 -0
  775. package/platform/types/components/linkable.d.ts +301 -0
  776. package/platform/types/components/linkable.d.ts.map +1 -0
  777. package/platform/types/components/naming-rules.d.ts +32 -0
  778. package/platform/types/components/naming-rules.d.ts.map +1 -0
  779. package/platform/types/components/naming.d.ts +21 -0
  780. package/platform/types/components/naming.d.ts.map +1 -0
  781. package/platform/types/components/parts-component.d.ts +241 -0
  782. package/platform/types/components/parts-component.d.ts.map +1 -0
  783. package/platform/types/components/parts.d.ts +194 -0
  784. package/platform/types/components/parts.d.ts.map +1 -0
  785. package/platform/types/components/path.d.ts +2 -0
  786. package/platform/types/components/path.d.ts.map +1 -0
  787. package/platform/types/components/rpc/rpc.d.ts +19 -0
  788. package/platform/types/components/rpc/rpc.d.ts.map +1 -0
  789. package/platform/types/components/secret.d.ts +123 -0
  790. package/platform/types/components/secret.d.ts.map +1 -0
  791. package/platform/types/components/size.d.ts +5 -0
  792. package/platform/types/components/size.d.ts.map +1 -0
  793. package/platform/types/components/takeover.d.ts +88 -0
  794. package/platform/types/components/takeover.d.ts.map +1 -0
  795. package/platform/types/components/transform.d.ts +34 -0
  796. package/platform/types/components/transform.d.ts.map +1 -0
  797. package/platform/types/components/vercel/account-id.d.ts +2 -0
  798. package/platform/types/components/vercel/account-id.d.ts.map +1 -0
  799. package/platform/types/components/vercel/dns.d.ts +73 -0
  800. package/platform/types/components/vercel/dns.d.ts.map +1 -0
  801. package/platform/types/components/vercel/index.d.ts +3 -0
  802. package/platform/types/components/vercel/index.d.ts.map +1 -0
  803. package/platform/types/components/vercel/providers/dns-record.d.ts +15 -0
  804. package/platform/types/components/vercel/providers/dns-record.d.ts.map +1 -0
  805. package/platform/types/config.d.ts +1437 -0
  806. package/platform/types/config.d.ts.map +1 -0
  807. package/platform/types/global-aliases.d.ts +37 -0
  808. package/platform/types/global.d.ts +374 -0
  809. package/platform/types/internal.d.ts +18 -0
  810. package/platform/types/runtime/worker/unenv.d.ts +14 -0
  811. package/platform/types/testing/global.d.ts +11 -0
  812. package/platform/types/testing/global.d.ts.map +1 -0
  813. package/platform/types/testing/index.d.ts +80 -0
  814. package/platform/types/testing/index.d.ts.map +1 -0
  815. package/platform/types/testing/mock.d.ts +136 -0
  816. package/platform/types/testing/mock.d.ts.map +1 -0
  817. package/platform/types/testing/vitest.d.ts +19 -0
  818. package/platform/types/testing/vitest.d.ts.map +1 -0
  819. package/platform/types/util/compare-semver.d.ts +4 -0
  820. package/platform/types/util/compare-semver.d.ts.map +1 -0
  821. package/platform/types/util/fs.d.ts +5 -0
  822. package/platform/types/util/fs.d.ts.map +1 -0
  823. package/platform/types/util/lazy.d.ts +2 -0
  824. package/platform/types/util/lazy.d.ts.map +1 -0
  825. package/platform/types/util/minify.d.ts +2 -0
  826. package/platform/types/util/minify.d.ts.map +1 -0
  827. package/platform/types/util/package.d.ts +10 -0
  828. package/platform/types/util/package.d.ts.map +1 -0
  829. package/platform/types/util/semaphore.d.ts +9 -0
  830. package/platform/types/util/semaphore.d.ts.map +1 -0
  831. package/platform/types/util/warn.d.ts +2 -0
  832. package/platform/types/util/warn.d.ts.map +1 -0
@@ -0,0 +1,652 @@
1
+ # Writing V5 components
2
+
3
+ A V5 component is built from **parts**: a declared list of the resources it creates. From
4
+ that one list the component gets a typed `transform`, `existing` and `nodes`, consistent
5
+ resource names, and a check that nothing is created outside the list.
6
+
7
+ This guide is for two readers:
8
+
9
+ - You're writing **your own component** in an app. Read up to "Porting a 4.x component".
10
+ - You're **porting one of SST's 4.x components** to V5, as a person or an agent. Read all
11
+ of it; the last sections are the rules and the checklist.
12
+
13
+ This file ships with the CLI, so in an app it's at `.sst/platform/src/components/README.md`.
14
+ The first half is also on the docs site as "Write a Local Component"
15
+ (`www/src/content/docs/docs/write-a-local-component.mdx`), and publishing one as a package
16
+ is "Write a Package Component". Keep them in step. What the local page shows working is
17
+ tested in `component.test.ts` under "the component in the docs".
18
+
19
+ ## A component in one page
20
+
21
+ ```ts title="sst.config.ts"
22
+ const parts = {
23
+ bucket: aws.s3.Bucket,
24
+ // Only created when it's asked for
25
+ audit: sst.optional(aws.s3.Bucket),
26
+ // One per team
27
+ reader: sst.many(aws.iam.Role),
28
+ };
29
+
30
+ interface UploadsArgs extends sst.ComponentArgs<typeof parts> {
31
+ teams: string[];
32
+ audit?: boolean;
33
+ }
34
+
35
+ class Uploads extends sst.component("acme:index:Uploads", parts) {
36
+ constructor(name: string, args: UploadsArgs, opts?: $util.ComponentResourceOptions) {
37
+ super(name, args, opts);
38
+
39
+ this.part("bucket", { forceDestroy: true });
40
+ if (args.audit) this.part("audit", {});
41
+ for (const team of args.teams)
42
+ this.part("reader", team, {
43
+ assumeRolePolicy: aws.iam.assumeRolePolicyForPrincipal({
44
+ Service: "lambda.amazonaws.com",
45
+ }),
46
+ });
47
+ }
48
+
49
+ get name() {
50
+ return this.nodes.bucket.bucket;
51
+ }
52
+
53
+ link() {
54
+ return {
55
+ properties: { name: this.name },
56
+ include: [
57
+ sst.aws.permission({
58
+ actions: ["s3:GetObject"],
59
+ resources: [$interpolate`${this.nodes.bucket.arn}/*`],
60
+ }),
61
+ ],
62
+ };
63
+ }
64
+ }
65
+ ```
66
+
67
+ That is the whole pattern: declare `parts`, extend `sst.component(type, parts)`, call
68
+ `super(name, args, opts)` with the args as they are, and create each resource with
69
+ `this.part()`.
70
+
71
+ ## What the people using your component get
72
+
73
+ ```ts
74
+ const uploads = new Uploads("Docs", {
75
+ teams: ["design", "legal"],
76
+ // Change how any part is created. An object is merged into the defaults, deeply,
77
+ // and it's typed that way: a nested object can be given in part.
78
+ transform: {
79
+ bucket: { tags: { team: "storage" } },
80
+ // A function can change the args and the options. For a `many` part it's
81
+ // also given which one it's looking at.
82
+ reader: (args, opts, name, team) => {
83
+ if (team === "legal") args.maxSessionDuration = 7200;
84
+ },
85
+ },
86
+ // Use a resource they already have in place of one the component would
87
+ // create: the resource itself, or the id to look it up by.
88
+ existing: { bucket: "my-existing-bucket" },
89
+ });
90
+
91
+ uploads.nodes.bucket; // the aws.s3.Bucket
92
+ uploads.nodes.audit; // undefined when it wasn't created
93
+ uploads.nodes.reader.legal; // by id
94
+
95
+ new sst.aws.v5.Function("Api", { handler: "src/api.handler", link: [uploads] });
96
+ ```
97
+
98
+ A `transform` or `existing` key that isn't one of the parts is an error, with the list of
99
+ parts in the message. `$transform(Uploads, (args) => { ... })` works too, and runs before
100
+ the component reads its args.
101
+
102
+ ## Parts
103
+
104
+ - **Names.** A part's resource is named `<ComponentName><Key>`, so `Docs` and `bucket`
105
+ give `DocsBucket`. A `many` part adds its id: `DocsReaderLegal`.
106
+ - **Everything is a part.** A resource created directly under the component that isn't a
107
+ declared part throws. That's what keeps `transform` and `nodes` complete.
108
+ - **Markers.**
109
+ - `optional(Class)`: created only sometimes. Its `nodes` entry may be `undefined`.
110
+ - `many(Class)`: several of one kind, created with an id: `this.part("reader", id, args)`.
111
+ An id can be any string, like the route `"GET /users/{id}"`. A plain id is used in the
112
+ name as it is; any other gets a short hash added so two similar ids don't collide.
113
+ `id in this.nodes.reader` tells you whether one exists.
114
+ - `deferred(sst.aws.v5.Function)`: a function that's built later, or not at all when the
115
+ user passes an ARN. Create it with `sst.aws.functionPart(this, key, definition,
116
+ defaults)`, or with an id for `many(deferred(sst.aws.v5.Function))`. Its `nodes` entry is
117
+ an `Output`. The user's `transform` for it takes the function's args, including the
118
+ function's own `transform` and `existing`.
119
+ - `named(part, "Name")`: the resource is named `<ComponentName><Name>` in place of the
120
+ key. The key is what's written in `transform`, `existing` and `nodes`; the name is
121
+ how a deployed app knows the resource, so it's permanent. It wraps a class or
122
+ another marker: `named(optional(aws.ec2.SecurityGroup), "NatInstanceSecurityGroup")`.
123
+ Use it when the name a resource has to keep isn't the key you want.
124
+ - **An SST component can be a part**, like `sst.aws.v5.Function` or a certificate. If the
125
+ component's own file imports yours, declare the parts in a function so they're read
126
+ late: `component("acme:index:Uploads", () => ({ ... }))`.
127
+ - **A part can be created later**, inside an `.apply()`, when whether it exists depends
128
+ on something that's only known on deploy: another component's output, or the result of
129
+ a build. Declare it `optional` or `many`. It's added to `nodes` when it's created, so
130
+ say that in its doc comment. Do this only when a plain arg can't decide it.
131
+ If people read it from `nodes` in their config, declare it `deferred` instead, so its
132
+ entry is an output that's there from the start. The V5 `Service` does this for its
133
+ Cloud Map service, which exists only when the cluster's VPC has a namespace: it
134
+ creates it with `this.partHandle()`, and supplies the `nodes` entry with `defer()`.
135
+ - **A part is created once.** Creating it a second time is an error.
136
+ - **`this.existingPart(key)`** returns the resource the user passed in `existing`, when
137
+ the component has to do something different for a resource it didn't create.
138
+ `this.part()` already returns it instead of creating one.
139
+ - **`this.lookupPart(key, [id], resourceId)`** looks a part's resource up in place of
140
+ creating it, when the component references something that's already deployed and
141
+ works out the ids of its other parts itself: from a tag, or a data source. The V5
142
+ `Aurora` is given a cluster and finds its instance, secret and proxy this way.
143
+ - **`this.assertNew(what, key, id, args, transforms?)`** goes at the top of a method that
144
+ adds a named thing (`addRoute`, `subscribe`). It rejects a name that's taken and a
145
+ `transform` passed to the method, with a message that points at the component's own
146
+ `transform`.
147
+ - **`this.delegateOpts()`** is for resources something else creates on the component's
148
+ behalf, like a DNS adapter creating records: `dns.createAlias(name, record,
149
+ this.delegateOpts())`. They aren't parts. They're configured through what creates them.
150
+ - **An arg the user's `transform` must not change** goes in a Pulumi transformation on
151
+ the part: `this.part(key, args, { transformations: [({ props, opts }) => ({ props: {
152
+ ...props, runtime }, opts })] })`. It runs after the user's `transform`. The V5
153
+ `Function` does this for the stub it deploys in `sst dev`.
154
+
155
+ ## Args
156
+
157
+ - **Extend `sst.ComponentArgs<typeof parts>`.** It adds `transform` and `existing`.
158
+ - **Args that decide what gets created are plain values.** If whether a part exists
159
+ depends on an arg, that arg can't be an output: the component has to know before it
160
+ creates anything. Fields inside it can still be outputs. This is what lets parts be
161
+ created directly instead of inside `.apply()`, and lets `nodes` hold resources, not
162
+ outputs of resources.
163
+ The same goes for a list with a part per item, and for the field each part is
164
+ named after: the V5 `Postgres` takes the proxy's `credentials` and each `username`
165
+ as plain values, and the passwords as inputs.
166
+ - **A part the user can switch off gets its own arg** (`publicAccessBlock: false`).
167
+ `transform` changes a part; it doesn't remove one.
168
+ - **For a resource the user already has, use `existing`**, not an arg of your own.
169
+ A static `get` is one line: `return new Uploads(name, { existing: { bucket: id } }, opts)`.
170
+ When the component has required args, return before reading them:
171
+ `if (this.existingPart("table")) return;`. `get` then passes only `existing`, with a
172
+ cast to the args type.
173
+ - **A check that needs a deployed value** goes in the output that everything depending
174
+ on it reads, so the error stops what would have used it. The V5 `Dynamo` checks that
175
+ the table's stream is enabled inside the stream ARN its subscribers are given, and
176
+ the V5 `Service` checks that an `Alb` is in the cluster's VPC inside the VPC id its
177
+ target groups are given.
178
+ - **An arg a resource is named after is plain all the way down.** A rule of a service's
179
+ load balancer is: its listener rule is named after its conditions. Check it with
180
+ `plainDeep(value, what)`.
181
+
182
+ ## Linking, dev mode, naming
183
+
184
+ - **Linking.** Define `link()` and return `properties` (readable at runtime as
185
+ `Resource.<Name>`) and `include` (`sst.aws.permission()`, `sst.cloudflare.binding()`,
186
+ `sst.env()`). For compute SST doesn't manage, `sst.aws.iamStatements(links)` gives the
187
+ IAM statements and `sst.Linkable.env(links)` the environment variables.
188
+ - **Dev mode.** If the component runs locally in `sst dev` and isn't deployed, handle
189
+ that in one place in the constructor: call `this.runsLocally()` and return before
190
+ creating the parts that aren't deployed. Reading `nodes` then explains why a resource
191
+ is missing. A part that's created all the same is in `nodes` as usual, like the role
192
+ a service's containers run as on the user's machine. Keep the values the getters
193
+ return in one object so the getters don't branch on dev.
194
+ - **Physical names.** SST knows how to name the resource types its own components use.
195
+ For another type, `sst.Component.naming("aws:athena/workgroup:Workgroup", { field:
196
+ "name", max: 128 })`, or `false` to leave it to the provider. A resource that's looked
197
+ up keeps the name it has.
198
+ - **Testing.** `mock()` from `.sst/platform/src/testing` stands in for the engine and
199
+ gives a test the globals a config has. Create the component, `await app.settle()`, and
200
+ read `app.resources`. `app.takeover(saved)` checks a change against a saved
201
+ `app.graph()`: what a deploy would remove, what it would update, and what it would
202
+ no longer remove in order. It works with vitest and with `bun test`. The docs page
203
+ has the examples.
204
+ - **Renaming a part later.** A part's key is in the name of its resource, so a new key
205
+ is a new resource. To change the key and keep what's deployed, declare the part with
206
+ the name it had: `files: sst.named(aws.s3.Bucket, "Bucket")`. Or give the resource its
207
+ new name and say where it was: `sst.takeover(Uploads, { moved: { files: "bucket" } })`.
208
+ - **Sharing it as a package.** A package imports `component` and the rest from
209
+ `sst/components`, SST's components for a provider from its group, like
210
+ `sst/components/aws`, and each provider from its package. Its repo installs `sst`,
211
+ Pulumi and those providers as dev dependencies, and builds and tests with ordinary
212
+ tools, with no `sst.config.ts`. In an app, the CLI resolves the same imports to the
213
+ app's own platform, so together they're what the `sst` global is.
214
+ `.sst/tsconfig.json`, which `sst install` writes, does the same for TypeScript, and
215
+ the vitest `alias` for the app's tests. The package's peer dependencies say which SST
216
+ and which providers it needs, and a deploy checks them. "Share it" on the docs page
217
+ has the setup.
218
+ - **`sst/components` is a public API.** What `core.ts` and each group export is what
219
+ packages build on. Adding to it is fine. Removing an export or changing what one
220
+ accepts breaks them, so it waits for a major version. `component()` returns a named
221
+ type (`ComponentClass`) so that a package's `.d.ts` can name it; keep it named.
222
+ `declarations.test.ts` compiles a package both ways.
223
+
224
+ ---
225
+
226
+ ## Porting a 4.x component
227
+
228
+ Everything above applies. The rest is specific to SST's own components in
229
+ `platform/src/components/aws/`.
230
+
231
+ ### Ground rules
232
+
233
+ - **The V5 component has the original's name, in the `v5` folder.** `Queue` in
234
+ `aws/queue.ts` is ported as `Queue` in `aws/v5/queue.ts`, with the same type,
235
+ `sst:aws:Queue`. An app uses it as `sst.aws.v5.Queue`, next to `sst.aws.Queue`.
236
+ - **The same type is what makes it the same component.** A deployed `sst:aws:Queue`
237
+ named `MyQueue` is the one `new sst.aws.v5.Queue("MyQueue")` creates, so it's kept, and
238
+ so is each resource in it that has the name it had. Going back to the 4.x component
239
+ keeps those too. What links the component sees no change, and a `$transform` for
240
+ either applies to both.
241
+ - **Where a file needs both, the 4.x one is `Original…`.** That goes for the class and
242
+ for its types: `import type { Queue as OriginalQueue } from "../queue"`. In prose,
243
+ say which one you mean: "the 4.x `Queue`" in a code comment, `sst.aws.Queue` and
244
+ `sst.aws.v5.Queue` in what the docs are generated from.
245
+ - **Edit a 4.x component file only where it changes nothing for an app that uses it.**
246
+ An app's config has to read the same, and its state can't change: imports, what a
247
+ file reads when it loads, and types are fine. New behavior goes in the V5
248
+ component. V5 components haven't been released, so they can still change in any
249
+ way.
250
+ - **Redesign, don't translate.** A V5 component doesn't have to mirror the original's
251
+ structure.
252
+ - **Port what takes a component before the component itself.** 4.x components
253
+ recognise a `Vpc` or a `Router` with `instanceof`, and are typed for the 4.x
254
+ `Cluster`, so the V5 one can't be passed to them. Port the components that take it
255
+ first, and have each accept both the original and the V5 one. The component that's
256
+ taken goes last: an app switches to it once everything it's passed to is V5.
257
+ The V5 `Service` and `Task` take either `Cluster`. The arg is declared again in each
258
+ (`cluster: OriginalCluster | Cluster`), and the V5 `Cluster` gives them the same
259
+ `nodes.cluster` and `vpc` to read as the 4.x one. The V5 `Function`, `Service` and
260
+ `Task` take either `Efs` the same way, and the V5 `Service` either `Alb`.
261
+ For a `Vpc`, the two kinds are already one thing to a V5 component: it wraps the
262
+ original's args in `TakesVpc<>`, which gives `vpc` the type `AnyVpc` in place of the
263
+ 4.x `Vpc`, and it checks with `isVpc()`, not `instanceof` (all three are in
264
+ `helpers/vpc.ts`). When `Vpc` is ported, the V5 one is added to `AnyVpc` and
265
+ `isVpc()`, and every V5 component takes it.
266
+ - **No `registerVersion`.** Keep any tags the original writes at the same value.
267
+ - **Reuse the original's arg types**: `interface QueueArgs extends
268
+ V5Args<OriginalQueueArgs, typeof parts> {}`. `Omit` and re-declare only what has to
269
+ change. For an arg that has to become a plain value, write
270
+ `cors?: Plain<OriginalBucketArgs["cors"]>` (`Plain` is in `args.ts`): the docs generator follows it back to the original's docs.
271
+ An arg's docs come with it, examples included. Where an example creates a component
272
+ that has a V5 form (`new sst.aws.Queue("MyQueue", { dlq })`, `sst.aws.Vpc.get(...)`),
273
+ the docs generator writes the V5 one on the V5 page. So declare an arg again only
274
+ when its type changes, or when what its docs say no longer holds.
275
+
276
+ ### What becomes a part, and what stays a component
277
+
278
+ - Something that only **wires resources together** becomes parts of the parent, as `many`
279
+ parts keyed by a name the user gives: a subscription, a route, an authorizer, a data
280
+ source, an identity provider. 4.x usually kept these in a wrapper component of their
281
+ own. The method that adds one returns the parent (so calls chain) or the AWS resource
282
+ (when the user needs something off it, like `authorizer.id`).
283
+ - Something the user **names and links in its own right** stays a component of its own,
284
+ returned by the method that adds it. `addClient("Web")` on a V5 `CognitoUserPool`
285
+ returns a `CognitoUserPoolClient`, so `link: [client]` still gives `Resource.Web.id`.
286
+ - A per-method `transform` moves to the component's `transform`. `this.assertNew()`
287
+ rejects the old option with a message.
288
+ - A deprecated overload isn't carried over (`subscribe(handler)` with no name). Throw
289
+ an error that shows the call to write instead; without one the user gets whatever
290
+ the shifted arguments happen to fail on. The same goes for a deprecated method: the
291
+ V5 `Cluster` has `addService` and `addTask` only to say what to write, marked
292
+ `@internal` so they stay off its page.
293
+ - A static method that adds something to a resource outside the app (`Dynamo.subscribe`
294
+ with a stream ARN) becomes `get(...)` and the ordinary method. The takeover map can
295
+ still find what the static method created: see `takeover/dynamo.ts`.
296
+
297
+ ### Helpers
298
+
299
+ | For | Use |
300
+ | --- | --- |
301
+ | A function from a handler, args, an ARN, a function or a `Workflow` | `functionPart()` in `helpers/function-part.ts` |
302
+ | Letting a service invoke that function | `invokePermissionArgs(fn, principal, sourceArn)` in `helpers/function-permission.ts` |
303
+ | A custom domain (`name`, `dns`, `cert`) | `customDomain()` and `CustomDomainArgs` in `helpers/custom-domain.ts` |
304
+ | Event source mappings | `filterCriteria()`, `batchSettings()` in `helpers/event-source.ts` |
305
+ | Letting a service send to a queue | `sendPolicyArgs(queueArn)` in `helpers/queue-policy.ts` |
306
+ | A Fargate task: its containers, roles, images, log groups and task definition | `containersOf()`, `taskRoleArgs()`, `executionRoleArgs()`, `containerImage()`, `logGroupArgs()`, `taskDefinitionArgs()` in `helpers/fargate.ts` |
307
+ | The VPC of a cluster, whichever way the cluster was given it | `networkOf(cluster)` in `helpers/fargate.ts` |
308
+ | A `vpc` arg: either kind of `Vpc`, or the ids of a VPC | `TakesVpc<Args>`, `AnyVpc`, `isVpc(vpc)` in `helpers/vpc.ts` |
309
+ | A load balancer: its security group, what a listener answers by default, a domain with aliases and its DNS records | `securityGroupArgs()`, `forbidden()`, `domainOf()`, `pointDomainAt()` in `helpers/load-balancer-args.ts` |
310
+ | An RDS database: storage limit, replicas, the proxy, a stored password | `maxStorage()`, `replicaArgs()`, `proxyCredentials()`, `proxyRoleArgs()`, `proxyArgs()`, `storedPassword()` in `helpers/rds.ts` |
311
+ | An arg with a default, then converted | `withDefault(value, fallback, convert?)` in `args.ts` |
312
+ | An arg that may be unset | `ifSet(value, convert?)` in `args.ts` |
313
+ | An arg that must not be an output | `plain(value, what)` in `args.ts` |
314
+ | An arg that must not have an output anywhere inside it | `plainDeep(value, what)` in `args.ts` |
315
+ | An option a method no longer takes | `notAnOption(args, option, instead)` in `args.ts` |
316
+ | A value made on this machine from things in AWS, like built code | `withoutDependencies(output)` in `args.ts` |
317
+
318
+ A helper returns the args of a part, or checks an arg. The component still creates
319
+ each part with `this.part()`, so its constructor reads as the list of what it creates.
320
+ The V5 `Postgres` and `Mysql` are the same component but for a handful of settings,
321
+ and share everything else this way.
322
+
323
+ One helper creates a part itself: `containerImage()` builds a container's image behind
324
+ the limit on how many builds run at once, so the image is created when its turn comes.
325
+ It gets the part's name, transform and old address from `component.partHandle(key, id)`,
326
+ the way `functionPart()` does. Reach for that only when `this.part()` can't do it.
327
+
328
+ Args that several components take are declared once, in a helper. The docs generator
329
+ reads every file in `aws/helpers/`, and a helper file gets no page of its own:
330
+
331
+ - An interface the components' args extend, for args they share. `FargateArgs` in
332
+ `helpers/fargate.ts` is the `cluster` and `volumes` of a task and a service. Its
333
+ args show on each page as the component's own.
334
+ - A named type the args use. `ContainerArgs` in `helpers/fargate.ts` and `ProxyArgs` in
335
+ `helpers/rds.ts` get a section on each page that uses them, as if the page's file
336
+ declared them.
337
+ - A name for a type, like `AnyVpc`. A page shows what it stands for.
338
+
339
+ Write a helper's doc comments for any page: don't name a component in them. The
340
+ comment on an interface that's only extended isn't shown.
341
+
342
+ ### Taking over what 4.x deployed
343
+
344
+ Changing `sst.aws.Queue` to `sst.aws.v5.Queue` with the same name has to keep the
345
+ deployed resources. The component and every part with the name it had are kept as they
346
+ are, because the type is the same. What moved goes in a **takeover map**,
347
+ `aws/takeover/<name>.ts`, imported from `aws/takeover/index.ts`. The component itself
348
+ knows nothing about 4.x. A component with nothing that moved has no map.
349
+
350
+ A map is a file that's imported for what it does, not for what it exports. The CLI
351
+ bundles a config with esbuild, which leaves such a file out of a package that says it
352
+ has no side effects, so `sideEffects` in `platform/package.json` lists
353
+ `aws/takeover/*.ts`. Without that line every map is dropped from a real build and a
354
+ switch deletes and recreates whatever moved, while every test under the mock passes.
355
+ `v5-components.test.ts` bundles the components the way the CLI does and checks the maps
356
+ are in.
357
+
358
+ ```ts
359
+ // The V5 one, from "../v5/apigatewayv2"
360
+ takeover(ApiGatewayV2, {
361
+ moved: {
362
+ // A part whose key changed: it was `<Api>AccessLog`
363
+ logGroup: "accessLog",
364
+ // A part that lived in a wrapper component at the top of the app
365
+ authorizer: (_, { name, id }) =>
366
+ childOf(
367
+ "sst:aws:ApiGatewayV2Authorizer",
368
+ `${name}Authorizer${logicalName(id)}`,
369
+ "Authorizer",
370
+ ),
371
+ },
372
+ });
373
+ ```
374
+
375
+ - A part is matched by its key. List it under `moved` only when its old name or parent
376
+ was different.
377
+ - `childOf(type, component, child)` is the old address of something inside a wrapper
378
+ component. Pass the V5 component as a fourth argument when 4.x created the wrapper
379
+ with the component's own options, so it sat beside the component rather than at the
380
+ top (`Bucket.notify` does).
381
+ - `{ name, parent: false }` is something 4.x created with no parent at all.
382
+ - A `moved` function can return several candidates. Addresses that don't exist are
383
+ ignored. A candidate's name can be made from one of the component's outputs, like
384
+ the table's own name.
385
+ - When 4.x created a resource inside `.apply()`, a `transform` function for it was
386
+ given plain values. Created directly, it's given outputs for whatever is made from
387
+ the component's args. Say so in the "Switch from" section.
388
+ - A resource 4.x **looked up** outside the component (`Bucket.get`) can't be carried
389
+ over, because a lookup takes no old address. It's dropped from state and looked up
390
+ again, which changes nothing in AWS.
391
+ - A resource 4.x looked up under the component for a value isn't a part: it's not the
392
+ component's to transform or replace. Look it up with `this.delegateOpts()` and the
393
+ name it had, and it stays where it was in the state. The V5 `Efs` does this for the
394
+ VPC whose CIDR block it reads.
395
+ - A part that gets a new name keeps its physical name: a generated name is never
396
+ changed once it's deployed. A resource that's named with a `Name` tag is the
397
+ exception (a security group, a VPC endpoint, a subnet): the tag is made from the
398
+ logical name, so a new name updates it. Declare such a part with the name 4.x gave
399
+ it, `named(optional(ec2.SecurityGroup), "DsqlEndpointSecurityGroup")`, as the V5 `Dsql`
400
+ does. It then needs no entry in the takeover map. The name goes in the declaration
401
+ and not in the map because it has to outlive the map: once someone has switched, the
402
+ kept name is the one in their state.
403
+ - Something 4.x created without the component's `provider` is replaced on switch when
404
+ the component has one, because a part is always created with it. 4.x did this for
405
+ what it created with no parent (the alias of a durable function's URL, AppSync's
406
+ domain association), for a wrapper it forgot to give the provider (`SnsTopic`'s queue
407
+ subscribers), and for what's added to a component from a `get` that gave its options
408
+ to the lookup alone (`Bucket.get`, `Dynamo.get`, `CognitoUserPool.get`). A port can't
409
+ avoid it. The "with another provider" way of a takeover case finds it: expect it in
410
+ the case, and say so in the "Switch from" section.
411
+ - An object in `transform` is merged into the defaults, nested objects included; 4.x
412
+ replaced a nested object whole. So a config that sets a nested default this way
413
+ (`transform: { instance: { tags: { team: "data" } } }`) deploys something different
414
+ after the switch: here SST's own tags come back. Find the nested defaults of each
415
+ part, test one (`an object transform that sets tags` in `v5/postgres.test.ts`), and
416
+ name it in the "Switch from" section: "If you set `tags` on the instance with an
417
+ object in `transform`, it keeps the tags SST sets next to yours."
418
+ - `$transform(sst.aws.Queue, ...)` applies to `sst.aws.v5.Queue` too: it's matched by
419
+ type. So an option the original takes and the V5 one doesn't can still arrive. Say
420
+ where it went with `notAnOption()`. Where that would break configs people have, take
421
+ the old form as well: the V5 `Function` does, for `role`, `live`, `logging.logGroup`
422
+ and `url.route`, because a `$transform` for functions reaches the ones inside every
423
+ V5 component.
424
+ - The docs generator writes those two as the last notes of every "Switch from" section:
425
+ that an object in `transform` is merged, and that a `$transform` for the original
426
+ applies. The original is the component of the same name, one folder up. Don't write
427
+ them in the class doc.
428
+ - Something 4.x created outside the component with nothing in AWS behind it needs no
429
+ old address. The 4.x `Service` creates a `DevCommand` at the top of the app for each
430
+ container; in the V5 one they're parts, and a switch lists the old ones as removed
431
+ and the new ones as created. Expect them in `unclaimed`, and say so in the "Switch
432
+ from" section.
433
+ - A function's `description` usually changes, because 4.x named the wrapper in it. That's
434
+ an in-place update. So does anything else made from the function's name when a
435
+ function part gets a new one: a URL behind a `Router` is registered under a key made
436
+ from it.
437
+ - A function definition can still be written the way the 4.x `Function` takes it
438
+ (`role`, `logging.logGroup`, `live`, `url.route`). The V5 one takes those too.
439
+ - `takeover()` also takes `from`, the type a component had, for one that takes over
440
+ from a component of another type. No V5 component needs it.
441
+ - One of SST's own provider resources (`KvKeys`, `BucketFiles`) adds its type to its
442
+ name: `MyFunctionRouteKey.sst.aws.KvKeys`. As a part it's matched without that. If it
443
+ moved, write its old name in full, as a function in `moved`.
444
+ - A resource 4.x created outside of any component got no name from SST. Add its type to
445
+ `UNPREFIXED_TYPES` in `naming-rules.ts` so it keeps the name the provider gave it
446
+ (the V5 `Function` does this for the alias of a durable function's URL).
447
+ - Reproduce what 4.x deploys, not what it means to. The 4.x `Function` trusted the
448
+ account in every role because a check never passed, and the V5 one wrote the same
449
+ policy until `main` fixed 4.x. Changing it is a decision of its own, not a side
450
+ effect of a port. When 4.x changes what it deploys, the port follows.
451
+
452
+ A resource that's created inside `.apply()` has to be given the output, not the
453
+ value the callback was called with: the output is what says the resource depends on
454
+ where the value came from, so that it's removed first. The V5 `Service` creates its
455
+ Cloud Map service inside `.apply()` for a VPC given by its ids, and gives it the
456
+ namespace id as the output.
457
+
458
+ Where the resource that holds on to another isn't given anything of it, say so with
459
+ `dependsOn`. A load balancer holds on to its certificate, but only its listeners are
460
+ given it, so the V5 `Alb` and `Service` make the load balancer depend on the
461
+ certificate. The 4.x ones don't, and removing them can fail on a certificate that's
462
+ still in use.
463
+
464
+ Also check for an **ordering guarantee** the original makes with an
465
+ `x.apply(() => resource)` wrapper, and keep it. The 4.x `Bucket` makes everything that
466
+ reads `bucket.name` wait for the bucket policy; the V5 one keeps that in its getters.
467
+ Where the original left an order to chance, and parts that are created directly make
468
+ it easy to say, say it with `dependsOn`: the V5 `Service` makes the ECS service wait
469
+ for the listeners that put its target groups on the load balancer. That changes
470
+ nothing a deploy does to what's already there. `dependsOn` also takes an output of
471
+ resources, so it works for parts that are created later: the 4.x `Efs` made its ids
472
+ wait for the mount targets, and in the V5 one the access point depends on them.
473
+
474
+ ### Tests
475
+
476
+ `platform/src/testing/mock.ts` mocks Pulumi and records every resource a component
477
+ registers. It ships with the platform, and `mock()` next to it is what an app tests its
478
+ own components with, so it imports no test runner. `platform/test/helpers/graph.ts` adds
479
+ the takeover suite for the ports, which is written for vitest. A port's test file starts
480
+ with its takeover cases, then tests the component's own behaviour:
481
+
482
+ ```ts
483
+ const pulumi = mockPulumi();
484
+
485
+ describe("takes over a deployed Queue", () => {
486
+ pulumi.takeoverCases({
487
+ original: () => OriginalQueue,
488
+ v5: () => Queue,
489
+ cases: {
490
+ // Written once, for both: it's given the original, then the V5 component
491
+ "fifo queue": (Queue, opts) => new Queue("MyQueue", { fifo: true }, opts),
492
+ "a subscriber created from a handler": {
493
+ create: (Queue, opts) =>
494
+ new Queue("MyQueue", {}, opts).subscribe("src/subscriber.handler"),
495
+ // What goes: the wrapper, which has nothing in AWS behind it
496
+ unclaimed: ["sst:aws:QueueLambdaSubscriber::MyQueueSubscriberVkxuom"],
497
+ // What a deploy updates: a resource and its fields
498
+ changed: [["MyQueueSubscriberVkxuomFunctionFunction", ["description"]]],
499
+ // Anything else to assert, once the V5 component is deployed
500
+ check: () => expect(names()).toContain("MyQueueSubscriberFunction"),
501
+ },
502
+ },
503
+ });
504
+ });
505
+ ```
506
+
507
+ - Each case deploys the original, then the V5 component, and expects everything the
508
+ original created to be kept as it is. It's run three ways: as it is, inside another
509
+ component, and with a `provider` of its own. So a case has to pass its `opts` on to
510
+ the component, and fails when it doesn't.
511
+ - The second and third way are where 4.x and a port differ most. 4.x often created a
512
+ wrapper at the top of the app wherever the component was, gave a wrapper the provider
513
+ but not the parent, or created something with no parent at all, so with the app's
514
+ provider.
515
+ - Cover every realistic combination of args, and every kind of thing the component adds,
516
+ `get` and what's added to a component from `get` included.
517
+ - A case says what's expected to go (`unclaimed`) or be updated (`changed`) when it isn't
518
+ nothing, the same for every case or by the way it's run (`(way) => [...]`). Don't
519
+ loosen it. Where the two components aren't written the same way, give `original` and
520
+ `v5` in place of `create`.
521
+ - Wrappers whose names aren't worth writing out can be counted: give the mock a
522
+ `wrappers` pattern and the case a `wrappers` number (see `v5/apigatewayv2.test.ts`).
523
+ - For a one-off, `pulumi.takesOver(original, v5)` returns `{ unclaimed, changed,
524
+ unordered }`.
525
+ - **Teardown order is checked too.** A deploy removes resources in the reverse of the
526
+ order they depend on each other, and AWS refuses to delete what's still in use. So
527
+ every dependency the original has is expected of the V5 component, directly or
528
+ through something in between. One that's missing is listed in `unordered`:
529
+ "MyServiceCloudmapService before MyVpcCloudmapNamespace". Fix the component. Where the
530
+ original's dependency is one nothing in AWS needs, name it in the suite's
531
+ `needlessOrder`, with the reason next to it.
532
+ - A dependency is only there to lose when the case has both resources. Give ids from
533
+ resources in the app, not just literal ones: a cluster whose VPC is given by the ids
534
+ of a `Vpc` (see `v5/service.test.ts`).
535
+ - `pulumi.dependsOn(name, other)` says whether one resource is removed before another,
536
+ for an order the component promises (see "when it's removed" in `v5/service.test.ts`).
537
+ - The check compares each resource's inputs and the options that change what a deploy
538
+ does to it: `ignoreChanges`, `protect`, `retainOnDelete`, `deleteBeforeReplace`,
539
+ `replaceOnChanges` and its provider. A difference there is reported as a field named
540
+ `options.<name>`. For a component it compares what's registered as its outputs
541
+ (`outputs`): the CLI reads some of them (`_task`, `_dev`, `_tunnel`).
542
+ - For a function it also compares what the CLI is given to build the code from
543
+ (`build`): the handler, runtime, copied files and **links**. A function's links go into
544
+ its code, not into any resource's inputs, so this is the only place a wrong link
545
+ shows. A takeover suite for a component with function parts needs a case with `link`.
546
+ - A resource's ids and ARNs are made from its name under the mock, so the check reads
547
+ a renamed resource's new name as its old one wherever another resource refers to it.
548
+ It doesn't in the resource's own inputs: its own name there is the name SST gave it,
549
+ like a `Name` tag, and a new one is a change.
550
+ - A provider made with `useProvider()` is registered once in a process, so only the
551
+ first test that needs it has it in its graph. The check leaves providers themselves
552
+ out of what it compares.
553
+ - A secret input is recorded as an object with the value under `value`. A value made
554
+ from a secret is a secret too, so a port that reads something next to a secret (a
555
+ task's volumes next to its built image) can turn a plain input into one. The check
556
+ reports that as a change to the field.
557
+ - `pulumi.outputsOf(name)` is what a component registered as its outputs. The takeover
558
+ check passes when neither side registers anything, so assert that the output the CLI
559
+ reads is there (see `v5/task.test.ts`).
560
+ - `await pulumi.settle()` after creating resources in every test, or they leak into the
561
+ next one.
562
+ - A 4.x component that's passed in can be the real one: a `Vpc`, `Cluster` and `Task`
563
+ all deploy under the mock (see `v5/cron-v2.test.ts`).
564
+ - Give the mock extra `state` for outputs the code reads (see `v5/apigatewayv2.test.ts`).
565
+ A resource that's looked up comes back with no name or ARN unless `state` gives it
566
+ one. The region, partition, account and IAM policy lookups have defaults.
567
+ - Assert on what's created, too. A takeover test passes when both sides create nothing,
568
+ which is what happens when a mock is missing and both sides fail the same way.
569
+ - `sst dev` behaviour is tested by setting `global.$dev = true` in a `beforeEach`.
570
+ - An error thrown inside `.apply()` can't be asserted: under the mock it's an
571
+ unhandled rejection, which fails the run. Test the errors that are thrown directly.
572
+ - `v5-components.test.ts` runs over every file in `aws/v5/`. It fails when one doesn't
573
+ have the name and type of the component it replaces, isn't exported from
574
+ `aws/v5/index.ts`, has a takeover map that isn't imported, or names another
575
+ component's type.
576
+
577
+ Run from `platform/`:
578
+
579
+ ```bash
580
+ npx tsc --noEmit -p tsconfig.json
581
+ npx vitest run --pool=forks
582
+ ```
583
+
584
+ Three test files (`bucket`, `alb`, `service-alb`) fail to load on `main` too.
585
+
586
+ **What the mock can't see.** It stands in for the engine and for the CLI, so a test
587
+ there never bundles a config, builds a function or calls AWS. The first deploy to a
588
+ real account found two bugs every test had passed: the takeover maps were missing from
589
+ a bundled config, and a V5 function's links were written into its code under the wrong
590
+ names. Both have a test now. For a port that touches how a config is built, what the
591
+ CLI is told, or the order things are created in, deploy it: the 4.x component first,
592
+ then `sst diff` after the switch, then `sst deploy`, then `sst remove`.
593
+
594
+ **Depending on a component is depending on everything in it.** A value read from a
595
+ component itself, like its `urn`, makes whatever is given that value wait for every
596
+ resource the component has created. A part is inside its component, so a part given
597
+ such a value waits for itself and is never created, with no error. That's how a
598
+ subscriber that linked its own queue (`queue.subscribe({ handler, link: [queue] })`)
599
+ went missing: a function's code is built from its links, and a link's name is read
600
+ from the linked component. 4.x didn't have the problem only because its subscriber sat
601
+ outside the queue. Give a part the outputs of the resources it needs, and where a value
602
+ is made on this machine from what's in AWS, pass it through `withoutDependencies()`.
603
+ For a component with function parts, test a function that links the component.
604
+
605
+ ### Checklist
606
+
607
+ 1. Read the original and every wrapper component it creates. Note each resource's
608
+ logical name, parent and options.
609
+ 2. Write `aws/v5/<name>.ts`, with the original's file name and class name: parts, args,
610
+ constructor, methods, `link()`, `static get`.
611
+ Give it the original's type. Search `cmd/` and `pkg/` for that type
612
+ (`"sst:aws:Function"`): the CLI finds some components by it and reads what they
613
+ register as outputs, so the V5 one has to register the same.
614
+ 3. If a part has another name or place than it had, write `aws/takeover/<name>.ts` and
615
+ import it from `aws/takeover/index.ts`.
616
+ 4. Export the component from `aws/v5/index.ts`, which is `sst.aws.v5`.
617
+ 5. Write `test/components/v5/<name>.test.ts`: takeover cases with
618
+ `pulumi.takeoverCases()`, then behaviour.
619
+ 6. Write the class doc, including a "Switch from `sst.aws.<Name>`" section that lists what's
620
+ written differently and what changes on deploy. The docs generator adds the two notes
621
+ every port has to its list. Document each part where it's declared: those comments
622
+ become the `transform`, `existing` and `nodes` docs.
623
+ 7. `cd www && bun ./generate.ts components` generates the page. The docs generator and
624
+ the sidebar find every file in `aws/v5/`, so there's nothing to add to either.
625
+ It fails when the page has `sst.aws.<Name>` outside the "Switch from" section, other
626
+ than as a link to its page. An inherited example that creates the original is
627
+ rewritten for you; what's left is prose that names it, in an arg's docs or your own.
628
+ 8. Typecheck, run the tests, and `bun run build:cli` from the repo root.
629
+ 9. Review before calling it done. Read the original's constructor and the new one side
630
+ by side, resource by resource: args, options, names, what's read back. Then read the
631
+ generated page.
632
+
633
+ The existing ports are the reference, all in `aws/v5/`: `alb.ts` for a custom domain
634
+ with aliases, and a method that looks a part up when it's asked for (`getListener`);
635
+ `apigatewayv2.ts` for routes, authorizers and a custom domain; `sns-topic.ts` for named subscribers; `bucket.ts` for
636
+ one resource built from many notifications; `cognito-user-pool.ts` for triggers and a
637
+ linkable client; `redis.ts` for dev mode and `get`; `postgres.ts` for the same with an
638
+ optional group of parts (the proxy) and a part per item in a list; `aurora.ts` for a
639
+ `get` that finds the rest of what it references, and a transform that applies to more
640
+ than one part; `cluster.ts` for the smallest one: nothing moved, so no takeover map,
641
+ and a `get` that takes args next to the id; `efs.ts` for a part per item of a list
642
+ that's only known on deploy (a mount target per subnet), and a `get` that finds the
643
+ other part it needs; `dsql.ts` for parts in another region, and features that each add a
644
+ group of parts; `task.ts` for parts per item of a plain list (containers), a part
645
+ that's built later, a stub in `sst dev`, and outputs the CLI reads; `service.ts` for
646
+ groups of parts that depend on an arg (a load balancer of its own, or one it
647
+ shares), parts made from a plain list of rules, a part that's read from `nodes` and
648
+ only exists sometimes, and a part that's created in `sst dev` too; `cron-v2.ts` for a
649
+ function the component may be given or may create, next to another component it's
650
+ given (a `Task`); `dynamo.ts` for required args next to `get`, and a static method
651
+ replaced by `get`; `function.ts` for a component 4.x built almost entirely inside
652
+ `.apply()`, with parts that are created later.