gina 0.5.13 → 0.5.14

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 (508) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +5 -16
  3. package/ROADMAP.md +1 -0
  4. package/framework/v0.5.14/VERSION +1 -0
  5. package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.js +119 -31
  6. package/framework/v0.5.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js +580 -0
  7. package/framework/v0.5.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  8. package/framework/v0.5.14/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  9. package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/src/form-validator.js +98 -28
  10. package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/src/main.js +21 -3
  11. package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/src/api-error.js +26 -1
  12. package/framework/{v0.5.13 → v0.5.14}/lib/i18n/src/main.js +6 -4
  13. package/framework/{v0.5.13 → v0.5.14}/package.json +1 -1
  14. package/gna.js +4 -4
  15. package/llms.txt +1 -1
  16. package/package.json +3 -3
  17. package/framework/v0.5.13/VERSION +0 -1
  18. package/framework/v0.5.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -577
  19. package/framework/v0.5.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  20. package/framework/v0.5.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  21. /package/framework/{v0.5.13 → v0.5.14}/AUTHORS +0 -0
  22. /package/framework/{v0.5.13 → v0.5.14}/LICENSE +0 -0
  23. /package/framework/{v0.5.13 → v0.5.14}/core/asset/html/nolayout.html +0 -0
  24. /package/framework/{v0.5.13 → v0.5.14}/core/asset/html/static.html +0 -0
  25. /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/android-chrome-192x192.png +0 -0
  26. /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/android-chrome-512x512.png +0 -0
  27. /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/apple-touch-icon.png +0 -0
  28. /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/favicon-16x16.png +0 -0
  29. /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/favicon-32x32.png +0 -0
  30. /package/framework/{v0.5.13 → v0.5.14}/core/asset/img/favicon.ico +0 -0
  31. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/README.md +0 -0
  32. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  33. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  34. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  35. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  36. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  37. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  38. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  39. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  40. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  41. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  42. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  43. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  44. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  45. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  46. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  47. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  48. /package/framework/{v0.5.13 → v0.5.14}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  49. /package/framework/{v0.5.13 → v0.5.14}/core/config.js +0 -0
  50. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/ai/index.js +0 -0
  51. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/ai/lib/connector.js +0 -0
  52. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/index.js +0 -0
  53. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/connector.js +0 -0
  54. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  55. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  56. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/n1ql.js +0 -0
  57. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/session-store.js +0 -0
  58. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  59. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  60. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/index.js +0 -0
  61. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/connector.js +0 -0
  62. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/job-store.js +0 -0
  63. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  64. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mongodb/lib/session-store.js +0 -0
  65. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mysql/index.js +0 -0
  66. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/mysql/lib/connector.js +0 -0
  67. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/postgresql/index.js +0 -0
  68. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/postgresql/lib/connector.js +0 -0
  69. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/index.js +0 -0
  70. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/lib/connector.js +0 -0
  71. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/lib/job-store.js +0 -0
  72. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/redis/lib/session-store.js +0 -0
  73. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/scylladb/index.js +0 -0
  74. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/scylladb/lib/connector.js +0 -0
  75. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/scylladb/lib/session-store.js +0 -0
  76. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sql-parser.js +0 -0
  77. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/index.js +0 -0
  78. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/lib/connector.js +0 -0
  79. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/lib/job-store.js +0 -0
  80. /package/framework/{v0.5.13 → v0.5.14}/core/connectors/sqlite/lib/session-store.js +0 -0
  81. /package/framework/{v0.5.13 → v0.5.14}/core/content.encoding +0 -0
  82. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.framework.js +0 -0
  83. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.js +0 -0
  84. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-json.js +0 -0
  85. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-nunjucks-async.js +0 -0
  86. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-nunjucks.js +0 -0
  87. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-stream.js +0 -0
  88. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-swig-async.js +0 -0
  89. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-swig.js +0 -0
  90. /package/framework/{v0.5.13 → v0.5.14}/core/controller/controller.render-v1.js +0 -0
  91. /package/framework/{v0.5.13 → v0.5.14}/core/controller/index.js +0 -0
  92. /package/framework/{v0.5.13 → v0.5.14}/core/controller/inspector-window-emit.js +0 -0
  93. /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/LICENSE +0 -0
  94. /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/README.md +0 -0
  95. /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  96. /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  97. /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  98. /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  99. /package/framework/{v0.5.13 → v0.5.14}/core/deps/busboy-1.6.0/package.json +0 -0
  100. /package/framework/{v0.5.13 → v0.5.14}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  101. /package/framework/{v0.5.13 → v0.5.14}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  102. /package/framework/{v0.5.13 → v0.5.14}/core/deps/streamsearch-1.1.0/package.json +0 -0
  103. /package/framework/{v0.5.13 → v0.5.14}/core/dev/index.js +0 -0
  104. /package/framework/{v0.5.13 → v0.5.14}/core/dev/lib/class.js +0 -0
  105. /package/framework/{v0.5.13 → v0.5.14}/core/dev/lib/factory.js +0 -0
  106. /package/framework/{v0.5.13 → v0.5.14}/core/dev/lib/tools.js +0 -0
  107. /package/framework/{v0.5.13 → v0.5.14}/core/gna.js +0 -0
  108. /package/framework/{v0.5.13 → v0.5.14}/core/locales/README.md +0 -0
  109. /package/framework/{v0.5.13 → v0.5.14}/core/locales/currency.json +0 -0
  110. /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/language/en.json +0 -0
  111. /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/language/fr.json +0 -0
  112. /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/region/en.json +0 -0
  113. /package/framework/{v0.5.13 → v0.5.14}/core/locales/dist/region/fr.json +0 -0
  114. /package/framework/{v0.5.13 → v0.5.14}/core/locales/index.js +0 -0
  115. /package/framework/{v0.5.13 → v0.5.14}/core/mime.types +0 -0
  116. /package/framework/{v0.5.13 → v0.5.14}/core/model/entity.js +0 -0
  117. /package/framework/{v0.5.13 → v0.5.14}/core/model/index.js +0 -0
  118. /package/framework/{v0.5.13 → v0.5.14}/core/model/template/entityFactory.js +0 -0
  119. /package/framework/{v0.5.13 → v0.5.14}/core/model/template/index.js +0 -0
  120. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/README.md +0 -0
  121. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/index.js +0 -0
  122. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/csrf/README.md +0 -0
  123. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/csrf/package.json +0 -0
  124. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/csrf/src/main.js +0 -0
  125. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/README.md +0 -0
  126. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coep/README.md +0 -0
  127. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coep/package.json +0 -0
  128. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  129. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coop/README.md +0 -0
  130. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coop/package.json +0 -0
  131. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  132. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/corp/README.md +0 -0
  133. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/corp/package.json +0 -0
  134. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  135. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/csp/README.md +0 -0
  136. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/csp/package.json +0 -0
  137. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  138. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  139. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  140. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  141. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  142. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  143. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  144. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  145. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  146. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  147. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/package.json +0 -0
  148. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  149. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  150. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  151. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/src/main.js +0 -0
  152. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  153. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  154. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  155. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  156. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  157. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  158. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  159. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  160. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  161. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  162. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  163. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  164. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  165. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  166. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  167. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  168. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  169. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  170. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/session/README.md +0 -0
  171. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/session/package.json +0 -0
  172. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/session/src/main.js +0 -0
  173. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/README.md +0 -0
  174. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/build.json +0 -0
  175. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/package.json +0 -0
  176. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/storage/src/main.js +0 -0
  177. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/README.md +0 -0
  178. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/build.json +0 -0
  179. /package/framework/{v0.5.13 → v0.5.14}/core/plugins/lib/validator/package.json +0 -0
  180. /package/framework/{v0.5.13 → v0.5.14}/core/router.js +0 -0
  181. /package/framework/{v0.5.13 → v0.5.14}/core/server.express.js +0 -0
  182. /package/framework/{v0.5.13 → v0.5.14}/core/server.isaac.js +0 -0
  183. /package/framework/{v0.5.13 → v0.5.14}/core/server.js +0 -0
  184. /package/framework/{v0.5.13 → v0.5.14}/core/status.codes +0 -0
  185. /package/framework/{v0.5.13 → v0.5.14}/core/template/_gitignore +0 -0
  186. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/app.json +0 -0
  187. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  188. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/routing.json +0 -0
  189. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/settings.json +0 -0
  190. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  191. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/templates.json +0 -0
  192. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  193. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  194. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  195. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  196. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/index.js +0 -0
  197. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle/locales/en.json +0 -0
  198. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  199. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  200. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  201. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  202. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  203. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  204. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  205. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/readme.md +0 -0
  206. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_public/sw.js +0 -0
  207. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  208. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  209. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  210. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  211. /package/framework/{v0.5.13 → v0.5.14}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  212. /package/framework/{v0.5.13 → v0.5.14}/core/template/command/gina.bat.tpl +0 -0
  213. /package/framework/{v0.5.13 → v0.5.14}/core/template/command/gina.tpl +0 -0
  214. /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/env.json +0 -0
  215. /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/manifest.json +0 -0
  216. /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/package.json +0 -0
  217. /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/settings.json +0 -0
  218. /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/statics.json +0 -0
  219. /package/framework/{v0.5.13 → v0.5.14}/core/template/conf/templates.json +0 -0
  220. /package/framework/{v0.5.13 → v0.5.14}/core/template/error/client/json/401.json +0 -0
  221. /package/framework/{v0.5.13 → v0.5.14}/core/template/error/client/json/403.json +0 -0
  222. /package/framework/{v0.5.13 → v0.5.14}/core/template/error/client/json/404.json +0 -0
  223. /package/framework/{v0.5.13 → v0.5.14}/core/template/error/server/html/50x.html +0 -0
  224. /package/framework/{v0.5.13 → v0.5.14}/core/template/error/server/json/500.json +0 -0
  225. /package/framework/{v0.5.13 → v0.5.14}/core/template/error/server/json/503.json +0 -0
  226. /package/framework/{v0.5.13 → v0.5.14}/core/template/extensions/logger/config.json +0 -0
  227. /package/framework/{v0.5.13 → v0.5.14}/helpers/console.js +0 -0
  228. /package/framework/{v0.5.13 → v0.5.14}/helpers/context.js +0 -0
  229. /package/framework/{v0.5.13 → v0.5.14}/helpers/data/LICENSE +0 -0
  230. /package/framework/{v0.5.13 → v0.5.14}/helpers/data/README.md +0 -0
  231. /package/framework/{v0.5.13 → v0.5.14}/helpers/data/package.json +0 -0
  232. /package/framework/{v0.5.13 → v0.5.14}/helpers/data/src/main.js +0 -0
  233. /package/framework/{v0.5.13 → v0.5.14}/helpers/dateFormat.js +0 -0
  234. /package/framework/{v0.5.13 → v0.5.14}/helpers/index.js +0 -0
  235. /package/framework/{v0.5.13 → v0.5.14}/helpers/json/LICENSE +0 -0
  236. /package/framework/{v0.5.13 → v0.5.14}/helpers/json/README.md +0 -0
  237. /package/framework/{v0.5.13 → v0.5.14}/helpers/json/package.json +0 -0
  238. /package/framework/{v0.5.13 → v0.5.14}/helpers/json/src/main.js +0 -0
  239. /package/framework/{v0.5.13 → v0.5.14}/helpers/path.js +0 -0
  240. /package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/README.md +0 -0
  241. /package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/package.json +0 -0
  242. /package/framework/{v0.5.13 → v0.5.14}/helpers/plugins/src/main.js +0 -0
  243. /package/framework/{v0.5.13 → v0.5.14}/helpers/prototypes.js +0 -0
  244. /package/framework/{v0.5.13 → v0.5.14}/helpers/task.js +0 -0
  245. /package/framework/{v0.5.13 → v0.5.14}/helpers/text.js +0 -0
  246. /package/framework/{v0.5.13 → v0.5.14}/lib/admin/package.json +0 -0
  247. /package/framework/{v0.5.13 → v0.5.14}/lib/admin/src/main.js +0 -0
  248. /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/README.md +0 -0
  249. /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/build.json +0 -0
  250. /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/package.json +0 -0
  251. /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/src/dep/jszip.min.js +0 -0
  252. /package/framework/{v0.5.13 → v0.5.14}/lib/archiver/src/main.js +0 -0
  253. /package/framework/{v0.5.13 → v0.5.14}/lib/async/package.json +0 -0
  254. /package/framework/{v0.5.13 → v0.5.14}/lib/async/src/main.js +0 -0
  255. /package/framework/{v0.5.13 → v0.5.14}/lib/cache/README.md +0 -0
  256. /package/framework/{v0.5.13 → v0.5.14}/lib/cache/build.json +0 -0
  257. /package/framework/{v0.5.13 → v0.5.14}/lib/cache/package.json +0 -0
  258. /package/framework/{v0.5.13 → v0.5.14}/lib/cache/src/main.js +0 -0
  259. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/aliases.json +0 -0
  260. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/add.js +0 -0
  261. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/arguments.json +0 -0
  262. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/build.js +0 -0
  263. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/copy.js +0 -0
  264. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/cp.js +0 -0
  265. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/help.js +0 -0
  266. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/help.txt +0 -0
  267. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  268. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/list.js +0 -0
  269. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/man.js +0 -0
  270. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/mcp-start.js +0 -0
  271. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/mcp.js +0 -0
  272. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/oas.js +0 -0
  273. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/openapi.js +0 -0
  274. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/remove.js +0 -0
  275. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/rename.js +0 -0
  276. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/restart.js +0 -0
  277. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/rm.js +0 -0
  278. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/start.js +0 -0
  279. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/status.js +0 -0
  280. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/bundle/stop.js +0 -0
  281. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/cache/stats.js +0 -0
  282. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/add.js +0 -0
  283. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/arguments.json +0 -0
  284. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/help.js +0 -0
  285. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/help.txt +0 -0
  286. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/infer.js +0 -0
  287. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/list.js +0 -0
  288. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/migrate.js +0 -0
  289. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/models.js +0 -0
  290. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/remove.js +0 -0
  291. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/rm.js +0 -0
  292. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/connector/test.js +0 -0
  293. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/add.js +0 -0
  294. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/get.js +0 -0
  295. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/help.js +0 -0
  296. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/help.txt +0 -0
  297. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/link-dev.js +0 -0
  298. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/list.js +0 -0
  299. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/remove.js +0 -0
  300. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/rm.js +0 -0
  301. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/set.js +0 -0
  302. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/unset.js +0 -0
  303. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/env/use.js +0 -0
  304. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/add.js +0 -0
  305. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/arguments.json +0 -0
  306. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/build.js +0 -0
  307. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/dot.js +0 -0
  308. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/get.js +0 -0
  309. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/help.js +0 -0
  310. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/help.txt +0 -0
  311. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/init.js +0 -0
  312. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/link-node-modules.js +0 -0
  313. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/link.js +0 -0
  314. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/list.js +0 -0
  315. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/man.js +0 -0
  316. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/msg.json +0 -0
  317. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/open.js +0 -0
  318. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/remove.js +0 -0
  319. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/reset.js +0 -0
  320. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/restart.js +0 -0
  321. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/set.js +0 -0
  322. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/start.js +0 -0
  323. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/status.js +0 -0
  324. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/stop.js +0 -0
  325. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/tail.js +0 -0
  326. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/update.js +0 -0
  327. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/framework/version.js +0 -0
  328. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/gina-dev.1.md +0 -0
  329. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/gina-framework.1.md +0 -0
  330. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/gina.1.md +0 -0
  331. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/helper.js +0 -0
  332. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/add.js +0 -0
  333. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/arguments.json +0 -0
  334. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/export.js +0 -0
  335. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/help.js +0 -0
  336. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/help.txt +0 -0
  337. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/import.js +0 -0
  338. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/i18n/scan.js +0 -0
  339. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/arguments.json +0 -0
  340. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/build.js +0 -0
  341. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/help.js +0 -0
  342. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/help.txt +0 -0
  343. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/image/man.js +0 -0
  344. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/index.js +0 -0
  345. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/inspector/help.js +0 -0
  346. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/inspector/help.txt +0 -0
  347. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/inspector/open.js +0 -0
  348. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/man-render.js +0 -0
  349. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/arguments.json +0 -0
  350. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/help.js +0 -0
  351. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/help.txt +0 -0
  352. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/kill.js +0 -0
  353. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/minion/list.js +0 -0
  354. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/msg.json +0 -0
  355. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/help.js +0 -0
  356. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/help.txt +0 -0
  357. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/inc/scan.js +0 -0
  358. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/list.js +0 -0
  359. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/reset.js +0 -0
  360. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/port/set.js +0 -0
  361. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/add.js +0 -0
  362. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/arguments.json +0 -0
  363. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/backup.js +0 -0
  364. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/build.js +0 -0
  365. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/help.js +0 -0
  366. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/help.txt +0 -0
  367. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/import.js +0 -0
  368. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/list.js +0 -0
  369. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/man.js +0 -0
  370. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/move.js +0 -0
  371. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/remove.js +0 -0
  372. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/rename.js +0 -0
  373. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/restart.js +0 -0
  374. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/restore.js +0 -0
  375. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/rm.js +0 -0
  376. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/start.js +0 -0
  377. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/status.js +0 -0
  378. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/project/stop.js +0 -0
  379. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/arguments.json +0 -0
  380. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/help.js +0 -0
  381. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/help.txt +0 -0
  382. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/list.js +0 -0
  383. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/remove.js +0 -0
  384. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/protocol/set.js +0 -0
  385. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/add.js +0 -0
  386. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/help.js +0 -0
  387. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/help.txt +0 -0
  388. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/link-local.js +0 -0
  389. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/link-production.js +0 -0
  390. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/list.js +0 -0
  391. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/remove.js +0 -0
  392. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/rm.js +0 -0
  393. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/scope/use.js +0 -0
  394. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/arguments.json +0 -0
  395. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/check.js +0 -0
  396. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/help.js +0 -0
  397. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/help.txt +0 -0
  398. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/secrets/scan.js +0 -0
  399. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/help.js +0 -0
  400. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/help.txt +0 -0
  401. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/list.js +0 -0
  402. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/man.js +0 -0
  403. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/service/start.js +0 -0
  404. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd/view/add.js +0 -0
  405. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd-status-format/package.json +0 -0
  406. /package/framework/{v0.5.13 → v0.5.14}/lib/cmd-status-format/src/main.js +0 -0
  407. /package/framework/{v0.5.13 → v0.5.14}/lib/collection/README.md +0 -0
  408. /package/framework/{v0.5.13 → v0.5.14}/lib/collection/build.json +0 -0
  409. /package/framework/{v0.5.13 → v0.5.14}/lib/collection/package.json +0 -0
  410. /package/framework/{v0.5.13 → v0.5.14}/lib/collection/src/main.js +0 -0
  411. /package/framework/{v0.5.13 → v0.5.14}/lib/config.js +0 -0
  412. /package/framework/{v0.5.13 → v0.5.14}/lib/connector-config/package.json +0 -0
  413. /package/framework/{v0.5.13 → v0.5.14}/lib/connector-config/src/main.js +0 -0
  414. /package/framework/{v0.5.13 → v0.5.14}/lib/connector-registry/package.json +0 -0
  415. /package/framework/{v0.5.13 → v0.5.14}/lib/connector-registry/src/main.js +0 -0
  416. /package/framework/{v0.5.13 → v0.5.14}/lib/cron/README.md +0 -0
  417. /package/framework/{v0.5.13 → v0.5.14}/lib/cron/package.json +0 -0
  418. /package/framework/{v0.5.13 → v0.5.14}/lib/cron/src/main.js +0 -0
  419. /package/framework/{v0.5.13 → v0.5.14}/lib/domain/LICENSE +0 -0
  420. /package/framework/{v0.5.13 → v0.5.14}/lib/domain/README.md +0 -0
  421. /package/framework/{v0.5.13 → v0.5.14}/lib/domain/package.json +0 -0
  422. /package/framework/{v0.5.13 → v0.5.14}/lib/domain/src/main.js +0 -0
  423. /package/framework/{v0.5.13 → v0.5.14}/lib/generator/index.js +0 -0
  424. /package/framework/{v0.5.13 → v0.5.14}/lib/i18n/package.json +0 -0
  425. /package/framework/{v0.5.13 → v0.5.14}/lib/image-build/package.json +0 -0
  426. /package/framework/{v0.5.13 → v0.5.14}/lib/image-build/src/main.js +0 -0
  427. /package/framework/{v0.5.13 → v0.5.14}/lib/index.js +0 -0
  428. /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/LICENSE +0 -0
  429. /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/README.md +0 -0
  430. /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/package.json +0 -0
  431. /package/framework/{v0.5.13 → v0.5.14}/lib/inherits/src/main.js +0 -0
  432. /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-events/package.json +0 -0
  433. /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-events/src/main.js +0 -0
  434. /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-redact/package.json +0 -0
  435. /package/framework/{v0.5.13 → v0.5.14}/lib/inspector-redact/src/main.js +0 -0
  436. /package/framework/{v0.5.13 → v0.5.14}/lib/instrument/package.json +0 -0
  437. /package/framework/{v0.5.13 → v0.5.14}/lib/instrument/src/main.js +0 -0
  438. /package/framework/{v0.5.13 → v0.5.14}/lib/job/package.json +0 -0
  439. /package/framework/{v0.5.13 → v0.5.14}/lib/job/src/main.js +0 -0
  440. /package/framework/{v0.5.13 → v0.5.14}/lib/job-store.js +0 -0
  441. /package/framework/{v0.5.13 → v0.5.14}/lib/json-config-header/package.json +0 -0
  442. /package/framework/{v0.5.13 → v0.5.14}/lib/json-config-header/src/main.js +0 -0
  443. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/README.md +0 -0
  444. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/package.json +0 -0
  445. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/default/index.js +0 -0
  446. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/file/index.js +0 -0
  447. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  448. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  449. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/mq/index.js +0 -0
  450. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/mq/listener.js +0 -0
  451. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/containers/mq/speaker.js +0 -0
  452. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/helper.js +0 -0
  453. /package/framework/{v0.5.13 → v0.5.14}/lib/logger/src/main.js +0 -0
  454. /package/framework/{v0.5.13 → v0.5.14}/lib/math/index.js +0 -0
  455. /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-dispatch/package.json +0 -0
  456. /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-dispatch/src/main.js +0 -0
  457. /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-http/package.json +0 -0
  458. /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-http/src/main.js +0 -0
  459. /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-server/package.json +0 -0
  460. /package/framework/{v0.5.13 → v0.5.14}/lib/mcp-server/src/main.js +0 -0
  461. /package/framework/{v0.5.13 → v0.5.14}/lib/merge/README.md +0 -0
  462. /package/framework/{v0.5.13 → v0.5.14}/lib/merge/package.json +0 -0
  463. /package/framework/{v0.5.13 → v0.5.14}/lib/merge/src/main.js +0 -0
  464. /package/framework/{v0.5.13 → v0.5.14}/lib/metrics/package.json +0 -0
  465. /package/framework/{v0.5.13 → v0.5.14}/lib/metrics/src/main.js +0 -0
  466. /package/framework/{v0.5.13 → v0.5.14}/lib/model.js +0 -0
  467. /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-filters/README.md +0 -0
  468. /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-filters/package.json +0 -0
  469. /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-filters/src/main.js +0 -0
  470. /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-resolver/package.json +0 -0
  471. /package/framework/{v0.5.13 → v0.5.14}/lib/nunjucks-resolver/src/main.js +0 -0
  472. /package/framework/{v0.5.13 → v0.5.14}/lib/proc.js +0 -0
  473. /package/framework/{v0.5.13 → v0.5.14}/lib/routing/README.md +0 -0
  474. /package/framework/{v0.5.13 → v0.5.14}/lib/routing/build.json +0 -0
  475. /package/framework/{v0.5.13 → v0.5.14}/lib/routing/package.json +0 -0
  476. /package/framework/{v0.5.13 → v0.5.14}/lib/routing/src/main.js +0 -0
  477. /package/framework/{v0.5.13 → v0.5.14}/lib/routing/src/radix.js +0 -0
  478. /package/framework/{v0.5.13 → v0.5.14}/lib/routing-introspect/package.json +0 -0
  479. /package/framework/{v0.5.13 → v0.5.14}/lib/routing-introspect/src/main.js +0 -0
  480. /package/framework/{v0.5.13 → v0.5.14}/lib/secrets/package.json +0 -0
  481. /package/framework/{v0.5.13 → v0.5.14}/lib/secrets/src/backends/env.js +0 -0
  482. /package/framework/{v0.5.13 → v0.5.14}/lib/secrets/src/main.js +0 -0
  483. /package/framework/{v0.5.13 → v0.5.14}/lib/session-store.js +0 -0
  484. /package/framework/{v0.5.13 → v0.5.14}/lib/shell.js +0 -0
  485. /package/framework/{v0.5.13 → v0.5.14}/lib/state.js +0 -0
  486. /package/framework/{v0.5.13 → v0.5.14}/lib/swig-filters/README.md +0 -0
  487. /package/framework/{v0.5.13 → v0.5.14}/lib/swig-filters/package.json +0 -0
  488. /package/framework/{v0.5.13 → v0.5.14}/lib/swig-filters/src/main.js +0 -0
  489. /package/framework/{v0.5.13 → v0.5.14}/lib/swig-resolver/package.json +0 -0
  490. /package/framework/{v0.5.13 → v0.5.14}/lib/swig-resolver/src/main.js +0 -0
  491. /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/package.json +0 -0
  492. /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/src/loaders/http.js +0 -0
  493. /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/src/loaders/memory.js +0 -0
  494. /package/framework/{v0.5.13 → v0.5.14}/lib/template-loaders/src/main.js +0 -0
  495. /package/framework/{v0.5.13 → v0.5.14}/lib/url/README.md +0 -0
  496. /package/framework/{v0.5.13 → v0.5.14}/lib/url/index.js +0 -0
  497. /package/framework/{v0.5.13 → v0.5.14}/lib/url/routing.json +0 -0
  498. /package/framework/{v0.5.13 → v0.5.14}/lib/uuid/package.json +0 -0
  499. /package/framework/{v0.5.13 → v0.5.14}/lib/uuid/src/main.js +0 -0
  500. /package/framework/{v0.5.13 → v0.5.14}/lib/validator.js +0 -0
  501. /package/framework/{v0.5.13 → v0.5.14}/lib/watcher/package.json +0 -0
  502. /package/framework/{v0.5.13 → v0.5.14}/lib/watcher/src/main.js +0 -0
  503. /package/framework/{v0.5.13 → v0.5.14}/lib/ws-framing/package.json +0 -0
  504. /package/framework/{v0.5.13 → v0.5.14}/lib/ws-framing/src/main.js +0 -0
  505. /package/framework/{v0.5.13 → v0.5.14}/lib/ws-query/package.json +0 -0
  506. /package/framework/{v0.5.13 → v0.5.14}/lib/ws-query/src/main.js +0 -0
  507. /package/framework/{v0.5.13 → v0.5.14}/lib/ws-session/package.json +0 -0
  508. /package/framework/{v0.5.13 → v0.5.14}/lib/ws-session/src/main.js +0 -0
@@ -156,6 +156,16 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
156
156
  'isApiError': 'Condition not satisfied',
157
157
  'isInList': 'Must be one of: %s'
158
158
  };
159
+ /**
160
+ * Rules already warned about by `replace()`'s fail-soft guard, so one mistyped label
161
+ * emits one warning and not one per debounced keystroke. Scoped to this engine
162
+ * instance on purpose: `validate()` builds a fresh engine per pass, but a
163
+ * module-scoped cache would suppress a second bundle's warning on the server, where
164
+ * the module is shared across bundles and requests.
165
+ * @inner
166
+ * @type {Object.<string, boolean>}
167
+ */
168
+ var _labelWarnings = {};
159
169
  local.errorLabels = _defaultErrorLabels;
160
170
  // #i18n (server) — resolve built-in rule labels from the bundle catalog's
161
171
  // `_validator.<rule>` namespace for the negotiated `culture`. Mirrors the client
@@ -284,6 +294,13 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
284
294
 
285
295
  var compileError = function(error, data) {
286
296
  var varArr = error.match(/\{\{([^{{}}]+)\}\}/g );
297
+ // `String.match` with a /g regex yields `null` — not [] — when nothing matches, so a
298
+ // backend field error carrying no `{{placeholder}}` (the common shape, e.g. "Already
299
+ // taken") used to die on `varArr.length` before it could be rendered. Nothing along
300
+ // the only call path catches it, and the throw kills the whole validation pass.
301
+ if (!varArr) {
302
+ return error;
303
+ }
287
304
  for (let v=0, vLen=varArr.length; v<vLen; v++) {
288
305
  let localValue = varArr[v]
289
306
  .replace(/\[/g, '["')
@@ -390,7 +407,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
390
407
  this.error = errorMessage = cachedErrors[this.name].query[this.value].slice(0);
391
408
  hasCachedErrors = true;
392
409
  }
393
- errors['query'] = replace( this.error || errorMessage || local.errorLabels['query'], this);
410
+ errors['query'] = replace( this.error || errorMessage || local.errorLabels['query'], this, 'query');
394
411
  console.debug('[2] potential cached error detected !! ', hasCachedErrors, cachedErrors, ' vs ', errors['query']);
395
412
 
396
413
  if (hasCachedErrors) {
@@ -554,7 +571,13 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
554
571
  if ( typeof(errorFields[_this.name]) != 'undefined') {
555
572
 
556
573
  // compiling against rules[field].query.data
557
- local.errorLabels['query'] = compileError(errorFields[_this.name], options.data);
574
+ // Only a string can be compiled — `compileError` runs `error.match()`.
575
+ // A non-string field error from the backend leaves the resolved
576
+ // `query` label in place (localized, else the English default)
577
+ // rather than taking the pass down.
578
+ if ( typeof(errorFields[_this.name]) === 'string' ) {
579
+ local.errorLabels['query'] = compileError(errorFields[_this.name], options.data);
580
+ }
558
581
 
559
582
 
560
583
  } else if ( typeof(result.error) != 'undefined' && /^5/.test(result.status) ) {
@@ -564,7 +587,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
564
587
  // Fixed added on 2023-01-10
565
588
  // We want `local.errorLabels['query']` before the generic|user defined `rule` error
566
589
  var optionError = ( typeof(options['error']) != 'undefined' ) ? options['error'] : null;
567
- errors['query'] = replace(systemError || _this['error'] || optionError || local.errorLabels['query'], _this);
590
+ errors['query'] = replace(systemError || _this['error'] || optionError || local.errorLabels['query'], _this, 'query');
568
591
 
569
592
  console.debug('[1] query error detected !! ', result, errorFields, errors['query']);
570
593
  }
@@ -1164,7 +1187,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1164
1187
  }
1165
1188
 
1166
1189
  if (!isValid) {
1167
- errors[alias] = replace(this.error || errorMessage || local.errorLabels[alias], this);
1190
+ errors[alias] = replace(this.error || errorMessage || local.errorLabels[alias], this, alias);
1168
1191
  if ( typeof(errorStack) != 'undefined' )
1169
1192
  errors['stack'] = errorStack;
1170
1193
  }
@@ -1217,7 +1240,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1217
1240
  }
1218
1241
 
1219
1242
  if (!isValid) {
1220
- errors['isEmail'] = replace(this['error'] || local.errorLabels['isEmail'], this)
1243
+ errors['isEmail'] = replace(this['error'] || local.errorLabels['isEmail'], this, 'isEmail')
1221
1244
  }
1222
1245
  // if error tagged by a previous vlaidation, remove it when isValid == true
1223
1246
  else if ( isValid && typeof(errors['isEmail']) != 'undefined' ) {
@@ -1259,7 +1282,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1259
1282
  }
1260
1283
 
1261
1284
  if (!isValid) {
1262
- errors['isJsonWebToken'] = replace(this['error'] || local.errorLabels['isJsonWebToken'], this)
1285
+ errors['isJsonWebToken'] = replace(this['error'] || local.errorLabels['isJsonWebToken'], this, 'isJsonWebToken')
1263
1286
  }
1264
1287
  // if error tagged by a previous vlaidation, remove it when isValid == true
1265
1288
  else if ( isValid && typeof(errors['isJsonWebToken']) != 'undefined' ) {
@@ -1307,7 +1330,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1307
1330
  var isValid = (val !== null) ? true : false;
1308
1331
 
1309
1332
  if (!isValid) {
1310
- errors['isBoolean'] = replace(this.error || local.errorLabels['isBoolean'], this)
1333
+ errors['isBoolean'] = replace(this.error || local.errorLabels['isBoolean'], this, 'isBoolean')
1311
1334
  }
1312
1335
  // if error tagged by a previous vlaidation, remove it when isValid == true
1313
1336
  else if ( isValid && typeof(errors['isBoolean']) != 'undefined' ) {
@@ -1352,7 +1375,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1352
1375
  }
1353
1376
 
1354
1377
  } catch (err) {
1355
- errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this);
1378
+ errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this, 'isNumber');
1356
1379
  this.valid = false;
1357
1380
  if ( errors.count() > 0 )
1358
1381
  this['errors'] = errors;
@@ -1378,14 +1401,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1378
1401
  if ( !isValid || !isMinLength || !isMaxLength ) {
1379
1402
 
1380
1403
  if ( !isValid )
1381
- errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this);
1404
+ errors['isNumber'] = replace(this.error || local.errorLabels['isNumber'], this, 'isNumber');
1382
1405
  if ( !isMinLength || !isMaxLength ) {
1383
1406
  if ( !isMinLength )
1384
- errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMinLength'], this);
1407
+ errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMinLength'], this, 'isNumberMinLength');
1385
1408
  if ( !isMaxLength )
1386
- errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMaxLength'], this);
1409
+ errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberMaxLength'], this, 'isNumberMaxLength');
1387
1410
  if ( minLength === maxLength )
1388
- errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberLength'], this);
1411
+ errors['isNumberLength'] = replace(this.error || local.errorLabels['isNumberLength'], this, 'isNumberLength');
1389
1412
  }
1390
1413
 
1391
1414
  isValid = false;
@@ -1416,7 +1439,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1416
1439
  val = this.value = local.data[this.name] = Math.round(val);
1417
1440
  } catch (err) {
1418
1441
 
1419
- errors['toInteger'] = replace(this.error || local.errorLabels['toInteger'], this);
1442
+ errors['toInteger'] = replace(this.error || local.errorLabels['toInteger'], this, 'toInteger');
1420
1443
  this.valid = false;
1421
1444
  if ( errors.count() > 0 )
1422
1445
  this['errors'] = errors;
@@ -1454,22 +1477,22 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1454
1477
  if ( !isValid || !isMinLength || !isMaxLength ) {
1455
1478
 
1456
1479
  if ( !isValid )
1457
- errors['isInteger'] = replace(this.error || local.errorLabels['isInteger'], this);
1480
+ errors['isInteger'] = replace(this.error || local.errorLabels['isInteger'], this, 'isInteger');
1458
1481
 
1459
1482
  if ( !isMinLength || !isMaxLength ) {
1460
1483
 
1461
1484
  if ( !isMinLength ) {
1462
- errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMinLength'], this);
1485
+ errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMinLength'], this, 'isIntegerMinLength');
1463
1486
  isValid = false;
1464
1487
  }
1465
1488
 
1466
1489
  if ( !isMaxLength ) {
1467
- errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMaxLength'], this);
1490
+ errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerMaxLength'], this, 'isIntegerMaxLength');
1468
1491
  isValid = false;
1469
1492
  }
1470
1493
 
1471
1494
  if ( minLength === maxLength ) {
1472
- errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerLength'], this);
1495
+ errors['isIntegerLength'] = replace(this.error || local.errorLabels['isIntegerLength'], this, 'isIntegerLength');
1473
1496
  isValid = false;
1474
1497
  }
1475
1498
  }
@@ -1526,14 +1549,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1526
1549
  }
1527
1550
  } catch(err) {
1528
1551
  isValid = false;
1529
- errors['toFloat'] = replace(this.error || local.errorLabels['toFloat'], this);
1552
+ errors['toFloat'] = replace(this.error || local.errorLabels['toFloat'], this, 'toFloat');
1530
1553
  this.valid = false;
1531
1554
  if ( errors.count() > 0 )
1532
1555
  this['errors'] = errors;
1533
1556
  }
1534
1557
  } else {
1535
1558
  isValid = false;
1536
- errors['toFloat'] = replace(this.error || local.errorLabels['toFloatNAN'], this)
1559
+ errors['toFloat'] = replace(this.error || local.errorLabels['toFloatNAN'], this, 'toFloatNAN')
1537
1560
  }
1538
1561
  }
1539
1562
 
@@ -1621,7 +1644,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1621
1644
  }
1622
1645
 
1623
1646
  if (!isValid) {
1624
- errors['isFloat'] = replace(this.error || local.errorLabels['isFloat'], this)
1647
+ errors['isFloat'] = replace(this.error || local.errorLabels['isFloat'], this, 'isFloat')
1625
1648
  }
1626
1649
 
1627
1650
  // #B78 - keep .valid consistent with a surviving isRequired error.
@@ -1687,7 +1710,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1687
1710
 
1688
1711
 
1689
1712
  if (!isValid) {
1690
- errors['isRequired'] = replace(this.error || local.errorLabels['isRequired'], this)
1713
+ errors['isRequired'] = replace(this.error || local.errorLabels['isRequired'], this, 'isRequired')
1691
1714
  }
1692
1715
  // if error tagged by a previous vlaidation, remove it when isValid == true
1693
1716
  else if ( isValid ) {
@@ -1771,11 +1794,11 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1771
1794
  isValid = false;
1772
1795
 
1773
1796
  if ( !isMinLength )
1774
- errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMinLength'], this);
1797
+ errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMinLength'], this, 'isStringMinLength');
1775
1798
  if ( !isMaxLength )
1776
- errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMaxLength'], this);
1799
+ errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringMaxLength'], this, 'isStringMaxLength');
1777
1800
  if (minLength === maxLength)
1778
- errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringLength'], this);
1801
+ errors['isStringLength'] = replace(this['error'] || local.errorLabels['isStringLength'], this, 'isStringLength');
1779
1802
  }
1780
1803
 
1781
1804
  }
@@ -1806,7 +1829,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1806
1829
  if (!val || val == '' || /NaN|Invalid Date/i.test(val) ) {
1807
1830
  if ( /NaN|Invalid Date/i.test(val) ) {
1808
1831
  console.warn('[FormValidator::isDate] Provided value for field `'+ this.name +'` is not allowed: `'+ val +'`');
1809
- errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this);
1832
+ errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this, 'isDate');
1810
1833
 
1811
1834
  }
1812
1835
  this.valid = isValid;
@@ -1893,7 +1916,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1893
1916
  if ( !errors['isRequired'] && this.value == '' ) {
1894
1917
  isValid = true
1895
1918
  } else {
1896
- errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this);
1919
+ errors['isDate'] = replace(this.error || local.errorLabels['isDate'], this, 'isDate');
1897
1920
  }
1898
1921
 
1899
1922
  this.valid = isValid;
@@ -1961,7 +1984,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
1961
1984
 
1962
1985
  if (!isValid) {
1963
1986
  this['size'] = allowedValues.join(', ');
1964
- errors['isInList'] = replace(this.error || local.errorLabels['isInList'], this);
1987
+ errors['isInList'] = replace(this.error || local.errorLabels['isInList'], this, 'isInList');
1965
1988
  } else if ( typeof(errors['isInList']) != 'undefined' ) {
1966
1989
  delete errors['isInList'];
1967
1990
  }
@@ -2244,8 +2267,55 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
2244
2267
  return local.data
2245
2268
  }
2246
2269
 
2270
+ /**
2271
+ * Interpolate the `%l`/`%n`/`%s` tokens of an error label against a field object.
2272
+ *
2273
+ * `target` reaches here from four independent sources, none of which the framework
2274
+ * controls: a bundle catalog's `_validator.<rule>` label, a runtime
2275
+ * `gina.validator.setErrorLabels()` override, a rule's `errorMessage` argument
2276
+ * (`is: ["$a === $b", <errorMessage>]`), and a per-field `error` (plus the `query`
2277
+ * rule's `systemError`/`optionError`). Only the first is linted at boot.
2278
+ *
2279
+ * A non-string `target` used to throw here, and the throw is unrecoverable: it
2280
+ * escapes `validate()`, so the submit-validation callback never runs and the form
2281
+ * silently refuses to submit, and a boot-time pass aborts the whole form-binding
2282
+ * loop. So degrade instead of dying — an authoring mistake must never cost a form.
2283
+ *
2284
+ * @inner
2285
+ * @param {*} target - The unresolved label. Fail-soft when not a string.
2286
+ * @param {object} fieldObj - Field the label is rendered for; supplies the tokens.
2287
+ * @param {string} [rule] - Rule the label belongs to. OPTIONAL: `replace` is
2288
+ * re-exported to app-defined validators through `getValidationContext()`, which
2289
+ * call it with two arguments. Absent, a non-string label degrades to an empty
2290
+ * message rather than to the rule's English default.
2291
+ * @returns {string} The interpolated label; never throws.
2292
+ *
2293
+ * @example
2294
+ * replace('Should be at least %s characters', { size: 5 }) // -> 'Should be at least 5 characters'
2295
+ * replace({ message: 'oops' }, field, 'isRequired') // -> 'Cannot be left empty' (+ one warn)
2296
+ */
2247
2297
  /**@js_externs replace*/
2248
- var replace = function(target, fieldObj) {
2298
+ var replace = function(target, fieldObj, rule) {
2299
+ if ( typeof(target) !== 'string' ) {
2300
+ // Prefer the rule's resolved label (it may be localised) over the English
2301
+ // default — the resolved label is only unusable when it IS the bad value,
2302
+ // in which case the `typeof` test below skips it and English wins.
2303
+ var _fallback = ( rule && typeof(local.errorLabels[rule]) === 'string' )
2304
+ ? local.errorLabels[rule]
2305
+ : ( rule && typeof(_defaultErrorLabels[rule]) === 'string' )
2306
+ ? _defaultErrorLabels[rule]
2307
+ : '';
2308
+ var _warnKey = rule || '(unknown rule)';
2309
+ if ( !_labelWarnings[_warnKey] ) {
2310
+ _labelWarnings[_warnKey] = true;
2311
+ console.warn('[FormValidator] error label for rule `' + _warnKey + '` must be a string'
2312
+ + ' — got ' + ( target === null ? 'null' : typeof(target) ) + '.'
2313
+ + ' Falling back to ' + ( _fallback ? '`' + _fallback + '`' : 'an empty message' ) + '.'
2314
+ + ' Check the bundle catalog\'s `_validator` node, `setErrorLabels()`, the rule\'s'
2315
+ + ' `errorMessage` argument, and the field\'s `error`.');
2316
+ }
2317
+ target = _fallback;
2318
+ }
2249
2319
  var keys = target.match(/%[a-z]+/gi);
2250
2320
  if (keys) {
2251
2321
  for (var k = 0, len = keys.length; k < len; ++k) {
@@ -922,9 +922,11 @@ function ValidatorPlugin(rules, data, formId, culture) {
922
922
  // }
923
923
  // }
924
924
  for (var e in errors[name]) {
925
- $msg = document.createElement('p');
926
- $msg.appendChild( document.createTextNode(errors[name][e]) );
927
- $err.appendChild($msg);
925
+ if (e != 'stack') { // ignore stack for display (parity with the first-error branch, #B89)
926
+ $msg = document.createElement('p');
927
+ $msg.appendChild( document.createTextNode(errors[name][e]) );
928
+ $err.appendChild($msg);
929
+ }
928
930
 
929
931
  if ( envIsDev ) {
930
932
  if (!formsErrors) formsErrors = {};
@@ -947,6 +949,22 @@ function ValidatorPlugin(rules, data, formId, culture) {
947
949
  if ( !isWarning && $el.type != 'hidden' ) {
948
950
  $el.setAttribute('aria-invalid', 'true');
949
951
  }
952
+
953
+ // #B89 — re-announce the REFRESHED message through the live region. The
954
+ // first-error branch announces, but this refresh branch rebuilt $err with a
955
+ // NEW message (the value now fails a different rule, or a late setErrorLabels
956
+ // overlay changed the label) and, without this, assistive tech kept announcing
957
+ // the first message. Same guard as the first-error announce: committed (not
958
+ // soft-warning) errors, per-field/blur path, once focus has left the field.
959
+ // aria-live=polite + textContent-replace re-announces because the string changed.
960
+ if (
961
+ !isWarning
962
+ && typeof(fieldName) != 'undefined'
963
+ && $err
964
+ && $el !== document.activeElement
965
+ ) {
966
+ announceA11yError($form, $err.textContent);
967
+ }
950
968
  }
951
969
 
952
970
  if (
@@ -2,6 +2,18 @@
2
2
  var merge = require('./../../../lib/merge');
3
3
  var statusCodes = requireJSON(__dirname + '/../../../core/status.codes');
4
4
  //var statusCodes = requireJSON( _( getPath('gina').core + '/status.codes') );
5
+
6
+ // #B88 — a raw stack trace has the shape `<message>\n at <frame>`; this matches it.
7
+ var STACK_SHAPE_RE = /\n\s+at\s/;
8
+ // Neutral field message rendered outside local scope in place of a leaked stack trace
9
+ // (see formatClientError). Apps that want their own copy pass a real (non-stack) message.
10
+ var GENERIC_FIELD_ERROR = 'An error occurred';
11
+ // Read at call time (NOT module-load) so it honours NODE_SCOPE_IS_LOCAL regardless of
12
+ // whether this helper was required before gna.js set it. Fail-closed: unset/false → not
13
+ // local → strip (production-safe). Mirrors controller.js's `_isLocalScope`.
14
+ function _scopeIsLocal() {
15
+ return !!process.env.NODE_SCOPE_IS_LOCAL && process.env.NODE_SCOPE_IS_LOCAL.toLowerCase() === 'true';
16
+ }
5
17
  /**
6
18
  *
7
19
  * Usage:
@@ -102,6 +114,15 @@ function ApiError(errorMessage, fieldName, errorStatus) {
102
114
 
103
115
  var formatClientError = function(ctx, error, errorMessage, fieldName) {
104
116
  error.fields[fieldName] = errorMessage;
117
+ // #B88 — `fields[fieldName]` is the sole channel carrying a value to the browser
118
+ // (both validator render paths read it), and the controller.js root-`stack` wire
119
+ // strip cannot reach it. A message-less Error makes ApiError fall back to `e.stack`
120
+ // above (`e.message || e.stack`), and an app may pass a stack string directly — so
121
+ // outside local scope, replace a stack-shaped field message with a neutral one. Kept
122
+ // in local scope for debugging, mirroring controller.js's fail-closed wire strip.
123
+ if ( !_scopeIsLocal() && typeof(error.fields[fieldName]) == 'string' && STACK_SHAPE_RE.test(error.fields[fieldName]) ) {
124
+ error.fields[fieldName] = GENERIC_FIELD_ERROR;
125
+ }
105
126
  var bundleName = ctx.bundle
106
127
  , stackObj = __stack[2]
107
128
  ;
@@ -131,7 +152,11 @@ function ApiError(errorMessage, fieldName, errorStatus) {
131
152
  //error.fields[fieldName][funcName] = errorMessage;
132
153
  } catch (err) {
133
154
  error.tag = 'N/A';
134
- error.stack = err.stack;
155
+ // #B88 — this stack (the introspection failure) serialises to the wire via
156
+ // renderJSON, which does no stripping; only expose it in local scope.
157
+ if ( _scopeIsLocal() ) {
158
+ error.stack = err.stack;
159
+ }
135
160
  }
136
161
  } else {
137
162
  //error.fields[fieldName]['isApiError'] = errorMessage;
@@ -240,15 +240,17 @@ function splitCulture(culture) {
240
240
  * The engine substitutes every token matching {@link VALIDATOR_TOKEN_RE} it finds
241
241
  * in a label, looking each one up verbatim in its `local.keys` map. An unknown
242
242
  * token — `%d`, `%L`, or a bare percent glued to letters as in `20%sur le prix` —
243
- * resolves to `undefined` and is spliced into user-facing copy; a non-string label
244
- * makes the engine's `replace()` throw (`target.match is not a function`). Both are
243
+ * resolves to `undefined` and is spliced into user-facing copy; a non-string label is
244
+ * discarded by the engine, which renders the rule's English default instead. Both are
245
245
  * catalog-authoring mistakes, and the catalog is parsed only here, so this is the
246
246
  * one place to surface them before a request renders them.
247
247
  *
248
248
  * Warns once per offending label at boot and never throws — a translation typo
249
249
  * must not take a bundle down. This covers the client too: the browser's
250
250
  * `gina.config.validatorLabels` is a subset of this same boot-loaded catalog.
251
- * It does NOT cover labels supplied at runtime via `gina.validator.setErrorLabels()`.
251
+ * It does NOT cover labels supplied at runtime via `gina.validator.setErrorLabels()`,
252
+ * nor a rule's `errorMessage` argument — for those, the engine's own fail-soft guard
253
+ * warns at the point of degradation.
252
254
  *
253
255
  * @memberof module:gina/lib/i18n
254
256
  * @inner
@@ -279,7 +281,7 @@ function warnOnSuspectValidatorLabels(catalog, filePath) {
279
281
  var label = node[rule];
280
282
  if ( typeof label !== 'string' ) {
281
283
  console.warn('[i18n] `' + VALIDATOR_NAMESPACE + '.' + rule + '` in ' + filePath
282
- + ' must be a string — the validator throws when it renders a non-string label');
284
+ + ' must be a string — the validator discards it and renders the English default');
283
285
  count++;
284
286
  continue;
285
287
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gina-framework",
3
- "version": "0.5.13",
3
+ "version": "0.5.14",
4
4
  "dependencies": {
5
5
  "@rhinostone/swig": "^2.7.2",
6
6
  "intl-messageformat": "^11.2.4",
package/gna.js CHANGED
@@ -15,14 +15,14 @@
15
15
  'use strict';
16
16
 
17
17
  // Framework core — the main gna module (lifecycle hooks, lib, etc.)
18
- var _gna = require('./framework/v0.5.13/core/gna');
18
+ var _gna = require('./framework/v0.5.14/core/gna');
19
19
 
20
20
  // SuperController and EntitySuper — loaded from their source modules
21
- var SuperController = require('./framework/v0.5.13/core/controller');
22
- var EntitySuper = require('./framework/v0.5.13/core/model/entity');
21
+ var SuperController = require('./framework/v0.5.14/core/controller');
22
+ var EntitySuper = require('./framework/v0.5.14/core/model/entity');
23
23
 
24
24
  // uuid — from the lib registry
25
- var uuid = require('./framework/v0.5.13/lib/uuid');
25
+ var uuid = require('./framework/v0.5.14/lib/uuid');
26
26
 
27
27
  module.exports = {
28
28
 
package/llms.txt CHANGED
@@ -973,7 +973,7 @@ Dev-mode query instrumentation captures every database query tied to the current
973
973
 
974
974
  221. **FormValidator marks an invalid submit trigger with `aria-disabled` + `.gina-form-submit-disabled`, NOT native `disabled` (#B76, 2026-07-06).** `updateSubmitTriggerState`'s invalid + live-check-on branch used to set the submit `<button>`'s native `.disabled = true`, but a natively-disabled `<button>` emits no click event — so the form-level `validate.<id>` guard (which renders every field's errors + focuses the first invalid field, and only `send()`s when `isValid()`) never fired, and the button was a dead no-op with zero feedback. The HIDE branch now sets `aria-disabled="true"` + adds the class `gina-form-submit-disabled` (keeping the trigger OPERABLE so the click still runs the guard) while `isValid()` stays the real send gate; the SHOW branch KEEPS clearing native `disabled` so a `<button disabled>` in markup still enables on valid / when live-check is off. Tag-agnostic (works for `<button>` and `<a>`; `.disabled=false` on an anchor is a harmless expando). The Enter-key/native-submit DOMParser proxy that read `submitTrigger.disabled` off a re-parsed copy simply never cancels on the invalid path now — harmless: the native submit is still cancelled by the `withRules || isBinded` branch and the `isValid()` gate still blocks the send. **Consumers must style the `[aria-disabled="true"]` / `.gina-form-submit-disabled` submit-trigger state — the framework ships no button CSS.** `main.js` is browser-bundled → a prod dist rebuild is required. Two testing gotchas: jsdom does NOT model "a disabled control emits no click" (it dispatches click on disabled buttons), so the bug is asserted via the pre-fix disabled STATE in a subtract replica; and the consumer-styling comment names the class, so pin the `classList.(add|remove)('gina-form-submit-disabled')` code form (==2), not a bare string count (==3). Tests: `validator-submit-trigger-state.test.js` (18).
975
975
 
976
- 222. **FormValidator built-in rule labels localise per culture from ONE per-bundle catalog on BOTH client and server — app-owned, the framework ships NO translations (0.5.x, validator i18n Slices 1–3).** The 26 English defaults live in `form-validator.js` as `_defaultErrorLabels`; each rule resolves `this.error || local.errorLabels[rule]` (per-field app override wins, else the default), and the engine seeds `local.errorLabels` from the defaults then overlays the negotiated culture's labels from the same `_validator.<rule>` catalog namespace both sides read. **CLIENT overlay** (`isGFFCtx`-gated) applies two layers over English with precedence **app `setErrorLabels()` > server-whispered bundle catalog > English**: layer 3 reads the `setErrorLabels()` registry `gina.validator._errorLabelsByCulture[gina.config.culture]` (exact `fr_FR` → base `fr` fallback); layer 2 reads `gina.config.validatorLabels` — the culture's `_validator` subset from `bundle/locales/<culture>.json` whispered by the render path (`controller.js` resolves it via `lib.i18n` walkFallback→getCatalog→resolveKey, `encodeRFC5987ValueChars`-encoded into `page.environment.validatorLabels`; `loader.js` reads it into `gina.config.validatorLabels` with a GUARDED `JSON.parse(decodeURIComponent(…))` IIFE — NOT a bare parse like `routing`, an empty whisper would throw and kill `onGinaLoaded` → whole-page JS dead — plus `@js_externs validatorLabels`). Each layer is `merge(JSON.clone(layer), local.errorLabels)` (lib/merge is target-wins/source-fills, so a higher layer wins per key and lower layers fill), catalog applied FIRST then registry; an empty `{}` catalog is skipped (own-key guard) so it degrades to registry/English. **SERVER overlay** (`!isGFFCtx`): passing a string `culture` to `gina.plugins.Validator` resolves the same `_validator` node (same walkFallback→getCatalog→resolveKey chain) and merges it over English. Apps register client overrides through the public `gina.validator.setErrorLabels(labels[, culture])`. Matches the framework's per-bundle "app owns catalogs" i18n stance (`bundle/locales` + `t()`); custom user rules already carry app messages and are untouched; a per-field/rule `error` still wins. **Two SERVER constraints (measured):** routing.json `validator::{}` requirement labels stay English (those validators run during route-matching, BEFORE culture negotiation → `req.culture` undefined there), and the auto-validation path (pass a rules object) has a pre-existing null-`$fields` crash at `forEachField` orthogonal to i18n — so the working server path is the MANUAL `new gina.plugins.Validator({}, data, formId, req.culture)` + `v.field.rule(...)`. **`%`-token contract (measured 2026-07-08).** `replace()` substitutes tokens in the MERGED `local.errorLabels`, so a CATALOG label interpolates exactly like an English default — load-bearing because length bounds arrive as ARRAY args (`"isString": [5]`, spread through `apply()` in `main.js`) and therefore reach `isStringMinLength`/`isStringMaxLength`, keys no rule file ever names (grepping rule files for them returns 0 and wrongly reads as dead). The vocabulary is CLOSED and CASE-SENSITIVE: `replace()` matches `/%[a-z]+/gi` GREEDILY and looks each hit up verbatim in `local.keys` (`%l`→label, `%n`→name, `%s`→size), so an unknown token (`%d`, `%L`) — or a literal percent glued to letters (`20%sur le prix` matches `%sur`) — splices the literal string `undefined` into user-facing copy, and a NON-STRING label makes `replace()` throw `target.match is not a function`. `%l` is frontend-only (it reads the DOM `data-gina-form-field-label`), so a catalog label using it renders EMPTY server-side rather than `undefined`. `lib/i18n loadCatalogs` LINTS the `_validator` node at boot (warns per offending label, never throws, catalog still loads); it covers the client too (the whisper is a subset of the same boot-loaded catalog) but NOT runtime `setErrorLabels()` labels, and its token set is drift-pinned against `local.keys`. **Labels are LATE-BOUND per validation pass (measured).** The overlay lives in the `FormValidatorUtil` CONSTRUCTOR, and `validate()` builds a FRESH engine on every pass (`main.js` ~`:7145`/`:7154`/`:7157`) — not once at bind time — so `setErrorLabels()` called AFTER `new FormValidator(...)`, canonically inside a `ready` handler (which fires immediately after `gina.validator = instance`), applies from the NEXT pass; it does NOT retroactively change a pass already in flight, since the message string is interpolated at rule-evaluation time. **Catalog-load signal (measured correction).** A `locales/*.json` filename failing `CULTURE_FILENAME` (`fr-FR.json`, `fr_fr.json`) DOES warn and is skipped; the genuinely SILENT case is a MISSING `locales/` dir (`config.js` `fs.existsSync` with no `else`) — opt-in by design. Catalogs are boot-loaded with no hot reload, so a catalog edit needs a bundle restart. Closure keeps the cross-module property names via the quoted-literal-decl + dot-read + `@js_externs` pattern; both validator files browser-bundled → any edit needs a prod dist rebuild (the 4 `gina.*` + 3 `gina.onload.*`), but `lib/i18n` is server-only so the boot lint needs none. Tests: `test/lib/validator-label-i18n.test.js` (client registry layer) + `test/lib/validator-label-i18n-server.test.js` (server) + `test/lib/validator-label-i18n-client-catalog.test.js` (client catalog + 3-layer precedence) + `test/lib/validator-label-i18n-runtime.test.js` (%-token interpolation from a catalog label, the boot lint, late binding).
976
+ 222. **FormValidator built-in rule labels localise per culture from ONE per-bundle catalog on BOTH client and server — app-owned, the framework ships NO translations (0.5.x, validator i18n Slices 1–3).** The 26 English defaults live in `form-validator.js` as `_defaultErrorLabels`; each rule resolves `this.error || local.errorLabels[rule]` (per-field app override wins, else the default), and the engine seeds `local.errorLabels` from the defaults then overlays the negotiated culture's labels from the same `_validator.<rule>` catalog namespace both sides read. **CLIENT overlay** (`isGFFCtx`-gated) applies two layers over English with precedence **app `setErrorLabels()` > server-whispered bundle catalog > English**: layer 3 reads the `setErrorLabels()` registry `gina.validator._errorLabelsByCulture[gina.config.culture]` (exact `fr_FR` → base `fr` fallback); layer 2 reads `gina.config.validatorLabels` — the culture's `_validator` subset from `bundle/locales/<culture>.json` whispered by the render path (`controller.js` resolves it via `lib.i18n` walkFallback→getCatalog→resolveKey, `encodeRFC5987ValueChars`-encoded into `page.environment.validatorLabels`; `loader.js` reads it into `gina.config.validatorLabels` with a GUARDED `JSON.parse(decodeURIComponent(…))` IIFE — NOT a bare parse like `routing`, an empty whisper would throw and kill `onGinaLoaded` → whole-page JS dead — plus `@js_externs validatorLabels`). Each layer is `merge(JSON.clone(layer), local.errorLabels)` (lib/merge is target-wins/source-fills, so a higher layer wins per key and lower layers fill), catalog applied FIRST then registry; an empty `{}` catalog is skipped (own-key guard) so it degrades to registry/English. **SERVER overlay** (`!isGFFCtx`): passing a string `culture` to `gina.plugins.Validator` resolves the same `_validator` node (same walkFallback→getCatalog→resolveKey chain) and merges it over English. Apps register client overrides through the public `gina.validator.setErrorLabels(labels[, culture])`. Matches the framework's per-bundle "app owns catalogs" i18n stance (`bundle/locales` + `t()`); custom user rules already carry app messages and are untouched; a per-field/rule `error` still wins. **Two SERVER constraints (measured):** routing.json `validator::{}` requirement labels stay English (those validators run during route-matching, BEFORE culture negotiation → `req.culture` undefined there), and the auto-validation path (pass a rules object) has a pre-existing null-`$fields` crash at `forEachField` orthogonal to i18n — so the working server path is the MANUAL `new gina.plugins.Validator({}, data, formId, req.culture)` + `v.field.rule(...)`. **`%`-token contract (measured 2026-07-08).** `replace()` substitutes tokens in the MERGED `local.errorLabels`, so a CATALOG label interpolates exactly like an English default — load-bearing because length bounds arrive as ARRAY args (`"isString": [5]`, spread through `apply()` in `main.js`) and therefore reach `isStringMinLength`/`isStringMaxLength`, keys no rule file ever names (grepping rule files for them returns 0 and wrongly reads as dead). The vocabulary is CLOSED and CASE-SENSITIVE: `replace()` matches `/%[a-z]+/gi` GREEDILY and looks each hit up verbatim in `local.keys` (`%l`→label, `%n`→name, `%s`→size), so an unknown token (`%d`, `%L`) — or a literal percent glued to letters (`20%sur le prix` matches `%sur`) — splices the literal string `undefined` into user-facing copy. **A NON-STRING label FAIL-SOFTS (0.5.14).** `replace(target, fieldObj, rule)` takes the rule name as an OPTIONAL 3rd argument — optional because `replace` is re-exported to app-defined validators through `getValidationContext()`, which call it with two — and when `target` is not a string it warns once per rule per engine instance (per-instance, NOT module-scoped: the module is shared across bundles + requests on the server) and falls back **resolved label → that rule's English default → empty string**. All 26 call sites pass the same key they read from `local.errorLabels`, and every one of those keys has an English default, so "degrade to English" holds at 26/26; the dynamic `is()` site passes `alias`, which is always `'is'` (the `is<N>` alias branch in the plugin's `main.js` is unreachable — its `continue` on non-function rules precedes it). Pre-0.5.14 this threw `target.match is not a function`, and NOTHING on the path catches it (`main.js`'s only `try` rethrows as `[ ginaFormValidator ] could not evaluate …`): measured in a real browser, the validator instance never finished initialising, the first form bound only partially, **every later form on the page was never bound at all** (the `bindForm` loop is unguarded), no error message rendered, and the page fell back to NATIVE browser submits with zero client-side validation. Note the submit trigger is never natively `disabled` — `updateSubmitTriggerState` only ever CLEARS `disabled`, using `aria-disabled` + `.gina-form-submit-disabled` for the invalid state — so "the button looks alive" is not evidence the pass ran. `%l` is frontend-only (it reads the DOM `data-gina-form-field-label`), so a catalog label using it renders EMPTY server-side rather than `undefined`. `lib/i18n loadCatalogs` LINTS the `_validator` node at boot (warns per offending label, never throws, catalog still loads); it covers the client too (the whisper is a subset of the same boot-loaded catalog) but NOT runtime `setErrorLabels()` labels, NOR a rule's `errorMessage` argument (`is: ["$a === $b", <non-string>]` — the lint never reads form-rule JSON), NOR a field's `error` — for those three the engine's own fail-soft guard is the only net, which is why it warns at the point of degradation. **`compileError()` is one line UPSTREAM of `replace()` on the `query` path** and carried the same class of defect: `error.match(/\{\{…\}\}/g)` returns `null` (not `[]`) when a backend field error carries no `{{placeholder}}` — the ordinary shape, e.g. `"Already taken"` — so `varArr.length` threw before any label could render; it now returns the error verbatim, and the `query` call site only compiles a string (a non-string backend field error keeps the resolved label instead of reaching `compileError`). **Labels are LATE-BOUND per validation pass (measured).** The overlay lives in the `FormValidatorUtil` CONSTRUCTOR, and `validate()` builds a FRESH engine on every pass (`main.js` ~`:7145`/`:7154`/`:7157`) — not once at bind time — so `setErrorLabels()` called AFTER `new FormValidator(...)`, canonically inside a `ready` handler (which fires immediately after `gina.validator = instance`), applies from the NEXT pass; it does NOT retroactively change a pass already in flight, since the message string is interpolated at rule-evaluation time. **Catalog-load signal (measured correction).** A `locales/*.json` filename failing `CULTURE_FILENAME` (`fr-FR.json`, `fr_fr.json`) DOES warn and is skipped; the genuinely SILENT case is a MISSING `locales/` dir (`config.js` `fs.existsSync` with no `else`) — opt-in by design. Catalogs are boot-loaded with no hot reload, so a catalog edit needs a bundle restart. Closure keeps the cross-module property names via the quoted-literal-decl + dot-read + `@js_externs` pattern; both validator files browser-bundled → any edit needs a prod dist rebuild (the 4 `gina.*` + 3 `gina.onload.*`), but `lib/i18n` is server-only so the boot lint needs none. Tests: `test/lib/validator-label-i18n.test.js` (client registry layer) + `test/lib/validator-label-i18n-server.test.js` (server) + `test/lib/validator-label-i18n-client-catalog.test.js` (client catalog + 3-layer precedence) + `test/lib/validator-label-i18n-runtime.test.js` (%-token interpolation from a catalog label, the boot lint, late binding). **#B88 fields-slot stack disclosure (0.5.14).** The reachability that renders a backend `fields[<field>]` value is FRAMEWORK-produced, not app-specific: `gna.ApiError` (`helpers/plugins/src/api-error.js`) merges `{tag,fields,path}` over the error so `error`+`fields` land at the response root — a consumer hits `compileError`'s gate with NO literal `fields:` in its source (grep = structural false negative). A raw stack enters that slot via ApiError's own `e.message || e.stack` fallback on a message-less Error, or an app passing a stack string; post-#B86 `compileError` returned it VERBATIM → it rendered into the user-facing field message (info disclosure — the DOM write is `createTextNode`, NOT XSS). FIXED AT THE SOURCE, not `compileError`: `formatClientError` scope-gates a stack-shape (`/\n\s+at\s/`) strip on `fields[fieldName]` (generic message outside local scope, full stack kept in local; call-time `NODE_SCOPE_IS_LOCAL` read, fail-closed), the sibling of `controller.js`'s fail-closed root-`stack` wire strip — which CANNOT reach the fields slot (merge drops the non-enumerable root `.stack`, so the slot is the sole carrier). One source site covers BOTH browser render paths, which each read `result.fields[<field>]`: the live-check `compileError`→`replace` path AND the form-submit `main.js` `isApiError`→`handleErrorsDisplay` path (renders verbatim, pre-dates #B86). Server-side → NO dist rebuild. The same commit scope-gates the `formatClientError` catch-branch root `.stack` (it serialises via renderJSON, which does no stripping). DEFERRED (unreported): a `{error,fields}` response hand-built WITHOUT ApiError bypasses the source strip → escalation is the same strip at the render chokepoint `handleErrorsDisplay` (browser, needs a dist rebuild). Tests: `test/lib/api-error-field-stack.test.js` (real ApiError, both sub-cases × scope, catch-branch gate, subtract). **#B89 aria-live re-announce on message refresh (0.5.14).** `handleErrorsDisplay` has three per-field branches: first-error (parent not yet marked) builds the message div AND announces via the form's `aria-live=polite` region; clear (field valid) removes it; refresh (still-errored, `data-gina-form-errors` truthy) REBUILDS the message div from the fresh `errors[name]`. The refresh branch updated the VISIBLE text but never re-announced, so a screen reader kept announcing the FIRST message when a continuously-errored field's message changed (a different failing rule, a value-dependent message, or a late `setErrorLabels()`). FIXED: a guarded `announceA11yError($form, $err.textContent)` on the refresh branch (same guard as the first-error branch — committed not soft-warning, per-field/blur path, once focus has left the field) + an `e != 'stack'` skip on its message loop (parity with the first-error branch — no stray stack `<p>` feeding the announce). `announceA11yError` writes `_live.textContent` (a REPLACE) on the form's one `gina-aria-live-<formId>` polite region, so a CHANGED string re-announces. On a blur the live-check runs a per-field validate (first-error → Branch A announce) THEN a global pass that sets `data-gina-form-errors` truthy and re-calls `handleErrorsDisplay` for the touched field (Branch C), so a second blur with a different message reliably hits the refresh branch. Browser-bundled → prod dist rebuilt; live-verified in a real headless browser (subtract: the pre-fix bundle keeps the stale announce while the visible text updates, the post-fix re-announces). DEFERRED (message-timing, LOW): which field a per-field pass refreshes is `errAttr`-gated (reset then set only after a completed pass), so a late `setErrorLabels()` before a field's first validation — or with `gina.config.culture` unset (the client culture overlay is skipped on a falsy culture) — can leave an already-errored field's message stale until it clears; register culture-keyed labels before first validation. Test: `test/core/validator-a11y-reannounce.test.js`.
977
977
 
978
978
  223. **Per-request culture negotiation was INERT framework-wide until 0.5.x — `req.culture` / the whispered `gina.config.culture` always `'en'`/`''` regardless of bundle or environment culture, and `t()` / the `t` template filter returned keys — now activated (#I18N Slice 1).** The #I18N1 catalog + negotiation machinery shipped but three legs were dead: `lib/i18n loadCatalogs` had ZERO runtime callers (so `process.gina._i18nCatalogs` stayed empty → `core/server.js availableCultures` `[]` → `matchAvailable` null on an empty list → URL-prefix / cookie / `Accept-Language` never matched); the per-request `negotiateCulture` call passed `defaultCulture: null` (step-4 bundle default skipped); and 8 sites read `process.env.GINA_CULTURE`, which `utils/helper.js` moves into `process.gina` and DELETEs from `process.env` at init (`getEnvVar` reads `process.gina`), so `negotiateCulture` step 5, the `server.js` catch, both swig + both nunjucks `t`/`tIcu` filter fallbacks, and the `i18n:add` CLI all read an always-undefined var → negotiation fell to step 6 = `'en'`. Fix (server-side, NO dist rebuild): `config.js loadBundleConfig` (after the `secrets.resolve` seam) calls `i18n.loadCatalogs(bundle, <bundleRoot>/locales)` guarded by `fs.existsSync` (opt-in; also avoids loadCatalogs' empty-entry + background ICU-loader side effects) + `try/catch`→`console.warn` (a malformed catalog is warned, not boot-fatal — loadCatalogs THROWS on bad JSON); `server.js` reads the matched bundle `content.settings.region.culture` (format-guarded vs an unresolved `${culture}`) as `defaultCulture`; the 8 dead reads → the live `getEnvVar('GINA_CULTURE')` (`typeof getEnvVar === 'function'`-guarded in the strict global-free `lib/i18n` + the filter modules so an isolated unit-require never ReferenceErrors). Precedence now live: URL / cookie / `Accept-Language` > bundle `settings.region.culture` > operator `GINA_CULTURE` > `'en'`. **`settings.region.culture` is the REAL per-bundle culture key** — bundle scaffold `core/template/boilerplate/bundle/config/settings.json` `"culture":"${culture}"` (full underscore culture resolved at `bundle:add`; the merged config carries it — `server.js`/`controller.js` already read `content.settings.region.{timeZone,shortCode}`), NOT `settings.locale.region` (a country code in the framework `settings.json`'s separate CLDR `locale` block). Blast radius: framework-wide — `req.culture`/`gina.config.culture` now reflect the configured culture, `t()` resolves real strings for any bundle shipping a `locales/` dir (others unaffected via the `existsSync` guard). Makes the #222 client validator-label overlay (gated on a truthy `gina.config.culture`) actually reachable; Slice 1 of the validator + i18n unification. **#B84 (same day) completes the activation on the WARM route path:** Slice 1 negotiated `req.culture` only on the COLD (uncached) path — `core/server.js handle()`'s cached-route fast-path (`if ( hasCachedRoute ) { isRoute = hasCachedRoute; … break; }` ~`:4964`) breaks the routing loop BEFORE the cold-path negotiation site (~`:5115`), and the route cache persists across requests (the module-scoped `routingLib` at `:91` is a stable gen-0 binding — server.js is load-once; `Routing._cached` is set at `:5198` on the cold request and read at `:4964` on every later hit to the same `method:pathname`), so the SECOND hit to any URL is warm and left `req.culture` unset → `controller.js` embeds `''` into `page.environment.culture` → `gina.config.culture === ''` → the #222 client overlay inert on warm reloads (a warm BROWSER reload reproduces; `curl` masks it — a fresh cold-only hit after a restart still negotiates). Fixed by extracting the negotiation into a per-request `var _negotiateReqCulture = function(req, routeBundle)` closure in `handle()` scope, called on BOTH the warm (`( req.routing && req.routing.bundle ) || bundle` — `getCached` already ran `compareUrls`→`checkRouteParams`, so `req.routing` incl. `bundle`/`culturePrefix` is populated) and cold (`routing[name].bundle`) paths. **The resolved culture is NEVER cached with the shared route entry** — it's per-request (cookie / Accept-Language), so pinning it would cross-request-bleed (the #B65/#B66 per-request-vs-worker-global class); the consumer's first suggestion "cache `req.culture` with the route" was rejected for exactly this, their second "re-negotiate on the warm path" shipped. **Rule: any per-request state derived after a route match must be re-derived on the cached fast-path too — `if ( hasCachedRoute ) { … break; }` bypasses everything below it in the loop.** Server-side, NO dist rebuild; surfaced by a consumer report-back that Slice 1's cold-only activation had missed. Tests: `test/core/server-culture-negotiation.test.js` (two-path source pins + a behavioural replica of the fast-path-breaks-before-cold-site structure driving the real `negotiateCulture` + a subtract proving the warm-path call is load-bearing) + a daemonless cold→warm `gina-container` boot (`req.culture === 'xx_XX'` on cold AND warm over real HTTP; `''` pre-fix). Established 2026-07-07.
979
979
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gina",
3
- "version": "0.5.13",
3
+ "version": "0.5.14",
4
4
  "description": "Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency",
5
5
  "keywords": [
6
6
  "nodejs",
@@ -73,12 +73,12 @@
73
73
  "gina-container": "bin/gina-container",
74
74
  "gina-init": "bin/gina-init"
75
75
  },
76
- "main": "./framework/v0.5.13/core/gna",
76
+ "main": "./framework/v0.5.14/core/gna",
77
77
  "exports": {
78
78
  ".": {
79
79
  "types": "./types/index.d.ts",
80
80
  "import": "./index.mjs",
81
- "require": "./framework/v0.5.13/core/gna.js"
81
+ "require": "./framework/v0.5.14/core/gna.js"
82
82
  },
83
83
  "./gna": {
84
84
  "types": "./types/gna.d.ts",
@@ -1 +0,0 @@
1
- 0.5.13