brut 0.4.0 → 0.8.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 (568) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/CHANGELOG.md +36 -1
  4. data/Dockerfile.dx +19 -0
  5. data/Gemfile.lock +1 -1
  6. data/README.md +19 -0
  7. data/assets/MetroIcon.graffle +0 -0
  8. data/assets/YouTubeThumb.pxd +0 -0
  9. data/bin/build +86 -0
  10. data/bin/ci +36 -0
  11. data/bin/docs +39 -9
  12. data/bin/publish +61 -0
  13. data/bin/setup +6 -0
  14. data/brut-css/bin/build +19 -0
  15. data/brut-css/bin/ci +19 -0
  16. data/brut-css/bin/docs +19 -0
  17. data/brut-css/bin/publish +21 -0
  18. data/brut-css/bin/setup +1 -0
  19. data/brut-css/package-lock.json +2 -2
  20. data/brut-css/package.json +1 -1
  21. data/brut-css/src/css/flex.css +1 -1
  22. data/brut-css/src/docs/includes/body-and-header.html.ejs +1 -1
  23. data/brut-js/bin/build +15 -6
  24. data/brut-js/bin/docs +25 -0
  25. data/brut-js/bin/publish +21 -0
  26. data/brut-js/bin/setup +1 -0
  27. data/brut-js/dx +1 -0
  28. data/brut-js/package-lock.json +2 -2
  29. data/brut-js/package.json +1 -1
  30. data/brut-js/specs/AjaxSubmit.spec.js +100 -7
  31. data/brut-js/src/AjaxSubmit.js +76 -40
  32. data/brut.gemspec +2 -2
  33. data/brutrb.com/adrs.md +1 -0
  34. data/brutrb.com/bin/setup +1 -0
  35. data/brutrb.com/getting-started.md +3 -0
  36. data/brutrb.com/overview.md +6 -0
  37. data/brutrb.com/tutorial.md +7 -3
  38. data/docs/404.html +2 -2
  39. data/docs/adrs.html +5 -5
  40. data/docs/ai.html +3 -3
  41. data/docs/api/Brut/BackEnd/SeedData.html +1 -1
  42. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
  43. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
  44. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
  45. data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
  46. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
  47. data/docs/api/Brut/BackEnd/Validators.html +1 -1
  48. data/docs/api/Brut/BackEnd.html +1 -1
  49. data/docs/api/Brut/CLI/App.html +1 -1
  50. data/docs/api/Brut/CLI/AppRunner.html +1 -1
  51. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
  52. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
  53. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
  54. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
  55. data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
  56. data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
  57. data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
  58. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
  59. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
  60. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
  61. data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
  62. data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
  63. data/docs/api/Brut/CLI/Apps/DB.html +1 -1
  64. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
  65. data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
  66. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
  67. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
  68. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
  69. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
  70. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
  71. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
  72. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +2 -2
  73. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
  74. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
  75. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
  76. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
  77. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
  78. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
  79. data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
  80. data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
  81. data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
  82. data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
  83. data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
  84. data/docs/api/Brut/CLI/Apps/Test.html +1 -1
  85. data/docs/api/Brut/CLI/Apps.html +1 -1
  86. data/docs/api/Brut/CLI/Command.html +1 -1
  87. data/docs/api/Brut/CLI/Error.html +1 -1
  88. data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
  89. data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
  90. data/docs/api/Brut/CLI/Executor.html +1 -1
  91. data/docs/api/Brut/CLI/InvalidOption.html +1 -1
  92. data/docs/api/Brut/CLI/Options.html +1 -1
  93. data/docs/api/Brut/CLI/Output.html +1 -1
  94. data/docs/api/Brut/CLI/SystemExecError.html +1 -1
  95. data/docs/api/Brut/CLI.html +1 -1
  96. data/docs/api/Brut/FactoryBot.html +1 -1
  97. data/docs/api/Brut/Framework/App.html +1 -1
  98. data/docs/api/Brut/Framework/Config.html +1 -1
  99. data/docs/api/Brut/Framework/Container.html +1 -1
  100. data/docs/api/Brut/Framework/Error.html +1 -1
  101. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
  102. data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
  103. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
  104. data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
  105. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
  106. data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
  107. data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
  108. data/docs/api/Brut/Framework/Errors.html +1 -1
  109. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +1 -1
  110. data/docs/api/Brut/Framework/MCP.html +1 -1
  111. data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
  112. data/docs/api/Brut/Framework.html +1 -1
  113. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
  114. data/docs/api/Brut/FrontEnd/Component/Helpers.html +86 -2
  115. data/docs/api/Brut/FrontEnd/Component.html +78 -9
  116. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +3 -3
  117. data/docs/api/Brut/FrontEnd/Components/FormTag.html +3 -3
  118. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +3 -3
  119. data/docs/api/Brut/FrontEnd/Components/Input.html +3 -3
  120. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +3 -3
  121. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +3 -3
  122. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +3 -3
  123. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +3 -3
  124. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +3 -3
  125. data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
  126. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +3 -3
  127. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +3 -3
  128. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +3 -3
  129. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +3 -3
  130. data/docs/api/Brut/FrontEnd/Components.html +1 -1
  131. data/docs/api/Brut/FrontEnd/Download.html +1 -1
  132. data/docs/api/Brut/FrontEnd/Flash.html +1 -1
  133. data/docs/api/Brut/FrontEnd/Form.html +1 -1
  134. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
  135. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
  136. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
  137. data/docs/api/Brut/FrontEnd/Forms/Input.html +1 -1
  138. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +1 -1
  139. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +1 -1
  140. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
  141. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
  142. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
  143. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
  144. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
  145. data/docs/api/Brut/FrontEnd/Forms.html +1 -1
  146. data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
  147. data/docs/api/Brut/FrontEnd/Handler.html +1 -1
  148. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
  149. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
  150. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
  151. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
  152. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +1 -1
  153. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
  154. data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
  155. data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
  156. data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
  157. data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
  158. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
  159. data/docs/api/Brut/FrontEnd/Layout.html +3 -3
  160. data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
  161. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
  162. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
  163. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
  164. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
  165. data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
  166. data/docs/api/Brut/FrontEnd/Page.html +31 -23
  167. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +3 -3
  168. data/docs/api/Brut/FrontEnd/Pages.html +1 -1
  169. data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
  170. data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
  171. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
  172. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
  173. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
  174. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
  175. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
  176. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
  177. data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
  178. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
  179. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
  180. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
  181. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
  182. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
  183. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
  184. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
  185. data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
  186. data/docs/api/Brut/FrontEnd/Routing.html +1 -1
  187. data/docs/api/Brut/FrontEnd/Session.html +1 -1
  188. data/docs/api/Brut/FrontEnd.html +1 -1
  189. data/docs/api/Brut/I18n/BaseMethods.html +1 -1
  190. data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
  191. data/docs/api/Brut/I18n/ForCLI.html +1 -1
  192. data/docs/api/Brut/I18n/ForHTML.html +1 -1
  193. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
  194. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
  195. data/docs/api/Brut/I18n.html +1 -1
  196. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
  197. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +1 -1
  198. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +1 -1
  199. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +1 -1
  200. data/docs/api/Brut/Instrumentation.html +1 -1
  201. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +13 -11
  202. data/docs/api/Brut/SinatraHelpers.html +1 -1
  203. data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
  204. data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
  205. data/docs/api/Brut/SpecSupport/E2ETestServer.html +1 -1
  206. data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
  207. data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
  208. data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
  209. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
  210. data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
  211. data/docs/api/Brut/SpecSupport/HandlerSupport.html +1 -1
  212. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +1 -1
  213. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +1 -1
  214. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +1 -1
  215. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +1 -1
  216. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +1 -1
  217. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +1 -1
  218. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +1 -1
  219. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +1 -1
  220. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +1 -1
  221. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +1 -1
  222. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +1 -1
  223. data/docs/api/Brut/SpecSupport/Matchers.html +1 -1
  224. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +1 -1
  225. data/docs/api/Brut/SpecSupport/RSpecSetup.html +1 -1
  226. data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
  227. data/docs/api/Brut/SpecSupport.html +1 -1
  228. data/docs/api/Brut.html +1 -1
  229. data/docs/api/Clock.html +1 -1
  230. data/docs/api/ModuleName.html +1 -1
  231. data/docs/api/RichString.html +1 -1
  232. data/docs/api/SemanticLogger/Appender/Async.html +1 -1
  233. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +1 -1
  234. data/docs/api/Sequel/Extensions/BrutMigrations.html +1 -1
  235. data/docs/api/Sequel/Extensions.html +1 -1
  236. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
  237. data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
  238. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
  239. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
  240. data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
  241. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
  242. data/docs/api/Sequel/Plugins/FindBang.html +1 -1
  243. data/docs/api/Sequel/Plugins.html +1 -1
  244. data/docs/api/Sequel.html +1 -1
  245. data/docs/api/_index.html +1 -1
  246. data/docs/api/file.README.html +1 -1
  247. data/docs/api/index.html +1 -1
  248. data/docs/api/method_list.html +92 -76
  249. data/docs/api/top-level-namespace.html +1 -1
  250. data/docs/assets/{adrs.md.JRxZ5uYE.js → adrs.md.BxjHi9-8.js} +1 -1
  251. data/docs/assets/adrs.md.BxjHi9-8.lean.js +1 -0
  252. data/docs/assets/{app.AkS4fHzI.js → app.DyQLb4Ot.js} +1 -1
  253. data/docs/assets/chunks/@localSearchIndexroot.CmtZyrFA.js +1 -0
  254. data/docs/assets/chunks/{VPLocalSearchBox.By6un1FD.js → VPLocalSearchBox.T1iA-eJx.js} +1 -1
  255. data/docs/assets/chunks/{theme.DwiUPdci.js → theme.ChwsbWjK.js} +2 -2
  256. data/docs/assets/{components.md.BfeWD9sX.js → components.md.DHh-NwKs.js} +3 -3
  257. data/docs/assets/{configuration.md.DoSBNc0H.js → configuration.md.D8Wz3oJU.js} +1 -1
  258. data/docs/assets/{forms.md.DFveP5g_.js → forms.md.BRE85eju.js} +1 -1
  259. data/docs/assets/{getting-started.md.DZWjCVC0.js → getting-started.md.2ioiTe-B.js} +6 -3
  260. data/docs/assets/{getting-started.md.DZWjCVC0.lean.js → getting-started.md.2ioiTe-B.lean.js} +1 -1
  261. data/docs/assets/overview.md.DlKiRRG_.js +1 -0
  262. data/docs/assets/overview.md.DlKiRRG_.lean.js +1 -0
  263. data/docs/assets/tutorial.md.BIb7XT6j.js +1 -0
  264. data/docs/assets/tutorial.md.BIb7XT6j.lean.js +1 -0
  265. data/docs/assets.html +3 -3
  266. data/docs/brut-css/brut.max.css +1 -1
  267. data/docs/brut-css/classes/appearances.html +1 -1
  268. data/docs/brut-css/classes/background-colors.html +1 -1
  269. data/docs/brut-css/classes/border-colors.html +1 -1
  270. data/docs/brut-css/classes/borders.html +1 -1
  271. data/docs/brut-css/classes/dimensions.html +1 -1
  272. data/docs/brut-css/classes/flex.html +3 -3
  273. data/docs/brut-css/classes/foreground-colors.html +1 -1
  274. data/docs/brut-css/classes/junk-drawer.html +1 -1
  275. data/docs/brut-css/classes/layout.html +1 -1
  276. data/docs/brut-css/classes/lists.html +1 -1
  277. data/docs/brut-css/classes/positioning.html +1 -1
  278. data/docs/brut-css/classes/spacings.html +1 -1
  279. data/docs/brut-css/classes/typography.html +1 -1
  280. data/docs/brut-css/customization/advanced-configuration.html +1 -1
  281. data/docs/brut-css/customization/breakpoints.html +1 -1
  282. data/docs/brut-css/customization/design-system.html +1 -1
  283. data/docs/brut-css/customization/pseudo-classes.html +1 -1
  284. data/docs/brut-css/getting-started/core-concepts.html +1 -1
  285. data/docs/brut-css/getting-started/installation.html +1 -1
  286. data/docs/brut-css/getting-started/overview.html +1 -1
  287. data/docs/brut-css/getting-started/simple-example.html +1 -1
  288. data/docs/brut-css/index.html +1 -1
  289. data/docs/brut-css/properties/colors.html +1 -1
  290. data/docs/brut-css/properties/spacings.html +1 -1
  291. data/docs/brut-css/properties/typography.html +1 -1
  292. data/docs/brut-js/api/AjaxSubmit.html +56 -7
  293. data/docs/brut-js/api/AjaxSubmit.js.html +77 -41
  294. data/docs/brut-js/api/Autosubmit.html +1 -1
  295. data/docs/brut-js/api/Autosubmit.js.html +1 -1
  296. data/docs/brut-js/api/BaseCustomElement.html +1 -1
  297. data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
  298. data/docs/brut-js/api/BrutCustomElements.html +1 -1
  299. data/docs/brut-js/api/BufferedLogger.html +1 -1
  300. data/docs/brut-js/api/ConfirmSubmit.html +1 -1
  301. data/docs/brut-js/api/ConfirmSubmit.js.html +1 -1
  302. data/docs/brut-js/api/ConfirmationDialog.html +1 -1
  303. data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
  304. data/docs/brut-js/api/ConstraintViolationMessage.html +1 -1
  305. data/docs/brut-js/api/ConstraintViolationMessage.js.html +1 -1
  306. data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
  307. data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
  308. data/docs/brut-js/api/CopyToClipboard.html +1 -1
  309. data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
  310. data/docs/brut-js/api/Form.html +1 -1
  311. data/docs/brut-js/api/Form.js.html +1 -1
  312. data/docs/brut-js/api/I18nTranslation.html +1 -1
  313. data/docs/brut-js/api/I18nTranslation.js.html +1 -1
  314. data/docs/brut-js/api/LocaleDetection.html +1 -1
  315. data/docs/brut-js/api/LocaleDetection.js.html +1 -1
  316. data/docs/brut-js/api/Logger.html +1 -1
  317. data/docs/brut-js/api/Logger.js.html +1 -1
  318. data/docs/brut-js/api/Message.html +1 -1
  319. data/docs/brut-js/api/Message.js.html +1 -1
  320. data/docs/brut-js/api/PrefixedLogger.html +1 -1
  321. data/docs/brut-js/api/RichString.html +1 -1
  322. data/docs/brut-js/api/RichString.js.html +1 -1
  323. data/docs/brut-js/api/Tabs.html +1 -1
  324. data/docs/brut-js/api/Tabs.js.html +1 -1
  325. data/docs/brut-js/api/Tracing.html +1 -1
  326. data/docs/brut-js/api/Tracing.js.html +1 -1
  327. data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
  328. data/docs/brut-js/api/external-Performance.html +1 -1
  329. data/docs/brut-js/api/external-Promise.html +1 -1
  330. data/docs/brut-js/api/external-ValidityState.html +1 -1
  331. data/docs/brut-js/api/external-Window.html +1 -1
  332. data/docs/brut-js/api/external-fetch.html +1 -1
  333. data/docs/brut-js/api/global.html +1 -1
  334. data/docs/brut-js/api/index.html +1 -1
  335. data/docs/brut-js/api/index.js.html +1 -1
  336. data/docs/brut-js/api/module-testing.html +1 -1
  337. data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
  338. data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
  339. data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
  340. data/docs/brut-js/api/testing.DOMCreator.html +1 -1
  341. data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
  342. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
  343. data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
  344. data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
  345. data/docs/brut-js/api/testing_index.js.html +1 -1
  346. data/docs/brut-js.html +3 -3
  347. data/docs/business-logic.html +3 -3
  348. data/docs/cli.html +3 -3
  349. data/docs/components.html +7 -7
  350. data/docs/configuration.html +5 -5
  351. data/docs/css.html +3 -3
  352. data/docs/custom-element-tests.html +3 -3
  353. data/docs/database-access.html +3 -3
  354. data/docs/database-schema.html +3 -3
  355. data/docs/deployment.html +3 -3
  356. data/docs/dev-environment.html +3 -3
  357. data/docs/dir-structure.html +3 -3
  358. data/docs/doc-conventions.html +3 -3
  359. data/docs/end-to-end-tests.html +3 -3
  360. data/docs/features.html +3 -3
  361. data/docs/flash-and-session.html +3 -3
  362. data/docs/form-constraints.html +3 -3
  363. data/docs/forms.html +5 -5
  364. data/docs/getting-started.html +9 -6
  365. data/docs/handlers.html +3 -3
  366. data/docs/hashmap.json +1 -1
  367. data/docs/hooks.html +3 -3
  368. data/docs/i18n.html +3 -3
  369. data/docs/index.html +3 -3
  370. data/docs/instrumentation.html +3 -3
  371. data/docs/javascript.html +3 -3
  372. data/docs/jobs.html +3 -3
  373. data/docs/keyword-injection.html +3 -3
  374. data/docs/layouts.html +3 -3
  375. data/docs/lsp.html +3 -3
  376. data/docs/markdown-examples.html +3 -3
  377. data/docs/middleware.html +3 -3
  378. data/docs/overview.html +5 -5
  379. data/docs/pages.html +3 -3
  380. data/docs/recipes/alternate-layouts.html +3 -3
  381. data/docs/recipes/authentication.html +3 -3
  382. data/docs/recipes/blank-layouts.html +3 -3
  383. data/docs/recipes/custom-flash.html +3 -3
  384. data/docs/recipes/indexed-forms.html +3 -3
  385. data/docs/recipes/migrations.html +3 -3
  386. data/docs/recipes/text-field-component.html +3 -3
  387. data/docs/roadmap.html +3 -3
  388. data/docs/routes.html +3 -3
  389. data/docs/security.html +3 -3
  390. data/docs/seed-data.html +3 -3
  391. data/docs/space-time-continuum.html +3 -3
  392. data/docs/tutorial.html +5 -5
  393. data/docs/unit-tests.html +3 -3
  394. data/docs/why.html +3 -3
  395. data/lib/brut/cli/apps/scaffold.rb +1 -1
  396. data/lib/brut/framework/mcp.rb +1 -1
  397. data/lib/brut/front_end/component.rb +19 -0
  398. data/lib/brut/front_end/components/form_tag.rb +2 -2
  399. data/lib/brut/front_end/page.rb +11 -7
  400. data/lib/brut/sinatra_helpers.rb +1 -0
  401. data/lib/brut/version.rb +1 -1
  402. data/mkbrut/.gitignore +16 -0
  403. data/mkbrut/CODE_OF_CONDUCT.txt +100 -0
  404. data/mkbrut/Gemfile +3 -0
  405. data/mkbrut/Gemfile.lock +19 -0
  406. data/mkbrut/LICENSE.txt +370 -0
  407. data/mkbrut/README.md +145 -0
  408. data/mkbrut/Rakefile +2 -0
  409. data/mkbrut/bin/build +36 -0
  410. data/mkbrut/bin/ci +19 -0
  411. data/mkbrut/bin/docs +19 -0
  412. data/mkbrut/bin/publish +129 -0
  413. data/mkbrut/bin/rake +16 -0
  414. data/mkbrut/bin/setup +30 -0
  415. data/mkbrut/brut-welcome.png +0 -0
  416. data/mkbrut/deploy/.dockerignore +2 -0
  417. data/mkbrut/deploy/Dockerfile +25 -0
  418. data/mkbrut/exe/mkbrut +5 -0
  419. data/mkbrut/lib/mkbrut/app.rb +79 -0
  420. data/mkbrut/lib/mkbrut/app_id.rb +8 -0
  421. data/mkbrut/lib/mkbrut/app_name.rb +29 -0
  422. data/mkbrut/lib/mkbrut/app_options.rb +36 -0
  423. data/mkbrut/lib/mkbrut/base.rb +57 -0
  424. data/mkbrut/lib/mkbrut/cli.rb +107 -0
  425. data/mkbrut/lib/mkbrut/erb_binding_delegate.rb +20 -0
  426. data/mkbrut/lib/mkbrut/internet_identifier.rb +32 -0
  427. data/mkbrut/lib/mkbrut/invalid_identifier.rb +4 -0
  428. data/mkbrut/lib/mkbrut/ops/add_css_import.rb +42 -0
  429. data/mkbrut/lib/mkbrut/ops/add_i18n_message.rb +74 -0
  430. data/mkbrut/lib/mkbrut/ops/add_method.rb +48 -0
  431. data/mkbrut/lib/mkbrut/ops/append_to_file.rb +20 -0
  432. data/mkbrut/lib/mkbrut/ops/base_op.rb +21 -0
  433. data/mkbrut/lib/mkbrut/ops/copy_file.rb +12 -0
  434. data/mkbrut/lib/mkbrut/ops/insert_code_in_method.rb +58 -0
  435. data/mkbrut/lib/mkbrut/ops/insert_route.rb +52 -0
  436. data/mkbrut/lib/mkbrut/ops/mkdir.rb +13 -0
  437. data/mkbrut/lib/mkbrut/ops/prism_parsing_op.rb +70 -0
  438. data/mkbrut/lib/mkbrut/ops/render_template.rb +26 -0
  439. data/mkbrut/lib/mkbrut/ops/skip_file.rb +10 -0
  440. data/mkbrut/lib/mkbrut/ops.rb +16 -0
  441. data/mkbrut/lib/mkbrut/organization.rb +5 -0
  442. data/mkbrut/lib/mkbrut/prefix.rb +26 -0
  443. data/mkbrut/lib/mkbrut/prefixed_io.rb +16 -0
  444. data/mkbrut/lib/mkbrut/segments/bare_bones.rb +185 -0
  445. data/mkbrut/lib/mkbrut/segments/demo.rb +121 -0
  446. data/mkbrut/lib/mkbrut/segments/heroku.rb +30 -0
  447. data/mkbrut/lib/mkbrut/segments/sidekiq.rb +3 -0
  448. data/mkbrut/lib/mkbrut/segments.rb +8 -0
  449. data/mkbrut/lib/mkbrut/version.rb +3 -0
  450. data/mkbrut/lib/mkbrut/versions.rb +13 -0
  451. data/mkbrut/lib/mkbrut.rb +18 -0
  452. data/mkbrut/mkbrut.gemspec +32 -0
  453. data/mkbrut/templates/Base/.dockerignore +25 -0
  454. data/mkbrut/templates/Base/.env.development.erb +60 -0
  455. data/mkbrut/templates/Base/.env.test.erb +8 -0
  456. data/mkbrut/templates/Base/.gitignore +31 -0
  457. data/mkbrut/templates/Base/.projections.json +59 -0
  458. data/mkbrut/templates/Base/Dockerfile.dx +205 -0
  459. data/mkbrut/templates/Base/Gemfile.erb +53 -0
  460. data/mkbrut/templates/Base/Procfile.development +5 -0
  461. data/mkbrut/templates/Base/Procfile.test +1 -0
  462. data/mkbrut/templates/Base/README.md +4 -0
  463. data/mkbrut/templates/Base/README.md.erb +40 -0
  464. data/mkbrut/templates/Base/app/bootstrap.rb +61 -0
  465. data/mkbrut/templates/Base/app/config/i18n/en/1_defaults.rb +128 -0
  466. data/mkbrut/templates/Base/app/config/i18n/en/2_app.rb +24 -0
  467. data/mkbrut/templates/Base/app/public/static/manifest.json.erb +33 -0
  468. data/mkbrut/templates/Base/app/src/app.rb.erb +37 -0
  469. data/mkbrut/templates/Base/app/src/back_end/data_models/app_data_model.rb +5 -0
  470. data/mkbrut/templates/Base/app/src/back_end/data_models/db.rb +19 -0
  471. data/mkbrut/templates/Base/app/src/back_end/data_models/migrations/20240101130000_citext.rb +6 -0
  472. data/mkbrut/templates/Base/app/src/back_end/data_models/seed/seed_data.rb +9 -0
  473. data/mkbrut/templates/Base/app/src/front_end/components/app_component.rb +8 -0
  474. data/mkbrut/templates/Base/app/src/front_end/components/custom_element_registration.rb.erb +7 -0
  475. data/mkbrut/templates/Base/app/src/front_end/css/index.css +2 -0
  476. data/mkbrut/templates/Base/app/src/front_end/css/svgs.css +12 -0
  477. data/mkbrut/templates/Base/app/src/front_end/forms/app_form.rb +4 -0
  478. data/mkbrut/templates/Base/app/src/front_end/handlers/app_handler.rb +4 -0
  479. data/mkbrut/templates/Base/app/src/front_end/images/LogoPylon.png +0 -0
  480. data/mkbrut/templates/Base/app/src/front_end/images/LogoTransit.png +0 -0
  481. data/mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-120x120.png +0 -0
  482. data/mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-152x152.png +0 -0
  483. data/mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-167x167.png +0 -0
  484. data/mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-180x180.png +0 -0
  485. data/mkbrut/templates/Base/app/src/front_end/images/favicon.ico +0 -0
  486. data/mkbrut/templates/Base/app/src/front_end/images/icon.png +0 -0
  487. data/mkbrut/templates/Base/app/src/front_end/images/mkicons.sh +6 -0
  488. data/mkbrut/templates/Base/app/src/front_end/js/index.js +6 -0
  489. data/mkbrut/templates/Base/app/src/front_end/layouts/default_layout.rb.erb +73 -0
  490. data/mkbrut/templates/Base/app/src/front_end/pages/app_page.rb +11 -0
  491. data/mkbrut/templates/Base/app/src/front_end/pages/home_page.rb +62 -0
  492. data/mkbrut/templates/Base/app/src/front_end/support/app_session.rb +6 -0
  493. data/mkbrut/templates/Base/app/src/front_end/svgs/README.md +5 -0
  494. data/mkbrut/templates/Base/app/src/front_end/svgs/comment-button.svg +59 -0
  495. data/mkbrut/templates/Base/bin/README.md.erb +5 -0
  496. data/mkbrut/templates/Base/bin/build-assets +7 -0
  497. data/mkbrut/templates/Base/bin/ci +39 -0
  498. data/mkbrut/templates/Base/bin/console +31 -0
  499. data/mkbrut/templates/Base/bin/db +9 -0
  500. data/mkbrut/templates/Base/bin/dbconsole +51 -0
  501. data/mkbrut/templates/Base/bin/dev +25 -0
  502. data/mkbrut/templates/Base/bin/release +26 -0
  503. data/mkbrut/templates/Base/bin/run +86 -0
  504. data/mkbrut/templates/Base/bin/scaffold +9 -0
  505. data/mkbrut/templates/Base/bin/setup +256 -0
  506. data/mkbrut/templates/Base/bin/startup-message +65 -0
  507. data/mkbrut/templates/Base/bin/test +9 -0
  508. data/mkbrut/templates/Base/bin/test-server +29 -0
  509. data/mkbrut/templates/Base/bin/watch-and-build-assets +37 -0
  510. data/mkbrut/templates/Base/config.ru +16 -0
  511. data/mkbrut/templates/Base/docker-compose.dx.yml +92 -0
  512. data/mkbrut/templates/Base/dx/README.md +28 -0
  513. data/mkbrut/templates/Base/dx/bash_customizations +12 -0
  514. data/mkbrut/templates/Base/dx/bash_customizations.local +8 -0
  515. data/mkbrut/templates/Base/dx/build +107 -0
  516. data/mkbrut/templates/Base/dx/docker-compose.env.erb +25 -0
  517. data/mkbrut/templates/Base/dx/dx.sh.lib +137 -0
  518. data/mkbrut/templates/Base/dx/exec +68 -0
  519. data/mkbrut/templates/Base/dx/prune +19 -0
  520. data/mkbrut/templates/Base/dx/show-help-in-app-container-then-wait.sh +38 -0
  521. data/mkbrut/templates/Base/dx/start +30 -0
  522. data/mkbrut/templates/Base/dx/stop +23 -0
  523. data/mkbrut/templates/Base/package.json.erb +37 -0
  524. data/mkbrut/templates/Base/puma.config.rb +53 -0
  525. data/mkbrut/templates/Base/specs/e2e/home_page.spec.rb.erb +23 -0
  526. data/mkbrut/templates/Base/specs/front_end/js/SpecHelper.js +24 -0
  527. data/mkbrut/templates/Base/specs/front_end/pages/home_page.spec.rb +22 -0
  528. data/mkbrut/templates/Base/specs/lint_factories.spec.rb +7 -0
  529. data/mkbrut/templates/Base/specs/spec_helper.rb +78 -0
  530. data/mkbrut/templates/Base/specs/support.rb +2 -0
  531. data/mkbrut/templates/segments/BareBones/app/src/front_end/handlers/trigger_exception_handler.rb +24 -0
  532. data/mkbrut/templates/segments/BareBones/app/src/front_end/js/Example.js.erb +49 -0
  533. data/mkbrut/templates/segments/BareBones/specs/front_end/handlers/trigger_exception_handler.spec.rb +41 -0
  534. data/mkbrut/templates/segments/BareBones/specs/front_end/js/Example.spec.js.erb +38 -0
  535. data/mkbrut/templates/segments/Demo/app/src/back_end/data_models/db/guestbook_message.rb +3 -0
  536. data/mkbrut/templates/segments/Demo/app/src/back_end/data_models/migrations/20250628194124_guestbook.rb +14 -0
  537. data/mkbrut/templates/segments/Demo/app/src/front_end/components/flash_component.rb +36 -0
  538. data/mkbrut/templates/segments/Demo/app/src/front_end/css/constraint-violations.css +18 -0
  539. data/mkbrut/templates/segments/Demo/app/src/front_end/css/fonts.css +19 -0
  540. data/mkbrut/templates/segments/Demo/app/src/front_end/fonts/monaspace-xenon.ttf +0 -0
  541. data/mkbrut/templates/segments/Demo/app/src/front_end/forms/guestbook_message_form.rb +4 -0
  542. data/mkbrut/templates/segments/Demo/app/src/front_end/handlers/guestbook_message_handler.rb +64 -0
  543. data/mkbrut/templates/segments/Demo/app/src/front_end/pages/guestbook_page/message_component.rb +41 -0
  544. data/mkbrut/templates/segments/Demo/app/src/front_end/pages/guestbook_page.rb +43 -0
  545. data/mkbrut/templates/segments/Demo/app/src/front_end/pages/new_guestbook_message_page.rb +64 -0
  546. data/mkbrut/templates/segments/Demo/specs/back_end/data_models/db/guestbook_message.spec.rb +5 -0
  547. data/mkbrut/templates/segments/Demo/specs/e2e/guest_message.spec.rb +54 -0
  548. data/mkbrut/templates/segments/Demo/specs/factories/db/guestbook_message.factory.rb +7 -0
  549. data/mkbrut/templates/segments/Demo/specs/front_end/components/flash_component.spec.rb +5 -0
  550. data/mkbrut/templates/segments/Demo/specs/front_end/handlers/guestbook_message_handler.spec.rb +122 -0
  551. data/mkbrut/templates/segments/Demo/specs/front_end/pages/guestbook_page/message_component.spec.rb +5 -0
  552. data/mkbrut/templates/segments/Demo/specs/front_end/pages/guestbook_page.spec.rb +52 -0
  553. data/mkbrut/templates/segments/Demo/specs/front_end/pages/new_guestbook_message_page.spec.rb +5 -0
  554. data/mkbrut/templates/segments/Heroku/bin/deploy +11 -0
  555. data/mkbrut/templates/segments/Heroku/deploy/Dockerfile +125 -0
  556. data/mkbrut/templates/segments/Heroku/deploy/docker-entrypoint +15 -0
  557. data/mkbrut/templates/segments/Heroku/deploy/heroku_config.rb +26 -0
  558. metadata +188 -24
  559. data/brut-js/CHANGELOG.md +0 -5
  560. data/docs/assets/adrs.md.JRxZ5uYE.lean.js +0 -1
  561. data/docs/assets/chunks/@localSearchIndexroot.C9FqcQxD.js +0 -1
  562. data/docs/assets/overview.md.iMnwLO4x.js +0 -1
  563. data/docs/assets/overview.md.iMnwLO4x.lean.js +0 -1
  564. data/docs/assets/tutorial.md.BYXj4cOu.js +0 -1
  565. data/docs/assets/tutorial.md.BYXj4cOu.lean.js +0 -1
  566. /data/docs/assets/{components.md.BfeWD9sX.lean.js → components.md.DHh-NwKs.lean.js} +0 -0
  567. /data/docs/assets/{configuration.md.DoSBNc0H.lean.js → configuration.md.D8Wz3oJU.lean.js} +0 -0
  568. /data/docs/assets/{forms.md.DFveP5g_.lean.js → forms.md.BRE85eju.lean.js} +0 -0
@@ -0,0 +1,125 @@
1
+ # This is a multi-stage build, meaning one image will be built that
2
+ # has necessarily dev tools in it, and that image is used to create artifacts
3
+ # that will be copied into the second build, which will create the image
4
+ # you deploy to production.
5
+ #
6
+ # # Maintaing this file
7
+ #
8
+ # You own this file now. While there could be a way to create it from
9
+ # the Dockerfile.dx, for now, you'll need to stay on top of it:
10
+ #
11
+ # 1 - ensure the versions of Ruby match
12
+ # 2 - ensure the versions of NodeJS match
13
+ # 3 - ensure that anything you installed in Dockerfile.dx to make
14
+ # the app work or to pre-generate assets is set up here as well.
15
+ # You are advised to make that setup identical.
16
+ #
17
+ # You can test this locally but using the `--plaform` flag to `bin/deploy deploy`
18
+ # and running a container locally. You'll need all infrastructure available
19
+ # but it can be done to test things before you deploy. If you need to.
20
+
21
+ # Use Ruby 3.4 as a base.
22
+ FROM docker.io/library/ruby:3.4 AS base
23
+
24
+ # bin/deploy will inject this value so that your app's GIT SHA1
25
+ # is in the environment in production, thus allowing you to be more
26
+ # sure of what's actually running.
27
+ ARG app_git_sha1
28
+
29
+ WORKDIR /brut-app
30
+
31
+ # Install base packages
32
+ #
33
+ # - ca-certificates is needed for other installs
34
+ # - curl is needed generally for other installs and by Heroku
35
+ # - gnupg is a PGP replacement used in making sure new APT repos work
36
+ # - libjemalloc2 in theory speeds up Ruby
37
+ # - lsb-release is used to generically access information for this OS's version
38
+ # - wget allows us to copy/paste commands from vendors about how to install
39
+ # software even though it does the same thing as curl
40
+ RUN apt-get update --quiet --yes && \
41
+ apt-get install --no-install-recommends --quiet --yes \
42
+ ca-certificates \
43
+ curl \
44
+ gnupg \
45
+ libjemalloc2 \
46
+ lsb-release \
47
+ rsync \
48
+ wget && \
49
+ rm -rf /var/lib/apt/lists /var/cache/apt/archives
50
+
51
+ # Install the PostgreSQL client. The latest version is not available
52
+ # from Debian, so we set up our own. This should match what's in Dockerfile.dx
53
+ # and ideally the version of Postgres used in production.
54
+ #
55
+ # Incancation is based on: https://www.postgresql.org/download/linux/debian/
56
+ RUN sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \
57
+ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
58
+ apt-get update && \
59
+ apt-get --yes --quiet install postgresql-client-16 && \
60
+ rm -rf /var/lib/apt/lists /var/cache/apt/archives
61
+
62
+ # Set basic env vars for production
63
+ ENV RACK_ENV="production" \
64
+ BUNDLE_DEPLOYMENT="1" \
65
+ BUNDLE_PATH="/usr/local/bundle" \
66
+ BUNDLE_WITHOUT="development" \
67
+ APP_GIT_SHA1="${app_git_sha1}"
68
+
69
+ # This makes a new image that we'll throw away after building
70
+ # needed artifacts.
71
+ FROM base AS build
72
+
73
+ # - build-essential is needed for almost any build tool we have to install
74
+ # - git is needed to install some things
75
+ # - libpq-dev is needed by postgres
76
+ # - pkg-config is, I guess, not considered "essential" (as in build-essential),
77
+ # but still needed to install downstream stuff
78
+ RUN apt-get update --quiet --yes && \
79
+ apt-get install --no-install-recommends --quiet --yes \
80
+ build-essential \
81
+ git \
82
+ libpq-dev \
83
+ pkg-config
84
+
85
+ # Install NodeJS, per https://nodejs.org/en/download
86
+ RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && \
87
+ \. "$HOME/.nvm/nvm.sh" && \
88
+ nvm install 22 && \
89
+ node -v && nvm current && npm -v
90
+
91
+ # Copy the app into the file, excluding the contents of .dockerignore
92
+ COPY . .
93
+
94
+ # Install RubyGems from app's Gemfile
95
+ RUN bundle install --verbose && \
96
+ rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git
97
+
98
+ # Install Node Modules from package.json
99
+ RUN \. "$HOME/.nvm/nvm.sh" && \
100
+ nvm use default && \
101
+ npm clean-install --no-audit --no-fund --verbose
102
+
103
+ # Build all assets
104
+ RUN \. "$HOME/.nvm/nvm.sh" && \
105
+ nvm use default && \
106
+ bin/build-assets && \
107
+ rm -rf node_modules
108
+
109
+ # We are now switching back to building the image that will be deployed.
110
+
111
+ FROM base
112
+ # Copy built artifacts from the throwaway image: gems, application
113
+ COPY --from=build "${BUNDLE_PATH}" "${BUNDLE_PATH}"
114
+ COPY --from=build /brut-app /brut-app
115
+
116
+ # For security, set directories that will be written to be owned by non-root
117
+ RUN groupadd --system --gid 1000 brut && \
118
+ useradd brut --uid 1000 --gid 1000 --create-home --shell /bin/bash && \
119
+ chown -R brut:brut logs tmp
120
+ USER 1000:1000
121
+
122
+ # This is used to execute other commands. When the app is run in production,
123
+ # this script is used to run it.
124
+ ENTRYPOINT ["/brut-app/deploy/docker-entrypoint"]
125
+
@@ -0,0 +1,15 @@
1
+ #!/bin/bash -e
2
+
3
+ # This is the Docker entrypoint, mean this script is used to execute
4
+ # the command given to the RUN directive.
5
+ #
6
+ # The reason this exists is to load jemalloc. If you don't want to use
7
+ # jemalloc, you can delete this script, as well as the ENTRYPOINT directive
8
+ # in deploy/Dockerfile.
9
+
10
+ # Enable jemalloc for reduced memory usage and latency.
11
+ if [ -z "${LD_PRELOAD+x}" ] && [ -f /usr/lib/*/libjemalloc.so.2 ]; then
12
+ export LD_PRELOAD="$(echo /usr/lib/*/libjemalloc.so.2)"
13
+ fi
14
+
15
+ exec "${@}"
@@ -0,0 +1,26 @@
1
+ # This contains settings for your Heroku setup.
2
+ # You own and maintain this file. It is required by
3
+ # build/deploy
4
+ class HerokuConfig
5
+
6
+ # Return a Hash oif additional images to run, beyond "web" and "release".
7
+ #
8
+ # The format of this Hash is:
9
+ #
10
+ # {
11
+ # "«image name» => {
12
+ # cmd: "«command line for Dockerfile RUN directive»",
13
+ # }
14
+ # }
15
+ #
16
+ # For example, if you have the Sidekiq segment installed, `bin/run-sidekiq`
17
+ # runs Sidekiq, so you would return this hash:
18
+ #
19
+ # {
20
+ # "sidekiq" => {
21
+ # cmd: "bin/run-sidekiq",
22
+ # }
23
+ # }
24
+ def self.additional_images = {}
25
+ end
26
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Bryant Copeland
@@ -387,7 +387,7 @@ dependencies:
387
387
  - - ">="
388
388
  - !ruby/object:Gem::Version
389
389
  version: '0'
390
- description: NOT YET RELEASED - An opinionated web framework build on web standards
390
+ description: An opinionated web framework build on web standards
391
391
  email:
392
392
  - davec@thirdtank.com
393
393
  executables: []
@@ -410,20 +410,27 @@ files:
410
410
  - assets/LogoPylon.pxd
411
411
  - assets/LogoStop.pxd
412
412
  - assets/LogoTall.pxd
413
+ - assets/MetroIcon.graffle
413
414
  - assets/MetroLogo.graffle
414
415
  - assets/SocialImage.png
415
416
  - assets/SocialImage.pxd
417
+ - assets/YouTubeThumb.pxd
416
418
  - bin/bin_kit.rb
419
+ - bin/build
420
+ - bin/ci
417
421
  - bin/dev
418
422
  - bin/docs
423
+ - bin/publish
419
424
  - bin/rake
420
425
  - bin/rspec
421
426
  - bin/setup
422
427
  - brut-css/.nvim.lua
423
428
  - brut-css/README.md
424
429
  - brut-css/bin/build
430
+ - brut-css/bin/ci
425
431
  - brut-css/bin/dev
426
432
  - brut-css/bin/docs
433
+ - brut-css/bin/publish
427
434
  - brut-css/bin/setup
428
435
  - brut-css/config/media-queries-all.css
429
436
  - brut-css/config/media-queries-minimal.css
@@ -503,10 +510,11 @@ files:
503
510
  - brut-css/src/js/post-css-plugins/generateRootCustomPropertiesPlugin.js
504
511
  - brut-css/src/js/pseudoClassConfigParser.js
505
512
  - brut-js/.projections.json
506
- - brut-js/CHANGELOG.md
507
513
  - brut-js/README.md
508
514
  - brut-js/bin/build
509
515
  - brut-js/bin/ci
516
+ - brut-js/bin/docs
517
+ - brut-js/bin/publish
510
518
  - brut-js/bin/setup
511
519
  - brut-js/docs/README.md
512
520
  - brut-js/docs/jsdoc-plugins/customElementTag.js
@@ -538,6 +546,7 @@ files:
538
546
  - brut-js/docs/jsdoc.config.json
539
547
  - brut-js/docs/package-lock.json
540
548
  - brut-js/docs/package.json
549
+ - brut-js/dx
541
550
  - brut-js/package-lock.json
542
551
  - brut-js/package.json
543
552
  - brut-js/specs/AjaxSubmit.spec.js
@@ -892,27 +901,27 @@ files:
892
901
  - docs/assets/DevEnvironment.DaFcVfwP.png
893
902
  - docs/assets/LogoStop.Gb3tDhL1.png
894
903
  - docs/assets/OverviewMetro.DUS-5fUZ.png
895
- - docs/assets/adrs.md.JRxZ5uYE.js
896
- - docs/assets/adrs.md.JRxZ5uYE.lean.js
904
+ - docs/assets/adrs.md.BxjHi9-8.js
905
+ - docs/assets/adrs.md.BxjHi9-8.lean.js
897
906
  - docs/assets/ai.md.Cy9GWnER.js
898
907
  - docs/assets/ai.md.Cy9GWnER.lean.js
899
- - docs/assets/app.AkS4fHzI.js
908
+ - docs/assets/app.DyQLb4Ot.js
900
909
  - docs/assets/assets.md.7C3HWkga.js
901
910
  - docs/assets/assets.md.7C3HWkga.lean.js
902
911
  - docs/assets/brut-js.md.B4GYxQVw.js
903
912
  - docs/assets/brut-js.md.B4GYxQVw.lean.js
904
913
  - docs/assets/business-logic.md.BY4hGy0m.js
905
914
  - docs/assets/business-logic.md.BY4hGy0m.lean.js
906
- - docs/assets/chunks/@localSearchIndexroot.C9FqcQxD.js
907
- - docs/assets/chunks/VPLocalSearchBox.By6un1FD.js
915
+ - docs/assets/chunks/@localSearchIndexroot.CmtZyrFA.js
916
+ - docs/assets/chunks/VPLocalSearchBox.T1iA-eJx.js
908
917
  - docs/assets/chunks/framework.1L-BeKqY.js
909
- - docs/assets/chunks/theme.DwiUPdci.js
918
+ - docs/assets/chunks/theme.ChwsbWjK.js
910
919
  - docs/assets/cli.md.CjsktgFz.js
911
920
  - docs/assets/cli.md.CjsktgFz.lean.js
912
- - docs/assets/components.md.BfeWD9sX.js
913
- - docs/assets/components.md.BfeWD9sX.lean.js
914
- - docs/assets/configuration.md.DoSBNc0H.js
915
- - docs/assets/configuration.md.DoSBNc0H.lean.js
921
+ - docs/assets/components.md.DHh-NwKs.js
922
+ - docs/assets/components.md.DHh-NwKs.lean.js
923
+ - docs/assets/configuration.md.D8Wz3oJU.js
924
+ - docs/assets/configuration.md.D8Wz3oJU.lean.js
916
925
  - docs/assets/css.md.CltvJqAa.js
917
926
  - docs/assets/css.md.CltvJqAa.lean.js
918
927
  - docs/assets/custom-element-tests.md.B_rbta32.js
@@ -938,10 +947,10 @@ files:
938
947
  - docs/assets/flash-and-session.md.nPvUpnUx.lean.js
939
948
  - docs/assets/form-constraints.md.DK5adCgM.js
940
949
  - docs/assets/form-constraints.md.DK5adCgM.lean.js
941
- - docs/assets/forms.md.DFveP5g_.js
942
- - docs/assets/forms.md.DFveP5g_.lean.js
943
- - docs/assets/getting-started.md.DZWjCVC0.js
944
- - docs/assets/getting-started.md.DZWjCVC0.lean.js
950
+ - docs/assets/forms.md.BRE85eju.js
951
+ - docs/assets/forms.md.BRE85eju.lean.js
952
+ - docs/assets/getting-started.md.2ioiTe-B.js
953
+ - docs/assets/getting-started.md.2ioiTe-B.lean.js
945
954
  - docs/assets/handlers.md.h84MMB1R.js
946
955
  - docs/assets/handlers.md.h84MMB1R.lean.js
947
956
  - docs/assets/hooks.md.Jmb5VOLA.js
@@ -966,8 +975,8 @@ files:
966
975
  - docs/assets/markdown-examples.md.CCFEQO44.lean.js
967
976
  - docs/assets/middleware.md.Czz_UlJN.js
968
977
  - docs/assets/middleware.md.Czz_UlJN.lean.js
969
- - docs/assets/overview.md.iMnwLO4x.js
970
- - docs/assets/overview.md.iMnwLO4x.lean.js
978
+ - docs/assets/overview.md.DlKiRRG_.js
979
+ - docs/assets/overview.md.DlKiRRG_.lean.js
971
980
  - docs/assets/pages.md.B7Hc-i6H.js
972
981
  - docs/assets/pages.md.B7Hc-i6H.lean.js
973
982
  - docs/assets/recipes_alternate-layouts.md.BwEytl59.js
@@ -996,8 +1005,8 @@ files:
996
1005
  - docs/assets/space-time-continuum.md.xl44xDos.js
997
1006
  - docs/assets/space-time-continuum.md.xl44xDos.lean.js
998
1007
  - docs/assets/style.B1z60PPQ.css
999
- - docs/assets/tutorial.md.BYXj4cOu.js
1000
- - docs/assets/tutorial.md.BYXj4cOu.lean.js
1008
+ - docs/assets/tutorial.md.BIb7XT6j.js
1009
+ - docs/assets/tutorial.md.BIb7XT6j.lean.js
1001
1010
  - docs/assets/unit-tests.md.DUGrnLj5.js
1002
1011
  - docs/assets/unit-tests.md.DUGrnLj5.lean.js
1003
1012
  - docs/assets/why.md.C-hk5xgJ.js
@@ -1294,6 +1303,162 @@ files:
1294
1303
  - lib/sequel/plugins/created_at.rb
1295
1304
  - lib/sequel/plugins/external_id.rb
1296
1305
  - lib/sequel/plugins/find_bang.rb
1306
+ - mkbrut/.gitignore
1307
+ - mkbrut/CODE_OF_CONDUCT.txt
1308
+ - mkbrut/Gemfile
1309
+ - mkbrut/Gemfile.lock
1310
+ - mkbrut/LICENSE.txt
1311
+ - mkbrut/README.md
1312
+ - mkbrut/Rakefile
1313
+ - mkbrut/bin/build
1314
+ - mkbrut/bin/ci
1315
+ - mkbrut/bin/docs
1316
+ - mkbrut/bin/publish
1317
+ - mkbrut/bin/rake
1318
+ - mkbrut/bin/setup
1319
+ - mkbrut/brut-welcome.png
1320
+ - mkbrut/deploy/.dockerignore
1321
+ - mkbrut/deploy/Dockerfile
1322
+ - mkbrut/exe/mkbrut
1323
+ - mkbrut/lib/mkbrut.rb
1324
+ - mkbrut/lib/mkbrut/app.rb
1325
+ - mkbrut/lib/mkbrut/app_id.rb
1326
+ - mkbrut/lib/mkbrut/app_name.rb
1327
+ - mkbrut/lib/mkbrut/app_options.rb
1328
+ - mkbrut/lib/mkbrut/base.rb
1329
+ - mkbrut/lib/mkbrut/cli.rb
1330
+ - mkbrut/lib/mkbrut/erb_binding_delegate.rb
1331
+ - mkbrut/lib/mkbrut/internet_identifier.rb
1332
+ - mkbrut/lib/mkbrut/invalid_identifier.rb
1333
+ - mkbrut/lib/mkbrut/ops.rb
1334
+ - mkbrut/lib/mkbrut/ops/add_css_import.rb
1335
+ - mkbrut/lib/mkbrut/ops/add_i18n_message.rb
1336
+ - mkbrut/lib/mkbrut/ops/add_method.rb
1337
+ - mkbrut/lib/mkbrut/ops/append_to_file.rb
1338
+ - mkbrut/lib/mkbrut/ops/base_op.rb
1339
+ - mkbrut/lib/mkbrut/ops/copy_file.rb
1340
+ - mkbrut/lib/mkbrut/ops/insert_code_in_method.rb
1341
+ - mkbrut/lib/mkbrut/ops/insert_route.rb
1342
+ - mkbrut/lib/mkbrut/ops/mkdir.rb
1343
+ - mkbrut/lib/mkbrut/ops/prism_parsing_op.rb
1344
+ - mkbrut/lib/mkbrut/ops/render_template.rb
1345
+ - mkbrut/lib/mkbrut/ops/skip_file.rb
1346
+ - mkbrut/lib/mkbrut/organization.rb
1347
+ - mkbrut/lib/mkbrut/prefix.rb
1348
+ - mkbrut/lib/mkbrut/prefixed_io.rb
1349
+ - mkbrut/lib/mkbrut/segments.rb
1350
+ - mkbrut/lib/mkbrut/segments/bare_bones.rb
1351
+ - mkbrut/lib/mkbrut/segments/demo.rb
1352
+ - mkbrut/lib/mkbrut/segments/heroku.rb
1353
+ - mkbrut/lib/mkbrut/segments/sidekiq.rb
1354
+ - mkbrut/lib/mkbrut/version.rb
1355
+ - mkbrut/lib/mkbrut/versions.rb
1356
+ - mkbrut/mkbrut.gemspec
1357
+ - mkbrut/templates/Base/.dockerignore
1358
+ - mkbrut/templates/Base/.env.development.erb
1359
+ - mkbrut/templates/Base/.env.test.erb
1360
+ - mkbrut/templates/Base/.gitignore
1361
+ - mkbrut/templates/Base/.projections.json
1362
+ - mkbrut/templates/Base/Dockerfile.dx
1363
+ - mkbrut/templates/Base/Gemfile.erb
1364
+ - mkbrut/templates/Base/Procfile.development
1365
+ - mkbrut/templates/Base/Procfile.test
1366
+ - mkbrut/templates/Base/README.md
1367
+ - mkbrut/templates/Base/README.md.erb
1368
+ - mkbrut/templates/Base/app/bootstrap.rb
1369
+ - mkbrut/templates/Base/app/config/i18n/en/1_defaults.rb
1370
+ - mkbrut/templates/Base/app/config/i18n/en/2_app.rb
1371
+ - mkbrut/templates/Base/app/public/static/manifest.json.erb
1372
+ - mkbrut/templates/Base/app/src/app.rb.erb
1373
+ - mkbrut/templates/Base/app/src/back_end/data_models/app_data_model.rb
1374
+ - mkbrut/templates/Base/app/src/back_end/data_models/db.rb
1375
+ - mkbrut/templates/Base/app/src/back_end/data_models/migrations/20240101130000_citext.rb
1376
+ - mkbrut/templates/Base/app/src/back_end/data_models/seed/seed_data.rb
1377
+ - mkbrut/templates/Base/app/src/front_end/components/app_component.rb
1378
+ - mkbrut/templates/Base/app/src/front_end/components/custom_element_registration.rb.erb
1379
+ - mkbrut/templates/Base/app/src/front_end/css/index.css
1380
+ - mkbrut/templates/Base/app/src/front_end/css/svgs.css
1381
+ - mkbrut/templates/Base/app/src/front_end/forms/app_form.rb
1382
+ - mkbrut/templates/Base/app/src/front_end/handlers/app_handler.rb
1383
+ - mkbrut/templates/Base/app/src/front_end/images/LogoPylon.png
1384
+ - mkbrut/templates/Base/app/src/front_end/images/LogoTransit.png
1385
+ - mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-120x120.png
1386
+ - mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-152x152.png
1387
+ - mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-167x167.png
1388
+ - mkbrut/templates/Base/app/src/front_end/images/apple-touch-icon-180x180.png
1389
+ - mkbrut/templates/Base/app/src/front_end/images/favicon.ico
1390
+ - mkbrut/templates/Base/app/src/front_end/images/icon.png
1391
+ - mkbrut/templates/Base/app/src/front_end/images/mkicons.sh
1392
+ - mkbrut/templates/Base/app/src/front_end/js/index.js
1393
+ - mkbrut/templates/Base/app/src/front_end/layouts/default_layout.rb.erb
1394
+ - mkbrut/templates/Base/app/src/front_end/pages/app_page.rb
1395
+ - mkbrut/templates/Base/app/src/front_end/pages/home_page.rb
1396
+ - mkbrut/templates/Base/app/src/front_end/support/app_session.rb
1397
+ - mkbrut/templates/Base/app/src/front_end/svgs/README.md
1398
+ - mkbrut/templates/Base/app/src/front_end/svgs/comment-button.svg
1399
+ - mkbrut/templates/Base/bin/README.md.erb
1400
+ - mkbrut/templates/Base/bin/build-assets
1401
+ - mkbrut/templates/Base/bin/ci
1402
+ - mkbrut/templates/Base/bin/console
1403
+ - mkbrut/templates/Base/bin/db
1404
+ - mkbrut/templates/Base/bin/dbconsole
1405
+ - mkbrut/templates/Base/bin/dev
1406
+ - mkbrut/templates/Base/bin/release
1407
+ - mkbrut/templates/Base/bin/run
1408
+ - mkbrut/templates/Base/bin/scaffold
1409
+ - mkbrut/templates/Base/bin/setup
1410
+ - mkbrut/templates/Base/bin/startup-message
1411
+ - mkbrut/templates/Base/bin/test
1412
+ - mkbrut/templates/Base/bin/test-server
1413
+ - mkbrut/templates/Base/bin/watch-and-build-assets
1414
+ - mkbrut/templates/Base/config.ru
1415
+ - mkbrut/templates/Base/docker-compose.dx.yml
1416
+ - mkbrut/templates/Base/dx/README.md
1417
+ - mkbrut/templates/Base/dx/bash_customizations
1418
+ - mkbrut/templates/Base/dx/bash_customizations.local
1419
+ - mkbrut/templates/Base/dx/build
1420
+ - mkbrut/templates/Base/dx/docker-compose.env.erb
1421
+ - mkbrut/templates/Base/dx/dx.sh.lib
1422
+ - mkbrut/templates/Base/dx/exec
1423
+ - mkbrut/templates/Base/dx/prune
1424
+ - mkbrut/templates/Base/dx/show-help-in-app-container-then-wait.sh
1425
+ - mkbrut/templates/Base/dx/start
1426
+ - mkbrut/templates/Base/dx/stop
1427
+ - mkbrut/templates/Base/package.json.erb
1428
+ - mkbrut/templates/Base/puma.config.rb
1429
+ - mkbrut/templates/Base/specs/e2e/home_page.spec.rb.erb
1430
+ - mkbrut/templates/Base/specs/front_end/js/SpecHelper.js
1431
+ - mkbrut/templates/Base/specs/front_end/pages/home_page.spec.rb
1432
+ - mkbrut/templates/Base/specs/lint_factories.spec.rb
1433
+ - mkbrut/templates/Base/specs/spec_helper.rb
1434
+ - mkbrut/templates/Base/specs/support.rb
1435
+ - mkbrut/templates/segments/BareBones/app/src/front_end/handlers/trigger_exception_handler.rb
1436
+ - mkbrut/templates/segments/BareBones/app/src/front_end/js/Example.js.erb
1437
+ - mkbrut/templates/segments/BareBones/specs/front_end/handlers/trigger_exception_handler.spec.rb
1438
+ - mkbrut/templates/segments/BareBones/specs/front_end/js/Example.spec.js.erb
1439
+ - mkbrut/templates/segments/Demo/app/src/back_end/data_models/db/guestbook_message.rb
1440
+ - mkbrut/templates/segments/Demo/app/src/back_end/data_models/migrations/20250628194124_guestbook.rb
1441
+ - mkbrut/templates/segments/Demo/app/src/front_end/components/flash_component.rb
1442
+ - mkbrut/templates/segments/Demo/app/src/front_end/css/constraint-violations.css
1443
+ - mkbrut/templates/segments/Demo/app/src/front_end/css/fonts.css
1444
+ - mkbrut/templates/segments/Demo/app/src/front_end/fonts/monaspace-xenon.ttf
1445
+ - mkbrut/templates/segments/Demo/app/src/front_end/forms/guestbook_message_form.rb
1446
+ - mkbrut/templates/segments/Demo/app/src/front_end/handlers/guestbook_message_handler.rb
1447
+ - mkbrut/templates/segments/Demo/app/src/front_end/pages/guestbook_page.rb
1448
+ - mkbrut/templates/segments/Demo/app/src/front_end/pages/guestbook_page/message_component.rb
1449
+ - mkbrut/templates/segments/Demo/app/src/front_end/pages/new_guestbook_message_page.rb
1450
+ - mkbrut/templates/segments/Demo/specs/back_end/data_models/db/guestbook_message.spec.rb
1451
+ - mkbrut/templates/segments/Demo/specs/e2e/guest_message.spec.rb
1452
+ - mkbrut/templates/segments/Demo/specs/factories/db/guestbook_message.factory.rb
1453
+ - mkbrut/templates/segments/Demo/specs/front_end/components/flash_component.spec.rb
1454
+ - mkbrut/templates/segments/Demo/specs/front_end/handlers/guestbook_message_handler.spec.rb
1455
+ - mkbrut/templates/segments/Demo/specs/front_end/pages/guestbook_page.spec.rb
1456
+ - mkbrut/templates/segments/Demo/specs/front_end/pages/guestbook_page/message_component.spec.rb
1457
+ - mkbrut/templates/segments/Demo/specs/front_end/pages/new_guestbook_message_page.spec.rb
1458
+ - mkbrut/templates/segments/Heroku/bin/deploy
1459
+ - mkbrut/templates/segments/Heroku/deploy/Dockerfile
1460
+ - mkbrut/templates/segments/Heroku/deploy/docker-entrypoint
1461
+ - mkbrut/templates/segments/Heroku/deploy/heroku_config.rb
1297
1462
  - specs/brut/front_end/forms/input.spec.rb
1298
1463
  - specs/brut/front_end/forms/radio_button_group_input.spec.rb
1299
1464
  - specs/brut/front_end/forms/select_input.spec.rb
@@ -1323,8 +1488,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1323
1488
  - !ruby/object:Gem::Version
1324
1489
  version: '0'
1325
1490
  requirements: []
1326
- rubygems_version: 3.6.9
1491
+ rubygems_version: 3.7.1
1327
1492
  specification_version: 4
1328
- summary: NOT YET RELEASED - Web Framework Built around Ruby, Web Standards, Simplicity,
1329
- and Object-Orientation
1493
+ summary: Web Framework Built around Ruby, Web Standards, Simplicity, and Object-Orientation
1330
1494
  test_files: []
data/brut-js/CHANGELOG.md DELETED
@@ -1,5 +0,0 @@
1
- # BrutJS CHANGELOG
2
-
3
- ## v0.0.22
4
-
5
- * Changed i18n key from cv.fe to cv.cs ("front-end" to "client-side") to be more consistent with Brut terminology
@@ -1 +0,0 @@
1
- import{_ as r,c as a,o as d,ag as t}from"./chunks/framework.1L-BeKqY.js";const f=JSON.parse('{"title":"Architecture Decision Records","description":"","frontmatter":{},"headers":[],"relativePath":"adrs.md","filePath":"adrs.md"}'),s={name:"adrs.md"};function l(o,e,i,c,n,h){return d(),a("div",null,e[0]||(e[0]=[t("",4)]))}const p=r(s,[["render",l]]);export{f as __pageData,p as default};