@phila/cli 0.0.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 (278) hide show
  1. package/dist/commands/config.d.ts +30 -0
  2. package/dist/commands/config.d.ts.map +1 -0
  3. package/dist/commands/config.js +135 -0
  4. package/dist/commands/config.js.map +1 -0
  5. package/dist/commands/deploy.d.ts +2 -0
  6. package/dist/commands/deploy.d.ts.map +1 -0
  7. package/dist/commands/deploy.js +224 -0
  8. package/dist/commands/deploy.js.map +1 -0
  9. package/dist/commands/destroy.d.ts +3 -0
  10. package/dist/commands/destroy.d.ts.map +1 -0
  11. package/dist/commands/destroy.js +110 -0
  12. package/dist/commands/destroy.js.map +1 -0
  13. package/dist/commands/init.d.ts +25 -0
  14. package/dist/commands/init.d.ts.map +1 -0
  15. package/dist/commands/init.js +513 -0
  16. package/dist/commands/init.js.map +1 -0
  17. package/dist/commands/map.d.ts +8 -0
  18. package/dist/commands/map.d.ts.map +1 -0
  19. package/dist/commands/map.js +186 -0
  20. package/dist/commands/map.js.map +1 -0
  21. package/dist/commands/ship.d.ts +20 -0
  22. package/dist/commands/ship.d.ts.map +1 -0
  23. package/dist/commands/ship.js +445 -0
  24. package/dist/commands/ship.js.map +1 -0
  25. package/dist/commands/templates.d.ts +3 -0
  26. package/dist/commands/templates.d.ts.map +1 -0
  27. package/dist/commands/templates.js +120 -0
  28. package/dist/commands/templates.js.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +82 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/templates/_shared/city.config.json.tmpl +24 -0
  34. package/dist/templates/_shared/dotnet-api/Api.csproj +17 -0
  35. package/dist/templates/_shared/dotnet-api/Program.cs +58 -0
  36. package/dist/templates/_shared/dotnet-api/aws-lambda-tools-defaults.json +10 -0
  37. package/dist/templates/_shared/dotnet-api/obj/Api.csproj.nuget.dgspec.json +80 -0
  38. package/dist/templates/_shared/dotnet-api/obj/Api.csproj.nuget.g.props +15 -0
  39. package/dist/templates/_shared/dotnet-api/obj/Api.csproj.nuget.g.targets +2 -0
  40. package/dist/templates/_shared/dotnet-api/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +4 -0
  41. package/dist/templates/_shared/dotnet-api/obj/Debug/net8.0/Api.AssemblyInfo.cs +22 -0
  42. package/dist/templates/_shared/dotnet-api/obj/Debug/net8.0/Api.AssemblyInfoInputs.cache +1 -0
  43. package/dist/templates/_shared/dotnet-api/obj/Debug/net8.0/Api.GeneratedMSBuildEditorConfig.editorconfig +19 -0
  44. package/dist/templates/_shared/dotnet-api/obj/Debug/net8.0/Api.GlobalUsings.g.cs +17 -0
  45. package/dist/templates/_shared/dotnet-api/obj/Debug/net8.0/Api.assets.cache +0 -0
  46. package/dist/templates/_shared/dotnet-api/obj/Debug/net8.0/Api.csproj.AssemblyReference.cache +0 -0
  47. package/dist/templates/_shared/dotnet-api/obj/project.assets.json +708 -0
  48. package/dist/templates/_shared/dotnet-api/obj/project.nuget.cache +35 -0
  49. package/dist/templates/_shared/dotnet-api-postgres/Api.csproj +19 -0
  50. package/dist/templates/_shared/dotnet-api-postgres/Program.cs +167 -0
  51. package/dist/templates/_shared/dotnet-api-postgres/aws-lambda-tools-defaults.json +10 -0
  52. package/dist/templates/_shared/dotnet-api-postgres/obj/Api.csproj.nuget.dgspec.json +88 -0
  53. package/dist/templates/_shared/dotnet-api-postgres/obj/Api.csproj.nuget.g.props +15 -0
  54. package/dist/templates/_shared/dotnet-api-postgres/obj/Api.csproj.nuget.g.targets +2 -0
  55. package/dist/templates/_shared/dotnet-api-postgres/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +4 -0
  56. package/dist/templates/_shared/dotnet-api-postgres/obj/Debug/net8.0/Api.AssemblyInfo.cs +22 -0
  57. package/dist/templates/_shared/dotnet-api-postgres/obj/Debug/net8.0/Api.AssemblyInfoInputs.cache +1 -0
  58. package/dist/templates/_shared/dotnet-api-postgres/obj/Debug/net8.0/Api.GeneratedMSBuildEditorConfig.editorconfig +19 -0
  59. package/dist/templates/_shared/dotnet-api-postgres/obj/Debug/net8.0/Api.GlobalUsings.g.cs +17 -0
  60. package/dist/templates/_shared/dotnet-api-postgres/obj/Debug/net8.0/Api.assets.cache +0 -0
  61. package/dist/templates/_shared/dotnet-api-postgres/obj/project.assets.json +106 -0
  62. package/dist/templates/_shared/dotnet-api-postgres/obj/project.nuget.cache +15 -0
  63. package/dist/templates/_shared/nuxt-frontend/app.vue +3 -0
  64. package/dist/templates/_shared/nuxt-frontend/nuxt.config.ts +25 -0
  65. package/dist/templates/_shared/nuxt-frontend/package.json.tmpl +19 -0
  66. package/dist/templates/_shared/nuxt-frontend/pages/index.vue +6 -0
  67. package/dist/templates/_shared/nuxt-frontend/public/.gitkeep +0 -0
  68. package/dist/templates/_shared/nuxt-frontend/tsconfig.json +3 -0
  69. package/dist/templates/_shared/webapp-cdk-package.json.tmpl +23 -0
  70. package/dist/templates/_shared/webapp-frontend/app.vue +3 -0
  71. package/dist/templates/_shared/webapp-frontend/nuxt.config.ts +25 -0
  72. package/dist/templates/_shared/webapp-frontend/package.json.tmpl +19 -0
  73. package/dist/templates/_shared/webapp-frontend/pages/index.vue +7 -0
  74. package/dist/templates/_shared/webapp-frontend/public/.gitkeep +0 -0
  75. package/dist/templates/_shared/webapp-frontend/tsconfig.json +3 -0
  76. package/dist/templates/lambda-api-nodejs/README.md.tmpl +203 -0
  77. package/dist/templates/lambda-api-nodejs/apps/__lambdaName__/index.ts +89 -0
  78. package/dist/templates/lambda-api-nodejs/apps/__lambdaName__/package.json +17 -0
  79. package/dist/templates/lambda-api-nodejs/apps/__lambdaName__/tsconfig.json +8 -0
  80. package/dist/templates/lambda-api-nodejs/cdk/app.ts.tmpl +53 -0
  81. package/dist/templates/lambda-api-nodejs/cdk/cdk.json +68 -0
  82. package/dist/templates/lambda-api-nodejs/cdk/package.json +23 -0
  83. package/dist/templates/lambda-api-nodejs/cdk/tsconfig.json +9 -0
  84. package/dist/templates/lambda-api-nodejs/package.json.tmpl +20 -0
  85. package/dist/templates/lambda-api-nodejs/tsconfig.json +27 -0
  86. package/dist/templates/lambda-dynamo-api/README.md.tmpl +184 -0
  87. package/dist/templates/lambda-dynamo-api/apps/__lambdaName__/index.ts +109 -0
  88. package/dist/templates/lambda-dynamo-api/apps/__lambdaName__/package.json +19 -0
  89. package/dist/templates/lambda-dynamo-api/apps/__lambdaName__/tsconfig.json +24 -0
  90. package/dist/templates/lambda-dynamo-api/cdk/app.ts.tmpl +59 -0
  91. package/dist/templates/lambda-dynamo-api/cdk/cdk.json +73 -0
  92. package/dist/templates/lambda-dynamo-api/cdk/package.json +23 -0
  93. package/dist/templates/lambda-dynamo-api/cdk/tsconfig.json +14 -0
  94. package/dist/templates/lambda-dynamo-api/package.json.tmpl +20 -0
  95. package/dist/templates/lambda-dynamo-api/tsconfig.json +27 -0
  96. package/dist/templates/lambda-postgres-api/README.md.tmpl +234 -0
  97. package/dist/templates/lambda-postgres-api/apps/__lambdaName__/index.ts +76 -0
  98. package/dist/templates/lambda-postgres-api/apps/__lambdaName__/package.json +18 -0
  99. package/dist/templates/lambda-postgres-api/apps/__lambdaName__/tsconfig.json +26 -0
  100. package/dist/templates/lambda-postgres-api/cdk/app.ts.tmpl +55 -0
  101. package/dist/templates/lambda-postgres-api/cdk/cdk.json +4 -0
  102. package/dist/templates/lambda-postgres-api/cdk/package.json +23 -0
  103. package/dist/templates/lambda-postgres-api/cdk/tsconfig.json +25 -0
  104. package/dist/templates/lambda-postgres-api/package.json.tmpl +20 -0
  105. package/dist/templates/lambda-postgres-api/tsconfig.json +11 -0
  106. package/dist/templates/static-site/README.md.tmpl +72 -0
  107. package/dist/templates/static-site/cdk/app.ts.tmpl +50 -0
  108. package/dist/templates/static-site/cdk/cdk.json +68 -0
  109. package/dist/templates/static-site/cdk/package.json +23 -0
  110. package/dist/templates/static-site/cdk/tsconfig.json +9 -0
  111. package/dist/templates/static-site/frontend/.gitkeep +0 -0
  112. package/dist/templates/static-site/frontend/README.md +41 -0
  113. package/dist/templates/static-site/frontend/package.json +9 -0
  114. package/dist/templates/static-site/package.json.tmpl +19 -0
  115. package/dist/templates/static-site/tsconfig.json +27 -0
  116. package/dist/templates/webapp-ecs-dotnet/README.md.tmpl +213 -0
  117. package/dist/templates/webapp-ecs-dotnet/apps/api/Api.csproj +12 -0
  118. package/dist/templates/webapp-ecs-dotnet/apps/api/Dockerfile +30 -0
  119. package/dist/templates/webapp-ecs-dotnet/apps/api/Program.cs +85 -0
  120. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Api.csproj.nuget.dgspec.json +70 -0
  121. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Api.csproj.nuget.g.props +15 -0
  122. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Api.csproj.nuget.g.targets +2 -0
  123. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +4 -0
  124. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfo.cs +22 -0
  125. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfoInputs.cache +1 -0
  126. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Debug/net8.0/Api.GeneratedMSBuildEditorConfig.editorconfig +19 -0
  127. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Debug/net8.0/Api.GlobalUsings.g.cs +17 -0
  128. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/Debug/net8.0/Api.assets.cache +0 -0
  129. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/project.assets.json +75 -0
  130. package/dist/templates/webapp-ecs-dotnet/apps/api/obj/project.nuget.cache +8 -0
  131. package/dist/templates/webapp-ecs-dotnet/cdk/app.ts.tmpl +60 -0
  132. package/dist/templates/webapp-ecs-dotnet/cdk/cdk.json +38 -0
  133. package/dist/templates/webapp-ecs-dotnet/cdk/tsconfig.json +25 -0
  134. package/dist/templates/webapp-ecs-dotnet/package.json.tmpl +23 -0
  135. package/dist/templates/webapp-ecs-dotnet/tsconfig.json +26 -0
  136. package/dist/templates/webapp-ecs-node/README.md.tmpl +207 -0
  137. package/dist/templates/webapp-ecs-node/apps/api/Dockerfile +33 -0
  138. package/dist/templates/webapp-ecs-node/apps/api/index.ts +74 -0
  139. package/dist/templates/webapp-ecs-node/apps/api/package.json +22 -0
  140. package/dist/templates/webapp-ecs-node/apps/api/tsconfig.json +18 -0
  141. package/dist/templates/webapp-ecs-node/cdk/app.ts.tmpl +60 -0
  142. package/dist/templates/webapp-ecs-node/cdk/cdk.json +38 -0
  143. package/dist/templates/webapp-ecs-node/cdk/tsconfig.json +25 -0
  144. package/dist/templates/webapp-ecs-node/package.json.tmpl +25 -0
  145. package/dist/templates/webapp-ecs-node/tsconfig.json +26 -0
  146. package/dist/templates/webapp-ecs-postgres-dotnet/README.md.tmpl +271 -0
  147. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/Api.csproj +17 -0
  148. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/Dockerfile +30 -0
  149. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/Program.cs +194 -0
  150. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Api.csproj.nuget.dgspec.json +80 -0
  151. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Api.csproj.nuget.g.props +19 -0
  152. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Api.csproj.nuget.g.targets +6 -0
  153. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +4 -0
  154. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfo.cs +22 -0
  155. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfoInputs.cache +1 -0
  156. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.GeneratedMSBuildEditorConfig.editorconfig +19 -0
  157. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.GlobalUsings.g.cs +17 -0
  158. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.assets.cache +0 -0
  159. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.csproj.AssemblyReference.cache +0 -0
  160. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/project.assets.json +395 -0
  161. package/dist/templates/webapp-ecs-postgres-dotnet/apps/api/obj/project.nuget.cache +49 -0
  162. package/dist/templates/webapp-ecs-postgres-dotnet/cdk/app.ts.tmpl +62 -0
  163. package/dist/templates/webapp-ecs-postgres-dotnet/cdk/cdk.json +38 -0
  164. package/dist/templates/webapp-ecs-postgres-dotnet/cdk/tsconfig.json +25 -0
  165. package/dist/templates/webapp-ecs-postgres-dotnet/package.json.tmpl +23 -0
  166. package/dist/templates/webapp-ecs-postgres-dotnet/tsconfig.json +26 -0
  167. package/dist/templates/webapp-ecs-postgres-node/README.md.tmpl +261 -0
  168. package/dist/templates/webapp-ecs-postgres-node/apps/api/Dockerfile +33 -0
  169. package/dist/templates/webapp-ecs-postgres-node/apps/api/index.ts +160 -0
  170. package/dist/templates/webapp-ecs-postgres-node/apps/api/package.json +25 -0
  171. package/dist/templates/webapp-ecs-postgres-node/apps/api/tsconfig.json +18 -0
  172. package/dist/templates/webapp-ecs-postgres-node/cdk/app.ts.tmpl +62 -0
  173. package/dist/templates/webapp-ecs-postgres-node/cdk/cdk.json +38 -0
  174. package/dist/templates/webapp-ecs-postgres-node/cdk/tsconfig.json +25 -0
  175. package/dist/templates/webapp-ecs-postgres-node/package.json.tmpl +25 -0
  176. package/dist/templates/webapp-ecs-postgres-node/tsconfig.json +26 -0
  177. package/dist/templates/webapp-lambda-dotnet/README.md.tmpl +188 -0
  178. package/dist/templates/webapp-lambda-dotnet/apps/api/Api.csproj +17 -0
  179. package/dist/templates/webapp-lambda-dotnet/apps/api/Program.cs +58 -0
  180. package/dist/templates/webapp-lambda-dotnet/apps/api/aws-lambda-tools-defaults.json +10 -0
  181. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Api.csproj.nuget.dgspec.json +80 -0
  182. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Api.csproj.nuget.g.props +15 -0
  183. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Api.csproj.nuget.g.targets +2 -0
  184. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +4 -0
  185. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfo.cs +22 -0
  186. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfoInputs.cache +1 -0
  187. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Debug/net8.0/Api.GeneratedMSBuildEditorConfig.editorconfig +19 -0
  188. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Debug/net8.0/Api.GlobalUsings.g.cs +17 -0
  189. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Debug/net8.0/Api.assets.cache +0 -0
  190. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/Debug/net8.0/Api.csproj.AssemblyReference.cache +0 -0
  191. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/project.assets.json +708 -0
  192. package/dist/templates/webapp-lambda-dotnet/apps/api/obj/project.nuget.cache +35 -0
  193. package/dist/templates/webapp-lambda-dotnet/cdk/app.ts.tmpl +59 -0
  194. package/dist/templates/webapp-lambda-dotnet/cdk/cdk.json +68 -0
  195. package/dist/templates/webapp-lambda-dotnet/cdk/tsconfig.json +9 -0
  196. package/dist/templates/webapp-lambda-dotnet/package.json.tmpl +23 -0
  197. package/dist/templates/webapp-lambda-dotnet/tsconfig.json +27 -0
  198. package/dist/templates/webapp-lambda-dynamo-dotnet/README.md.tmpl +223 -0
  199. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/Api.csproj +18 -0
  200. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/Program.cs +155 -0
  201. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/aws-lambda-tools-defaults.json +10 -0
  202. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Api.csproj.nuget.dgspec.json +84 -0
  203. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Api.csproj.nuget.g.props +19 -0
  204. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Api.csproj.nuget.g.targets +2 -0
  205. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +4 -0
  206. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfo.cs +22 -0
  207. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfoInputs.cache +1 -0
  208. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Debug/net8.0/Api.GeneratedMSBuildEditorConfig.editorconfig +19 -0
  209. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Debug/net8.0/Api.GlobalUsings.g.cs +17 -0
  210. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Debug/net8.0/Api.assets.cache +0 -0
  211. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/Debug/net8.0/Api.csproj.AssemblyReference.cache +0 -0
  212. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/project.assets.json +989 -0
  213. package/dist/templates/webapp-lambda-dynamo-dotnet/apps/api/obj/project.nuget.cache +223 -0
  214. package/dist/templates/webapp-lambda-dynamo-dotnet/cdk/app.ts.tmpl +65 -0
  215. package/dist/templates/webapp-lambda-dynamo-dotnet/cdk/cdk.json +68 -0
  216. package/dist/templates/webapp-lambda-dynamo-dotnet/cdk/tsconfig.json +9 -0
  217. package/dist/templates/webapp-lambda-dynamo-dotnet/package.json.tmpl +23 -0
  218. package/dist/templates/webapp-lambda-dynamo-dotnet/tsconfig.json +27 -0
  219. package/dist/templates/webapp-lambda-dynamo-node/README.md.tmpl +189 -0
  220. package/dist/templates/webapp-lambda-dynamo-node/apps/api/index.ts +109 -0
  221. package/dist/templates/webapp-lambda-dynamo-node/apps/api/package.json +19 -0
  222. package/dist/templates/webapp-lambda-dynamo-node/apps/api/tsconfig.json +8 -0
  223. package/dist/templates/webapp-lambda-dynamo-node/cdk/app.ts.tmpl +65 -0
  224. package/dist/templates/webapp-lambda-dynamo-node/cdk/cdk.json +68 -0
  225. package/dist/templates/webapp-lambda-dynamo-node/cdk/tsconfig.json +9 -0
  226. package/dist/templates/webapp-lambda-dynamo-node/package.json.tmpl +24 -0
  227. package/dist/templates/webapp-lambda-dynamo-node/tsconfig.json +27 -0
  228. package/dist/templates/webapp-lambda-node/README.md.tmpl +179 -0
  229. package/dist/templates/webapp-lambda-node/apps/api/index.ts +100 -0
  230. package/dist/templates/webapp-lambda-node/apps/api/package.json +17 -0
  231. package/dist/templates/webapp-lambda-node/apps/api/tsconfig.json +8 -0
  232. package/dist/templates/webapp-lambda-node/cdk/app.ts.tmpl +59 -0
  233. package/dist/templates/webapp-lambda-node/cdk/cdk.json +68 -0
  234. package/dist/templates/webapp-lambda-node/cdk/tsconfig.json +9 -0
  235. package/dist/templates/webapp-lambda-node/package.json.tmpl +24 -0
  236. package/dist/templates/webapp-lambda-node/tsconfig.json +27 -0
  237. package/dist/templates/webapp-lambda-postgres-dotnet/README.md.tmpl +240 -0
  238. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/Api.csproj +19 -0
  239. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/Program.cs +167 -0
  240. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/aws-lambda-tools-defaults.json +10 -0
  241. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Api.csproj.nuget.dgspec.json +88 -0
  242. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Api.csproj.nuget.g.props +15 -0
  243. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Api.csproj.nuget.g.targets +2 -0
  244. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs +4 -0
  245. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfo.cs +22 -0
  246. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.AssemblyInfoInputs.cache +1 -0
  247. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.GeneratedMSBuildEditorConfig.editorconfig +19 -0
  248. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.GlobalUsings.g.cs +17 -0
  249. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/Debug/net8.0/Api.assets.cache +0 -0
  250. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/project.assets.json +106 -0
  251. package/dist/templates/webapp-lambda-postgres-dotnet/apps/api/obj/project.nuget.cache +15 -0
  252. package/dist/templates/webapp-lambda-postgres-dotnet/cdk/app.ts.tmpl +61 -0
  253. package/dist/templates/webapp-lambda-postgres-dotnet/cdk/cdk.json +68 -0
  254. package/dist/templates/webapp-lambda-postgres-dotnet/cdk/tsconfig.json +9 -0
  255. package/dist/templates/webapp-lambda-postgres-dotnet/package.json.tmpl +23 -0
  256. package/dist/templates/webapp-lambda-postgres-dotnet/tsconfig.json +27 -0
  257. package/dist/templates/webapp-lambda-postgres-node/README.md.tmpl +190 -0
  258. package/dist/templates/webapp-lambda-postgres-node/apps/api/index.ts +76 -0
  259. package/dist/templates/webapp-lambda-postgres-node/apps/api/package.json +18 -0
  260. package/dist/templates/webapp-lambda-postgres-node/apps/api/tsconfig.json +8 -0
  261. package/dist/templates/webapp-lambda-postgres-node/cdk/app.ts.tmpl +61 -0
  262. package/dist/templates/webapp-lambda-postgres-node/cdk/cdk.json +68 -0
  263. package/dist/templates/webapp-lambda-postgres-node/cdk/tsconfig.json +9 -0
  264. package/dist/templates/webapp-lambda-postgres-node/package.json.tmpl +24 -0
  265. package/dist/templates/webapp-lambda-postgres-node/tsconfig.json +27 -0
  266. package/dist/utils/aws.d.ts +4 -0
  267. package/dist/utils/aws.d.ts.map +1 -0
  268. package/dist/utils/aws.js +90 -0
  269. package/dist/utils/aws.js.map +1 -0
  270. package/dist/utils/dependencies.d.ts +27 -0
  271. package/dist/utils/dependencies.d.ts.map +1 -0
  272. package/dist/utils/dependencies.js +267 -0
  273. package/dist/utils/dependencies.js.map +1 -0
  274. package/dist/utils/template.d.ts +23 -0
  275. package/dist/utils/template.d.ts.map +1 -0
  276. package/dist/utils/template.js +115 -0
  277. package/dist/utils/template.js.map +1 -0
  278. package/package.json +48 -0
@@ -0,0 +1,19 @@
1
+ is_global = true
2
+ build_property.TargetFramework = net8.0
3
+ build_property.TargetPlatformMinVersion =
4
+ build_property.UsingMicrosoftNETSdkWeb = true
5
+ build_property.ProjectTypeGuids =
6
+ build_property.InvariantGlobalization =
7
+ build_property.PlatformNeutralAssembly =
8
+ build_property.EnforceExtendedAnalyzerRules =
9
+ build_property._SupportedPlatformList = Linux,macOS,Windows
10
+ build_property.RootNamespace = Api
11
+ build_property.RootNamespace = Api
12
+ build_property.ProjectDir = /Users/alejandro.lopez/code/phila-ctl/packages/cli/dist/templates/webapp-ecs-dotnet/apps/api/
13
+ build_property.EnableComHosting =
14
+ build_property.EnableGeneratedComInterfaceComImportInterop =
15
+ build_property.RazorLangVersion = 8.0
16
+ build_property.SupportLocalizedComponentNames =
17
+ build_property.GenerateRazorMetadataSourceChecksumAttributes =
18
+ build_property.MSBuildProjectDirectory = /Users/alejandro.lopez/code/phila-ctl/packages/cli/dist/templates/webapp-ecs-dotnet/apps/api
19
+ build_property._RazorSourceGeneratorDebug =
@@ -0,0 +1,17 @@
1
+ // <auto-generated/>
2
+ global using global::Microsoft.AspNetCore.Builder;
3
+ global using global::Microsoft.AspNetCore.Hosting;
4
+ global using global::Microsoft.AspNetCore.Http;
5
+ global using global::Microsoft.AspNetCore.Routing;
6
+ global using global::Microsoft.Extensions.Configuration;
7
+ global using global::Microsoft.Extensions.DependencyInjection;
8
+ global using global::Microsoft.Extensions.Hosting;
9
+ global using global::Microsoft.Extensions.Logging;
10
+ global using global::System;
11
+ global using global::System.Collections.Generic;
12
+ global using global::System.IO;
13
+ global using global::System.Linq;
14
+ global using global::System.Net.Http;
15
+ global using global::System.Net.Http.Json;
16
+ global using global::System.Threading;
17
+ global using global::System.Threading.Tasks;
@@ -0,0 +1,75 @@
1
+ {
2
+ "version": 3,
3
+ "targets": {
4
+ "net8.0": {}
5
+ },
6
+ "libraries": {},
7
+ "projectFileDependencyGroups": {
8
+ "net8.0": []
9
+ },
10
+ "packageFolders": {
11
+ "/Users/alejandro.lopez/.nuget/packages/": {}
12
+ },
13
+ "project": {
14
+ "version": "1.0.0",
15
+ "restore": {
16
+ "projectUniqueName": "/Users/alejandro.lopez/code/phila-ctl/templates/webapp-ecs-dotnet/apps/api/Api.csproj",
17
+ "projectName": "Api",
18
+ "projectPath": "/Users/alejandro.lopez/code/phila-ctl/templates/webapp-ecs-dotnet/apps/api/Api.csproj",
19
+ "packagesPath": "/Users/alejandro.lopez/.nuget/packages/",
20
+ "outputPath": "/Users/alejandro.lopez/code/phila-ctl/templates/webapp-ecs-dotnet/apps/api/obj/",
21
+ "projectStyle": "PackageReference",
22
+ "configFilePaths": [
23
+ "/Users/alejandro.lopez/.nuget/NuGet/NuGet.Config"
24
+ ],
25
+ "originalTargetFrameworks": [
26
+ "net8.0"
27
+ ],
28
+ "sources": {
29
+ "https://api.nuget.org/v3/index.json": {},
30
+ "https://philagov-102658671810.d.codeartifact.us-east-1.amazonaws.com/nuget/se-team/v3/index.json": {}
31
+ },
32
+ "frameworks": {
33
+ "net8.0": {
34
+ "targetAlias": "net8.0",
35
+ "projectReferences": {}
36
+ }
37
+ },
38
+ "warningProperties": {
39
+ "warnAsError": [
40
+ "NU1605"
41
+ ]
42
+ },
43
+ "restoreAuditProperties": {
44
+ "enableAudit": "true",
45
+ "auditLevel": "low",
46
+ "auditMode": "direct"
47
+ }
48
+ },
49
+ "frameworks": {
50
+ "net8.0": {
51
+ "targetAlias": "net8.0",
52
+ "imports": [
53
+ "net461",
54
+ "net462",
55
+ "net47",
56
+ "net471",
57
+ "net472",
58
+ "net48",
59
+ "net481"
60
+ ],
61
+ "assetTargetFallback": true,
62
+ "warn": true,
63
+ "frameworkReferences": {
64
+ "Microsoft.AspNetCore.App": {
65
+ "privateAssets": "none"
66
+ },
67
+ "Microsoft.NETCore.App": {
68
+ "privateAssets": "all"
69
+ }
70
+ },
71
+ "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/8.0.403/PortableRuntimeIdentifierGraph.json"
72
+ }
73
+ }
74
+ }
75
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "version": 2,
3
+ "dgSpecHash": "ASDKz60ePsw=",
4
+ "success": true,
5
+ "projectFilePath": "/Users/alejandro.lopez/code/phila-ctl/templates/webapp-ecs-dotnet/apps/api/Api.csproj",
6
+ "expectedPackageFiles": [],
7
+ "logs": []
8
+ }
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+ import 'source-map-support/register';
3
+ import * as path from 'path';
4
+ import { App, Aspects, Stack } from 'aws-cdk-lib';
5
+ import * as ecs from 'aws-cdk-lib/aws-ecs';
6
+ import { AwsSolutionsChecks, NIST80053R5Checks } from 'cdk-nag';
7
+ import { StaticSite, EcsApi, Confidentiality, Environment } from '@phila/constructs';
8
+
9
+ const app = new App();
10
+
11
+ // Environment is determined by CDK context
12
+ const environment = app.node.tryGetContext('environment') as Environment;
13
+
14
+ if (!environment) {
15
+ throw new Error('Environment must be specified via context. Use: cdk deploy -c environment=dev');
16
+ }
17
+
18
+ // Read compliance frameworks from context
19
+ const compliance = app.node.tryGetContext('compliance');
20
+ const complianceFrameworks = compliance ? compliance.split(',') : [];
21
+
22
+ // Application context with governance metadata
23
+ const context = {
24
+ appName: '{{appName}}',
25
+ environment,
26
+ department: '{{department}}',
27
+ team: '{{team}}',
28
+ contact: '{{contact}}',
29
+ compliance: complianceFrameworks,
30
+ confidentiality: Confidentiality.{{CONFIDENTIALITY}},
31
+ };
32
+
33
+ // Stack name follows pattern: {appName}-{environment}
34
+ const stack = new Stack(app, '{{appName}}-' + environment, {
35
+ env: {
36
+ account: process.env.CDK_DEFAULT_ACCOUNT,
37
+ region: process.env.CDK_DEFAULT_REGION || 'us-east-1',
38
+ },
39
+ stackName: '{{appName}}-' + environment,
40
+ });
41
+
42
+ // Create the StaticSite construct for the Nuxt frontend
43
+ new StaticSite(stack, '{{appName}}Site', {
44
+ ...context,
45
+ assetDir: '../frontend/dist',
46
+ });
47
+
48
+ // Create the EcsApi construct for the containerized .NET API backend
49
+ new EcsApi(stack, '{{appName}}Api', {
50
+ ...context,
51
+ apiId: 'api',
52
+ image: ecs.ContainerImage.fromAsset(path.join(__dirname, '../apps/api')),
53
+ containerPort: 80,
54
+ });
55
+
56
+ // Apply compliance checks
57
+ Aspects.of(app).add(new NIST80053R5Checks({ verbose: true }));
58
+ Aspects.of(app).add(new AwsSolutionsChecks({ verbose: true }));
59
+
60
+ app.synth();
@@ -0,0 +1,38 @@
1
+ {
2
+ "app": "npx ts-node --prefer-ts-exts app.ts",
3
+ "watch": {
4
+ "include": ["**"],
5
+ "exclude": [
6
+ "README.md",
7
+ "cdk*.json",
8
+ "**/*.d.ts",
9
+ "**/*.js",
10
+ "tsconfig.json",
11
+ "package*.json",
12
+ "node_modules",
13
+ "test"
14
+ ]
15
+ },
16
+ "context": {
17
+ "@aws-cdk/aws-lambda:recognizeLayerVersion": true,
18
+ "@aws-cdk/core:checkSecretUsage": true,
19
+ "@aws-cdk/core:target-partitions": ["aws", "aws-cn"],
20
+ "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
21
+ "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
22
+ "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true,
23
+ "@aws-cdk/aws-iam:minimizePolicies": true,
24
+ "@aws-cdk/core:validateSnapshotRemovalPolicy": true,
25
+ "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true,
26
+ "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true,
27
+ "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true,
28
+ "@aws-cdk/aws-apigateway:disableCloudWatchRole": true,
29
+ "@aws-cdk/core:enablePartitionLiterals": true,
30
+ "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true,
31
+ "@aws-cdk/aws-iam:standardizedServicePrincipals": true,
32
+ "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
33
+ "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true,
34
+ "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true,
35
+ "@aws-cdk/aws-route53-patters:useCertificate": true,
36
+ "@aws-cdk/customresources:installLatestAwsSdkDefault": false
37
+ }
38
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "commonjs",
5
+ "lib": ["ES2022"],
6
+ "declaration": true,
7
+ "strict": true,
8
+ "noImplicitAny": true,
9
+ "strictNullChecks": true,
10
+ "noImplicitThis": true,
11
+ "alwaysStrict": true,
12
+ "noUnusedLocals": false,
13
+ "noUnusedParameters": false,
14
+ "noImplicitReturns": true,
15
+ "noFallthroughCasesInSwitch": false,
16
+ "inlineSourceMap": true,
17
+ "inlineSources": true,
18
+ "experimentalDecorators": true,
19
+ "strictPropertyInitialization": false,
20
+ "outDir": "./dist",
21
+ "rootDir": "./"
22
+ },
23
+ "include": ["./*.ts"],
24
+ "exclude": ["node_modules", "cdk.out"]
25
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "{{appName}}",
3
+ "version": "1.0.0",
4
+ "description": "Web application with Nuxt frontend and .NET ECS containerized API backend",
5
+ "private": true,
6
+ "scripts": {
7
+ "build": "npm run build:frontend && npm run build:api",
8
+ "build:frontend": "cd frontend && npm run build",
9
+ "build:api": "cd apps/api && docker build -t {{appName}}-api .",
10
+ "dev": "cd frontend && npm run dev",
11
+ "test": "npm test --workspaces --if-present",
12
+ "synth": "cd cdk && cdk synth",
13
+ "deploy": "cd cdk && cdk deploy",
14
+ "diff": "cd cdk && cdk diff"
15
+ },
16
+ "workspaces": [
17
+ "cdk",
18
+ "frontend"
19
+ ],
20
+ "devDependencies": {
21
+ "typescript": "^5.3.0"
22
+ }
23
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "commonjs",
5
+ "lib": ["ES2022"],
6
+ "declaration": true,
7
+ "strict": true,
8
+ "noImplicitAny": true,
9
+ "strictNullChecks": true,
10
+ "noImplicitThis": true,
11
+ "alwaysStrict": true,
12
+ "noUnusedLocals": false,
13
+ "noUnusedParameters": false,
14
+ "noImplicitReturns": true,
15
+ "noFallthroughCasesInSwitch": false,
16
+ "inlineSourceMap": true,
17
+ "inlineSources": true,
18
+ "experimentalDecorators": true,
19
+ "strictPropertyInitialization": false,
20
+ "skipLibCheck": true,
21
+ "esModuleInterop": true,
22
+ "resolveJsonModule": true,
23
+ "forceConsistentCasingInFileNames": true
24
+ },
25
+ "exclude": ["node_modules", "cdk", "apps", "frontend"]
26
+ }
@@ -0,0 +1,207 @@
1
+ # {{appName}}
2
+
3
+ Web application with Nuxt SSG frontend and ECS containerized API backend using Philadelphia constructs.
4
+
5
+ Generated on {{timestamp}}
6
+
7
+ ## Architecture
8
+
9
+ ![Architecture Diagram](https://github.com/CityOfPhiladelphia/phila-ctl/blob/main/packages/constructs/docs/diagrams/webapp-ecs.drawio)
10
+
11
+ View the [architecture diagram](https://github.com/CityOfPhiladelphia/phila-ctl/blob/main/packages/constructs/docs/diagrams/webapp-ecs.drawio) in draw.io or VS Code with the Draw.io extension.
12
+
13
+ ## Quick Start
14
+
15
+ ### Prerequisites
16
+
17
+ - Node.js 20+
18
+ - Docker (for building container images)
19
+ - AWS CLI configured with SSO
20
+ - AWS profile named `phila-{{appName}}`
21
+
22
+ ### Setup
23
+
24
+ ```bash
25
+ # Install dependencies
26
+ npm install
27
+
28
+ # Build all packages
29
+ npm run build
30
+ ```
31
+
32
+ ### Development
33
+
34
+ ```bash
35
+ # Run frontend dev server
36
+ npm run dev
37
+
38
+ # Run API locally (requires Docker)
39
+ cd apps/api && npm run dev
40
+
41
+ # Build frontend for production
42
+ npm run build:frontend
43
+
44
+ # Build API Docker image
45
+ npm run build:api
46
+ ```
47
+
48
+ ### Deployment
49
+
50
+ ```bash
51
+ # Configure AWS profile
52
+ export AWS_PROFILE=phila-{{appName}}
53
+
54
+ # Deploy to dev environment
55
+ city deploy dev
56
+
57
+ # Deploy to test environment
58
+ city deploy test
59
+
60
+ # Deploy to production (requires confirmation)
61
+ city deploy prod
62
+ ```
63
+
64
+ ### Shipping Updates
65
+
66
+ ```bash
67
+ # Ship frontend changes to S3/CloudFront
68
+ city ship dev --web
69
+
70
+ # Ship API changes (rebuilds and deploys ECS container)
71
+ city ship dev --ecs api
72
+ ```
73
+
74
+ ## Project Structure
75
+
76
+ ```
77
+ .
78
+ ├── cdk/ # CDK infrastructure code
79
+ │ └── app.ts # Main CDK application
80
+ ├── frontend/ # Nuxt 3 SSG frontend
81
+ │ ├── pages/ # File-based routing
82
+ │ ├── app.vue # Root component
83
+ │ └── nuxt.config.ts # Nuxt configuration
84
+ ├── apps/ # Backend code
85
+ │ └── api/ # Express API container
86
+ │ ├── index.ts # API routes
87
+ │ └── Dockerfile # Container build file
88
+ └── city.config.json # City CLI configuration
89
+ ```
90
+
91
+ ## Frontend
92
+
93
+ The frontend uses [Nuxt 3](https://nuxt.com) with Static Site Generation (SSG):
94
+
95
+ - Pre-renders to static HTML for S3/CloudFront
96
+ - File-based routing in `pages/` directory
97
+ - TypeScript support enabled
98
+
99
+ ### Adding Pages
100
+
101
+ Create Vue files in `frontend/pages/`:
102
+
103
+ ```vue
104
+ <!-- frontend/pages/about.vue -->
105
+ <template>
106
+ <div>
107
+ <h1>About</h1>
108
+ </div>
109
+ </template>
110
+ ```
111
+
112
+ This automatically creates a route at `/about`.
113
+
114
+ ## API
115
+
116
+ The API uses [Express](https://expressjs.com/) running in an ECS Fargate container behind an Application Load Balancer.
117
+
118
+ ### Adding Endpoints
119
+
120
+ Edit `apps/api/index.ts`:
121
+
122
+ ```typescript
123
+ app.get('/users', (req, res) => {
124
+ res.json({ users: [] });
125
+ });
126
+ ```
127
+
128
+ ### Environment Variables
129
+
130
+ ECS containers automatically receive:
131
+ - `APP_NAME` - Application name ({{appName}})
132
+ - `ENVIRONMENT` - Current environment (dev/test/prod)
133
+
134
+ ### Local Development
135
+
136
+ Run the API locally:
137
+
138
+ ```bash
139
+ cd apps/api
140
+ npm run dev
141
+ ```
142
+
143
+ Or build and run the Docker container:
144
+
145
+ ```bash
146
+ cd apps/api
147
+ docker build -t {{appName}}-api .
148
+ docker run -p 80:80 -e APP_NAME={{appName}} -e ENVIRONMENT=dev {{appName}}-api
149
+ ```
150
+
151
+ ## Resources Created
152
+
153
+ This application creates:
154
+
155
+ **Frontend:**
156
+ - **S3 Bucket** - Static asset storage
157
+ - **CloudFront Distribution** - CDN with HTTPS
158
+ - **Origin Access Control** - Secure S3 access
159
+
160
+ **API:**
161
+ - **ECS Fargate Service** - Containerized compute
162
+ - **Application Load Balancer** - HTTP/HTTPS ingress
163
+ - **ECS Cluster** - Container orchestration
164
+ - **ECR Repository** - Docker image storage
165
+ - **VPC Security Groups** - Network security
166
+ - **IAM Roles** - Task execution permissions
167
+
168
+ **Shared:**
169
+ - **SSM Parameters** - Resource discovery
170
+ - **CloudWatch Logs** - Application logs
171
+ - **KMS Keys** - Encryption
172
+
173
+ ## URLs
174
+
175
+ After deployment, URLs are available via:
176
+
177
+ ```bash
178
+ # Frontend URL
179
+ city config list --env dev | grep cloudfront
180
+
181
+ # API URL (ALB endpoint)
182
+ city config list --env dev | grep ecs-api
183
+ ```
184
+
185
+ ## Adding a Database
186
+
187
+ To add a database, use one of these templates instead:
188
+ - `webapp-ecs-postgres-node` - For PostgreSQL
189
+
190
+ ## Scaling
191
+
192
+ ECS automatically adjusts:
193
+ - **Dev**: 1 container instance
194
+ - **Test/Prod**: 2+ container instances with auto-scaling
195
+
196
+ Container resources default to:
197
+ - CPU: 256 units (0.25 vCPU)
198
+ - Memory: 512 MB
199
+
200
+ Adjust in `cdk/app.ts` by passing `cpu` and `memoryLimitMiB` props to `EcsApi`.
201
+
202
+ ## Support
203
+
204
+ For issues or questions:
205
+ - [Philadelphia Infrastructure Library Documentation](https://github.com/CityOfPhiladelphia/phila-ctl)
206
+ - [Express Documentation](https://expressjs.com/)
207
+ - [Nuxt Documentation](https://nuxt.com/docs)
@@ -0,0 +1,33 @@
1
+ # ABOUTME: Multi-stage Docker build for Express API
2
+ # ABOUTME: Creates minimal production image with compiled TypeScript
3
+
4
+ # Build stage
5
+ FROM node:20-alpine AS builder
6
+
7
+ WORKDIR /app
8
+
9
+ COPY package*.json ./
10
+ RUN npm ci
11
+
12
+ COPY tsconfig.json ./
13
+ COPY *.ts ./
14
+ RUN npm run build
15
+
16
+ # Production stage
17
+ FROM node:20-alpine
18
+
19
+ WORKDIR /app
20
+
21
+ # Copy package files and install production dependencies only
22
+ COPY package*.json ./
23
+ RUN npm ci --omit=dev
24
+
25
+ # Copy compiled JavaScript from builder
26
+ COPY --from=builder /app/dist ./dist
27
+
28
+ # Run as non-root user for security
29
+ USER node
30
+
31
+ EXPOSE 80
32
+
33
+ CMD ["node", "dist/index.js"]
@@ -0,0 +1,74 @@
1
+ // ABOUTME: Express API server for ECS container deployment
2
+ // ABOUTME: Provides REST endpoints for the web application backend
3
+
4
+ import express, { Request, Response, NextFunction } from 'express';
5
+ import cors from 'cors';
6
+
7
+ const app = express();
8
+ const PORT = process.env.PORT || 80;
9
+
10
+ // Middleware
11
+ app.use(cors());
12
+ app.use(express.json());
13
+
14
+ // Request logging
15
+ app.use((req: Request, _res: Response, next: NextFunction) => {
16
+ console.log(`${new Date().toISOString()} ${req.method} ${req.path}`);
17
+ next();
18
+ });
19
+
20
+ // Health check endpoint (required for ALB health checks)
21
+ app.get('/health', (_req: Request, res: Response) => {
22
+ res.json({
23
+ status: 'healthy',
24
+ timestamp: new Date().toISOString(),
25
+ });
26
+ });
27
+
28
+ // Hello world endpoint
29
+ app.get('/hello', (req: Request, res: Response) => {
30
+ const name = req.query.name || 'World';
31
+ res.json({
32
+ message: `Hello, ${name}!`,
33
+ appName: process.env.APP_NAME,
34
+ environment: process.env.ENVIRONMENT,
35
+ timestamp: new Date().toISOString(),
36
+ });
37
+ });
38
+
39
+ // Example POST endpoint
40
+ app.post('/items', (req: Request, res: Response) => {
41
+ const body = req.body;
42
+ console.log('Creating item:', body);
43
+
44
+ res.status(201).json({
45
+ message: 'Item created',
46
+ item: body,
47
+ });
48
+ });
49
+
50
+ // Example GET with path parameter
51
+ app.get('/items/:id', (req: Request, res: Response) => {
52
+ const { id } = req.params;
53
+
54
+ res.json({
55
+ id,
56
+ message: `Retrieved item ${id}`,
57
+ });
58
+ });
59
+
60
+ // Error handler
61
+ app.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {
62
+ console.error('Error:', err);
63
+ res.status(500).json({
64
+ error: 'Internal Server Error',
65
+ message: err.message,
66
+ });
67
+ });
68
+
69
+ // Start server
70
+ app.listen(PORT, () => {
71
+ console.log(`Server running on port ${PORT}`);
72
+ console.log(`APP_NAME: ${process.env.APP_NAME}`);
73
+ console.log(`ENVIRONMENT: ${process.env.ENVIRONMENT}`);
74
+ });
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "api",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "build": "tsc",
8
+ "start": "node dist/index.js",
9
+ "dev": "ts-node index.ts"
10
+ },
11
+ "dependencies": {
12
+ "cors": "^2.8.5",
13
+ "express": "^4.18.2"
14
+ },
15
+ "devDependencies": {
16
+ "@types/cors": "^2.8.17",
17
+ "@types/express": "^4.17.21",
18
+ "@types/node": "^20.10.0",
19
+ "ts-node": "^10.9.0",
20
+ "typescript": "^5.3.0"
21
+ }
22
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "commonjs",
5
+ "lib": ["ES2022"],
6
+ "outDir": "./dist",
7
+ "rootDir": "./",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "declaration": true,
13
+ "declarationMap": true,
14
+ "sourceMap": true
15
+ },
16
+ "include": ["*.ts"],
17
+ "exclude": ["node_modules", "dist"]
18
+ }