sst 1.16.0 → 2.0.0-rc.0

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 (518) hide show
  1. package/LICENSE +21 -0
  2. package/{dist/app.d.ts → app.d.ts} +8 -1
  3. package/app.js +122 -0
  4. package/{dist/bootstrap.d.ts → bootstrap.d.ts} +1 -0
  5. package/bootstrap.js +79 -0
  6. package/{dist/bus.d.ts → bus.d.ts} +0 -0
  7. package/{dist/bus.js → bus.js} +0 -0
  8. package/{dist/cache.d.ts → cache.d.ts} +0 -0
  9. package/{dist/cache.js → cache.js} +0 -0
  10. package/{dist/cdk → cdk}/cloudformation-deployments.d.ts +1 -1
  11. package/{dist/cdk → cdk}/cloudformation-deployments.js +1 -0
  12. package/{dist/cdk → cdk}/deploy-stack.d.ts +0 -0
  13. package/{dist/cdk → cdk}/deploy-stack.js +13 -6
  14. package/{dist/cli → cli}/commands/bind.d.ts +3 -1
  15. package/{dist/cli → cli}/commands/bind.js +8 -4
  16. package/{dist/cli → cli}/commands/build.d.ts +2 -0
  17. package/cli/commands/build.js +12 -0
  18. package/cli/commands/console.d.ts +9 -0
  19. package/cli/commands/console.js +15 -0
  20. package/{dist/cli → cli}/commands/deploy.d.ts +7 -1
  21. package/cli/commands/deploy.js +48 -0
  22. package/cli/commands/dev.d.ts +11 -0
  23. package/cli/commands/dev.js +188 -0
  24. package/cli/commands/env.d.ts +11 -0
  25. package/cli/commands/env.js +39 -0
  26. package/cli/commands/plugins/kysely.d.ts +1 -0
  27. package/cli/commands/plugins/kysely.js +91 -0
  28. package/cli/commands/plugins/pothos.d.ts +1 -0
  29. package/cli/commands/plugins/pothos.js +52 -0
  30. package/cli/commands/plugins/warmer.d.ts +1 -0
  31. package/cli/commands/plugins/warmer.js +33 -0
  32. package/cli/commands/remove.d.ts +13 -0
  33. package/cli/commands/remove.js +39 -0
  34. package/{dist/cli → cli}/commands/secrets/get.d.ts +2 -0
  35. package/{dist/cli → cli}/commands/secrets/get.js +0 -0
  36. package/{dist/cli → cli}/commands/secrets/list.d.ts +2 -0
  37. package/{dist/cli → cli}/commands/secrets/list.js +5 -5
  38. package/{dist/cli → cli}/commands/secrets/remove.d.ts +2 -0
  39. package/{dist/cli → cli}/commands/secrets/remove.js +0 -0
  40. package/{dist/cli → cli}/commands/secrets/secrets.d.ts +0 -0
  41. package/{dist/cli → cli}/commands/secrets/secrets.js +0 -0
  42. package/{dist/cli → cli}/commands/secrets/set.d.ts +2 -0
  43. package/{dist/cli → cli}/commands/secrets/set.js +13 -11
  44. package/{dist/cli → cli}/commands/update.d.ts +2 -0
  45. package/{dist/cli → cli}/commands/update.js +17 -21
  46. package/cli/local/router.d.ts +42 -0
  47. package/cli/local/router.js +43 -0
  48. package/cli/local/server.d.ts +20 -0
  49. package/cli/local/server.js +212 -0
  50. package/cli/program.d.ts +9 -0
  51. package/{dist/cli → cli}/program.js +6 -1
  52. package/{dist/cli → cli}/spinner.d.ts +0 -0
  53. package/{dist/cli → cli}/spinner.js +0 -0
  54. package/cli/sst.d.ts +2 -0
  55. package/{dist/cli → cli}/sst.js +27 -16
  56. package/cli/telemetry/environment.d.ts +15 -0
  57. package/cli/telemetry/environment.js +27 -0
  58. package/cli/telemetry/post-payload.d.ts +1 -0
  59. package/cli/telemetry/post-payload.js +18 -0
  60. package/cli/telemetry/project-id.d.ts +2 -0
  61. package/cli/telemetry/project-id.js +47 -0
  62. package/cli/telemetry/telemetry.d.ts +4 -0
  63. package/cli/telemetry/telemetry.js +90 -0
  64. package/cli/ui/deploy.d.ts +8 -0
  65. package/{dist/cli → cli}/ui/deploy.js +39 -1
  66. package/{dist/config.d.ts → config.d.ts} +0 -0
  67. package/{dist/config.js → config.js} +16 -4
  68. package/{dist/constructs → constructs}/Api.d.ts +98 -12
  69. package/{dist/constructs → constructs}/Api.js +93 -7
  70. package/{dist/constructs → constructs}/ApiGatewayV1Api.d.ts +0 -0
  71. package/{dist/constructs → constructs}/ApiGatewayV1Api.js +10 -5
  72. package/{dist/constructs → constructs}/App.d.ts +4 -26
  73. package/{dist/constructs → constructs}/App.js +119 -99
  74. package/{dist/constructs → constructs}/AppSyncApi.d.ts +3 -3
  75. package/{dist/constructs → constructs}/AppSyncApi.js +27 -20
  76. package/constructs/AstroSite.d.ts +25 -0
  77. package/constructs/AstroSite.js +111 -0
  78. package/constructs/AstroSite.tsdoc.d.ts +2 -0
  79. package/constructs/AstroSite.tsdoc.js +2 -0
  80. package/{dist/constructs → constructs}/Auth.d.ts +1 -1
  81. package/{dist/constructs → constructs}/Auth.js +6 -4
  82. package/{dist/constructs → constructs}/BaseSite.d.ts +0 -0
  83. package/{dist/constructs → constructs}/BaseSite.js +0 -0
  84. package/{dist/constructs → constructs}/Bucket.d.ts +0 -0
  85. package/{dist/constructs → constructs}/Bucket.js +6 -3
  86. package/{dist/constructs → constructs}/Cognito.d.ts +0 -0
  87. package/{dist/constructs → constructs}/Cognito.js +4 -1
  88. package/{dist/constructs → constructs}/Config.d.ts +0 -0
  89. package/{dist/constructs → constructs}/Config.js +0 -0
  90. package/{dist/constructs → constructs}/Construct.d.ts +0 -0
  91. package/{dist/constructs → constructs}/Construct.js +0 -0
  92. package/{dist/constructs → constructs}/Cron.d.ts +0 -0
  93. package/{dist/constructs → constructs}/Cron.js +7 -0
  94. package/{dist/constructs → constructs}/DebugApp.d.ts +2 -2
  95. package/{dist/constructs → constructs}/DebugApp.js +16 -0
  96. package/{dist/constructs → constructs}/DebugStack.d.ts +0 -0
  97. package/{dist/constructs → constructs}/DebugStack.js +4 -0
  98. package/{dist/constructs → constructs}/EdgeFunction.d.ts +1 -0
  99. package/{dist/constructs → constructs}/EdgeFunction.js +27 -22
  100. package/{dist/constructs → constructs}/EventBus.d.ts +0 -0
  101. package/{dist/constructs → constructs}/EventBus.js +7 -4
  102. package/{dist/constructs → constructs}/Function.d.ts +73 -174
  103. package/{dist/constructs → constructs}/Function.js +43 -83
  104. package/{dist/constructs → constructs}/FunctionalStack.d.ts +0 -0
  105. package/{dist/constructs → constructs}/FunctionalStack.js +5 -5
  106. package/{dist/constructs → constructs}/GraphQLApi.d.ts +11 -1
  107. package/{dist/constructs → constructs}/GraphQLApi.js +3 -0
  108. package/{dist/constructs → constructs}/Job.d.ts +0 -14
  109. package/{dist/constructs → constructs}/Job.js +50 -46
  110. package/{dist/constructs → constructs}/KinesisStream.d.ts +0 -0
  111. package/{dist/constructs → constructs}/KinesisStream.js +6 -3
  112. package/{dist/constructs → constructs}/Metadata.d.ts +1 -1
  113. package/{dist/constructs → constructs}/Metadata.js +0 -0
  114. package/constructs/NextjsSite.d.ts +33 -0
  115. package/constructs/NextjsSite.js +285 -0
  116. package/{dist/constructs → constructs}/Parameter.d.ts +0 -0
  117. package/{dist/constructs → constructs}/Parameter.js +3 -0
  118. package/{dist/constructs → constructs}/Queue.d.ts +0 -0
  119. package/{dist/constructs → constructs}/Queue.js +19 -12
  120. package/{dist/constructs → constructs}/RDS.d.ts +0 -0
  121. package/{dist/constructs → constructs}/RDS.js +26 -19
  122. package/{dist/constructs → constructs}/ReactStaticSite.d.ts +0 -0
  123. package/{dist/constructs → constructs}/ReactStaticSite.js +1 -1
  124. package/constructs/RemixSite.d.ts +28 -0
  125. package/constructs/RemixSite.js +150 -0
  126. package/constructs/RemixSite.tsdoc.d.ts +2 -0
  127. package/constructs/RemixSite.tsdoc.js +2 -0
  128. package/{dist/constructs → constructs}/Script/cfn-response.d.ts +0 -0
  129. package/{dist/constructs → constructs}/Script/cfn-response.js +0 -0
  130. package/{dist/constructs → constructs}/Script/index.d.ts +0 -0
  131. package/{dist/constructs → constructs}/Script/index.js +0 -0
  132. package/{dist/constructs → constructs}/Script/outbound.d.ts +1 -1
  133. package/{dist/constructs → constructs}/Script/outbound.js +0 -0
  134. package/{dist/constructs → constructs}/Script/util.d.ts +0 -0
  135. package/{dist/constructs → constructs}/Script/util.js +0 -0
  136. package/{dist/constructs → constructs}/Script.d.ts +0 -0
  137. package/{dist/constructs → constructs}/Script.js +13 -0
  138. package/{dist/constructs → constructs}/Secret.d.ts +0 -0
  139. package/{dist/constructs → constructs}/Secret.js +2 -0
  140. package/constructs/SolidStartSite.d.ts +24 -0
  141. package/constructs/SolidStartSite.js +103 -0
  142. package/constructs/SolidStartSite.tsdoc.d.ts +2 -0
  143. package/constructs/SolidStartSite.tsdoc.js +2 -0
  144. package/{dist/constructs/RemixSite.d.ts → constructs/SsrSite.d.ts} +69 -107
  145. package/{dist/constructs/RemixSite.js → constructs/SsrSite.js} +243 -446
  146. package/{dist/constructs → constructs}/Stack.d.ts +1 -1
  147. package/{dist/constructs → constructs}/Stack.js +19 -4
  148. package/{dist/constructs → constructs}/StaticSite.d.ts +44 -17
  149. package/{dist/constructs → constructs}/StaticSite.js +121 -72
  150. package/{dist/constructs → constructs}/Table.d.ts +0 -0
  151. package/{dist/constructs → constructs}/Table.js +9 -3
  152. package/{dist/constructs → constructs}/Topic.d.ts +0 -0
  153. package/{dist/constructs → constructs}/Topic.js +6 -3
  154. package/{dist/constructs → constructs}/ViteStaticSite.d.ts +0 -0
  155. package/{dist/constructs → constructs}/ViteStaticSite.js +2 -2
  156. package/{dist/constructs → constructs}/WebSocketApi.d.ts +0 -0
  157. package/{dist/constructs → constructs}/WebSocketApi.js +9 -4
  158. package/{dist/constructs → constructs}/context.d.ts +1 -1
  159. package/{dist/constructs → constructs}/context.js +0 -0
  160. package/{dist/constructs → constructs}/deferred_task.d.ts +0 -0
  161. package/{dist/constructs → constructs}/deferred_task.js +4 -2
  162. package/{dist/constructs → constructs/deprecated}/NextjsSite.d.ts +12 -8
  163. package/{dist/constructs → constructs/deprecated}/NextjsSite.js +112 -89
  164. package/{dist/constructs/nextjs-site → constructs/deprecated}/cross-region-helper.d.ts +0 -0
  165. package/{dist/constructs/nextjs-site → constructs/deprecated}/cross-region-helper.js +3 -3
  166. package/constructs/deprecated/index.d.ts +1 -0
  167. package/constructs/deprecated/index.js +1 -0
  168. package/{dist/constructs → constructs}/index.d.ts +3 -2
  169. package/{dist/constructs → constructs}/index.js +2 -0
  170. package/{dist/constructs → constructs}/util/apiGatewayV1AccessLog.d.ts +0 -0
  171. package/{dist/constructs → constructs}/util/apiGatewayV1AccessLog.js +0 -0
  172. package/{dist/constructs → constructs}/util/apiGatewayV2AccessLog.d.ts +0 -0
  173. package/{dist/constructs → constructs}/util/apiGatewayV2AccessLog.js +4 -4
  174. package/{dist/constructs → constructs}/util/apiGatewayV2Cors.d.ts +0 -0
  175. package/{dist/constructs → constructs}/util/apiGatewayV2Cors.js +0 -0
  176. package/{dist/constructs → constructs}/util/apiGatewayV2Domain.d.ts +0 -0
  177. package/{dist/constructs → constructs}/util/apiGatewayV2Domain.js +0 -0
  178. package/{dist/constructs → constructs}/util/appSyncApiDomain.d.ts +1 -1
  179. package/{dist/constructs → constructs}/util/appSyncApiDomain.js +15 -9
  180. package/{dist/constructs → constructs}/util/builder.d.ts +0 -0
  181. package/{dist/constructs → constructs}/util/builder.js +0 -0
  182. package/{dist/constructs → constructs}/util/duration.d.ts +0 -0
  183. package/{dist/constructs → constructs}/util/duration.js +0 -0
  184. package/{dist/constructs → constructs}/util/functionBinding.d.ts +0 -0
  185. package/{dist/constructs → constructs}/util/functionBinding.js +0 -0
  186. package/{dist/constructs → constructs}/util/functionUrlCors.d.ts +0 -0
  187. package/{dist/constructs → constructs}/util/functionUrlCors.js +0 -0
  188. package/{dist/constructs → constructs}/util/permission.d.ts +0 -0
  189. package/{dist/constructs → constructs}/util/permission.js +32 -16
  190. package/{dist/constructs → constructs}/util/python/bundling.d.ts +0 -0
  191. package/{dist/constructs → constructs}/util/python/bundling.js +0 -0
  192. package/{dist/constructs → constructs}/util/size.d.ts +0 -0
  193. package/{dist/constructs → constructs}/util/size.js +0 -0
  194. package/{dist/constructs → constructs}/util/warning.d.ts +0 -0
  195. package/{dist/constructs → constructs}/util/warning.js +0 -0
  196. package/{dist/context → context}/context.d.ts +1 -1
  197. package/{dist/context → context}/context.js +3 -4
  198. package/{dist/context → context}/handler.d.ts +0 -0
  199. package/{dist/context → context}/handler.js +1 -1
  200. package/{dist/context → context}/index.d.ts +0 -0
  201. package/{dist/context → context}/index.js +0 -0
  202. package/{dist/credentials.d.ts → credentials.d.ts} +3 -1
  203. package/{dist/credentials.js → credentials.js} +11 -3
  204. package/{dist/error.d.ts → error.d.ts} +0 -0
  205. package/{dist/error.js → error.js} +0 -0
  206. package/{dist/iot.d.ts → iot.d.ts} +0 -0
  207. package/{dist/iot.js → iot.js} +3 -0
  208. package/logger.d.ts +3 -0
  209. package/{dist/logger.js → logger.js} +12 -8
  210. package/node/api/index.d.ts +42 -0
  211. package/node/api/index.js +88 -0
  212. package/node/auth/adapter/adapter.d.ts +3 -0
  213. package/node/auth/adapter/adapter.js +3 -0
  214. package/node/auth/adapter/facebook.d.ts +2 -0
  215. package/node/auth/adapter/facebook.js +26 -0
  216. package/node/auth/adapter/github.d.ts +2 -0
  217. package/node/auth/adapter/github.js +21 -0
  218. package/node/auth/adapter/google.d.ts +9 -0
  219. package/node/auth/adapter/google.js +18 -0
  220. package/node/auth/adapter/link.d.ts +8 -0
  221. package/node/auth/adapter/link.js +39 -0
  222. package/node/auth/adapter/oauth.d.ts +25 -0
  223. package/node/auth/adapter/oauth.js +52 -0
  224. package/node/auth/adapter/oidc.d.ts +17 -0
  225. package/node/auth/adapter/oidc.js +50 -0
  226. package/node/auth/adapter/twitch.d.ts +2 -0
  227. package/node/auth/adapter/twitch.js +11 -0
  228. package/node/auth/auth.d.ts +24 -0
  229. package/node/auth/auth.js +118 -0
  230. package/node/auth/index.d.ts +10 -0
  231. package/node/auth/index.js +10 -0
  232. package/node/auth/session.d.ts +76 -0
  233. package/node/auth/session.js +109 -0
  234. package/node/bucket/index.d.ts +3 -0
  235. package/node/bucket/index.js +3 -0
  236. package/node/config/index.d.ts +13 -0
  237. package/node/config/index.js +88 -0
  238. package/node/event-bus/index.d.ts +3 -0
  239. package/node/event-bus/index.js +3 -0
  240. package/node/function/index.d.ts +3 -0
  241. package/node/function/index.js +3 -0
  242. package/node/graphql/index.d.ts +38 -0
  243. package/node/graphql/index.js +48 -0
  244. package/node/job/index.d.ts +34 -0
  245. package/node/job/index.js +51 -0
  246. package/node/kinesis-stream/index.d.ts +3 -0
  247. package/node/kinesis-stream/index.js +3 -0
  248. package/node/queue/index.d.ts +3 -0
  249. package/node/queue/index.js +3 -0
  250. package/node/rds/index.d.ts +3 -0
  251. package/node/rds/index.js +3 -0
  252. package/node/site/index.d.ts +15 -0
  253. package/node/site/index.js +64 -0
  254. package/node/table/index.d.ts +3 -0
  255. package/node/table/index.js +3 -0
  256. package/node/topic/index.d.ts +3 -0
  257. package/node/topic/index.js +3 -0
  258. package/node/util/index.d.ts +7 -0
  259. package/node/util/index.js +57 -0
  260. package/package.json +107 -40
  261. package/pothos.d.ts +8 -0
  262. package/pothos.js +156 -0
  263. package/runtime/handlers/dotnet.d.ts +1 -0
  264. package/runtime/handlers/dotnet.js +117 -0
  265. package/runtime/handlers/go.d.ts +1 -0
  266. package/runtime/handlers/go.js +105 -0
  267. package/runtime/handlers/java.d.ts +1 -0
  268. package/runtime/handlers/java.js +97 -0
  269. package/{dist/runtime → runtime/handlers}/node.d.ts +0 -0
  270. package/runtime/handlers/node.js +172 -0
  271. package/runtime/handlers/python.d.ts +1 -0
  272. package/runtime/handlers/python.js +89 -0
  273. package/{dist/runtime → runtime}/handlers.d.ts +30 -12
  274. package/runtime/handlers.js +117 -0
  275. package/{dist/runtime → runtime}/iot.d.ts +0 -0
  276. package/{dist/runtime → runtime}/iot.js +1 -1
  277. package/{dist/runtime → runtime}/runtime.d.ts +2 -0
  278. package/{dist/runtime → runtime}/runtime.js +0 -0
  279. package/{dist/runtime → runtime}/server.d.ts +0 -0
  280. package/{dist/runtime → runtime}/server.js +39 -3
  281. package/{dist/runtime → runtime}/workers.d.ts +1 -0
  282. package/{dist/runtime → runtime}/workers.js +12 -4
  283. package/{dist/cli/sst.d.ts → scrap.d.ts} +0 -0
  284. package/scrap.js +58 -0
  285. package/site-env.d.ts +13 -0
  286. package/site-env.js +47 -0
  287. package/sst.mjs +21848 -0
  288. package/{dist/stacks → stacks}/build.d.ts +0 -0
  289. package/{dist/stacks → stacks}/build.js +18 -9
  290. package/stacks/deploy.d.ts +8 -0
  291. package/stacks/deploy.js +105 -0
  292. package/stacks/index.d.ts +7 -0
  293. package/stacks/index.js +7 -0
  294. package/stacks/metadata.d.ts +9 -0
  295. package/{dist/stacks → stacks}/metadata.js +2 -14
  296. package/stacks/monitor.d.ts +27 -0
  297. package/stacks/monitor.js +111 -0
  298. package/stacks/remove.d.ts +8 -0
  299. package/stacks/remove.js +80 -0
  300. package/stacks/synth.d.ts +10 -0
  301. package/stacks/synth.js +77 -0
  302. package/support/astro-site-html-stub/index.html +99 -0
  303. package/support/base-site-archiver.cjs +12 -11
  304. package/support/base-site-archiver.mjs +20 -0
  305. package/support/bridge/bridge.mjs +59 -0
  306. package/{dist/support → support}/custom-resources/index.mjs +44209 -42781
  307. package/support/dotnet31-bootstrap/Program.cs +17 -0
  308. package/support/dotnet31-bootstrap/dotnet-bootstrap.csproj +12 -0
  309. package/support/dotnet31-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
  310. package/support/dotnet31-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
  311. package/support/dotnet31-bootstrap/release/System.Runtime.CompilerServices.Unsafe.dll +0 -0
  312. package/support/dotnet31-bootstrap/release/System.Text.Encodings.Web.dll +0 -0
  313. package/support/dotnet31-bootstrap/release/System.Text.Json.dll +0 -0
  314. package/support/dotnet31-bootstrap/release/dotnet-bootstrap +0 -0
  315. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.deps.json +230 -0
  316. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.dll +0 -0
  317. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.pdb +0 -0
  318. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +9 -0
  319. package/support/dotnet6-bootstrap/Program.cs +17 -0
  320. package/support/dotnet6-bootstrap/dotnet-bootstrap.csproj +12 -0
  321. package/support/dotnet6-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
  322. package/support/dotnet6-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
  323. package/support/dotnet6-bootstrap/release/dotnet-bootstrap +0 -0
  324. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.deps.json +59 -0
  325. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.dll +0 -0
  326. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.pdb +0 -0
  327. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +12 -0
  328. package/support/edge-function/edge-lambda-version.mjs +3 -0
  329. package/support/edge-function/edge-lambda.mjs +3 -0
  330. package/support/edge-function/s3-bucket.mjs +3 -0
  331. package/{dist/support/base-site-custom-resource/cf-invalidate.py → support/edge-function-code-replacer/lambda-code-updater.py} +56 -30
  332. package/support/java-runtime/install.sh +25 -0
  333. package/support/java-runtime/pom.xml +39 -0
  334. package/support/java-runtime/release/aws-lambda-java-core-1.2.0.jar +0 -0
  335. package/support/java-runtime/release/aws-lambda-java-runtime-interface-client-1.1.0.jar +0 -0
  336. package/support/java-runtime/release/aws-lambda-java-serialization-1.0.0.jar +0 -0
  337. package/support/nextjs-site-html-stub/index.html +99 -0
  338. package/{dist/support → support}/nodejs-runtime/index.mjs +7822 -2771
  339. package/support/python-runtime/runtime.py +116 -0
  340. package/support/rds-migrator/index.mjs +28 -0
  341. package/support/remix-site-function/edge-server.js +158 -0
  342. package/support/remix-site-function/polyfill.js +24 -0
  343. package/support/remix-site-function/regional-server.js +162 -0
  344. package/support/remix-site-html-stub/index.html +99 -0
  345. package/support/sls-nextjs-site-build-helper/build.cjs +91 -0
  346. package/support/sls-nextjs-site-build-helper/index-wrapper.js +19 -0
  347. package/support/sls-nextjs-site-stub/index.html +99 -0
  348. package/support/solid-start-site-html-stub/index.html +99 -0
  349. package/support/ssr-site-function-stub/index.js +5 -0
  350. package/util/fs.d.ts +4 -0
  351. package/util/fs.js +46 -0
  352. package/util/module.d.ts +1 -0
  353. package/util/module.js +5 -0
  354. package/util/process.d.ts +2 -0
  355. package/util/process.js +3 -0
  356. package/{dist/watcher.d.ts → watcher.d.ts} +0 -0
  357. package/{dist/watcher.js → watcher.js} +1 -1
  358. package/.build/sst-debug.log +0 -10
  359. package/.turbo/turbo-build.log +0 -2
  360. package/CHANGELOG.md +0 -332
  361. package/analyze +0 -11090
  362. package/bin/sst.mjs +0 -3
  363. package/build.mjs +0 -116
  364. package/debug.log +0 -6
  365. package/dist/app.js +0 -92
  366. package/dist/bootstrap.js +0 -23
  367. package/dist/cli/commands/build.js +0 -8
  368. package/dist/cli/commands/deploy.js +0 -20
  369. package/dist/cli/commands/env.d.ts +0 -0
  370. package/dist/cli/commands/env.js +0 -1
  371. package/dist/cli/commands/scrap.d.ts +0 -5
  372. package/dist/cli/commands/scrap.js +0 -1
  373. package/dist/cli/commands/start.d.ts +0 -7
  374. package/dist/cli/commands/start.js +0 -136
  375. package/dist/cli/program.d.ts +0 -7
  376. package/dist/cli/ui/deploy.d.ts +0 -6
  377. package/dist/constructs/nextjs-site/custom-resource/cfn-response.d.ts +0 -19
  378. package/dist/constructs/nextjs-site/custom-resource/cfn-response.js +0 -94
  379. package/dist/constructs/nextjs-site/custom-resource/edge-lambda-version.d.ts +0 -1
  380. package/dist/constructs/nextjs-site/custom-resource/edge-lambda-version.js +0 -138
  381. package/dist/constructs/nextjs-site/custom-resource/edge-lambda.d.ts +0 -1
  382. package/dist/constructs/nextjs-site/custom-resource/edge-lambda.js +0 -136
  383. package/dist/constructs/nextjs-site/custom-resource/s3-bucket.d.ts +0 -1
  384. package/dist/constructs/nextjs-site/custom-resource/s3-bucket.js +0 -94
  385. package/dist/constructs/nextjs-site/custom-resource/util.d.ts +0 -1
  386. package/dist/constructs/nextjs-site/custom-resource/util.js +0 -4
  387. package/dist/logger.d.ts +0 -9
  388. package/dist/runtime/handlers.js +0 -72
  389. package/dist/runtime/node.js +0 -99
  390. package/dist/sst.mjs +0 -164202
  391. package/dist/stacks/deploy.d.ts +0 -33
  392. package/dist/stacks/deploy.js +0 -168
  393. package/dist/stacks/index.d.ts +0 -21
  394. package/dist/stacks/index.js +0 -57
  395. package/dist/stacks/metadata.d.ts +0 -9
  396. package/dist/support/base-site-archiver.cjs +0 -115
  397. package/dist/support/base-site-custom-resource/s3-handler.py +0 -195
  398. package/dist/support/base-site-custom-resource/s3-upload.py +0 -91
  399. package/dist/support/bridge/bridge.mjs +0 -86
  400. package/dist/support/static-site-stub/index.html +0 -90
  401. package/src/app.ts +0 -140
  402. package/src/bootstrap.ts +0 -28
  403. package/src/bus.ts +0 -81
  404. package/src/cache.ts +0 -34
  405. package/src/cdk/cloudformation-deployments.ts +0 -730
  406. package/src/cdk/deploy-stack.ts +0 -1030
  407. package/src/cli/commands/bind.ts +0 -31
  408. package/src/cli/commands/build.ts +0 -16
  409. package/src/cli/commands/deploy.ts +0 -34
  410. package/src/cli/commands/env.ts +0 -0
  411. package/src/cli/commands/scrap.ts +0 -5
  412. package/src/cli/commands/secrets/get.ts +0 -50
  413. package/src/cli/commands/secrets/list.ts +0 -66
  414. package/src/cli/commands/secrets/remove.ts +0 -36
  415. package/src/cli/commands/secrets/secrets.ts +0 -17
  416. package/src/cli/commands/secrets/set.ts +0 -59
  417. package/src/cli/commands/start.tsx +0 -162
  418. package/src/cli/commands/update.ts +0 -100
  419. package/src/cli/program.ts +0 -22
  420. package/src/cli/spinner.ts +0 -14
  421. package/src/cli/sst.ts +0 -50
  422. package/src/cli/ui/deploy.tsx +0 -139
  423. package/src/config.ts +0 -226
  424. package/src/constructs/Api.ts +0 -1448
  425. package/src/constructs/ApiGatewayV1Api.ts +0 -1481
  426. package/src/constructs/App.ts +0 -744
  427. package/src/constructs/AppSyncApi.ts +0 -1045
  428. package/src/constructs/Auth.ts +0 -252
  429. package/src/constructs/BaseSite.ts +0 -146
  430. package/src/constructs/Bucket.ts +0 -670
  431. package/src/constructs/Cognito.ts +0 -708
  432. package/src/constructs/Config.ts +0 -4
  433. package/src/constructs/Construct.ts +0 -77
  434. package/src/constructs/Cron.ts +0 -235
  435. package/src/constructs/DebugApp.ts +0 -97
  436. package/src/constructs/DebugStack.ts +0 -182
  437. package/src/constructs/EdgeFunction.ts +0 -460
  438. package/src/constructs/EventBus.ts +0 -651
  439. package/src/constructs/Function.ts +0 -1329
  440. package/src/constructs/FunctionalStack.ts +0 -90
  441. package/src/constructs/GraphQLApi.ts +0 -140
  442. package/src/constructs/Job.ts +0 -557
  443. package/src/constructs/KinesisStream.ts +0 -388
  444. package/src/constructs/Metadata.ts +0 -75
  445. package/src/constructs/NextjsSite.ts +0 -1498
  446. package/src/constructs/Parameter.ts +0 -72
  447. package/src/constructs/Queue.ts +0 -360
  448. package/src/constructs/RDS.ts +0 -578
  449. package/src/constructs/ReactStaticSite.ts +0 -66
  450. package/src/constructs/RemixSite.ts +0 -1397
  451. package/src/constructs/Script/cfn-response.ts +0 -116
  452. package/src/constructs/Script/index.ts +0 -103
  453. package/src/constructs/Script/outbound.ts +0 -59
  454. package/src/constructs/Script/package.json +0 -3
  455. package/src/constructs/Script/util.ts +0 -19
  456. package/src/constructs/Script.ts +0 -270
  457. package/src/constructs/Secret.ts +0 -66
  458. package/src/constructs/Stack.ts +0 -319
  459. package/src/constructs/StaticSite.ts +0 -995
  460. package/src/constructs/Table.ts +0 -844
  461. package/src/constructs/Topic.ts +0 -486
  462. package/src/constructs/ViteStaticSite.ts +0 -99
  463. package/src/constructs/WebSocketApi.ts +0 -687
  464. package/src/constructs/context.ts +0 -12
  465. package/src/constructs/deferred_task.ts +0 -53
  466. package/src/constructs/descs.d.ts +0 -1
  467. package/src/constructs/index.ts +0 -39
  468. package/src/constructs/nextjs-site/cross-region-helper.ts +0 -189
  469. package/src/constructs/nextjs-site/custom-resource/cfn-response.ts +0 -146
  470. package/src/constructs/nextjs-site/custom-resource/edge-lambda-version.ts +0 -162
  471. package/src/constructs/nextjs-site/custom-resource/edge-lambda.ts +0 -167
  472. package/src/constructs/nextjs-site/custom-resource/s3-bucket.ts +0 -112
  473. package/src/constructs/nextjs-site/custom-resource/util.ts +0 -11
  474. package/src/constructs/util/apiGatewayV1AccessLog.ts +0 -106
  475. package/src/constructs/util/apiGatewayV2AccessLog.ts +0 -139
  476. package/src/constructs/util/apiGatewayV2Cors.ts +0 -94
  477. package/src/constructs/util/apiGatewayV2Domain.ts +0 -312
  478. package/src/constructs/util/appSyncApiDomain.ts +0 -204
  479. package/src/constructs/util/builder.ts +0 -17
  480. package/src/constructs/util/duration.ts +0 -27
  481. package/src/constructs/util/functionBinding.ts +0 -102
  482. package/src/constructs/util/functionUrlCors.ts +0 -96
  483. package/src/constructs/util/permission.ts +0 -299
  484. package/src/constructs/util/python/bundling.ts +0 -174
  485. package/src/constructs/util/size.ts +0 -13
  486. package/src/constructs/util/warning.ts +0 -20
  487. package/src/context/context.ts +0 -79
  488. package/src/context/handler.ts +0 -53
  489. package/src/context/index.ts +0 -2
  490. package/src/credentials.ts +0 -103
  491. package/src/error.ts +0 -5
  492. package/src/iot.ts +0 -105
  493. package/src/logger.ts +0 -35
  494. package/src/runtime/handlers.ts +0 -121
  495. package/src/runtime/iot.ts +0 -16
  496. package/src/runtime/node.ts +0 -111
  497. package/src/runtime/runtime.ts +0 -27
  498. package/src/runtime/server.ts +0 -149
  499. package/src/runtime/workers.ts +0 -96
  500. package/src/stacks/build.ts +0 -69
  501. package/src/stacks/deploy.ts +0 -232
  502. package/src/stacks/index.ts +0 -73
  503. package/src/stacks/metadata.ts +0 -125
  504. package/src/watcher.ts +0 -47
  505. package/sst.config.mjs +0 -6
  506. package/support/bridge/bridge.ts +0 -136
  507. package/support/bridge/build.mjs +0 -18
  508. package/support/custom-resources/auth-keys.ts +0 -113
  509. package/support/custom-resources/build.mjs +0 -18
  510. package/support/custom-resources/cfn-response.ts +0 -151
  511. package/support/custom-resources/index.ts +0 -18
  512. package/support/custom-resources/secrets-migration.ts +0 -82
  513. package/support/custom-resources/stack-metadata.ts +0 -75
  514. package/support/custom-resources/util.ts +0 -44
  515. package/support/nodejs-runtime/index.ts +0 -69
  516. package/support/tsconfig.json +0 -11
  517. package/tsconfig.json +0 -13
  518. package/yarn-error.log +0 -75
@@ -1,138 +0,0 @@
1
- import { createRequire } from "module";
2
- const require = createRequire(import.meta.url);
3
- const AWS = require("aws-sdk");
4
- AWS.config.logger = console;
5
- import { log } from "./util.js";
6
- import * as cfnResponse from "./cfn-response.js";
7
- const lambda = new AWS.Lambda({ region: "us-east-1" });
8
- const LIVE_ALIAS = "live";
9
- export const handler = cfnResponse.safeHandler(async (cfnRequest) => {
10
- log("onEventHandler", cfnRequest);
11
- // Process request
12
- let PhysicalResourceId;
13
- let Data;
14
- const functionArn = cfnRequest.ResourceProperties.FunctionArn;
15
- const functionName = functionArn.split(":").pop();
16
- switch (cfnRequest.RequestType) {
17
- case "Create": {
18
- const ret = await createVersion(functionName);
19
- const version = ret.Version;
20
- await createAlias(functionName, version);
21
- PhysicalResourceId = `${functionArn}:${version}`;
22
- Data = { Version: version };
23
- break;
24
- }
25
- case "Update": {
26
- PhysicalResourceId = cfnRequest.PhysicalResourceId;
27
- Data = { Version: cfnRequest.PhysicalResourceId.split(":").pop() };
28
- break;
29
- }
30
- case "Delete": {
31
- await deleteOldVersions(functionName);
32
- PhysicalResourceId = cfnRequest.PhysicalResourceId;
33
- break;
34
- }
35
- default:
36
- throw new Error("Unsupported request type");
37
- }
38
- // Build response
39
- return cfnResponse.submitResponse("SUCCESS", {
40
- ...cfnRequest,
41
- PhysicalResourceId,
42
- Data,
43
- });
44
- });
45
- async function createVersion(functionName) {
46
- log(`createVersion() called with functionName`, functionName);
47
- const resp = await lambda
48
- .publishVersion({
49
- FunctionName: functionName,
50
- })
51
- .promise();
52
- log(`response`, resp);
53
- return { Version: resp.Version };
54
- }
55
- async function createAlias(functionName, version) {
56
- log(`createAlias() called with functionName`, functionName, "version", version);
57
- let resp;
58
- // Update alias
59
- try {
60
- log("updateAlias");
61
- resp = await lambda
62
- .updateAlias({
63
- Name: LIVE_ALIAS,
64
- FunctionName: functionName,
65
- FunctionVersion: version,
66
- })
67
- .promise();
68
- log("response", resp);
69
- }
70
- catch (e) {
71
- // If alias has not be created, create the alias
72
- if (e.code === "ResourceNotFoundException" &&
73
- e.message.startsWith("Alias not found")) {
74
- log("updateAlias");
75
- resp = await lambda
76
- .createAlias({
77
- Name: LIVE_ALIAS,
78
- FunctionName: functionName,
79
- FunctionVersion: version,
80
- })
81
- .promise();
82
- log("response", resp);
83
- return;
84
- }
85
- throw e;
86
- }
87
- }
88
- async function deleteOldVersions(functionName) {
89
- log(`deleteOldVersions() called with functionName`, functionName);
90
- let resp;
91
- try {
92
- // Get LIVE_ALIAS version
93
- resp = await lambda
94
- .getAlias({
95
- FunctionName: functionName,
96
- Name: LIVE_ALIAS,
97
- })
98
- .promise();
99
- log(`getAlias`, resp);
100
- const liveVersion = resp.FunctionVersion;
101
- // Get all versions
102
- resp = await lambda
103
- .listVersionsByFunction({
104
- FunctionName: functionName,
105
- MaxItems: 50,
106
- })
107
- .promise();
108
- log(`listVersionsByFunction`, resp);
109
- const versionObjs = resp.Versions || [];
110
- // Remove non LIVE_ALIAS versions
111
- for (let i = 0, l = versionObjs.length; i < l; i++) {
112
- const version = versionObjs[i].Version;
113
- if (version === liveVersion) {
114
- log("deleteVersion", version, "skipped");
115
- continue;
116
- }
117
- try {
118
- log("deleteVersion", version, "do");
119
- resp = await lambda
120
- .deleteFunction({
121
- FunctionName: functionName,
122
- Qualifier: version,
123
- })
124
- .promise();
125
- log("response", resp);
126
- }
127
- catch (e) {
128
- // Supress error because a version can fail to remove if still in use.
129
- log(`deleteVersion error`, e);
130
- }
131
- }
132
- }
133
- catch (e) {
134
- // Supress error because it is fine if a specific version fails to remove.
135
- // All versions will be removed upon removing the function.
136
- log(`deleteOldVersions error`, e);
137
- }
138
- }
@@ -1 +0,0 @@
1
- export declare const handler: (event: any) => Promise<void>;
@@ -1,136 +0,0 @@
1
- import { createRequire } from "module";
2
- const require = createRequire(import.meta.url);
3
- const AWS = require("aws-sdk");
4
- AWS.config.logger = console;
5
- import { log } from "./util.js";
6
- import * as cfnResponse from "./cfn-response.js";
7
- const s3 = new AWS.S3({ region: "us-east-1" });
8
- const lambda = new AWS.Lambda({ region: "us-east-1" });
9
- export const handler = cfnResponse.safeHandler(async (cfnRequest) => {
10
- log("onEventHandler", cfnRequest);
11
- // Get bucket name
12
- const functionName = cfnRequest.RequestType === "Create"
13
- ? generateFunctionName(cfnRequest.ResourceProperties.FunctionNamePrefix)
14
- : cfnRequest.PhysicalResourceId.split(":").pop();
15
- // Process request
16
- let PhysicalResourceId;
17
- let Data;
18
- const bucket = cfnRequest.ResourceProperties.FunctionBucket;
19
- const params = cfnRequest.ResourceProperties.FunctionParams;
20
- switch (cfnRequest.RequestType) {
21
- case "Create": {
22
- await copyAsset(bucket, params);
23
- const ret = await createFunction(functionName, params);
24
- PhysicalResourceId = ret.FunctionArn;
25
- Data = {
26
- FunctionArn: ret.FunctionArn,
27
- };
28
- break;
29
- }
30
- case "Update": {
31
- const oldParams = cfnRequest.OldResourceProperties.FunctionParams;
32
- if (isConfigurationChanged(params, oldParams)) {
33
- await updateFunctionConfiguration(functionName, params);
34
- }
35
- if (isCodeChanged(params, oldParams)) {
36
- await copyAsset(bucket, params);
37
- await updateFunctionCode(functionName, params);
38
- }
39
- PhysicalResourceId = cfnRequest.PhysicalResourceId;
40
- Data = {
41
- FunctionArn: cfnRequest.PhysicalResourceId,
42
- };
43
- break;
44
- }
45
- case "Delete": {
46
- await deleteFunction(functionName);
47
- break;
48
- }
49
- default:
50
- throw new Error("Unsupported request type");
51
- }
52
- // Build response
53
- return cfnResponse.submitResponse("SUCCESS", {
54
- ...cfnRequest,
55
- PhysicalResourceId,
56
- Data,
57
- });
58
- });
59
- function generateFunctionName(prefix) {
60
- const MAX_NAME_LENGTH = 64;
61
- const length = 20;
62
- const characters = "abcdefghijklmnopqrstuvwxyz";
63
- const charactersLength = characters.length;
64
- let result = `${prefix
65
- .toLowerCase()
66
- .slice(0, MAX_NAME_LENGTH - length - 1)}-`;
67
- for (let i = 0; i < length; i++) {
68
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
69
- }
70
- return result;
71
- }
72
- async function copyAsset(bucket, params) {
73
- log(`copyAsset() called with params`, bucket, params);
74
- // Copy
75
- log(`copy`);
76
- const resp = await s3
77
- .copyObject({
78
- Bucket: bucket,
79
- CopySource: `/${params.Code.S3Bucket}/${params.Code.S3Key}`,
80
- Key: params.Code.S3Key,
81
- })
82
- .promise();
83
- log(`response`, resp);
84
- // Update params
85
- params.Code.S3Bucket = bucket;
86
- }
87
- async function createFunction(functionName, params) {
88
- log(`createFunction() called with params`, params);
89
- const resp = await lambda
90
- .createFunction({
91
- ...params,
92
- FunctionName: functionName,
93
- })
94
- .promise();
95
- log(`response`, resp);
96
- return { FunctionArn: resp.FunctionArn };
97
- }
98
- async function updateFunctionConfiguration(functionName, params) {
99
- log(`updateFunctionConfiguration() called with params`, params);
100
- const resp = await lambda
101
- .updateFunctionConfiguration({
102
- FunctionName: functionName,
103
- ...params,
104
- Code: undefined,
105
- })
106
- .promise();
107
- log(`response`, resp);
108
- }
109
- async function updateFunctionCode(functionName, params) {
110
- log(`updateFunctionCode() called with params`, params);
111
- const resp = await lambda
112
- .updateFunctionCode({
113
- FunctionName: functionName,
114
- Publish: false,
115
- ...params.Code,
116
- })
117
- .promise();
118
- log(`response`, resp);
119
- }
120
- async function deleteFunction(functionName) {
121
- log(`deleteFunction() called with functionName`, functionName);
122
- const resp = await lambda
123
- .deleteFunction({
124
- FunctionName: functionName,
125
- })
126
- .promise();
127
- log(`response`, resp);
128
- }
129
- function isConfigurationChanged(params, oldParams) {
130
- return (Object.keys(params).length !== Object.keys(params).length ||
131
- ["Description", "Handler", "Runtime", "MemorySize", "Timeout", "Role"].some((p) => params[p] !== oldParams[p]));
132
- }
133
- function isCodeChanged(params, oldParams) {
134
- return (params.Code.S3Bucket !== oldParams.Code.S3Bucket ||
135
- params.Code.S3Key !== oldParams.Code.S3Key);
136
- }
@@ -1 +0,0 @@
1
- export declare const handler: (event: any) => Promise<void>;
@@ -1,94 +0,0 @@
1
- import { createRequire } from "module";
2
- const require = createRequire(import.meta.url);
3
- const AWS = require("aws-sdk");
4
- AWS.config.logger = console;
5
- import { log } from "./util.js";
6
- import * as cfnResponse from "./cfn-response.js";
7
- const s3 = new AWS.S3({ region: "us-east-1" });
8
- export const handler = cfnResponse.safeHandler(async (cfnRequest) => {
9
- log("onEventHandler", cfnRequest);
10
- // Get bucket name
11
- const bucketName = cfnRequest.RequestType === "Create"
12
- ? generateBucketName(cfnRequest.ResourceProperties.BucketNamePrefix)
13
- : cfnRequest.PhysicalResourceId;
14
- // Process request
15
- let responseData;
16
- switch (cfnRequest.RequestType) {
17
- case "Create":
18
- await createBucket(bucketName);
19
- responseData = {
20
- BucketName: bucketName,
21
- };
22
- break;
23
- case "Update":
24
- break;
25
- case "Delete":
26
- await emptyBucket(bucketName);
27
- await deleteBucket(bucketName);
28
- break;
29
- default:
30
- throw new Error("Unsupported request type");
31
- }
32
- // Build response
33
- return cfnResponse.submitResponse("SUCCESS", {
34
- ...cfnRequest,
35
- PhysicalResourceId: bucketName,
36
- Data: responseData,
37
- });
38
- });
39
- async function createBucket(bucketName) {
40
- log(`createBucket() called with bucketName`, bucketName);
41
- const resp = await s3
42
- .createBucket({
43
- Bucket: bucketName,
44
- })
45
- .promise();
46
- log(`response`, resp);
47
- }
48
- async function deleteBucket(bucketName) {
49
- log(`deleteBucket() called with bucketName`, bucketName);
50
- const resp = await s3
51
- .deleteBucket({
52
- Bucket: bucketName,
53
- })
54
- .promise();
55
- log(`response`, resp);
56
- }
57
- function generateBucketName(prefix) {
58
- const MAX_NAME_LENGTH = 63;
59
- const length = 20;
60
- const characters = "abcdefghijklmnopqrstuvwxyz";
61
- const charactersLength = characters.length;
62
- let result = `${prefix
63
- .toLowerCase()
64
- .slice(0, MAX_NAME_LENGTH - length - 1)}-`;
65
- for (let i = 0; i < length; i++) {
66
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
67
- }
68
- return result;
69
- }
70
- ////////////////
71
- // @aws-cdk/aws-s3/lib/auto-delete-objectshandler
72
- ////////////////
73
- async function emptyBucket(bucketName) {
74
- const listedObjects = await s3
75
- .listObjectVersions({ Bucket: bucketName })
76
- .promise();
77
- const contents = [
78
- ...(listedObjects.Versions ?? []),
79
- ...(listedObjects.DeleteMarkers ?? []),
80
- ];
81
- if (contents.length === 0) {
82
- return;
83
- }
84
- const records = contents.map((record) => ({
85
- Key: record.Key,
86
- VersionId: record.VersionId,
87
- }));
88
- await s3
89
- .deleteObjects({ Bucket: bucketName, Delete: { Objects: records } })
90
- .promise();
91
- if (listedObjects?.IsTruncated) {
92
- await emptyBucket(bucketName);
93
- }
94
- }
@@ -1 +0,0 @@
1
- export declare function log(title: any, ...args: any[]): void;
@@ -1,4 +0,0 @@
1
- /* eslint-disable no-console */
2
- export function log(title, ...args) {
3
- console.log("[provider-framework]", title, ...args.map((x) => typeof x === "object" ? JSON.stringify(x, undefined, 2) : x));
4
- }
package/dist/logger.d.ts DELETED
@@ -1,9 +0,0 @@
1
- import chalk, { ChalkInstance } from "chalk";
2
- declare type Colors = {
3
- [key in keyof typeof chalk]: typeof chalk[key] extends ChalkInstance ? key : never;
4
- }[keyof typeof chalk];
5
- export declare const Logger: {
6
- ui<T extends Colors>(color: T, ...lines: string[]): void;
7
- debug(...parts: any[]): Promise<void>;
8
- };
9
- export {};
@@ -1,72 +0,0 @@
1
- import { Context } from "@serverless-stack/node/context/context.js";
2
- import { Logger } from "../logger.js";
3
- import { useFunctions } from "../stacks/metadata.js";
4
- import path from "path";
5
- import fs from "fs/promises";
6
- import { useWatcher } from "../watcher.js";
7
- import { useBus } from "../bus.js";
8
- import { useProject } from "../app.js";
9
- export const useRuntimeHandlers = Context.memo(() => {
10
- const handlers = [];
11
- return {
12
- register: (handler) => {
13
- handlers.push(handler);
14
- },
15
- for: (runtime) => {
16
- return handlers.find((x) => x.canHandle(runtime));
17
- },
18
- };
19
- });
20
- export const useFunctionBuilder = Context.memo(() => {
21
- const artifacts = new Map();
22
- const handlers = useRuntimeHandlers();
23
- const bus = useBus();
24
- const project = useProject();
25
- const artifactPath = path.join(project.paths.out, "artifacts");
26
- const result = {
27
- subscribe: bus.forward("function.built"),
28
- artifact: (functionID) => {
29
- if (artifacts.has(functionID))
30
- return artifacts.get(functionID);
31
- return result.build(functionID);
32
- },
33
- build: async (functionID) => {
34
- Logger.debug("Building function", functionID);
35
- const handler = handlers.for("node");
36
- const functions = await useFunctions();
37
- const func = functions[functionID];
38
- const out = path.join(artifactPath, functionID);
39
- await fs.rm(out, { recursive: true });
40
- await fs.mkdir(out, { recursive: true });
41
- const result = await handler.build({
42
- functionID,
43
- out,
44
- mode: "start",
45
- handler: func.data.handler,
46
- srcPath: func.data.srcPath,
47
- });
48
- artifacts.set(functionID, {
49
- out,
50
- handler: result,
51
- });
52
- bus.publish("function.built", { functionID });
53
- return artifacts.get(functionID);
54
- },
55
- };
56
- const watcher = useWatcher();
57
- watcher.subscribe("file.changed", async (evt) => {
58
- const functions = await useFunctions();
59
- for (const [_, func] of Object.entries(functions)) {
60
- const functionID = func.data.localId;
61
- const handler = handlers.for("node");
62
- if (!handler?.shouldBuild({
63
- functionID,
64
- file: evt.properties.file,
65
- }))
66
- continue;
67
- await result.build(functionID);
68
- Logger.debug("Rebuilt function", functionID);
69
- }
70
- });
71
- return result;
72
- });
@@ -1,99 +0,0 @@
1
- import { Context } from "@serverless-stack/node/context/context.js";
2
- import path from "path";
3
- import fs from "fs";
4
- import { useProject } from "../app.js";
5
- import esbuild from "esbuild";
6
- import url from "url";
7
- import { Worker } from "worker_threads";
8
- import { useRuntimeHandlers } from "./handlers.js";
9
- import { useRuntimeWorkers } from "./workers.js";
10
- export const useNodeHandler = Context.memo(() => {
11
- const handlers = useRuntimeHandlers();
12
- const workers = useRuntimeWorkers();
13
- const cache = {};
14
- const project = useProject();
15
- const threads = new Map();
16
- handlers.register({
17
- shouldBuild: (input) => {
18
- const result = cache[input.functionID];
19
- if (!result)
20
- return false;
21
- const relative = path.relative(project.paths.root, input.file);
22
- return Boolean(result.metafile?.inputs[relative]);
23
- },
24
- startWorker: async (input) => {
25
- new Promise(async () => {
26
- const worker = new Worker(url.fileURLToPath(new URL("./support/nodejs-runtime/index.mjs", import.meta.url)), {
27
- env: input.environment,
28
- workerData: input,
29
- stdout: true,
30
- stderr: true,
31
- });
32
- worker.stdout.on("data", (data) => {
33
- workers.stdout(input.workerID, data.toString());
34
- });
35
- worker.on("exit", () => workers.exited(input.workerID));
36
- threads.set(input.workerID, worker);
37
- });
38
- },
39
- canHandle: () => true,
40
- stopWorker: async (workerID) => {
41
- const worker = threads.get(workerID);
42
- await worker?.terminate();
43
- },
44
- build: async (input) => {
45
- const exists = cache[input.functionID];
46
- const dir = path.dirname(input.handler);
47
- const ext = path.extname(input.handler);
48
- const base = path.basename(input.handler).split(".")[0];
49
- const root = project.paths.root;
50
- const file = [
51
- ".ts",
52
- ".tsx",
53
- ".mts",
54
- ".cts",
55
- ".js",
56
- ".jsx",
57
- ".mjs",
58
- ".cjs",
59
- ]
60
- .map((ext) => path.join(dir, base + ext))
61
- .find((file) => {
62
- const p = path.join(input.srcPath, file);
63
- return fs.existsSync(p);
64
- });
65
- const target = path.join(input.out, path
66
- .relative(root, path.resolve(input.srcPath))
67
- .split(path.sep)
68
- .filter((x) => x !== "node_modules")
69
- .join(path.sep), path.dirname(file), base + ".mjs");
70
- const handler = path.relative(input.out, target.replace(".mjs", ext));
71
- if (exists?.rebuild) {
72
- const result = await exists.rebuild();
73
- cache[input.functionID] = result;
74
- return handler;
75
- }
76
- if (!file)
77
- throw new Error(`Cannot find a handler file for "${input.handler}"`);
78
- const result = await esbuild.build({
79
- entryPoints: [path.join(input.srcPath, file)],
80
- platform: "node",
81
- format: "esm",
82
- target: "esnext",
83
- mainFields: ["module", "main"],
84
- external: ["mjml"],
85
- bundle: true,
86
- metafile: true,
87
- banner: {
88
- js: [
89
- `import { createRequire as topLevelCreateRequire } from 'module';`,
90
- `const require = topLevelCreateRequire(import.meta.url);`,
91
- ].join("\n"),
92
- },
93
- outfile: target,
94
- });
95
- cache[input.functionID] = result;
96
- return handler;
97
- },
98
- });
99
- });