gina 0.4.3-alpha.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +6 -4
  3. package/ROADMAP.md +4 -4
  4. package/framework/v0.4.3/VERSION +1 -0
  5. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -2
  6. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +133 -0
  7. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +142 -39
  8. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +498 -496
  9. package/framework/v0.4.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  10. package/framework/v0.4.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  11. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/gna.js +54 -0
  12. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/validator/src/main.js +129 -10
  13. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/server.isaac.js +3 -0
  14. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/server.js +151 -0
  15. package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/conf/settings.json +5 -1
  16. package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/service/help.txt +14 -0
  17. package/framework/v0.4.3/lib/cmd/service/start.js +219 -0
  18. package/framework/v0.4.3/package.json +10 -0
  19. package/gna.js +4 -4
  20. package/llms.txt +9 -1
  21. package/package.json +6 -5
  22. package/framework/v0.4.3-alpha.1/VERSION +0 -1
  23. package/framework/v0.4.3-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  24. package/framework/v0.4.3-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  25. package/framework/v0.4.3-alpha.1/package.json +0 -9
  26. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/AUTHORS +0 -0
  27. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/LICENSE +0 -0
  28. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/html/nolayout.html +0 -0
  29. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/html/static.html +0 -0
  30. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/img/android-chrome-192x192.png +0 -0
  31. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/img/android-chrome-512x512.png +0 -0
  32. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/img/apple-touch-icon.png +0 -0
  33. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/img/favicon-16x16.png +0 -0
  34. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/img/favicon-32x32.png +0 -0
  35. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/img/favicon.ico +0 -0
  36. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/README.md +0 -0
  37. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  38. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  39. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  40. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  41. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  42. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  43. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  44. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  45. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  46. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  47. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  48. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  49. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  50. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  51. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  52. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/config.js +0 -0
  53. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/ai/index.js +0 -0
  54. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/ai/lib/connector.js +0 -0
  55. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/index.js +0 -0
  56. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/lib/connector.js +0 -0
  57. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  58. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  59. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
  60. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/lib/session-store.js +0 -0
  61. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  62. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  63. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/mongodb/index.js +0 -0
  64. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/mongodb/lib/connector.js +0 -0
  65. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  66. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/mongodb/lib/session-store.js +0 -0
  67. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/mysql/index.js +0 -0
  68. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/mysql/lib/connector.js +0 -0
  69. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/postgresql/index.js +0 -0
  70. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/postgresql/lib/connector.js +0 -0
  71. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/redis/index.js +0 -0
  72. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/redis/lib/session-store.js +0 -0
  73. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/scylladb/index.js +0 -0
  74. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/scylladb/lib/connector.js +0 -0
  75. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/scylladb/lib/session-store.js +0 -0
  76. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/sql-parser.js +0 -0
  77. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/sqlite/index.js +0 -0
  78. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/sqlite/lib/connector.js +0 -0
  79. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/connectors/sqlite/lib/session-store.js +0 -0
  80. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/content.encoding +0 -0
  81. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/controller.framework.js +0 -0
  82. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/controller.js +0 -0
  83. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/controller.render-json.js +0 -0
  84. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/controller.render-nunjucks.js +0 -0
  85. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/controller.render-stream.js +0 -0
  86. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/controller.render-swig.js +0 -0
  87. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/controller.render-v1.js +0 -0
  88. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/index.js +0 -0
  89. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/controller/inspector-window-emit.js +0 -0
  90. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/busboy-1.6.0/LICENSE +0 -0
  91. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/busboy-1.6.0/README.md +0 -0
  92. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  93. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  94. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  95. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  96. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/busboy-1.6.0/package.json +0 -0
  97. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  98. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  99. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/deps/streamsearch-1.1.0/package.json +0 -0
  100. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/dev/index.js +0 -0
  101. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/dev/lib/class.js +0 -0
  102. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/dev/lib/factory.js +0 -0
  103. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/dev/lib/tools.js +0 -0
  104. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/locales/README.md +0 -0
  105. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/locales/currency.json +0 -0
  106. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/locales/dist/language/en.json +0 -0
  107. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/locales/dist/language/fr.json +0 -0
  108. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/locales/dist/region/en.json +0 -0
  109. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/locales/dist/region/fr.json +0 -0
  110. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/locales/index.js +0 -0
  111. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/mime.types +0 -0
  112. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/model/entity.js +0 -0
  113. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/model/index.js +0 -0
  114. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/model/template/entityFactory.js +0 -0
  115. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/model/template/index.js +0 -0
  116. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/README.md +0 -0
  117. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/index.js +0 -0
  118. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/csrf/README.md +0 -0
  119. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/csrf/package.json +0 -0
  120. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/csrf/src/main.js +0 -0
  121. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/README.md +0 -0
  122. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
  123. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
  124. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  125. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
  126. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
  127. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  128. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
  129. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
  130. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  131. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
  132. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
  133. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  134. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  135. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  136. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  137. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  138. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  139. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  140. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  141. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  142. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  143. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/package.json +0 -0
  144. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  145. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  146. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  147. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/src/main.js +0 -0
  148. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  149. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  150. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  151. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  152. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  153. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  154. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  155. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  156. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  157. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  158. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  159. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  160. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  161. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  162. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  163. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  164. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  165. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  166. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/session/README.md +0 -0
  167. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/session/package.json +0 -0
  168. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/session/src/main.js +0 -0
  169. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/storage/README.md +0 -0
  170. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/storage/build.json +0 -0
  171. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/storage/package.json +0 -0
  172. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/storage/src/main.js +0 -0
  173. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/validator/README.md +0 -0
  174. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/validator/build.json +0 -0
  175. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/validator/package.json +0 -0
  176. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/plugins/lib/validator/src/form-validator.js +0 -0
  177. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/router.js +0 -0
  178. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/server.express.js +0 -0
  179. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/status.codes +0 -0
  180. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/_gitignore +0 -0
  181. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/config/app.json +0 -0
  182. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  183. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
  184. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
  185. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  186. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
  187. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  188. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  189. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  190. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  191. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/index.js +0 -0
  192. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
  193. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  194. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  195. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  196. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  197. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  198. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  199. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  200. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
  201. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
  202. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  203. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  204. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  205. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  206. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  207. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/command/gina.bat.tpl +0 -0
  208. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/command/gina.tpl +0 -0
  209. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/conf/env.json +0 -0
  210. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/conf/manifest.json +0 -0
  211. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/conf/package.json +0 -0
  212. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/conf/statics.json +0 -0
  213. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/conf/templates.json +0 -0
  214. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/error/client/json/401.json +0 -0
  215. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/error/client/json/403.json +0 -0
  216. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/error/client/json/404.json +0 -0
  217. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/error/server/html/50x.html +0 -0
  218. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/error/server/json/500.json +0 -0
  219. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/error/server/json/503.json +0 -0
  220. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/core/template/extensions/logger/config.json +0 -0
  221. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/console.js +0 -0
  222. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/context.js +0 -0
  223. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/data/LICENSE +0 -0
  224. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/data/README.md +0 -0
  225. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/data/package.json +0 -0
  226. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/data/src/main.js +0 -0
  227. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/dateFormat.js +0 -0
  228. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/index.js +0 -0
  229. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/json/LICENSE +0 -0
  230. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/json/README.md +0 -0
  231. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/json/package.json +0 -0
  232. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/json/src/main.js +0 -0
  233. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/path.js +0 -0
  234. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/plugins/README.md +0 -0
  235. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/plugins/package.json +0 -0
  236. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/plugins/src/api-error.js +0 -0
  237. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/plugins/src/main.js +0 -0
  238. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/prototypes.js +0 -0
  239. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/task.js +0 -0
  240. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/helpers/text.js +0 -0
  241. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/archiver/README.md +0 -0
  242. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/archiver/build.json +0 -0
  243. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/archiver/package.json +0 -0
  244. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/archiver/src/dep/jszip.min.js +0 -0
  245. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/archiver/src/main.js +0 -0
  246. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/async/package.json +0 -0
  247. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/async/src/main.js +0 -0
  248. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cache/README.md +0 -0
  249. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cache/build.json +0 -0
  250. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cache/package.json +0 -0
  251. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cache/src/main.js +0 -0
  252. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/aliases.json +0 -0
  253. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/add.js +0 -0
  254. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/arguments.json +0 -0
  255. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/build.js +0 -0
  256. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/copy.js +0 -0
  257. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/cp.js +0 -0
  258. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/help.js +0 -0
  259. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/help.txt +0 -0
  260. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  261. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/list.js +0 -0
  262. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/mcp-start.js +0 -0
  263. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/mcp.js +0 -0
  264. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/oas.js +0 -0
  265. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/openapi.js +0 -0
  266. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/remove.js +0 -0
  267. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/rename.js +0 -0
  268. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/restart.js +0 -0
  269. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/rm.js +0 -0
  270. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/start.js +0 -0
  271. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/status.js +0 -0
  272. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/bundle/stop.js +0 -0
  273. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/cache/stats.js +0 -0
  274. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/add.js +0 -0
  275. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/arguments.json +0 -0
  276. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/help.js +0 -0
  277. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/help.txt +0 -0
  278. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/list.js +0 -0
  279. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/migrate.js +0 -0
  280. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/remove.js +0 -0
  281. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/connector/rm.js +0 -0
  282. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/add.js +0 -0
  283. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/get.js +0 -0
  284. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/help.js +0 -0
  285. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/help.txt +0 -0
  286. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/link-dev.js +0 -0
  287. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/list.js +0 -0
  288. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/remove.js +0 -0
  289. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/rm.js +0 -0
  290. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/set.js +0 -0
  291. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/unset.js +0 -0
  292. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/env/use.js +0 -0
  293. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/arguments.json +0 -0
  294. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/build.js +0 -0
  295. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/dot.js +0 -0
  296. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/get.js +0 -0
  297. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/help.js +0 -0
  298. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/help.txt +0 -0
  299. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/init.js +0 -0
  300. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/link-node-modules.js +0 -0
  301. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/link.js +0 -0
  302. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/msg.json +0 -0
  303. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/open.js +0 -0
  304. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/restart.js +0 -0
  305. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/set.js +0 -0
  306. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/start.js +0 -0
  307. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/status.js +0 -0
  308. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/stop.js +0 -0
  309. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/tail.js +0 -0
  310. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/update.js +0 -0
  311. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/framework/version.js +0 -0
  312. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/gina-dev.1.md +0 -0
  313. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/gina-framework.1.md +0 -0
  314. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/gina.1.md +0 -0
  315. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/helper.js +0 -0
  316. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/i18n/add.js +0 -0
  317. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/i18n/arguments.json +0 -0
  318. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/i18n/export.js +0 -0
  319. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/i18n/help.js +0 -0
  320. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/i18n/help.txt +0 -0
  321. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/i18n/import.js +0 -0
  322. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/i18n/scan.js +0 -0
  323. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/index.js +0 -0
  324. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/inspector/help.js +0 -0
  325. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/inspector/help.txt +0 -0
  326. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/inspector/open.js +0 -0
  327. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/minion/arguments.json +0 -0
  328. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/minion/help.js +0 -0
  329. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/minion/help.txt +0 -0
  330. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/minion/kill.js +0 -0
  331. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/minion/list.js +0 -0
  332. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/msg.json +0 -0
  333. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/port/help.js +0 -0
  334. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/port/help.txt +0 -0
  335. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/port/inc/scan.js +0 -0
  336. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/port/list.js +0 -0
  337. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/port/reset.js +0 -0
  338. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/port/set.js +0 -0
  339. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/add.js +0 -0
  340. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/arguments.json +0 -0
  341. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/build.js +0 -0
  342. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/help.js +0 -0
  343. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/help.txt +0 -0
  344. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/import.js +0 -0
  345. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/list.js +0 -0
  346. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/move.js +0 -0
  347. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/remove.js +0 -0
  348. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/rename.js +0 -0
  349. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/restart.js +0 -0
  350. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/rm.js +0 -0
  351. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/start.js +0 -0
  352. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/status.js +0 -0
  353. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/project/stop.js +0 -0
  354. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/protocol/arguments.json +0 -0
  355. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/protocol/help.js +0 -0
  356. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/protocol/help.txt +0 -0
  357. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/protocol/list.js +0 -0
  358. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/protocol/remove.js +0 -0
  359. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/protocol/set.js +0 -0
  360. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/add.js +0 -0
  361. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/help.js +0 -0
  362. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/help.txt +0 -0
  363. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/link-local.js +0 -0
  364. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/link-production.js +0 -0
  365. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/list.js +0 -0
  366. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/remove.js +0 -0
  367. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/rm.js +0 -0
  368. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/scope/use.js +0 -0
  369. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/secrets/arguments.json +0 -0
  370. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/secrets/check.js +0 -0
  371. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/secrets/help.js +0 -0
  372. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/secrets/help.txt +0 -0
  373. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/secrets/scan.js +0 -0
  374. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/service/help.js +0 -0
  375. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/service/list.js +0 -0
  376. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd/view/add.js +0 -0
  377. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd-status-format/package.json +0 -0
  378. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cmd-status-format/src/main.js +0 -0
  379. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/collection/README.md +0 -0
  380. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/collection/build.json +0 -0
  381. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/collection/package.json +0 -0
  382. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/collection/src/main.js +0 -0
  383. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/config.js +0 -0
  384. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/connector-registry/package.json +0 -0
  385. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/connector-registry/src/main.js +0 -0
  386. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cron/README.md +0 -0
  387. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cron/package.json +0 -0
  388. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/cron/src/main.js +0 -0
  389. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/domain/LICENSE +0 -0
  390. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/domain/README.md +0 -0
  391. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/domain/package.json +0 -0
  392. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/domain/src/main.js +0 -0
  393. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/generator/index.js +0 -0
  394. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/i18n/package.json +0 -0
  395. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/i18n/src/main.js +0 -0
  396. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/index.js +0 -0
  397. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/inherits/LICENSE +0 -0
  398. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/inherits/README.md +0 -0
  399. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/inherits/package.json +0 -0
  400. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/inherits/src/main.js +0 -0
  401. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/inspector-redact/package.json +0 -0
  402. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/inspector-redact/src/main.js +0 -0
  403. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/instrument/package.json +0 -0
  404. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/instrument/src/main.js +0 -0
  405. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/job/package.json +0 -0
  406. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/job/src/main.js +0 -0
  407. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/README.md +0 -0
  408. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/package.json +0 -0
  409. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/containers/default/index.js +0 -0
  410. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/containers/file/index.js +0 -0
  411. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  412. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  413. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/containers/mq/index.js +0 -0
  414. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/containers/mq/listener.js +0 -0
  415. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/containers/mq/speaker.js +0 -0
  416. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/helper.js +0 -0
  417. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/logger/src/main.js +0 -0
  418. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/math/index.js +0 -0
  419. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/mcp-dispatch/package.json +0 -0
  420. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/mcp-dispatch/src/main.js +0 -0
  421. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/mcp-http/package.json +0 -0
  422. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/mcp-http/src/main.js +0 -0
  423. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/mcp-server/package.json +0 -0
  424. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/mcp-server/src/main.js +0 -0
  425. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/merge/README.md +0 -0
  426. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/merge/package.json +0 -0
  427. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/merge/src/main.js +0 -0
  428. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/metrics/package.json +0 -0
  429. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/metrics/src/main.js +0 -0
  430. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/model.js +0 -0
  431. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/nunjucks-filters/README.md +0 -0
  432. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/nunjucks-filters/package.json +0 -0
  433. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/nunjucks-filters/src/main.js +0 -0
  434. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/nunjucks-resolver/package.json +0 -0
  435. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/nunjucks-resolver/src/main.js +0 -0
  436. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/proc.js +0 -0
  437. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/routing/README.md +0 -0
  438. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/routing/build.json +0 -0
  439. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/routing/package.json +0 -0
  440. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/routing/src/main.js +0 -0
  441. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/routing/src/radix.js +0 -0
  442. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/routing-introspect/package.json +0 -0
  443. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/routing-introspect/src/main.js +0 -0
  444. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/secrets/package.json +0 -0
  445. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/secrets/src/backends/env.js +0 -0
  446. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/secrets/src/main.js +0 -0
  447. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/session-store.js +0 -0
  448. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/shell.js +0 -0
  449. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/state.js +0 -0
  450. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/swig-filters/README.md +0 -0
  451. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/swig-filters/package.json +0 -0
  452. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/swig-filters/src/main.js +0 -0
  453. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/swig-resolver/package.json +0 -0
  454. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/swig-resolver/src/main.js +0 -0
  455. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/url/README.md +0 -0
  456. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/url/index.js +0 -0
  457. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/url/routing.json +0 -0
  458. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/uuid/package.json +0 -0
  459. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/uuid/src/main.js +0 -0
  460. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/validator.js +0 -0
  461. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/watcher/package.json +0 -0
  462. /package/framework/{v0.4.3-alpha.1 → v0.4.3}/lib/watcher/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,23 @@ 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.4.3 - 2026-06-04
10
+
11
+ _Additive release — the standalone Inspector connects over an authenticated WebSocket (with `gina service:start` and dev auto-start), `FormValidator` reflects validity into `aria-invalid` (#A11Y1), the popin / link / validator plugins drop inline `onclick` for strict-CSP compatibility, and the `@rhinostone/swig` floor moves to `^2.6.0`. No breaking changes, no settings reset._
12
+
13
+ ### Added
14
+ * Added an authenticated WebSocket transport for the Inspector agent endpoint (/_gina/agent), alongside the existing SSE channel. The standalone Inspector can stream a bundle data + log feed over a single WebSocket. Outside dev mode the upgrade requires the configured inspector.agent.key (presented via ?key= or the x-gina-inspector-key header) and honours an optional inspector.agent.allowedOrigins Origin allowlist.
15
+ * The standalone Inspector SPA can stream a bundle data + log feed over the WebSocket transport by opening with ?transport=ws (SSE stays the default and the automatic fallback if the socket cannot open). The optional ?key= is threaded on the WebSocket URL for an auth-gated endpoint.
16
+ * Added a `gina service:start <service>` command to start a framework-internal @gina service (such as the standalone Inspector) via the daemon-free gina-container launcher, with double-start protection, `--dry-run` and `--format=json`. In dev mode the Inspector now auto-starts when a bundle boots (a no-op unless the framework services project is scaffolded locally).
17
+ * FormValidator now reflects each managed field's validity into `aria-invalid` (#A11Y1): `true` on a committed error and `false` when valid — mirroring the native `ValidityState` where the field has native HTML constraints, so it agrees with the `:user-invalid` styling already shown. This exposes any `aria-errormessage` association on the field to assistive technology, which is otherwise inert without `aria-invalid`. When the field already references an error element via `aria-errormessage`, the redundant `form-item-error-message` div is suppressed; legacy forms with no association keep the injected div and gain an `aria-errormessage` wire to it. On a failed submit, focus moves to the first invalid field so assistive technology announces it; blur-time errors are announced through a per-form visually-hidden `aria-live="polite"` region. No public API change; existing error classes and attributes (`form-item-error`, `form-item-error-message`, `data-gina-form-errors`, submit-button state) are unchanged.
18
+ ### Changed
19
+ * The standalone Inspector now connects to the /_gina/agent endpoint over a WebSocket by default, falling back to SSE automatically if the socket cannot open. Open the Inspector with ?transport=sse to force the SSE transport. Authentication and the production toggle are unchanged (the WebSocket reuses the same inspector.agent key).
20
+ * Bumped the @rhinostone/swig dependency floor from ^2.5.1 to ^2.5.3 in both the root package.json and framework/v*/package.json. swig 2.5.2 fixes dynamic {% extends %} resolution on the async-loader render path in the Twig and Jinja2 frontends; 2.5.3 turns a dynamic {% extends %} on the synchronous render path into a clear error pointing to the async render path instead of a generic failure. The native @rhinostone/swig package stays drop-in compatible with the API gina depends on (swig.compile, swig.setFilter, swig.setTag, swig.renderFile). swigResolver DEFAULT_MIN stays at 2.0.0 — the framework does not depend on any new 2.5.x-only API.
21
+ * Bumped the @rhinostone/swig floor to ^2.6.0 in both the root and framework manifests. 2.6.0 makes the native json / json_encode filters HTML-escape their output and marks them (and url_encode) safe, so {{ data|json }} is safe to embed directly inside a <script> block (url_decode is unchanged). swigResolver DEFAULT_MIN stays at 2.0.0 — the framework depends on no new 2.6.0-only API.
22
+ ### Fixed
23
+ * Popin close elements no longer get an inline onclick="return false;" attribute injected at bind time, so popins work under a strict nonce-based Content-Security-Policy (the inline handler tripped the script-src-attr directive). Default-action suppression is unchanged — it was already handled by the registered close listener.
24
+ * The Link plugin and the form-validator anchor submit-triggers no longer inject an inline onclick="return false;" attribute at bind time, so they work under a strict nonce-based Content-Security-Policy (the inline handler tripped the script-src-attr directive). Default-action suppression is preserved via an addEventListener-based preventDefault listener, so behaviour is unchanged.
25
+
9
26
  ## 0.4.2 - 2026-06-02
10
27
 
11
28
  _Additive release — opt-in HTTP/3 advertisement (`Alt-Svc`) plus two render-path fixes (`gina-container` HTML 500, layoutless `page.data` restore). No breaking changes, no settings reset._
package/README.md CHANGED
@@ -22,7 +22,7 @@ Node.js MVC framework with built-in HTTP/2, multi-bundle architecture, and scope
22
22
  | ORM / entities | EventEmitter-based entity system; SQL files auto-wired to entity methods |
23
23
  | Connectors | Couchbase, MongoDB, ScyllaDB / Cassandra, MySQL, PostgreSQL, Redis, SQLite, AI (LLM) — loaded from project `node_modules` |
24
24
  | AI connector | Any LLM provider via named protocol (`anthropic://`, `openai://`, `ollama://`, …) |
25
- | Template engine | [`@rhinostone/swig`](https://github.com/gina-io/swig) 2.5.1 — maintained fork with CVE-2023-25345 patched; streaming SSE/chunked via `renderStream()`. Nunjucks supported as opt-in via `render.engine = "nunjucks"` |
25
+ | Template engine | [`@rhinostone/swig`](https://github.com/gina-io/swig) 2.6.0 — maintained fork with CVE-2023-25345 patched; streaming SSE/chunked via `renderStream()`. Nunjucks supported as opt-in via `render.engine = "nunjucks"` |
26
26
  | Internationalisation | Per-bundle JSON catalogs, `t()` helper, swig + nunjucks `t` filter, CLDR plurals, ICU MessageFormat opt-in via `t.icu()` |
27
27
  | Observability | Built-in `/_gina/metrics` Prometheus endpoint (opt-in, IP-allowlisted) — Node.js process metrics + HTTP counter / duration histogram with cardinality-safe route labels |
28
28
  | Hot reload | WatcherService evicts `require.cache` only on file change — zero per-request overhead in dev |
@@ -39,10 +39,12 @@ gina bundle:start api @myproject
39
39
  open https://localhost:3100
40
40
  ```
41
41
 
42
- ## What's in 0.4.2
42
+ ## What's in 0.4.3
43
43
 
44
- - **HTTP/3 advertisement (opt-in `Alt-Svc`).** Set `server.http3Advertisement: true` to emit `Alt-Svc: h3=":443"; ma=86400` on every routed response, so QUIC-capable browsers upgrade to HTTP/3 via a QUIC-capable edge proxy (Caddy, nginx-QUIC, Cloudflare) **without Gina implementing QUIC itself.** Off by default; idempotent (an upstream-set `Alt-Svc` is never overwritten).
45
- - **Fixes** `gina-container` (the Docker/K8s foreground launcher) no longer returns HTTP 500 on every HTML route (it read the `GINA_PID` / `GINA_CULTURE` globals the daemonless launcher doesn't inject); and layoutless (`renderWithoutLayout`) fragment renders again expose controller data under `page.data` as well as at top level, so templates reading `data.X` / `page.data.X` keep working alongside the 0.4.1 top-level-variable fixmatching the nunjucks engine.
44
+ - **Inspector over WebSocket.** The standalone Inspector now connects to a bundle's `/_gina/agent` endpoint over an authenticated WebSocket by default — streaming the data + log feed on one socket and falls back to SSE automatically if the socket can't open (open with `?transport=sse` to force SSE). Outside dev mode the upgrade requires the configured `inspector.agent.key` (via `?key=` or the `x-gina-inspector-key` header) and honours an optional `inspector.agent.allowedOrigins` allowlist. A new **`gina service:start <service>`** command starts framework-internal `@gina` services (such as the standalone Inspector) via the daemon-free `gina-container` launcher, and in dev mode the Inspector auto-starts when a bundle boots.
45
+ - **Accessible form validation (`aria-invalid`, #A11Y1).** `FormValidator` now keeps each managed field's `aria-invalid` in sync with its validity (`true` on a committed error, `false` once valid), so a field's `aria-errormessage` association is actually exposed to assistive technology. A failed submit moves focus to the first invalid field; blur-time errors are announced through a per-form `aria-live` region. Automatic no public API change.
46
+ - **Strict-CSP client plugins.** The popin, link, and form-validator plugins no longer inject an inline `onclick="return false;"` attribute at bind time, so they work under a strict nonce-based Content-Security-Policy (the inline handler tripped `script-src-attr`). Default-action suppression is unchanged.
47
+ - **`@rhinostone/swig` → `^2.6.0`.** The template-engine floor moves to 2.6.0; the native `json` / `json_encode` filters now HTML-escape their output and are marked safe, so `{{ data|json }}` is safe to embed directly inside a `<script>` block.
46
48
 
47
49
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
48
50
 
package/ROADMAP.md CHANGED
@@ -188,7 +188,7 @@ Client-side form-validation accessibility — keeping `FormValidator`'s ARIA sta
188
188
 
189
189
  | Status | Feature | Version | Target |
190
190
  | --- | --- | --- | --- |
191
- | 📋 | **`aria-invalid` validity reflection (#A11Y1)** — `FormValidator` keeps `aria-invalid` in sync with each managed field's effective validity, so a field's `aria-errormessage` (and error `aria-describedby`) association is actually exposed to assistive technology. Per WAI-ARIA those associations are inert unless the field also carries `aria-invalid="true"`, so today screen-reader users are never told which field is invalid or what the error says even when the markup wires `aria-errormessage`. On every blur and submit pass — plus on `input` once a field has errored at least once — the validator sets `aria-invalid="true"` when invalid and `aria-invalid="false"` when valid; a pristine, never-validated field carries no attribute (three-state: absent / `false` / `true`, where `false` is a DOM-observable touched-and-valid signal the post-error `input` revalidation reads off the element). Where the field has native HTML constraints the native `ValidityState` (`element.validity.valid`) is the source of truth, so the attribute never disagrees with the `:user-invalid` styling that already drives the visible error. When the field already references an error element via `aria-errormessage`, the validator does NOT inject its `form-item-error-message` div (no duplicate message) — setting `aria-invalid` is enough to expose the existing element; legacy forms with no association keep the injected div and additionally gain an `aria-errormessage` wire to it. On a failed submit, focus moves to the first invalid field; blur-time errors (focus already gone) are announced through a dedicated visually-hidden `aria-live="polite"` status region rather than the static message, since a CSS `:user-invalid` display toggle is not reliably announced — suppressed for any field that simultaneously receives focus to avoid double-speaking. No new public API; existing `form-item-error` / `form-item-warning` / `form-item-error-message` / `error-message` / `data-gina-form-errors` classes and the submit-button `aria-disabled` / `disabled` toggling are unchanged. Acceptance: VoiceOver + NVDA announce the invalid field and its `aria-errormessage` text on a failed blur and submit, and stop once corrected; no visual regression on forms already using `form-item-error` / `error-message`. First consumer: freelancer-app-v3 public contact form. | `0.4.2-alpha` | Q3 2026 |
191
+ | | **`aria-invalid` validity reflection (#A11Y1)** — `FormValidator` keeps `aria-invalid` in sync with each managed field's effective validity, so a field's `aria-errormessage` (and error `aria-describedby`) association is actually exposed to assistive technology. Per WAI-ARIA those associations are inert unless the field also carries `aria-invalid="true"`, so today screen-reader users are never told which field is invalid or what the error says even when the markup wires `aria-errormessage`. On every blur and submit pass — plus on `input` once a field has errored at least once — the validator sets `aria-invalid="true"` when invalid and `aria-invalid="false"` when valid; a pristine, never-validated field carries no attribute (three-state: absent / `false` / `true`, where `false` is a DOM-observable touched-and-valid signal the post-error `input` revalidation reads off the element). Where the field has native HTML constraints the native `ValidityState` (`element.validity.valid`) is the source of truth, so the attribute never disagrees with the `:user-invalid` styling that already drives the visible error. When the field already references an error element via `aria-errormessage`, the validator does NOT inject its `form-item-error-message` div (no duplicate message) — setting `aria-invalid` is enough to expose the existing element; legacy forms with no association keep the injected div and additionally gain an `aria-errormessage` wire to it. On a failed submit, focus moves to the first invalid field; blur-time errors (focus already gone) are announced through a dedicated visually-hidden `aria-live="polite"` status region rather than the static message, since a CSS `:user-invalid` display toggle is not reliably announced — suppressed for any field that simultaneously receives focus to avoid double-speaking. No new public API; existing `form-item-error` / `form-item-warning` / `form-item-error-message` / `error-message` / `data-gina-form-errors` classes and the submit-button `aria-disabled` / `disabled` toggling are unchanged. Acceptance: VoiceOver + NVDA announce the invalid field and its `aria-errormessage` text on a failed blur and submit, and stop once corrected; no visual regression on forms already using `form-item-error` / `error-message`. Blur/`input`-time passes apply to forms that opt into `data-gina-form-live-check-enabled`; the always-on submit pass covers `aria-invalid` + first-invalid focus regardless. | `0.4.3-alpha.2` | 2026-06-03 |
192
192
 
193
193
  ---
194
194
 
@@ -369,10 +369,10 @@ Gina's built-in per-bundle inspector. Phases 1–2 ship as an embedded SPA at `/
369
369
 
370
370
  | Status | Feature | Version | Target |
371
371
  | --- | --- | --- | --- |
372
- | 🔨 | **`services/src/inspector/` standalone bundle** — ~~Rename `services/src/toolbar/` to `services/src/inspector/`~~ (done). Inspector SPA as a standalone gina bundle on port 4101. Connects to bundles via authenticated WebSocket. The embedded SPA at `/_gina/inspector/` remains for quick dev-mode access. | `0.5.0` | Q1 2027 |
372
+ | | **`services/src/inspector/` standalone bundle** — ~~Rename `services/src/toolbar/` to `services/src/inspector/`~~ (done). **Authenticated WebSocket transport shipped** (`0.4.3-alpha`): the standalone Inspector connects to a bundle's `/_gina/agent` over a WebSocket (`?transport=ws`) as well as SSE — key-authenticated outside dev mode, with an optional `inspector.agent.allowedOrigins` Origin allowlist; it falls back to SSE automatically if the socket can't open. The embedded SPA at `/_gina/inspector/` remains for quick dev-mode access. **Dev auto-start shipped** (`0.4.3-alpha`): a `gina service:start` command plus a dev-only `gna.js server.on('started')` hook auto-start the standalone Inspector via the daemon-free `gina-container` launcher (gated on dev mode + not-already-running; local-only — no-ops in a fresh install since `services/` ships in neither git nor npm). | `0.5.0` | 2026-06-02 |
373
373
  | ✅ | **Agent endpoint — dev-mode SSE (`/_gina/agent`)** — Combined data + log SSE stream. CORS, server.js + server.isaac.js (HTTP/2), Inspector SPA `tryAgent()` with `?target=` param. Named events (`event: data`, `event: log`). Manual connect form on "No source" overlay. | `0.3.0` | 2026-04-05 |
374
- | 🔨 | **Agent endpoint — production auth** — **Authenticated `/_gina/agent` + production-safe toggle shipped via the existing SSE transport** (opt-in `inspector.agent.enabled` + key in `settings.json`, constant-time compare, `${secret:KEY}`-capable; key via the `x-gina-inspector-key` header or a `?key=` query param; dev stays open + keyless). Authenticates remote server-log streaming outside dev mode. Remaining: WebSocket transport (deferred only needed for bidirectional commands). | `0.5.0` | Q1 2027 |
375
- | 🔨 | **Toggleable instrumentation** — Runtime toggle for query + flow instrumentation independent of `NODE_ENV_IS_DEV`: a time-boxed, key-authenticated window (`POST /_gina/instrument`) runs capture in production over the authenticated `/_gina/agent` SSE, without full dev mode. Opt-in via `inspector.instrumentation`; 3600s hard cap with auto-revert. **v1 shipped 2026-05-26** (JSON/XHR + cross-bundle egress). Remaining: server-rendered HTML-page-render egress (follow-up). | `0.5.0` | Q1 2027 |
374
+ | | **Agent endpoint — production auth** — **Authenticated `/_gina/agent` + production-safe toggle shipped via the existing SSE transport** (opt-in `inspector.agent.enabled` + key in `settings.json`, constant-time compare, `${secret:KEY}`-capable; key via the `x-gina-inspector-key` header or a `?key=` query param; dev stays open + keyless). Authenticates remote server-log streaming outside dev mode. **WebSocket transport completed** (`0.4.3-alpha`): the standalone Inspector now connects over the #INS8 WebSocket by default (`?transport=sse` forces SSE) with automatic SSE fallback; auth + prod-toggle contract unchanged. | `0.5.0` | 2026-06-02 |
375
+ | | **Toggleable instrumentation** — Runtime toggle for query + flow instrumentation independent of `NODE_ENV_IS_DEV`: a time-boxed, key-authenticated window (`POST /_gina/instrument`) runs capture in production over the authenticated `/_gina/agent` channel, without full dev mode. Opt-in via `inspector.instrumentation`; 3600s hard cap with auto-revert. **v1 shipped 2026-05-26** (JSON/XHR + cross-bundle egress); the server-rendered HTML-page-render egress follow-up also shipped 2026-05-26 (a separate HTML-free emit path wired per render delegate). | `0.5.0` | 2026-05-26 |
376
376
  | 📋 | **Multi-bundle dashboard** — Discover all running bundles via `ports.json`, connect to each agent. Full-stack request tracing across bundle boundaries. | post-1.0.0 | — |
377
377
  | 📋 | **Browser extension companion** — Chrome/Firefox DevTools panel. Thin UI shell connecting to the standalone Inspector via WebSocket. Optional — not a replacement. | post-1.0.0 | — |
378
378
 
@@ -0,0 +1 @@
1
+ 0.4.3
@@ -3640,5 +3640,3 @@ details[open] > summary.bm-summary::before {
3640
3640
  text-align: left;
3641
3641
  }
3642
3642
  }
3643
-
3644
- /*# sourceMappingURL=inspector.css.map */
@@ -3751,6 +3751,8 @@
3751
3751
  * @returns {boolean} `true` if a `target` param was found and connection initiated
3752
3752
  */
3753
3753
  function tryAgent() {
3754
+ // #INS8 — if the WebSocket transport already claimed the channel, no-op.
3755
+ if (source === 'agent') return true;
3754
3756
  if (typeof EventSource === 'undefined') return false;
3755
3757
 
3756
3758
  var params = new URLSearchParams(window.location.search);
@@ -3844,6 +3846,127 @@
3844
3846
  return true;
3845
3847
  }
3846
3848
 
3849
+
3850
+ // ── WebSocket /_gina/agent transport (#INS8) ─────────────────────────
3851
+
3852
+ /**
3853
+ * #INS8/#INS9b — WebSocket variant of {@link tryAgent}, the DEFAULT agent
3854
+ * transport (since #INS9b). Runs whenever the Inspector is opened with a
3855
+ * `?target=<bundle_url>` unless `?transport=sse` forces SSE.
3856
+ * Connects to `{target}/_gina/agent` over a WebSocket, parsing the same
3857
+ * `{event, data}` envelopes the SSE channel emits. Threads the optional
3858
+ * `?key=` on the WS URL (browsers cannot set WebSocket handshake headers,
3859
+ * same constraint as EventSource). Falls back to SSE ({@link tryAgent}) once
3860
+ * if the socket never opens (e.g. an HTTP/2-only target that cannot upgrade).
3861
+ *
3862
+ * @inner
3863
+ * @returns {boolean} `true` if a `target` param was found and a socket was opened
3864
+ */
3865
+ function tryAgentWS() {
3866
+ if (typeof WebSocket === 'undefined') return false;
3867
+
3868
+ var params = new URLSearchParams(window.location.search);
3869
+ var target = params.get('target');
3870
+ if (!target) return false;
3871
+
3872
+ // Normalise: strip trailing slash, switch scheme to ws/wss.
3873
+ target = target.replace(/\/+$/, '');
3874
+ var wsUrl = target.replace(/^http/i, 'ws') + '/_gina/agent';
3875
+
3876
+ var agentKey = params.get('key');
3877
+ if (agentKey) {
3878
+ wsUrl += '?key=' + encodeURIComponent(agentKey);
3879
+ }
3880
+
3881
+ qs('#bm-dot').className = 'bm-dot warn';
3882
+ qs('#bm-label').textContent = 'Connecting…';
3883
+
3884
+ var _opened = false, _fellBack = false;
3885
+
3886
+ try {
3887
+ var ws = new WebSocket(wsUrl);
3888
+ // Claim the channel only after the socket is constructed, so a
3889
+ // constructor throw leaves source unset and tryAgent() opens SSE.
3890
+ source = 'agent';
3891
+
3892
+ ws.onopen = function () {
3893
+ _opened = true;
3894
+ qs('#bm-dot').className = 'bm-dot ok';
3895
+ };
3896
+
3897
+ ws.onmessage = function (ev) {
3898
+ try {
3899
+ var frame = JSON.parse(ev.data);
3900
+ if (!frame || !frame.event) return;
3901
+ if (frame.event === 'data') {
3902
+ var gd = frame.data;
3903
+ if (!gd) return;
3904
+ var str = JSON.stringify(gd);
3905
+ if (str === lastGdStr) return;
3906
+ showLoader();
3907
+ lastGdStr = str;
3908
+ ginaData = gd;
3909
+ var env = (gd.user && gd.user.environment) || {};
3910
+ qs('#bm-label').textContent = (env.bundle || '?') + '@' + (env.env || '?');
3911
+ qs('#bm-dot').className = 'bm-dot ok';
3912
+ document.title = 'Inspector — ' + (env.bundle || '?') + '@' + (env.env || '?');
3913
+ qs('#bm-no-source').classList.add('hidden');
3914
+ renderEnvironmentInfo();
3915
+ updateRevealVisibility();
3916
+ var tab = activeTab();
3917
+ if (tab !== 'logs') renderTab(tab);
3918
+ if (tab !== 'query') {
3919
+ var _u = gd.user || {};
3920
+ var _hasXhr = typeof _u['data-xhr'] !== 'undefined';
3921
+ var _qd = _hasXhr && _u['data-xhr'] && _u['data-xhr'].queries
3922
+ ? _u['data-xhr'].queries : _u.queries;
3923
+ updateQueryToolbar(_qd || null);
3924
+ }
3925
+ if (tab !== 'view') {
3926
+ var _u2 = gd.user || {};
3927
+ var _isXhr2 = typeof _u2['view-xhr'] !== 'undefined';
3928
+ var _vm = getPageMetrics(_isXhr2);
3929
+ var _dxhr = typeof _u2['data-xhr'] !== 'undefined';
3930
+ var _vq = _dxhr && _u2['data-xhr'] && _u2['data-xhr'].queries
3931
+ ? _u2['data-xhr'].queries : _u2.queries;
3932
+ updateViewDot(checkPerfAnomalies(_vm, _vq || []));
3933
+ }
3934
+ hideLoader();
3935
+ } else if (frame.event === 'log') {
3936
+ if (paused) return;
3937
+ var entry = frame.data;
3938
+ if (!entry) return;
3939
+ entry._id = ++_logIdCounter;
3940
+ logs.push(entry);
3941
+ if (logs.length > MAX_LOG_ENTRIES) logs.shift();
3942
+ updateLogDot([entry]);
3943
+ scheduleRender();
3944
+ }
3945
+ } catch (e) {}
3946
+ };
3947
+
3948
+ ws.onerror = function () {
3949
+ qs('#bm-dot').className = 'bm-dot warn';
3950
+ };
3951
+
3952
+ ws.onclose = function () {
3953
+ qs('#bm-dot').className = 'bm-dot warn';
3954
+ // If the socket never opened, fall back to SSE once so the
3955
+ // Inspector still connects (e.g. an HTTP/2-only target whose
3956
+ // server cannot upgrade a WebSocket).
3957
+ if (!_opened && !_fellBack && source === 'agent') {
3958
+ _fellBack = true;
3959
+ source = null;
3960
+ tryAgent();
3961
+ }
3962
+ };
3963
+ } catch (e) {
3964
+ return false;
3965
+ }
3966
+
3967
+ return true;
3968
+ }
3969
+
3847
3970
  // ── Passive /_gina/agent subscription (opener mode) ──────────────────
3848
3971
 
3849
3972
  /**
@@ -4898,6 +5021,16 @@
4898
5021
  // Agent mode (?target= param) is the highest-priority source — it
4899
5022
  // provides both data and logs via a single SSE stream. When active,
4900
5023
  // opener/localStorage polling and tryServerLogs() are unnecessary.
5024
+ // #INS9b — WebSocket is the DEFAULT agent transport; SSE is the automatic
5025
+ // fallback (tryAgentWS() falls back to tryAgent() on a failed open, and
5026
+ // only acts when a ?target= is present). ?transport=sse forces SSE. On a
5027
+ // successful handshake tryAgentWS() claims source='agent', so the
5028
+ // tryAgent() call below short-circuits to a no-op.
5029
+ var _agentTransport = (typeof URLSearchParams !== 'undefined')
5030
+ ? new URLSearchParams(window.location.search).get('transport') : null;
5031
+ if (_agentTransport !== 'sse') {
5032
+ tryAgentWS();
5033
+ }
4901
5034
  var isAgent = tryAgent();
4902
5035
 
4903
5036
  if (!isAgent) {
@@ -9017,7 +9017,6 @@ define('gina/link', [ 'require', 'lib/domain', 'lib/merge', 'lib/uuid', 'utils/e
9017
9017
  , url = null
9018
9018
  , elId = null
9019
9019
  , onEvent = null
9020
- , onclickAttribute = null
9021
9020
  // a
9022
9021
  , $a = $target.getElementsByTagName('a')
9023
9022
  // buttons
@@ -9062,20 +9061,12 @@ define('gina/link', [ 'require', 'lib/domain', 'lib/merge', 'lib/uuid', 'utils/e
9062
9061
  evt = elId;
9063
9062
  $el.setAttribute('id', evt);
9064
9063
 
9065
- if ($el.tagName == 'A') {
9066
- onclickAttribute = $el.getAttribute('onclick');
9067
- }
9068
-
9069
- if ( !onclickAttribute ) {
9070
- $el.setAttribute('onclick', 'return false;')
9071
- } else if ( typeof(onclickAttribute) != 'undefined' && !/return false/.test(onclickAttribute) ) {
9072
- if ( /\;$/.test(onclickAttribute) ) {
9073
- onclickAttribute += 'return false;'
9074
- } else {
9075
- onclickAttribute += '; return false;'
9076
- }
9077
- $el.setAttribute('onclick', onclickAttribute);
9078
- }
9064
+ // [CSP] Suppress the link's default action via a click listener instead of an
9065
+ // inline onclick="return false;" attribute — the inline handler tripped CSP
9066
+ // script-src-attr under nonce-based policies. preventDefault (NOT cancelEvent —
9067
+ // its stopPropagation would block the document-level delegation that fires the
9068
+ // AJAX request) covers direct AND child clicks while leaving the delegation intact.
9069
+ addListener(gina, $el, 'click', function(e) { e.preventDefault(); });
9079
9070
 
9080
9071
  $newLink = null;
9081
9072
 
@@ -10149,9 +10140,43 @@ function ValidatorPlugin(rules, data, formId) {
10149
10140
  }
10150
10141
  }
10151
10142
 
10143
+ /**
10144
+ * #A11Y1 (slice 4) — lazily create one visually-hidden aria-live="polite" status region per
10145
+ * form and announce a blur-time committed error through it. A CSS :user-invalid display toggle
10146
+ * is not reliably announced by screen readers, and on blur the field has lost focus so its own
10147
+ * aria-invalid / aria-errormessage are not re-read; the polite region decouples the announcement
10148
+ * from visual display. Submit-time errors use focus (see onValidate), not this region.
10149
+ * @param {object} $form - the HTMLFormElement the region belongs to
10150
+ * @param {string} text - the error text to announce
10151
+ * @returns {object|null} the live-region element, or null when nothing was announced
10152
+ */
10153
+ var announceA11yError = function($form, text) {
10154
+ if ( !$form || !text ) return null;
10155
+ var _fid = ( typeof($form.id) != 'undefined' && $form.id ) ? $form.id : ( $form.getAttribute('id') || 'form' );
10156
+ var _liveId = 'gina-aria-live-' + _fid;
10157
+ var _live = document.getElementById(_liveId);
10158
+ if ( !_live ) {
10159
+ _live = document.createElement('div');
10160
+ _live.id = _liveId;
10161
+ _live.setAttribute('role', 'status');
10162
+ _live.setAttribute('aria-live', 'polite');
10163
+ _live.setAttribute('aria-atomic', 'true');
10164
+ _live.className = 'gina-visually-hidden';
10165
+ _live.style.cssText = 'position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;';
10166
+ $form.appendChild(_live);
10167
+ }
10168
+ _live.textContent = text;
10169
+ return _live;
10170
+ };
10171
+
10152
10172
  /**
10153
10173
  * handleErrorsDisplay
10154
10174
  * Attention: if you are going to handle errors display by hand, set data to `null` to prevent Toolbar refresh with empty data
10175
+ *
10176
+ * #A11Y1 — besides toggling `form-item-error` / `form-item-warning` and the error-message div,
10177
+ * this reflects each managed field's committed validity into `aria-invalid` ("true" on a
10178
+ * committed error, "false" when valid — mirroring the native ValidityState where the field has
10179
+ * native HTML constraints so it agrees with `:user-invalid`). Soft live-check warnings are not asserted.
10155
10180
  * @param {object} $form - Target (HTMLFormElement)
10156
10181
  * @param {object} errors
10157
10182
  * @param {object|null} data
@@ -10282,6 +10307,14 @@ function ValidatorPlugin(rules, data, formId) {
10282
10307
 
10283
10308
  if (!name) continue;
10284
10309
 
10310
+ // #A11Y1 (slice 2) — detect a consumer-provided aria-errormessage association. When
10311
+ // present, the field already references its own error element, so we must NOT inject a
10312
+ // competing form-item-error-message div (aria-invalid alone exposes it). Any wire we add
10313
+ // ourselves is marked (data-gina-aria-errormessage) so it is not mistaken for a consumer's.
10314
+ var _ariaErrId = $el.getAttribute('aria-errormessage');
10315
+ var _ginaOwnsErrMsg = ( typeof($el.dataset) != 'undefined' && typeof($el.dataset.ginaAriaErrormessage) != 'undefined' ) ? true : false;
10316
+ var _hasConsumerErrMsg = ( _ariaErrId && !_ginaOwnsErrMsg ) ? true : false;
10317
+
10285
10318
  if (
10286
10319
  errors
10287
10320
  && typeof(errors[name]) != 'undefined'
@@ -10304,6 +10337,14 @@ function ValidatorPlugin(rules, data, formId) {
10304
10337
  $err.className = 'form-item-error-message';
10305
10338
  }
10306
10339
 
10340
+ // #A11Y1 — reflect a committed invalid state into aria-invalid so any
10341
+ // aria-errormessage association on the field is exposed to assistive tech.
10342
+ // Soft (live-check) warnings while the field is still being edited are not
10343
+ // asserted — only committed errors (blur/submit) are.
10344
+ if ( !isWarning && $el.type != 'hidden' ) {
10345
+ $el.setAttribute('aria-invalid', 'true');
10346
+ }
10347
+
10307
10348
  // injecting error messages
10308
10349
  for (var e in errors[name]) {
10309
10350
 
@@ -10322,10 +10363,31 @@ function ValidatorPlugin(rules, data, formId) {
10322
10363
  }
10323
10364
  }
10324
10365
 
10325
- if ($target.type != 'hidden')
10366
+ // #A11Y1 (slice 2) — skip the injected message div when the field already references
10367
+ // a consumer-provided error element; otherwise inject it and wire aria-errormessage
10368
+ // to it so assistive tech can resolve the message text.
10369
+ if ($target.type != 'hidden' && !_hasConsumerErrMsg) {
10370
+ if ( !$el.getAttribute('aria-errormessage') || _ginaOwnsErrMsg ) {
10371
+ $err.id = ('gina-errormessage-' + (id || 'form') + '-' + (name || 'field')).replace(/[^a-zA-Z0-9_-]+/g, '-');
10372
+ $el.setAttribute('aria-errormessage', $err.id);
10373
+ if ( typeof($el.dataset) != 'undefined' ) {
10374
+ $el.dataset.ginaAriaErrormessage = 'true';
10375
+ }
10376
+ }
10326
10377
  insertAfter($target, $err);
10378
+ }
10327
10379
 
10328
-
10380
+ // #A11Y1 (slice 4) — announce a blur-time committed error through the form's polite
10381
+ // live region (submit-time errors use focus instead). Only on the per-field/blur path
10382
+ // (fieldName set) and only once focus has left the field; soft warnings are skipped.
10383
+ if (
10384
+ !isWarning
10385
+ && typeof(fieldName) != 'undefined'
10386
+ && $err
10387
+ && $el !== document.activeElement
10388
+ ) {
10389
+ announceA11yError($form, $err.textContent);
10390
+ }
10329
10391
 
10330
10392
  } else if (
10331
10393
  errors
@@ -10358,6 +10420,21 @@ function ValidatorPlugin(rules, data, formId) {
10358
10420
 
10359
10421
  $parent.className = $parent.className.replace(/(\s+form\-item\-error|form\-item\-error|\s+form\-item\-warning|form\-item\-warning)/, '');
10360
10422
 
10423
+ // #A11Y1 — field is valid per Gina; mirror the native ValidityState (where the
10424
+ // field has native HTML constraints) so aria-invalid never disagrees with the
10425
+ // :user-invalid styling already shown. Explicit "false" is a touched-and-valid signal.
10426
+ if ( $el.type != 'hidden' ) {
10427
+ var _a11yNativeInvalid = ( $el.willValidate && $el.validity && !$el.validity.valid ) ? true : false;
10428
+ $el.setAttribute('aria-invalid', _a11yNativeInvalid ? 'true' : 'false');
10429
+ }
10430
+
10431
+ // #A11Y1 (slice 2) — the referenced div was just removed; drop the aria-errormessage
10432
+ // wire we own (a consumer-provided association, lacking our marker, is left intact).
10433
+ if ( typeof($el.dataset) != 'undefined' && typeof($el.dataset.ginaAriaErrormessage) != 'undefined' ) {
10434
+ $el.removeAttribute('aria-errormessage');
10435
+ delete $el.dataset.ginaAriaErrormessage;
10436
+ }
10437
+
10361
10438
  } else if (
10362
10439
  errors.count() > 0
10363
10440
  && typeof(errors[name]) != 'undefined'
@@ -10378,6 +10455,11 @@ function ValidatorPlugin(rules, data, formId) {
10378
10455
  $err = document.createElement('div');
10379
10456
  $err.setAttribute('class', 'form-item-error-message');
10380
10457
 
10458
+ // #A11Y1 (slice 2) — preserve the aria-errormessage wire we own across refresh.
10459
+ if ( _ginaOwnsErrMsg && _ariaErrId ) {
10460
+ $err.id = _ariaErrId;
10461
+ }
10462
+
10381
10463
  // Fixed on 2025-03-09: className cleanup
10382
10464
  if (
10383
10465
  !isWarning
@@ -10410,9 +10492,14 @@ function ValidatorPlugin(rules, data, formId) {
10410
10492
  }
10411
10493
  }
10412
10494
 
10413
- if ($err && $target.type != 'hidden') {
10495
+ if ($err && $target.type != 'hidden' && !_hasConsumerErrMsg) {
10414
10496
  insertAfter($target, $err);
10415
10497
  }
10498
+
10499
+ // #A11Y1 — the committed error persists on refresh; keep aria-invalid asserted.
10500
+ if ( !isWarning && $el.type != 'hidden' ) {
10501
+ $el.setAttribute('aria-invalid', 'true');
10502
+ }
10416
10503
  }
10417
10504
 
10418
10505
  if (
@@ -15577,6 +15664,28 @@ function ValidatorPlugin(rules, data, formId) {
15577
15664
  } else if ($form) { // just in case the form is being destroyed
15578
15665
  $form.send(result['data']);
15579
15666
  }
15667
+ } else {
15668
+ // #A11Y1 (slice 3) — failed submit: move focus to the first invalid field so
15669
+ // assistive tech announces it (accessible name + aria-invalid + the
15670
+ // aria-errormessage text). DOM order; hidden / unfocusable fields are skipped.
15671
+ var _a11yErrs = result['fields'] || result['error'];
15672
+ if ( _a11yErrs ) {
15673
+ var $a11yForm = event['target'];
15674
+ for (var _ai = 0, _aLen = $a11yForm.length; _ai < _aLen; ++_ai) {
15675
+ var _aField = $a11yForm[_ai];
15676
+ var _aName = _aField.getAttribute('name');
15677
+ if (
15678
+ _aName
15679
+ && typeof(_a11yErrs[_aName]) != 'undefined'
15680
+ && ( typeof(_a11yErrs[_aName].count) != 'function' || _a11yErrs[_aName].count() > 0 )
15681
+ && _aField.type != 'hidden'
15682
+ && typeof(_aField.focus) == 'function'
15683
+ ) {
15684
+ _aField.focus();
15685
+ break;
15686
+ }
15687
+ }
15688
+ }
15580
15689
  }
15581
15690
  })
15582
15691
  }
@@ -15744,14 +15853,15 @@ function ValidatorPlugin(rules, data, formId) {
15744
15853
  isSubmitType = $submit.getAttribute('data-gina-form-submit');
15745
15854
 
15746
15855
  if ( !onclickAttribute && !isSubmitType) {
15747
- $submit.setAttribute('onclick', 'return false;')
15748
- } else if ( !/return false/i.test(onclickAttribute) && !isSubmitType) {
15749
- if ( /\;$/.test(onclickAttribute) ) {
15750
- onclickAttribute += 'return false;'
15751
- } else {
15752
- onclickAttribute += '; return false;'
15753
- }
15856
+ // [CSP] Suppress the default action via a click listener instead of an inline
15857
+ // onclick="return false;" attribute (tripped CSP script-src-attr under nonce
15858
+ // policies). A preventDefault-only listener sets event.defaultPrevented exactly
15859
+ // as the inline handler did, so the form-level clickProxyHandler's
15860
+ // `if (event.defaultPrevented) return` guard still short-circuits identically.
15861
+ addListener(gina, $submit, 'click', function(e) { e.preventDefault(); });
15754
15862
  }
15863
+ // (an existing onclick is left untouched, as before; the dead else-if append
15864
+ // branch — it only mutated a local, never written back — was removed.)
15755
15865
  }
15756
15866
 
15757
15867
  if (!$submit['id']) {
@@ -17762,23 +17872,16 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
17762
17872
  }
17763
17873
  }
17764
17874
 
17765
- var onclickAttribute = null, evt = null;
17875
+ var evt = null;
17766
17876
  // close events
17877
+ // NB.: the close element's default action (e.g. an `<a href="#">` navigation) is already
17878
+ // suppressed by register('close', …) below — the click listener it attaches calls
17879
+ // cancelEvent() (preventDefault/stopPropagation) on every click. The previous inline
17880
+ // onclick="return false;" injection here was redundant with that listener AND tripped
17881
+ // CSP script-src-attr under nonce-based policies (a nonce in script-src disables
17882
+ // 'unsafe-inline' for inline event-handler attributes), so it has been removed.
17767
17883
  b = 0; len = $close.length;
17768
17884
  for (; b < len; ++b) {
17769
- if ($close[b].tagName == 'A') {
17770
- onclickAttribute = $close[b].getAttribute('onclick');
17771
- }
17772
-
17773
- if ( !onclickAttribute ) {
17774
- $close[b].setAttribute('onclick', 'return false;')
17775
- } else if ( typeof(onclickAttribute) != 'undefined' && !/return false/.test(onclickAttribute) ) {
17776
- if ( /\;$/.test(onclickAttribute) ) {
17777
- onclickAttribute += 'return false;'
17778
- } else {
17779
- onclickAttribute += '; return false;'
17780
- }
17781
- }
17782
17885
 
17783
17886
  if (!$close[b]['id']) {
17784
17887