gina 0.7.1 → 0.7.2

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 (628) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +39 -44
  3. package/ROADMAP.md +3 -0
  4. package/framework/v0.7.2/VERSION +1 -0
  5. package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +351 -24
  6. package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +726 -0
  7. package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  8. package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  9. package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/session-store.js +24 -6
  10. package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.js +90 -9
  11. package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-nunjucks.js +12 -5
  12. package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-xml.js +10 -2
  13. package/framework/{v0.7.1 → v0.7.2}/core/gna.js +15 -1
  14. package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/src/main.js +301 -12
  15. package/framework/{v0.7.1 → v0.7.2}/core/server.isaac.js +95 -13
  16. package/framework/{v0.7.1 → v0.7.2}/core/server.js +232 -7
  17. package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/index.js +2 -1
  18. package/framework/{v0.7.1 → v0.7.2}/core/template/conf/templates.json +1 -0
  19. package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/name.js +1 -1
  20. package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/inc/name.js +1 -1
  21. package/framework/v0.7.2/lib/error-ref/package.json +7 -0
  22. package/framework/v0.7.2/lib/error-ref/src/main.js +70 -0
  23. package/framework/{v0.7.1 → v0.7.2}/lib/index.js +12 -0
  24. package/framework/v0.7.2/lib/lane/package.json +7 -0
  25. package/framework/v0.7.2/lib/lane/src/main.js +1440 -0
  26. package/framework/v0.7.2/lib/sri/src/main.js +518 -0
  27. package/framework/{v0.7.1 → v0.7.2}/package.json +1 -1
  28. package/gna.js +4 -4
  29. package/llms.txt +11 -9
  30. package/package.json +6 -6
  31. package/schema/routing.json +7 -1
  32. package/types/index.d.ts +28 -0
  33. package/framework/v0.7.1/VERSION +0 -1
  34. package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -720
  35. package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  36. package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  37. package/framework/v0.7.1/lib/sri/src/main.js +0 -237
  38. /package/framework/{v0.7.1 → v0.7.2}/AUTHORS +0 -0
  39. /package/framework/{v0.7.1 → v0.7.2}/LICENSE +0 -0
  40. /package/framework/{v0.7.1 → v0.7.2}/core/asset/html/nolayout.html +0 -0
  41. /package/framework/{v0.7.1 → v0.7.2}/core/asset/html/static.html +0 -0
  42. /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/android-chrome-192x192.png +0 -0
  43. /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/android-chrome-512x512.png +0 -0
  44. /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/apple-touch-icon.png +0 -0
  45. /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon-16x16.png +0 -0
  46. /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon-32x32.png +0 -0
  47. /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon.ico +0 -0
  48. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/README.md +0 -0
  49. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  50. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  51. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  52. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  53. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  54. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  55. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  56. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  57. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  58. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  59. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  60. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  61. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  62. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  63. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  64. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  65. /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  66. /package/framework/{v0.7.1 → v0.7.2}/core/config.js +0 -0
  67. /package/framework/{v0.7.1 → v0.7.2}/core/config.requirements-anchor.js +0 -0
  68. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/ai/index.js +0 -0
  69. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/ai/lib/connector.js +0 -0
  70. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/index.js +0 -0
  71. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.js +0 -0
  72. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  73. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  74. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
  75. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.js +0 -0
  76. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  77. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  78. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/storage-store.js +0 -0
  79. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/duckdb/index.js +0 -0
  80. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/duckdb/lib/connector.js +0 -0
  81. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/index.js +0 -0
  82. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/connector.js +0 -0
  83. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/job-store.js +0 -0
  84. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  85. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/session-store.js +0 -0
  86. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mysql/index.js +0 -0
  87. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mysql/lib/connector.js +0 -0
  88. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/param-redact.js +0 -0
  89. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/postgresql/index.js +0 -0
  90. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/postgresql/lib/connector.js +0 -0
  91. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/index.js +0 -0
  92. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/connector.js +0 -0
  93. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/job-store.js +0 -0
  94. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/kv-store.js +0 -0
  95. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/render-cache-store.js +0 -0
  96. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/session-store.js +0 -0
  97. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/index.js +0 -0
  98. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/lib/connector.js +0 -0
  99. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/lib/session-store.js +0 -0
  100. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/settle-once.js +0 -0
  101. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sql-parser.js +0 -0
  102. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/index.js +0 -0
  103. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/connector.js +0 -0
  104. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/job-store.js +0 -0
  105. /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/kv-store.js +0 -0
  106. /package/framework/{v0.7.1 → v0.7.2}/core/content.encoding +0 -0
  107. /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.framework.js +0 -0
  108. /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-json.js +0 -0
  109. /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-nunjucks-async.js +0 -0
  110. /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-stream.js +0 -0
  111. /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-swig-async.js +0 -0
  112. /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-swig.js +0 -0
  113. /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-v1.js +0 -0
  114. /package/framework/{v0.7.1 → v0.7.2}/core/controller/index.js +0 -0
  115. /package/framework/{v0.7.1 → v0.7.2}/core/controller/inline-script.js +0 -0
  116. /package/framework/{v0.7.1 → v0.7.2}/core/controller/inspector-window-emit.js +0 -0
  117. /package/framework/{v0.7.1 → v0.7.2}/core/controller/release-banner.js +0 -0
  118. /package/framework/{v0.7.1 → v0.7.2}/core/dev/index.js +0 -0
  119. /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/class.js +0 -0
  120. /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/factory.js +0 -0
  121. /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/tools.js +0 -0
  122. /package/framework/{v0.7.1 → v0.7.2}/core/locales/README.md +0 -0
  123. /package/framework/{v0.7.1 → v0.7.2}/core/locales/currency.json +0 -0
  124. /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/language/en.json +0 -0
  125. /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/language/fr.json +0 -0
  126. /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/region/en.json +0 -0
  127. /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/region/fr.json +0 -0
  128. /package/framework/{v0.7.1 → v0.7.2}/core/locales/index.js +0 -0
  129. /package/framework/{v0.7.1 → v0.7.2}/core/mime.types +0 -0
  130. /package/framework/{v0.7.1 → v0.7.2}/core/model/entity.js +0 -0
  131. /package/framework/{v0.7.1 → v0.7.2}/core/model/index.js +0 -0
  132. /package/framework/{v0.7.1 → v0.7.2}/core/model/template/entityFactory.js +0 -0
  133. /package/framework/{v0.7.1 → v0.7.2}/core/model/template/index.js +0 -0
  134. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/README.md +0 -0
  135. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/index.js +0 -0
  136. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/README.md +0 -0
  137. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/package.json +0 -0
  138. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/src/main.js +0 -0
  139. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/README.md +0 -0
  140. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/README.md +0 -0
  141. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/package.json +0 -0
  142. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  143. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/README.md +0 -0
  144. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/package.json +0 -0
  145. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  146. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/README.md +0 -0
  147. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/package.json +0 -0
  148. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  149. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/README.md +0 -0
  150. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/package.json +0 -0
  151. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  152. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  153. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  154. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  155. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  156. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  157. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  158. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  159. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  160. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  161. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/package.json +0 -0
  162. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  163. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  164. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  165. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/src/main.js +0 -0
  166. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  167. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  168. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  169. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  170. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  171. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  172. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  173. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  174. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  175. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  176. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  177. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  178. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  179. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  180. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  181. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  182. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  183. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  184. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/README.md +0 -0
  185. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/package.json +0 -0
  186. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/src/main.js +0 -0
  187. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/README.md +0 -0
  188. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/build.json +0 -0
  189. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/package.json +0 -0
  190. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/src/main.js +0 -0
  191. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/README.md +0 -0
  192. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/build.json +0 -0
  193. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/package.json +0 -0
  194. /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
  195. /package/framework/{v0.7.1 → v0.7.2}/core/router.js +0 -0
  196. /package/framework/{v0.7.1 → v0.7.2}/core/server.express.js +0 -0
  197. /package/framework/{v0.7.1 → v0.7.2}/core/server.isaac.rapid-reset.js +0 -0
  198. /package/framework/{v0.7.1 → v0.7.2}/core/server.route-candidates.js +0 -0
  199. /package/framework/{v0.7.1 → v0.7.2}/core/status.codes +0 -0
  200. /package/framework/{v0.7.1 → v0.7.2}/core/template/_gitignore +0 -0
  201. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/app.json +0 -0
  202. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  203. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
  204. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
  205. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  206. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
  207. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  208. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  209. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  210. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  211. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/locales/en.json +0 -0
  212. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  213. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  214. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  215. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  216. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  217. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  218. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  219. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  220. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
  221. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/sw.js +0 -0
  222. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  223. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  224. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  225. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  226. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  227. /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  228. /package/framework/{v0.7.1 → v0.7.2}/core/template/command/gina.bat.tpl +0 -0
  229. /package/framework/{v0.7.1 → v0.7.2}/core/template/command/gina.tpl +0 -0
  230. /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/env.json +0 -0
  231. /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/manifest.json +0 -0
  232. /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/package.json +0 -0
  233. /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/settings.json +0 -0
  234. /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/statics.json +0 -0
  235. /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/401.json +0 -0
  236. /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/403.json +0 -0
  237. /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/404.json +0 -0
  238. /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/html/50x.html +0 -0
  239. /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/json/500.json +0 -0
  240. /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/json/503.json +0 -0
  241. /package/framework/{v0.7.1 → v0.7.2}/core/template/extensions/logger/config.json +0 -0
  242. /package/framework/{v0.7.1 → v0.7.2}/helpers/console.js +0 -0
  243. /package/framework/{v0.7.1 → v0.7.2}/helpers/context.js +0 -0
  244. /package/framework/{v0.7.1 → v0.7.2}/helpers/data/LICENSE +0 -0
  245. /package/framework/{v0.7.1 → v0.7.2}/helpers/data/README.md +0 -0
  246. /package/framework/{v0.7.1 → v0.7.2}/helpers/data/package.json +0 -0
  247. /package/framework/{v0.7.1 → v0.7.2}/helpers/data/src/main.js +0 -0
  248. /package/framework/{v0.7.1 → v0.7.2}/helpers/dateFormat.js +0 -0
  249. /package/framework/{v0.7.1 → v0.7.2}/helpers/index.js +0 -0
  250. /package/framework/{v0.7.1 → v0.7.2}/helpers/json/LICENSE +0 -0
  251. /package/framework/{v0.7.1 → v0.7.2}/helpers/json/README.md +0 -0
  252. /package/framework/{v0.7.1 → v0.7.2}/helpers/json/package.json +0 -0
  253. /package/framework/{v0.7.1 → v0.7.2}/helpers/json/src/main.js +0 -0
  254. /package/framework/{v0.7.1 → v0.7.2}/helpers/path.js +0 -0
  255. /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/README.md +0 -0
  256. /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/package.json +0 -0
  257. /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/src/api-error.js +0 -0
  258. /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/src/main.js +0 -0
  259. /package/framework/{v0.7.1 → v0.7.2}/helpers/prototypes.js +0 -0
  260. /package/framework/{v0.7.1 → v0.7.2}/helpers/task.js +0 -0
  261. /package/framework/{v0.7.1 → v0.7.2}/helpers/text.js +0 -0
  262. /package/framework/{v0.7.1 → v0.7.2}/lib/admin/package.json +0 -0
  263. /package/framework/{v0.7.1 → v0.7.2}/lib/admin/src/main.js +0 -0
  264. /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/README.md +0 -0
  265. /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/build.json +0 -0
  266. /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/package.json +0 -0
  267. /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/src/dep/jszip.min.js +0 -0
  268. /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/src/main.js +0 -0
  269. /package/framework/{v0.7.1 → v0.7.2}/lib/async/package.json +0 -0
  270. /package/framework/{v0.7.1 → v0.7.2}/lib/async/src/main.js +0 -0
  271. /package/framework/{v0.7.1 → v0.7.2}/lib/audit/package.json +0 -0
  272. /package/framework/{v0.7.1 → v0.7.2}/lib/audit/src/main.js +0 -0
  273. /package/framework/{v0.7.1 → v0.7.2}/lib/audit-store.js +0 -0
  274. /package/framework/{v0.7.1 → v0.7.2}/lib/authn/package.json +0 -0
  275. /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/lockout.js +0 -0
  276. /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/main.js +0 -0
  277. /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/totp.js +0 -0
  278. /package/framework/{v0.7.1 → v0.7.2}/lib/authz-gate/package.json +0 -0
  279. /package/framework/{v0.7.1 → v0.7.2}/lib/authz-gate/src/main.js +0 -0
  280. /package/framework/{v0.7.1 → v0.7.2}/lib/cache/README.md +0 -0
  281. /package/framework/{v0.7.1 → v0.7.2}/lib/cache/build.json +0 -0
  282. /package/framework/{v0.7.1 → v0.7.2}/lib/cache/package.json +0 -0
  283. /package/framework/{v0.7.1 → v0.7.2}/lib/cache/src/main.js +0 -0
  284. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/aliases.json +0 -0
  285. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/arguments.json +0 -0
  286. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/help.txt +0 -0
  287. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/verify.js +0 -0
  288. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/add.js +0 -0
  289. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/arguments.json +0 -0
  290. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/build.js +0 -0
  291. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/copy.js +0 -0
  292. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/cp.js +0 -0
  293. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/help.js +0 -0
  294. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/help.txt +0 -0
  295. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/boot-lines.js +0 -0
  296. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  297. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/list.js +0 -0
  298. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/man.js +0 -0
  299. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/mcp-start.js +0 -0
  300. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/mcp.js +0 -0
  301. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/oas.js +0 -0
  302. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/openapi.js +0 -0
  303. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/remove.js +0 -0
  304. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/rename.js +0 -0
  305. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/restart.js +0 -0
  306. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/rm.js +0 -0
  307. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/start.js +0 -0
  308. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/status.js +0 -0
  309. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/stop.js +0 -0
  310. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/types.js +0 -0
  311. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/arguments.json +0 -0
  312. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/clear.js +0 -0
  313. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/help.txt +0 -0
  314. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/stats.js +0 -0
  315. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/add.js +0 -0
  316. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/arguments.json +0 -0
  317. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/help.js +0 -0
  318. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/help.txt +0 -0
  319. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/infer.js +0 -0
  320. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/list.js +0 -0
  321. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/migrate.js +0 -0
  322. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/models.js +0 -0
  323. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/remove.js +0 -0
  324. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/rm.js +0 -0
  325. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/test.js +0 -0
  326. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/arguments.json +0 -0
  327. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/help.js +0 -0
  328. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/help.txt +0 -0
  329. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/man.js +0 -0
  330. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/ps.js +0 -0
  331. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/stop.js +0 -0
  332. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/add.js +0 -0
  333. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/arguments.json +0 -0
  334. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/help.txt +0 -0
  335. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/args.js +0 -0
  336. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/namespace.js +0 -0
  337. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  338. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/reference-scan.js +0 -0
  339. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/scaffold.js +0 -0
  340. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/remove.js +0 -0
  341. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/rename.js +0 -0
  342. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/rm.js +0 -0
  343. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/add.js +0 -0
  344. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/get.js +0 -0
  345. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/help.js +0 -0
  346. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/help.txt +0 -0
  347. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/inc/name.js +0 -0
  348. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/link-dev.js +0 -0
  349. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/list.js +0 -0
  350. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/remove.js +0 -0
  351. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/rm.js +0 -0
  352. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/set.js +0 -0
  353. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/unset.js +0 -0
  354. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/use.js +0 -0
  355. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/add.js +0 -0
  356. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/arguments.json +0 -0
  357. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/build.js +0 -0
  358. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/dot.js +0 -0
  359. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/get.js +0 -0
  360. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/help.js +0 -0
  361. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/help.txt +0 -0
  362. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/inc/ps-titles.js +0 -0
  363. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/init.js +0 -0
  364. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/link-node-modules.js +0 -0
  365. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/link.js +0 -0
  366. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/list.js +0 -0
  367. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/man.js +0 -0
  368. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/msg.json +0 -0
  369. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/open.js +0 -0
  370. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/remove.js +0 -0
  371. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/reset.js +0 -0
  372. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/restart.js +0 -0
  373. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/set.js +0 -0
  374. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/start.js +0 -0
  375. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/status.js +0 -0
  376. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/stop.js +0 -0
  377. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/tail.js +0 -0
  378. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/update.js +0 -0
  379. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/version.js +0 -0
  380. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina-dev.1.md +0 -0
  381. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina-framework.1.md +0 -0
  382. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina.1.md +0 -0
  383. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/helper.js +0 -0
  384. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/add.js +0 -0
  385. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/arguments.json +0 -0
  386. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/export.js +0 -0
  387. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/help.js +0 -0
  388. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/help.txt +0 -0
  389. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/import.js +0 -0
  390. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/scan.js +0 -0
  391. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/_host.js +0 -0
  392. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/arguments.json +0 -0
  393. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/build.js +0 -0
  394. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/help.js +0 -0
  395. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/help.txt +0 -0
  396. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/list.js +0 -0
  397. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/man.js +0 -0
  398. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/rm.js +0 -0
  399. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/run.js +0 -0
  400. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/index.js +0 -0
  401. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/help.js +0 -0
  402. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/help.txt +0 -0
  403. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/open.js +0 -0
  404. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/man-render.js +0 -0
  405. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/arguments.json +0 -0
  406. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/help.js +0 -0
  407. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/help.txt +0 -0
  408. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/kill.js +0 -0
  409. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/list.js +0 -0
  410. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/msg.json +0 -0
  411. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/help.js +0 -0
  412. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/help.txt +0 -0
  413. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/inc/scan.js +0 -0
  414. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/list.js +0 -0
  415. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/reset.js +0 -0
  416. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/set.js +0 -0
  417. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/add.js +0 -0
  418. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/arguments.json +0 -0
  419. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/backup.js +0 -0
  420. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/build.js +0 -0
  421. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/help.js +0 -0
  422. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/help.txt +0 -0
  423. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/import.js +0 -0
  424. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/list.js +0 -0
  425. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/man.js +0 -0
  426. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/move.js +0 -0
  427. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/remove.js +0 -0
  428. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/rename.js +0 -0
  429. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/restart.js +0 -0
  430. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/restore.js +0 -0
  431. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/rm.js +0 -0
  432. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/start.js +0 -0
  433. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/status.js +0 -0
  434. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/stop.js +0 -0
  435. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/arguments.json +0 -0
  436. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/help.js +0 -0
  437. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/help.txt +0 -0
  438. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/list.js +0 -0
  439. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/remove.js +0 -0
  440. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/set.js +0 -0
  441. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/add.js +0 -0
  442. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/help.js +0 -0
  443. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/help.txt +0 -0
  444. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/inc/name.js +0 -0
  445. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/link-local.js +0 -0
  446. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/link-production.js +0 -0
  447. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/list.js +0 -0
  448. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/remove.js +0 -0
  449. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/rm.js +0 -0
  450. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/use.js +0 -0
  451. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/arguments.json +0 -0
  452. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/check.js +0 -0
  453. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/help.js +0 -0
  454. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/help.txt +0 -0
  455. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/scan.js +0 -0
  456. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/help.js +0 -0
  457. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/help.txt +0 -0
  458. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/list.js +0 -0
  459. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/man.js +0 -0
  460. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/start.js +0 -0
  461. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/arguments.json +0 -0
  462. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/gc.js +0 -0
  463. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/help.txt +0 -0
  464. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/stats.js +0 -0
  465. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/verify.js +0 -0
  466. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/view/add.js +0 -0
  467. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd-status-format/package.json +0 -0
  468. /package/framework/{v0.7.1 → v0.7.2}/lib/cmd-status-format/src/main.js +0 -0
  469. /package/framework/{v0.7.1 → v0.7.2}/lib/collection/README.md +0 -0
  470. /package/framework/{v0.7.1 → v0.7.2}/lib/collection/build.json +0 -0
  471. /package/framework/{v0.7.1 → v0.7.2}/lib/collection/package.json +0 -0
  472. /package/framework/{v0.7.1 → v0.7.2}/lib/collection/src/main.js +0 -0
  473. /package/framework/{v0.7.1 → v0.7.2}/lib/conf-view/package.json +0 -0
  474. /package/framework/{v0.7.1 → v0.7.2}/lib/conf-view/src/main.js +0 -0
  475. /package/framework/{v0.7.1 → v0.7.2}/lib/config.js +0 -0
  476. /package/framework/{v0.7.1 → v0.7.2}/lib/connector-config/package.json +0 -0
  477. /package/framework/{v0.7.1 → v0.7.2}/lib/connector-config/src/main.js +0 -0
  478. /package/framework/{v0.7.1 → v0.7.2}/lib/connector-error/package.json +0 -0
  479. /package/framework/{v0.7.1 → v0.7.2}/lib/connector-error/src/main.js +0 -0
  480. /package/framework/{v0.7.1 → v0.7.2}/lib/connector-registry/package.json +0 -0
  481. /package/framework/{v0.7.1 → v0.7.2}/lib/connector-registry/src/main.js +0 -0
  482. /package/framework/{v0.7.1 → v0.7.2}/lib/cron/README.md +0 -0
  483. /package/framework/{v0.7.1 → v0.7.2}/lib/cron/package.json +0 -0
  484. /package/framework/{v0.7.1 → v0.7.2}/lib/cron/src/main.js +0 -0
  485. /package/framework/{v0.7.1 → v0.7.2}/lib/domain/LICENSE +0 -0
  486. /package/framework/{v0.7.1 → v0.7.2}/lib/domain/README.md +0 -0
  487. /package/framework/{v0.7.1 → v0.7.2}/lib/domain/package.json +0 -0
  488. /package/framework/{v0.7.1 → v0.7.2}/lib/domain/src/main.js +0 -0
  489. /package/framework/{v0.7.1 → v0.7.2}/lib/dto/package.json +0 -0
  490. /package/framework/{v0.7.1 → v0.7.2}/lib/dto/src/main.js +0 -0
  491. /package/framework/{v0.7.1 → v0.7.2}/lib/dto-pipe/package.json +0 -0
  492. /package/framework/{v0.7.1 → v0.7.2}/lib/dto-pipe/src/main.js +0 -0
  493. /package/framework/{v0.7.1 → v0.7.2}/lib/dto-types/package.json +0 -0
  494. /package/framework/{v0.7.1 → v0.7.2}/lib/dto-types/src/main.js +0 -0
  495. /package/framework/{v0.7.1 → v0.7.2}/lib/duration/package.json +0 -0
  496. /package/framework/{v0.7.1 → v0.7.2}/lib/duration/src/main.js +0 -0
  497. /package/framework/{v0.7.1 → v0.7.2}/lib/generator/index.js +0 -0
  498. /package/framework/{v0.7.1 → v0.7.2}/lib/i18n/package.json +0 -0
  499. /package/framework/{v0.7.1 → v0.7.2}/lib/i18n/src/main.js +0 -0
  500. /package/framework/{v0.7.1 → v0.7.2}/lib/idempotency/package.json +0 -0
  501. /package/framework/{v0.7.1 → v0.7.2}/lib/idempotency/src/main.js +0 -0
  502. /package/framework/{v0.7.1 → v0.7.2}/lib/image-build/package.json +0 -0
  503. /package/framework/{v0.7.1 → v0.7.2}/lib/image-build/src/main.js +0 -0
  504. /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/LICENSE +0 -0
  505. /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/README.md +0 -0
  506. /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/package.json +0 -0
  507. /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/src/main.js +0 -0
  508. /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-events/package.json +0 -0
  509. /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-events/src/main.js +0 -0
  510. /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-redact/package.json +0 -0
  511. /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-redact/src/main.js +0 -0
  512. /package/framework/{v0.7.1 → v0.7.2}/lib/instrument/package.json +0 -0
  513. /package/framework/{v0.7.1 → v0.7.2}/lib/instrument/src/main.js +0 -0
  514. /package/framework/{v0.7.1 → v0.7.2}/lib/job/package.json +0 -0
  515. /package/framework/{v0.7.1 → v0.7.2}/lib/job/src/main.js +0 -0
  516. /package/framework/{v0.7.1 → v0.7.2}/lib/job-store.js +0 -0
  517. /package/framework/{v0.7.1 → v0.7.2}/lib/json-config-header/package.json +0 -0
  518. /package/framework/{v0.7.1 → v0.7.2}/lib/json-config-header/src/main.js +0 -0
  519. /package/framework/{v0.7.1 → v0.7.2}/lib/kv/package.json +0 -0
  520. /package/framework/{v0.7.1 → v0.7.2}/lib/kv/src/main.js +0 -0
  521. /package/framework/{v0.7.1 → v0.7.2}/lib/kv-store.js +0 -0
  522. /package/framework/{v0.7.1 → v0.7.2}/lib/loading-state/package.json +0 -0
  523. /package/framework/{v0.7.1 → v0.7.2}/lib/loading-state/src/main.js +0 -0
  524. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/README.md +0 -0
  525. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/package.json +0 -0
  526. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/default/index.js +0 -0
  527. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/file/index.js +0 -0
  528. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/index.js +0 -0
  529. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/listener.js +0 -0
  530. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/speaker.js +0 -0
  531. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/helper.js +0 -0
  532. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/main.js +0 -0
  533. /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/redact.js +0 -0
  534. /package/framework/{v0.7.1 → v0.7.2}/lib/maintenance/package.json +0 -0
  535. /package/framework/{v0.7.1 → v0.7.2}/lib/maintenance/src/main.js +0 -0
  536. /package/framework/{v0.7.1 → v0.7.2}/lib/math/index.js +0 -0
  537. /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-dispatch/package.json +0 -0
  538. /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-dispatch/src/main.js +0 -0
  539. /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-http/package.json +0 -0
  540. /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-http/src/main.js +0 -0
  541. /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-server/package.json +0 -0
  542. /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-server/src/main.js +0 -0
  543. /package/framework/{v0.7.1 → v0.7.2}/lib/merge/README.md +0 -0
  544. /package/framework/{v0.7.1 → v0.7.2}/lib/merge/package.json +0 -0
  545. /package/framework/{v0.7.1 → v0.7.2}/lib/merge/src/main.js +0 -0
  546. /package/framework/{v0.7.1 → v0.7.2}/lib/message-validator/package.json +0 -0
  547. /package/framework/{v0.7.1 → v0.7.2}/lib/message-validator/src/main.js +0 -0
  548. /package/framework/{v0.7.1 → v0.7.2}/lib/metrics/package.json +0 -0
  549. /package/framework/{v0.7.1 → v0.7.2}/lib/metrics/src/main.js +0 -0
  550. /package/framework/{v0.7.1 → v0.7.2}/lib/model.js +0 -0
  551. /package/framework/{v0.7.1 → v0.7.2}/lib/money/package.json +0 -0
  552. /package/framework/{v0.7.1 → v0.7.2}/lib/money/src/main.js +0 -0
  553. /package/framework/{v0.7.1 → v0.7.2}/lib/multipart/package.json +0 -0
  554. /package/framework/{v0.7.1 → v0.7.2}/lib/multipart/src/main.js +0 -0
  555. /package/framework/{v0.7.1 → v0.7.2}/lib/net-locality/package.json +0 -0
  556. /package/framework/{v0.7.1 → v0.7.2}/lib/net-locality/src/main.js +0 -0
  557. /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/README.md +0 -0
  558. /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/package.json +0 -0
  559. /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/src/main.js +0 -0
  560. /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-resolver/package.json +0 -0
  561. /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-resolver/src/main.js +0 -0
  562. /package/framework/{v0.7.1 → v0.7.2}/lib/priority/package.json +0 -0
  563. /package/framework/{v0.7.1 → v0.7.2}/lib/priority/src/main.js +0 -0
  564. /package/framework/{v0.7.1 → v0.7.2}/lib/proc.js +0 -0
  565. /package/framework/{v0.7.1 → v0.7.2}/lib/push/package.json +0 -0
  566. /package/framework/{v0.7.1 → v0.7.2}/lib/push/src/main.js +0 -0
  567. /package/framework/{v0.7.1 → v0.7.2}/lib/rate-limit/package.json +0 -0
  568. /package/framework/{v0.7.1 → v0.7.2}/lib/rate-limit/src/main.js +0 -0
  569. /package/framework/{v0.7.1 → v0.7.2}/lib/release-watch/package.json +0 -0
  570. /package/framework/{v0.7.1 → v0.7.2}/lib/release-watch/src/main.js +0 -0
  571. /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache/package.json +0 -0
  572. /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache/src/main.js +0 -0
  573. /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache-store.js +0 -0
  574. /package/framework/{v0.7.1 → v0.7.2}/lib/routing/README.md +0 -0
  575. /package/framework/{v0.7.1 → v0.7.2}/lib/routing/build.json +0 -0
  576. /package/framework/{v0.7.1 → v0.7.2}/lib/routing/package.json +0 -0
  577. /package/framework/{v0.7.1 → v0.7.2}/lib/routing/src/main.js +0 -0
  578. /package/framework/{v0.7.1 → v0.7.2}/lib/routing-introspect/package.json +0 -0
  579. /package/framework/{v0.7.1 → v0.7.2}/lib/routing-introspect/src/main.js +0 -0
  580. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/package.json +0 -0
  581. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/env.js +0 -0
  582. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/exec.js +0 -0
  583. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/file.js +0 -0
  584. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/declaration.js +0 -0
  585. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/env-file.js +0 -0
  586. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/main.js +0 -0
  587. /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/sources.js +0 -0
  588. /package/framework/{v0.7.1 → v0.7.2}/lib/security-headers-emitter/package.json +0 -0
  589. /package/framework/{v0.7.1 → v0.7.2}/lib/security-headers-emitter/src/main.js +0 -0
  590. /package/framework/{v0.7.1 → v0.7.2}/lib/session-lifetime/package.json +0 -0
  591. /package/framework/{v0.7.1 → v0.7.2}/lib/session-lifetime/src/main.js +0 -0
  592. /package/framework/{v0.7.1 → v0.7.2}/lib/session-store.js +0 -0
  593. /package/framework/{v0.7.1 → v0.7.2}/lib/shell.js +0 -0
  594. /package/framework/{v0.7.1 → v0.7.2}/lib/sqlite-driver.js +0 -0
  595. /package/framework/{v0.7.1 → v0.7.2}/lib/sri/package.json +0 -0
  596. /package/framework/{v0.7.1 → v0.7.2}/lib/state.js +0 -0
  597. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/package.json +0 -0
  598. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local-cas.js +0 -0
  599. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local-stream.js +0 -0
  600. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local.js +0 -0
  601. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/main.js +0 -0
  602. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/meta-store.js +0 -0
  603. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/s3.js +0 -0
  604. /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/util.js +0 -0
  605. /package/framework/{v0.7.1 → v0.7.2}/lib/storage-store.js +0 -0
  606. /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/README.md +0 -0
  607. /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/package.json +0 -0
  608. /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/src/main.js +0 -0
  609. /package/framework/{v0.7.1 → v0.7.2}/lib/swig-resolver/package.json +0 -0
  610. /package/framework/{v0.7.1 → v0.7.2}/lib/swig-resolver/src/main.js +0 -0
  611. /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/package.json +0 -0
  612. /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/loaders/http.js +0 -0
  613. /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/loaders/memory.js +0 -0
  614. /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/main.js +0 -0
  615. /package/framework/{v0.7.1 → v0.7.2}/lib/url/README.md +0 -0
  616. /package/framework/{v0.7.1 → v0.7.2}/lib/url/index.js +0 -0
  617. /package/framework/{v0.7.1 → v0.7.2}/lib/url/routing.json +0 -0
  618. /package/framework/{v0.7.1 → v0.7.2}/lib/uuid/package.json +0 -0
  619. /package/framework/{v0.7.1 → v0.7.2}/lib/uuid/src/main.js +0 -0
  620. /package/framework/{v0.7.1 → v0.7.2}/lib/validator.js +0 -0
  621. /package/framework/{v0.7.1 → v0.7.2}/lib/watcher/package.json +0 -0
  622. /package/framework/{v0.7.1 → v0.7.2}/lib/watcher/src/main.js +0 -0
  623. /package/framework/{v0.7.1 → v0.7.2}/lib/ws-framing/package.json +0 -0
  624. /package/framework/{v0.7.1 → v0.7.2}/lib/ws-framing/src/main.js +0 -0
  625. /package/framework/{v0.7.1 → v0.7.2}/lib/ws-query/package.json +0 -0
  626. /package/framework/{v0.7.1 → v0.7.2}/lib/ws-query/src/main.js +0 -0
  627. /package/framework/{v0.7.1 → v0.7.2}/lib/ws-session/package.json +0 -0
  628. /package/framework/{v0.7.1 → v0.7.2}/lib/ws-session/src/main.js +0 -0
@@ -2086,7 +2086,17 @@ function ValidatorPlugin(rules, data, formId, culture) {
2086
2086
  uploadStarted : 'Upload started',
2087
2087
  uploadComplete : 'Upload complete',
2088
2088
  // #A11Y7/U5 — spoken when a staged file's reset/delete control removes it.
2089
- fileRemoved : '%s removed'
2089
+ fileRemoved : '%s removed',
2090
+ // #B724 (gh#83 part 1) — the visible text for a status-0 XHR settle. It fires for
2091
+ // a true transport failure AND for a reverse-proxy 413 arriving mid-send over
2092
+ // HTTP/2 or a navigation that aborted the request — both of which DID reach the
2093
+ // server. "did not complete" is honest for all three; the old "did not reach the
2094
+ // server" was false for the latter two. Resolved through a11yLabel() so a project
2095
+ // can translate it, which the hardcoded literal could not.
2096
+ transportError : 'Transport failure: the request did not complete',
2097
+ // #B726 (gh#83 part 3) — spoken once when a submit waits for one of its form's staged
2098
+ // uploads to finish; the submit is sent when the last of them settles.
2099
+ uploadPending : 'Waiting for the upload to finish…'
2090
2100
  };
2091
2101
 
2092
2102
  /**
@@ -2117,6 +2127,19 @@ function ValidatorPlugin(rules, data, formId, culture) {
2117
2127
  return A11Y_LABELS[key] || '';
2118
2128
  };
2119
2129
 
2130
+ // #B724 (gh#83 part 1) — track page unload once, at module load. A status-0 XHR
2131
+ // settle during a navigation (the browser aborts in-flight requests as the page tears
2132
+ // down) is an abort, not a transport failure; the flag lets the status-0 arm tag the
2133
+ // result `reason: 'unload'` so a consumer's submit-error handler can distinguish it.
2134
+ var _pageIsUnloading = false;
2135
+ if ( typeof(window) != 'undefined' && window.addEventListener ) {
2136
+ window.addEventListener('pagehide', function() { _pageIsUnloading = true; }, true);
2137
+ // #B728 — a page restored from the back-forward cache keeps its JS state, so the flag the
2138
+ // `pagehide` above set would still be true and every later status-0 settle would be tagged
2139
+ // `unload`. The `pageshow` that restores the page ends that unload.
2140
+ window.addEventListener('pageshow', function() { _pageIsUnloading = false; }, true);
2141
+ }
2142
+
2120
2143
  /**
2121
2144
  * announceA11yStatus — announce a non-error status through the form's region.
2122
2145
  *
@@ -4297,7 +4320,13 @@ function ValidatorPlugin(rules, data, formId, culture) {
4297
4320
  result = {
4298
4321
  'status' : 408,
4299
4322
  'transportError': true,
4300
- 'error' : 'Transport failure: the request did not reach the server'
4323
+ // #B724 (gh#83 part 1) — a status-0 settle also fires for a 413
4324
+ // arriving mid-send over HTTP/2 and for a navigation that aborted
4325
+ // the request, both of which DID reach the server. `reason` lets a
4326
+ // submit-error handler tell an unload-abort (benign) from a real
4327
+ // transport failure; the text is overridable + honest (see a11yLabel).
4328
+ 'reason' : _pageIsUnloading ? 'unload' : 'transport',
4329
+ 'error' : a11yLabel('transportError')
4301
4330
  };
4302
4331
 
4303
4332
  $form.eventData.error = result;
@@ -4920,6 +4949,172 @@ function ValidatorPlugin(rules, data, formId, culture) {
4920
4949
  });
4921
4950
  };
4922
4951
 
4952
+ /**
4953
+ * getStagedUploadsInFlight — #B726: the staged uploads of a form whose staging request is
4954
+ * on the wire.
4955
+ *
4956
+ * A staged file input points at its virtual `gina-upload-*` form through
4957
+ * `data-gina-form-virtual`, written on every selection. That form's record carries `sent`,
4958
+ * which `send()` sets only AFTER `xhr.send()` and clears when the request settles (readyState
4959
+ * 4 and the `loadend` fail-safe). So `sent` reads true exactly while a staging request is in
4960
+ * flight — unlike `isSending`, which is claimed before the request opens and stays true for
4961
+ * good when something throws before it is sent.
4962
+ *
4963
+ * `form.elements` is walked so that a staged input reassociated with `form="<id>"` counts.
4964
+ *
4965
+ * @inner
4966
+ * @param {HTMLFormElement} $formEl - the REAL form (never its virtual upload form)
4967
+ * @returns {Array<string>} the ids of the virtual upload forms still in flight; empty when none
4968
+ *
4969
+ * @example
4970
+ * getStagedUploadsInFlight(document.getElementById('profile')); // ['gina-upload-avatar']
4971
+ */
4972
+ var getStagedUploadsInFlight = function($formEl) {
4973
+ var inFlight = [];
4974
+ if ( !$formEl || !$formEl.elements ) {
4975
+ return inFlight;
4976
+ }
4977
+ var $controls = $formEl.elements, $control = null, virtualId = null;
4978
+ for (var c = 0, cLen = $controls.length; c < cLen; ++c) {
4979
+ $control = $controls[c];
4980
+ if ( !$control || $control.type != 'file' || typeof($control.getAttribute) != 'function' ) {
4981
+ continue;
4982
+ }
4983
+ virtualId = $control.getAttribute('data-gina-form-virtual');
4984
+ if (
4985
+ virtualId
4986
+ && typeof(instance.$forms[virtualId]) != 'undefined'
4987
+ && /^true$/i.test(instance.$forms[virtualId].sent)
4988
+ && inFlight.indexOf(virtualId) < 0
4989
+ ) {
4990
+ inFlight.push(virtualId);
4991
+ }
4992
+ }
4993
+ return inFlight;
4994
+ };
4995
+
4996
+ /**
4997
+ * holdSubmitForStagedUploads — #B726: make a submit WAIT while one of its form's staged
4998
+ * uploads is in flight, instead of posting the upload's still-empty hidden fields.
4999
+ *
5000
+ * Called at the top of both submit doors, before the payload is collected. When an upload is
5001
+ * in flight it records ONE wait on the form's record (`stagedUploadWait`), keeps the busy
5002
+ * state the gesture armed, announces the wait once through the form's live region
5003
+ * (`a11yLabel('uploadPending')`) and tells the caller to stop. When the last upload settles,
5004
+ * `resolveStagedUploadWait` either runs `replay` — which re-enters the same door, so the
5005
+ * fields are collected again, now filled — or, if an upload failed, sends nothing.
5006
+ *
5007
+ * A gesture made while a wait is pending adds nothing; one made when a wait is recorded but
5008
+ * nothing is in flight any more drops the wait and goes through.
5009
+ *
5010
+ * @inner
5011
+ * @param {HTMLFormElement} $formEl - the real form being submitted
5012
+ * @param {function} replay - re-runs this submit through the door it came in by
5013
+ * @returns {boolean} true when the submit must stop here: it is waiting, or a wait is pending
5014
+ *
5015
+ * @example
5016
+ * if ( holdSubmitForStagedUploads($form, function() { $form.requestSubmit(); }) ) {
5017
+ * return; // the submit runs again once the upload settles
5018
+ * }
5019
+ */
5020
+ var holdSubmitForStagedUploads = function($formEl, replay) {
5021
+ var formId = ( $formEl && typeof($formEl.getAttribute) == 'function' ) ? $formEl.getAttribute('id') : null;
5022
+ var $formRecord = ( formId && typeof(instance.$forms[formId]) != 'undefined' ) ? instance.$forms[formId] : null;
5023
+ if ( !$formRecord ) {
5024
+ return false;
5025
+ }
5026
+ var inFlight = getStagedUploadsInFlight($formEl);
5027
+ if ( $formRecord.stagedUploadWait ) {
5028
+ if ( inFlight.length > 0 ) {
5029
+ return true; // one wait per form
5030
+ }
5031
+ // nothing is on the wire any more: a settle this wait never heard of
5032
+ $formRecord.stagedUploadWait = null;
5033
+ return false;
5034
+ }
5035
+ if ( inFlight.length == 0 ) {
5036
+ return false;
5037
+ }
5038
+ $formRecord.stagedUploadWait = { replay: replay, failed: false };
5039
+ announceA11yStatus($formEl, a11yLabel('uploadPending'));
5040
+ if (envIsDev) {
5041
+ try { console.info('[FormValidator][upload] form `#'+ formId +'`: submit waiting for '+ inFlight.length +' staged upload(s) to finish ('+ inFlight.join(', ') +')'); } catch (e) {}
5042
+ }
5043
+ return true;
5044
+ };
5045
+
5046
+ /**
5047
+ * noteStagedUploadSettled — #B726: called by `onUpload` for every staging outcome.
5048
+ *
5049
+ * When the real form has a submit waiting, a failure marks the wait as failed, and the
5050
+ * decision is left to a microtask: it runs after the whole XHR settle has finished — the
5051
+ * hidden fields filled on success, or the error rendered — and even when the rest of
5052
+ * `onUpload` throws. Every outcome of one settle has been recorded by then, including a
5053
+ * success that `onUpload` turned into an error.
5054
+ *
5055
+ * @inner
5056
+ * @param {HTMLFormElement|undefined} $formEl - the real form (`uploadProperties.$form`)
5057
+ * @param {string} status - `success`, or anything else for a failure
5058
+ * @returns {undefined}
5059
+ *
5060
+ * @example
5061
+ * noteStagedUploadSettled(document.getElementById('profile'), 'error');
5062
+ */
5063
+ var noteStagedUploadSettled = function($formEl, status) {
5064
+ var formId = ( $formEl && typeof($formEl.getAttribute) == 'function' ) ? $formEl.getAttribute('id') : null;
5065
+ var $formRecord = ( formId && typeof(instance.$forms[formId]) != 'undefined' ) ? instance.$forms[formId] : null;
5066
+ if ( !$formRecord || !$formRecord.stagedUploadWait ) {
5067
+ return;
5068
+ }
5069
+ if ( status != 'success' ) {
5070
+ $formRecord.stagedUploadWait.failed = true;
5071
+ }
5072
+ var decide = function onStagedUploadSettled() { resolveStagedUploadWait($formEl); };
5073
+ if ( typeof(queueMicrotask) == 'function' ) {
5074
+ queueMicrotask(decide);
5075
+ } else {
5076
+ Promise.resolve().then(decide);
5077
+ }
5078
+ };
5079
+
5080
+ /**
5081
+ * resolveStagedUploadWait — #B726: decide a waiting submit once a staged upload settled.
5082
+ *
5083
+ * Still waiting while another upload of the form is in flight. Otherwise the wait ends: when
5084
+ * every upload succeeded the submit is replayed through its own door; when one failed, or the
5085
+ * form has left the page, nothing is sent and the busy state the gesture armed is released —
5086
+ * unless the form has a request of its own in flight, whose settle owns that state (#B247).
5087
+ * No announcement on a failure: the upload already announced the server's message, and a
5088
+ * second write in the same beat would replace it.
5089
+ *
5090
+ * @inner
5091
+ * @param {HTMLFormElement} $formEl - the real form
5092
+ * @returns {undefined}
5093
+ *
5094
+ * @example
5095
+ * resolveStagedUploadWait(document.getElementById('profile'));
5096
+ */
5097
+ var resolveStagedUploadWait = function($formEl) {
5098
+ var formId = ( $formEl && typeof($formEl.getAttribute) == 'function' ) ? $formEl.getAttribute('id') : null;
5099
+ var $formRecord = ( formId && typeof(instance.$forms[formId]) != 'undefined' ) ? instance.$forms[formId] : null;
5100
+ if ( !$formRecord || !$formRecord.stagedUploadWait ) {
5101
+ return;
5102
+ }
5103
+ var wait = $formRecord.stagedUploadWait;
5104
+ var isDetached = ( typeof($formEl.isConnected) != 'undefined' && !$formEl.isConnected );
5105
+ if ( !isDetached && getStagedUploadsInFlight($formEl).length > 0 ) {
5106
+ return;
5107
+ }
5108
+ $formRecord.stagedUploadWait = null;
5109
+ if ( wait.failed || isDetached ) {
5110
+ if ( !/^true$/i.test($formRecord.isSending) ) {
5111
+ disarmSubmitLoading($formRecord);
5112
+ }
5113
+ return;
5114
+ }
5115
+ wait.replay();
5116
+ };
5117
+
4923
5118
  var onUpload = function(gina, $target, status, id, data) {
4924
5119
 
4925
5120
  var uploadProperties = $target.uploadProperties || null;
@@ -4946,6 +5141,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
4946
5141
  // #R8 slice 2 — the dropzone (if bound) returns to idle at the same
4947
5142
  // single chokepoint
4948
5143
  updateUploadDropzoneState(uploadProperties.dropzoneContainer || null, 'idle');
5144
+ // #B726 — a submit of the real form may be waiting for this upload; it is decided once
5145
+ // this whole settle has run (see noteStagedUploadSettled)
5146
+ noteStagedUploadSettled(uploadProperties.$form, status);
4949
5147
  // parent form
4950
5148
  // var $mainForm = uploadProperties.$form;
4951
5149
  var $uploadTriger = document.getElementById(uploadProperties.uploadTriggerId);
@@ -4975,7 +5173,16 @@ function ValidatorPlugin(rules, data, formId, culture) {
4975
5173
  // console.error('[ mainUploadError ] ', status, data)
4976
5174
  var errMsg = data.message || data.error;
4977
5175
 
4978
- $error.innerHTML = '<p>'+ errMsg +'</p>';
5176
+ // #B727 — render the server's error message as TEXT, never HTML. A non-JSON
5177
+ // error response is kept verbatim as `result.message` (see the XHR response
5178
+ // handler), so `innerHTML` here parsed a proxy/WAF HTML error page — or a
5179
+ // reflected upload filename (the server rejects a disallowed extension by
5180
+ // echoing the name) — as live markup. textContent closes the injection sink;
5181
+ // the <p> wrapper is kept for the existing styling + fadeIn.
5182
+ $error.textContent = '';
5183
+ var _errP = document.createElement('p');
5184
+ _errP.textContent = errMsg;
5185
+ $error.appendChild(_errP);
4979
5186
  fadeIn($error);
4980
5187
  // #A11Y7/U3 — the container is `display:none` when the text is written and
4981
5188
  // only revealed by the fadeIn above, which is exactly the case where a
@@ -4987,8 +5194,22 @@ function ValidatorPlugin(rules, data, formId, culture) {
4987
5194
  if ( $uploadTriger && $uploadTriger.form ) {
4988
5195
  announceA11yError($uploadTriger.form, $error.textContent);
4989
5196
  }
4990
- } else if(!$error && status != 'success') {
4991
- throw new Error(errMsg)
5197
+ } else if ( status != 'success' ) {
5198
+ // #B731 — no error element. Every error site calls onUpload BEFORE it dispatches
5199
+ // `error.<id>` and the declared `data-gina-form-upload-on-error` callback, so the
5200
+ // throw this branch held (`new Error(undefined)`: `errMsg` is assigned only in the
5201
+ // branch above) cancelled both. The message is announced instead of shown, and the
5202
+ // dispatch goes on.
5203
+ // was: } else if(!$error && status != 'success') {
5204
+ // was: throw new Error(errMsg)
5205
+ var noSlotMsg = data.message || data.error;
5206
+ noSlotMsg = ( typeof(noSlotMsg) == 'undefined' || noSlotMsg === null ) ? '' : String(noSlotMsg);
5207
+ if ( $uploadTriger && $uploadTriger.form && noSlotMsg != '' ) {
5208
+ announceA11yError($uploadTriger.form, noSlotMsg);
5209
+ }
5210
+ if (envIsDev) {
5211
+ try { console.warn('[FormValidator] upload `#'+ uploadProperties.uploadTriggerId +'`: no error element `#'+ uploadProperties.errorField +'`; the staging error is announced, not shown'); } catch (warnErr) {}
5212
+ }
4992
5213
  } else {
4993
5214
  // #A11Y7/U2 — success is the other end of the `uploadStarted` transition.
4994
5215
  // It lives in this branch rather than at the indicator chokepoint above so
@@ -8005,6 +8226,9 @@ function ValidatorPlugin(rules, data, formId, culture) {
8005
8226
  // or
8006
8227
  // $form.target.dataset.ginaFormIsResetting = true;
8007
8228
  // handleErrorsDisplay($form.target, {});
8229
+ // #B726 — a submit waiting for a staged upload belongs to the binding being torn down:
8230
+ // drop it, so that upload's settle never replays a submit on an unbound form
8231
+ $form.stagedUploadWait = null;
8008
8232
  $form.binded = false;
8009
8233
 
8010
8234
  return $form;
@@ -8651,12 +8875,23 @@ function ValidatorPlugin(rules, data, formId, culture) {
8651
8875
  var url = $el.getAttribute('data-gina-form-upload-action');
8652
8876
  var name = $el.getAttribute('name');
8653
8877
  var fileId = name;
8654
- var uploadFormId = 'gina-upload-' + name.replace(/\[/g, '-').replace(/\]/g, '-' + $form.id);
8878
+ // #B732 — the virtual form id must be unique per form. A bracketed name
8879
+ // already carries the form id (once per `]`), but a bracket-less one
8880
+ // (`doc`) gave `gina-upload-doc` in EVERY form, so two forms with
8881
+ // same-named staged inputs shared one virtual form: the second form's
8882
+ // upload filled the first form's hidden fields and left its own empty.
8883
+ // was: var uploadFormId = 'gina-upload-' + name.replace(/\[/g, '-').replace(/\]/g, '-' + $form.id);
8884
+ var uploadFormId = 'gina-upload-' + name.replace(/\[/g, '-').replace(/\]/g, '-' + $form.id) + ( (/\]/.test(name)) ? '' : '-' + $form.id );
8655
8885
  $el.setAttribute('data-gina-form-virtual', uploadFormId);
8656
8886
  var eventOnSuccess = $el.getAttribute('data-gina-form-upload-on-success');
8657
8887
  var eventOnError = $el.getAttribute('data-gina-form-upload-on-error');
8658
8888
  var eventOnProgress = $el.getAttribute('data-gina-form-upload-on-progress'); // #R8
8659
- var errorField = null;
8889
+ // #B731 — the error slot is an attribute of THIS file input (default
8890
+ // `<id>-error`), read once. It was recomputed for every <input> of the real
8891
+ // form and kept the last one's, so a custom slot was honoured only when the
8892
+ // file input was the form's last input.
8893
+ // was: var errorField = null;
8894
+ var errorField = $el.getAttribute('data-gina-form-upload-error') || ( ($el.id) ? $el.id + '-error' : null );
8660
8895
  // #B572 — which popin, if any, this upload belongs to is decided by
8661
8896
  // CONTAINMENT (the popin the real form is inside), captured ONCE per
8662
8897
  // selection and read by every site below — never by "some popin is open"
@@ -8689,10 +8924,31 @@ function ValidatorPlugin(rules, data, formId, culture) {
8689
8924
  }
8690
8925
 
8691
8926
  if ( !$uploadForm ) {
8692
- try {
8693
- $uploadForm = getFormById(uploadFormId) || null;
8694
- } catch (noExistingFormErr) {
8695
- // do nothing
8927
+ // #B733 — `getFormById()` returns the validator RECORD, not the form
8928
+ // element, and every line below treats `$uploadForm` as the element
8929
+ // (`setAttribute`, `appendChild`). A record is still registered here
8930
+ // when an earlier selection's virtual form has left the document: a
8931
+ // popin close wipes the content but nothing destroys that record, so
8932
+ // after a reopen the next selection threw and sent nothing. A record's
8933
+ // element is reused only while it is in the document; a detached one
8934
+ // is destroyed (its own `destroy()` removes its listeners and their
8935
+ // registry entries, so the new form binds afresh) and a new form is built.
8936
+ // was:
8937
+ // try {
8938
+ // $uploadForm = getFormById(uploadFormId) || null;
8939
+ // } catch (noExistingFormErr) {
8940
+ // // do nothing
8941
+ // }
8942
+ var $knownUpload = instance.$forms[uploadFormId] || null;
8943
+ if ( $knownUpload && $knownUpload.target && $knownUpload.target.isConnected ) {
8944
+ $uploadForm = $knownUpload.target;
8945
+ } else if ( $knownUpload ) {
8946
+ try {
8947
+ $knownUpload.destroy();
8948
+ } catch (staleUploadErr) {
8949
+ // a record that cannot unbind must still never be reused
8950
+ }
8951
+ delete instance.$forms[uploadFormId];
8696
8952
  }
8697
8953
 
8698
8954
  if (!$uploadForm) {
@@ -8783,7 +9039,8 @@ function ValidatorPlugin(rules, data, formId, culture) {
8783
9039
  fieldType = formInputsFields[h].getAttribute('type');
8784
9040
  hiddenField = null;
8785
9041
  _name = null, _userName = null;
8786
- errorField= formInputsFields[h].getAttribute('data-gina-form-upload-error') || fieldId + '-error' || null;
9042
+ // #B731 — read once from the file input, above
9043
+ // was: errorField= formInputsFields[h].getAttribute('data-gina-form-upload-error') || fieldId + '-error' || null;
8787
9044
 
8788
9045
  if (fieldType && /hidden/i.test(fieldType) ) {
8789
9046
  hiddenField = formInputsFields[h];
@@ -8906,6 +9163,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
8906
9163
  if (eventOnProgress) {
8907
9164
  $uploadForm.setAttribute('data-gina-form-event-on-upload-progress', eventOnProgress);
8908
9165
  }
9166
+ // #B729 — a file chosen while this input's previous staging request is
9167
+ // still on the wire supersedes that request: the input now shows the new
9168
+ // file, so only the new file's metadata may reach the form. Without this
9169
+ // the one-request-at-a-time gate in send() returned silently, the new
9170
+ // selection was never sent, and the earlier request filled the form with
9171
+ // the file the user had just replaced. A superseded request settles
9172
+ // through `abort.<id>` only: no error, no on-error callback.
9173
+ $uploadForm.setAttribute('data-gina-form-sync', 'replace');
8909
9174
 
8910
9175
 
8911
9176
  // adding for to current document
@@ -10243,6 +10508,13 @@ function ValidatorPlugin(rules, data, formId, culture) {
10243
10508
  // return;
10244
10509
  // }
10245
10510
 
10511
+ // #B726 (gh#83 part 3) — a staged upload of this form still on the wire would post
10512
+ // its hidden fields empty: wait for it, then re-run this click, which collects them
10513
+ // again once filled. Placed before the latch below, so there is nothing to release.
10514
+ if ( holdSubmitForStagedUploads($target, function replayStagedUploadClick() { triggerEvent(gina, $submit, evt); }) ) {
10515
+ return;
10516
+ }
10517
+
10246
10518
  var validatorInfos = getFormValidationInfos($target, rules);
10247
10519
  fields = validatorInfos.fields;
10248
10520
  $fields = validatorInfos.$fields;
@@ -10499,6 +10771,14 @@ function ValidatorPlugin(rules, data, formId, culture) {
10499
10771
  cancelEvent(e);
10500
10772
  }
10501
10773
 
10774
+ // #B726 (gh#83 part 3) — the same wait as the click door: a click inside the button,
10775
+ // Enter in a form with no submit button, `<input type=submit>`, requestSubmit() and
10776
+ // `$forms[id].submit()` all arrive here. Only once the native submit is cancelled above:
10777
+ // an earlier return would let the browser post the form itself.
10778
+ if ( (withRules || isBinded) && holdSubmitForStagedUploads($target, function replayStagedUploadSubmit() { triggerEvent(gina, $target, 'submit'); }) ) {
10779
+ return false;
10780
+ }
10781
+
10502
10782
 
10503
10783
  // just collect data over forms
10504
10784
  // getting fields & values
@@ -10560,6 +10840,10 @@ function ValidatorPlugin(rules, data, formId, culture) {
10560
10840
  fields[name] = '';
10561
10841
  }
10562
10842
 
10843
+ } else if ( $target[i].type == 'file' && $target[i].getAttribute('data-gina-form-upload-action') ) {
10844
+ // #B725 (gh#83 part 2) — a staged file input's `.value` is the browser
10845
+ // placeholder `C:\fakepath\<name>`; its real data travels through the
10846
+ // staged hidden fields, so keep it out of the XHR payload.
10563
10847
  } else {
10564
10848
  fields[name] = $target[i].value;
10565
10849
  }
@@ -11421,6 +11705,11 @@ function ValidatorPlugin(rules, data, formId, culture) {
11421
11705
  fields[name] = '';
11422
11706
  }
11423
11707
 
11708
+ } else if ( $form[i].type == 'file' && $form[i].getAttribute('data-gina-form-upload-action') ) {
11709
+ // #B725 (gh#83 part 2) — a staged file input's `.value` is the browser
11710
+ // placeholder `C:\fakepath\<name>`; its real data travels through the staged
11711
+ // hidden fields, so keep it out of the XHR payload. The element is still
11712
+ // registered in `$fields` below for any rule that inspects it.
11424
11713
  } else {
11425
11714
  fields[name] = $form[i].value;
11426
11715
  }
@@ -400,6 +400,61 @@ function ServerEngineClass(options) {
400
400
  return fs.readFileSync(filename).toString()
401
401
  }
402
402
 
403
+ /**
404
+ * Appends field names to a response's `Vary` header (RFC 9110 § 12.5.5).
405
+ * `Vary` is a list, so a value already set (by a middleware, by the
406
+ * configured `server.response.header`, or by the caller) is kept: a name
407
+ * already listed, in any case, is not added again, and nothing is added
408
+ * after a `*`, which already varies on everything. Takes one name, a
409
+ * comma-separated list, or an array of either, so a value read back with
410
+ * `getHeader('vary')` can be passed straight in to restore it. Does nothing
411
+ * once the headers are sent. Keep in sync with the twin in core/server.js
412
+ * (#B743).
413
+ *
414
+ * @inner
415
+ * @private
416
+ * @param {object} response - Server response object (HTTP/1.x, or the HTTP/2 compatibility API)
417
+ * @param {string|string[]|null|undefined} names - Field name(s) to add; an empty value adds nothing
418
+ * @returns {void}
419
+ *
420
+ * @example
421
+ * // Vary: Origin → Vary: Origin, Accept-Encoding
422
+ * appendVary(response, 'Accept-Encoding');
423
+ */
424
+ var appendVary = function(response, names) {
425
+ if (
426
+ !response
427
+ || typeof(response.getHeader) != 'function'
428
+ || typeof(response.setHeader) != 'function'
429
+ || response.headersSent
430
+ ) {
431
+ return;
432
+ }
433
+ var list = ( Array.isArray(names) ) ? names.join(',') : names;
434
+ if ( typeof(list) == 'undefined' || list === null || String(list).trim() === '' ) {
435
+ return;
436
+ }
437
+ var current = response.getHeader('vary');
438
+ if ( Array.isArray(current) ) {
439
+ current = current.join(', ');
440
+ }
441
+ current = ( typeof(current) == 'undefined' || current === null ) ? '' : String(current).trim();
442
+ var present = ( current === '' ) ? [] : current.toLowerCase().split(',').map(function(n) { return n.trim(); });
443
+ var added = [];
444
+ String(list).split(',').forEach(function(n) {
445
+ n = n.trim();
446
+ if ( n === '' || present.indexOf('*') > -1 || present.indexOf(n.toLowerCase()) > -1 ) {
447
+ return;
448
+ }
449
+ present.push(n.toLowerCase());
450
+ added.push(n);
451
+ });
452
+ if ( added.length == 0 ) {
453
+ return;
454
+ }
455
+ response.setHeader('vary', ( current === '' ) ? added.join(', ') : current +', '+ added.join(', '));
456
+ }
457
+
403
458
  var preferedEncoding = options.preferedCompressionEncodingOrder
404
459
  , acceptEncodingArr = null
405
460
  , acceptEncoding = null
@@ -2493,20 +2548,19 @@ function ServerEngineClass(options) {
2493
2548
  }
2494
2549
 
2495
2550
 
2496
- if (
2497
- request.method.toUpperCase() === 'GET' && /\_gina\/assets\/routing\.json(?:\?|$)/i.test(request.url)
2498
- ) {
2551
+ // #P48 — the path alone: a versioned fetch carries `?v=<token>` (request.url
2552
+ // is query-stripped only further down). #B707 — the lookup is lower-cased to
2553
+ // agree with the case-insensitive test (`findOne` compares strictly, so a
2554
+ // `Routing.json` GET found nothing and dereferenced null below — an
2555
+ // uncaughtException that killed the bundle), and a miss falls through to the
2556
+ // shared pipeline, whose handler answers from memory or 404s.
2557
+ var _routingPath = ( request.method.toUpperCase() === 'GET' ) ? request.url.split('?')[0] : null;
2558
+ localAsset = ( _routingPath && /\_gina\/assets\/routing\.json$/i.test(_routingPath) )
2559
+ ? assetsCollection.findOne({ file: _routingPath.split(/\//g).slice(-1).toString().toLowerCase() })
2560
+ : null;
2561
+ if ( localAsset ) {
2499
2562
  // server.toApi(reques, response)
2500
2563
  // console.debug('[ SERVER ][200] '+ request.url);
2501
- // #B717 — a query string no longer misses the handler (`(?:\?|$)`), and the asset
2502
- // lookup reads the file name the test matched: the url's last segment of
2503
- // `routing.json?x` named no asset, and the `localAsset.mime` read below would
2504
- // have thrown. Not the query-free path's last segment either — the test also
2505
- // matches `/x?y=/_gina/assets/routing.json`, whose path names `x`.
2506
- // #B707 — the name is lower-cased: the test is case-insensitive while `findOne`
2507
- // compares strictly, so `Routing.json` named no asset and the `localAsset.mime`
2508
- // read below threw — an uncaughtException that ended the process.
2509
- localAsset = assetsCollection.findOne({ file: /\_gina\/assets\/(routing\.json)(?:\?|$)/i.exec(request.url)[1].toLowerCase() });
2510
2564
  // #B66 — on a proxied deployment serve the host-stripped routing.json so
2511
2565
  // the browser never receives any bundle's INTERNAL scheme://host:port (an
2512
2566
  // information disclosure) and cross-bundle client toUrl resolves
@@ -2528,6 +2582,14 @@ function ServerEngineClass(options) {
2528
2582
  : ( options.clientRoutingAssets ? options.clientRoutingAssets.fullEtag : null );
2529
2583
  response.setHeader('content-type', localAsset.mime);
2530
2584
  response.setHeader('vary', 'Origin');
2585
+ // #B743 — in production the table's precompressed copy (`.br`, `.gz`)
2586
+ // is served when the request accepts its coding (below), over both
2587
+ // protocols, so the answer varies on Accept-Encoding too. Set before the
2588
+ // ETag 304 below, so the 304 carries the Vary its 200 would (RFC 9110
2589
+ // § 15.4.5).
2590
+ if ( !isCacheless ) {
2591
+ appendVary(response, 'Accept-Encoding');
2592
+ }
2531
2593
  // #B66 — a shared cache must not cross-serve the stripped (proxied) and
2532
2594
  // full (raw) variants under the same URL; mark the proxied variant
2533
2595
  // private. Slice 3 (SPA Tier 1): `no-cache` = revalidate-before-use — each
@@ -2535,6 +2597,19 @@ function ServerEngineClass(options) {
2535
2597
  // new route table reaches returning browsers immediately instead of
2536
2598
  // after the old 24h max-age window.
2537
2599
  response.setHeader('cache-control', ( request._ginaIsProxyHost === true ) ? 'private, no-cache' : 'public, no-cache');
2600
+ // #P48 — a request naming the token of the variant actually served (the
2601
+ // page's `data-gina-routing-v`) may keep the table for a year; mirrors the
2602
+ // core/server.js handler (the /_gina/* sync rule). Keyed on the file served,
2603
+ // so the full map is never marked immutable under the stripped token.
2604
+ var _routingAssetVersion = ( options.clientRoutingAssets )
2605
+ ? ( ( localAsset.file === 'routing.stripped.json' ) ? options.clientRoutingAssets.strippedVersion : options.clientRoutingAssets.fullVersion )
2606
+ : null;
2607
+ if (
2608
+ _routingAssetVersion
2609
+ && lib.sri.getRequestedVersion(request.originalUrl || request.url) === _routingAssetVersion
2610
+ ) {
2611
+ response.setHeader('cache-control', ( ( request._ginaIsProxyHost === true ) ? 'private' : 'public' ) + ', max-age=31536000, immutable');
2612
+ }
2538
2613
  response.setHeader('x-content-type-options', 'nosniff');
2539
2614
  response.setHeader('x-frame-options', 'DENY');
2540
2615
  response.setHeader('x-xss-protection', '1; mode=block');
@@ -2553,10 +2628,14 @@ function ServerEngineClass(options) {
2553
2628
  }
2554
2629
 
2555
2630
  var filename = _(localAsset.path +'/'+ localAsset.file, true);
2631
+ // #B742 — the coding's NAME (`gzip`), kept beside its file extension
2632
+ // (`acceptEncoding`, `.gz`): Content-Encoding takes the name.
2633
+ var acceptEncodingName = null;
2556
2634
  if (acceptEncodingArr) {
2557
2635
  for (let e=0, eLen=preferedEncoding.length; e<eLen; e++) {
2558
2636
  if ( acceptEncodingArr && acceptEncodingArr.indexOf(preferedEncoding[e]) > -1 ) {
2559
2637
  acceptEncoding = options.coreConfiguration.encoding[ preferedEncoding[e] ] ;
2638
+ acceptEncodingName = preferedEncoding[e];
2560
2639
  break;
2561
2640
  }
2562
2641
  }
@@ -2570,7 +2649,10 @@ function ServerEngineClass(options) {
2570
2649
  isBinary = true;
2571
2650
  filename += acceptEncoding;
2572
2651
  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Encoding
2573
- response.setHeader('content-encoding', acceptEncoding.replace(/^\./, ''));
2652
+ // was: response.setHeader('content-encoding', acceptEncoding.replace(/^\./, ''));
2653
+ // #B742 — the extension without its dot is not a coding name for gzip
2654
+ // (`gz`), and a browser does not decode such a response.
2655
+ response.setHeader('content-encoding', acceptEncodingName);
2574
2656
  // override content length
2575
2657
  response.setHeader('content-length', fs.statSync(filename).size);
2576
2658
  }