gina 0.5.17 → 0.5.18

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 (534) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +27 -6
  3. package/ROADMAP.md +33 -0
  4. package/framework/v0.5.18/VERSION +1 -0
  5. package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.js +101 -15
  6. package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js +588 -0
  7. package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  8. package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  9. package/framework/{v0.5.17 → v0.5.18}/core/config.js +18 -0
  10. package/framework/v0.5.18/core/connectors/redis/lib/render-cache-store.js +355 -0
  11. package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.js +78 -0
  12. package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-json.js +81 -51
  13. package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-nunjucks.js +50 -49
  14. package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-swig.js +63 -51
  15. package/framework/v0.5.18/core/controller/release-banner.js +261 -0
  16. package/framework/{v0.5.17 → v0.5.18}/core/gna.js +78 -0
  17. package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/src/form-validator.js +11 -1
  18. package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/src/main.js +89 -13
  19. package/framework/{v0.5.17 → v0.5.18}/core/router.js +19 -0
  20. package/framework/{v0.5.17 → v0.5.18}/core/server.isaac.js +269 -13
  21. package/framework/{v0.5.17 → v0.5.18}/core/server.js +476 -4
  22. package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +1 -1
  23. package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +1 -1
  24. package/framework/{v0.5.17 → v0.5.18}/core/template/conf/env.json +4 -1
  25. package/framework/{v0.5.17 → v0.5.18}/core/template/conf/settings.json +27 -1
  26. package/framework/{v0.5.17 → v0.5.18}/helpers/context.js +128 -47
  27. package/framework/{v0.5.17 → v0.5.18}/lib/cache/README.md +19 -2
  28. package/framework/{v0.5.17 → v0.5.18}/lib/cache/src/main.js +174 -33
  29. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/build.js +28 -0
  30. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/help.txt +24 -0
  31. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/mcp.js +58 -18
  32. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/openapi.js +67 -10
  33. package/framework/v0.5.18/lib/cmd/bundle/types.js +170 -0
  34. package/framework/v0.5.18/lib/cmd/cache/arguments.json +5 -0
  35. package/framework/v0.5.18/lib/cmd/cache/clear.js +373 -0
  36. package/framework/v0.5.18/lib/cmd/cache/help.txt +65 -0
  37. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/reset.js +1 -1
  38. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/add.js +1 -1
  39. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/build.js +26 -0
  40. package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/set.js +1 -1
  41. package/framework/v0.5.18/lib/dto/package.json +17 -0
  42. package/framework/v0.5.18/lib/dto/src/main.js +662 -0
  43. package/framework/v0.5.18/lib/dto-pipe/package.json +7 -0
  44. package/framework/v0.5.18/lib/dto-pipe/src/main.js +203 -0
  45. package/framework/v0.5.18/lib/dto-types/package.json +17 -0
  46. package/framework/v0.5.18/lib/dto-types/src/main.js +323 -0
  47. package/framework/{v0.5.17 → v0.5.18}/lib/index.js +30 -0
  48. package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/helper.js +8 -1
  49. package/framework/v0.5.18/lib/release-watch/package.json +20 -0
  50. package/framework/v0.5.18/lib/release-watch/src/main.js +1890 -0
  51. package/framework/v0.5.18/lib/render-cache/package.json +17 -0
  52. package/framework/v0.5.18/lib/render-cache/src/main.js +992 -0
  53. package/framework/v0.5.18/lib/render-cache-store.js +86 -0
  54. package/framework/{v0.5.17 → v0.5.18}/lib/routing-introspect/src/main.js +107 -0
  55. package/framework/{v0.5.17 → v0.5.18}/lib/shell.js +0 -1
  56. package/framework/{v0.5.17 → v0.5.18}/package.json +1 -1
  57. package/gna.js +4 -4
  58. package/llms.txt +30 -0
  59. package/package.json +7 -5
  60. package/schema/routing.json +4 -4
  61. package/schema/settings.json +45 -0
  62. package/script/check_types_consumer.js +147 -0
  63. package/script/generate_gna_types.js +10 -6
  64. package/types/globals.d.ts +91 -23
  65. package/types/gna.d.ts +26 -74
  66. package/types/index.d.ts +925 -487
  67. package/framework/v0.5.17/VERSION +0 -1
  68. package/framework/v0.5.17/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -585
  69. package/framework/v0.5.17/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  70. package/framework/v0.5.17/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  71. /package/framework/{v0.5.17 → v0.5.18}/AUTHORS +0 -0
  72. /package/framework/{v0.5.17 → v0.5.18}/LICENSE +0 -0
  73. /package/framework/{v0.5.17 → v0.5.18}/core/asset/html/nolayout.html +0 -0
  74. /package/framework/{v0.5.17 → v0.5.18}/core/asset/html/static.html +0 -0
  75. /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/android-chrome-192x192.png +0 -0
  76. /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/android-chrome-512x512.png +0 -0
  77. /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/apple-touch-icon.png +0 -0
  78. /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/favicon-16x16.png +0 -0
  79. /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/favicon-32x32.png +0 -0
  80. /package/framework/{v0.5.17 → v0.5.18}/core/asset/img/favicon.ico +0 -0
  81. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/README.md +0 -0
  82. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  83. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  84. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  85. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  86. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  87. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  88. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  89. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  90. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  91. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  92. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  93. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  94. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  95. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  96. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  97. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  98. /package/framework/{v0.5.17 → v0.5.18}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  99. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/ai/index.js +0 -0
  100. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/ai/lib/connector.js +0 -0
  101. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/index.js +0 -0
  102. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/connector.js +0 -0
  103. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  104. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  105. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/n1ql.js +0 -0
  106. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/session-store.js +0 -0
  107. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  108. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  109. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/index.js +0 -0
  110. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/connector.js +0 -0
  111. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/job-store.js +0 -0
  112. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  113. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mongodb/lib/session-store.js +0 -0
  114. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mysql/index.js +0 -0
  115. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/mysql/lib/connector.js +0 -0
  116. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/postgresql/index.js +0 -0
  117. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/postgresql/lib/connector.js +0 -0
  118. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/index.js +0 -0
  119. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/lib/connector.js +0 -0
  120. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/lib/job-store.js +0 -0
  121. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/redis/lib/session-store.js +0 -0
  122. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/scylladb/index.js +0 -0
  123. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/scylladb/lib/connector.js +0 -0
  124. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/scylladb/lib/session-store.js +0 -0
  125. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sql-parser.js +0 -0
  126. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/index.js +0 -0
  127. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/lib/connector.js +0 -0
  128. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/lib/job-store.js +0 -0
  129. /package/framework/{v0.5.17 → v0.5.18}/core/connectors/sqlite/lib/session-store.js +0 -0
  130. /package/framework/{v0.5.17 → v0.5.18}/core/content.encoding +0 -0
  131. /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.framework.js +0 -0
  132. /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-nunjucks-async.js +0 -0
  133. /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-stream.js +0 -0
  134. /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-swig-async.js +0 -0
  135. /package/framework/{v0.5.17 → v0.5.18}/core/controller/controller.render-v1.js +0 -0
  136. /package/framework/{v0.5.17 → v0.5.18}/core/controller/index.js +0 -0
  137. /package/framework/{v0.5.17 → v0.5.18}/core/controller/inspector-window-emit.js +0 -0
  138. /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/LICENSE +0 -0
  139. /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/README.md +0 -0
  140. /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  141. /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  142. /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  143. /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  144. /package/framework/{v0.5.17 → v0.5.18}/core/deps/busboy-1.6.0/package.json +0 -0
  145. /package/framework/{v0.5.17 → v0.5.18}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  146. /package/framework/{v0.5.17 → v0.5.18}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  147. /package/framework/{v0.5.17 → v0.5.18}/core/deps/streamsearch-1.1.0/package.json +0 -0
  148. /package/framework/{v0.5.17 → v0.5.18}/core/dev/index.js +0 -0
  149. /package/framework/{v0.5.17 → v0.5.18}/core/dev/lib/class.js +0 -0
  150. /package/framework/{v0.5.17 → v0.5.18}/core/dev/lib/factory.js +0 -0
  151. /package/framework/{v0.5.17 → v0.5.18}/core/dev/lib/tools.js +0 -0
  152. /package/framework/{v0.5.17 → v0.5.18}/core/locales/README.md +0 -0
  153. /package/framework/{v0.5.17 → v0.5.18}/core/locales/currency.json +0 -0
  154. /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/language/en.json +0 -0
  155. /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/language/fr.json +0 -0
  156. /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/region/en.json +0 -0
  157. /package/framework/{v0.5.17 → v0.5.18}/core/locales/dist/region/fr.json +0 -0
  158. /package/framework/{v0.5.17 → v0.5.18}/core/locales/index.js +0 -0
  159. /package/framework/{v0.5.17 → v0.5.18}/core/mime.types +0 -0
  160. /package/framework/{v0.5.17 → v0.5.18}/core/model/entity.js +0 -0
  161. /package/framework/{v0.5.17 → v0.5.18}/core/model/index.js +0 -0
  162. /package/framework/{v0.5.17 → v0.5.18}/core/model/template/entityFactory.js +0 -0
  163. /package/framework/{v0.5.17 → v0.5.18}/core/model/template/index.js +0 -0
  164. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/README.md +0 -0
  165. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/index.js +0 -0
  166. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/csrf/README.md +0 -0
  167. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/csrf/package.json +0 -0
  168. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/csrf/src/main.js +0 -0
  169. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/README.md +0 -0
  170. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coep/README.md +0 -0
  171. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coep/package.json +0 -0
  172. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  173. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coop/README.md +0 -0
  174. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coop/package.json +0 -0
  175. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  176. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/corp/README.md +0 -0
  177. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/corp/package.json +0 -0
  178. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  179. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/csp/README.md +0 -0
  180. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/csp/package.json +0 -0
  181. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  182. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  183. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  184. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  185. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  186. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  187. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  188. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  189. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  190. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  191. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/package.json +0 -0
  192. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  193. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  194. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  195. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/src/main.js +0 -0
  196. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  197. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  198. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  199. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  200. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  201. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  202. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  203. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  204. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  205. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  206. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  207. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  208. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  209. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  210. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  211. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  212. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  213. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  214. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/session/README.md +0 -0
  215. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/session/package.json +0 -0
  216. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/session/src/main.js +0 -0
  217. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/README.md +0 -0
  218. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/build.json +0 -0
  219. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/package.json +0 -0
  220. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/storage/src/main.js +0 -0
  221. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/README.md +0 -0
  222. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/build.json +0 -0
  223. /package/framework/{v0.5.17 → v0.5.18}/core/plugins/lib/validator/package.json +0 -0
  224. /package/framework/{v0.5.17 → v0.5.18}/core/server.express.js +0 -0
  225. /package/framework/{v0.5.17 → v0.5.18}/core/status.codes +0 -0
  226. /package/framework/{v0.5.17 → v0.5.18}/core/template/_gitignore +0 -0
  227. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/app.json +0 -0
  228. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  229. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/routing.json +0 -0
  230. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/settings.json +0 -0
  231. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  232. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/templates.json +0 -0
  233. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  234. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  235. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  236. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  237. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/index.js +0 -0
  238. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle/locales/en.json +0 -0
  239. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  240. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  241. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  242. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  243. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  244. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  245. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  246. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  247. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/readme.md +0 -0
  248. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_public/sw.js +0 -0
  249. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  250. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  251. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  252. /package/framework/{v0.5.17 → v0.5.18}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  253. /package/framework/{v0.5.17 → v0.5.18}/core/template/command/gina.bat.tpl +0 -0
  254. /package/framework/{v0.5.17 → v0.5.18}/core/template/command/gina.tpl +0 -0
  255. /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/manifest.json +0 -0
  256. /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/package.json +0 -0
  257. /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/statics.json +0 -0
  258. /package/framework/{v0.5.17 → v0.5.18}/core/template/conf/templates.json +0 -0
  259. /package/framework/{v0.5.17 → v0.5.18}/core/template/error/client/json/401.json +0 -0
  260. /package/framework/{v0.5.17 → v0.5.18}/core/template/error/client/json/403.json +0 -0
  261. /package/framework/{v0.5.17 → v0.5.18}/core/template/error/client/json/404.json +0 -0
  262. /package/framework/{v0.5.17 → v0.5.18}/core/template/error/server/html/50x.html +0 -0
  263. /package/framework/{v0.5.17 → v0.5.18}/core/template/error/server/json/500.json +0 -0
  264. /package/framework/{v0.5.17 → v0.5.18}/core/template/error/server/json/503.json +0 -0
  265. /package/framework/{v0.5.17 → v0.5.18}/core/template/extensions/logger/config.json +0 -0
  266. /package/framework/{v0.5.17 → v0.5.18}/helpers/console.js +0 -0
  267. /package/framework/{v0.5.17 → v0.5.18}/helpers/data/LICENSE +0 -0
  268. /package/framework/{v0.5.17 → v0.5.18}/helpers/data/README.md +0 -0
  269. /package/framework/{v0.5.17 → v0.5.18}/helpers/data/package.json +0 -0
  270. /package/framework/{v0.5.17 → v0.5.18}/helpers/data/src/main.js +0 -0
  271. /package/framework/{v0.5.17 → v0.5.18}/helpers/dateFormat.js +0 -0
  272. /package/framework/{v0.5.17 → v0.5.18}/helpers/index.js +0 -0
  273. /package/framework/{v0.5.17 → v0.5.18}/helpers/json/LICENSE +0 -0
  274. /package/framework/{v0.5.17 → v0.5.18}/helpers/json/README.md +0 -0
  275. /package/framework/{v0.5.17 → v0.5.18}/helpers/json/package.json +0 -0
  276. /package/framework/{v0.5.17 → v0.5.18}/helpers/json/src/main.js +0 -0
  277. /package/framework/{v0.5.17 → v0.5.18}/helpers/path.js +0 -0
  278. /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/README.md +0 -0
  279. /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/package.json +0 -0
  280. /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/src/api-error.js +0 -0
  281. /package/framework/{v0.5.17 → v0.5.18}/helpers/plugins/src/main.js +0 -0
  282. /package/framework/{v0.5.17 → v0.5.18}/helpers/prototypes.js +0 -0
  283. /package/framework/{v0.5.17 → v0.5.18}/helpers/task.js +0 -0
  284. /package/framework/{v0.5.17 → v0.5.18}/helpers/text.js +0 -0
  285. /package/framework/{v0.5.17 → v0.5.18}/lib/admin/package.json +0 -0
  286. /package/framework/{v0.5.17 → v0.5.18}/lib/admin/src/main.js +0 -0
  287. /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/README.md +0 -0
  288. /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/build.json +0 -0
  289. /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/package.json +0 -0
  290. /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/src/dep/jszip.min.js +0 -0
  291. /package/framework/{v0.5.17 → v0.5.18}/lib/archiver/src/main.js +0 -0
  292. /package/framework/{v0.5.17 → v0.5.18}/lib/async/package.json +0 -0
  293. /package/framework/{v0.5.17 → v0.5.18}/lib/async/src/main.js +0 -0
  294. /package/framework/{v0.5.17 → v0.5.18}/lib/cache/build.json +0 -0
  295. /package/framework/{v0.5.17 → v0.5.18}/lib/cache/package.json +0 -0
  296. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/aliases.json +0 -0
  297. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/add.js +0 -0
  298. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/arguments.json +0 -0
  299. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/copy.js +0 -0
  300. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/cp.js +0 -0
  301. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/help.js +0 -0
  302. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  303. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/list.js +0 -0
  304. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/man.js +0 -0
  305. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/mcp-start.js +0 -0
  306. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/oas.js +0 -0
  307. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/remove.js +0 -0
  308. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/rename.js +0 -0
  309. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/restart.js +0 -0
  310. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/rm.js +0 -0
  311. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/start.js +0 -0
  312. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/status.js +0 -0
  313. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/bundle/stop.js +0 -0
  314. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/cache/stats.js +0 -0
  315. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/add.js +0 -0
  316. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/arguments.json +0 -0
  317. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/help.js +0 -0
  318. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/help.txt +0 -0
  319. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/infer.js +0 -0
  320. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/list.js +0 -0
  321. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/migrate.js +0 -0
  322. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/models.js +0 -0
  323. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/remove.js +0 -0
  324. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/rm.js +0 -0
  325. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/connector/test.js +0 -0
  326. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/add.js +0 -0
  327. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/get.js +0 -0
  328. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/help.js +0 -0
  329. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/help.txt +0 -0
  330. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/link-dev.js +0 -0
  331. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/list.js +0 -0
  332. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/remove.js +0 -0
  333. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/rm.js +0 -0
  334. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/set.js +0 -0
  335. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/unset.js +0 -0
  336. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/env/use.js +0 -0
  337. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/add.js +0 -0
  338. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/arguments.json +0 -0
  339. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/build.js +0 -0
  340. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/dot.js +0 -0
  341. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/get.js +0 -0
  342. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/help.js +0 -0
  343. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/help.txt +0 -0
  344. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/init.js +0 -0
  345. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/link-node-modules.js +0 -0
  346. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/link.js +0 -0
  347. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/list.js +0 -0
  348. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/man.js +0 -0
  349. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/msg.json +0 -0
  350. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/open.js +0 -0
  351. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/remove.js +0 -0
  352. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/reset.js +0 -0
  353. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/restart.js +0 -0
  354. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/set.js +0 -0
  355. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/start.js +0 -0
  356. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/status.js +0 -0
  357. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/stop.js +0 -0
  358. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/tail.js +0 -0
  359. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/update.js +0 -0
  360. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/framework/version.js +0 -0
  361. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/gina-dev.1.md +0 -0
  362. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/gina-framework.1.md +0 -0
  363. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/gina.1.md +0 -0
  364. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/helper.js +0 -0
  365. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/add.js +0 -0
  366. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/arguments.json +0 -0
  367. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/export.js +0 -0
  368. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/help.js +0 -0
  369. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/help.txt +0 -0
  370. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/import.js +0 -0
  371. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/i18n/scan.js +0 -0
  372. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/arguments.json +0 -0
  373. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/build.js +0 -0
  374. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/help.js +0 -0
  375. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/help.txt +0 -0
  376. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/image/man.js +0 -0
  377. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/index.js +0 -0
  378. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/inspector/help.js +0 -0
  379. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/inspector/help.txt +0 -0
  380. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/inspector/open.js +0 -0
  381. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/man-render.js +0 -0
  382. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/arguments.json +0 -0
  383. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/help.js +0 -0
  384. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/help.txt +0 -0
  385. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/kill.js +0 -0
  386. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/minion/list.js +0 -0
  387. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/msg.json +0 -0
  388. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/help.js +0 -0
  389. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/help.txt +0 -0
  390. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/inc/scan.js +0 -0
  391. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/list.js +0 -0
  392. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/port/set.js +0 -0
  393. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/arguments.json +0 -0
  394. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/backup.js +0 -0
  395. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/help.js +0 -0
  396. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/help.txt +0 -0
  397. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/import.js +0 -0
  398. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/list.js +0 -0
  399. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/man.js +0 -0
  400. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/move.js +0 -0
  401. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/remove.js +0 -0
  402. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/rename.js +0 -0
  403. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/restart.js +0 -0
  404. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/restore.js +0 -0
  405. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/rm.js +0 -0
  406. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/start.js +0 -0
  407. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/status.js +0 -0
  408. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/project/stop.js +0 -0
  409. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/arguments.json +0 -0
  410. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/help.js +0 -0
  411. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/help.txt +0 -0
  412. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/list.js +0 -0
  413. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/protocol/remove.js +0 -0
  414. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/add.js +0 -0
  415. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/help.js +0 -0
  416. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/help.txt +0 -0
  417. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/link-local.js +0 -0
  418. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/link-production.js +0 -0
  419. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/list.js +0 -0
  420. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/remove.js +0 -0
  421. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/rm.js +0 -0
  422. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/scope/use.js +0 -0
  423. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/arguments.json +0 -0
  424. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/check.js +0 -0
  425. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/help.js +0 -0
  426. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/help.txt +0 -0
  427. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/secrets/scan.js +0 -0
  428. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/help.js +0 -0
  429. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/help.txt +0 -0
  430. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/list.js +0 -0
  431. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/man.js +0 -0
  432. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/service/start.js +0 -0
  433. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd/view/add.js +0 -0
  434. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd-status-format/package.json +0 -0
  435. /package/framework/{v0.5.17 → v0.5.18}/lib/cmd-status-format/src/main.js +0 -0
  436. /package/framework/{v0.5.17 → v0.5.18}/lib/collection/README.md +0 -0
  437. /package/framework/{v0.5.17 → v0.5.18}/lib/collection/build.json +0 -0
  438. /package/framework/{v0.5.17 → v0.5.18}/lib/collection/package.json +0 -0
  439. /package/framework/{v0.5.17 → v0.5.18}/lib/collection/src/main.js +0 -0
  440. /package/framework/{v0.5.17 → v0.5.18}/lib/config.js +0 -0
  441. /package/framework/{v0.5.17 → v0.5.18}/lib/connector-config/package.json +0 -0
  442. /package/framework/{v0.5.17 → v0.5.18}/lib/connector-config/src/main.js +0 -0
  443. /package/framework/{v0.5.17 → v0.5.18}/lib/connector-registry/package.json +0 -0
  444. /package/framework/{v0.5.17 → v0.5.18}/lib/connector-registry/src/main.js +0 -0
  445. /package/framework/{v0.5.17 → v0.5.18}/lib/cron/README.md +0 -0
  446. /package/framework/{v0.5.17 → v0.5.18}/lib/cron/package.json +0 -0
  447. /package/framework/{v0.5.17 → v0.5.18}/lib/cron/src/main.js +0 -0
  448. /package/framework/{v0.5.17 → v0.5.18}/lib/domain/LICENSE +0 -0
  449. /package/framework/{v0.5.17 → v0.5.18}/lib/domain/README.md +0 -0
  450. /package/framework/{v0.5.17 → v0.5.18}/lib/domain/package.json +0 -0
  451. /package/framework/{v0.5.17 → v0.5.18}/lib/domain/src/main.js +0 -0
  452. /package/framework/{v0.5.17 → v0.5.18}/lib/generator/index.js +0 -0
  453. /package/framework/{v0.5.17 → v0.5.18}/lib/i18n/package.json +0 -0
  454. /package/framework/{v0.5.17 → v0.5.18}/lib/i18n/src/main.js +0 -0
  455. /package/framework/{v0.5.17 → v0.5.18}/lib/image-build/package.json +0 -0
  456. /package/framework/{v0.5.17 → v0.5.18}/lib/image-build/src/main.js +0 -0
  457. /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/LICENSE +0 -0
  458. /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/README.md +0 -0
  459. /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/package.json +0 -0
  460. /package/framework/{v0.5.17 → v0.5.18}/lib/inherits/src/main.js +0 -0
  461. /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-events/package.json +0 -0
  462. /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-events/src/main.js +0 -0
  463. /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-redact/package.json +0 -0
  464. /package/framework/{v0.5.17 → v0.5.18}/lib/inspector-redact/src/main.js +0 -0
  465. /package/framework/{v0.5.17 → v0.5.18}/lib/instrument/package.json +0 -0
  466. /package/framework/{v0.5.17 → v0.5.18}/lib/instrument/src/main.js +0 -0
  467. /package/framework/{v0.5.17 → v0.5.18}/lib/job/package.json +0 -0
  468. /package/framework/{v0.5.17 → v0.5.18}/lib/job/src/main.js +0 -0
  469. /package/framework/{v0.5.17 → v0.5.18}/lib/job-store.js +0 -0
  470. /package/framework/{v0.5.17 → v0.5.18}/lib/json-config-header/package.json +0 -0
  471. /package/framework/{v0.5.17 → v0.5.18}/lib/json-config-header/src/main.js +0 -0
  472. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/README.md +0 -0
  473. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/package.json +0 -0
  474. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/default/index.js +0 -0
  475. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/file/index.js +0 -0
  476. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  477. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  478. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/mq/index.js +0 -0
  479. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/mq/listener.js +0 -0
  480. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/containers/mq/speaker.js +0 -0
  481. /package/framework/{v0.5.17 → v0.5.18}/lib/logger/src/main.js +0 -0
  482. /package/framework/{v0.5.17 → v0.5.18}/lib/math/index.js +0 -0
  483. /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-dispatch/package.json +0 -0
  484. /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-dispatch/src/main.js +0 -0
  485. /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-http/package.json +0 -0
  486. /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-http/src/main.js +0 -0
  487. /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-server/package.json +0 -0
  488. /package/framework/{v0.5.17 → v0.5.18}/lib/mcp-server/src/main.js +0 -0
  489. /package/framework/{v0.5.17 → v0.5.18}/lib/merge/README.md +0 -0
  490. /package/framework/{v0.5.17 → v0.5.18}/lib/merge/package.json +0 -0
  491. /package/framework/{v0.5.17 → v0.5.18}/lib/merge/src/main.js +0 -0
  492. /package/framework/{v0.5.17 → v0.5.18}/lib/metrics/package.json +0 -0
  493. /package/framework/{v0.5.17 → v0.5.18}/lib/metrics/src/main.js +0 -0
  494. /package/framework/{v0.5.17 → v0.5.18}/lib/model.js +0 -0
  495. /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-filters/README.md +0 -0
  496. /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-filters/package.json +0 -0
  497. /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-filters/src/main.js +0 -0
  498. /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-resolver/package.json +0 -0
  499. /package/framework/{v0.5.17 → v0.5.18}/lib/nunjucks-resolver/src/main.js +0 -0
  500. /package/framework/{v0.5.17 → v0.5.18}/lib/proc.js +0 -0
  501. /package/framework/{v0.5.17 → v0.5.18}/lib/routing/README.md +0 -0
  502. /package/framework/{v0.5.17 → v0.5.18}/lib/routing/build.json +0 -0
  503. /package/framework/{v0.5.17 → v0.5.18}/lib/routing/package.json +0 -0
  504. /package/framework/{v0.5.17 → v0.5.18}/lib/routing/src/main.js +0 -0
  505. /package/framework/{v0.5.17 → v0.5.18}/lib/routing/src/radix.js +0 -0
  506. /package/framework/{v0.5.17 → v0.5.18}/lib/routing-introspect/package.json +0 -0
  507. /package/framework/{v0.5.17 → v0.5.18}/lib/secrets/package.json +0 -0
  508. /package/framework/{v0.5.17 → v0.5.18}/lib/secrets/src/backends/env.js +0 -0
  509. /package/framework/{v0.5.17 → v0.5.18}/lib/secrets/src/main.js +0 -0
  510. /package/framework/{v0.5.17 → v0.5.18}/lib/session-store.js +0 -0
  511. /package/framework/{v0.5.17 → v0.5.18}/lib/state.js +0 -0
  512. /package/framework/{v0.5.17 → v0.5.18}/lib/swig-filters/README.md +0 -0
  513. /package/framework/{v0.5.17 → v0.5.18}/lib/swig-filters/package.json +0 -0
  514. /package/framework/{v0.5.17 → v0.5.18}/lib/swig-filters/src/main.js +0 -0
  515. /package/framework/{v0.5.17 → v0.5.18}/lib/swig-resolver/package.json +0 -0
  516. /package/framework/{v0.5.17 → v0.5.18}/lib/swig-resolver/src/main.js +0 -0
  517. /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/package.json +0 -0
  518. /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/src/loaders/http.js +0 -0
  519. /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/src/loaders/memory.js +0 -0
  520. /package/framework/{v0.5.17 → v0.5.18}/lib/template-loaders/src/main.js +0 -0
  521. /package/framework/{v0.5.17 → v0.5.18}/lib/url/README.md +0 -0
  522. /package/framework/{v0.5.17 → v0.5.18}/lib/url/index.js +0 -0
  523. /package/framework/{v0.5.17 → v0.5.18}/lib/url/routing.json +0 -0
  524. /package/framework/{v0.5.17 → v0.5.18}/lib/uuid/package.json +0 -0
  525. /package/framework/{v0.5.17 → v0.5.18}/lib/uuid/src/main.js +0 -0
  526. /package/framework/{v0.5.17 → v0.5.18}/lib/validator.js +0 -0
  527. /package/framework/{v0.5.17 → v0.5.18}/lib/watcher/package.json +0 -0
  528. /package/framework/{v0.5.17 → v0.5.18}/lib/watcher/src/main.js +0 -0
  529. /package/framework/{v0.5.17 → v0.5.18}/lib/ws-framing/package.json +0 -0
  530. /package/framework/{v0.5.17 → v0.5.18}/lib/ws-framing/src/main.js +0 -0
  531. /package/framework/{v0.5.17 → v0.5.18}/lib/ws-query/package.json +0 -0
  532. /package/framework/{v0.5.17 → v0.5.18}/lib/ws-query/src/main.js +0 -0
  533. /package/framework/{v0.5.17 → v0.5.18}/lib/ws-session/package.json +0 -0
  534. /package/framework/{v0.5.17 → v0.5.18}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,41 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.5.18 - 2026-07-16
10
+ ### Added
11
+ * Bundle-wide `sliding` and `maxAge` cache defaults: `server.cache` now supplies `sliding` and `maxAge` fallbacks that a route inherits when it omits them, mirroring the existing `ttl` fallback — so sliding-window caching can be enabled for a whole bundle from one place. Per-route values still win (an explicit `sliding: false` overrides a bundle-wide `true`), and behaviour is unchanged for bundles that do not set these keys. Applies to cached HTML (swig, nunjucks) and JSON responses.
12
+ * Pluggable render/output-cache backend strategy: `server.cache.type` sets the default cache backend (`memory` or `fs`) for a whole bundle, and a route with `cache` set but no `type` now inherits it — mirroring the existing `ttl` / `sliding` / `maxAge` fallbacks. A per-route `cache.type` still wins. New bundles default to `memory`; behaviour is unchanged for existing installs (a route with no effective `type` is not cached, exactly as before). The memory and fs backends now share one strategy dispatcher (`lib/render-cache`) that the render controllers and the server read path go through, providing the seam for additional backends.
13
+ * Added a native schema/DTO builder (gina.dto): author a data shape once and project it to dialect-aware JSON Schema (.toJsonSchema, draft-07 or 2020-12), the live form-validator rules-object (.toRules), and a stable name for the type generator. Also adds a routing-introspect helper that un-collapses inline validator:: requirements into real JSON Schema. Foundation for the #DTO validation pipe and richer OpenAPI/MCP request/response schemas.
14
+ * Added a POST /_gina/cache/clear admin endpoint (both server engines, loopback-gated like /_gina/cache/stats) that flushes the rendered-output cache — the static: (HTML) and data: (JSON) namespaces, with an optional ?bundle=<name> filter — without ever touching compiled templates or HTTP/2 sessions. It is backed by a namespace-scoped renderCache.clear(bundle) (which runs each entry cleanup so fs bodies + their .meta sidecars are removed) and a new keys() accessor on the in-process cache primitive. A new gina cache:clear [<bundle>] @<project> CLI drives it — an offline reclaim of the on-disk render-output dirs for the bundle (including orphaned prior-release dirs, preserving the config/swig infra caches) plus the in-heap flush via the endpoint — with --dry-run and --format=json output.
15
+ * `bundle:openapi` and `bundle:mcp` now emit real request/response schemas from a route's `param.dto` / `param.responseDto`. A bundle DTO module at `dtos/<Name>.js` — a factory `module.exports = function (dto) { return dto.object({ ... }); }` — projects to an OpenAPI 3.1 requestBody plus a 422 response, or an MCP tool inputSchema.body plus outputSchema. An inline `validator::{ ... }` routing requirement is also un-collapsed into a real parameter schema instead of the previous `.*`.
16
+ * Default-on request validation from a route DTO: a routing.json rule declaring `param.dto` now has its payload validated against that DTO before the controller action runs, answering a clean 422 (field -> rule -> message, localised) on failure and handing the action a type-coerced payload on success. `param.responseDto` now also shapes the outgoing JSON, so a field marked `.exclude()` never reaches the wire. DTOs are resolved and registered at bundle boot, so a missing or un-evaluable DTO fails the boot instead of silently disabling validation. Routes that declare no DTO are unaffected.
17
+ * Evict by event from outside the bundle: `POST /_gina/cache/clear?event=<name>` (both engines) and `gina cache:clear --event=<name>`. A controller's `self.cache.invalidateByEvent()` only reaches its own process, so this is how one bundle's write invalidates another bundle's cached pages. Both report the number of entries evicted. Note `?event=` previously went unread, so passing it flushed EVERY bundle's output cache instead of evicting that event's entries; it is now honoured and takes precedence over `?bundle=`.
18
+ * `gina bundle:types <bundle> @<project>` emits TypeScript declarations from a bundle's DTOs — the fourth projection of a DTO, alongside runtime validation, response shaping and the OpenAPI / MCP schemas, so a shape authored once is also the shape your editor and `tsc` see. Written to `<bundle>/dtos/index.d.ts` by default (`--output` overrides). Each DTO emits TWO types, because its declared shape and the shape the server actually holds are not the same: `<Name>` is what the client sends (and what the OpenAPI schema documents), while `<Name>Projected` is what the action reads on `req.dto` and what a `param.responseDto` puts on the wire — with the `.exclude()`d fields dropped. Value bounds (`.min()` / `.max()`) are carried as documentation only, and a `date` field is typed `string` rather than `Date`, because that is what the validator actually hands the action.
19
+ * Per-form legacy opt-in `data-gina-form-checkbox-value-as-state="true"` (deprecated, transitional) preserving the pre-fix value-driven checkbox ticking while markup migrates to the `checked` attribute; a once-per-field console warning now flags checkboxes whose `value` used to imply the checked state
20
+ * Render cache: a redis-backed L2 tier — rendered output is cached in a shared redis so multiple replicas serve the same rendered page, and a freshly-started replica serves content a peer already rendered (cross-replica cold-start). Enable it with a bundle-wide default in settings.json — `cache: { type: "redis", store: "<name>" }`, where `store` names a `connectors.json` redis connector — or per route via `cache: { type: "redis", ttl: <seconds> }`. Writes go to the in-process L1 synchronously and to redis fire-and-forget (the response never waits on redis); a request that misses L1 warms it back from redis with the authoritative remaining PTTL and re-registers the route's invalidateOnEvents; invalidation (delete / clear / invalidateByEvent) propagates to redis; a down or failing redis degrades to per-replica caching (fail-open) with a once-per-process diagnostic warning. The bundle validates its cache configuration at boot and refuses to start on an unsupported shape (redis with `sliding`, a redis route with neither a ttl nor invalidateOnEvents, or a redis strategy with no `store`) — give every redis route a ttl (or invalidateOnEvents), since a non-expiring key is orphaned on a release-namespace change.
21
+ * bundle:build and project:build now stamp a source-tree fingerprint (fingerprint, builtAt, fpSpec) into the project manifest release records — the substrate for stale built-release detection on local production rehearsals (releaseWatch groundwork)
22
+ * Two-tier render-cache observability: every cache hit's Cache-Status header now carries an RFC 9211 detail parameter naming the physical tier that served the bytes — detail=memory for the in-process L1, detail=redis for a shared-L2 warm (the cross-replica cold-start visible per request), detail=fs for a disk read-back after a restart — and /_gina/cache/stats gains an additive l2 block on both engines reporting the redis store connection health (status, mode, key prefix, connection-error count and last error), with no network round-trip on the admin path.
23
+ * releaseWatch — opt-in stale built-release watch for local production rehearsals (#RWATCH): `server.releaseWatch` in settings.json arms a source-tree fingerprint watch on local-scope non-dev bundles; staleness surfaces on `GET /_gina/release/status` and the `GET /_gina/release/events` SSE stream, and `POST /_gina/release/rebuild` rebuilds with an idle-gated restart honouring in-flight requests and `gina.registerBusyProbe` application probes (notify default, opt-in auto mode)
24
+ * releaseWatch — a live stale-release banner (#RWATCH): with `server.releaseWatch` enabled on a local-scope non-dev bundle, rendered HTML pages carry a self-contained bottom-bar banner that surfaces build/restart staleness live over the `/_gina/release/events` SSE stream and offers a one-click rebuild-and-reload (idle-gated restart for server-code changes, build-only for static assets, contextual force-restart while waiting on idle); shadow-DOM isolated, CSP-nonce aware, injected server-side into both the swig and nunjucks render paths, and byte-inert on every other scope/env
25
+ * releaseWatch — a `server.releaseWatch.restartMode` option (#RWATCH): `daemon` (default) drains and spawns `gina bundle:restart`; `supervisor` drains and then exits(0) so an external orchestrator respawns the process on the rebuilt release — the daemonless `gina-container` launch path, which has no framework daemon to spawn a restart (requires a restart-on-clean-exit policy, e.g. a k8s Deployment or `docker run --restart=always`). It is an explicit operator opt-in, never auto-detected: a bundle is spawned detached and legitimately outlives its daemon, so probing for a daemon would risk exiting a healthy process after a routine `gina stop`
26
+ ### Changed
27
+ * Release-namespaced render/output-cache keys — a framework upgrade (or a per-deploy `GINA_CACHE_NAMESPACE` bump) now auto-invalidates the render/output cache, so a new build never serves a page cached by old code. The cache key AND the `fs` cache path carry a release namespace: `GINA_CACHE_NAMESPACE` (an operator-set id such as a git SHA or build number) when set, otherwise the framework version (`GINA_VERSION`, which is set at runtime). The key format is centralized in ONE builder shared by the three render controllers and the server read path, so the writer and reader keys can never drift. `fs`-cached files now live under a `<namespace>` directory (`<cache.path>/<bundle>/<namespace>/…`); files from a superseded namespace are orphaned on disk until they are cleared (a cross-strategy flush is a follow-up). Dev mode is unaffected (it runs cacheless).
28
+ * The Cache-Status miss form is now the RFC 9211 grammar gina-cache; fwd=uri-miss (previously the bare gina-cache; uri-miss, which read as an unregistered parameter to RFC-aware tooling), and the engine-agnostic read path now emits it on a genuine both-tier miss — giving Express bundles their first cache-miss signal on the wire.
29
+ ### Fixed
30
+ * A framework error raised from a detached context — a scheduled cron/timer, a worker, or a bootstrap-time `getLib()` call — no longer crashes the process with `TypeError: next is not a function`. The internal `throwError` helper treated the per-request router context (stored globally and never cleared) as if a live request were in flight and invoked a stale, non-callable `next()`, which additionally masked the original error. It now writes an error response only when a live response is still writable, hands back to the middleware chain only when `next` is genuinely callable, and otherwise surfaces the real error (emerg-logged for fatal calls, thrown otherwise). Live-request error handling is unchanged.
31
+ * The `fs` render-cache backend now survives a server restart. Previously an `fs`-cached response written to disk was orphaned on the next boot (the in-process index starts empty), so it was never served again and its file was never cleaned up — `fs` behaved no better than `memory` across a restart. The server read path now falls back to disk on an index miss, replaying the entry from a sibling `<file>.meta` JSON sidecar and preserving the ORIGINAL absolute expiry: a restart never extends a TTL (a non-sliding entry still expires at its original creation time plus `ttl`; a sliding entry keeps its absolute `maxAge` ceiling). The `memory` backend stays volatile (cleared on restart), unchanged.
32
+ * getLib() and getConfig() no longer crash with an opaque "Cannot read properties of undefined (reading 'conf')" when the framework configuration build aborts partway (for example a fail-closed secret resolution on an unset ${secret:KEY}) and bundle code, a cron, a worker, or module-load-time bootstrap reads configuration before the build has finished. The resolvers now fall back to the equivalent per-bundle/env configuration when the fully-built container is not yet available, or fail cleanly, so the real underlying boot error surfaces instead of a masking crash.
33
+ * Event-driven cache invalidation now works. A route's `cache.invalidateOnEvents` was registered but nothing ever fired it, so the documented `self.cache.invalidateByEvent()` did not exist and configured routes served stale content until their TTL expired. `self.cache` now exists on the controller and returns the number of entries evicted. Three further defects in the same path are fixed: re-registering a key that carries a querystring THREW (the registry ran cache keys through a condition evaluator, and `?`/`=` parse as operator tokens) — under the swig engine that throw unwound to the top-level render error handler, which answered 500 and discarded a page that had already rendered; registrations were never reclaimed, so the registry grew one row per cache-miss re-render; and an `fs`-cached entry read back after a restart came back with no registration at all, so firing its event silently failed to evict it.
34
+ * A failed cache write no longer discards a page that rendered correctly. Under the swig engine a cache-write error unwound to the top-level render error handler, which answered 500 — throwing away a perfectly good response. It now degrades exactly as the nunjucks and JSON renderers already did: the response is served, the failure is logged, and the next cache miss retries the write.
35
+ * A checkbox's `value` attribute no longer decides its `checked` state: the HTML `checked` attribute alone drives the initial rendering, and the posted boolean is derived from the live checked state instead of the value string — so a consent-style checkbox rendered with `value="true"` is no longer silently pre-ticked, `value="false"` no longer un-ticks a server-checked box, a checkbox unticked from consumer script no longer posts `true` off its stale value, and a neutral-valued checkbox with an `isBoolean` rule posts real booleans instead of going dead (#49)
36
+ * The published TypeScript declarations now describe the runtime: the main entry declares a value (previously 'import gina from "gina"; gina.lib' failed to typecheck for every consumer), the module surface carries all 78 runtime members including 'gina.dto', 'SuperController' gains its i18n / jobs / trailers / events / template-override methods plus 'GinaRequest<TDto>' and 'req.dto' typing for route DTOs, fictional declarations were removed, and a two-part gate (a consumer fixture compiled by tsc through the package exports map + a runtime-parity test) keeps the declarations and the runtime in sync.
37
+ * Restored error diagnostics that a bitwise `|` was silently destroying at nine sites across the HTTP server, the browser client bundle, and three CLI commands. `err.stack|err.message|err` coerced the Error to the number `0` (because `+` binds tighter than `|`), so a rendered 500 page body, the express-middleware error handler, and the `protocol:set` / `port:reset` / `project:add` CLI error output all reported `0` instead of the cause. They now use a logical `||` and surface the real error stack/message.
38
+ * A server-side form-validator query rule no longer re-points the framework's process-wide cache onto a second Map: the rule's hand-built controller now reuses the live server instance (published at server start), so concurrent renders keep reading their cached entries and pooled HTTP/2 sessions land in the real server's cache instead of an orphan store on the bundle's config dict
39
+ * Fixed bundle:openapi and bundle:mcp advertising .exclude()d DTO fields in response schemas — the 200 content schema and the MCP tool outputSchema now emit the response projection (toJsonSchema with dropExcluded), dropping fields the wire can never carry from properties and required[]; request-side requestBody / inputSchema.body keep the declared shape (#B110)
40
+ * Fixed log messages containing a $ being mangled by the text formatter — the %-token splice used a string replacement, which dollar-expands $-sequences in the message (a $ followed by a backtick was replaced by the rendered log prefix itself, recurring at each occurrence); the formatter now uses a function replacer so messages render verbatim across all levels and all sinks (stdout, mq, file) (#B108)
41
+ * The in-process render/output cache no longer orphans `fs`-strategy files on TTL expiry: an entry expiring on its timer previously skipped the eviction cleanup, leaving its cached body and `.meta` sidecar on disk and its event registrations stranded. Timer expiry now runs the same cleanup as a manual eviction (#B113).
42
+ * The validator's forced rule self-injection for boolean-classified checkboxes (and boolean-valued radios) now appends `isRequired` before `isBoolean`, so the engine's false-value rescue applies and an unchecked box whose rule declared neither key no longer fails validation with "Cannot be left empty"
43
+
9
44
  ## 0.5.17 - 2026-07-13
10
45
  ### Fixed
11
46
  * Cleaning up a stale project registration is now reliable. `gina project:rm @<project> --force` (the `:rm` alias) removes the entry instead of erroring — the alias had failed an internal `--force` guard that only the full `project:remove` form passed. And `gina project:remove` / `project:rm @<project> --force` no longer crashes with an `ENOENT` error when the stale project's path can no longer be created (a top-level path such as `/app`, or any path under a read-only parent): it skips the now-pointless project-directory re-creation and goes straight to registry-only removal, cleaning both `~/.gina/projects.json` and its state-store mirror plus the project's port assignments — without resurrecting an empty skeleton directory.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Gina
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/gina)](https://www.npmjs.com/package/gina) [![npm downloads](https://img.shields.io/npm/dm/gina)](https://www.npmjs.com/package/gina) [![GitHub stars](https://img.shields.io/github/stars/gina-io/gina)](https://github.com/gina-io/gina/stargazers) [![Tests](https://github.com/gina-io/gina/actions/workflows/test.yml/badge.svg)](https://github.com/gina-io/gina/actions/workflows/test.yml) [![Socket Badge](https://socket.dev/api/badge/npm/package/gina)](https://socket.dev/npm/package/gina) [![Node.js >= 22](https://img.shields.io/badge/node-%3E%3D%2022-brightgreen)](https://nodejs.org) [![Bun >= 1.2](https://img.shields.io/badge/Bun-%3E%3D%201.2-brightgreen)](https://bun.sh) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
3
+ [![npm version](https://img.shields.io/npm/v/gina)](https://www.npmjs.com/package/gina) [![npm downloads](https://img.shields.io/npm/dm/gina)](https://www.npmjs.com/package/gina) [![GitHub stars](https://img.shields.io/github/stars/gina-io/gina)](https://github.com/gina-io/gina/stargazers) [![Tests](https://github.com/gina-io/gina/actions/workflows/test.yml/badge.svg)](https://github.com/gina-io/gina/actions/workflows/test.yml) [![Socket](https://img.shields.io/badge/Socket-view%20analysis-blue)](https://socket.dev/npm/package/gina) [![Node.js >= 22](https://img.shields.io/badge/node-%3E%3D%2022-brightgreen)](https://nodejs.org) [![Bun >= 1.2](https://img.shields.io/badge/Bun-%3E%3D%201.2-brightgreen)](https://bun.sh) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
4
 
5
5
  > **Documentation:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [GitHub](https://github.com/gina-io/gina/issues) · **Changelog:** [CHANGELOG.md](./CHANGELOG.md)
6
6
 
@@ -42,11 +42,21 @@ open https://localhost:3100
42
42
 
43
43
  > **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
44
44
 
45
- ## What's in 0.5.17
46
-
47
- - **Fixed`npm install -g gina` works under the npm 12 `--allow-scripts=gina` remedy.** With the npm 12 install-script allowance set (the `--allow-scripts=gina` flag, or `npm config set allow-scripts=gina --location=user`), the global install no longer fails with `EALLOWSCRIPTS`: the nested framework-dependency install inside post-install now drops the inherited `npm_config_allow_scripts` for its duration (those dependencies carry no install scripts, so nothing is lost). This makes `0.5.17` the first Gina version installable on npm 12, where install scripts are blocked by default and the allowance is required. (#B106)
48
- - **Fixedstale project cleanup is reliable.** `gina project:rm @<project> --force` (the `:rm` alias) now removes the registration instead of erroring, and neither `project:remove` nor `project:rm --force` crashes with `ENOENT` when a stale project's path can no longer be created (a top-level path, or one under a read-only parent) it goes straight to registry-only removal, cleaning `~/.gina/projects.json`, its state-store mirror, and the project's port assignments without resurrecting an empty skeleton directory. (#B104 / #B105)
49
- - **Fixed — `gina bundle:start` honours a bundle's configured default scope.** A typo in the scope-resolution expression returned an undefined property, so a bundle that declared a default scope in its manifest started with an undefined scope; the command now reads the correct property. (Bundles with no configured default scope were unaffected they already fell back to the framework default scope.)
45
+ ## What's in 0.5.18
46
+
47
+ - **Addeda shared redis L2 for the render cache, and pluggable cache backends.** `server.cache.type` now sets a bundle's default output-cache backend (`memory`, `fs`, or `redis`) and a route with `cache` set inherits it, alongside new bundle-wide `sliding` / `maxAge` fallbacks (per-route values still win). The `redis` tier caches rendered output in a shared store, so several replicas serve the same rendered page and a freshly-started replica serves what a peer already rendered (cross-replica cold-start): writes go to the in-process L1 synchronously and to redis fire-and-forget (the response never waits on redis), an L1 miss warms back from redis with the authoritative remaining TTL, invalidation propagates, and a down or failing redis degrades to per-replica caching (fail-open). The bundle validates its cache configuration at boot and refuses to start on an unsupported shape. New bundles default to `memory`; existing installs are unchanged.
48
+ - **Addedtype-safe DTOs and a default-on validation pipe.** `gina.dto` lets you author a data shape once and project it four ways: runtime validation, response shaping, JSON Schema (draft-07 or 2020-12), and TypeScript. A `routing.json` rule declaring `param.dto` has its payload validated before the controller action runs a clean, localised 422 on failure, a type-coerced payload on success and `param.responseDto` shapes the outgoing JSON so a field marked `.exclude()` never reaches the wire. `gina bundle:types <bundle> @<project>` emits declarations from those same DTOs, and `bundle:openapi` / `bundle:mcp` now emit real request/response schemas instead of `.*`. DTOs are resolved at bundle boot, so a missing one fails the boot instead of silently disabling validation; routes that declare no DTO are unaffected.
49
+ - **Added — `releaseWatch`, a stale built-release watch for local production rehearsals.** A bundle serving a built release under `local` scope + a non-dev env has no hot-reload, so after you edit source it silently keeps serving the stale build. Opt in via `server.releaseWatch`: the bundle fingerprints its source tree against the manifest release stamp (now written by `bundle:build` / `project:build`), surfaces staleness on `GET /_gina/release/status` and a `GET /_gina/release/events` SSE stream, and rebuilds on `POST /_gina/release/rebuild` with an **idle-gated restart** that waits on in-flight requests and `gina.registerBusyProbe` application probes. Rendered pages carry a live shadow-DOM banner offering one-click rebuild-and-reload, and `restartMode: supervisor` suits a daemonless container launch (drain, then exit(0) for an orchestrator to respawn). Hard-gated on local scope + a non-dev env — byte-inert everywhere else.
50
+ - **Added — flush or event-evict the render cache from outside the bundle.** `POST /_gina/cache/clear` (both engines, loopback-gated) and a new `gina cache:clear [<bundle>] @<project>` CLI flush the rendered-output cache — without ever touching compiled templates or HTTP/2 sessions — with `--dry-run` and `--format=json`. `?event=<name>` evicts by event: a controller's `self.cache.invalidateByEvent()` only reaches its own process, so this is how one bundle's write invalidates another bundle's cached pages. Note `?event=` previously went unread, so passing it flushed *every* bundle's output cache; it is now honoured.
51
+ - **Added — two-tier render-cache observability.** Every cache hit's `Cache-Status` header now carries an RFC 9211 `detail` parameter naming the physical tier that served the bytes — `memory` for the in-process L1, `redis` for a shared-L2 warm (the cross-replica cold-start, visible per request), `fs` for a disk read-back after a restart — and `/_gina/cache/stats` gains an `l2` block reporting the redis store's connection health, with no network round-trip on the admin path.
52
+ - **Changed — render-cache keys are release-namespaced, so an upgrade auto-invalidates.** The cache key *and* the `fs` cache path now carry a release namespace — `GINA_CACHE_NAMESPACE` (an id you set, such as a git SHA or build number) when present, otherwise the framework version — so a new build never serves a page cached by old code. `fs`-cached files from a superseded namespace are orphaned on disk until cleared. Dev mode is unaffected (it runs cacheless).
53
+ - **Changed — the `Cache-Status` miss form follows RFC 9211.** It is now `gina-cache; fwd=uri-miss` (previously the bare `gina-cache; uri-miss`, which read as an unregistered parameter to RFC-aware tooling), and the engine-agnostic read path emits it on a genuine both-tier miss — giving Express bundles their first cache-miss signal on the wire.
54
+ - **Fixed — event-driven cache invalidation now works, and a cache fault no longer discards a good page.** A route's `cache.invalidateOnEvents` was registered but nothing ever fired it — the documented `self.cache.invalidateByEvent()` did not exist, so configured routes served stale content until their TTL expired. `self.cache` now exists on the controller and reports the number of entries evicted. Three further defects in the same path are fixed: re-registering a key carrying a querystring **threw** (the registry ran cache keys through a condition evaluator, where `?`/`=` parse as operator tokens) and under the swig engine that throw unwound to the top-level error handler, which answered 500 and discarded a page that had already rendered; registrations were never reclaimed, so the registry grew a row per cache-miss re-render; and an `fs` entry read back after a restart carried no registration at all. Separately, a failed cache **write** now degrades exactly as the nunjucks and JSON renderers already did — the response is served, the failure logged, and the next miss retries.
55
+ - **Fixed — the `fs` render cache survives a restart.** An `fs`-cached response written to disk was previously orphaned on the next boot (the in-process index starts empty), so it was never served again and its file was never cleaned up — `fs` behaved no better than `memory` across a restart. The read path now falls back to disk on an index miss, replaying the entry from a `.meta` sidecar and preserving the **original absolute expiry**, so a restart never extends a TTL. Entries expiring on their timer now run the same cleanup as a manual eviction, instead of stranding their body and sidecar on disk.
56
+ - **Fixed — a checkbox's `value` attribute no longer decides its `checked` state.** The HTML `checked` attribute alone drives the initial rendering, and the posted boolean is derived from the live checked state rather than the value string — so a consent-style checkbox rendered with `value="true"` is no longer silently pre-ticked, `value="false"` no longer un-ticks a server-checked box, a checkbox unticked from your own script no longer posts `true` off its stale value, and a neutral-valued checkbox with an `isBoolean` rule posts real booleans instead of going dead. The forced rule injection now appends `isRequired` before `isBoolean`, so an unchecked box whose rule declared neither no longer fails with "Cannot be left empty". A transitional per-form opt-in — `data-gina-form-checkbox-value-as-state="true"` (deprecated) — preserves the old value-driven ticking while markup migrates to `checked`, and a once-per-field console warning flags the affected checkboxes. (#49)
57
+ - **Fixed — the published TypeScript declarations now describe the runtime.** `import gina from "gina"; gina.lib` previously failed to typecheck for every consumer, because the main entry declared no value at all. The module surface now carries all 78 runtime members including `gina.dto`; `SuperController` gains its i18n / jobs / trailers / events / template-override methods plus `GinaRequest<TDto>` and `req.dto` typing for route DTOs; fictional declarations were removed; and a two-part gate (a consumer fixture compiled by `tsc` through the package exports map, plus a runtime-parity test) keeps the declarations and the runtime in sync.
58
+ - **Fixed — errors surface instead of crashing, masking, or coming back as `0`.** A framework error raised from a detached context — a scheduled cron/timer, a worker, or a bootstrap-time `getLib()` — no longer crashes the process with `TypeError: next is not a function` while masking the original error. `getLib()` / `getConfig()` no longer crash with an opaque `Cannot read properties of undefined (reading 'conf')` when configuration is read while the config build is still partway (for example a fail-closed `${secret:KEY}` resolution), so the real boot error surfaces. A bitwise `|` at nine sites across the HTTP server, the browser client bundle, and three CLI commands coerced the Error to the number `0` — a rendered 500 page body and the `protocol:set` / `port:reset` / `project:add` output all reported `0` instead of the cause. And log messages containing a `$` are no longer mangled by the text formatter's `%`-token splice, across every level and sink. (#B108 / #B112)
59
+ - **Fixed — two smaller corrections.** A server-side form-validator `query` rule no longer re-points the framework's process-wide cache onto a second Map, so concurrent renders keep reading their cached entries and pooled HTTP/2 sessions land in the real server's cache. And `bundle:openapi` / `bundle:mcp` no longer advertise `.exclude()`d DTO fields in response schemas — the 200 content schema and the MCP tool `outputSchema` now emit the response projection, while request-side schemas keep the declared shape. (#B110 / #B115)
50
60
 
51
61
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
52
62
 
@@ -71,6 +81,17 @@ Full installation guide, tutorials, configuration reference, and API docs at **[
71
81
 
72
82
  Gina is co-authored by **Martin Luther ETOUMAN NDAMBWE** ([Rhinostone](https://rhinostone.com)) and **Fabrice DELANEAU** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously. See [GOVERNANCE.md](./GOVERNANCE.md) for details.
73
83
 
84
+ ## Supply-chain scanners
85
+
86
+ Gina is an MVC framework with a process-management CLI, so it uses Node's
87
+ `child_process` by design — to start and supervise application bundle processes
88
+ and the framework daemon, run local/SSH commands (`lib/shell`), launch the
89
+ inspector, and perform setup in the npm install scripts. Supply-chain scanners
90
+ therefore report a **Shell access** capability for `child_process`. This is
91
+ expected and intrinsic to a CLI framework, not a vulnerability: the install-time
92
+ commands are built only from local values (npm prefix, install path) and take no
93
+ network input.
94
+
74
95
  ## License (MIT)
75
96
 
76
97
  Copyright © 2009-2026 [Rhinostone](https://rhinostone.com)
package/ROADMAP.md CHANGED
@@ -42,6 +42,8 @@ This roadmap covers planned features, architectural improvements, new connectors
42
42
  | **Q3 2026** | `0.5.15` ✅ | Client-side components (Web Components) — standards-based, zero-dependency conventions for stateful client widgets: `gina view:add` scaffolds a reference custom element (server-rendered light-DOM partial + behavior-only class), components upgrade automatically in popin/XHR-injected content with no rebinding, form-associated custom elements participate in `FormValidator`, live-data components ride the connect/disconnect lifecycle over `method:"ws"` routes or SSE, and the dev Inspector gains a component census + client component-event capture · a popin/dialog trigger can opt out of the hover/focus preload (`data-gina-dialog-preload="false"`) · **Fixed**: `gina.popin` sees every popin so a form can redirect into a different one (#B90), a redirect into a popin opens content-first (#B79), server-side validation of a data object against a rules object works (#B85), `$form.send(FormData)` nests bracket-notation field names (#B92), a fields-only multipart POST no longer hangs (#B93) and a malformed multipart body no longer crashes the bundle (#B97), `X-Powered-By` suppression reaches static and error responses (#B96), and upload reset/delete removes the preview, restores class-hidden inputs, and gains removal callbacks (#B94/#B95) |
43
43
  | **Q3 2026** | `0.5.16` ✅ | **Added**: a `multipart/form-data` request's non-file text fields are now captured into `request.body` (bracket-notation nested, values verbatim, capped by `upload.maxTextFields` / `upload.maxTextFieldSize` with a 400 on breach) — previously silently dropped · **Fixed**: `$form.send(FormData)` keeps its non-file fields when the payload also carries files (#B92), and a routing rule's `param.title` now reaches the browser-tab title (`page.view.title`) instead of always showing the route name, with the route name as the fallback (#B98) |
44
44
  | **Q3 2026** | `0.5.17` ✅ | **Fixed**: `npm install -g gina` no longer fails with `EALLOWSCRIPTS` under the npm 12 `--allow-scripts=gina` remedy — the nested framework-dependency install drops the inherited allowance, making `0.5.17` the first version installable on npm 12 (#B106) · stale project cleanup is reliable — `project:rm @<project> --force` (the alias) removes the entry, and `project:remove` / `:rm --force` no longer `ENOENT`-crashes on an uncreatable stale path, going straight to registry-only removal (#B104/#B105) · `bundle:start` honours a bundle's configured default scope (a typo had returned an undefined property) |
45
+ | **Q3 2026** | `0.5.18` ✅ | **Added**: a redis-backed L2 render cache — rendered output is cached in a shared store, so several replicas serve the same rendered page and a freshly-started replica serves what a peer already rendered (cross-replica cold-start), degrading to per-replica caching if redis is down · pluggable cache backends (`server.cache.type`: `memory` / `fs` / `redis`) with bundle-wide `sliding` / `maxAge` fallbacks a route inherits · type-safe DTOs and a default-on validation pipe (`gina.dto` — one shape projected to runtime validation, response shaping, JSON Schema and TypeScript; `param.dto` validates the payload before the action with a localised 422, `param.responseDto` shapes the wire, `gina bundle:types` emits declarations, and `bundle:openapi` / `bundle:mcp` emit real request/response schemas) · `releaseWatch` — an opt-in stale built-release watch for local production rehearsals (source-tree fingerprint against the manifest release stamp, `GET /_gina/release/status` + an SSE stream, idle-gated rebuild-and-restart honouring in-flight requests and busy probes, a live shadow-DOM banner, and `restartMode: supervisor` for daemonless container launches) · `POST /_gina/cache/clear` + a `gina cache:clear` CLI (flush the rendered-output cache, or evict by event across bundles) · two-tier cache observability (an RFC 9211 `Cache-Status` `detail` naming the serving tier, plus an `l2` redis-health block on `/_gina/cache/stats`) · **Changed**: render-cache keys are release-namespaced, so an upgrade auto-invalidates (`GINA_CACHE_NAMESPACE`, else the framework version) · the `Cache-Status` miss form is now the RFC 9211 `gina-cache; fwd=uri-miss`, and Express bundles get their first cache-miss signal · **Fixed**: event-driven cache invalidation works — `self.cache.invalidateByEvent()` now exists, and a key carrying a querystring no longer throws a 500 that discarded an already-rendered page · the `fs` cache survives a restart (disk read-back via a `.meta` sidecar, original absolute expiry preserved, no TTL extension) · a checkbox's `value` attribute no longer decides its `checked` state (#49) · the published TypeScript declarations describe the runtime · errors surface instead of crashing, masking, or coming back as `0` (detached-context `throwError`, partial-boot `getLib()` / `getConfig()`, a bitwise-or at nine sites, and `$` in log messages) |
46
+ | **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
45
47
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
46
48
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
47
49
 
@@ -60,6 +62,20 @@ This roadmap covers planned features, architectural improvements, new connectors
60
62
  | ✅ | **PATCH method** — `req.patch` populated with the parsed request body (JSON or form-encoded). `req.body` aliases `req.patch`. URI params merged. `"method": "PATCH"` valid in `routing.json`. Use PATCH for partial updates (only sent fields change) vs PUT which replaces the full resource. | `0.3.0` | 2026-03-31 |
61
63
  | ✅ | **HEAD method** — `req.head` populated with query-string and URI params. Full controller action runs so all response headers are set correctly; body is suppressed before writing to the wire. Both `render()` and `renderJSON()` honour HEAD. Routes declared as `GET` automatically accept HEAD — no extra routing rule needed. | `0.3.0` | 2026-03-31 |
62
64
  | ✅ | **Client-side components (Web Components)** — Standards-based conventions for stateful client widgets: custom elements v1, zero dependency, no build tooling. Server-rendered light-DOM authoring keeps HTML (designer) and JS (developer) separated — the behavior-only class binds its own server-rendered subtree and holds no markup strings (repeatable markup clones from a server-rendered `<template>`). Components upgrade automatically in popin/XHR-injected content with no rebinding; SEO/GEO-first (meaningful content ships in the initial server-rendered HTML). `gina view:add` scaffolds a reference component (engine partial + behavior-only class); e2e coverage locks popin auto-upgrade, strict-CSP compatibility (real nonce'd header, no `unsafe-inline`), SSR hydration from attributes + a JSON `data-*` payload, and no-JS crawler equivalence. The `gina-*` tag prefix is reserved for framework components. Form-associated custom elements participate in FormValidator — a named component exposing a `.value` getter is collected, validated, serialized into the AJAX payload, and error-rendered like a native control (client-side live-check on its composed bubbling `change`, dirty-tracking, and auto-id), so long as it declares `static formAssociated = true`, carries a `name`, and fires a composed `change` on commit. Live-data components ride the same lifecycle — open the connection in `connectedCallback`, close it in `disconnectedCallback` (popin close then tears it down automatically) — paired with `method:"ws"` routes or SSE via `renderStream()`, with per-animation-frame batching guidance for high-frequency streams; the lifecycle contract is executed against a live HTTP/2 extended-CONNECT loopback in the test suite. Dev-mode Inspector observability: the View tab carries a component census with a red undefined-components indicator (a typo'd tag or a missing definition script is no longer a silent failure), and the Events tab surfaces client-side `<tag>:<verb>` component events — metadata always, `detail` values only behind the existing `inspector.events.captureArgs` opt-in. | `0.5.15` | 2026-07-11 |
65
+ | ✅ | **Stale built-release watch** — For LOCAL production rehearsals. A bundle serving a built release under `local` scope + a non-dev env has no hot-reload, so after you edit source it silently keeps serving the stale build. Opt in via `server.releaseWatch` in `settings.json`: the bundle watches its SOURCE tree, compares fingerprints against the manifest release stamp, and surfaces staleness on `GET /_gina/release/status` and a live `GET /_gina/release/events` SSE stream (notify mode, the default) — or auto-rebuilds on change (opt-in `auto` mode). `POST /_gina/release/rebuild` rebuilds with an **idle-gated restart** that waits on in-flight HTTP requests and `gina.registerBusyProbe` application probes, so a restart never interrupts in-flight work. Hard-gated on `local` scope + a non-dev env — never active on a real cluster. | `0.5.18-alpha` | 2026-07-16 |
66
+
67
+ ---
68
+
69
+ ## Type-Safe DTOs & Validation
70
+
71
+ A unified data-shape layer — define a DTO/schema once and reuse it for request validation, response serialization, static types, and OpenAPI, then layer a default-on validation pipe and DTO-derived typing on top.
72
+
73
+ | Status | Feature | Version | Target |
74
+ | --- | --- | --- | --- |
75
+ | ✅ | **Unified DTO / schema primitive** — Define a data shape once and reuse it for runtime validation, static types, JSON-Schema/OpenAPI, and response serialization. Foundation for the validation pipe and DTO-derived types. | `0.5.18-alpha.2` | shipped |
76
+ | ✅ | **Global validation pipe** — Framework-level, default-on validation + coercion of the request payload against the route's DTO before the controller action runs, handing a typed, validated object to the handler. Declaring `param.dto` on a route also answers a clean 422 on failure; `param.responseDto` shapes the outgoing JSON. | `0.5.18-alpha.2` | shipped |
77
+ | ✅ | **Type safety from the DTO** — Types derived from DTO definitions (`gina bundle:types` emits `.d.ts` from a bundle's DTOs) plus a two-part gate that verifies the shipped declarations against the runtime: a consumer fixture compiled by `tsc` through the package exports map, and a runtime-parity test diffing the declarations against the live framework surface. `GinaRequest<TDto>` and `req.dto` type route-DTO payloads end to end. Keeps the existing JS runtime, no rewrite. | `0.5.18-alpha.2` | shipped |
78
+ | ✅ | **Documentation & guides** — DTO authoring, the validation pipe, and typed controllers on the docs site: the Route DTOs guide, `bundle:types` in the CLI reference, the routing `param.dto` / `param.responseDto` schema rows, and migration notes. | `0.5.18-alpha.2` | shipped |
63
79
 
64
80
  ---
65
81
 
@@ -226,6 +242,23 @@ Secrets handling for bundle JSON configs without baking plaintext values into so
226
242
 
227
243
  ---
228
244
 
245
+ ## Security & Compliance Controls
246
+
247
+ Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPAA** technical requirements. Gina supplies the controls; certification itself is an organizational, infrastructure, and process matter (a QSA assessment, a SOC2 auditor, HIPAA BAAs + a risk analysis) — a framework cannot be "certified." These are the building blocks an application deployed on Gina uses to satisfy the technical safeguards.
248
+
249
+ | Status | Feature | Version | Target |
250
+ | --- | --- | --- | --- |
251
+ | 📋 | **Authorization / RBAC** — A role/permission model, per-route authorization gate, and policy helpers (today Gina ships authentication status only, no authorization). Maps to PCI-DSS req 7, HIPAA §164.312(a)(1), SOC2 CC6 (least privilege). | `0.6.x` | Q4 2026 |
252
+ | 📋 | **Tamper-evident audit trail** — A user-attributed, append-only, integrity-protected record of who did what to which record when, distinct from application logging. Maps to PCI-DSS req 10, HIPAA §164.312(b), SOC2 CC7. | `0.6.x` | Q4 2026 |
253
+ | 📋 | **Authentication hardening** — Password hashing/policy helpers, account lockout, and MFA/TOTP hooks. Maps to PCI-DSS req 8, HIPAA §164.312(d). | `0.6.x` | Q4 2026 |
254
+ | 📋 | **Session lifecycle hardening** — Session-id rotation on privilege change and idle/absolute timeouts, on top of the existing Session plugin. Maps to PCI-DSS req 8.2. | `0.6.x` | Q4 2026 |
255
+ | 📋 | **PII/PHI protection** — Production log-field redaction, data classification, and retention helpers (today's redaction is a dev-only inspector tool). Maps to HIPAA and SOC2 Privacy. | `0.6.x` | Q4 2026 |
256
+ | 📋 | **Application-level rate limiting** — Per-endpoint / per-client throttling at the route layer (today only an HTTP/2 rapid-reset limiter exists). Maps to PCI-DSS anti-automation and SOC2 availability. | `0.6.x` | Q4 2026 |
257
+ | 📋 | **Data-at-rest / field-level encryption helpers** — Field-level encryption + key-management utilities. Maps to PCI-DSS req 3 and HIPAA §164.312(a)(2)(iv). | `0.6.x` | Q4 2026 |
258
+ | 📋 | **Compliance control-mapping guide** — A reference mapping each Gina control to the PCI-DSS / SOC2 / HIPAA requirement it supports, plus an explicit "what the framework does not cover" section (to follow). | `0.6.x` | Q4 2026 |
259
+
260
+ ---
261
+
229
262
  ## Connectors
230
263
 
231
264
  New database connectors follow the same interface as the existing Couchbase connector: declared in `connectors.json`, acquired via `getConnection()`.
@@ -0,0 +1 @@
1
+ 0.5.18
@@ -3769,7 +3769,17 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3769
3769
  var Controller = require(_(GINA_FRAMEWORK_DIR +'/core/controller/controller.js'), true);
3770
3770
  var controller = new Controller(controllerOptions);
3771
3771
  controller.name = route.param.control;
3772
- controller.serverInstance = serverInstance;
3772
+ // #B115 — prefer the LIVE engine published by server.js start(): query()
3773
+ // re-points lib/cache's process-wide backing Map to the controller's
3774
+ // `serverInstance._cached`, so handing it the config dict's own minted Map
3775
+ // sends a concurrent render's cache ops (compiled templates, output cache)
3776
+ // to the wrong store and strands the pooled HTTP/2 session + its
3777
+ // `_http2Sessions` tracker where nothing reads them. The config dict above
3778
+ // (+ its minted `_cached`) remains the fallback when no server runs in this
3779
+ // process (offline CLI / test harnesses).
3780
+ controller.serverInstance = ( process.gina && process.gina._serverInstance )
3781
+ ? process.gina._serverInstance
3782
+ : serverInstance;
3773
3783
  controller.setOptions(request, response, next, controllerOptions);
3774
3784
 
3775
3785
  var data = ( typeof(options.data) == 'object' && options.data.count() > 0 )
@@ -11006,10 +11016,6 @@ function ValidatorPlugin(rules, data, formId, culture) {
11006
11016
 
11007
11017
  defaultValue = $form.fieldsSet[f].defaultValue;
11008
11018
 
11009
- if (/$(on|true|false)$/i.test(defaultValue)) {
11010
- defaultValue = (/$(on|true)$/i.test(defaultValue)) ? true : false;
11011
- }
11012
-
11013
11019
  if ( /^(checkbox|radio)$/i.test($element.type) ) {
11014
11020
  $element.checked = $form.fieldsSet[f].defaultChecked;
11015
11021
  } else if ( !/^(checkbox|radio)$/i.test($element.type) ) {
@@ -14574,6 +14580,47 @@ function ValidatorPlugin(rules, data, formId, culture) {
14574
14580
  *
14575
14581
  * @return {object} bindedForm
14576
14582
  * */
14583
+ /**
14584
+ * Tells whether a checkbox posts a boolean derived from its live `.checked`
14585
+ * state (#49). A checkbox is boolean-classified when it carries no `value`
14586
+ * attribute (the DOM then defaults `.value` to `on`), when its value reads
14587
+ * `true` or `false` (the framework's change-time mirror maintains those), or
14588
+ * when a validation rule declares `isBoolean` for the field. A checkbox that
14589
+ * is NOT boolean-classified is value-carrying: its `value` is the submitted
14590
+ * payload and must never be coerced to a boolean.
14591
+ *
14592
+ * @inner
14593
+ * @param {object} $el - Checkbox element
14594
+ * @param {object} [rule] - Validation rule object declared for the field
14595
+ *
14596
+ * @returns {boolean} isBooleanCheckbox
14597
+ */
14598
+ var isBooleanCheckbox = function($el, rule) {
14599
+ return (
14600
+ $el.getAttribute('value') === null
14601
+ || /^(true|false)$/.test($el.value)
14602
+ || typeof(rule) != 'undefined' && rule && typeof(rule.isBoolean) != 'undefined'
14603
+ ) ? true : false;
14604
+ }
14605
+
14606
+ /**
14607
+ * Legacy opt-in (#49 — deprecated, transitional): when the form carries
14608
+ * `data-gina-form-checkbox-value-as-state="true"`, a checkbox's `value`
14609
+ * attribute keeps deciding its initial checked state like it did before
14610
+ * the fix. Default is the HTML-spec behavior: only the `checked`
14611
+ * attribute decides the initial state.
14612
+ *
14613
+ * @inner
14614
+ * @param {object} $form - Form object (`instance.$forms[id]` shape)
14615
+ *
14616
+ * @returns {boolean} isCheckboxValueAsState
14617
+ */
14618
+ var isCheckboxValueAsState = function($form) {
14619
+ return /^true$/i.test($form.target.dataset.ginaFormCheckboxValueAsState) ? true : false;
14620
+ }
14621
+ // one warn per field id per page load (migration aid, #49)
14622
+ var checkboxValueStateWarned = {};
14623
+
14577
14624
  var bindForm = function($target, customRule) {
14578
14625
 
14579
14626
  var $form = null
@@ -14851,9 +14898,6 @@ function ValidatorPlugin(rules, data, formId, culture) {
14851
14898
 
14852
14899
  if (!$form.fieldsSet[ elId ]) {
14853
14900
  let defaultValue = $inputs[f].value;
14854
- if (/$(on|true|false)$/i.test(defaultValue)) {
14855
- defaultValue = (/$(on|true)$/i.test(defaultValue)) ? true : false;
14856
- }
14857
14901
  // just in case
14858
14902
  // if (
14859
14903
  // typeof($form.fieldsSet[elId]) != 'undefined'
@@ -14878,10 +14922,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
14878
14922
  // reads FALSE at bind time despite the attribute being present, so
14879
14923
  // caching from `.checked` would hold the wrong default and a subsequent
14880
14924
  // form-reset would clear the originally-checked option.
14925
+ // #49: the value-derived clause (a checkbox whose `value` reads
14926
+ // true/on used to be treated as checked-by-default) is legacy
14927
+ // behavior, now gated on the form's explicit opt-in.
14881
14928
  $form.fieldsSet[elId].defaultChecked = (
14882
14929
  $inputs[f].defaultChecked
14883
14930
  ||
14884
- /^(true|on)$/.test(defaultValue)
14931
+ isCheckboxValueAsState($form)
14932
+ && /^(true|on)$/.test(defaultValue)
14885
14933
  && /^(checkbox)$/i.test($inputs[f].type)
14886
14934
  ) ? true : false;
14887
14935
 
@@ -14889,6 +14937,20 @@ function ValidatorPlugin(rules, data, formId, culture) {
14889
14937
  $form.fieldsSet[elId].value = $inputs[f].value;
14890
14938
  $form.fieldsSet[elId].defaultValue = $inputs[f].value;
14891
14939
  }
14940
+
14941
+ // Migration aid (#49): this markup used to be auto-ticked by its
14942
+ // `value` — surface it once so the author adds `checked` or the
14943
+ // legacy form opt-in.
14944
+ if (
14945
+ /^(checkbox)$/i.test($inputs[f].type)
14946
+ && !isCheckboxValueAsState($form)
14947
+ && !$inputs[f].hasAttribute('checked')
14948
+ && /^(true|on)$/i.test($inputs[f].getAttribute('value'))
14949
+ && !checkboxValueStateWarned[elId]
14950
+ ) {
14951
+ checkboxValueStateWarned[elId] = true;
14952
+ console.warn('[ FormValidator ] checkbox `'+ elId +'`: `value` no longer implies the checked state; add the `checked` attribute if it must render ticked, or set `data-gina-form-checkbox-value-as-state="true"` on the form to restore the legacy behavior');
14953
+ }
14892
14954
  }
14893
14955
  }
14894
14956
 
@@ -15635,7 +15697,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
15635
15697
  localValue = false
15636
15698
  }
15637
15699
  var isLocalBoleanValue = ( /^(true|on|false)$/i.test(localValue) ) ? true : false;
15638
- if (isInit && isLocalBoleanValue) { // on checkbox init
15700
+ // #49: value-driven initial ticking is legacy behavior — the HTML `checked`
15701
+ // attribute decides the initial state unless the form explicitly opts in.
15702
+ if (isInit && isLocalBoleanValue && isCheckboxValueAsState($form)) { // on checkbox init (legacy value-as-state mode)
15639
15703
  // update checkbox initial state
15640
15704
  // Value defines checked state by default
15641
15705
  if ( /^true$/i.test(localValue) && !$el.checked) {
@@ -16577,7 +16641,10 @@ function ValidatorPlugin(rules, data, formId, culture) {
16577
16641
  if (isDisabled) continue;
16578
16642
 
16579
16643
  // checkbox or radio
16580
- if ( typeof($target[i].type) != 'undefined' && $target[i].type == 'radio' || typeof($target[i].type) != 'undefined' && $target[i].type == 'checkbox' ) {
16644
+ if ( typeof($target[i].type) != 'undefined' && $target[i].type == 'checkbox' && isBooleanCheckbox($target[i], (rules) ? rules[name] : null) ) {
16645
+ // #49: boolean checkbox — the live `.checked` state IS the posted value
16646
+ fields[name] = $target[i].checked;
16647
+ } else if ( typeof($target[i].type) != 'undefined' && $target[i].type == 'radio' || typeof($target[i].type) != 'undefined' && $target[i].type == 'checkbox' ) {
16581
16648
 
16582
16649
  if ( $target[i].checked ) {
16583
16650
  // if is boolean
@@ -16833,7 +16900,23 @@ function ValidatorPlugin(rules, data, formId, culture) {
16833
16900
  && $form[i].type == 'checkbox' )
16834
16901
  {
16835
16902
 
16836
- if (
16903
+ if ( $form[i].type == 'checkbox' && isBooleanCheckbox($form[i], (rules) ? rules[name] : null) ) {
16904
+ // #49: boolean checkbox — the live `.checked` state IS the posted
16905
+ // value; self-inject the isBoolean rule like the legacy path did
16906
+ if (rules) {
16907
+ if ( typeof(rules[name]) == 'undefined' ) {
16908
+ rules[name] = { isBoolean: true };
16909
+ } else if ( typeof(rules[name]) != 'undefined' && typeof(rules[name].isBoolean) == 'undefined' ) {
16910
+ // forces it when field found in validation rules; isRequired is
16911
+ // appended BEFORE isBoolean — rules run in key insertion order and
16912
+ // the engine's isBoolean rescue only clears an isRequired error
16913
+ // recorded before it (a boolean false otherwise reads as empty)
16914
+ rules[name].isRequired = true;
16915
+ rules[name].isBoolean = true;
16916
+ }
16917
+ }
16918
+ fields[name] = $form[i].checked;
16919
+ } else if (
16837
16920
  $form[i].checked
16838
16921
  || typeof (rules[name]) == 'undefined'
16839
16922
  && $form[i].value != 'undefined'
@@ -16851,9 +16934,12 @@ function ValidatorPlugin(rules, data, formId, culture) {
16851
16934
  if ( typeof(rules[name]) == 'undefined' ) {
16852
16935
  rules[name] = { isBoolean: true };
16853
16936
  } else if ( typeof(rules[name]) != 'undefined' && typeof(rules[name].isBoolean) == 'undefined' ) {
16854
- rules[name].isBoolean = true;
16855
- // forces it when field found in validation rules
16937
+ // forces it when field found in validation rules; isRequired is
16938
+ // appended BEFORE isBoolean rules run in key insertion order and
16939
+ // the engine's isBoolean rescue only clears an isRequired error
16940
+ // recorded before it (a boolean false otherwise reads as empty)
16856
16941
  rules[name].isRequired = true;
16942
+ rules[name].isBoolean = true;
16857
16943
  }
16858
16944
 
16859
16945
  if ($form[i].type == 'radio') {
@@ -23475,7 +23561,7 @@ function getDependencies(gina, cb) {
23475
23561
  arr[i].func.apply(null,arr[i].args);
23476
23562
  }
23477
23563
  } catch (err) {
23478
- console.error(err.stack|err.message|err);
23564
+ console.error(err.stack||err.message||err);
23479
23565
  }
23480
23566
  }
23481
23567