gina 0.5.19 → 0.5.20

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 (543) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/CONTRIBUTING.md +36 -8
  3. package/README.md +6 -10
  4. package/ROADMAP.md +2 -0
  5. package/framework/v0.5.20/VERSION +1 -0
  6. package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/js/gina.js +68 -21
  7. package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +335 -336
  8. package/framework/v0.5.20/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  9. package/framework/v0.5.20/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  10. package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.js +31 -7
  11. package/framework/{v0.5.19 → v0.5.20}/core/locales/README.md +25 -0
  12. package/framework/{v0.5.19 → v0.5.20}/core/locales/dist/region/en.json +0 -42
  13. package/framework/v0.5.20/core/locales/dist/region/fr.json +5685 -0
  14. package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/validator/src/form-validator.js +11 -3
  15. package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/validator/src/main.js +57 -18
  16. package/framework/{v0.5.19 → v0.5.20}/core/server.js +29 -4
  17. package/framework/{v0.5.19 → v0.5.20}/core/template/conf/settings.json +1 -1
  18. package/framework/{v0.5.19 → v0.5.20}/package.json +2 -1
  19. package/gna.js +4 -4
  20. package/llms.txt +9 -6
  21. package/package.json +4 -3
  22. package/framework/v0.5.19/VERSION +0 -1
  23. package/framework/v0.5.19/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  24. package/framework/v0.5.19/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  25. package/framework/v0.5.19/core/deps/busboy-1.6.0/LICENSE +0 -19
  26. package/framework/v0.5.19/core/deps/busboy-1.6.0/README.md +0 -191
  27. package/framework/v0.5.19/core/deps/busboy-1.6.0/lib/index.js +0 -57
  28. package/framework/v0.5.19/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -681
  29. package/framework/v0.5.19/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -350
  30. package/framework/v0.5.19/core/deps/busboy-1.6.0/lib/utils.js +0 -596
  31. package/framework/v0.5.19/core/deps/busboy-1.6.0/package.json +0 -22
  32. package/framework/v0.5.19/core/deps/streamsearch-1.1.0/LICENSE +0 -19
  33. package/framework/v0.5.19/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -267
  34. package/framework/v0.5.19/core/deps/streamsearch-1.1.0/package.json +0 -34
  35. package/framework/v0.5.19/core/locales/dist/region/fr.json +0 -11452
  36. /package/framework/{v0.5.19 → v0.5.20}/AUTHORS +0 -0
  37. /package/framework/{v0.5.19 → v0.5.20}/LICENSE +0 -0
  38. /package/framework/{v0.5.19 → v0.5.20}/core/asset/html/nolayout.html +0 -0
  39. /package/framework/{v0.5.19 → v0.5.20}/core/asset/html/static.html +0 -0
  40. /package/framework/{v0.5.19 → v0.5.20}/core/asset/img/android-chrome-192x192.png +0 -0
  41. /package/framework/{v0.5.19 → v0.5.20}/core/asset/img/android-chrome-512x512.png +0 -0
  42. /package/framework/{v0.5.19 → v0.5.20}/core/asset/img/apple-touch-icon.png +0 -0
  43. /package/framework/{v0.5.19 → v0.5.20}/core/asset/img/favicon-16x16.png +0 -0
  44. /package/framework/{v0.5.19 → v0.5.20}/core/asset/img/favicon-32x32.png +0 -0
  45. /package/framework/{v0.5.19 → v0.5.20}/core/asset/img/favicon.ico +0 -0
  46. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/README.md +0 -0
  47. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  48. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  49. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  50. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  51. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  52. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  53. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  54. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  55. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  56. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  57. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  58. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  59. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  60. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  61. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  62. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  63. /package/framework/{v0.5.19 → v0.5.20}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  64. /package/framework/{v0.5.19 → v0.5.20}/core/config.js +0 -0
  65. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/ai/index.js +0 -0
  66. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/ai/lib/connector.js +0 -0
  67. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/index.js +0 -0
  68. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/lib/connector.js +0 -0
  69. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  70. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  71. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/lib/n1ql.js +0 -0
  72. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/lib/session-store.js +0 -0
  73. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  74. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  75. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/mongodb/index.js +0 -0
  76. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/mongodb/lib/connector.js +0 -0
  77. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/mongodb/lib/job-store.js +0 -0
  78. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  79. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/mongodb/lib/session-store.js +0 -0
  80. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/mysql/index.js +0 -0
  81. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/mysql/lib/connector.js +0 -0
  82. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/postgresql/index.js +0 -0
  83. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/postgresql/lib/connector.js +0 -0
  84. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/redis/index.js +0 -0
  85. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/redis/lib/connector.js +0 -0
  86. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/redis/lib/job-store.js +0 -0
  87. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/redis/lib/render-cache-store.js +0 -0
  88. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/redis/lib/session-store.js +0 -0
  89. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/scylladb/index.js +0 -0
  90. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/scylladb/lib/connector.js +0 -0
  91. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/scylladb/lib/session-store.js +0 -0
  92. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/sql-parser.js +0 -0
  93. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/sqlite/index.js +0 -0
  94. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/sqlite/lib/connector.js +0 -0
  95. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/sqlite/lib/job-store.js +0 -0
  96. /package/framework/{v0.5.19 → v0.5.20}/core/connectors/sqlite/lib/session-store.js +0 -0
  97. /package/framework/{v0.5.19 → v0.5.20}/core/content.encoding +0 -0
  98. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.framework.js +0 -0
  99. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.render-json.js +0 -0
  100. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.render-nunjucks-async.js +0 -0
  101. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.render-nunjucks.js +0 -0
  102. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.render-stream.js +0 -0
  103. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.render-swig-async.js +0 -0
  104. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.render-swig.js +0 -0
  105. /package/framework/{v0.5.19 → v0.5.20}/core/controller/controller.render-v1.js +0 -0
  106. /package/framework/{v0.5.19 → v0.5.20}/core/controller/index.js +0 -0
  107. /package/framework/{v0.5.19 → v0.5.20}/core/controller/inspector-window-emit.js +0 -0
  108. /package/framework/{v0.5.19 → v0.5.20}/core/controller/release-banner.js +0 -0
  109. /package/framework/{v0.5.19 → v0.5.20}/core/dev/index.js +0 -0
  110. /package/framework/{v0.5.19 → v0.5.20}/core/dev/lib/class.js +0 -0
  111. /package/framework/{v0.5.19 → v0.5.20}/core/dev/lib/factory.js +0 -0
  112. /package/framework/{v0.5.19 → v0.5.20}/core/dev/lib/tools.js +0 -0
  113. /package/framework/{v0.5.19 → v0.5.20}/core/gna.js +0 -0
  114. /package/framework/{v0.5.19 → v0.5.20}/core/locales/currency.json +0 -0
  115. /package/framework/{v0.5.19 → v0.5.20}/core/locales/dist/language/en.json +0 -0
  116. /package/framework/{v0.5.19 → v0.5.20}/core/locales/dist/language/fr.json +0 -0
  117. /package/framework/{v0.5.19 → v0.5.20}/core/locales/index.js +0 -0
  118. /package/framework/{v0.5.19 → v0.5.20}/core/mime.types +0 -0
  119. /package/framework/{v0.5.19 → v0.5.20}/core/model/entity.js +0 -0
  120. /package/framework/{v0.5.19 → v0.5.20}/core/model/index.js +0 -0
  121. /package/framework/{v0.5.19 → v0.5.20}/core/model/template/entityFactory.js +0 -0
  122. /package/framework/{v0.5.19 → v0.5.20}/core/model/template/index.js +0 -0
  123. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/README.md +0 -0
  124. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/index.js +0 -0
  125. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/csrf/README.md +0 -0
  126. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/csrf/package.json +0 -0
  127. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/csrf/src/main.js +0 -0
  128. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/README.md +0 -0
  129. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/coep/README.md +0 -0
  130. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/coep/package.json +0 -0
  131. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  132. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/coop/README.md +0 -0
  133. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/coop/package.json +0 -0
  134. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  135. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/corp/README.md +0 -0
  136. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/corp/package.json +0 -0
  137. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  138. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/csp/README.md +0 -0
  139. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/csp/package.json +0 -0
  140. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  141. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  142. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  143. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  144. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  145. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  146. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  147. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  148. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  149. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  150. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/package.json +0 -0
  151. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  152. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  153. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  154. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/src/main.js +0 -0
  155. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  156. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  157. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  158. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  159. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  160. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  161. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  162. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  163. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  164. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  165. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  166. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  167. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  168. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  169. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  170. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  171. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  172. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  173. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/session/README.md +0 -0
  174. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/session/package.json +0 -0
  175. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/session/src/main.js +0 -0
  176. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/storage/README.md +0 -0
  177. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/storage/build.json +0 -0
  178. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/storage/package.json +0 -0
  179. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/storage/src/main.js +0 -0
  180. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/validator/README.md +0 -0
  181. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/validator/build.json +0 -0
  182. /package/framework/{v0.5.19 → v0.5.20}/core/plugins/lib/validator/package.json +0 -0
  183. /package/framework/{v0.5.19 → v0.5.20}/core/router.js +0 -0
  184. /package/framework/{v0.5.19 → v0.5.20}/core/server.express.js +0 -0
  185. /package/framework/{v0.5.19 → v0.5.20}/core/server.isaac.js +0 -0
  186. /package/framework/{v0.5.19 → v0.5.20}/core/status.codes +0 -0
  187. /package/framework/{v0.5.19 → v0.5.20}/core/template/_gitignore +0 -0
  188. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/config/app.json +0 -0
  189. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  190. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/config/routing.json +0 -0
  191. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/config/settings.json +0 -0
  192. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  193. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/config/templates.json +0 -0
  194. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  195. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  196. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  197. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  198. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/index.js +0 -0
  199. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle/locales/en.json +0 -0
  200. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  201. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  202. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  203. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  204. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  205. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  206. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  207. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  208. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/readme.md +0 -0
  209. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_public/sw.js +0 -0
  210. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  211. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  212. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  213. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  214. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  215. /package/framework/{v0.5.19 → v0.5.20}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  216. /package/framework/{v0.5.19 → v0.5.20}/core/template/command/gina.bat.tpl +0 -0
  217. /package/framework/{v0.5.19 → v0.5.20}/core/template/command/gina.tpl +0 -0
  218. /package/framework/{v0.5.19 → v0.5.20}/core/template/conf/env.json +0 -0
  219. /package/framework/{v0.5.19 → v0.5.20}/core/template/conf/manifest.json +0 -0
  220. /package/framework/{v0.5.19 → v0.5.20}/core/template/conf/package.json +0 -0
  221. /package/framework/{v0.5.19 → v0.5.20}/core/template/conf/statics.json +0 -0
  222. /package/framework/{v0.5.19 → v0.5.20}/core/template/conf/templates.json +0 -0
  223. /package/framework/{v0.5.19 → v0.5.20}/core/template/error/client/json/401.json +0 -0
  224. /package/framework/{v0.5.19 → v0.5.20}/core/template/error/client/json/403.json +0 -0
  225. /package/framework/{v0.5.19 → v0.5.20}/core/template/error/client/json/404.json +0 -0
  226. /package/framework/{v0.5.19 → v0.5.20}/core/template/error/server/html/50x.html +0 -0
  227. /package/framework/{v0.5.19 → v0.5.20}/core/template/error/server/json/500.json +0 -0
  228. /package/framework/{v0.5.19 → v0.5.20}/core/template/error/server/json/503.json +0 -0
  229. /package/framework/{v0.5.19 → v0.5.20}/core/template/extensions/logger/config.json +0 -0
  230. /package/framework/{v0.5.19 → v0.5.20}/helpers/console.js +0 -0
  231. /package/framework/{v0.5.19 → v0.5.20}/helpers/context.js +0 -0
  232. /package/framework/{v0.5.19 → v0.5.20}/helpers/data/LICENSE +0 -0
  233. /package/framework/{v0.5.19 → v0.5.20}/helpers/data/README.md +0 -0
  234. /package/framework/{v0.5.19 → v0.5.20}/helpers/data/package.json +0 -0
  235. /package/framework/{v0.5.19 → v0.5.20}/helpers/data/src/main.js +0 -0
  236. /package/framework/{v0.5.19 → v0.5.20}/helpers/dateFormat.js +0 -0
  237. /package/framework/{v0.5.19 → v0.5.20}/helpers/index.js +0 -0
  238. /package/framework/{v0.5.19 → v0.5.20}/helpers/json/LICENSE +0 -0
  239. /package/framework/{v0.5.19 → v0.5.20}/helpers/json/README.md +0 -0
  240. /package/framework/{v0.5.19 → v0.5.20}/helpers/json/package.json +0 -0
  241. /package/framework/{v0.5.19 → v0.5.20}/helpers/json/src/main.js +0 -0
  242. /package/framework/{v0.5.19 → v0.5.20}/helpers/path.js +0 -0
  243. /package/framework/{v0.5.19 → v0.5.20}/helpers/plugins/README.md +0 -0
  244. /package/framework/{v0.5.19 → v0.5.20}/helpers/plugins/package.json +0 -0
  245. /package/framework/{v0.5.19 → v0.5.20}/helpers/plugins/src/api-error.js +0 -0
  246. /package/framework/{v0.5.19 → v0.5.20}/helpers/plugins/src/main.js +0 -0
  247. /package/framework/{v0.5.19 → v0.5.20}/helpers/prototypes.js +0 -0
  248. /package/framework/{v0.5.19 → v0.5.20}/helpers/task.js +0 -0
  249. /package/framework/{v0.5.19 → v0.5.20}/helpers/text.js +0 -0
  250. /package/framework/{v0.5.19 → v0.5.20}/lib/admin/package.json +0 -0
  251. /package/framework/{v0.5.19 → v0.5.20}/lib/admin/src/main.js +0 -0
  252. /package/framework/{v0.5.19 → v0.5.20}/lib/archiver/README.md +0 -0
  253. /package/framework/{v0.5.19 → v0.5.20}/lib/archiver/build.json +0 -0
  254. /package/framework/{v0.5.19 → v0.5.20}/lib/archiver/package.json +0 -0
  255. /package/framework/{v0.5.19 → v0.5.20}/lib/archiver/src/dep/jszip.min.js +0 -0
  256. /package/framework/{v0.5.19 → v0.5.20}/lib/archiver/src/main.js +0 -0
  257. /package/framework/{v0.5.19 → v0.5.20}/lib/async/package.json +0 -0
  258. /package/framework/{v0.5.19 → v0.5.20}/lib/async/src/main.js +0 -0
  259. /package/framework/{v0.5.19 → v0.5.20}/lib/audit/package.json +0 -0
  260. /package/framework/{v0.5.19 → v0.5.20}/lib/audit/src/main.js +0 -0
  261. /package/framework/{v0.5.19 → v0.5.20}/lib/audit-store.js +0 -0
  262. /package/framework/{v0.5.19 → v0.5.20}/lib/authz-gate/package.json +0 -0
  263. /package/framework/{v0.5.19 → v0.5.20}/lib/authz-gate/src/main.js +0 -0
  264. /package/framework/{v0.5.19 → v0.5.20}/lib/cache/README.md +0 -0
  265. /package/framework/{v0.5.19 → v0.5.20}/lib/cache/build.json +0 -0
  266. /package/framework/{v0.5.19 → v0.5.20}/lib/cache/package.json +0 -0
  267. /package/framework/{v0.5.19 → v0.5.20}/lib/cache/src/main.js +0 -0
  268. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/aliases.json +0 -0
  269. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/add.js +0 -0
  270. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/arguments.json +0 -0
  271. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/build.js +0 -0
  272. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/copy.js +0 -0
  273. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/cp.js +0 -0
  274. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/help.js +0 -0
  275. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/help.txt +0 -0
  276. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  277. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/list.js +0 -0
  278. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/man.js +0 -0
  279. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/mcp-start.js +0 -0
  280. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/mcp.js +0 -0
  281. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/oas.js +0 -0
  282. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/openapi.js +0 -0
  283. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/remove.js +0 -0
  284. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/rename.js +0 -0
  285. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/restart.js +0 -0
  286. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/rm.js +0 -0
  287. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/start.js +0 -0
  288. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/status.js +0 -0
  289. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/stop.js +0 -0
  290. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/bundle/types.js +0 -0
  291. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/cache/arguments.json +0 -0
  292. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/cache/clear.js +0 -0
  293. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/cache/help.txt +0 -0
  294. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/cache/stats.js +0 -0
  295. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/add.js +0 -0
  296. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/arguments.json +0 -0
  297. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/help.js +0 -0
  298. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/help.txt +0 -0
  299. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/infer.js +0 -0
  300. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/list.js +0 -0
  301. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/migrate.js +0 -0
  302. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/models.js +0 -0
  303. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/remove.js +0 -0
  304. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/rm.js +0 -0
  305. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/connector/test.js +0 -0
  306. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/container/arguments.json +0 -0
  307. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/container/help.js +0 -0
  308. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/container/help.txt +0 -0
  309. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/container/man.js +0 -0
  310. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/container/ps.js +0 -0
  311. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/container/stop.js +0 -0
  312. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/add.js +0 -0
  313. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/get.js +0 -0
  314. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/help.js +0 -0
  315. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/help.txt +0 -0
  316. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/link-dev.js +0 -0
  317. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/list.js +0 -0
  318. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/remove.js +0 -0
  319. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/rm.js +0 -0
  320. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/set.js +0 -0
  321. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/unset.js +0 -0
  322. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/env/use.js +0 -0
  323. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/add.js +0 -0
  324. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/arguments.json +0 -0
  325. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/build.js +0 -0
  326. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/dot.js +0 -0
  327. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/get.js +0 -0
  328. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/help.js +0 -0
  329. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/help.txt +0 -0
  330. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/init.js +0 -0
  331. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/link-node-modules.js +0 -0
  332. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/link.js +0 -0
  333. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/list.js +0 -0
  334. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/man.js +0 -0
  335. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/msg.json +0 -0
  336. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/open.js +0 -0
  337. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/remove.js +0 -0
  338. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/reset.js +0 -0
  339. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/restart.js +0 -0
  340. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/set.js +0 -0
  341. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/start.js +0 -0
  342. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/status.js +0 -0
  343. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/stop.js +0 -0
  344. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/tail.js +0 -0
  345. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/update.js +0 -0
  346. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/framework/version.js +0 -0
  347. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/gina-dev.1.md +0 -0
  348. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/gina-framework.1.md +0 -0
  349. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/gina.1.md +0 -0
  350. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/helper.js +0 -0
  351. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/i18n/add.js +0 -0
  352. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/i18n/arguments.json +0 -0
  353. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/i18n/export.js +0 -0
  354. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/i18n/help.js +0 -0
  355. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/i18n/help.txt +0 -0
  356. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/i18n/import.js +0 -0
  357. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/i18n/scan.js +0 -0
  358. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/_host.js +0 -0
  359. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/arguments.json +0 -0
  360. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/build.js +0 -0
  361. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/help.js +0 -0
  362. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/help.txt +0 -0
  363. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/list.js +0 -0
  364. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/man.js +0 -0
  365. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/rm.js +0 -0
  366. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/image/run.js +0 -0
  367. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/index.js +0 -0
  368. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/inspector/help.js +0 -0
  369. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/inspector/help.txt +0 -0
  370. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/inspector/open.js +0 -0
  371. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/man-render.js +0 -0
  372. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/minion/arguments.json +0 -0
  373. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/minion/help.js +0 -0
  374. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/minion/help.txt +0 -0
  375. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/minion/kill.js +0 -0
  376. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/minion/list.js +0 -0
  377. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/msg.json +0 -0
  378. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/port/help.js +0 -0
  379. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/port/help.txt +0 -0
  380. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/port/inc/scan.js +0 -0
  381. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/port/list.js +0 -0
  382. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/port/reset.js +0 -0
  383. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/port/set.js +0 -0
  384. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/add.js +0 -0
  385. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/arguments.json +0 -0
  386. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/backup.js +0 -0
  387. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/build.js +0 -0
  388. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/help.js +0 -0
  389. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/help.txt +0 -0
  390. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/import.js +0 -0
  391. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/list.js +0 -0
  392. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/man.js +0 -0
  393. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/move.js +0 -0
  394. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/remove.js +0 -0
  395. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/rename.js +0 -0
  396. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/restart.js +0 -0
  397. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/restore.js +0 -0
  398. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/rm.js +0 -0
  399. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/start.js +0 -0
  400. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/status.js +0 -0
  401. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/project/stop.js +0 -0
  402. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/protocol/arguments.json +0 -0
  403. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/protocol/help.js +0 -0
  404. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/protocol/help.txt +0 -0
  405. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/protocol/list.js +0 -0
  406. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/protocol/remove.js +0 -0
  407. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/protocol/set.js +0 -0
  408. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/add.js +0 -0
  409. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/help.js +0 -0
  410. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/help.txt +0 -0
  411. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/link-local.js +0 -0
  412. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/link-production.js +0 -0
  413. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/list.js +0 -0
  414. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/remove.js +0 -0
  415. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/rm.js +0 -0
  416. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/scope/use.js +0 -0
  417. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/secrets/arguments.json +0 -0
  418. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/secrets/check.js +0 -0
  419. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/secrets/help.js +0 -0
  420. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/secrets/help.txt +0 -0
  421. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/secrets/scan.js +0 -0
  422. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/service/help.js +0 -0
  423. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/service/help.txt +0 -0
  424. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/service/list.js +0 -0
  425. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/service/man.js +0 -0
  426. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/service/start.js +0 -0
  427. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd/view/add.js +0 -0
  428. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd-status-format/package.json +0 -0
  429. /package/framework/{v0.5.19 → v0.5.20}/lib/cmd-status-format/src/main.js +0 -0
  430. /package/framework/{v0.5.19 → v0.5.20}/lib/collection/README.md +0 -0
  431. /package/framework/{v0.5.19 → v0.5.20}/lib/collection/build.json +0 -0
  432. /package/framework/{v0.5.19 → v0.5.20}/lib/collection/package.json +0 -0
  433. /package/framework/{v0.5.19 → v0.5.20}/lib/collection/src/main.js +0 -0
  434. /package/framework/{v0.5.19 → v0.5.20}/lib/config.js +0 -0
  435. /package/framework/{v0.5.19 → v0.5.20}/lib/connector-config/package.json +0 -0
  436. /package/framework/{v0.5.19 → v0.5.20}/lib/connector-config/src/main.js +0 -0
  437. /package/framework/{v0.5.19 → v0.5.20}/lib/connector-registry/package.json +0 -0
  438. /package/framework/{v0.5.19 → v0.5.20}/lib/connector-registry/src/main.js +0 -0
  439. /package/framework/{v0.5.19 → v0.5.20}/lib/cron/README.md +0 -0
  440. /package/framework/{v0.5.19 → v0.5.20}/lib/cron/package.json +0 -0
  441. /package/framework/{v0.5.19 → v0.5.20}/lib/cron/src/main.js +0 -0
  442. /package/framework/{v0.5.19 → v0.5.20}/lib/domain/LICENSE +0 -0
  443. /package/framework/{v0.5.19 → v0.5.20}/lib/domain/README.md +0 -0
  444. /package/framework/{v0.5.19 → v0.5.20}/lib/domain/package.json +0 -0
  445. /package/framework/{v0.5.19 → v0.5.20}/lib/domain/src/main.js +0 -0
  446. /package/framework/{v0.5.19 → v0.5.20}/lib/dto/package.json +0 -0
  447. /package/framework/{v0.5.19 → v0.5.20}/lib/dto/src/main.js +0 -0
  448. /package/framework/{v0.5.19 → v0.5.20}/lib/dto-pipe/package.json +0 -0
  449. /package/framework/{v0.5.19 → v0.5.20}/lib/dto-pipe/src/main.js +0 -0
  450. /package/framework/{v0.5.19 → v0.5.20}/lib/dto-types/package.json +0 -0
  451. /package/framework/{v0.5.19 → v0.5.20}/lib/dto-types/src/main.js +0 -0
  452. /package/framework/{v0.5.19 → v0.5.20}/lib/generator/index.js +0 -0
  453. /package/framework/{v0.5.19 → v0.5.20}/lib/i18n/package.json +0 -0
  454. /package/framework/{v0.5.19 → v0.5.20}/lib/i18n/src/main.js +0 -0
  455. /package/framework/{v0.5.19 → v0.5.20}/lib/image-build/package.json +0 -0
  456. /package/framework/{v0.5.19 → v0.5.20}/lib/image-build/src/main.js +0 -0
  457. /package/framework/{v0.5.19 → v0.5.20}/lib/index.js +0 -0
  458. /package/framework/{v0.5.19 → v0.5.20}/lib/inherits/LICENSE +0 -0
  459. /package/framework/{v0.5.19 → v0.5.20}/lib/inherits/README.md +0 -0
  460. /package/framework/{v0.5.19 → v0.5.20}/lib/inherits/package.json +0 -0
  461. /package/framework/{v0.5.19 → v0.5.20}/lib/inherits/src/main.js +0 -0
  462. /package/framework/{v0.5.19 → v0.5.20}/lib/inspector-events/package.json +0 -0
  463. /package/framework/{v0.5.19 → v0.5.20}/lib/inspector-events/src/main.js +0 -0
  464. /package/framework/{v0.5.19 → v0.5.20}/lib/inspector-redact/package.json +0 -0
  465. /package/framework/{v0.5.19 → v0.5.20}/lib/inspector-redact/src/main.js +0 -0
  466. /package/framework/{v0.5.19 → v0.5.20}/lib/instrument/package.json +0 -0
  467. /package/framework/{v0.5.19 → v0.5.20}/lib/instrument/src/main.js +0 -0
  468. /package/framework/{v0.5.19 → v0.5.20}/lib/job/package.json +0 -0
  469. /package/framework/{v0.5.19 → v0.5.20}/lib/job/src/main.js +0 -0
  470. /package/framework/{v0.5.19 → v0.5.20}/lib/job-store.js +0 -0
  471. /package/framework/{v0.5.19 → v0.5.20}/lib/json-config-header/package.json +0 -0
  472. /package/framework/{v0.5.19 → v0.5.20}/lib/json-config-header/src/main.js +0 -0
  473. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/README.md +0 -0
  474. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/package.json +0 -0
  475. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/containers/default/index.js +0 -0
  476. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/containers/file/index.js +0 -0
  477. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  478. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  479. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/containers/mq/index.js +0 -0
  480. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/containers/mq/listener.js +0 -0
  481. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/containers/mq/speaker.js +0 -0
  482. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/helper.js +0 -0
  483. /package/framework/{v0.5.19 → v0.5.20}/lib/logger/src/main.js +0 -0
  484. /package/framework/{v0.5.19 → v0.5.20}/lib/math/index.js +0 -0
  485. /package/framework/{v0.5.19 → v0.5.20}/lib/mcp-dispatch/package.json +0 -0
  486. /package/framework/{v0.5.19 → v0.5.20}/lib/mcp-dispatch/src/main.js +0 -0
  487. /package/framework/{v0.5.19 → v0.5.20}/lib/mcp-http/package.json +0 -0
  488. /package/framework/{v0.5.19 → v0.5.20}/lib/mcp-http/src/main.js +0 -0
  489. /package/framework/{v0.5.19 → v0.5.20}/lib/mcp-server/package.json +0 -0
  490. /package/framework/{v0.5.19 → v0.5.20}/lib/mcp-server/src/main.js +0 -0
  491. /package/framework/{v0.5.19 → v0.5.20}/lib/merge/README.md +0 -0
  492. /package/framework/{v0.5.19 → v0.5.20}/lib/merge/package.json +0 -0
  493. /package/framework/{v0.5.19 → v0.5.20}/lib/merge/src/main.js +0 -0
  494. /package/framework/{v0.5.19 → v0.5.20}/lib/metrics/package.json +0 -0
  495. /package/framework/{v0.5.19 → v0.5.20}/lib/metrics/src/main.js +0 -0
  496. /package/framework/{v0.5.19 → v0.5.20}/lib/model.js +0 -0
  497. /package/framework/{v0.5.19 → v0.5.20}/lib/nunjucks-filters/README.md +0 -0
  498. /package/framework/{v0.5.19 → v0.5.20}/lib/nunjucks-filters/package.json +0 -0
  499. /package/framework/{v0.5.19 → v0.5.20}/lib/nunjucks-filters/src/main.js +0 -0
  500. /package/framework/{v0.5.19 → v0.5.20}/lib/nunjucks-resolver/package.json +0 -0
  501. /package/framework/{v0.5.19 → v0.5.20}/lib/nunjucks-resolver/src/main.js +0 -0
  502. /package/framework/{v0.5.19 → v0.5.20}/lib/proc.js +0 -0
  503. /package/framework/{v0.5.19 → v0.5.20}/lib/release-watch/package.json +0 -0
  504. /package/framework/{v0.5.19 → v0.5.20}/lib/release-watch/src/main.js +0 -0
  505. /package/framework/{v0.5.19 → v0.5.20}/lib/render-cache/package.json +0 -0
  506. /package/framework/{v0.5.19 → v0.5.20}/lib/render-cache/src/main.js +0 -0
  507. /package/framework/{v0.5.19 → v0.5.20}/lib/render-cache-store.js +0 -0
  508. /package/framework/{v0.5.19 → v0.5.20}/lib/routing/README.md +0 -0
  509. /package/framework/{v0.5.19 → v0.5.20}/lib/routing/build.json +0 -0
  510. /package/framework/{v0.5.19 → v0.5.20}/lib/routing/package.json +0 -0
  511. /package/framework/{v0.5.19 → v0.5.20}/lib/routing/src/main.js +0 -0
  512. /package/framework/{v0.5.19 → v0.5.20}/lib/routing/src/radix.js +0 -0
  513. /package/framework/{v0.5.19 → v0.5.20}/lib/routing-introspect/package.json +0 -0
  514. /package/framework/{v0.5.19 → v0.5.20}/lib/routing-introspect/src/main.js +0 -0
  515. /package/framework/{v0.5.19 → v0.5.20}/lib/secrets/package.json +0 -0
  516. /package/framework/{v0.5.19 → v0.5.20}/lib/secrets/src/backends/env.js +0 -0
  517. /package/framework/{v0.5.19 → v0.5.20}/lib/secrets/src/main.js +0 -0
  518. /package/framework/{v0.5.19 → v0.5.20}/lib/session-store.js +0 -0
  519. /package/framework/{v0.5.19 → v0.5.20}/lib/shell.js +0 -0
  520. /package/framework/{v0.5.19 → v0.5.20}/lib/state.js +0 -0
  521. /package/framework/{v0.5.19 → v0.5.20}/lib/swig-filters/README.md +0 -0
  522. /package/framework/{v0.5.19 → v0.5.20}/lib/swig-filters/package.json +0 -0
  523. /package/framework/{v0.5.19 → v0.5.20}/lib/swig-filters/src/main.js +0 -0
  524. /package/framework/{v0.5.19 → v0.5.20}/lib/swig-resolver/package.json +0 -0
  525. /package/framework/{v0.5.19 → v0.5.20}/lib/swig-resolver/src/main.js +0 -0
  526. /package/framework/{v0.5.19 → v0.5.20}/lib/template-loaders/package.json +0 -0
  527. /package/framework/{v0.5.19 → v0.5.20}/lib/template-loaders/src/loaders/http.js +0 -0
  528. /package/framework/{v0.5.19 → v0.5.20}/lib/template-loaders/src/loaders/memory.js +0 -0
  529. /package/framework/{v0.5.19 → v0.5.20}/lib/template-loaders/src/main.js +0 -0
  530. /package/framework/{v0.5.19 → v0.5.20}/lib/url/README.md +0 -0
  531. /package/framework/{v0.5.19 → v0.5.20}/lib/url/index.js +0 -0
  532. /package/framework/{v0.5.19 → v0.5.20}/lib/url/routing.json +0 -0
  533. /package/framework/{v0.5.19 → v0.5.20}/lib/uuid/package.json +0 -0
  534. /package/framework/{v0.5.19 → v0.5.20}/lib/uuid/src/main.js +0 -0
  535. /package/framework/{v0.5.19 → v0.5.20}/lib/validator.js +0 -0
  536. /package/framework/{v0.5.19 → v0.5.20}/lib/watcher/package.json +0 -0
  537. /package/framework/{v0.5.19 → v0.5.20}/lib/watcher/src/main.js +0 -0
  538. /package/framework/{v0.5.19 → v0.5.20}/lib/ws-framing/package.json +0 -0
  539. /package/framework/{v0.5.19 → v0.5.20}/lib/ws-framing/src/main.js +0 -0
  540. /package/framework/{v0.5.19 → v0.5.20}/lib/ws-query/package.json +0 -0
  541. /package/framework/{v0.5.19 → v0.5.20}/lib/ws-query/src/main.js +0 -0
  542. /package/framework/{v0.5.19 → v0.5.20}/lib/ws-session/package.json +0 -0
  543. /package/framework/{v0.5.19 → v0.5.20}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ 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.20 - 2026-07-19
10
+ ### Changed
11
+ * Multipart parsing now uses `@rhinostone/busboy` installed from npm instead of a patched copy vendored inside the framework. The fork is a strict superset of upstream busboy 1.6.0 whose only addition exposes each part's parsed Content-Disposition parameters, which is what lets the upload layer read the `group="..."` tag — previously a local patch that had to be re-applied by hand on every upstream upgrade. Upload behaviour and the multipart wire format are unchanged: files still arrive with their group, an unconfigured group is still rejected, and a file with no group still falls back to `untagged`. Pickup is the version plus a bundle restart; no client rebuild is needed.
12
+ ### Fixed
13
+ * Fixed the region locale generator so each requested language emits a standalone file — a `--region=en,fr` build used to append the second language's rows to the first's output, so every `isoShort` was duplicated and `isoShort` lookups always matched the English copy. Non-en builds now localize `countryName` from a per-language short-names resource (`region.names.<lang>.json`, French ships with the framework), rows without an ISO 3166 alpha-2 code are dropped, and `dist/region/en.json` / `fr.json` are regenerated clean — a bundle resolving a `fr` culture now gets `Allemagne` / `États-Unis` / `Royaume-Uni` through the existing `getLocales().getCountries()` path with zero consumer changes.
14
+ * Fixed `getLocales().getCountries(code)` — the documented projection argument was computed and never applied. A valid `code` (e.g. `capital`, `continent`, `tld`) now adds that field to every returned row while the 4 historical fields stay untouched, and an empty or missing locale set degrades to an empty list instead of throwing.
15
+ * FormValidator: numbered `is` aliases (`is0`, `is1`, ...) now install and enforce. The lazy alias installer sat below a typecheck that skipped exactly the state the installer required, so any `is<N>` rule key was silently ignored on both the client and the server; the installer regex is now anchored (`is0abc` no longer matches), numbered aliases keep distinct per-alias error keys on both sides (server-side they previously collapsed to a shared `is` key, letting a later passing alias erase an earlier failing one), and server-side validation of rules carrying `$` cross-field references no longer crashes. Behavior change to plan for: previously-skipped `is<N>` rules START ENFORCING at pickup — forms that submitted clean may begin erroring or returning 422; sweep your rule JSONs for `is<N>` keys before upgrading.
16
+ * FormValidator: a form injected after init (e.g. loaded inside a popin) carrying `data-gina-form-rule` now binds its declared rule — live-check and submit-trigger gating work instead of being silently disabled. `validateFormById` resolved the rule name from the form id only and consulted the attribute in an unreachable branch, so the lookup missed, the form bound zero rules, and the form was stamped `data-gina-form-live-check-enabled="false"` while the submit pass resolved the same attribute fine. Attribute-less forms whose id names the rule resolve as before.
17
+ * Fixed FormValidator `_case_` condition matching in live-check / single-element mode: the cross-field case scan coerced the wrong variable — the field being validated instead of the case value — so a boolean `case` declaration (e.g. `case: false`) never matched the case field's raw "false"/"true" DOM string, and a validated field whose own value was "true"/"false" silently broke string case matching for its pass. The case value itself is now coerced, aligning the scan with the direct-case site's semantics; note that `case` values declared as the strings "true"/"false" now coerce to booleans at this site too, consistent with full-form validation.
18
+
9
19
  ## 0.5.19 - 2026-07-17
10
20
  ### Added
11
21
  * The checkbox migration warning now also covers the un-tick direction: markup carrying the `checked` attribute plus a `value` (or `data-value`) reading false or empty — which used to render unticked and now stays ticked — is flagged once per field, with the same legacy opt-in pointer as the existing warning
package/CONTRIBUTING.md CHANGED
@@ -27,7 +27,7 @@ Gina follows a BDFL governance model — see [GOVERNANCE.md](./GOVERNANCE.md) fo
27
27
  | Requirement | Version |
28
28
  | --- | --- |
29
29
  | OS | macOS or Linux (Windows: Docker only) |
30
- | Node.js | >= 18 |
30
+ | Node.js | >= 22 < 27 |
31
31
  | npm | >= 8 |
32
32
  | Changie | >= 1.24 |
33
33
 
@@ -35,22 +35,31 @@ Gina follows a BDFL governance model — see [GOVERNANCE.md](./GOVERNANCE.md) fo
35
35
 
36
36
  ## Getting started locally
37
37
 
38
- Gina must be installed globally — the CLI and framework bootstrapper expect to run from the npm global prefix. Contributors clone directly into that location instead of using `npm install -g .`.
38
+ Gina must be reachable from the npm global prefix — the CLI and framework bootstrapper expect to run from `${prefix}/lib/node_modules/gina`. **Do not clone directly into that path**: npm owns it, and any `npm install -g gina` run on the machine replaces whatever sits there — a direct clone would be destroyed, git history, uncommitted work and all — with the published tarball. Clone to a normal workspace directory and **symlink** it into the prefix instead: npm can then only ever replace the symlink, never your repository.
39
39
 
40
- #### 1. Find your global prefix
40
+ #### 1. Clone to your workspace
41
+
42
+ ```bash
43
+ git clone https://github.com/gina-io/gina.git
44
+ cd gina && git checkout develop
45
+ ```
46
+
47
+ #### 2. Link the clone into the npm global prefix
41
48
 
42
49
  ```bash
43
50
  npm config get prefix --quiet
44
51
  ```
45
52
 
46
- The default is `/usr/local` (system) or `~/.npm-global` (user). The target directory is `${prefix}/lib/node_modules/gina`.
53
+ The default is `/usr/local` (system) or `~/.npm-global` (user).
47
54
 
48
- #### 2. Clone into the prefix
55
+ ```bash
56
+ ln -s "$PWD" "$(npm config get prefix)/lib/node_modules/gina"
57
+ ```
58
+
59
+ Optional hardening (macOS): make the link immutable, so even a global install fails loudly instead of silently replacing it. Undo with `chflags -h nouchg` before an intentional change.
49
60
 
50
61
  ```bash
51
- cd $(npm config get prefix)/lib/node_modules
52
- git clone https://github.com/gina-io/gina.git gina
53
- cd gina && git checkout develop
62
+ chflags -h uchg "$(npm config get prefix)/lib/node_modules/gina"
54
63
  ```
55
64
 
56
65
  #### 3. Run the install scripts
@@ -66,6 +75,14 @@ node ./script/post_install.js
66
75
  gina version
67
76
  ```
68
77
 
78
+ If the `gina` command is not found, link the CLIs into the prefix bin once:
79
+
80
+ ```bash
81
+ cd "$(npm config get prefix)/bin" && ln -s ../lib/node_modules/gina/bin/gina* .
82
+ ```
83
+
84
+ > ⚠️ On a machine set up this way, never run `npm install -g gina` — it replaces the symlink with the published tarball and your clone stops being served (with a direct clone at that path, it would have been deleted outright). Update with `git pull` instead; to switch to the published package deliberately, remove the symlink first.
85
+
69
86
  ---
70
87
 
71
88
  ## Running the tests
@@ -80,6 +97,17 @@ node --test test/**/*.test.js framework/v*/test/unit/*.test.js
80
97
  node --test test/core/controller.test.js
81
98
  ```
82
99
 
100
+ Some tests resolve the framework the way a consuming project does — via
101
+ `require('gina')`. For that to resolve from inside the clone, the repository
102
+ must be reachable as its own `gina` module. Create a one-time self-symlink (it
103
+ lives inside the gitignored `node_modules/`, so it never shows in `git status`):
104
+
105
+ ```bash
106
+ mkdir -p node_modules && ln -sfn "$PWD" node_modules/gina
107
+ ```
108
+
109
+ Without it, a handful of suite members fail with `Cannot find module 'gina'`.
110
+
83
111
  ---
84
112
 
85
113
  ## Development environment
package/README.md CHANGED
@@ -42,16 +42,12 @@ 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.19
46
-
47
- - **Addedroute authorization.** A `routing.json` rule can now gate access declaratively, enforced before the controller action runs. `param.requireAuth: true` requires an authenticated session (`req.session.user` set populating it at login stays the app's job): an unauthenticated XHR gets a 401, a browser navigation gets a non-cacheable redirect to `settings.json > auth.loginRoute` with the original request snapshotted for `self.resumeRequest()` to replay. `param.roles: ["admin", "editor"]` requires any one of a set of roles (implies `requireAuth`); `param.policy: "ownsInvoice"` delegates the decision to a per-bundle `policies/ownsInvoice.js` function for the ownership/record checks roles can't express (AND-composed after roles, allowed only on a literal `true`, a throwing policy denies). Denials stay generic the required roles and policy name never reach the wire, and the client-served routing maps no longer ship the authorization keys. Author mistakes refuse to boot rather than leaving a route silently open (a non-boolean flag, an undeclared `loginRoute`, an invalid `roles` shape, a missing / broken / `async` policy). Also adds the imperative `self.hasRole(role)` controller helper. Routes that declare nothing behave exactly as before.
48
- - **Addedan audit trail.** A user-attributed, append-only record of "who did what to which record when", with its own store, never riding the logger sinks. Opt in with `settings.json > audit.enabled: true` and call `self.audit("invoice.delete", { resource: id })` from an action; the default backend is an append-only JSONL file at `<project>/logs/audit-<bundle>-<env>.jsonl` (override with `audit.file`, or point `audit.store` at a connectors.json entry). The actor is a snapshot of `session.user[audit.actorKey]` plus a copy of `user.roles` — never the whole user object and `X-Forwarded-For` is never trusted. Route-authorization denials are recorded automatically (`authz.denied`, opt out with `audit.events.authz: false`), and an audit failure can never change an authorization outcome. Every request now carries an always-on request id, so audit records and JSON log lines correlate by construction. Malformed `audit` settings refuse to boot rather than leaving a compliance control silently off.
49
- - **Addedan OCI image and container CLI.** Building on `image:build` (0.5.11), five verbs now inspect and run images on the same container host: `gina image:list` (aligned table or `--format=json` with a machine-sortable `sizeBytes` and an RFC3339 `createdAt`), `image:rm <ref>` (untags a multi-tagged image; no bulk delete; the reference is charset-gated), and `image:run <image>` (runs with podman detached by default, publishing the EXPOSEd port same:same, with `--publish` / `--rm` / `--stream` / `--env-var` / `--env-file`, so a `${secret:KEY}` baked into an image gets its value at start without ever entering argv or a shell). A new `container:` group lists and stops running containers `container:ps [--all]` and `container:stop <name|id>`, which reports the rung the container came down on (137 = SIGKILL after the grace period, otherwise its own terms). Every verb resolves the host with `image:build`'s precedence and reports a build-only host (buildah without podman) honestly instead of failing opaquely.
50
- - **Changed — `redirect()` carries request data through the session by default.** When a redirect carried the request's params they used to travel in the URL as `?inheritedData=<encoded JSON>` in clear, in the address bar, browser history, and access logs, capped at 2000 characters. On a bundle with a session they now ride the session instead (a one-shot flash, consumed by the next routed GET, gone on refresh); the URL form and its cap now apply only to session-less bundles. For a bundle that halts a credential-bearing POST mid-flight (a registration or login), this removes a plaintext-secret-in-URL disclosure. The target action still reads the data from `req.get` unchanged, and `resumeRequest()`'s plain-XHR and full-page replays no longer drop it.
51
- - **Fixed — metrics no longer double-count under the isaac engine.** With `app.json metrics.enabled` on, the request-lifecycle hook ran at both dispatch layers for any request reaching the router, so Prometheus counters were double-incremented and the duration histogram double-observed. The hook now records exactly once on either engine, durations are measured from engine entry, and the dev Inspector Flow timeline keeps its accurate request-start time. Metrics-enabled deployments will see counter rates roughly halve at pickup — that is the double-count disappearing, not traffic dropping. (#OBS1)
52
- - **Fixed — redirect resolution.** The relative-path `self.redirect('/path')` form resolves its target server-side again (the route matcher is async and the historical un-awaited call could never match; `redirect()` is now async — prefer `return self.redirect(...)` from actions), a redirect to an unresolvable target gets a clean 404 instead of crashing the process, and `getRoute()` no longer throws a 500 when composing a URL for a GET route that declares no `requirements` block and receives extra params (they now land as query parameters). (#B120 / #B121)
53
- - **Fixed — `image:build` for projects that depend on gina.** Images built for a project that lists gina among its own dependencies no longer fail at `gina-init` with `EACCES`, and the pinned framework now actually wins `require('gina')` inside the image — the `node_modules/gina` link supersedes the project-extracted copy. Dependency-free projects were unaffected. (#B118 / #B119)
54
- - **Fixed — two smaller corrections.** `gina.emit('error', ...)` on the module object no longer throws (`emit` is an inert stub; application events go through the controller's `self.emitEvent()`), and the checkbox migration warning added in 0.5.18 now also covers the un-tick direction — markup carrying `checked` plus a false / empty `value` that used to render unticked and now stays ticked is flagged once per field. (#B109 / #49)
45
+ ## What's in 0.5.20
46
+
47
+ - **Fixedregion locale data: one file per language, with localized country names.** The region-locale generator used to append each requested language's rows to the previous language's output, so `dist/region/fr.json` carried every country twice (the English copy first) and `getLocales().getCountries()` always resolved the English row. Each language now ships as a standalone file, and non-English builds localize `countryName` a bundle resolving a `fr` culture now renders `Allemagne`, `États-Unis`, `Royaume-Uni` where it previously showed `Germany`, `US`, `UK`, through the same `getLocales().getCountries()` path with no application changes. Rows with no ISO 3166 alpha-2 code are dropped (they could only ever render blank). The region files are read once at boot, so restart your bundles after upgrading to pick up the regenerated data. (#50)
48
+ - **Fixed`getCountries(code)` honors its projection argument.** The optional `code` argument (e.g. `capital`, `continent`, `tld`) was computed and never applied; it now adds that field to every returned row while the four historical fields (`isoShort`, `isoLong`, `countryName`, `officialStateName`) stay untouched, so calls without an argument return exactly what they did before. An unknown or non-string field logs a warning and is ignored, and a bundle with no locale set gets an empty list instead of throwing. (#50)
49
+ - **FixedFormValidator: numbered `is` rules now enforce, injected forms activate live checking, and boolean `_case_` conditions match live.** Numbered `is` aliases (`is1`, `is2`, ) were silently skipped and now install and run on both the client and the server**a form that submitted clean because its `is2` condition was ignored may begin failing validation (or returning 422), so sweep your rule files for numbered `is` keys before upgrading.** Each alias now records its error under its own key on both sides, and server-side validation of rules carrying `$` cross-field references no longer crashes. Separately, dynamically injected (popin) forms now resolve `data-gina-form-rule` so live checking activates, and `_case_` conditions written as the strings `"true"` / `"false"` now match during live checking. These are browser-bundled changes rebuild your bundles after upgrading. (#B127/#B128/#B129)
50
+ - **Changed — busboy is now an npm dependency, not a vendored copy.** Multipart form parsing uses [`@rhinostone/busboy`](https://github.com/gina-io/busboy) a strict superset of upstream busboy 1.6.0 whose only addition exposes each part's parsed Content-Disposition parameters, which is what lets the upload layer read the `group="…"` tag installed from npm instead of a patched copy carried inside the framework tree. Upload behaviour and the multipart wire format are unchanged: files still arrive with their group, an unconfigured group is still rejected, and a file with no group still falls back to `untagged`. No application changes and no client rebuild pickup is the version plus a bundle restart.
55
51
 
56
52
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
57
53
 
package/ROADMAP.md CHANGED
@@ -44,6 +44,7 @@ This roadmap covers planned features, architectural improvements, new connectors
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
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
46
  | **Q3 2026** | `0.5.19` ✅ | **Added**: route authorization — a `routing.json` rule gates access before the action runs via `param.requireAuth` (a 401 for XHR, a non-cacheable login redirect for a browser navigation, the original request snapshotted for `resumeRequest()`), `param.roles` (ANY-of, implies `requireAuth`), and `param.policy` (a per-bundle function for the ownership/record checks roles can't express, AND-composed after roles); denials stay generic — required roles and the policy name never reach the wire — author mistakes refuse to boot, and `self.hasRole()` authorizes mid-logic · an audit trail — opt-in `self.audit(action, data)` writes a user-attributed append-only JSONL record (its own store, never the logger sinks; an actor snapshot, `X-Forwarded-For` never trusted), route-authorization denials recorded automatically, and an always-on request id correlating audit records to JSON logs · an OCI image/container CLI on the `image:build` host — `image:list` / `image:rm` / `image:run` (podman; publishes the EXPOSEd port, `--env-var` / `--env-file` keep secrets out of argv) and a `container:` group (`container:ps` / `container:stop`, reporting the rung a container came down on) · **Changed**: `redirect()` carries request data through the session by default (a one-shot flash, gone on refresh), the clear-text `?inheritedData=` URL form and its 2000-char cap now session-less-only — removing a plaintext-secret-in-URL disclosure when a session-ful bundle halts a credential-bearing POST · **Fixed**: Prometheus metrics no longer double-count under the isaac engine (#OBS1) · the relative `self.redirect('/path')` form resolves again and an unresolvable target 404s instead of crashing (`redirect()` is now async), and `getRoute()` no longer 500s on a requirements-less GET route with extra params (#B120/#B121) · `image:build` for gina-dependent projects no longer fails at gina-init and the pinned framework wins `require('gina')` (#B118/#B119) · `gina.emit` is an inert stub (#B109) and the checkbox migration warning now covers the un-tick direction (#49) |
47
+ | **Q3 2026** | `0.5.20` ✅ | **Fixed**: region locale data — the generator now emits one standalone file per language with localized country names (a `fr` culture renders `Allemagne` / `États-Unis` / `Royaume-Uni` through the same `getLocales().getCountries()` path, no app changes; rows without an ISO 3166 alpha-2 code are dropped; read once at boot, so restart to pick up), and `getCountries(code)` honors its projection argument — adding the requested field while the four historical fields stay untouched, an empty locale set degrading to an empty list instead of throwing (#50) · **Fixed**: FormValidator — numbered `is` rules (`is1`, `is2`, …) now install and enforce on client and server (previously silently skipped; **sweep rule JSONs before upgrading — forms may begin 422ing**), each alias keying its error distinctly and server-side `$`-cross-field rules no longer crashing; injected/popin forms resolve `data-gina-form-rule` so live checking activates; boolean `_case_` conditions match live (#B127/#B128/#B129) · **Changed**: multipart parsing uses `@rhinostone/busboy` installed from npm instead of a patched vendored copy — a strict superset of upstream busboy 1.6.0, upload behaviour and the wire format unchanged, pickup is the version plus a bundle restart |
47
48
  | **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
48
49
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
49
50
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
@@ -281,6 +282,7 @@ New database connectors follow the same interface as the existing Couchbase conn
281
282
  | ✅ | **`connector:infer` — one-off AI inference CLI** | `0.5.6-alpha.3` | Q2 2026 | Runs a single inference against a configured `ai` connector **outside a request** — the runtime sibling of the config-only `connector:list`/`add`/`rm`/`migrate` tooling. Resolves the project's shared (or shared+bundle merged) `connectors.json`, resolves `${secret:KEY}` credentials from the CLI's own environment (the resolved value is never echoed), instantiates the connector directly (no bundle boot, no framework socket), and prints the normalised result. `gina connector:infer <connector> [<bundle>] @<project> --message="..."`, with `--system` / `--model` / `--max-tokens` / `--temperature` per-call overrides; `--message` takes precedence over a messages JSON array piped on stdin. `--format=json` (matched strictly — `jsonl`/`json5` fall back to the text output) emits `{ content, model, usage }`, with `--raw` adding the full provider response as a `raw` field (omitted by default for CLI use); text mode writes the content to stdout and a model/usage footer to stderr. `--stream` streams the inference as newline-delimited JSON (NDJSON) — one frame per line on stdout: a `start` frame, a `delta` frame per token, then a terminal `done` (content, model, usage, latency; plus the provider `raw` object under `--raw` — `null` for OpenAI-family streams) or `error` frame; token counters are passed through verbatim and are `null` (never fabricated) when a provider does not report them. Errors cleanly on a non-`ai` connector, and surfaces missing-SDK / credential / transport failures with a non-zero exit and the reason on stderr. Useful for smoke-testing connectivity + credentials from CI/automation, or scripting a one-off inference from a shell; offline providers such as `ollama://` work with no paid-API key. Implemented 2026-06-30 (`connector:infer` + the `--stream` NDJSON mode; a later output-hardening pass added `--raw`, pipe-safe synchronous writes, and `--message`-over-stdin precedence). |
282
283
  | ✅ | **`connector:test` — connector readiness probe CLI** | `0.5.6-alpha.3` | Q2 2026 | Probes a project's configured connectors for readiness **outside a request** — the CI-friendly sibling of `connector:list` (driver-install status only) and `secrets:check` (env presence only), answering "is this connector ready to use?". Default is validate-only and offline: per connector it checks the `connector` type / `ai` protocol is recognised, the npm driver is installed at `<project>/node_modules`, and every `${secret:KEY}` placeholder resolves from the environment — no network, no connector instantiated — exiting non-zero when any connector fails so it can gate a deploy. `gina connector:test [<connector> [<bundle>]] @<project>` tests one connector or every connector in a project (bare → every registered project), mirroring `connector:infer`'s positional grammar and `secrets:check`'s all-mode; `--format=json` emits a machine-readable readiness report. The `--connect` opt-in adds a live connectivity probe: for `ai` connectors it calls the provider's `models.list` (a credentialed request that authenticates with **zero generation tokens**; `ollama://` confirms the local server is up), resolving `${secret:KEY}` the way `connector:infer` does (the value is never printed). For DB/cache connectors the live `--connect` probe is reported as **skipped** for now (config / driver / secrets are still validated) — the live DB/cache probe is a follow-up, since those connector classes load `core/gna` (which exits the process outside a booted bundle) and cannot be instantiated the way the AI connector is. Implemented 2026-06-30. |
283
284
  | ✅ | **`connector:models` — list an AI connector's provider models** | `0.5.8` | Q2 2026 | Lists the model catalogue a configured `ai` connector's provider can serve — the read sibling of `connector:test --connect` (which makes the same `models.list()` call but keeps only the count). `gina connector:models <connector> @<project> [<bundle>]` prints one model id per line (a count footer on stderr), or `--format=json` emits `{ project, connector, provider, count, models }` with each entry passed through verbatim from the provider (only `id` is guaranteed across providers — Anthropic and OpenAI-family return different fields). Reuses the direct-`AIConnector` bootstrap of `connector:infer` / `connector:test` (no bundle boot, no framework socket); resolves config only and never prints credentials; offline providers such as `ollama://` work with no internet. `isAIConnector`-gated (a non-AI connector is rejected cleanly), and a provider client without `models.list` reports `supported:false` with a non-zero exit rather than a fabricated empty list. Implemented 2026-07-03. |
285
+ | 📋 | **DuckDB** | `0.5.x` | Q3 2026 | ORM / entity connector for DuckDB — an embedded **analytical** (columnar, OLAP) store: the analytics-side sibling of the SQLite connector's embedded OLTP role. Planned shape follows the MySQL / PostgreSQL architecture: entity wiring, `sql/` layout, positional placeholders (DuckDB accepts `?` and `$name`), `@param`/`@return` annotations, native Promise + `.onComplete()`, driver loaded from the project's `node_modules` as an optional peer dependency. Client: `@duckdb/node-api` (DuckDB's current-generation Node client). Use cases: in-process analytics and reporting bundles over app data, querying Parquet / CSV / JSON files directly without an ETL hop, larger-than-memory local aggregation; both `:memory:` and file-backed databases. Session store is a non-goal — DuckDB is a single-writer analytics engine (Redis / SQLite cover session storage). |
284
286
 
285
287
  ---
286
288
 
@@ -0,0 +1 @@
1
+ 0.5.20
@@ -3892,9 +3892,17 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
3892
3892
  * */
3893
3893
  self[el]['is'] = function(condition, errorMessage, errorStack) {
3894
3894
  var isValid = false;
3895
- var alias = ( typeof(window) != 'undefined' && typeof(window._currentValidatorAlias) != 'undefined' ) ? window._currentValidatorAlias : 'is';
3896
- if ( typeof(window) != 'undefined' && window._currentValidatorAlias)
3897
- delete window._currentValidatorAlias;
3895
+ // #B127 — alias root: window in the browser, the Node global on the
3896
+ // server, so numbered `is<N>` aliases keep DISTINCT error keys on both
3897
+ // sides. The installer's setAlias IIFE already writes the alias to the
3898
+ // Node global (sloppy-mode `this`); the old window-only read collapsed
3899
+ // every server alias to the shared key `is`, which let a later PASSING
3900
+ // alias delete an earlier FAILING alias's error (see the !isValid /
3901
+ // delete bookkeeping below) — the field then validated clean.
3902
+ var _aliasRoot = ( typeof(window) != 'undefined' ) ? window : ( ( typeof(global) != 'undefined' ) ? global : null );
3903
+ var alias = ( _aliasRoot && typeof(_aliasRoot._currentValidatorAlias) != 'undefined' ) ? _aliasRoot._currentValidatorAlias : 'is';
3904
+ if ( _aliasRoot && _aliasRoot._currentValidatorAlias )
3905
+ delete _aliasRoot._currentValidatorAlias;
3898
3906
 
3899
3907
  var errors = self[this['name']]['errors'] || {};
3900
3908
  local.data[this.name] = self[this.name].value;
@@ -10427,18 +10435,27 @@ function ValidatorPlugin(rules, data, formId, culture) {
10427
10435
 
10428
10436
  var rule = null;
10429
10437
  if ( typeof(customRule) == 'undefined') {
10430
- rule = _id.replace(/\-/g, '.');
10438
+ // #B128 attribute-first: an injected form carrying `data-gina-form-rule`
10439
+ // (the popin bind path calls validateFormById with no customRule) must
10440
+ // resolve by the attribute's dotted name — the id-derived name stays the
10441
+ // fallback for attribute-less forms whose id names the rule. The old shape
10442
+ // read the attribute only when `rules` was undefined — unreachable on a
10443
+ // rules-bearing page (and its inner `rules` recheck was false by
10444
+ // construction, so that branch could only ever throw): the id-derived
10445
+ // lookup missed, bindForm re-resolved by id, `$form.rules` bound `{}`,
10446
+ // and the live-check gate stamped the form
10447
+ // `data-gina-form-live-check-enabled="false"` while the submit handler
10448
+ // independently re-read the attribute and succeeded.
10449
+ // was: rule = _id.replace(/\-/g, '.'); then the attribute behind an
10450
+ // unreachable `else if` ending in a dead throw.
10451
+ if ( typeof($form.target) != 'undefined' && $form.target !== null && $form.target.getAttribute('data-gina-form-rule') ) {
10452
+ rule = $form.target.getAttribute('data-gina-form-rule').replace(/\-|\//g, '.');
10453
+ } else {
10454
+ rule = _id.replace(/\-/g, '.');
10455
+ }
10431
10456
 
10432
10457
  if ( typeof(rules) != 'undefined' ) {
10433
10458
  $form['rule'] = customRule = getRuleObjByName(rule)
10434
- } else if ( typeof($form.target) != 'undefined' && $form.target !== null && $form.target.getAttribute('data-gina-form-rule') ) {
10435
- rule = $form.target.getAttribute('data-gina-form-rule').replace(/\-|\//g, '.');
10436
-
10437
- if ( typeof(rules) != 'undefined' ) {
10438
- $form['rule'] = getRuleObjByName(rule)
10439
- } else {
10440
- throw new Error('[ FormValidator::validateFormById(formId) ] using `data-gina-form-rule` on form `'+$form.target+'`: no matching rule found')
10441
- }
10442
10459
  } // no else to allow form without any rule
10443
10460
  } else {
10444
10461
  rule = customRule.replace(/\-|\//g, '.');
@@ -17187,8 +17204,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
17187
17204
  var stringifiedRules = JSON.stringify(rules);
17188
17205
  fields = formatFields(stringifiedRules, fields);
17189
17206
  if ( /\$(.*)/.test(stringifiedRules) ) {
17207
+ // #B127 — `$fields` is null on the server paths (backendInit passes
17208
+ // validate($form, fields, null, rules, …)), so the unguarded
17209
+ // `$fields.count()` crashed the server pass for ANY `$`-bearing rule
17210
+ // set (plain `is` included) before the rules ever ran. A server pass
17211
+ // is a full-form pass by definition — never a single-element live-check.
17190
17212
  var isLiveCheckingOnASingleElement = (
17191
- !/^form$/i.test($formOrElement.tagName)
17213
+ $fields
17214
+ && !/^form$/i.test($formOrElement.tagName)
17192
17215
  && $fields.count() == 1
17193
17216
  && /true/i.test($formOrElement.form.dataset.ginaFormLiveCheckEnabled)
17194
17217
  ) ? true : false;
@@ -17256,18 +17279,26 @@ function ValidatorPlugin(rules, data, formId, culture) {
17256
17279
 
17257
17280
  // check each field against rule
17258
17281
  for (var rule in rules[field]) {
17259
- // skip when not processing rule function
17260
- if ( typeof(d[field][rule]) != 'function' ) {
17261
- continue;
17262
- }
17263
-
17264
- if ( /^((is)\d+|is$)/.test(rule) && typeof(d[field][rule]) == 'undefined' ) { // is aliases
17282
+ // #B127 numbered `is` aliases (`is0`, `is1`, …) must be installed
17283
+ // BEFORE the function typecheck below: the installer requires the
17284
+ // `undefined` state the typecheck `continue`s on, so with the old
17285
+ // order (typecheck first) the installer was unreachable and every
17286
+ // `is<N>` rule key was silently skipped — client AND server. The
17287
+ // regex is anchored: the old unanchored alternative also matched
17288
+ // names like `is0abc`, which would inherit from a nonexistent base.
17289
+ // was (below the typecheck — unreachable):
17290
+ // if ( /^((is)\d+|is$)/.test(rule) && typeof(d[field][rule]) == 'undefined' ) { // is aliases
17291
+ if ( /^is\d+$/.test(rule) && typeof(d[field][rule]) == 'undefined' ) { // is aliases
17265
17292
  d[field][rule] = function(){};
17266
17293
  d[field][rule] = inherits(d[field][rule], d[field][ rule.replace(/\d+/, '') ]);
17267
17294
  d[field][rule].setAlias = (function(alias) {
17268
17295
  this._currentValidatorAlias = alias
17269
17296
  }(rule));
17270
17297
  }
17298
+ // skip when not processing rule function
17299
+ if ( typeof(d[field][rule]) != 'function' ) {
17300
+ continue;
17301
+ }
17271
17302
  // check for rule params
17272
17303
  try {
17273
17304
  if (Array.isArray(rules[field][rule])) { // has args
@@ -17733,10 +17764,26 @@ function ValidatorPlugin(rules, data, formId, culture) {
17733
17764
  } // EO caseEvent
17734
17765
  */
17735
17766
  caseValue = allFields[caseName];
17767
+ // #B129 — coerce the CASE value itself (the direct-case
17768
+ // site's semantics: unconditional string "true"/"false"
17769
+ // -> boolean, isGFFCtx gate kept). The old shape tested
17770
+ // `fields[field]` — the OUTER field being validated — so
17771
+ // a boolean `case` never coerced unless the outer field's
17772
+ // own value happened to be "true"/"false", which instead
17773
+ // CLOBBERED the case value for that field's pass. Masked
17774
+ // in full-form passes by the direct-case site below;
17775
+ // unmasked in single-element/live-check mode.
17776
+ // was:
17777
+ // if (isGFFCtx) {
17778
+ // if (fields[field] == "true")
17779
+ // caseValue = true;
17780
+ // else if (fields[field] == "false")
17781
+ // caseValue = false;
17782
+ // }
17736
17783
  if (isGFFCtx) {
17737
- if (fields[field] == "true")
17784
+ if (caseValue == "true")
17738
17785
  caseValue = true;
17739
- else if (fields[field] == "false")
17786
+ else if (caseValue == "false")
17740
17787
  caseValue = false;
17741
17788
  }
17742
17789