gina 0.6.11-alpha.2 → 0.6.11

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 (584) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +22 -18
  3. package/ROADMAP.md +3 -2
  4. package/framework/v0.6.11/VERSION +1 -0
  5. package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/js/gina.js +212 -9
  6. package/framework/v0.6.11/core/asset/plugin/dist/vendor/gina/js/gina.min.js +648 -0
  7. package/framework/v0.6.11/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  8. package/framework/v0.6.11/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  9. package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/model/entity.js +50 -14
  10. package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/validator/src/main.js +129 -4
  11. package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/collection/src/main.js +83 -5
  12. package/framework/{v0.6.11-alpha.2 → v0.6.11}/package.json +1 -1
  13. package/gna.js +4 -4
  14. package/llms.txt +15 -11
  15. package/package.json +3 -3
  16. package/script/perf/analyze-cpuprofile.js +132 -6
  17. package/script/perf/profile-baseline.js +184 -46
  18. package/script/perf/ws-codec-server.js +8 -5
  19. package/framework/v0.6.11-alpha.2/VERSION +0 -1
  20. package/framework/v0.6.11-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -647
  21. package/framework/v0.6.11-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  22. package/framework/v0.6.11-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  23. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/AUTHORS +0 -0
  24. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/LICENSE +0 -0
  25. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/html/nolayout.html +0 -0
  26. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/html/static.html +0 -0
  27. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/img/android-chrome-192x192.png +0 -0
  28. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/img/android-chrome-512x512.png +0 -0
  29. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/img/apple-touch-icon.png +0 -0
  30. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/img/favicon-16x16.png +0 -0
  31. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/img/favicon-32x32.png +0 -0
  32. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/img/favicon.ico +0 -0
  33. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/README.md +0 -0
  34. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  35. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  36. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  37. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  38. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  39. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  40. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  41. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  42. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  43. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  44. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  45. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  46. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  47. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  48. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  49. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  50. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  51. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/config.js +0 -0
  52. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/ai/index.js +0 -0
  53. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/ai/lib/connector.js +0 -0
  54. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/index.js +0 -0
  55. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/connector.js +0 -0
  56. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  57. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  58. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/n1ql.js +0 -0
  59. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/session-store.js +0 -0
  60. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  61. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  62. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/couchbase/lib/storage-store.js +0 -0
  63. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/duckdb/index.js +0 -0
  64. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/duckdb/lib/connector.js +0 -0
  65. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/mongodb/index.js +0 -0
  66. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/mongodb/lib/connector.js +0 -0
  67. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/mongodb/lib/job-store.js +0 -0
  68. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  69. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/mongodb/lib/session-store.js +0 -0
  70. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/mysql/index.js +0 -0
  71. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/mysql/lib/connector.js +0 -0
  72. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/param-redact.js +0 -0
  73. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/postgresql/index.js +0 -0
  74. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/postgresql/lib/connector.js +0 -0
  75. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/redis/index.js +0 -0
  76. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/redis/lib/connector.js +0 -0
  77. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/redis/lib/job-store.js +0 -0
  78. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/redis/lib/render-cache-store.js +0 -0
  79. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/redis/lib/session-store.js +0 -0
  80. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/scylladb/index.js +0 -0
  81. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/scylladb/lib/connector.js +0 -0
  82. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/scylladb/lib/session-store.js +0 -0
  83. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/sql-parser.js +0 -0
  84. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/sqlite/index.js +0 -0
  85. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/sqlite/lib/connector.js +0 -0
  86. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/sqlite/lib/job-store.js +0 -0
  87. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/connectors/sqlite/lib/session-store.js +0 -0
  88. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/content.encoding +0 -0
  89. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.framework.js +0 -0
  90. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.js +0 -0
  91. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.render-json.js +0 -0
  92. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.render-nunjucks-async.js +0 -0
  93. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.render-nunjucks.js +0 -0
  94. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.render-stream.js +0 -0
  95. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.render-swig-async.js +0 -0
  96. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.render-swig.js +0 -0
  97. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/controller.render-v1.js +0 -0
  98. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/index.js +0 -0
  99. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/inspector-window-emit.js +0 -0
  100. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/controller/release-banner.js +0 -0
  101. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/dev/index.js +0 -0
  102. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/dev/lib/class.js +0 -0
  103. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/dev/lib/factory.js +0 -0
  104. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/dev/lib/tools.js +0 -0
  105. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/gna.js +0 -0
  106. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/locales/README.md +0 -0
  107. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/locales/currency.json +0 -0
  108. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/locales/dist/language/en.json +0 -0
  109. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/locales/dist/language/fr.json +0 -0
  110. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/locales/dist/region/en.json +0 -0
  111. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/locales/dist/region/fr.json +0 -0
  112. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/locales/index.js +0 -0
  113. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/mime.types +0 -0
  114. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/model/index.js +0 -0
  115. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/model/template/entityFactory.js +0 -0
  116. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/model/template/index.js +0 -0
  117. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/README.md +0 -0
  118. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/index.js +0 -0
  119. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/csrf/README.md +0 -0
  120. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/csrf/package.json +0 -0
  121. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/csrf/src/main.js +0 -0
  122. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/README.md +0 -0
  123. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/coep/README.md +0 -0
  124. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/coep/package.json +0 -0
  125. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  126. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/coop/README.md +0 -0
  127. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/coop/package.json +0 -0
  128. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  129. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/corp/README.md +0 -0
  130. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/corp/package.json +0 -0
  131. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  132. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/csp/README.md +0 -0
  133. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/csp/package.json +0 -0
  134. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  135. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  136. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  137. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  138. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  139. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  140. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  141. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  142. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  143. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  144. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/package.json +0 -0
  145. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  146. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  147. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  148. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/src/main.js +0 -0
  149. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  150. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  151. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  152. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  153. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  154. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  155. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  156. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  157. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  158. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  159. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  160. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  161. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  162. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  163. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  164. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  165. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  166. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  167. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/session/README.md +0 -0
  168. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/session/package.json +0 -0
  169. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/session/src/main.js +0 -0
  170. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/storage/README.md +0 -0
  171. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/storage/build.json +0 -0
  172. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/storage/package.json +0 -0
  173. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/storage/src/main.js +0 -0
  174. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/validator/README.md +0 -0
  175. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/validator/build.json +0 -0
  176. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/validator/package.json +0 -0
  177. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/plugins/lib/validator/src/form-validator.js +0 -0
  178. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/router.js +0 -0
  179. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/server.express.js +0 -0
  180. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/server.isaac.js +0 -0
  181. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/server.js +0 -0
  182. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/status.codes +0 -0
  183. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/_gitignore +0 -0
  184. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/config/app.json +0 -0
  185. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  186. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/config/routing.json +0 -0
  187. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/config/settings.json +0 -0
  188. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  189. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/config/templates.json +0 -0
  190. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  191. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  192. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  193. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  194. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/index.js +0 -0
  195. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle/locales/en.json +0 -0
  196. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  197. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  198. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  199. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  200. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  201. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  202. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  203. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  204. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/readme.md +0 -0
  205. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_public/sw.js +0 -0
  206. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  207. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  208. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  209. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  210. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  211. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  212. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/command/gina.bat.tpl +0 -0
  213. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/command/gina.tpl +0 -0
  214. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/conf/env.json +0 -0
  215. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/conf/manifest.json +0 -0
  216. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/conf/package.json +0 -0
  217. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/conf/settings.json +0 -0
  218. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/conf/statics.json +0 -0
  219. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/conf/templates.json +0 -0
  220. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/error/client/json/401.json +0 -0
  221. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/error/client/json/403.json +0 -0
  222. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/error/client/json/404.json +0 -0
  223. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/error/server/html/50x.html +0 -0
  224. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/error/server/json/500.json +0 -0
  225. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/error/server/json/503.json +0 -0
  226. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/core/template/extensions/logger/config.json +0 -0
  227. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/console.js +0 -0
  228. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/context.js +0 -0
  229. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/data/LICENSE +0 -0
  230. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/data/README.md +0 -0
  231. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/data/package.json +0 -0
  232. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/data/src/main.js +0 -0
  233. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/dateFormat.js +0 -0
  234. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/index.js +0 -0
  235. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/json/LICENSE +0 -0
  236. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/json/README.md +0 -0
  237. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/json/package.json +0 -0
  238. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/json/src/main.js +0 -0
  239. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/path.js +0 -0
  240. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/plugins/README.md +0 -0
  241. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/plugins/package.json +0 -0
  242. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/plugins/src/api-error.js +0 -0
  243. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/plugins/src/main.js +0 -0
  244. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/prototypes.js +0 -0
  245. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/task.js +0 -0
  246. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/helpers/text.js +0 -0
  247. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/admin/package.json +0 -0
  248. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/admin/src/main.js +0 -0
  249. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/archiver/README.md +0 -0
  250. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/archiver/build.json +0 -0
  251. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/archiver/package.json +0 -0
  252. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/archiver/src/dep/jszip.min.js +0 -0
  253. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/archiver/src/main.js +0 -0
  254. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/async/package.json +0 -0
  255. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/async/src/main.js +0 -0
  256. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/audit/package.json +0 -0
  257. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/audit/src/main.js +0 -0
  258. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/audit-store.js +0 -0
  259. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/authn/package.json +0 -0
  260. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/authn/src/lockout.js +0 -0
  261. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/authn/src/main.js +0 -0
  262. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/authn/src/totp.js +0 -0
  263. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/authz-gate/package.json +0 -0
  264. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/authz-gate/src/main.js +0 -0
  265. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cache/README.md +0 -0
  266. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cache/build.json +0 -0
  267. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cache/package.json +0 -0
  268. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cache/src/main.js +0 -0
  269. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/aliases.json +0 -0
  270. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/audit/arguments.json +0 -0
  271. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/audit/help.txt +0 -0
  272. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/audit/verify.js +0 -0
  273. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/add.js +0 -0
  274. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/arguments.json +0 -0
  275. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/build.js +0 -0
  276. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/copy.js +0 -0
  277. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/cp.js +0 -0
  278. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/help.js +0 -0
  279. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/help.txt +0 -0
  280. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  281. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/list.js +0 -0
  282. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/man.js +0 -0
  283. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/mcp-start.js +0 -0
  284. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/mcp.js +0 -0
  285. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/oas.js +0 -0
  286. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/openapi.js +0 -0
  287. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/remove.js +0 -0
  288. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/rename.js +0 -0
  289. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/restart.js +0 -0
  290. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/rm.js +0 -0
  291. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/start.js +0 -0
  292. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/status.js +0 -0
  293. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/stop.js +0 -0
  294. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/bundle/types.js +0 -0
  295. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/cache/arguments.json +0 -0
  296. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/cache/clear.js +0 -0
  297. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/cache/help.txt +0 -0
  298. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/cache/stats.js +0 -0
  299. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/add.js +0 -0
  300. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/arguments.json +0 -0
  301. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/help.js +0 -0
  302. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/help.txt +0 -0
  303. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/infer.js +0 -0
  304. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/list.js +0 -0
  305. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/migrate.js +0 -0
  306. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/models.js +0 -0
  307. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/remove.js +0 -0
  308. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/rm.js +0 -0
  309. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/connector/test.js +0 -0
  310. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/container/arguments.json +0 -0
  311. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/container/help.js +0 -0
  312. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/container/help.txt +0 -0
  313. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/container/man.js +0 -0
  314. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/container/ps.js +0 -0
  315. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/container/stop.js +0 -0
  316. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/add.js +0 -0
  317. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/arguments.json +0 -0
  318. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/help.txt +0 -0
  319. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/inc/args.js +0 -0
  320. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/inc/namespace.js +0 -0
  321. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  322. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/inc/reference-scan.js +0 -0
  323. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/inc/scaffold.js +0 -0
  324. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/remove.js +0 -0
  325. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/rename.js +0 -0
  326. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/controller/rm.js +0 -0
  327. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/add.js +0 -0
  328. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/get.js +0 -0
  329. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/help.js +0 -0
  330. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/help.txt +0 -0
  331. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/link-dev.js +0 -0
  332. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/list.js +0 -0
  333. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/remove.js +0 -0
  334. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/rm.js +0 -0
  335. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/set.js +0 -0
  336. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/unset.js +0 -0
  337. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/env/use.js +0 -0
  338. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/add.js +0 -0
  339. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/arguments.json +0 -0
  340. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/build.js +0 -0
  341. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/dot.js +0 -0
  342. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/get.js +0 -0
  343. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/help.js +0 -0
  344. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/help.txt +0 -0
  345. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/init.js +0 -0
  346. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/link-node-modules.js +0 -0
  347. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/link.js +0 -0
  348. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/list.js +0 -0
  349. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/man.js +0 -0
  350. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/msg.json +0 -0
  351. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/open.js +0 -0
  352. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/remove.js +0 -0
  353. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/reset.js +0 -0
  354. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/restart.js +0 -0
  355. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/set.js +0 -0
  356. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/start.js +0 -0
  357. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/status.js +0 -0
  358. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/stop.js +0 -0
  359. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/tail.js +0 -0
  360. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/update.js +0 -0
  361. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/framework/version.js +0 -0
  362. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/gina-dev.1.md +0 -0
  363. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/gina-framework.1.md +0 -0
  364. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/gina.1.md +0 -0
  365. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/helper.js +0 -0
  366. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/i18n/add.js +0 -0
  367. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/i18n/arguments.json +0 -0
  368. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/i18n/export.js +0 -0
  369. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/i18n/help.js +0 -0
  370. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/i18n/help.txt +0 -0
  371. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/i18n/import.js +0 -0
  372. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/i18n/scan.js +0 -0
  373. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/_host.js +0 -0
  374. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/arguments.json +0 -0
  375. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/build.js +0 -0
  376. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/help.js +0 -0
  377. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/help.txt +0 -0
  378. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/list.js +0 -0
  379. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/man.js +0 -0
  380. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/rm.js +0 -0
  381. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/image/run.js +0 -0
  382. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/index.js +0 -0
  383. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/inspector/help.js +0 -0
  384. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/inspector/help.txt +0 -0
  385. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/inspector/open.js +0 -0
  386. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/man-render.js +0 -0
  387. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/minion/arguments.json +0 -0
  388. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/minion/help.js +0 -0
  389. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/minion/help.txt +0 -0
  390. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/minion/kill.js +0 -0
  391. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/minion/list.js +0 -0
  392. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/msg.json +0 -0
  393. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/port/help.js +0 -0
  394. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/port/help.txt +0 -0
  395. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/port/inc/scan.js +0 -0
  396. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/port/list.js +0 -0
  397. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/port/reset.js +0 -0
  398. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/port/set.js +0 -0
  399. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/add.js +0 -0
  400. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/arguments.json +0 -0
  401. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/backup.js +0 -0
  402. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/build.js +0 -0
  403. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/help.js +0 -0
  404. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/help.txt +0 -0
  405. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/import.js +0 -0
  406. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/list.js +0 -0
  407. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/man.js +0 -0
  408. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/move.js +0 -0
  409. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/remove.js +0 -0
  410. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/rename.js +0 -0
  411. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/restart.js +0 -0
  412. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/restore.js +0 -0
  413. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/rm.js +0 -0
  414. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/start.js +0 -0
  415. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/status.js +0 -0
  416. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/project/stop.js +0 -0
  417. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/protocol/arguments.json +0 -0
  418. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/protocol/help.js +0 -0
  419. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/protocol/help.txt +0 -0
  420. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/protocol/list.js +0 -0
  421. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/protocol/remove.js +0 -0
  422. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/protocol/set.js +0 -0
  423. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/add.js +0 -0
  424. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/help.js +0 -0
  425. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/help.txt +0 -0
  426. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/link-local.js +0 -0
  427. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/link-production.js +0 -0
  428. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/list.js +0 -0
  429. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/remove.js +0 -0
  430. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/rm.js +0 -0
  431. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/scope/use.js +0 -0
  432. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/secrets/arguments.json +0 -0
  433. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/secrets/check.js +0 -0
  434. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/secrets/help.js +0 -0
  435. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/secrets/help.txt +0 -0
  436. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/secrets/scan.js +0 -0
  437. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/service/help.js +0 -0
  438. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/service/help.txt +0 -0
  439. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/service/list.js +0 -0
  440. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/service/man.js +0 -0
  441. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/service/start.js +0 -0
  442. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/storage/arguments.json +0 -0
  443. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/storage/gc.js +0 -0
  444. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/storage/help.txt +0 -0
  445. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/storage/stats.js +0 -0
  446. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/storage/verify.js +0 -0
  447. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd/view/add.js +0 -0
  448. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd-status-format/package.json +0 -0
  449. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cmd-status-format/src/main.js +0 -0
  450. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/collection/README.md +0 -0
  451. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/collection/build.json +0 -0
  452. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/collection/package.json +0 -0
  453. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/config.js +0 -0
  454. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/connector-config/package.json +0 -0
  455. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/connector-config/src/main.js +0 -0
  456. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/connector-error/package.json +0 -0
  457. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/connector-error/src/main.js +0 -0
  458. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/connector-registry/package.json +0 -0
  459. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/connector-registry/src/main.js +0 -0
  460. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cron/README.md +0 -0
  461. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cron/package.json +0 -0
  462. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/cron/src/main.js +0 -0
  463. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/domain/LICENSE +0 -0
  464. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/domain/README.md +0 -0
  465. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/domain/package.json +0 -0
  466. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/domain/src/main.js +0 -0
  467. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/dto/package.json +0 -0
  468. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/dto/src/main.js +0 -0
  469. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/dto-pipe/package.json +0 -0
  470. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/dto-pipe/src/main.js +0 -0
  471. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/dto-types/package.json +0 -0
  472. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/dto-types/src/main.js +0 -0
  473. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/generator/index.js +0 -0
  474. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/i18n/package.json +0 -0
  475. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/i18n/src/main.js +0 -0
  476. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/image-build/package.json +0 -0
  477. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/image-build/src/main.js +0 -0
  478. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/index.js +0 -0
  479. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inherits/LICENSE +0 -0
  480. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inherits/README.md +0 -0
  481. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inherits/package.json +0 -0
  482. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inherits/src/main.js +0 -0
  483. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inspector-events/package.json +0 -0
  484. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inspector-events/src/main.js +0 -0
  485. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inspector-redact/package.json +0 -0
  486. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/inspector-redact/src/main.js +0 -0
  487. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/instrument/package.json +0 -0
  488. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/instrument/src/main.js +0 -0
  489. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/job/package.json +0 -0
  490. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/job/src/main.js +0 -0
  491. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/job-store.js +0 -0
  492. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/json-config-header/package.json +0 -0
  493. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/json-config-header/src/main.js +0 -0
  494. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/loading-state/package.json +0 -0
  495. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/loading-state/src/main.js +0 -0
  496. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/README.md +0 -0
  497. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/package.json +0 -0
  498. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/containers/default/index.js +0 -0
  499. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/containers/file/index.js +0 -0
  500. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  501. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  502. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/containers/mq/index.js +0 -0
  503. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/containers/mq/listener.js +0 -0
  504. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/containers/mq/speaker.js +0 -0
  505. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/helper.js +0 -0
  506. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/logger/src/main.js +0 -0
  507. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/maintenance/package.json +0 -0
  508. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/maintenance/src/main.js +0 -0
  509. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/math/index.js +0 -0
  510. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/mcp-dispatch/package.json +0 -0
  511. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/mcp-dispatch/src/main.js +0 -0
  512. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/mcp-http/package.json +0 -0
  513. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/mcp-http/src/main.js +0 -0
  514. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/mcp-server/package.json +0 -0
  515. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/mcp-server/src/main.js +0 -0
  516. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/merge/README.md +0 -0
  517. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/merge/package.json +0 -0
  518. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/merge/src/main.js +0 -0
  519. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/metrics/package.json +0 -0
  520. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/metrics/src/main.js +0 -0
  521. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/model.js +0 -0
  522. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/net-locality/package.json +0 -0
  523. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/net-locality/src/main.js +0 -0
  524. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/nunjucks-filters/README.md +0 -0
  525. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/nunjucks-filters/package.json +0 -0
  526. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/nunjucks-filters/src/main.js +0 -0
  527. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/nunjucks-resolver/package.json +0 -0
  528. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/nunjucks-resolver/src/main.js +0 -0
  529. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/proc.js +0 -0
  530. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/push/package.json +0 -0
  531. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/push/src/main.js +0 -0
  532. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/release-watch/package.json +0 -0
  533. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/release-watch/src/main.js +0 -0
  534. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/render-cache/package.json +0 -0
  535. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/render-cache/src/main.js +0 -0
  536. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/render-cache-store.js +0 -0
  537. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/routing/README.md +0 -0
  538. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/routing/build.json +0 -0
  539. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/routing/package.json +0 -0
  540. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/routing/src/main.js +0 -0
  541. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/routing/src/radix.js +0 -0
  542. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/routing-introspect/package.json +0 -0
  543. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/routing-introspect/src/main.js +0 -0
  544. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/secrets/package.json +0 -0
  545. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/secrets/src/backends/env.js +0 -0
  546. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/secrets/src/backends/file.js +0 -0
  547. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/secrets/src/env-file.js +0 -0
  548. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/secrets/src/main.js +0 -0
  549. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/session-store.js +0 -0
  550. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/shell.js +0 -0
  551. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/sqlite-driver.js +0 -0
  552. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/state.js +0 -0
  553. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/package.json +0 -0
  554. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/src/local-cas.js +0 -0
  555. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/src/local-stream.js +0 -0
  556. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/src/local.js +0 -0
  557. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/src/main.js +0 -0
  558. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/src/meta-store.js +0 -0
  559. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/src/s3.js +0 -0
  560. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage/src/util.js +0 -0
  561. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/storage-store.js +0 -0
  562. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/swig-filters/README.md +0 -0
  563. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/swig-filters/package.json +0 -0
  564. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/swig-filters/src/main.js +0 -0
  565. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/swig-resolver/package.json +0 -0
  566. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/swig-resolver/src/main.js +0 -0
  567. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/template-loaders/package.json +0 -0
  568. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/template-loaders/src/loaders/http.js +0 -0
  569. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/template-loaders/src/loaders/memory.js +0 -0
  570. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/template-loaders/src/main.js +0 -0
  571. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/url/README.md +0 -0
  572. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/url/index.js +0 -0
  573. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/url/routing.json +0 -0
  574. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/uuid/package.json +0 -0
  575. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/uuid/src/main.js +0 -0
  576. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/validator.js +0 -0
  577. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/watcher/package.json +0 -0
  578. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/watcher/src/main.js +0 -0
  579. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/ws-framing/package.json +0 -0
  580. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/ws-framing/src/main.js +0 -0
  581. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/ws-query/package.json +0 -0
  582. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/ws-query/src/main.js +0 -0
  583. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/ws-session/package.json +0 -0
  584. /package/framework/{v0.6.11-alpha.2 → v0.6.11}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,16 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.6.11 - 2026-08-19
10
+ ### Fixed
11
+ * The Inspector's View tab could show two badges instead of three, dropping the page-weight badge until the Inspector was refreshed, and its Flow tab could be missing the template-compile, execute, response-write and total bars (#B386). Both came from one cause: the dev statusbar hands the page payload to the Inspector before the render delegates append their late-bind patch script above `</body>`, and that patch only mutated the in-memory object. Every channel the Inspector can read therefore kept the emit-time payload for the life of the page, with the page weight left null (it is unknown at emit, since the response body length is not final until the render completes) and the late timeline entries absent. The asymmetry is what made it look intermittent rather than broken: the server-side processing time IS known at emit, so the load badge always rendered while the weight badge silently did not. Both of the Inspector's data channels are now refreshed at the end of that patch, after the values are written: the localStorage fallback mirror, and the per-tab broadcast channel a statusbar-launched Inspector actually binds to. The broadcast channel is keyed from per-tab session storage rather than the shared cross-tab advert, so one tab can never publish onto another tab's channel. The nunjucks delegate additionally now injects its patch through a function replacer rather than a string one, so a timeline entry containing a dollar-sequence can no longer corrupt the emitted script. Development-mode only; no configuration change is required.
12
+ * FormValidator: on Safari, fast typing into a live-checked `autocomplete="off"` text input no longer scrambles the text (gh issue #63). The keydown interception restored the caret only two timer hops after each programmatic value rebuild — and a value assignment parks the caret at the end of the field — so a quick second keystroke read a stale position and characters landed at the end instead of at the caret. Every rebuild now commits the caret synchronously and records the intended position on the element; while a deferred restore is still in flight the interception trusts that recorded position, and the restore re-asserts the latest committed position instead of a stale per-keystroke capture. The transient-readonly autofill suppression is mechanism-unchanged. Browser-bundled: rebuild your bundles to pick it up.
13
+ * FormValidator: three position-0 edge defects in the same Safari `autocomplete="off"` keydown interception now match native field behavior — Backspace at the start of the field deleted the first character (native is a no-op), Delete with a selection starting at position 0 removed one character more than the selection, and ArrowLeft at position 0 teleported the caret to the end of the field (`setSelectionRange(-1)` wraps to the unsigned maximum). Browser-bundled: rebuild your bundles to pick it up.
14
+ * FormValidator: on a form with an async `query` rule and a committed error, a refused submit's answer could render, take focus, and then be hidden again milliseconds later when the click landed while a previous validation round was still settling — the late completion's display refresh read the answered field as "being typed in" (it was the active element) and re-hid the very message the answer had just rendered. The error message and its field focus now stay put: the framework records that the focus was placed by the answer rather than by the user, both display-refresh paths honour that record however late they run, and the first genuine user interaction (typing, clicking, tabbing away) releases it so the deliberate hide-while-typing behaviour is unchanged (#B387). Browser-bundled: rebuild your bundles to pick it up.
15
+ * FormValidator: on a form whose async `query` rule rides a field that is not declared last, the display-only validation pass answering a refused submit click could silently never complete — its result matched no completion route — so the stale not-ready marker on the submit trigger was never re-synced and a fully valid form kept refusing every click until reload. The reveal pass now carries its own completion identity and always completes: the refused click renders the current validation state, the trigger state re-syncs from the fresh result, and the next click on a valid form goes through. Field declaration order no longer decides whether a stale marker can heal (#B348). Browser-bundled: rebuild your bundles to pick it up.
16
+ * `Collection.replace()` no longer silently discards the write when the stored entry carries an internal `_uuid` and the caller's `set` object does not (#B393, gh issue #64). The comparison key was resolved by inspecting the stored entry alone, so in that one combination neither the `id` fallback nor the "no comparison key" refusal applied and the comparison became `<storedUuid> == undefined` — never true. Nothing matched, nothing was replaced, no error was raised, and the call returned a result that looked successful: a silent, lossy write. A stored `_uuid` is present exactly when the caller re-loaded an array a previous chained call had returned, which is why the failure looked intermittent rather than constant. The key is now resolved from BOTH sides — the stored entry and the `set` — falling back to `id` when both carry one, and the call now refuses loudly when the two sides share no usable key at all, so the one unmatchable combination is no longer the only one that stays quiet. An explicitly named comparison key is still honoured exactly as given, and the resolved key is scoped per entry rather than shared, so a fallback taken for one entry can no longer apply to the entries examined after it. Every previously-working call is unaffected. Browser-bundled: rebuild your bundles to pick it up.
17
+ * Concurrent `util.promisify(entity.method)` calls on the same entity method no longer cross-deliver results or leave a caller hanging (#B394). The promisify fast-path kept a single scalar callback slot: a second in-flight call overwrote the first, so the first result to arrive was delivered to the last caller to register (one caller receiving another's record), and the displaced caller's promise never settled at all — a request left hanging with nothing logged, and a read-modify-write variant that could persist one key's document under another. The entity-context path already used a FIFO queue with a single persistent dispatch listener; the fast-path now uses the same shape, so every concurrent caller settles and, when the underlying operations complete in the order they were called, each caller receives its own result. When operations can complete out of call order, results are still paired by arrival order — give such a method true per-call identity by returning a Promise instead of emitting its trigger (see the Models guide's concurrency note). Server-side only; pick it up with a bundle restart.
18
+
9
19
  ## 0.6.10 - 2026-08-16
10
20
 
11
21
  ### Added
package/README.md CHANGED
@@ -61,28 +61,32 @@ open https://localhost:3100
61
61
 
62
62
  > **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
63
63
 
64
- ## What's in 0.6.10
64
+ ## What's in 0.6.11
65
65
 
66
- > **Restart your bundles no re-bake.** The browser bundle is byte-identical to
67
- > `0.6.9` (verified), so `gina bundle:restart` is enough; this release is
68
- > server-side only.
66
+ > **Restart your bundles AND rebuild them.** The browser bundle changed in this
67
+ > release (`Collection.replace()` and the four FormValidator fixes are bundled),
68
+ > so a restart alone keeps serving the old client code — run `gina bundle:build`
69
+ > for each bundle as well as `gina bundle:restart`.
69
70
 
70
- > **No settings reset.** `0.6.10` is a patch — the `shortVersion` stays `0.6`, so
71
+ > **No settings reset.** `0.6.11` is a patch — the `shortVersion` stays `0.6`, so
71
72
  > your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
72
73
 
73
- **This release adds maintenance mode and closes a cross-site request forgery hole
74
- in the admin endpoints.** It also makes boot-time bundle mounts safe when several
75
- processes share one project tree replicas over a POSIX network filesystem, or
76
- containers bind-mounting a single checkout. **Two behaviour changes to check
77
- before you upgrade** a real directory sitting at a bundle's mount path is now
78
- refused loudly instead of being silently deleted, and cross-origin writes to the
79
- `/_gina/*` control endpoints are now refused. Both are covered in the
80
- [migration guide](https://gina.io/docs/migration).
81
-
82
- - **Added — maintenance mode.** A bundle can now be closed to the public without being stopped, via `settings.json > server.maintenance`. While a window is open every request except the framework's own `/_gina/*` endpoints is answered `503` with a `Retry-After` header and `Cache-Control: no-store`, carrying a self-contained page for a browser navigation and the standard JSON body for XHR, SPA-fragment and JSON callers. The gate runs on **both engines**, placed ahead of static assets, both output-cache serve points and routing — so unlike a route middleware, which only runs once a route has matched, it also covers static files and URLs that match no route at all. The liveness endpoint deliberately keeps answering `200`, so an orchestrator does not restart healthy instances over a declared window, and the toggle itself stays reachable so you are never stranded outside your own off switch. Chosen visitors can still browse: a shared bypass key works as a header, or once in the address bar — which then sets a short-lived cookie and redirects without the secret — under any deployment; the supplementary IP allowlist applies only to requests that did not arrive through a reverse proxy, since behind one every address is the proxy's. Maintenance can also be flipped at runtime through an admin-gated endpoint with an optional expiry; a runtime flip is not persisted, and a lapsed expiry reverts to your *configuration* rather than to "off", so a forgotten timer cannot re-open a site that configuration says is closed.
83
- - **Securitycross-origin writes to admin `/_gina/*` endpoints are refused (#B384).** Present in every release up to and including `0.6.9`. These endpoints authorise callers by IP allowlist alone (`app.json` `admin.allowFrom`, loopback by default), and a browser attaches that ambient credential automatically so an operator browsing from an allowlisted machine could be lured to a page that silently issued writes to `/_gina/storage/gc`, `/_gina/cache/clear`, `/_gina/release/rebuild` or `/_gina/maintenance`. The first three read their entire input from the query string and never read a body, so the attack needed no JavaScript and no CORS involvement at all: a plain auto-submitting form was enough. Such a write is now refused with `403` on both engines, using `Sec-Fetch-Site` where the browser sends it and comparing `Origin` against the connected authority otherwise never against a forwarded header. **Two things are deliberately unaffected:** requests carrying no browser origin signal (`curl`, the gina CLI, deploy scripts) still work, so operator tooling is unchanged; and safe methods are untouched, so cross-origin `GET`/SSE channels keep working. No configuration change is required.
84
- - **Fixed — boot-time bundle mounts are idempotent, atomic and concurrency-safe.** Every boot re-created every declared bundle's mount symlink in two non-atomic steps unlink, then create with no mutual exclusion anywhere in the framework, and the config loader did it for *every* declared bundle on *every* load. With a single process that is invisible. With several processes booting one shared project tree it is a race on the same directory entries: the mount name genuinely disappears between the two steps, so a boot could fail outright on a contended create, and because the configuration load is shared, one contended link could abort it for every bundle in the project. Mounting is now idempotent and atomic. A link that already resolves to its intended source is left completely alone — the steady-state boot writes nothing at all, which is what removes the contention rather than merely surviving it. A wrong or missing link is published atomically through a temporary sibling and a rename, so the name is never absent and two processes cannot collide. And a process that loses the race to another one publishing the *identical* link now treats that as success instead of refusing to boot. Genuine failures are still loud: a release whose source has vanished, or a real directory occupying the mount path, refuse by name. The same class of race is closed on the directory creation that accompanies a mount. **Contract note:** a real directory at a bundle's mount path used to be deleted and replaced with the link during config load, and now refuses the boot instead — if you hit that, remove or relocate the directory.
85
- - **Docs — the guidance on addressing an out-of-request push is corrected.** `0.6.9` introduced `gina.pushToSession()` and warned against sourcing its recipient from the browser. That warning was written broadly enough to read as forbidding a **server-minted, integrity-protected token** that names the recipientwhich is in fact the sanctioned shape, and the one the authenticated-hop pattern already relied on. The prohibition is now scoped to what it always meant: a *bare* recipient id in a client-writable field. The sanctioned shape is documented with the conditions that make it safe verify the token and derive the recipient only from its verified claims, fail closed when it is absent or unverifiable, and keep it short-lived, since targeting integrity is not replay immunity.
74
+ **This is a fixes-only release: seven fixes, two of them reported through GitHub
75
+ issues (#63, #64).** It closes a silent lossy write in `Collection.replace()`, a
76
+ cross-delivery / hang defect for concurrent `util.promisify(entity.method)`
77
+ calls, four FormValidator defects (Safari caret scrambling plus three caret edge
78
+ cases, and two submit-time display races on async-`query` forms), and a
79
+ development-mode Inspector data-channel staleness. **One behaviour change to
80
+ check before you upgrade** `Collection.replace()` now throws where it
81
+ previously failed silently, when neither side of the comparison carries a usable
82
+ key. Details are in the [migration guide](https://gina.io/docs/migration).
83
+
84
+ - **Fixed`Collection.replace()` no longer silently discards the write (#B393, issue #64).** When the stored entry carried an internal `_uuid` and the caller's `set` object did not, the comparison key was resolved from the stored entry alone, so the comparison became `<storedUuid> == undefined`never true: nothing matched, nothing was replaced, no error was raised, and the call returned a result that looked successful. A stored `_uuid` is present exactly when you re-load an array a previous chained call returned, which is why the failure looked intermittent. The key is now resolved from **both** sides the stored entry and the `set` falling back to `id` when both carry one, and the call now **throws `No comparison key defined !`** when the two sides share no usable key, so the one unmatchable combination is no longer the only one that stays quiet. An explicitly supplied key argument is honoured exactly as before, and the resolved key is scoped per entry, so a fallback taken for one entry can no longer apply to the entries examined after it. Every previously-working call is unaffected. Browser-bundled.
85
+ - **Fixed — concurrent `util.promisify(entity.method)` calls no longer cross-deliver results or leave a caller hanging (#B394).** The promisify fast-path kept a single scalar callback slot: a second in-flight call on the same method overwrote the first, so the first result to arrive was delivered to the last caller to register (one caller receiving another's record), and the displaced caller's promise never settled a request left hanging with nothing logged, and a read-modify-write variant that could persist one key's document under another. The fast-path now uses the same FIFO queue and single persistent dispatcher as the entity-context path: every concurrent caller settles, and when the underlying operations complete in the order they were called, each caller receives its own result. When operations can complete out of call order, results are still paired by arrival order give such a method true per-call identity by returning a Promise instead of emitting its trigger (see the [Models guide](https://gina.io/docs/guides/models)). Server-side.
86
+ - **FixedFormValidator: fast typing into a Safari `autocomplete="off"` field no longer scrambles the text (#B389, issue #63), plus three position-0 edge cases in the same interception (#B390, #B391, #B392).** The keydown interception restored the caret two timer hops after each programmatic value rebuild and a value assignment parks the caret at the end of the field so a quick second keystroke read a stale position and characters landed at the end instead of at the caret. Every rebuild now commits the caret synchronously and records the intended position; while a deferred restore is in flight the interception trusts that record, and the restore re-asserts the latest committed position instead of a stale capture. In the same switch, Backspace at position 0 no longer deletes the first character (native is a no-op), Delete with a selection starting at position 0 no longer removes one character more than the selection, and ArrowLeft at position 0 no longer teleports the caret to the end of the field. Browser-bundled.
87
+ - **Fixed — FormValidator: a refused submit's answer stays visible and focused on async-`query` forms (#B387).** On a form with an async `query` rule and a committed error, a refused submit's answer could render, take focus, and then be hidden again milliseconds later when the click landed while a previous validation round was still settling — the late completion's display refresh read the answered field as "being typed in" (it was the active element, because the answer had just focused it) and re-hid the very message the answer had rendered. The framework now records that the focus was placed by the answer rather than by the user, both display-refresh paths honour that record however late they run, and the first genuine user interaction (typing, clicking, tabbing away) releases it — so the deliberate hide-while-typing behaviour is unchanged. Browser-bundled.
88
+ - **Fixed — FormValidator: a stale not-ready submit marker can no longer refuse every click until reload (#B348).** On a form whose async `query` rule rides a field that is not declared last, the display-only validation pass answering a refused submit click could silently never complete — its result matched no completion route — so the stale not-ready marker on the submit trigger was never re-synced and a fully valid form kept refusing every click. That pass now carries its own completion identity and always completes: the refused click renders the current validation state, the trigger state re-syncs from the fresh result, and the next click on a valid form goes through. Field declaration order no longer decides whether a stale marker can heal. Browser-bundled.
89
+ - **Fixed — Inspector (development mode): the View tab's page-weight badge and the Flow tab's late timeline bars no longer go missing until the Inspector is refreshed (#B386).** The dev statusbar hands the page payload to the Inspector before the render delegates append their late-bind patch script above `</body>`, and that patch only mutated the in-memory object — so every channel the Inspector can read kept the emit-time payload for the life of the page, with the page weight left null (it is unknown at emit) and the template-compile, execute, response-write and total bars absent. Both of the Inspector's data channels — the localStorage fallback mirror and the per-tab broadcast channel a statusbar-launched Inspector actually binds to — are now refreshed at the end of that patch, after the values are written; the broadcast channel is keyed from per-tab session storage rather than the shared cross-tab advert, so one tab can never publish onto another tab's channel. The nunjucks delegate additionally injects its patch through a function replacer rather than a string one, so a timeline entry containing a dollar sequence can no longer corrupt the emitted script. Server-side; development mode only; no configuration change is required.
86
90
 
87
91
  ## Documentation
88
92
 
package/ROADMAP.md CHANGED
@@ -60,8 +60,9 @@ This roadmap covers planned features, architectural improvements, new connectors
60
60
  | **Q4 2026** | `0.6.6` ✅ | **Fixed**: the logging-transport release. A slow boot no longer silences a bundle's logging for the life of the process — a two-second connect deadline added in `0.6.5` read a socket flag Node clears one event-loop phase later, so any boot that blocked the loop past it destroyed a connection the kernel had already established (every container start and network-filesystem mount was exposed, and the transport never redialled). The MQ and file log transports also stopped dialling `host_v4`, which on a `~/.gina` shared across hosts silently shipped every log line off-host while all connection lines read healthy. Plus: the popin `success` event fires again instead of raising a 422 carrying the successful response body; a link request belongs to the anchor you clicked rather than the first anchor sharing its url; and constructing the link handler twice no longer corrupts the first instance · **Added**: the log transport reconnects — exponential backoff to a 30-second ceiling, one report per outage, frames dropped rather than queued while down so an outage cannot grow memory |
61
61
  | **Q4 2026** | `0.6.7` ✅ | **Added**: the object-storage release — a `storage` block declares named drivers (an adapter crossed with a strategy) reachable as `gina.storage()`, publishing objects atomically under opaque keys with their metadata written through a pluggable store seam; a content-addressed `cas` strategy deduplicates identical bytes behind a reference count, reclaiming them only after a grace-gated sweep; size tiering keeps sub-`64KB` objects inline in the metadata store, measurably faster than per-file writes; `storage:stats` / `storage:gc` / `storage:verify` operate a bundle's drivers whether it is running or stopped, through always-on admin-gated endpoints; and an upload group can route its `self.store()` step straight into a driver · **Security**: bound query parameter values no longer reach dev consoles or the Inspector query log — count and type markers replace them, with `inspector.queries.captureValues` to opt back in · **Fixed**: the `is` rule compiles regex literals as authored instead of stripping their parentheses (stricter — review patterns containing parens), forms with an async `query` rule complete correctly across a cluster of interacting defects (a submit leaving before the verdict landed, a completion carrying only the query field's slice, a re-click clearing later fields' errors, a clean form whose query field was not declared last never submitting at all, replayed submits from stale listeners, and an id-less trigger bound twice), `getConfig().settings` resolves path placeholders, `req.files[].group` reports the resolved group instead of `undefined`, and the Inspector's Data and Forms tabs stop putting framework-internal keys and the bundle catalog above your own data · **Changed**: framework default looks ship inside a `@layer gina` cascade layer, so any un-layered project rule overrides them without `!important` |
62
62
  | **Q4 2026** | `0.6.8` ✅ | **Security**: `self.push()` decides its recipient server-side instead of reading it from the request, where a supplied session id aimed the push at any session and an absent one broadcast to every connected client (ACTION REQUIRED — a bare worker push over an HTTP hop that carried the recipient IN THE REQUEST stops delivering; where the hop is authenticated the controller can pass `{ sessionID }` explicitly and keep working, and a worker with no request context at all polls `GET /_gina/jobs/:id`) · forwarded headers (`X-Forwarded-Host`, `-Proto`, `-Prefix` and the request's own `Host`) are validated where they are read, closing a reflected-XSS path that spliced them unescaped into the client bootstrap script emitted on every rendered page · **Added**: storage metadata can live on Couchbase, which is what makes a driver root shareable across bundles and replicas; a `stream` strategy for large sequential media brings resumable, out-of-order, restart-surviving uploads whose finalise verifies coverage as an interval union and refuses to publish a gap; HTTP Range serving through `self.serveFromStorage()` on both engines, with conditional GET and a fail-closed content-type downgrade; the `s3` adapter completes the pluggable object-storage layer, storeless by design and able to offload GET/HEAD to a presigned URL; `getRange()` on every local strategy; machine-readable `err.code` on storage read verbs; and the Couchbase soak probes ship in the package · **Changed**: `renderStream()` is byte-serving-capable — `Buffer` chunks pass through verbatim on non-SSE content types (binary payloads previously arrived corrupted), HEAD answers headers-only without consuming the iterable, and caller-set headers are no longer clobbered · **Fixed**: `renderStream()` honours a caller-set status on both engines and stops throwing a swallowed error at the end of every streamed response, a redirect treats `HEAD` as the safe method it is and keeps the caller's query string under `keep-params: true`, and a local storage driver reclaims the temp files left behind by a crashed or refused `put()` |
63
- | **Q4 2026** | `0.6.10` ✅ | **Added**: maintenance mode — a bundle can be closed to the public without being stopped. When it is active every request except the framework's own built-in endpoints is answered `503` with a `Retry-After` header and a self-contained maintenance page, and the response is marked never to be stored so a cached copy cannot outlive the window. The gate runs on both engines ahead of static assets, the output cache and routing, so it also covers files and URLs that a route middleware never sees. The liveness endpoint deliberately keeps answering normally, so an orchestrator does not restart healthy instances over a declared window. Chosen visitors can still browse: a shared bypass key presented as a header or once in the address bar (which then sets a short-lived cookie and redirects without the secret) works under any deployment, while the supplementary IP allowlist applies only to requests that did not arrive through a reverse proxy — behind one, every address is the proxy's, so an unconditioned list would let either everybody or nobody through. Maintenance can be flipped at runtime through an administrator-gated endpoint with an optional expiry; a runtime flip is not persisted, and an expiry reverts to the configured state rather than to off, so a forgotten timer cannot re-open a site that configuration says is closed. **Fixed**: boot-time bundle mounts are idempotent, atomic and concurrency-safe — a mount symlink that already resolves to its source is left untouched (so the steady-state boot writes nothing), a wrong or missing one is published atomically through a temp sibling and a rename, and a process that loses the race to another publishing the identical link treats that as success instead of refusing to boot. Previously every boot re-created every declared bundle's link in two non-atomic steps with no mutual exclusion, so several processes sharing one project tree raced the same directory entries and a contended link could fail a boot or abort the shared configuration load for every bundle in the project. The same race is closed on the directory creation that accompanies a mount. Behaviour change: a real directory occupying a mount path is now refused by name instead of silently deleted. **Security**: cross-origin writes to the administrator-gated built-in endpoints are refused. Those endpoints authorise callers by network address alone — a credential a browser attaches automatically — so an operator browsing from an allowed machine could be lured to a page that silently issued writes to them; and because several of them read their whole input from the address rather than from a request body, the attack needed no scripting and no cross-origin negotiation at all. Such a write is now refused on both engines, using the browser's own request-context signal where it is sent, and otherwise comparing the stated origin against the address the client actually connected to — never against a forwarded header, which an attacker controls. Clients that send no browser origin signal, such as command-line tooling and deployment scripts, are deliberately unaffected, as are safe methods, so existing cross-origin read channels keep working. | `0.6.10` | 2026-08-16 |
64
63
  | **Q4 2026** | `0.6.9` ✅ | **Security**: an engine.io socket's session identity is derived server-side from the upgrade request's own cookie instead of a field the browser asserts on every message — any client could previously claim another user's session and receive the pushes addressed to it, which took strictly less than stealing the cookie, since a rendered page carries the bare session id while the cookie carries the signed form; the binding replays the bundle's own session middleware (same secret, store and cookie name, no new configuration) and fails closed, so an id-less socket receives only deliberate broadcasts · **Added**: `gina.pushToSession()` gives code with no request context — a job handler, a cron tick, a boot hook — a sanctioned route to a user's socket, with a required recipient, no reachable broadcast, and delivery reported rather than assumed; and a bundle can declare which scopes it is deployed in through a `scopes` allow-list on its manifest entry, so one still under development stays out of every other scope · **Fixed**: `engine: "express"` bundles boot and serve on Express 5, with the supported range declared for the first time (`>= 4 < 6`, both majors verified live) · `project:add`/`project:import` no longer empty a project's `bundles` block on a declared-count mismatch, no longer adopt a bundle's invalid `server.protocol`/`server.scheme` into the project's registry lists, and no longer resolve one project's bundles against another project's path · `project:add` writes the `.gitignore` the shipped template's underscore prefix has always implied · the path helper's copier stages to a temp sibling and publishes with an atomic rename, so a failed copy can no longer destroy the destination it was replacing · the secrets resolver reads its two environment tiers independently, so a swept boolean no longer lets a plaintext file shadow `process.env`, and three malformed `settings.secrets.file` shapes that used to pass in silence are caught (ACTION REQUIRED — two of them now refuse to boot) · a bundle whose release tree cannot be linked refuses by name instead of dying as an opaque TypeError · `self.push()` refuses by name when the server instance has no engine.io channel |
64
+ | **Q4 2026** | `0.6.10` ✅ | **Added**: maintenance mode — a bundle can be closed to the public without being stopped. When it is active every request except the framework's own built-in endpoints is answered `503` with a `Retry-After` header and a self-contained maintenance page, and the response is marked never to be stored so a cached copy cannot outlive the window. The gate runs on both engines ahead of static assets, the output cache and routing, so it also covers files and URLs that a route middleware never sees. The liveness endpoint deliberately keeps answering normally, so an orchestrator does not restart healthy instances over a declared window. Chosen visitors can still browse: a shared bypass key presented as a header or once in the address bar (which then sets a short-lived cookie and redirects without the secret) works under any deployment, while the supplementary IP allowlist applies only to requests that did not arrive through a reverse proxy — behind one, every address is the proxy's, so an unconditioned list would let either everybody or nobody through. Maintenance can be flipped at runtime through an administrator-gated endpoint with an optional expiry; a runtime flip is not persisted, and an expiry reverts to the configured state rather than to off, so a forgotten timer cannot re-open a site that configuration says is closed. **Fixed**: boot-time bundle mounts are idempotent, atomic and concurrency-safe — a mount symlink that already resolves to its source is left untouched (so the steady-state boot writes nothing), a wrong or missing one is published atomically through a temp sibling and a rename, and a process that loses the race to another publishing the identical link treats that as success instead of refusing to boot. Previously every boot re-created every declared bundle's link in two non-atomic steps with no mutual exclusion, so several processes sharing one project tree raced the same directory entries and a contended link could fail a boot or abort the shared configuration load for every bundle in the project. The same race is closed on the directory creation that accompanies a mount. Behaviour change: a real directory occupying a mount path is now refused by name instead of silently deleted. **Security**: cross-origin writes to the administrator-gated built-in endpoints are refused. Those endpoints authorise callers by network address alone — a credential a browser attaches automatically — so an operator browsing from an allowed machine could be lured to a page that silently issued writes to them; and because several of them read their whole input from the address rather than from a request body, the attack needed no scripting and no cross-origin negotiation at all. Such a write is now refused on both engines, using the browser's own request-context signal where it is sent, and otherwise comparing the stated origin against the address the client actually connected to — never against a forwarded header, which an attacker controls. Clients that send no browser origin signal, such as command-line tooling and deployment scripts, are deliberately unaffected, as are safe methods, so existing cross-origin read channels keep working. | `0.6.10` | 2026-08-16 |
65
+ | **Q4 2026** | `0.6.11` ✅ | **Fixed**: `Collection.replace()` no longer silently discards the write when the stored entry carries an internal `_uuid` and the caller's `set` does not — the comparison key is now resolved from both sides (falling back to `id` when both carry one) and the call throws instead of returning quietly when the two sides share no usable key; an explicitly supplied key is honoured exactly as before (issue #64). Concurrent `util.promisify(entity.method)` calls on the same method no longer cross-deliver results or leave a caller hanging — the promisify fast-path now uses the same FIFO queue and single persistent dispatcher as the entity-context path, so every caller settles and in-order completion gives each its own result; out-of-order completion still pairs by arrival order, for which the per-call-identity path is a Promise-returning method. FormValidator: fast typing into a Safari `autocomplete="off"` field no longer scrambles the text (the caret is committed synchronously on every rebuild and the deferred restore re-asserts the latest committed position; issue #63), with three position-0 edge cases in the same interception corrected to native behaviour (Backspace, Delete with a selection, ArrowLeft); a refused submit's answer on an async-`query` form stays visible and focused instead of being re-hidden by a late completion (answer-placed focus is told from user-placed focus until the first genuine interaction); and a stale not-ready submit marker can no longer refuse every click until reload on a form whose async `query` field is not declared last (the reveal pass now carries its own completion identity and always completes). Inspector (development mode): the View tab's page-weight badge and the Flow tab's late timeline bars no longer go missing until a refresh — both data channels are refreshed at the end of the late-bind patch, keyed per tab. Pickup: restart **and** rebuild your bundles (the browser bundle changed). |
65
66
  | **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
66
67
  | **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
67
68
  | **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys · sequence primitive · OAuth2 client-credentials egress |
@@ -442,7 +443,7 @@ A cold audit of the Couchbase connector identified two critical security vulnera
442
443
  | ✅ | **V8 pointer compression support** | `0.2.0` | Q2 2026 | Node.js built with `--experimental-enable-pointer-compression` (e.g. [node-caged](https://github.com/platformatic/node-caged) or a custom build) delivers ~50% heap memory reduction across all pointer-heavy structures. Gina is pure JS — compatible out of the box. Adds: startup detection + `GINA_V8_POINTER_COMPRESSED` env var, Dockerfile guide with custom build recipe (full-icu + pointer compression), 4 GB ceiling documentation, N-API-only connector policy. |
443
444
  | ✅ | **Runtime CPU profiling baseline** | `0.6.2` | 2026-07-31 | Shipped — a three-arm baseline (HTTP/2 render, concurrent multipart upload, WebSocket echo) profiled a production-built bundle under load. Outcome: the multipart-scan, WebSocket-unmask, and render/log-cleanup candidates below all measured small under their own arms and moved to measure-gated deferral, while the dominant cost found is per-request deep-clone traffic — half of render-arm CPU — plus per-item random-id minting (~1 ms per render), now planned as its own row below. "No further acceleration needed" was an accepted verdict shape, and for the byte-loop candidates it is the verdict. |
444
445
  | ⏸ | **Multipart boundary-scan fast path** | — | on demand | **Deferred — acquitted by the profiling baseline (2026-07):** the boundary scan measured 7.2% of upload-arm CPU (0.73 ms per MB, ~47 µs per 64 KB chunk) with the event loop far from saturated — the loop-relief win does not materialize at these magnitudes. Re-armed by a profiled workload where the scan is a leading loop consumer. Original scope, unchanged when re-armed: the multipart parser's boundary search is the one unbounded byte-by-byte JS loop on a request path; delegating the in-chunk needle search to the runtime's native `Buffer.indexOf` (JS keeps only the chunk-boundary carry) relieves the event loop under large concurrent uploads; wire and event contract unchanged; validated by differential tests against the current matcher. |
445
- | ⏸ | **WebSocket unmask fast path** | — | on demand | **Deferred — acquitted by the profiling baseline (2026-07):** the built-in codec measured 8% of an echo arm deliberately isolated to maximize its visibility (~3.4 µs per 4 KB frame); real in-bundle traffic would only shrink that share. Re-armed by a WebSocket-heavy profile showing the codec as a leading consumer. Original scope, unchanged when re-armed: every inbound client frame must be unmasked, and that XOR currently runs byte-by-byte in JS; word-at-a-time unmasking in the built-in RFC 6455 codec, with the `ws` engine path picking up `bufferutil` acceleration where it is installed — optional only; the pure-JS behaviour remains the permanent fallback. |
446
+ | ⏸ | **WebSocket unmask fast path** | — | on demand | **Deferred — acquitted by the profiling baseline (2026-07), re-verified in-bundle (2026-08):** the built-in codec measured 8% of an echo arm deliberately isolated to maximize its visibility (~3.4 µs per 4 KB frame), and the same echo load driven through a real bundle's declarative WebSocket route confirmed the acquittal — ~10% of an idle-dominated in-bundle profile (~22% of non-idle CPU, ~3.2 µs per 4 KB frame), outranked two-to-one by the runtime's own native buffer/UTF-8 internals, with all other framework work under 2% combined. Re-armed by a WebSocket-heavy or binary-streaming profile showing the codec as a leading consumer. Original scope, unchanged when re-armed: every inbound client frame must be unmasked, and that XOR currently runs byte-by-byte in JS; word-at-a-time unmasking in the built-in RFC 6455 codec, with the `ws` engine path picking up `bufferutil` acceleration where it is installed — optional only; the pure-JS behaviour remains the permanent fallback. |
446
447
  | ⏸ | **Render & logging hot-path cleanups** | — | on demand | **Deferred — acquitted by the profiling baseline (2026-07):** the asset-scan, logger-regex, and render-splice candidates each measured at or under about 1% of render CPU under the arm built for them (the broken asset-scan memo guard remains real, but as a correctness fix that can ride any future work on that surface). Re-armed if any of them turns leading in a future profile. Original scope, unchanged when re-armed: repair the per-render asset-scan memoization (the cache guard can never hit as written, so the full document is re-scanned every HTTP/2 render), precompile the logger's per-line token regexes, and consolidate whole-document render passes where a profile convicts them. |
447
448
  | ⏸ | **SIMD boundary scanner (Rust → WebAssembly)** | — | on demand | **Deferred — measure-gated, doubly dormant since the 2026-07 baseline.** Built only if a profile still convicts the multipart scan after the JS fast path lands — and the JS fast path is itself deferred-acquitted, so this trigger cannot fire today. WebAssembly first: sandboxed, a single artifact for every platform including Bun, no process crash surface. Native N-API prebuilds — published as separate per-platform packages so the framework tarball never carries a compiled binary — only if WASM leaves measured headroom. No install scripts ever; the JS implementation remains the permanent fallback. *Interim:* the JS fast path above. |
448
449
  | ✅ | **Render-path deep-clone & id-mint reduction** | `0.6.2` | 2026-08-01 | **Convicted by the profiling baseline, shipped ahead of schedule:** half of render-arm CPU was per-request deep-clone traffic, concentrated in three framework call sites (the template-filter configuration was re-cloned on every render; the render delegate cloned its envelope; the options collection deep-cloned its content and minted a random id per collected item — about 1 ms per render of entropy alone), with GC time consistent with the clone garbage. Shipped JS-side only: the filter configuration is now passed and stashed by reference (its write surface was measured empty before the change), the per-request locale lookups are memoized with the per-request copy materialized lazily on first read, and the id generator right-sizes its entropy batch to the requested length. Measured on the profiling harness with fresh runs on both sides: **4.4× render throughput** on the baseline workload (10.7 → 2.4 ms per render), deep-clone share 50.31% → 1.81%, GC down ~18×, and entropy out of the top profile frames on both arms. The remaining clone sites on this surface stay measure-gated for a future profile. Porting the object-graph work to native code remains an anti-candidate. |
@@ -0,0 +1 @@
1
+ 0.6.11
@@ -11841,6 +11841,69 @@ function ValidatorPlugin(rules, data, formId, culture) {
11841
11841
  */
11842
11842
  var isAnswerFocusInProgress = false;
11843
11843
 
11844
+ /**
11845
+ * #B387 — the asynchronous continuation of the #B319 exemption above.
11846
+ *
11847
+ * The answer's own focus move makes the answered field the active element,
11848
+ * and BOTH display refreshers read "active element" as "the user is editing
11849
+ * this field" and soften/hide the committed message:
11850
+ * - `refreshWarning`'s error->warning downgrade appends `hidden`;
11851
+ * - `handleErrorsDisplay`'s refresh branch re-creates the message born-hidden.
11852
+ * The one-shot flag above only covers the SYNCHRONOUS focusin dispatched
11853
+ * inside `.focus()`; a validation completion firing LATER in the same
11854
+ * cascade (a live-check waiter woken by the reveal pass's deferred release,
11855
+ * or the trailing silent global re-validation) runs after the `finally`
11856
+ * cleared it — and re-hid the very message the answer had just rendered.
11857
+ *
11858
+ * This slot records WHICH field currently holds an answer-placed focus, so
11859
+ * the two hide sites can tell answer-placed focus from user-placed focus,
11860
+ * for ANY caller, however late. A single slot is exact: only one active
11861
+ * element exists. Released on the first genuine user interaction (any
11862
+ * trusted native event reaching a form proxy while the one-shot flag is
11863
+ * down), so the deliberate mid-typing suppression re-engages the moment
11864
+ * the user actually edits.
11865
+ *
11866
+ * @private
11867
+ * @type {object|null} `{ formId, elName }` while an answer-placed focus is live, else `null`
11868
+ */
11869
+ var answerFocusHold = null;
11870
+
11871
+ /**
11872
+ * #B387 — does `answerFocusHold` name this exact field?
11873
+ *
11874
+ * @private
11875
+ * @param {string} formId - owning form id
11876
+ * @param {string} elName - field name
11877
+ * @returns {boolean} true while the answer-placed focus is live on this field
11878
+ */
11879
+ var isAnswerFocusHeldFor = function(formId, elName) {
11880
+ return ( answerFocusHold
11881
+ && answerFocusHold.formId === formId
11882
+ && answerFocusHold.elName === elName ) ? true : false;
11883
+ };
11884
+
11885
+ /**
11886
+ * #B387 — release the hold on the first genuine user interaction.
11887
+ *
11888
+ * Trusted-only: framework-internal `triggerEvent` dispatches are untrusted
11889
+ * CustomEvents and must not release it. The `isAnswerFocusInProgress`
11890
+ * guard keeps the answer's OWN synchronous focusin (trusted — the UA
11891
+ * generates it inside `.focus()`) from releasing the hold it is part of
11892
+ * delivering.
11893
+ *
11894
+ * @private
11895
+ * @param {object} event - the native event reaching a form proxy handler
11896
+ * @returns {void}
11897
+ */
11898
+ var releaseAnswerFocusHold = function(event) {
11899
+ if ( !answerFocusHold ) {
11900
+ return;
11901
+ }
11902
+ if ( event && event.isTrusted && !isAnswerFocusInProgress ) {
11903
+ answerFocusHold = null;
11904
+ }
11905
+ };
11906
+
11844
11907
  var refreshWarning = function($el) {
11845
11908
  var formId = $el.form.id || $el.form.getAttribute('id');
11846
11909
  var elName = $el.name || $el.form.getAttribute('name');
@@ -11857,7 +11920,19 @@ function ValidatorPlugin(rules, data, formId, culture) {
11857
11920
  if ( /form\-item\-warning/.test($parent.className) && currentElName != elName ) {
11858
11921
  $parent.className = $parent.className.replace(/form\-item\-warning/, 'form-item-error');
11859
11922
 
11860
- } else if (/form\-item\-error/.test($parent.className) && currentElName == elName ) {
11923
+ }
11924
+ // #B387 — `currentElName == elName` reads "the user is editing this
11925
+ // field", but the ANSWER's own focus move (#B319) also makes the field
11926
+ // the active element — and unlike the synchronous focusin, the async
11927
+ // completion callers arrive after the one-shot flag is already down.
11928
+ // While the answer-focus hold names this field the focus is
11929
+ // answer-placed, not user-placed: keep the message the answer just
11930
+ // rendered.
11931
+ // was: else if (/form\-item\-error/.test($parent.className) && currentElName == elName ) {
11932
+ else if (
11933
+ /form\-item\-error/.test($parent.className) && currentElName == elName
11934
+ && !isAnswerFocusHeldFor(formId, elName)
11935
+ ) {
11861
11936
  $parent.className = $parent.className.replace(/form\-item\-error/, 'form-item-warning');
11862
11937
  isErrorMessageHidden = true;
11863
11938
  }
@@ -12477,7 +12552,11 @@ function ValidatorPlugin(rules, data, formId, culture) {
12477
12552
  // blur. This "refresh" re-create runs AFTER refreshWarning in the live-check
12478
12553
  // global pass, so without this focus guard it re-shows the message mid-typing.
12479
12554
  // On blur (field no longer active) the message is created shown (focusout commits).
12480
- $err.setAttribute('class', ( document.activeElement && document.activeElement.name == name ) ? 'form-item-error-message hidden' : 'form-item-error-message');
12555
+ // #B387 same provenance refinement as refreshWarning's downgrade:
12556
+ // an answer-placed focus (#B319) must not read as "being typed in",
12557
+ // or this re-create clips the very message the answer delivered.
12558
+ // was: ( document.activeElement && document.activeElement.name == name ) ?
12559
+ $err.setAttribute('class', ( document.activeElement && document.activeElement.name == name && !isAnswerFocusHeldFor(id, name) ) ? 'form-item-error-message hidden' : 'form-item-error-message');
12481
12560
  // #A11Y5 — the branch below re-asserts aria-invalid="true" on this same
12482
12561
  // field, so when the message is hidden it must stay resolvable: clip it
12483
12562
  // out of view rather than out of the accessibility tree. Reads the class
@@ -18971,6 +19050,7 @@ function ValidatorPlugin(rules, data, formId, culture) {
18971
19050
  // are guarded fallbacks that no-op on a control).
18972
19051
  var resetProxyHandler = function(event) {
18973
19052
  var $el = event.target;
19053
+ releaseAnswerFocusHold(event); // #B387
18974
19054
  if (
18975
19055
  typeof(event.defaultPrevented) != 'undefined'
18976
19056
  && event.defaultPrevented
@@ -18989,6 +19069,7 @@ function ValidatorPlugin(rules, data, formId, culture) {
18989
19069
  };
18990
19070
  var keydownProxyHandler = function(event) {
18991
19071
  var $el = event.target;
19072
+ releaseAnswerFocusHold(event); // #B387
18992
19073
  if ( typeof(event.defaultPrevented) != 'undefined' && event.defaultPrevented )
18993
19074
  return false;
18994
19075
 
@@ -19007,6 +19088,7 @@ function ValidatorPlugin(rules, data, formId, culture) {
19007
19088
  };
19008
19089
  var keyupProxyHandler = function(event) {
19009
19090
  var $el = event.target;
19091
+ releaseAnswerFocusHold(event); // #B387
19010
19092
  if ( typeof(event.defaultPrevented) != 'undefined' && event.defaultPrevented )
19011
19093
  return false;
19012
19094
 
@@ -19026,6 +19108,7 @@ function ValidatorPlugin(rules, data, formId, culture) {
19026
19108
  };
19027
19109
  var focusinProxyHandler = function(event) {
19028
19110
  var $el = event.target;
19111
+ releaseAnswerFocusHold(event); // #B387
19029
19112
  if ( typeof(event.defaultPrevented) != 'undefined' && event.defaultPrevented )
19030
19113
  return false;
19031
19114
 
@@ -19060,6 +19143,7 @@ function ValidatorPlugin(rules, data, formId, culture) {
19060
19143
  };
19061
19144
  var focusoutProxyHandler = function(event) {
19062
19145
  var $el = event.target;
19146
+ releaseAnswerFocusHold(event); // #B387
19063
19147
  if ( typeof(event.defaultPrevented) != 'undefined' && event.defaultPrevented )
19064
19148
  return false;
19065
19149
 
@@ -19077,6 +19161,7 @@ function ValidatorPlugin(rules, data, formId, culture) {
19077
19161
  };
19078
19162
  var changeProxyHandler = function(event) {
19079
19163
  var $el = event.target;
19164
+ releaseAnswerFocusHold(event); // #B387
19080
19165
  if ( typeof(event.defaultPrevented) != 'undefined' && event.defaultPrevented )
19081
19166
  return false;
19082
19167
 
@@ -19093,6 +19178,7 @@ function ValidatorPlugin(rules, data, formId, culture) {
19093
19178
  };
19094
19179
  var clickProxyHandler = function(event) {
19095
19180
  var $el = event.target;
19181
+ releaseAnswerFocusHold(event); // #B387
19096
19182
 
19097
19183
  // a click target removed from the DOM during its own dispatch
19098
19184
  // (e.g. an upload preview's reset/delete link) has no parent by
@@ -19464,6 +19550,8 @@ function ValidatorPlugin(rules, data, formId, culture) {
19464
19550
  // no-op on an unfocusable host that still passes the
19465
19551
  // typeof-function gate above.
19466
19552
  if ( typeof(document) === 'undefined' || !document || document.activeElement === _aField ) {
19553
+ // #B387 — same provenance record as focusFirstInvalidField.
19554
+ answerFocusHold = { formId: $a11yForm.getAttribute('id'), elName: _aName };
19467
19555
  break;
19468
19556
  }
19469
19557
  }
@@ -20306,6 +20394,10 @@ function ValidatorPlugin(rules, data, formId, culture) {
20306
20394
  // so a failed submit announced nothing. Confirming it is also what makes the
20307
20395
  // "skips unfocusable controls" contract above true rather than aspirational.
20308
20396
  if ( typeof(document) === 'undefined' || !document || document.activeElement === $field ) {
20397
+ // #B387 — record the answer-placed focus so display
20398
+ // refreshes firing after the one-shot window (async
20399
+ // completion callers) can tell it from user focus.
20400
+ answerFocusHold = { formId: $form.getAttribute('id'), elName: name };
20309
20401
  return true;
20310
20402
  }
20311
20403
  }
@@ -20345,12 +20437,22 @@ function ValidatorPlugin(rules, data, formId, culture) {
20345
20437
  var $target = $formInstance.target;
20346
20438
  var validationInfo = getFormValidationInfos($target, $formInstance.rules);
20347
20439
 
20348
- validate($target, validationInfo.fields, validationInfo.$fields, $formInstance.rules, function onDisabledTriggerReveal(result) {
20440
+ var onDisabledTriggerReveal = function(result) {
20349
20441
  var errors = result['fields'] || result['error'];
20350
20442
  handleErrorsDisplay($target, errors, result['data']);
20351
20443
  focusFirstInvalidField($target, errors);
20352
20444
  updateSubmitTriggerState($formInstance, result.isValid());
20353
- });
20445
+ };
20446
+ // #B348 — completion identity. A reveal pass is un-latched, writes
20447
+ // neither `isSubmitting` nor `isValidating`, and on a VALID form its
20448
+ // verdict is clean — so with the async `query` field not declared
20449
+ // last its waiter completion matched NO dispatch branch and this
20450
+ // callback silently never ran: the documented self-heal + gate
20451
+ // re-sync were dead on those forms. The marker rides the exact cb of
20452
+ // the exact pass (the engine's own `cb._data`/`cb._errors` property
20453
+ // idiom); the waiter's terminal-gated rescue branch consults it.
20454
+ onDisabledTriggerReveal.isRevealCompletion = true;
20455
+ validate($target, validationInfo.fields, validationInfo.$fields, $formInstance.rules, onDisabledTriggerReveal);
20354
20456
  };
20355
20457
 
20356
20458
  /**
@@ -21156,6 +21258,29 @@ function ValidatorPlugin(rules, data, formId, culture) {
21156
21258
  //console.debug(field +' is NOT the last element to be validated for formId: '+ formId);
21157
21259
  needsGlobalReValidation = true;
21158
21260
  }
21261
+ // #B348 — the reveal's rescue: a TERMINAL completion
21262
+ // (same condition as the errors>0 block above — the
21263
+ // guard is what stops a multi-query-field early wake,
21264
+ // where the first waiter fires at asyncCount 1)
21265
+ // carrying the reveal's completion identity, that
21266
+ // matched none of the branches above, must dispatch
21267
+ // its own pass or `onDisabledTriggerReveal` starves:
21268
+ // clean verdict + un-latched + not live-check +
21269
+ // query-not-last fell through EVERY branch, the gate
21270
+ // marker never re-synced, and a fully valid form ate
21271
+ // every later click. Chained LAST so every
21272
+ // previously-working shape (terminal errors>0, #B342
21273
+ // latch, last-field, live-check display-only) stays
21274
+ // byte-identical; an un-latched programmatic submit
21275
+ // (#B347) carries no marker and is deliberately
21276
+ // unaffected — its fix is gated on its own repro.
21277
+ else if (
21278
+ hasParsedAllRules
21279
+ && asyncCount <= 0
21280
+ && cb && cb.isRevealCompletion
21281
+ ) {
21282
+ triggerEvent(gina, $formOrElement, 'validated.' + formId, cb);
21283
+ }
21159
21284
 
21160
21285
  if (needsGlobalReValidation) {
21161
21286
  validate($currentForm, allFields, $allFields, rules, function onSilentQueryGlobalLiveValidation(gResult){
@@ -27791,8 +27916,48 @@ function Collection(content, options) {
27791
27916
  }
27792
27917
 
27793
27918
 
27919
+ /**
27920
+ * Replaces each matched entry with `set`, wholesale — unlike `.update()`,
27921
+ * which merges. Matching is done in two stages: `filter` selects the entries
27922
+ * (same syntax as `.find()`), then each selected entry is located in the
27923
+ * result by comparing a single key against the same key on `set`.
27924
+ *
27925
+ * That comparison key is resolved per entry, from BOTH sides:
27926
+ *
27927
+ * 1. the internal `_uuid` when the stored entry AND `set` both carry one;
27928
+ * 2. otherwise `id`, when both carry one;
27929
+ * 3. otherwise the call throws — a `set` sharing no key with the stored
27930
+ * entry cannot be matched, and refusing is preferable to returning a
27931
+ * result that silently replaced nothing.
27932
+ *
27933
+ * Pass `key` to name the comparison key explicitly; it is then used as given,
27934
+ * with no fallback and no refusal.
27935
+ *
27936
+ * N.B. a chained result carries the internal `_uuid` on every entry the call
27937
+ * did not replace. Persist `.toRaw()` rather than the chained array if the
27938
+ * data is going to be re-loaded into a new Collection later.
27939
+ *
27940
+ * @param {object|Array} filter - Entry selector, as `.find()` — or an already-found result array
27941
+ * @param {object} set - The replacement entry (replaces the match wholesale)
27942
+ * @param {string} [key] - Explicit comparison key; skips the resolution above
27943
+ * @returns {Array} the chainable result set
27944
+ *
27945
+ * @throws {Error} `No comparison key defined !` when neither side shares a usable key
27946
+ *
27947
+ * @example
27948
+ * // matched by the internal _uuid when both sides carry it, else by id
27949
+ * col.replace({ id: 1 }, { id: 1, name: 'Alicia' });
27950
+ *
27951
+ * @example
27952
+ * // explicit comparison key
27953
+ * col.replace({ ref: 'r1' }, { ref: 'r1', name: 'Alicia' }, 'ref');
27954
+ */
27794
27955
  instance['replace'] = function() {
27795
27956
  var key = '_uuid' // comparison key
27957
+ // #B393 — whether the caller named the comparison key explicitly. An
27958
+ // explicit key is honoured as given (no fallback, no refusal), exactly
27959
+ // as before; only the DEFAULT `_uuid` path resolves a key below.
27960
+ , keyExplicit = false
27796
27961
  , result = null
27797
27962
  , filters = null
27798
27963
  , set = null
@@ -27802,6 +27967,7 @@ function Collection(content, options) {
27802
27967
 
27803
27968
  if ( typeof(arguments[arguments.length-1]) == 'string' ) {
27804
27969
  key = arguments[arguments.length - 1];
27970
+ keyExplicit = true;
27805
27971
  delete arguments[arguments.length - 1];
27806
27972
  --arguments.length;
27807
27973
  }
@@ -27847,13 +28013,50 @@ function Collection(content, options) {
27847
28013
  for (var a = 0, aLen = arr.length; a < aLen; ++a) {
27848
28014
  arr[a] = JSON.clone(set);
27849
28015
  for (var r = 0, rLen = result.length; r < rLen; ++r) {
27850
- if ( typeof(result[r][key]) == 'undefined' && key == '_uuid' && typeof(result[r]['id']) != 'undefined' ) {
27851
- key = 'id';
27852
- } else if (typeof(result[r][key]) == 'undefined' && key == '_uuid') {
27853
- throw new Error('No comparison key defined !')
28016
+ // #B393 resolve the comparison key from BOTH sides, per entry.
28017
+ //
28018
+ // Previously the key was chosen by inspecting the STORED entry
28019
+ // only, and was mutated in place. Two consequences, both fixed
28020
+ // here:
28021
+ //
28022
+ // (a) When the stored entry carried a `_uuid` and the caller's
28023
+ // `set` did not, neither the `id` fallback nor the refusal
28024
+ // fired (both were gated on the STORED entry lacking the
28025
+ // key), so the comparison was `<storedUuid> == undefined` —
28026
+ // never true. Nothing matched, nothing was replaced, and the
28027
+ // call returned a successful-looking result: a silent, lossy
28028
+ // write. A stored `_uuid` is present exactly when the caller
28029
+ // re-loaded an array a previous chained call had returned.
28030
+ // (b) `key` was assigned rather than shadowed, so once any entry
28031
+ // flipped it to `id` it stayed `id` for every later entry in
28032
+ // the same call.
28033
+ //
28034
+ // `cmpKey` is derived per (a, r) pair and the outer `key` is never
28035
+ // written, so a fallback can no longer leak across iterations.
28036
+ var cmpKey = key;
28037
+ if ( !keyExplicit ) {
28038
+ if (
28039
+ typeof(result[r][cmpKey]) == 'undefined'
28040
+ || typeof(arr[a][cmpKey]) == 'undefined'
28041
+ ) {
28042
+ if (
28043
+ typeof(result[r]['id']) != 'undefined'
28044
+ && typeof(arr[a]['id']) != 'undefined'
28045
+ ) {
28046
+ cmpKey = 'id';
28047
+ }
28048
+ }
28049
+ // No key both sides carry: refuse loudly rather than return a
28050
+ // result that silently replaced nothing.
28051
+ if (
28052
+ typeof(result[r][cmpKey]) == 'undefined'
28053
+ || typeof(arr[a][cmpKey]) == 'undefined'
28054
+ ) {
28055
+ throw new Error('No comparison key defined !')
28056
+ }
27854
28057
  }
27855
28058
 
27856
- if ( result[r][key] == arr[a][key] ) {
28059
+ if ( result[r][cmpKey] == arr[a][cmpKey] ) {
27857
28060
  result[r] = arr[a];
27858
28061
  break;
27859
28062
  }