gina 0.6.2 → 0.6.3

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 (570) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +41 -12
  3. package/ROADMAP.md +3 -2
  4. package/bin/cli +19 -2
  5. package/framework/v0.6.3/VERSION +1 -0
  6. package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +6 -0
  7. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  8. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  9. package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +1 -0
  10. package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +50 -1
  11. package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +457 -57
  12. package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +1457 -58
  13. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js +625 -0
  14. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  15. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  16. package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/index.js +114 -0
  17. package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.js +14 -3
  18. package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.js +14 -3
  19. package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v3.js +29 -2
  20. package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v4.js +29 -2
  21. package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/session-store.js +24 -2
  22. package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/session-store.js +33 -9
  23. package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/session-store.js +25 -2
  24. package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/session-store.js +26 -2
  25. package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.js +201 -21
  26. package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks.js +8 -0
  27. package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig.js +85 -4
  28. package/framework/{v0.6.2 → v0.6.3}/core/gna.js +23 -1
  29. package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/src/main.js +9 -5
  30. package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +20 -0
  31. package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/form-validator.js +119 -43
  32. package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/main.js +451 -9
  33. package/framework/{v0.6.2 → v0.6.3}/core/server.isaac.js +50 -54
  34. package/framework/{v0.6.2 → v0.6.3}/core/server.js +240 -3
  35. package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/index.js +6 -4
  36. package/framework/{v0.6.2 → v0.6.3}/core/template/conf/settings.json +10 -0
  37. package/framework/{v0.6.2 → v0.6.3}/lib/cache/README.md +9 -1
  38. package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/verify.js +11 -9
  39. package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp-start.js +21 -12
  40. package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.txt +1 -1
  41. package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/init.js +13 -1
  42. package/framework/{v0.6.2 → v0.6.3}/lib/dto/src/main.js +18 -11
  43. package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/index.js +29 -1
  44. package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/speaker.js +30 -1
  45. package/framework/{v0.6.2 → v0.6.3}/lib/math/index.js +57 -6
  46. package/framework/{v0.6.2 → v0.6.3}/lib/merge/src/main.js +34 -5
  47. package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/src/main.js +77 -4
  48. package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/main.js +13 -1
  49. package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/src/main.js +64 -2
  50. package/framework/v0.6.3/lib/secrets/src/backends/env.js +75 -0
  51. package/framework/{v0.6.2 → v0.6.3}/package.json +1 -1
  52. package/gna.js +5 -4
  53. package/llms.txt +19 -17
  54. package/package.json +5 -4
  55. package/schema/connectors.json +2 -2
  56. package/schema/routing.json +5 -0
  57. package/schema/settings.json +6 -1
  58. package/script/generate_gna_types.js +1 -1
  59. package/script/soak/couchbase-soak.js +1316 -0
  60. package/types/globals.d.ts +2 -0
  61. package/types/gna.d.ts +5 -0
  62. package/types/index.d.ts +1 -0
  63. package/utils/helper.js +38 -7
  64. package/framework/v0.6.2/VERSION +0 -1
  65. package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  66. package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  67. package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -603
  68. package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  69. package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  70. package/framework/v0.6.2/lib/secrets/src/backends/env.js +0 -60
  71. /package/framework/{v0.6.2 → v0.6.3}/AUTHORS +0 -0
  72. /package/framework/{v0.6.2 → v0.6.3}/LICENSE +0 -0
  73. /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/nolayout.html +0 -0
  74. /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/static.html +0 -0
  75. /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-192x192.png +0 -0
  76. /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-512x512.png +0 -0
  77. /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/apple-touch-icon.png +0 -0
  78. /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-16x16.png +0 -0
  79. /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-32x32.png +0 -0
  80. /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon.ico +0 -0
  81. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/README.md +0 -0
  82. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  83. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  84. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  85. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  86. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  87. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  88. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  89. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  90. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  91. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  92. /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  93. /package/framework/{v0.6.2 → v0.6.3}/core/config.js +0 -0
  94. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/index.js +0 -0
  95. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/lib/connector.js +0 -0
  96. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  97. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  98. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
  99. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/index.js +0 -0
  100. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/lib/connector.js +0 -0
  101. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/index.js +0 -0
  102. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/connector.js +0 -0
  103. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/job-store.js +0 -0
  104. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  105. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/index.js +0 -0
  106. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/lib/connector.js +0 -0
  107. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/index.js +0 -0
  108. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/lib/connector.js +0 -0
  109. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/index.js +0 -0
  110. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/connector.js +0 -0
  111. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/job-store.js +0 -0
  112. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/render-cache-store.js +0 -0
  113. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/index.js +0 -0
  114. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/connector.js +0 -0
  115. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sql-parser.js +0 -0
  116. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/index.js +0 -0
  117. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/connector.js +0 -0
  118. /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/job-store.js +0 -0
  119. /package/framework/{v0.6.2 → v0.6.3}/core/content.encoding +0 -0
  120. /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.framework.js +0 -0
  121. /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-json.js +0 -0
  122. /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks-async.js +0 -0
  123. /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-stream.js +0 -0
  124. /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig-async.js +0 -0
  125. /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-v1.js +0 -0
  126. /package/framework/{v0.6.2 → v0.6.3}/core/controller/index.js +0 -0
  127. /package/framework/{v0.6.2 → v0.6.3}/core/controller/inspector-window-emit.js +0 -0
  128. /package/framework/{v0.6.2 → v0.6.3}/core/controller/release-banner.js +0 -0
  129. /package/framework/{v0.6.2 → v0.6.3}/core/dev/index.js +0 -0
  130. /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/class.js +0 -0
  131. /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/factory.js +0 -0
  132. /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/tools.js +0 -0
  133. /package/framework/{v0.6.2 → v0.6.3}/core/locales/README.md +0 -0
  134. /package/framework/{v0.6.2 → v0.6.3}/core/locales/currency.json +0 -0
  135. /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/en.json +0 -0
  136. /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/fr.json +0 -0
  137. /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/en.json +0 -0
  138. /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/fr.json +0 -0
  139. /package/framework/{v0.6.2 → v0.6.3}/core/locales/index.js +0 -0
  140. /package/framework/{v0.6.2 → v0.6.3}/core/mime.types +0 -0
  141. /package/framework/{v0.6.2 → v0.6.3}/core/model/entity.js +0 -0
  142. /package/framework/{v0.6.2 → v0.6.3}/core/model/index.js +0 -0
  143. /package/framework/{v0.6.2 → v0.6.3}/core/model/template/entityFactory.js +0 -0
  144. /package/framework/{v0.6.2 → v0.6.3}/core/model/template/index.js +0 -0
  145. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/README.md +0 -0
  146. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/index.js +0 -0
  147. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/README.md +0 -0
  148. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/package.json +0 -0
  149. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/README.md +0 -0
  150. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
  151. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
  152. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  153. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
  154. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
  155. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  156. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
  157. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
  158. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  159. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
  160. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
  161. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  162. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  163. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  164. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  165. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  166. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  167. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  168. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  169. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  170. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/package.json +0 -0
  171. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  172. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  173. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  174. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/src/main.js +0 -0
  175. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  176. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  177. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  178. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  179. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  180. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  181. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  182. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  183. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  184. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  185. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  186. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  187. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  188. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  189. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  190. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  191. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  192. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  193. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/README.md +0 -0
  194. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/package.json +0 -0
  195. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/src/main.js +0 -0
  196. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/README.md +0 -0
  197. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/build.json +0 -0
  198. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/package.json +0 -0
  199. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/src/main.js +0 -0
  200. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/README.md +0 -0
  201. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/build.json +0 -0
  202. /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/package.json +0 -0
  203. /package/framework/{v0.6.2 → v0.6.3}/core/router.js +0 -0
  204. /package/framework/{v0.6.2 → v0.6.3}/core/server.express.js +0 -0
  205. /package/framework/{v0.6.2 → v0.6.3}/core/status.codes +0 -0
  206. /package/framework/{v0.6.2 → v0.6.3}/core/template/_gitignore +0 -0
  207. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/app.json +0 -0
  208. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  209. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
  210. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
  211. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  212. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
  213. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  214. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  215. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  216. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  217. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
  218. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  219. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  220. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  221. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  222. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  223. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  224. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  225. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  226. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
  227. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
  228. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  229. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  230. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  231. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  232. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  233. /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  234. /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.bat.tpl +0 -0
  235. /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.tpl +0 -0
  236. /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/env.json +0 -0
  237. /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/manifest.json +0 -0
  238. /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/package.json +0 -0
  239. /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/statics.json +0 -0
  240. /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/templates.json +0 -0
  241. /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/401.json +0 -0
  242. /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/403.json +0 -0
  243. /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/404.json +0 -0
  244. /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/html/50x.html +0 -0
  245. /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/500.json +0 -0
  246. /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/503.json +0 -0
  247. /package/framework/{v0.6.2 → v0.6.3}/core/template/extensions/logger/config.json +0 -0
  248. /package/framework/{v0.6.2 → v0.6.3}/helpers/console.js +0 -0
  249. /package/framework/{v0.6.2 → v0.6.3}/helpers/context.js +0 -0
  250. /package/framework/{v0.6.2 → v0.6.3}/helpers/data/LICENSE +0 -0
  251. /package/framework/{v0.6.2 → v0.6.3}/helpers/data/README.md +0 -0
  252. /package/framework/{v0.6.2 → v0.6.3}/helpers/data/package.json +0 -0
  253. /package/framework/{v0.6.2 → v0.6.3}/helpers/data/src/main.js +0 -0
  254. /package/framework/{v0.6.2 → v0.6.3}/helpers/dateFormat.js +0 -0
  255. /package/framework/{v0.6.2 → v0.6.3}/helpers/index.js +0 -0
  256. /package/framework/{v0.6.2 → v0.6.3}/helpers/json/LICENSE +0 -0
  257. /package/framework/{v0.6.2 → v0.6.3}/helpers/json/README.md +0 -0
  258. /package/framework/{v0.6.2 → v0.6.3}/helpers/json/package.json +0 -0
  259. /package/framework/{v0.6.2 → v0.6.3}/helpers/json/src/main.js +0 -0
  260. /package/framework/{v0.6.2 → v0.6.3}/helpers/path.js +0 -0
  261. /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/README.md +0 -0
  262. /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/package.json +0 -0
  263. /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/api-error.js +0 -0
  264. /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/main.js +0 -0
  265. /package/framework/{v0.6.2 → v0.6.3}/helpers/prototypes.js +0 -0
  266. /package/framework/{v0.6.2 → v0.6.3}/helpers/task.js +0 -0
  267. /package/framework/{v0.6.2 → v0.6.3}/helpers/text.js +0 -0
  268. /package/framework/{v0.6.2 → v0.6.3}/lib/admin/package.json +0 -0
  269. /package/framework/{v0.6.2 → v0.6.3}/lib/admin/src/main.js +0 -0
  270. /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/README.md +0 -0
  271. /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/build.json +0 -0
  272. /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/package.json +0 -0
  273. /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/dep/jszip.min.js +0 -0
  274. /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/main.js +0 -0
  275. /package/framework/{v0.6.2 → v0.6.3}/lib/async/package.json +0 -0
  276. /package/framework/{v0.6.2 → v0.6.3}/lib/async/src/main.js +0 -0
  277. /package/framework/{v0.6.2 → v0.6.3}/lib/audit/package.json +0 -0
  278. /package/framework/{v0.6.2 → v0.6.3}/lib/audit/src/main.js +0 -0
  279. /package/framework/{v0.6.2 → v0.6.3}/lib/audit-store.js +0 -0
  280. /package/framework/{v0.6.2 → v0.6.3}/lib/authn/package.json +0 -0
  281. /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/lockout.js +0 -0
  282. /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/main.js +0 -0
  283. /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/totp.js +0 -0
  284. /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/package.json +0 -0
  285. /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/src/main.js +0 -0
  286. /package/framework/{v0.6.2 → v0.6.3}/lib/cache/build.json +0 -0
  287. /package/framework/{v0.6.2 → v0.6.3}/lib/cache/package.json +0 -0
  288. /package/framework/{v0.6.2 → v0.6.3}/lib/cache/src/main.js +0 -0
  289. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/aliases.json +0 -0
  290. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/arguments.json +0 -0
  291. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/help.txt +0 -0
  292. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/add.js +0 -0
  293. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/arguments.json +0 -0
  294. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/build.js +0 -0
  295. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/copy.js +0 -0
  296. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/cp.js +0 -0
  297. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.js +0 -0
  298. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.txt +0 -0
  299. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  300. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/list.js +0 -0
  301. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/man.js +0 -0
  302. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp.js +0 -0
  303. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/oas.js +0 -0
  304. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/openapi.js +0 -0
  305. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/remove.js +0 -0
  306. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rename.js +0 -0
  307. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/restart.js +0 -0
  308. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rm.js +0 -0
  309. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/start.js +0 -0
  310. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/status.js +0 -0
  311. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/stop.js +0 -0
  312. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/types.js +0 -0
  313. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/arguments.json +0 -0
  314. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/clear.js +0 -0
  315. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/help.txt +0 -0
  316. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/stats.js +0 -0
  317. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/add.js +0 -0
  318. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/arguments.json +0 -0
  319. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.js +0 -0
  320. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/infer.js +0 -0
  321. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/list.js +0 -0
  322. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/migrate.js +0 -0
  323. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/models.js +0 -0
  324. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/remove.js +0 -0
  325. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/rm.js +0 -0
  326. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/test.js +0 -0
  327. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/arguments.json +0 -0
  328. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.js +0 -0
  329. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.txt +0 -0
  330. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/man.js +0 -0
  331. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/ps.js +0 -0
  332. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/stop.js +0 -0
  333. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/add.js +0 -0
  334. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/arguments.json +0 -0
  335. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/help.txt +0 -0
  336. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/args.js +0 -0
  337. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/namespace.js +0 -0
  338. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  339. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-scan.js +0 -0
  340. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/scaffold.js +0 -0
  341. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/remove.js +0 -0
  342. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rename.js +0 -0
  343. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rm.js +0 -0
  344. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/add.js +0 -0
  345. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/get.js +0 -0
  346. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.js +0 -0
  347. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.txt +0 -0
  348. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/link-dev.js +0 -0
  349. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/list.js +0 -0
  350. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/remove.js +0 -0
  351. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/rm.js +0 -0
  352. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/set.js +0 -0
  353. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/unset.js +0 -0
  354. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/use.js +0 -0
  355. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/add.js +0 -0
  356. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/arguments.json +0 -0
  357. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/build.js +0 -0
  358. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/dot.js +0 -0
  359. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/get.js +0 -0
  360. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.js +0 -0
  361. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.txt +0 -0
  362. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link-node-modules.js +0 -0
  363. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link.js +0 -0
  364. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/list.js +0 -0
  365. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/man.js +0 -0
  366. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/msg.json +0 -0
  367. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/open.js +0 -0
  368. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/remove.js +0 -0
  369. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/reset.js +0 -0
  370. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/restart.js +0 -0
  371. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/set.js +0 -0
  372. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/start.js +0 -0
  373. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/status.js +0 -0
  374. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/stop.js +0 -0
  375. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/tail.js +0 -0
  376. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/update.js +0 -0
  377. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/version.js +0 -0
  378. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-dev.1.md +0 -0
  379. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-framework.1.md +0 -0
  380. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina.1.md +0 -0
  381. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/helper.js +0 -0
  382. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/add.js +0 -0
  383. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/arguments.json +0 -0
  384. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/export.js +0 -0
  385. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.js +0 -0
  386. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.txt +0 -0
  387. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/import.js +0 -0
  388. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/scan.js +0 -0
  389. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/_host.js +0 -0
  390. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/arguments.json +0 -0
  391. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/build.js +0 -0
  392. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.js +0 -0
  393. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.txt +0 -0
  394. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/list.js +0 -0
  395. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/man.js +0 -0
  396. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/rm.js +0 -0
  397. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/run.js +0 -0
  398. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/index.js +0 -0
  399. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.js +0 -0
  400. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.txt +0 -0
  401. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/open.js +0 -0
  402. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/man-render.js +0 -0
  403. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/arguments.json +0 -0
  404. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.js +0 -0
  405. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.txt +0 -0
  406. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/kill.js +0 -0
  407. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/list.js +0 -0
  408. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/msg.json +0 -0
  409. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.js +0 -0
  410. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.txt +0 -0
  411. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/inc/scan.js +0 -0
  412. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/list.js +0 -0
  413. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/reset.js +0 -0
  414. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/set.js +0 -0
  415. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/add.js +0 -0
  416. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/arguments.json +0 -0
  417. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/backup.js +0 -0
  418. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/build.js +0 -0
  419. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.js +0 -0
  420. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.txt +0 -0
  421. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/import.js +0 -0
  422. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/list.js +0 -0
  423. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/man.js +0 -0
  424. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/move.js +0 -0
  425. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/remove.js +0 -0
  426. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rename.js +0 -0
  427. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restart.js +0 -0
  428. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restore.js +0 -0
  429. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rm.js +0 -0
  430. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/start.js +0 -0
  431. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/status.js +0 -0
  432. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/stop.js +0 -0
  433. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/arguments.json +0 -0
  434. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.js +0 -0
  435. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.txt +0 -0
  436. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/list.js +0 -0
  437. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/remove.js +0 -0
  438. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/set.js +0 -0
  439. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/add.js +0 -0
  440. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.js +0 -0
  441. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.txt +0 -0
  442. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-local.js +0 -0
  443. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-production.js +0 -0
  444. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/list.js +0 -0
  445. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/remove.js +0 -0
  446. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/rm.js +0 -0
  447. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/use.js +0 -0
  448. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/arguments.json +0 -0
  449. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/check.js +0 -0
  450. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.js +0 -0
  451. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.txt +0 -0
  452. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/scan.js +0 -0
  453. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.js +0 -0
  454. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.txt +0 -0
  455. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/list.js +0 -0
  456. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/man.js +0 -0
  457. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/start.js +0 -0
  458. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/view/add.js +0 -0
  459. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/package.json +0 -0
  460. /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/src/main.js +0 -0
  461. /package/framework/{v0.6.2 → v0.6.3}/lib/collection/README.md +0 -0
  462. /package/framework/{v0.6.2 → v0.6.3}/lib/collection/build.json +0 -0
  463. /package/framework/{v0.6.2 → v0.6.3}/lib/collection/package.json +0 -0
  464. /package/framework/{v0.6.2 → v0.6.3}/lib/collection/src/main.js +0 -0
  465. /package/framework/{v0.6.2 → v0.6.3}/lib/config.js +0 -0
  466. /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/package.json +0 -0
  467. /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/src/main.js +0 -0
  468. /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/package.json +0 -0
  469. /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/src/main.js +0 -0
  470. /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/package.json +0 -0
  471. /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/src/main.js +0 -0
  472. /package/framework/{v0.6.2 → v0.6.3}/lib/cron/README.md +0 -0
  473. /package/framework/{v0.6.2 → v0.6.3}/lib/cron/package.json +0 -0
  474. /package/framework/{v0.6.2 → v0.6.3}/lib/cron/src/main.js +0 -0
  475. /package/framework/{v0.6.2 → v0.6.3}/lib/domain/LICENSE +0 -0
  476. /package/framework/{v0.6.2 → v0.6.3}/lib/domain/README.md +0 -0
  477. /package/framework/{v0.6.2 → v0.6.3}/lib/domain/package.json +0 -0
  478. /package/framework/{v0.6.2 → v0.6.3}/lib/domain/src/main.js +0 -0
  479. /package/framework/{v0.6.2 → v0.6.3}/lib/dto/package.json +0 -0
  480. /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/package.json +0 -0
  481. /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/src/main.js +0 -0
  482. /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/package.json +0 -0
  483. /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/src/main.js +0 -0
  484. /package/framework/{v0.6.2 → v0.6.3}/lib/generator/index.js +0 -0
  485. /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/package.json +0 -0
  486. /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/src/main.js +0 -0
  487. /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/package.json +0 -0
  488. /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/src/main.js +0 -0
  489. /package/framework/{v0.6.2 → v0.6.3}/lib/index.js +0 -0
  490. /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/LICENSE +0 -0
  491. /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/README.md +0 -0
  492. /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/package.json +0 -0
  493. /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/src/main.js +0 -0
  494. /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/package.json +0 -0
  495. /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/src/main.js +0 -0
  496. /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/package.json +0 -0
  497. /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/src/main.js +0 -0
  498. /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/package.json +0 -0
  499. /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/src/main.js +0 -0
  500. /package/framework/{v0.6.2 → v0.6.3}/lib/job/package.json +0 -0
  501. /package/framework/{v0.6.2 → v0.6.3}/lib/job/src/main.js +0 -0
  502. /package/framework/{v0.6.2 → v0.6.3}/lib/job-store.js +0 -0
  503. /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/package.json +0 -0
  504. /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/src/main.js +0 -0
  505. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/README.md +0 -0
  506. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/package.json +0 -0
  507. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/default/index.js +0 -0
  508. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  509. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  510. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/index.js +0 -0
  511. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/listener.js +0 -0
  512. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/helper.js +0 -0
  513. /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/main.js +0 -0
  514. /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/package.json +0 -0
  515. /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/src/main.js +0 -0
  516. /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/package.json +0 -0
  517. /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/src/main.js +0 -0
  518. /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/package.json +0 -0
  519. /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/src/main.js +0 -0
  520. /package/framework/{v0.6.2 → v0.6.3}/lib/merge/README.md +0 -0
  521. /package/framework/{v0.6.2 → v0.6.3}/lib/merge/package.json +0 -0
  522. /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/package.json +0 -0
  523. /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/src/main.js +0 -0
  524. /package/framework/{v0.6.2 → v0.6.3}/lib/model.js +0 -0
  525. /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/package.json +0 -0
  526. /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/src/main.js +0 -0
  527. /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/README.md +0 -0
  528. /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/package.json +0 -0
  529. /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/src/main.js +0 -0
  530. /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/package.json +0 -0
  531. /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/src/main.js +0 -0
  532. /package/framework/{v0.6.2 → v0.6.3}/lib/proc.js +0 -0
  533. /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/package.json +0 -0
  534. /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/src/main.js +0 -0
  535. /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/package.json +0 -0
  536. /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache-store.js +0 -0
  537. /package/framework/{v0.6.2 → v0.6.3}/lib/routing/README.md +0 -0
  538. /package/framework/{v0.6.2 → v0.6.3}/lib/routing/build.json +0 -0
  539. /package/framework/{v0.6.2 → v0.6.3}/lib/routing/package.json +0 -0
  540. /package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/radix.js +0 -0
  541. /package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/package.json +0 -0
  542. /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/package.json +0 -0
  543. /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/src/main.js +0 -0
  544. /package/framework/{v0.6.2 → v0.6.3}/lib/session-store.js +0 -0
  545. /package/framework/{v0.6.2 → v0.6.3}/lib/shell.js +0 -0
  546. /package/framework/{v0.6.2 → v0.6.3}/lib/sqlite-driver.js +0 -0
  547. /package/framework/{v0.6.2 → v0.6.3}/lib/state.js +0 -0
  548. /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/README.md +0 -0
  549. /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/package.json +0 -0
  550. /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/src/main.js +0 -0
  551. /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/package.json +0 -0
  552. /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/src/main.js +0 -0
  553. /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/package.json +0 -0
  554. /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/http.js +0 -0
  555. /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/memory.js +0 -0
  556. /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/main.js +0 -0
  557. /package/framework/{v0.6.2 → v0.6.3}/lib/url/README.md +0 -0
  558. /package/framework/{v0.6.2 → v0.6.3}/lib/url/index.js +0 -0
  559. /package/framework/{v0.6.2 → v0.6.3}/lib/url/routing.json +0 -0
  560. /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/package.json +0 -0
  561. /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/src/main.js +0 -0
  562. /package/framework/{v0.6.2 → v0.6.3}/lib/validator.js +0 -0
  563. /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/package.json +0 -0
  564. /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/src/main.js +0 -0
  565. /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/package.json +0 -0
  566. /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/src/main.js +0 -0
  567. /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/package.json +0 -0
  568. /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/src/main.js +0 -0
  569. /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/package.json +0 -0
  570. /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/src/main.js +0 -0
@@ -300,7 +300,7 @@
300
300
  comments are lost on rewrite.
301
301
 
302
302
  Driver resolution uses the framework's built-in driver range table
303
- (see `lib/cmd/connector/add.js` DRIVER_MAP):
303
+ (see `lib/connector-registry/src/main.js` DRIVER_MAP):
304
304
 
305
305
  couchbase → couchbase >= 3.0.0
306
306
  redis → ioredis >= 5.0.0
@@ -1155,7 +1155,19 @@ function Initialize(opt) {
1155
1155
  // ps-independent (works on minimal images without procps, and under
1156
1156
  // Bun) and parses/trims the pid so a trailing newline can't break the
1157
1157
  // check. Mirrors lib/cmd/framework/reset.js detectRunning.
1158
- let pid = parseInt(String(fs.readFileSync(filename)).trim(), 10);
1158
+ let pid = null;
1159
+ try {
1160
+ pid = parseInt(String(fs.readFileSync(filename)).trim(), 10);
1161
+ } catch (readErr) {
1162
+ // An unreadable run dir entry must never abort the whole init
1163
+ // chain: a nested directory throws EISDIR, an entry removed by a
1164
+ // concurrent prune throws ENOENT, an unreadable one EACCES. Skip
1165
+ // it instead of throwing out of the loop — and deliberately do NOT
1166
+ // prune it, since the rmSync branches below are only safe for
1167
+ // entries whose content was actually read.
1168
+ console.debug('Skipping unreadable run dir entry `'+ filename +'` ['+ ( readErr && readErr.code || readErr ) +']');
1169
+ continue;
1170
+ }
1159
1171
  if (!pid || isNaN(pid)) {
1160
1172
  filenameObj.rmSync();
1161
1173
  continue;
@@ -52,14 +52,18 @@
52
52
  * The runtime pipe still enforces TYPE (isInteger/isNumber) + enum + length + format
53
53
  * + required.
54
54
  *
55
- * ## The `$` guard (#DTO2 — measured)
55
+ * ## The `$` guard (#DTO2 — measured; rationale updated with #B239)
56
56
  * `toRules()` compiles no `$` of its own (see above), but a `$` can still reach the
57
57
  * emitted rules through AUTHORED content — an enum value (`dto.enum(['$100'])`), a
58
- * field NAME, or a date mask. The engine stringifies the whole rules object and, on
59
- * ANY `$` in it, takes a client-only branch that dereferences the null server-side
60
- * `$fields` (`validate()` -> `$fields.count()`), throwing a raw TypeError from ABOVE
61
- * its own try/catch. So `toRules()` REJECTS a `$` anywhere in its output rather than
62
- * hand the engine a rules object that cannot be evaluated server-side.
58
+ * field NAME, or a date mask. `$` is the validation engine's RESERVED cross-field
59
+ * reference sigil, so whether an authored `$` survives as a literal depends on a
60
+ * runtime field-name COLLISION: a token naming a sibling field is consumed upstream
61
+ * as a reference (substituted + quoted — #B240 — so the literal can never match),
62
+ * while a token naming no field stays literal only since #B239 (before that it
63
+ * crashed the whole pass; earlier still, ANY leftover `$` crashed server-side —
64
+ * #B127/#B234). Deterministic literal semantics are impossible to guarantee for a
65
+ * `$`, so `toRules()` REJECTS one anywhere in its output at build/boot rather than
66
+ * let a DTO validate differently depending on which field names exist beside it.
63
67
  * `toJsonSchema()` is deliberately NOT guarded — a `$` is perfectly valid in a JSON
64
68
  * Schema enum, so a currency-style DTO still documents (and still serves as a
65
69
  * `param.responseDto`); only the runtime-validation projection is constrained.
@@ -426,7 +430,8 @@ DtoObject.prototype.toJsonSchema = function (dialect, opts) {
426
430
  * rather than emit a `$` (see the `$` guard in the module header).
427
431
  *
428
432
  * @throws {Error} when an authored enum value / field name / date mask puts a `$` in
429
- * the emitted rules — server-fatal in the validator engine.
433
+ * the emitted rules — the engine would reinterpret it
434
+ * collision-dependently (reserved sigil; see the module header).
430
435
  * @returns {object}
431
436
  */
432
437
  DtoObject.prototype.toRules = function () {
@@ -434,10 +439,12 @@ DtoObject.prototype.toRules = function () {
434
439
  for (var f in this._shape) {
435
440
  rules[f] = this._shape[f].toFieldRules();
436
441
  }
437
- // #DTO2 — a `$` ANYWHERE in the stringified rules sends the engine down its
438
- // client-only dynamic-rules branch, which derefs the null server-side `$fields`
439
- // and throws from above its own try/catch. Fail at build/boot with a message that
440
- // names the culprit, never at request time with a raw TypeError.
442
+ // #DTO2 — `$` is the engine's reserved cross-field sigil: whether an authored
443
+ // `$` stays literal depends on a runtime field-name collision (a colliding
444
+ // token is substituted + quoted upstream — #B240 — so the literal can never
445
+ // match; a non-colliding one stays literal only since #B239). Fail at
446
+ // build/boot with a message that names the culprit, never validate
447
+ // collision-dependently at request time.
441
448
  if ( /\$/.test(JSON.stringify(rules)) ) {
442
449
  // NOTE: every `$` below is followed by a SPACE, deliberately. A message carrying
443
450
  // the sequence `$` + backtick/quote/digit is a String.replace() dollar-pattern
@@ -31,6 +31,19 @@ function FileContainer(opt, loggers) {
31
31
  var processProperties = null;
32
32
  var filenames = {};
33
33
 
34
+ /**
35
+ * Resolves the framework's connection settings for the file container.
36
+ *
37
+ * Runs before the framework globals are guaranteed to exist (see the
38
+ * "hack for early calls" block below), so every global read is guarded.
39
+ *
40
+ * @inner
41
+ * @param {object} opt - Logger options; mqPort/hostV4/bindHost are filled in here.
42
+ * @returns {void}
43
+ *
44
+ * @example
45
+ * init({ });
46
+ */
34
47
  function init(opt) {
35
48
 
36
49
  // ---------- BO - hack for early calls
@@ -52,7 +65,22 @@ function FileContainer(opt, loggers) {
52
65
 
53
66
  var settings = { mq_port: 8125, host_v4: '127.0.0.1' };
54
67
  try {
55
- settings = require( getUserHome() + '/.gina/' + shortVersion + '/settings.json');
68
+ // #B160-sibling (3) — honour GINA_HOMEDIR so an isolated home resolves
69
+ // its OWN settings instead of the invoking user's. The variable already
70
+ // carries the `/.gina` segment (bin/cli, bin/gina-init both compose it
71
+ // as `home + '/.gina'`), so it replaces that whole prefix, not just the
72
+ // home.
73
+ // Three tiers, and process.env is load-bearing rather than defensive:
74
+ // this container is constructed BEFORE bin/cli imports the OS env into
75
+ // process.gina (measured: process.gina is empty here, while
76
+ // process.env.GINA_HOMEDIR still holds the value), so the framework-env
77
+ // tier alone would never fire on the CLI path. Framework env still wins
78
+ // where it is populated (bundle processes, gina-container), matching the
79
+ // two-tier read used by the secrets backend and resolveHttpHost.
80
+ var _ginaHome = (typeof getEnvVar === 'function' && getEnvVar('GINA_HOMEDIR'))
81
+ || process.env.GINA_HOMEDIR
82
+ || (getUserHome() + '/.gina');
83
+ settings = require( _ginaHome + '/' + shortVersion + '/settings.json');
56
84
  } catch (err) {}
57
85
 
58
86
  opt.mqPort = settings.mq_port;
@@ -15,6 +15,20 @@ function MQSpeaker(opt, loggers, cb) {
15
15
 
16
16
 
17
17
 
18
+ /**
19
+ * Resolves the framework's connection settings, then starts the speaker.
20
+ *
21
+ * Runs before the framework globals are guaranteed to exist (see the
22
+ * "hack for early calls" block below), so every global read is guarded.
23
+ *
24
+ * @inner
25
+ * @param {object} opt - Logger options; mqPort/hostV4/bindHost are filled in here.
26
+ * @param {function} cb - Passed through to startMQSpeaker.
27
+ * @returns {*} Whatever startMQSpeaker() returns.
28
+ *
29
+ * @example
30
+ * init({ }, function(err, speaker) { });
31
+ */
18
32
  function init(opt, cb) {
19
33
 
20
34
  // ---------- BO - hack for early calls
@@ -36,7 +50,22 @@ function MQSpeaker(opt, loggers, cb) {
36
50
 
37
51
  var settings = { mq_port: 8125, host_v4: '127.0.0.1' };
38
52
  try {
39
- settings = require( getUserHome() + '/.gina/' + shortVersion + '/settings.json');
53
+ // #B160-sibling (3) — honour GINA_HOMEDIR so an isolated home resolves
54
+ // its OWN settings instead of the invoking user's. The variable already
55
+ // carries the `/.gina` segment (bin/cli, bin/gina-init both compose it
56
+ // as `home + '/.gina'`), so it replaces that whole prefix, not just the
57
+ // home.
58
+ // Three tiers, and process.env is load-bearing rather than defensive:
59
+ // this container is constructed BEFORE bin/cli imports the OS env into
60
+ // process.gina (measured: process.gina is empty here, while
61
+ // process.env.GINA_HOMEDIR still holds the value), so the framework-env
62
+ // tier alone would never fire on the CLI path. Framework env still wins
63
+ // where it is populated (bundle processes, gina-container), matching the
64
+ // two-tier read used by the secrets backend and resolveHttpHost.
65
+ var _ginaHome = (typeof getEnvVar === 'function' && getEnvVar('GINA_HOMEDIR'))
66
+ || process.env.GINA_HOMEDIR
67
+ || (getUserHome() + '/.gina');
68
+ settings = require( _ginaHome + '/' + shortVersion + '/settings.json');
40
69
  } catch (err) {}
41
70
 
42
71
  // Guard: settings.mq_port may be an unresolved template placeholder (e.g. '${}'
@@ -194,10 +194,24 @@ function MathHelper() {
194
194
  }
195
195
  }
196
196
 
197
+ /**
198
+ * Serialize an object or array into a stable string for checksumming.
199
+ *
200
+ * Plain objects become sorted `key:value` pairs joined with `,` (function
201
+ * properties skipped); arrays become the JSON of a sorted copy. Both forms
202
+ * are member-order-insensitive, and the input is never mutated.
203
+ *
204
+ * @private
205
+ * @param {object|array} obj
206
+ * @returns {string} serialized form
207
+ * */
197
208
  var objectToString = function(obj) {
198
209
  var str = '';
199
210
  if (Array.isArray(obj)) {
200
- obj = JSON.stringify(obj.sort(), null, 0);
211
+ // #B208 — serialize a sorted COPY into `str`: the previous assignment
212
+ // targeted `obj` and returned the still-empty `str`, collapsing every
213
+ // array input to the checksum of '' — and `sort()` mutated the caller's array.
214
+ str = JSON.stringify(obj.slice().sort(), null, 0);
201
215
  } else {
202
216
  var arr = [], i = 0;
203
217
  for (let k in obj) {
@@ -213,13 +227,29 @@ function MathHelper() {
213
227
  };
214
228
 
215
229
  /**
216
- * Check sum from file or form data
230
+ * Check sum from a file or from form data.
217
231
  *
218
- * @param {string|ojbect|array} filename|data
219
- * @param {string} algorithm
220
- * @param {string} encoding
232
+ * Dispatch: an object or array input is serialized first (a plain object as
233
+ * sorted `key:value` pairs joined with `,` — see `objectToString`). A string
234
+ * ending in an extension shape — a dot followed by 1-10 alphanumerics
235
+ * (`.txt`, `.js`, `.json`, `.TXT`, `.c`, ...) — is then PROBED as a
236
+ * filename: the file branch is taken only when the WHOLE string resolves to
237
+ * an existing regular file — anything else (no such entry, name too long, a
238
+ * directory, a NUL-carrying string) is hashed as data. Note the probe needs
239
+ * an extension-shaped tail: an extension-less path (`Makefile`, `LICENSE`)
240
+ * is hashed as a data string, never read from disk. (#B207/#B210)
241
+ *
242
+ * @param {string|object|array} filename|data - path to an existing file, or raw data
243
+ * @param {string} [algorithm] - e.g.: sha1 (defaults to md5)
244
+ * @param {string} [encoding] - e.g.: hex (default)
221
245
  *
222
246
  * @returns {string} checksum
247
+ * @throws {Error} on an unreadable existing file (e.g. EACCES) or a digest failure
248
+ *
249
+ * @example
250
+ * var math = require('gina').lib.math;
251
+ * math.checkSumSync({ contact: 'user@example.com' }, 'sha1'); // hash of `contact:user@example.com`
252
+ * math.checkSumSync('/tmp/manifest.txt', 'sha1'); // hash of the file bytes
223
253
  * */
224
254
  self.checkSumSync = function(filename, algorithm, encoding) {
225
255
  var sum = null;
@@ -229,7 +259,28 @@ function MathHelper() {
229
259
  filename = objectToString(filename);
230
260
  }
231
261
 
232
- if ( /(\.[a-z]{3})$/.test(filename) ) { // must be a string
262
+ // #B207 — an extension-shaped tail is only a HINT that the input is a
263
+ // filename: serialized data ends the same way (`user@example.com`,
264
+ // `report.pdf`). Only take the file branch when the path resolves to an
265
+ // actual file; data that merely looks like a name falls through.
266
+ var isFile = false;
267
+ // #B210 — any real extension shape (dot + 1-10 alphanumerics), not just
268
+ // dot+3-lowercase: file.js / file.json / FILE.TXT used to be hashed as
269
+ // PATH STRINGS because the narrow probe never fired for them.
270
+ if ( /(\.[A-Za-z0-9]{1,10})$/.test(filename) ) { // must be a string
271
+ try {
272
+ isFile = fs.statSync(filename).isFile();
273
+ } catch (statErr) {
274
+ // ENOENT / ENAMETOOLONG / ENOTDIR / ERR_INVALID_ARG_VALUE: the
275
+ // input cannot name an existing file — treat it as data. Anything
276
+ // else (e.g. EACCES on a real entry) must keep failing loudly.
277
+ if ( !/^(ENOENT|ENAMETOOLONG|ENOTDIR|ERR_INVALID_ARG_VALUE)$/.test(statErr.code) ) {
278
+ throw statErr;
279
+ }
280
+ }
281
+ }
282
+
283
+ if (isFile) {
233
284
  // from filename
234
285
  sum = checkSum( fs.readFileSync(filename), algorithm, encoding )
235
286
  } else {
@@ -48,6 +48,7 @@ function Merge() {
48
48
  * merge({ a: 1 }, { a: 9 }, true) // { a: 9 }
49
49
  * merge([1, 2], [3, 4]) // [1, 2, 3, 4]
50
50
  * merge([1, 2], [3, 4], true) // [3, 4]
51
+ * merge({ a: [null, 'x'] }, { a: [null, 'x'] }) // { a: [null, 'x'] } — null elements are preserved (#B226)
51
52
  */
52
53
  var browse = function (_target, _source) {
53
54
 
@@ -252,8 +253,25 @@ function Merge() {
252
253
  return target;
253
254
  };
254
255
 
255
- // Will not merge functions items: this is normal
256
- // Merging arrays is OK, but merging collections is still experimental
256
+ /**
257
+ * Merge two arrays. Will not merge function items: this is normal.
258
+ * Merging plain arrays is OK, merging collections is still experimental.
259
+ *
260
+ * `null` elements are VALUES and are preserved (#B226): `typeof null ==
261
+ * 'object'`, so the object-exclusion guards below each carry an explicit
262
+ * null exception — without it a no-override merge silently dropped `null`
263
+ * from arrays (while `''` / `false` / `0` survived), which stripped the
264
+ * first slot of positional argument arrays such as the documented
265
+ * validator rule `"setFlash": [null, "message"]` on the client-side
266
+ * rules path.
267
+ *
268
+ * @inner
269
+ * @private
270
+ * @param {Array} options - Source array (merged INTO target)
271
+ * @param {Array} target - Target array (wins on conflicts unless `override`)
272
+ * @param {boolean} override - `true` lets `options` win / replace
273
+ * @returns {Array|undefined} the merged array
274
+ */
257
275
  var mergeArray = function(options, target, override) {
258
276
  newTarget = [];
259
277
 
@@ -358,7 +376,12 @@ function Merge() {
358
376
  // ok, but don't merge objects
359
377
  a = 0;
360
378
  for (; a < target.length; ++a ) {
361
- if ( typeof(target[a]) != 'object' && newTarget.indexOf(target[a]) == -1 ) {
379
+ // #B226 — typeof null == 'object': a null element is a value
380
+ // (e.g. the first slot of a positional rule-argument array),
381
+ // not a collection item to exclude; this rebuild dropped it
382
+ // while '' / false / 0 survived
383
+ // was: if ( typeof(target[a]) != 'object' && newTarget.indexOf(target[a]) == -1 ) {
384
+ if ( ( typeof(target[a]) != 'object' || target[a] === null ) && newTarget.indexOf(target[a]) == -1 ) {
362
385
  newTarget.push(target[a]);
363
386
  }
364
387
  }
@@ -443,7 +466,11 @@ function Merge() {
443
466
  localKeyComparison = ownPropertyNames;
444
467
  if ( target.indexOf(options[a]) > -1 && override) {
445
468
  target.splice(target.indexOf(options[a]), 1, options[a])
446
- } else if ( typeof(newTarget[a]) == 'undefined' && typeof(options[a]) == 'object' ) {
469
+ // #B226 — a null source element must not enter the index-merge:
470
+ // `for (var k in null)` is a no-op, so null used to surface as
471
+ // `{}` here; let it fall through to the primitive push below
472
+ // was: } else if ( typeof(newTarget[a]) == 'undefined' && typeof(options[a]) == 'object' ) {
473
+ } else if ( typeof(newTarget[a]) == 'undefined' && typeof(options[a]) == 'object' && options[a] != null ) {
447
474
  // merge using index
448
475
  newTarget = target;
449
476
 
@@ -488,7 +515,9 @@ function Merge() {
488
515
  newTarget[a] = target[a]
489
516
  }
490
517
  // array with string key
491
- else if (newTarget.indexOf(options[a]) == -1 && typeof(options[a]) != 'object') {
518
+ // #B226 — same typeof-null exception as the rebuild above
519
+ // was: else if (newTarget.indexOf(options[a]) == -1 && typeof(options[a]) != 'object') {
520
+ else if (newTarget.indexOf(options[a]) == -1 && ( typeof(options[a]) != 'object' || options[a] === null )) {
492
521
  newTarget.push(options[a]);
493
522
  }
494
523
  // collection without keyComparison
@@ -171,6 +171,14 @@ var _l2ErrorWarned = false;
171
171
  // a typo that silently disabled caching (#B114) — validateConfig names it loudly.
172
172
  var _RC_STRATEGIES = /^(memory|fs|redis)$/i;
173
173
 
174
+ // #B238 — accepted `server.cache.name` grammar (the RFC 9211 Cache-Status
175
+ // identifier): a conservative RFC 8941 Token subset — a letter, then up to 63
176
+ // of [A-Za-z0-9._-]. Same charset as resolveReleaseToken's sanitizer, but this
177
+ // one VALIDATES rather than sanitizes: an identifier the operator did not
178
+ // write must never reach the wire, so an invalid value falls back to the
179
+ // default and validateConfig names it at boot.
180
+ var _RC_NAME_RE = /^[A-Za-z][A-Za-z0-9._-]{0,63}$/;
181
+
174
182
  /**
175
183
  * Once-per-process L2 failure warn. Fail-open must stay silent per-operation
176
184
  * (no log spam during an outage — the store's client `error` listener already
@@ -913,22 +921,36 @@ function RenderCache(options) {
913
921
  * - an unknown `cache.type` (bundle-wide or per-route) — the fold made the config
914
922
  * non-silent; this names the typo (#B114);
915
923
  * - a redis route with no effective ttl but WITH `invalidateOnEvents` — the legit
916
- * invalidate-only pattern, still orphaned on a namespace rotation.
924
+ * invalidate-only pattern, still orphaned on a namespace rotation;
925
+ * - an invalid `server.cache.name` (#B238) — ignored, the Cache-Status identifier
926
+ * stays `gina-cache` (see {@link RenderCache.resolveCacheName});
927
+ * - `context.hidePoweredBy` + `context.cacheEnabled` with no validly-set name
928
+ * (#B238) — the operator declared hide-the-stack intent but every cache-enabled
929
+ * GET still names the framework in Cache-Status. Warn-not-flip is deliberate:
930
+ * the identifier is a documented-stable wire value (0.5.18 promised
931
+ * `gina-cache; hit` grep-stability), so it never changes without an explicit
932
+ * operator choice — the warn hands them both one-line exits.
917
933
  *
918
934
  * @memberof RenderCache
919
935
  * @static
920
- * @param {object} serverCache - Merged `server.cache` (type/store/ttl/sliding/maxAge/…).
936
+ * @param {object} serverCache - Merged `server.cache` (type/store/ttl/sliding/maxAge/name/…).
921
937
  * @param {object} routing - The bundle routing map (`{ ruleName: { cache, bundle, … } }`).
922
938
  * @param {string} [bundle] - When set, per-route checks skip routes of another bundle.
939
+ * @param {object} [context] - Caller-supplied boot context for the #B238 disclosure
940
+ * warn: `{ hidePoweredBy: boolean, cacheEnabled: boolean }`
941
+ * (both must be `true` for it to fire). Omitting the
942
+ * argument disables only that warn — every other check
943
+ * is unchanged (back-compat with pre-#B238 callers).
923
944
  * @returns {{ fatal: (string|null), warnings: string[], redisConfigured: boolean }}
924
945
  *
925
946
  * @example
926
- * var v = RenderCache.validateConfig(serverCache, gna.getConfig('routing'), bundle);
947
+ * var v = RenderCache.validateConfig(serverCache, gna.getConfig('routing'), bundle,
948
+ * { hidePoweredBy: hpb, cacheEnabled: enabled });
927
949
  * v.warnings.forEach(function (w) { console.warn('[render-cache] ' + w); });
928
950
  * if (v.fatal) { console.emerg('[render-cache] ' + v.fatal); process.exit(1); }
929
951
  * if (v.redisConfigured) { process.gina._renderCacheStore = lib.RenderCacheStore(serverCache.store); }
930
952
  */
931
- RenderCache.validateConfig = function(serverCache, routing, bundle) {
953
+ RenderCache.validateConfig = function(serverCache, routing, bundle, context) {
932
954
  var out = { fatal: null, warnings: [], redisConfigured: false };
933
955
  serverCache = serverCache || {};
934
956
  routing = routing || {};
@@ -938,6 +960,20 @@ RenderCache.validateConfig = function(serverCache, routing, bundle) {
938
960
  out.warnings.push('unknown server.cache.type `' + bundleType + '` (expected memory|fs|redis) — this bundle-wide default is ignored; routes inheriting it are NOT cached');
939
961
  }
940
962
 
963
+ // #B238 — `server.cache.name` (the Cache-Status identifier) sanity + disclosure.
964
+ var _declaredName = serverCache.name;
965
+ var _nameIsSet = ( typeof(_declaredName) === 'string' && _RC_NAME_RE.test(_declaredName) );
966
+ if ( typeof(_declaredName) !== 'undefined' && !_nameIsSet ) {
967
+ out.warnings.push('invalid server.cache.name `' + String(_declaredName) + '` — must be a letter followed by up to 63 of [A-Za-z0-9._-] (a conservative RFC 8941 token subset); ignored, the Cache-Status identifier stays `gina-cache`');
968
+ }
969
+ // Gated on the caller context: cacheEnabled (a disabled cache emits no
970
+ // Cache-Status — no disclosure, no noise) and hidePoweredBy (no declared
971
+ // intent, no nag). An explicit `"name": "gina-cache"` counts as validly
972
+ // set — the documented silence path for keeping the default wire.
973
+ if ( context && context.hidePoweredBy === true && context.cacheEnabled === true && !_nameIsSet ) {
974
+ out.warnings.push('server.hidePoweredBy is set but the Cache-Status identifier still names the framework (`gina-cache`) — set server.cache.name (any token, e.g. "cache") to close the disclosure, or explicitly "gina-cache" to keep the current wire and silence this warning');
975
+ }
976
+
941
977
  for (var name in routing) {
942
978
  var route = routing[name];
943
979
  if ( !route || typeof(route) !== 'object' ) { continue; } // skip $schema / annotations
@@ -990,6 +1026,43 @@ RenderCache.validateConfig = function(serverCache, routing, bundle) {
990
1026
  return out;
991
1027
  };
992
1028
 
1029
+ /**
1030
+ * #B238 — resolve the Cache-Status response-header identifier for a bundle (pure, static).
1031
+ *
1032
+ * RFC 9211 §2 leaves the cache identifier to the deployment (a free-form
1033
+ * structured-field Token). gina's default is `gina-cache`; an operator picks
1034
+ * their own via `server.cache.name` (the settings.json `cache` block — rides
1035
+ * the same #B114 fold as `type`/`store`, so an env.json `server.cache.name`
1036
+ * wins over it like every sibling key). An invalid value is IGNORED here
1037
+ * (default returned) and named loudly by {@link RenderCache.validateConfig}
1038
+ * at boot — never sanitized into a name the operator did not write.
1039
+ *
1040
+ * Accepted grammar is a deliberate STRICT SUBSET of the RFC 8941 Token
1041
+ * (a letter, then up to 63 of `[A-Za-z0-9._-]`) — every accepted value is a
1042
+ * valid sf-token, and the charset matches the release-namespace sanitizer
1043
+ * (`resolveReleaseToken`), keeping the two token surfaces aligned.
1044
+ *
1045
+ * Resolved ONCE at boot (server.js stamps `instance._cacheName` beside the
1046
+ * sibling cache scalars) and read by all three Cache-Status mint sites —
1047
+ * both engines, hit and miss — so the identifier can never disagree across
1048
+ * engines or outcomes.
1049
+ *
1050
+ * @memberof RenderCache
1051
+ * @static
1052
+ * @param {object} [serverCache] - Merged `server.cache` (the #B114 post-fold block).
1053
+ * @returns {string} The identifier to mint (`serverCache.name` when valid, else `'gina-cache'`).
1054
+ *
1055
+ * @example
1056
+ * RenderCache.resolveCacheName({ name: 'cache' }); // 'cache'
1057
+ * RenderCache.resolveCacheName({ name: 'bad name!' }); // 'gina-cache' (validateConfig warns at boot)
1058
+ * RenderCache.resolveCacheName({}); // 'gina-cache'
1059
+ * RenderCache.resolveCacheName(null); // 'gina-cache'
1060
+ */
1061
+ RenderCache.resolveCacheName = function(serverCache) {
1062
+ var name = ( serverCache ) ? serverCache.name : null;
1063
+ return ( typeof(name) === 'string' && _RC_NAME_RE.test(name) ) ? name : 'gina-cache';
1064
+ };
1065
+
993
1066
  /**
994
1067
  * #B130 — CSP-nonce re-stamp for served cache hits (pure, static).
995
1068
  *
@@ -230,6 +230,13 @@ function Routing() {
230
230
  if ( typeof(routeObject.queryTimeout) != 'undefined' ) {
231
231
  params.queryTimeout = parseTimeout(routeObject.queryTimeout);
232
232
  }
233
+ // #SPA1 — propagate the per-route content-negotiation capability to
234
+ // req.routing.negotiate (top-level, NOT req.routing.param.* — the #CSRF2
235
+ // trap). Assigned only when declared, so a routing.json that never mentions
236
+ // `negotiate` produces a byte-identical params object.
237
+ if ( typeof(routeObject.negotiate) != 'undefined' ) {
238
+ params.negotiate = routeObject.negotiate;
239
+ }
233
240
 
234
241
  // isRoute
235
242
  return self.compareUrls(params, routeObject.url, req);
@@ -1221,7 +1228,12 @@ function Routing() {
1221
1228
  route.toUrl = function (ignoreWebRoot) {
1222
1229
 
1223
1230
  var urlProps = null;
1224
- if ( /^redirect$/i.test(this.param.control) ) {
1231
+ // Slice 3 (#SPA1) — the client-served map ships the derived boolean
1232
+ // `isRedirect` instead of `param.control` (a dispatch key that stays
1233
+ // server-side); server-side routes still carry the full `param`, so
1234
+ // both forms are honoured. The `this.param &&` guard also keeps a
1235
+ // param-less route from throwing here.
1236
+ if ( this.isRedirect === true || /^redirect$/i.test(this.param && this.param.control) ) {
1225
1237
  urlProps = self.getUrlProps(this.bundle, (env||GINA_ENV));
1226
1238
  }
1227
1239
 
@@ -174,11 +174,63 @@ var requirementToPattern = function(raw) {
174
174
  return { type: 'pattern', value: cleaned };
175
175
  };
176
176
 
177
+ /**
178
+ * #B201 — annotates a numeric-type schema fragment with the rule's DIGIT bounds.
179
+ *
180
+ * `isInteger` / `isNumber` bounds constrain the LENGTH OF THE VALUE'S STRING
181
+ * FORM (a negative sign counts toward it), not the value's range — so they are
182
+ * deliberately NOT mapped to `minimum`/`maximum` (wrong for any negative:
183
+ * digit bounds [2,4] admit `[-999,-1] ∪ [10,9999]`, which no single range
184
+ * expresses) nor to `minLength`/`maxLength` (string-only assertions, inert on
185
+ * numeric types — a documented bound nothing enforces). Instead the fragment
186
+ * gains an honest human-readable `description` plus a namespaced
187
+ * machine-readable `x-gina-digitBounds` extension; both bundle:openapi and
188
+ * bundle:mcp copy fragment keys verbatim, so the annotations reach the
189
+ * generated schemas as-is.
190
+ *
191
+ * @inner
192
+ * @param {object} s - the fragment being built (mutated)
193
+ * @param {number|Array|boolean} v - the rule's declared value
194
+ * @returns {undefined}
195
+ */
196
+ var annotateDigitBounds = function(s, v) {
197
+ var min = null, max = null;
198
+ if ( typeof(v) === 'number' ) {
199
+ min = v; // scalar N supplies minLength only — same arity contract as isString
200
+ } else if ( Array.isArray(v) ) {
201
+ if ( typeof(v[0]) === 'number' ) min = v[0];
202
+ if ( typeof(v[1]) === 'number' ) max = v[1];
203
+ }
204
+ if ( min === null && max === null ) return; // bare `true` — nothing declared
205
+
206
+ var bounds = {};
207
+ var text = null;
208
+ if ( min !== null && max !== null ) {
209
+ text = (min === max) ? ('exactly ' + min + ' digits') : (min + '-' + max + ' digits');
210
+ } else if ( min !== null ) {
211
+ text = 'at least ' + min + ' digits';
212
+ } else {
213
+ text = 'at most ' + max + ' digits';
214
+ }
215
+ if ( min !== null ) bounds.min = min;
216
+ if ( max !== null ) bounds.max = max;
217
+
218
+ s.description = text + ' (string-form length; a negative sign counts)';
219
+ s['x-gina-digitBounds'] = bounds;
220
+ };
221
+
177
222
  /**
178
223
  * Maps a single-field form-validator rules-object to a JSON Schema fragment
179
224
  * (the inverse of the DTO builder's toRules, for the curated vocabulary). Pure
180
225
  * and inline — routing-introspect does not require lib.dto (its purity contract).
181
226
  *
227
+ * Length bounds (#B201): `isString` maps its scalar and array forms to real
228
+ * `minLength`/`maxLength` facets (`isString: 8` === `isString: [8]` — the
229
+ * scalar supplies a minimum, per the engine's arity contract). `isInteger` /
230
+ * `isNumber` digit bounds are annotated via {@link annotateDigitBounds}
231
+ * (description + `x-gina-digitBounds`) rather than mapped to value facets —
232
+ * see that function's JSDoc for why both facet mappings would be wrong.
233
+ *
182
234
  * @memberof module:gina/lib/routing-introspect
183
235
  * @param {object} rules - e.g. `{ isEmail: true, isString: [7] }`
184
236
  * @returns {object} a JSON Schema fragment (always includes `type`)
@@ -186,6 +238,12 @@ var requirementToPattern = function(raw) {
186
238
  * @example
187
239
  * rulesToSchemaFragment({ isEmail: true, isString: [7] });
188
240
  * // { type: 'string', format: 'email', minLength: 7 }
241
+ *
242
+ * @example
243
+ * rulesToSchemaFragment({ isInteger: [2, 4] });
244
+ * // { type: 'integer',
245
+ * // description: '2-4 digits (string-form length; a negative sign counts)',
246
+ * // 'x-gina-digitBounds': { min: 2, max: 4 } }
189
247
  */
190
248
  var rulesToSchemaFragment = function(rules) {
191
249
  var s = {};
@@ -201,10 +259,14 @@ var rulesToSchemaFragment = function(rules) {
201
259
  if ( Array.isArray(v) ) {
202
260
  if ( typeof(v[0]) === 'number' ) s.minLength = v[0];
203
261
  if ( typeof(v[1]) === 'number' ) s.maxLength = v[1];
262
+ } else if ( typeof(v) === 'number' ) {
263
+ // #B201 - the scalar form was silently dropped; the engine
264
+ // treats `isString: 8` as a minimum, identical to `[8]`.
265
+ s.minLength = v;
204
266
  }
205
267
  break;
206
- case 'isInteger': s.type = 'integer'; break;
207
- case 'isNumber': s.type = 'number'; break;
268
+ case 'isInteger': s.type = 'integer'; annotateDigitBounds(s, v); break;
269
+ case 'isNumber': s.type = 'number'; annotateDigitBounds(s, v); break;
208
270
  case 'isBoolean': s.type = 'boolean'; break;
209
271
  case 'isDate': s.type = 'string'; s.format = 'date'; break;
210
272
  case 'isInList': if ( Array.isArray(v) ) s.enum = v.slice(); break;