gina 0.6.11 → 0.6.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/AUTHORS +1 -1
  2. package/CHANGELOG.md +6 -0
  3. package/CONTRIBUTING.md +1 -1
  4. package/GOVERNANCE.md +1 -1
  5. package/README.md +17 -22
  6. package/ROADMAP.md +1 -0
  7. package/framework/{v0.6.11 → v0.6.12}/AUTHORS +1 -1
  8. package/framework/v0.6.12/VERSION +1 -0
  9. package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/README.md +2 -2
  10. package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/js/gina.js +68 -4
  11. package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +48 -48
  12. package/framework/v0.6.12/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  13. package/framework/v0.6.12/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  14. package/framework/{v0.6.11 → v0.6.12}/core/locales/README.md +7 -7
  15. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/csrf/package.json +1 -1
  16. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/coep/package.json +1 -1
  17. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/coop/package.json +1 -1
  18. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/corp/package.json +1 -1
  19. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/csp/package.json +1 -1
  20. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/hide-powered-by/package.json +1 -1
  21. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/hsts/package.json +1 -1
  22. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +1 -1
  23. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/package.json +1 -1
  24. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/referrer-policy/package.json +1 -1
  25. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-content-type-options/package.json +1 -1
  26. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +1 -1
  27. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-download-options/package.json +1 -1
  28. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-frame-options/package.json +1 -1
  29. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +1 -1
  30. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-xss-protection/package.json +1 -1
  31. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/session/package.json +1 -1
  32. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/storage/package.json +1 -1
  33. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/validator/package.json +1 -1
  34. package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/validator/src/form-validator.js +19 -4
  35. package/framework/{v0.6.11 → v0.6.12}/helpers/data/LICENSE +1 -1
  36. package/framework/{v0.6.11 → v0.6.12}/helpers/data/package.json +1 -1
  37. package/framework/{v0.6.11 → v0.6.12}/helpers/json/LICENSE +1 -1
  38. package/framework/{v0.6.11 → v0.6.12}/helpers/json/package.json +1 -1
  39. package/framework/{v0.6.11 → v0.6.12}/helpers/plugins/package.json +1 -1
  40. package/framework/{v0.6.11 → v0.6.12}/lib/admin/package.json +1 -1
  41. package/framework/{v0.6.11 → v0.6.12}/lib/archiver/package.json +1 -1
  42. package/framework/{v0.6.11 → v0.6.12}/lib/async/package.json +1 -1
  43. package/framework/{v0.6.11 → v0.6.12}/lib/audit/package.json +1 -1
  44. package/framework/{v0.6.11 → v0.6.12}/lib/cache/package.json +1 -1
  45. package/framework/{v0.6.11 → v0.6.12}/lib/cmd/gina-dev.1.md +1 -1
  46. package/framework/{v0.6.11 → v0.6.12}/lib/cmd/gina-framework.1.md +1 -1
  47. package/framework/{v0.6.11 → v0.6.12}/lib/cmd/gina.1.md +1 -1
  48. package/framework/{v0.6.11 → v0.6.12}/lib/cmd-status-format/package.json +1 -1
  49. package/framework/{v0.6.11 → v0.6.12}/lib/collection/package.json +1 -1
  50. package/framework/{v0.6.11 → v0.6.12}/lib/collection/src/main.js +49 -0
  51. package/framework/{v0.6.11 → v0.6.12}/lib/connector-config/package.json +1 -1
  52. package/framework/{v0.6.11 → v0.6.12}/lib/connector-error/package.json +1 -1
  53. package/framework/{v0.6.11 → v0.6.12}/lib/connector-registry/package.json +1 -1
  54. package/framework/{v0.6.11 → v0.6.12}/lib/cron/package.json +1 -1
  55. package/framework/{v0.6.11 → v0.6.12}/lib/domain/LICENSE +1 -1
  56. package/framework/{v0.6.11 → v0.6.12}/lib/domain/package.json +1 -1
  57. package/framework/{v0.6.11 → v0.6.12}/lib/dto/package.json +1 -1
  58. package/framework/{v0.6.11 → v0.6.12}/lib/dto-types/package.json +1 -1
  59. package/framework/{v0.6.11 → v0.6.12}/lib/i18n/package.json +1 -1
  60. package/framework/{v0.6.11 → v0.6.12}/lib/image-build/package.json +1 -1
  61. package/framework/{v0.6.11 → v0.6.12}/lib/inspector-redact/package.json +1 -1
  62. package/framework/{v0.6.11 → v0.6.12}/lib/job/package.json +1 -1
  63. package/framework/{v0.6.11 → v0.6.12}/lib/json-config-header/package.json +1 -1
  64. package/framework/{v0.6.11 → v0.6.12}/lib/logger/package.json +1 -1
  65. package/framework/{v0.6.11 → v0.6.12}/lib/maintenance/package.json +1 -1
  66. package/framework/{v0.6.11 → v0.6.12}/lib/mcp-dispatch/package.json +1 -1
  67. package/framework/{v0.6.11 → v0.6.12}/lib/mcp-http/package.json +1 -1
  68. package/framework/{v0.6.11 → v0.6.12}/lib/mcp-server/package.json +1 -1
  69. package/framework/{v0.6.11 → v0.6.12}/lib/merge/package.json +1 -1
  70. package/framework/{v0.6.11 → v0.6.12}/lib/metrics/package.json +1 -1
  71. package/framework/{v0.6.11 → v0.6.12}/lib/net-locality/package.json +1 -1
  72. package/framework/{v0.6.11 → v0.6.12}/lib/nunjucks-filters/package.json +1 -1
  73. package/framework/{v0.6.11 → v0.6.12}/lib/nunjucks-resolver/package.json +1 -1
  74. package/framework/{v0.6.11 → v0.6.12}/lib/push/package.json +1 -1
  75. package/framework/{v0.6.11 → v0.6.12}/lib/release-watch/package.json +1 -1
  76. package/framework/{v0.6.11 → v0.6.12}/lib/render-cache/package.json +1 -1
  77. package/framework/{v0.6.11 → v0.6.12}/lib/routing/package.json +1 -1
  78. package/framework/{v0.6.11 → v0.6.12}/lib/routing-introspect/package.json +1 -1
  79. package/framework/{v0.6.11 → v0.6.12}/lib/secrets/package.json +1 -1
  80. package/framework/{v0.6.11 → v0.6.12}/lib/swig-filters/package.json +1 -1
  81. package/framework/{v0.6.11 → v0.6.12}/lib/swig-resolver/package.json +1 -1
  82. package/framework/{v0.6.11 → v0.6.12}/lib/template-loaders/package.json +1 -1
  83. package/framework/{v0.6.11 → v0.6.12}/lib/watcher/package.json +1 -1
  84. package/framework/{v0.6.11 → v0.6.12}/lib/ws-framing/package.json +1 -1
  85. package/framework/{v0.6.11 → v0.6.12}/lib/ws-query/package.json +1 -1
  86. package/framework/{v0.6.11 → v0.6.12}/lib/ws-session/package.json +1 -1
  87. package/framework/{v0.6.11 → v0.6.12}/package.json +1 -1
  88. package/gna.js +4 -4
  89. package/llms.txt +4 -2
  90. package/package.json +5 -5
  91. package/resources/package.json.template +2 -2
  92. package/framework/v0.6.11/VERSION +0 -1
  93. package/framework/v0.6.11/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  94. package/framework/v0.6.11/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  95. /package/framework/{v0.6.11 → v0.6.12}/LICENSE +0 -0
  96. /package/framework/{v0.6.11 → v0.6.12}/core/asset/html/nolayout.html +0 -0
  97. /package/framework/{v0.6.11 → v0.6.12}/core/asset/html/static.html +0 -0
  98. /package/framework/{v0.6.11 → v0.6.12}/core/asset/img/android-chrome-192x192.png +0 -0
  99. /package/framework/{v0.6.11 → v0.6.12}/core/asset/img/android-chrome-512x512.png +0 -0
  100. /package/framework/{v0.6.11 → v0.6.12}/core/asset/img/apple-touch-icon.png +0 -0
  101. /package/framework/{v0.6.11 → v0.6.12}/core/asset/img/favicon-16x16.png +0 -0
  102. /package/framework/{v0.6.11 → v0.6.12}/core/asset/img/favicon-32x32.png +0 -0
  103. /package/framework/{v0.6.11 → v0.6.12}/core/asset/img/favicon.ico +0 -0
  104. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  105. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  106. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  107. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  108. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  109. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  110. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  111. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  112. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  113. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  114. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  115. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  116. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  117. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  118. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  119. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  120. /package/framework/{v0.6.11 → v0.6.12}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  121. /package/framework/{v0.6.11 → v0.6.12}/core/config.js +0 -0
  122. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/ai/index.js +0 -0
  123. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/ai/lib/connector.js +0 -0
  124. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/index.js +0 -0
  125. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/connector.js +0 -0
  126. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  127. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  128. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/n1ql.js +0 -0
  129. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/session-store.js +0 -0
  130. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  131. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  132. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/couchbase/lib/storage-store.js +0 -0
  133. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/duckdb/index.js +0 -0
  134. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/duckdb/lib/connector.js +0 -0
  135. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/mongodb/index.js +0 -0
  136. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/mongodb/lib/connector.js +0 -0
  137. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/mongodb/lib/job-store.js +0 -0
  138. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  139. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/mongodb/lib/session-store.js +0 -0
  140. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/mysql/index.js +0 -0
  141. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/mysql/lib/connector.js +0 -0
  142. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/param-redact.js +0 -0
  143. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/postgresql/index.js +0 -0
  144. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/postgresql/lib/connector.js +0 -0
  145. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/redis/index.js +0 -0
  146. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/redis/lib/connector.js +0 -0
  147. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/redis/lib/job-store.js +0 -0
  148. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/redis/lib/render-cache-store.js +0 -0
  149. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/redis/lib/session-store.js +0 -0
  150. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/scylladb/index.js +0 -0
  151. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/scylladb/lib/connector.js +0 -0
  152. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/scylladb/lib/session-store.js +0 -0
  153. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/sql-parser.js +0 -0
  154. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/sqlite/index.js +0 -0
  155. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/sqlite/lib/connector.js +0 -0
  156. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/sqlite/lib/job-store.js +0 -0
  157. /package/framework/{v0.6.11 → v0.6.12}/core/connectors/sqlite/lib/session-store.js +0 -0
  158. /package/framework/{v0.6.11 → v0.6.12}/core/content.encoding +0 -0
  159. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.framework.js +0 -0
  160. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.js +0 -0
  161. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.render-json.js +0 -0
  162. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.render-nunjucks-async.js +0 -0
  163. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.render-nunjucks.js +0 -0
  164. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.render-stream.js +0 -0
  165. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.render-swig-async.js +0 -0
  166. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.render-swig.js +0 -0
  167. /package/framework/{v0.6.11 → v0.6.12}/core/controller/controller.render-v1.js +0 -0
  168. /package/framework/{v0.6.11 → v0.6.12}/core/controller/index.js +0 -0
  169. /package/framework/{v0.6.11 → v0.6.12}/core/controller/inspector-window-emit.js +0 -0
  170. /package/framework/{v0.6.11 → v0.6.12}/core/controller/release-banner.js +0 -0
  171. /package/framework/{v0.6.11 → v0.6.12}/core/dev/index.js +0 -0
  172. /package/framework/{v0.6.11 → v0.6.12}/core/dev/lib/class.js +0 -0
  173. /package/framework/{v0.6.11 → v0.6.12}/core/dev/lib/factory.js +0 -0
  174. /package/framework/{v0.6.11 → v0.6.12}/core/dev/lib/tools.js +0 -0
  175. /package/framework/{v0.6.11 → v0.6.12}/core/gna.js +0 -0
  176. /package/framework/{v0.6.11 → v0.6.12}/core/locales/currency.json +0 -0
  177. /package/framework/{v0.6.11 → v0.6.12}/core/locales/dist/language/en.json +0 -0
  178. /package/framework/{v0.6.11 → v0.6.12}/core/locales/dist/language/fr.json +0 -0
  179. /package/framework/{v0.6.11 → v0.6.12}/core/locales/dist/region/en.json +0 -0
  180. /package/framework/{v0.6.11 → v0.6.12}/core/locales/dist/region/fr.json +0 -0
  181. /package/framework/{v0.6.11 → v0.6.12}/core/locales/index.js +0 -0
  182. /package/framework/{v0.6.11 → v0.6.12}/core/mime.types +0 -0
  183. /package/framework/{v0.6.11 → v0.6.12}/core/model/entity.js +0 -0
  184. /package/framework/{v0.6.11 → v0.6.12}/core/model/index.js +0 -0
  185. /package/framework/{v0.6.11 → v0.6.12}/core/model/template/entityFactory.js +0 -0
  186. /package/framework/{v0.6.11 → v0.6.12}/core/model/template/index.js +0 -0
  187. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/README.md +0 -0
  188. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/index.js +0 -0
  189. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/csrf/README.md +0 -0
  190. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/csrf/src/main.js +0 -0
  191. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/README.md +0 -0
  192. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/coep/README.md +0 -0
  193. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  194. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/coop/README.md +0 -0
  195. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  196. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/corp/README.md +0 -0
  197. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  198. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/csp/README.md +0 -0
  199. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  200. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  201. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  202. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  203. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  204. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  205. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  206. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  207. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  208. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/src/main.js +0 -0
  209. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  210. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  211. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  212. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  213. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  214. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  215. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  216. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  217. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  218. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  219. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  220. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  221. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/session/README.md +0 -0
  222. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/session/src/main.js +0 -0
  223. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/storage/README.md +0 -0
  224. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/storage/build.json +0 -0
  225. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/storage/src/main.js +0 -0
  226. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/validator/README.md +0 -0
  227. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/validator/build.json +0 -0
  228. /package/framework/{v0.6.11 → v0.6.12}/core/plugins/lib/validator/src/main.js +0 -0
  229. /package/framework/{v0.6.11 → v0.6.12}/core/router.js +0 -0
  230. /package/framework/{v0.6.11 → v0.6.12}/core/server.express.js +0 -0
  231. /package/framework/{v0.6.11 → v0.6.12}/core/server.isaac.js +0 -0
  232. /package/framework/{v0.6.11 → v0.6.12}/core/server.js +0 -0
  233. /package/framework/{v0.6.11 → v0.6.12}/core/status.codes +0 -0
  234. /package/framework/{v0.6.11 → v0.6.12}/core/template/_gitignore +0 -0
  235. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/config/app.json +0 -0
  236. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  237. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/config/routing.json +0 -0
  238. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/config/settings.json +0 -0
  239. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  240. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/config/templates.json +0 -0
  241. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  242. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  243. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  244. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  245. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/index.js +0 -0
  246. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle/locales/en.json +0 -0
  247. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  248. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  249. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  250. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  251. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  252. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  253. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  254. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  255. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/readme.md +0 -0
  256. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_public/sw.js +0 -0
  257. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  258. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  259. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  260. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  261. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  262. /package/framework/{v0.6.11 → v0.6.12}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  263. /package/framework/{v0.6.11 → v0.6.12}/core/template/command/gina.bat.tpl +0 -0
  264. /package/framework/{v0.6.11 → v0.6.12}/core/template/command/gina.tpl +0 -0
  265. /package/framework/{v0.6.11 → v0.6.12}/core/template/conf/env.json +0 -0
  266. /package/framework/{v0.6.11 → v0.6.12}/core/template/conf/manifest.json +0 -0
  267. /package/framework/{v0.6.11 → v0.6.12}/core/template/conf/package.json +0 -0
  268. /package/framework/{v0.6.11 → v0.6.12}/core/template/conf/settings.json +0 -0
  269. /package/framework/{v0.6.11 → v0.6.12}/core/template/conf/statics.json +0 -0
  270. /package/framework/{v0.6.11 → v0.6.12}/core/template/conf/templates.json +0 -0
  271. /package/framework/{v0.6.11 → v0.6.12}/core/template/error/client/json/401.json +0 -0
  272. /package/framework/{v0.6.11 → v0.6.12}/core/template/error/client/json/403.json +0 -0
  273. /package/framework/{v0.6.11 → v0.6.12}/core/template/error/client/json/404.json +0 -0
  274. /package/framework/{v0.6.11 → v0.6.12}/core/template/error/server/html/50x.html +0 -0
  275. /package/framework/{v0.6.11 → v0.6.12}/core/template/error/server/json/500.json +0 -0
  276. /package/framework/{v0.6.11 → v0.6.12}/core/template/error/server/json/503.json +0 -0
  277. /package/framework/{v0.6.11 → v0.6.12}/core/template/extensions/logger/config.json +0 -0
  278. /package/framework/{v0.6.11 → v0.6.12}/helpers/console.js +0 -0
  279. /package/framework/{v0.6.11 → v0.6.12}/helpers/context.js +0 -0
  280. /package/framework/{v0.6.11 → v0.6.12}/helpers/data/README.md +0 -0
  281. /package/framework/{v0.6.11 → v0.6.12}/helpers/data/src/main.js +0 -0
  282. /package/framework/{v0.6.11 → v0.6.12}/helpers/dateFormat.js +0 -0
  283. /package/framework/{v0.6.11 → v0.6.12}/helpers/index.js +0 -0
  284. /package/framework/{v0.6.11 → v0.6.12}/helpers/json/README.md +0 -0
  285. /package/framework/{v0.6.11 → v0.6.12}/helpers/json/src/main.js +0 -0
  286. /package/framework/{v0.6.11 → v0.6.12}/helpers/path.js +0 -0
  287. /package/framework/{v0.6.11 → v0.6.12}/helpers/plugins/README.md +0 -0
  288. /package/framework/{v0.6.11 → v0.6.12}/helpers/plugins/src/api-error.js +0 -0
  289. /package/framework/{v0.6.11 → v0.6.12}/helpers/plugins/src/main.js +0 -0
  290. /package/framework/{v0.6.11 → v0.6.12}/helpers/prototypes.js +0 -0
  291. /package/framework/{v0.6.11 → v0.6.12}/helpers/task.js +0 -0
  292. /package/framework/{v0.6.11 → v0.6.12}/helpers/text.js +0 -0
  293. /package/framework/{v0.6.11 → v0.6.12}/lib/admin/src/main.js +0 -0
  294. /package/framework/{v0.6.11 → v0.6.12}/lib/archiver/README.md +0 -0
  295. /package/framework/{v0.6.11 → v0.6.12}/lib/archiver/build.json +0 -0
  296. /package/framework/{v0.6.11 → v0.6.12}/lib/archiver/src/dep/jszip.min.js +0 -0
  297. /package/framework/{v0.6.11 → v0.6.12}/lib/archiver/src/main.js +0 -0
  298. /package/framework/{v0.6.11 → v0.6.12}/lib/async/src/main.js +0 -0
  299. /package/framework/{v0.6.11 → v0.6.12}/lib/audit/src/main.js +0 -0
  300. /package/framework/{v0.6.11 → v0.6.12}/lib/audit-store.js +0 -0
  301. /package/framework/{v0.6.11 → v0.6.12}/lib/authn/package.json +0 -0
  302. /package/framework/{v0.6.11 → v0.6.12}/lib/authn/src/lockout.js +0 -0
  303. /package/framework/{v0.6.11 → v0.6.12}/lib/authn/src/main.js +0 -0
  304. /package/framework/{v0.6.11 → v0.6.12}/lib/authn/src/totp.js +0 -0
  305. /package/framework/{v0.6.11 → v0.6.12}/lib/authz-gate/package.json +0 -0
  306. /package/framework/{v0.6.11 → v0.6.12}/lib/authz-gate/src/main.js +0 -0
  307. /package/framework/{v0.6.11 → v0.6.12}/lib/cache/README.md +0 -0
  308. /package/framework/{v0.6.11 → v0.6.12}/lib/cache/build.json +0 -0
  309. /package/framework/{v0.6.11 → v0.6.12}/lib/cache/src/main.js +0 -0
  310. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/aliases.json +0 -0
  311. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/audit/arguments.json +0 -0
  312. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/audit/help.txt +0 -0
  313. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/audit/verify.js +0 -0
  314. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/add.js +0 -0
  315. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/arguments.json +0 -0
  316. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/build.js +0 -0
  317. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/copy.js +0 -0
  318. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/cp.js +0 -0
  319. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/help.js +0 -0
  320. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/help.txt +0 -0
  321. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  322. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/list.js +0 -0
  323. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/man.js +0 -0
  324. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/mcp-start.js +0 -0
  325. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/mcp.js +0 -0
  326. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/oas.js +0 -0
  327. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/openapi.js +0 -0
  328. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/remove.js +0 -0
  329. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/rename.js +0 -0
  330. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/restart.js +0 -0
  331. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/rm.js +0 -0
  332. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/start.js +0 -0
  333. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/status.js +0 -0
  334. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/stop.js +0 -0
  335. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/bundle/types.js +0 -0
  336. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/cache/arguments.json +0 -0
  337. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/cache/clear.js +0 -0
  338. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/cache/help.txt +0 -0
  339. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/cache/stats.js +0 -0
  340. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/add.js +0 -0
  341. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/arguments.json +0 -0
  342. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/help.js +0 -0
  343. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/help.txt +0 -0
  344. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/infer.js +0 -0
  345. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/list.js +0 -0
  346. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/migrate.js +0 -0
  347. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/models.js +0 -0
  348. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/remove.js +0 -0
  349. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/rm.js +0 -0
  350. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/connector/test.js +0 -0
  351. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/container/arguments.json +0 -0
  352. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/container/help.js +0 -0
  353. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/container/help.txt +0 -0
  354. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/container/man.js +0 -0
  355. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/container/ps.js +0 -0
  356. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/container/stop.js +0 -0
  357. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/add.js +0 -0
  358. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/arguments.json +0 -0
  359. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/help.txt +0 -0
  360. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/inc/args.js +0 -0
  361. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/inc/namespace.js +0 -0
  362. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  363. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/inc/reference-scan.js +0 -0
  364. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/inc/scaffold.js +0 -0
  365. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/remove.js +0 -0
  366. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/rename.js +0 -0
  367. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/controller/rm.js +0 -0
  368. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/add.js +0 -0
  369. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/get.js +0 -0
  370. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/help.js +0 -0
  371. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/help.txt +0 -0
  372. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/link-dev.js +0 -0
  373. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/list.js +0 -0
  374. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/remove.js +0 -0
  375. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/rm.js +0 -0
  376. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/set.js +0 -0
  377. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/unset.js +0 -0
  378. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/env/use.js +0 -0
  379. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/add.js +0 -0
  380. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/arguments.json +0 -0
  381. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/build.js +0 -0
  382. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/dot.js +0 -0
  383. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/get.js +0 -0
  384. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/help.js +0 -0
  385. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/help.txt +0 -0
  386. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/init.js +0 -0
  387. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/link-node-modules.js +0 -0
  388. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/link.js +0 -0
  389. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/list.js +0 -0
  390. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/man.js +0 -0
  391. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/msg.json +0 -0
  392. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/open.js +0 -0
  393. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/remove.js +0 -0
  394. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/reset.js +0 -0
  395. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/restart.js +0 -0
  396. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/set.js +0 -0
  397. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/start.js +0 -0
  398. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/status.js +0 -0
  399. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/stop.js +0 -0
  400. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/tail.js +0 -0
  401. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/update.js +0 -0
  402. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/framework/version.js +0 -0
  403. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/helper.js +0 -0
  404. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/i18n/add.js +0 -0
  405. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/i18n/arguments.json +0 -0
  406. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/i18n/export.js +0 -0
  407. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/i18n/help.js +0 -0
  408. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/i18n/help.txt +0 -0
  409. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/i18n/import.js +0 -0
  410. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/i18n/scan.js +0 -0
  411. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/_host.js +0 -0
  412. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/arguments.json +0 -0
  413. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/build.js +0 -0
  414. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/help.js +0 -0
  415. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/help.txt +0 -0
  416. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/list.js +0 -0
  417. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/man.js +0 -0
  418. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/rm.js +0 -0
  419. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/image/run.js +0 -0
  420. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/index.js +0 -0
  421. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/inspector/help.js +0 -0
  422. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/inspector/help.txt +0 -0
  423. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/inspector/open.js +0 -0
  424. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/man-render.js +0 -0
  425. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/minion/arguments.json +0 -0
  426. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/minion/help.js +0 -0
  427. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/minion/help.txt +0 -0
  428. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/minion/kill.js +0 -0
  429. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/minion/list.js +0 -0
  430. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/msg.json +0 -0
  431. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/port/help.js +0 -0
  432. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/port/help.txt +0 -0
  433. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/port/inc/scan.js +0 -0
  434. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/port/list.js +0 -0
  435. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/port/reset.js +0 -0
  436. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/port/set.js +0 -0
  437. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/add.js +0 -0
  438. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/arguments.json +0 -0
  439. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/backup.js +0 -0
  440. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/build.js +0 -0
  441. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/help.js +0 -0
  442. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/help.txt +0 -0
  443. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/import.js +0 -0
  444. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/list.js +0 -0
  445. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/man.js +0 -0
  446. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/move.js +0 -0
  447. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/remove.js +0 -0
  448. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/rename.js +0 -0
  449. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/restart.js +0 -0
  450. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/restore.js +0 -0
  451. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/rm.js +0 -0
  452. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/start.js +0 -0
  453. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/status.js +0 -0
  454. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/project/stop.js +0 -0
  455. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/protocol/arguments.json +0 -0
  456. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/protocol/help.js +0 -0
  457. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/protocol/help.txt +0 -0
  458. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/protocol/list.js +0 -0
  459. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/protocol/remove.js +0 -0
  460. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/protocol/set.js +0 -0
  461. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/add.js +0 -0
  462. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/help.js +0 -0
  463. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/help.txt +0 -0
  464. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/link-local.js +0 -0
  465. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/link-production.js +0 -0
  466. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/list.js +0 -0
  467. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/remove.js +0 -0
  468. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/rm.js +0 -0
  469. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/scope/use.js +0 -0
  470. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/secrets/arguments.json +0 -0
  471. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/secrets/check.js +0 -0
  472. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/secrets/help.js +0 -0
  473. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/secrets/help.txt +0 -0
  474. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/secrets/scan.js +0 -0
  475. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/service/help.js +0 -0
  476. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/service/help.txt +0 -0
  477. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/service/list.js +0 -0
  478. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/service/man.js +0 -0
  479. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/service/start.js +0 -0
  480. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/storage/arguments.json +0 -0
  481. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/storage/gc.js +0 -0
  482. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/storage/help.txt +0 -0
  483. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/storage/stats.js +0 -0
  484. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/storage/verify.js +0 -0
  485. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd/view/add.js +0 -0
  486. /package/framework/{v0.6.11 → v0.6.12}/lib/cmd-status-format/src/main.js +0 -0
  487. /package/framework/{v0.6.11 → v0.6.12}/lib/collection/README.md +0 -0
  488. /package/framework/{v0.6.11 → v0.6.12}/lib/collection/build.json +0 -0
  489. /package/framework/{v0.6.11 → v0.6.12}/lib/config.js +0 -0
  490. /package/framework/{v0.6.11 → v0.6.12}/lib/connector-config/src/main.js +0 -0
  491. /package/framework/{v0.6.11 → v0.6.12}/lib/connector-error/src/main.js +0 -0
  492. /package/framework/{v0.6.11 → v0.6.12}/lib/connector-registry/src/main.js +0 -0
  493. /package/framework/{v0.6.11 → v0.6.12}/lib/cron/README.md +0 -0
  494. /package/framework/{v0.6.11 → v0.6.12}/lib/cron/src/main.js +0 -0
  495. /package/framework/{v0.6.11 → v0.6.12}/lib/domain/README.md +0 -0
  496. /package/framework/{v0.6.11 → v0.6.12}/lib/domain/src/main.js +0 -0
  497. /package/framework/{v0.6.11 → v0.6.12}/lib/dto/src/main.js +0 -0
  498. /package/framework/{v0.6.11 → v0.6.12}/lib/dto-pipe/package.json +0 -0
  499. /package/framework/{v0.6.11 → v0.6.12}/lib/dto-pipe/src/main.js +0 -0
  500. /package/framework/{v0.6.11 → v0.6.12}/lib/dto-types/src/main.js +0 -0
  501. /package/framework/{v0.6.11 → v0.6.12}/lib/generator/index.js +0 -0
  502. /package/framework/{v0.6.11 → v0.6.12}/lib/i18n/src/main.js +0 -0
  503. /package/framework/{v0.6.11 → v0.6.12}/lib/image-build/src/main.js +0 -0
  504. /package/framework/{v0.6.11 → v0.6.12}/lib/index.js +0 -0
  505. /package/framework/{v0.6.11 → v0.6.12}/lib/inherits/LICENSE +0 -0
  506. /package/framework/{v0.6.11 → v0.6.12}/lib/inherits/README.md +0 -0
  507. /package/framework/{v0.6.11 → v0.6.12}/lib/inherits/package.json +0 -0
  508. /package/framework/{v0.6.11 → v0.6.12}/lib/inherits/src/main.js +0 -0
  509. /package/framework/{v0.6.11 → v0.6.12}/lib/inspector-events/package.json +0 -0
  510. /package/framework/{v0.6.11 → v0.6.12}/lib/inspector-events/src/main.js +0 -0
  511. /package/framework/{v0.6.11 → v0.6.12}/lib/inspector-redact/src/main.js +0 -0
  512. /package/framework/{v0.6.11 → v0.6.12}/lib/instrument/package.json +0 -0
  513. /package/framework/{v0.6.11 → v0.6.12}/lib/instrument/src/main.js +0 -0
  514. /package/framework/{v0.6.11 → v0.6.12}/lib/job/src/main.js +0 -0
  515. /package/framework/{v0.6.11 → v0.6.12}/lib/job-store.js +0 -0
  516. /package/framework/{v0.6.11 → v0.6.12}/lib/json-config-header/src/main.js +0 -0
  517. /package/framework/{v0.6.11 → v0.6.12}/lib/loading-state/package.json +0 -0
  518. /package/framework/{v0.6.11 → v0.6.12}/lib/loading-state/src/main.js +0 -0
  519. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/README.md +0 -0
  520. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/containers/default/index.js +0 -0
  521. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/containers/file/index.js +0 -0
  522. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  523. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  524. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/containers/mq/index.js +0 -0
  525. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/containers/mq/listener.js +0 -0
  526. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/containers/mq/speaker.js +0 -0
  527. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/helper.js +0 -0
  528. /package/framework/{v0.6.11 → v0.6.12}/lib/logger/src/main.js +0 -0
  529. /package/framework/{v0.6.11 → v0.6.12}/lib/maintenance/src/main.js +0 -0
  530. /package/framework/{v0.6.11 → v0.6.12}/lib/math/index.js +0 -0
  531. /package/framework/{v0.6.11 → v0.6.12}/lib/mcp-dispatch/src/main.js +0 -0
  532. /package/framework/{v0.6.11 → v0.6.12}/lib/mcp-http/src/main.js +0 -0
  533. /package/framework/{v0.6.11 → v0.6.12}/lib/mcp-server/src/main.js +0 -0
  534. /package/framework/{v0.6.11 → v0.6.12}/lib/merge/README.md +0 -0
  535. /package/framework/{v0.6.11 → v0.6.12}/lib/merge/src/main.js +0 -0
  536. /package/framework/{v0.6.11 → v0.6.12}/lib/metrics/src/main.js +0 -0
  537. /package/framework/{v0.6.11 → v0.6.12}/lib/model.js +0 -0
  538. /package/framework/{v0.6.11 → v0.6.12}/lib/net-locality/src/main.js +0 -0
  539. /package/framework/{v0.6.11 → v0.6.12}/lib/nunjucks-filters/README.md +0 -0
  540. /package/framework/{v0.6.11 → v0.6.12}/lib/nunjucks-filters/src/main.js +0 -0
  541. /package/framework/{v0.6.11 → v0.6.12}/lib/nunjucks-resolver/src/main.js +0 -0
  542. /package/framework/{v0.6.11 → v0.6.12}/lib/proc.js +0 -0
  543. /package/framework/{v0.6.11 → v0.6.12}/lib/push/src/main.js +0 -0
  544. /package/framework/{v0.6.11 → v0.6.12}/lib/release-watch/src/main.js +0 -0
  545. /package/framework/{v0.6.11 → v0.6.12}/lib/render-cache/src/main.js +0 -0
  546. /package/framework/{v0.6.11 → v0.6.12}/lib/render-cache-store.js +0 -0
  547. /package/framework/{v0.6.11 → v0.6.12}/lib/routing/README.md +0 -0
  548. /package/framework/{v0.6.11 → v0.6.12}/lib/routing/build.json +0 -0
  549. /package/framework/{v0.6.11 → v0.6.12}/lib/routing/src/main.js +0 -0
  550. /package/framework/{v0.6.11 → v0.6.12}/lib/routing/src/radix.js +0 -0
  551. /package/framework/{v0.6.11 → v0.6.12}/lib/routing-introspect/src/main.js +0 -0
  552. /package/framework/{v0.6.11 → v0.6.12}/lib/secrets/src/backends/env.js +0 -0
  553. /package/framework/{v0.6.11 → v0.6.12}/lib/secrets/src/backends/file.js +0 -0
  554. /package/framework/{v0.6.11 → v0.6.12}/lib/secrets/src/env-file.js +0 -0
  555. /package/framework/{v0.6.11 → v0.6.12}/lib/secrets/src/main.js +0 -0
  556. /package/framework/{v0.6.11 → v0.6.12}/lib/session-store.js +0 -0
  557. /package/framework/{v0.6.11 → v0.6.12}/lib/shell.js +0 -0
  558. /package/framework/{v0.6.11 → v0.6.12}/lib/sqlite-driver.js +0 -0
  559. /package/framework/{v0.6.11 → v0.6.12}/lib/state.js +0 -0
  560. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/package.json +0 -0
  561. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/src/local-cas.js +0 -0
  562. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/src/local-stream.js +0 -0
  563. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/src/local.js +0 -0
  564. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/src/main.js +0 -0
  565. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/src/meta-store.js +0 -0
  566. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/src/s3.js +0 -0
  567. /package/framework/{v0.6.11 → v0.6.12}/lib/storage/src/util.js +0 -0
  568. /package/framework/{v0.6.11 → v0.6.12}/lib/storage-store.js +0 -0
  569. /package/framework/{v0.6.11 → v0.6.12}/lib/swig-filters/README.md +0 -0
  570. /package/framework/{v0.6.11 → v0.6.12}/lib/swig-filters/src/main.js +0 -0
  571. /package/framework/{v0.6.11 → v0.6.12}/lib/swig-resolver/src/main.js +0 -0
  572. /package/framework/{v0.6.11 → v0.6.12}/lib/template-loaders/src/loaders/http.js +0 -0
  573. /package/framework/{v0.6.11 → v0.6.12}/lib/template-loaders/src/loaders/memory.js +0 -0
  574. /package/framework/{v0.6.11 → v0.6.12}/lib/template-loaders/src/main.js +0 -0
  575. /package/framework/{v0.6.11 → v0.6.12}/lib/url/README.md +0 -0
  576. /package/framework/{v0.6.11 → v0.6.12}/lib/url/index.js +0 -0
  577. /package/framework/{v0.6.11 → v0.6.12}/lib/url/routing.json +0 -0
  578. /package/framework/{v0.6.11 → v0.6.12}/lib/uuid/package.json +0 -0
  579. /package/framework/{v0.6.11 → v0.6.12}/lib/uuid/src/main.js +0 -0
  580. /package/framework/{v0.6.11 → v0.6.12}/lib/validator.js +0 -0
  581. /package/framework/{v0.6.11 → v0.6.12}/lib/watcher/src/main.js +0 -0
  582. /package/framework/{v0.6.11 → v0.6.12}/lib/ws-framing/src/main.js +0 -0
  583. /package/framework/{v0.6.11 → v0.6.12}/lib/ws-query/src/main.js +0 -0
  584. /package/framework/{v0.6.11 → v0.6.12}/lib/ws-session/src/main.js +0 -0
package/AUTHORS CHANGED
@@ -1,7 +1,7 @@
1
1
  # Authors (sorted alphabetically)
2
2
 
3
3
  Fabrice DELANEAU <fabrice.delaneau@gina.io>
4
- Martin Luther ETOUMAN <martin-luther.etouman@gina.io>
4
+ Martin Luther ETOUMAN NDAMBWE <martin-luther.etouman@gina.io>
5
5
 
6
6
  # Contributors (sorted alphabetically)
7
7
 
package/CHANGELOG.md CHANGED
@@ -6,6 +6,12 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.6.12 - 2026-08-20
10
+ ### Fixed
11
+ * Refreshed the external references carried by the framework READMEs. The country-codes locale README pointed at a Simple Data Format specification URL that no longer exists (404); it now names the Tabular Data Package specification that superseded it, matching the upstream dataset the file mirrors. Every remaining plain-HTTP reference in the locales and frontend-asset READMEs is now HTTPS, with the geonames.org link resolved to the www host because the bare domain redirects back down to HTTP. Documentation only; no runtime or API change.
12
+ * Collection.find(), findOne(), or() and update() now throw a descriptive Error - naming the offending key - when a filter object carries an undefined value, instead of silently dropping the key. Previously the internal JSON round-trip stripped such keys before matching, so a single-key filter degraded to the match-everything {} filter: findOne({ id: source.missingId }) returned the collection's FIRST row instead of null, and update() with such a filter mutated EVERY record. ACTION REQUIRED if you relied on the old behaviour: build filters conditionally (only add a key when its value is defined) - an explicitly empty {} filter still means "no constraint" and null values remain legal needles. The refusal also hardens the FormValidator's conditional-case rules lookup, which could previously merge the first condition's rules when the case field was absent from the form.
13
+ * A non-string field value no longer aborts the whole form validation pass. The isEmail, isJsonWebToken and trim rules called a string method on the field value without checking its type, so a value like 123, true or [] - reachable from a JSON request body, or from a checkbox on the client - threw, and the rule driver re-threw, killing every remaining field: server-side the request went unvalidated, client-side the boot-time binding loop died and later forms silently lost validation and CSRF token injection. All three now leave a non-string untouched: isEmail and isJsonWebToken record a normal rule error for it (it is invalid, not silently accepted), and trim passes it through untransformed, matching how isFloat already behaved. Whitespace trimming of real strings is unchanged.
14
+
9
15
  ## 0.6.11 - 2026-08-19
10
16
  ### Fixed
11
17
  * The Inspector's View tab could show two badges instead of three, dropping the page-weight badge until the Inspector was refreshed, and its Flow tab could be missing the template-compile, execute, response-write and total bars (#B386). Both came from one cause: the dev statusbar hands the page payload to the Inspector before the render delegates append their late-bind patch script above `</body>`, and that patch only mutated the in-memory object. Every channel the Inspector can read therefore kept the emit-time payload for the life of the page, with the page weight left null (it is unknown at emit, since the response body length is not final until the render completes) and the late timeline entries absent. The asymmetry is what made it look intermittent rather than broken: the server-side processing time IS known at emit, so the load badge always rendered while the weight badge silently did not. Both of the Inspector's data channels are now refreshed at the end of that patch, after the values are written: the localStorage fallback mirror, and the per-tab broadcast channel a statusbar-launched Inspector actually binds to. The broadcast channel is keyed from per-tab session storage rather than the shared cross-tab advert, so one tab can never publish onto another tab's channel. The nunjucks delegate additionally now injects its patch through a function replacer rather than a string one, so a timeline entry containing a dollar-sequence can no longer corrupt the emitted script. Development-mode only; no configuration change is required.
package/CONTRIBUTING.md CHANGED
@@ -270,5 +270,5 @@ Open a GitHub issue describing the use case **before** writing code. Features th
270
270
 
271
271
  | Name | Role | Profile |
272
272
  | --- | --- | --- |
273
- | Martin Luther | Lead maintainer | [rhinostone.com](https://rhinostone.com) |
273
+ | Martin Luther ETOUMAN NDAMBWE | Lead maintainer | [rhinostone.com](https://rhinostone.com) |
274
274
  | Fabrice DELANEAU | Co-author | [fdelaneau.com](https://fdelaneau.com) |
package/GOVERNANCE.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gina follows the **BDFL** (Benevolent Dictator For Life) model with a commitment to transparency.
4
4
 
5
- Gina is co-authored by **Martin Luther** ([Rhinostone](https://rhinostone.com)) and **Fabrice DELANEAU** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously.
5
+ Gina is co-authored by **Martin Luther ETOUMAN NDAMBWE** ([Rhinostone](https://rhinostone.com)) and **Fabrice DELANEAU** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously.
6
6
 
7
7
  ## How decisions are made
8
8
 
package/README.md CHANGED
@@ -61,33 +61,28 @@ open https://localhost:3100
61
61
 
62
62
  > **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
63
63
 
64
- ## What's in 0.6.11
64
+ ## What's in 0.6.12
65
65
 
66
66
  > **Restart your bundles AND rebuild them.** The browser bundle changed in this
67
- > release (`Collection.replace()` and the four FormValidator fixes are bundled),
68
- > so a restart alone keeps serving the old client code — run `gina bundle:build`
69
- > for each bundle as well as `gina bundle:restart`.
67
+ > release — both code fixes below ship in it (`lib/collection` and the
68
+ > FormValidator rule engine), so a restart alone keeps serving the old client
69
+ > code. Run `gina bundle:build` for each bundle as well as `gina bundle:restart`.
70
70
 
71
- > **No settings reset.** `0.6.11` is a patch — the `shortVersion` stays `0.6`, so
71
+ > **No settings reset.** `0.6.12` is a patch — the `shortVersion` stays `0.6`, so
72
72
  > your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
73
73
 
74
- **This is a fixes-only release: seven fixes, two of them reported through GitHub
75
- issues (#63, #64).** It closes a silent lossy write in `Collection.replace()`, a
76
- cross-delivery / hang defect for concurrent `util.promisify(entity.method)`
77
- calls, four FormValidator defects (Safari caret scrambling plus three caret edge
78
- cases, and two submit-time display races on async-`query` forms), and a
79
- development-mode Inspector data-channel staleness. **One behaviour change to
80
- check before you upgrade** `Collection.replace()` now throws where it
81
- previously failed silently, when neither side of the comparison carries a usable
82
- key. Details are in the [migration guide](https://gina.io/docs/migration).
83
-
84
- - **Fixed — `Collection.replace()` no longer silently discards the write (#B393, issue #64).** When the stored entry carried an internal `_uuid` and the caller's `set` object did not, the comparison key was resolved from the stored entry alone, so the comparison became `<storedUuid> == undefined`never true: nothing matched, nothing was replaced, no error was raised, and the call returned a result that looked successful. A stored `_uuid` is present exactly when you re-load an array a previous chained call returned, which is why the failure looked intermittent. The key is now resolved from **both** sides the stored entry and the `set` falling back to `id` when both carry one, and the call now **throws `No comparison key defined !`** when the two sides share no usable key, so the one unmatchable combination is no longer the only one that stays quiet. An explicitly supplied key argument is honoured exactly as before, and the resolved key is scoped per entry, so a fallback taken for one entry can no longer apply to the entries examined after it. Every previously-working call is unaffected. Browser-bundled.
85
- - **Fixed — concurrent `util.promisify(entity.method)` calls no longer cross-deliver results or leave a caller hanging (#B394).** The promisify fast-path kept a single scalar callback slot: a second in-flight call on the same method overwrote the first, so the first result to arrive was delivered to the last caller to register (one caller receiving another's record), and the displaced caller's promise never settled a request left hanging with nothing logged, and a read-modify-write variant that could persist one key's document under another. The fast-path now uses the same FIFO queue and single persistent dispatcher as the entity-context path: every concurrent caller settles, and when the underlying operations complete in the order they were called, each caller receives its own result. When operations can complete out of call order, results are still paired by arrival order give such a method true per-call identity by returning a Promise instead of emitting its trigger (see the [Models guide](https://gina.io/docs/guides/models)). Server-side.
86
- - **Fixed — FormValidator: fast typing into a Safari `autocomplete="off"` field no longer scrambles the text (#B389, issue #63), plus three position-0 edge cases in the same interception (#B390, #B391, #B392).** The keydown interception restored the caret two timer hops after each programmatic value rebuild — and a value assignment parks the caret at the end of the field — so a quick second keystroke read a stale position and characters landed at the end instead of at the caret. Every rebuild now commits the caret synchronously and records the intended position; while a deferred restore is in flight the interception trusts that record, and the restore re-asserts the latest committed position instead of a stale capture. In the same switch, Backspace at position 0 no longer deletes the first character (native is a no-op), Delete with a selection starting at position 0 no longer removes one character more than the selection, and ArrowLeft at position 0 no longer teleports the caret to the end of the field. Browser-bundled.
87
- - **Fixed — FormValidator: a refused submit's answer stays visible and focused on async-`query` forms (#B387).** On a form with an async `query` rule and a committed error, a refused submit's answer could render, take focus, and then be hidden again milliseconds later when the click landed while a previous validation round was still settling — the late completion's display refresh read the answered field as "being typed in" (it was the active element, because the answer had just focused it) and re-hid the very message the answer had rendered. The framework now records that the focus was placed by the answer rather than by the user, both display-refresh paths honour that record however late they run, and the first genuine user interaction (typing, clicking, tabbing away) releases it — so the deliberate hide-while-typing behaviour is unchanged. Browser-bundled.
88
- - **Fixed — FormValidator: a stale not-ready submit marker can no longer refuse every click until reload (#B348).** On a form whose async `query` rule rides a field that is not declared last, the display-only validation pass answering a refused submit click could silently never complete — its result matched no completion route — so the stale not-ready marker on the submit trigger was never re-synced and a fully valid form kept refusing every click. That pass now carries its own completion identity and always completes: the refused click renders the current validation state, the trigger state re-syncs from the fresh result, and the next click on a valid form goes through. Field declaration order no longer decides whether a stale marker can heal. Browser-bundled.
89
- - **Fixed — Inspector (development mode): the View tab's page-weight badge and the Flow tab's late timeline bars no longer go missing until the Inspector is refreshed (#B386).** The dev statusbar hands the page payload to the Inspector before the render delegates append their late-bind patch script above `</body>`, and that patch only mutated the in-memory object — so every channel the Inspector can read kept the emit-time payload for the life of the page, with the page weight left null (it is unknown at emit) and the template-compile, execute, response-write and total bars absent. Both of the Inspector's data channels — the localStorage fallback mirror and the per-tab broadcast channel a statusbar-launched Inspector actually binds to — are now refreshed at the end of that patch, after the values are written; the broadcast channel is keyed from per-tab session storage rather than the shared cross-tab advert, so one tab can never publish onto another tab's channel. The nunjucks delegate additionally injects its patch through a function replacer rather than a string one, so a timeline entry containing a dollar sequence can no longer corrupt the emitted script. Server-side; development mode only; no configuration change is required.
90
-
74
+ **This is a fixes-only release: three fixes, two of them reported through GitHub
75
+ issues (#62, #65).** It closes a silent match-everything defect in the
76
+ `Collection` filter path and a crash in three validator rules that took the rest
77
+ of the validation pass down with it. **Two behaviour changes to check before you
78
+ upgrade** an undefined-valued `Collection` filter key now throws where it
79
+ previously matched every record, and `isEmail` / `isJsonWebToken` / `trim` now
80
+ record a normal verdict for a non-string value instead of aborting the pass.
81
+ Details are in the [migration guide](https://gina.io/docs/migration).
82
+
83
+ - **Fixed — `Collection.find()`, `findOne()`, `or()` and `update()` refuse an undefined-valued filter key instead of matching everything (#B396, issue #65).** `find()` round-trips its filter objects through `JSON.stringify`, which silently **drops** keys whose value is `undefined` — so a single-key filter built from a possibly-absent field degraded to the match-everything `{}` filter. `findOne({ id: source.missingId })` returned the collection's **first row** instead of the `null` the calling guard was written for, and `update()` with such a filter wrote its `set` onto **every** record. The refusal always intended for this input could never fire, because the serialization stripped the key before the matcher ran. All four entry points now throw a descriptive error naming the offending key. **ACTION REQUIRED if you relied on the old behaviour** (an undefined value acting as "no constraint"): build the filter conditionally, adding a key only when its value is defined. Deliberately unchanged — an explicitly empty `{}` filter still means "no constraint", `null` remains a legal needle, and `delete()` / `notIn()` never had the defect. The same refusal also hardens the FormValidator's conditional-case rules lookup, which could previously merge the first condition's rules when the case field was absent from the form. Browser-bundled.
84
+ - **Fixed — a non-string field value no longer aborts the whole form validation pass (#B200).** The `isEmail`, `isJsonWebToken` and `trim` rules called a string method on the field value without checking its type, so a value that was not a string a `123`, `true` or `[]` arriving from a JSON request body, or a checkbox boolean on the client threw, and the rule driver re-threw, **killing every remaining field in the pass**. Server-side the request went unvalidated; client-side the boot-time binding loop died, and forms bound after the failing one silently lost both validation and CSRF token injection. All three now leave a non-string untouched: `isEmail` and `isJsonWebToken` record their normal rule error for it (the value is *invalid*, not silently accepted), and `trim`, being a transform rather than a check, passes it through untransformed matching how `isFloat` already behaved. Whitespace trimming of real strings is unchanged. No action is required; if you added a defensive upstream coercion to work around the crash, you can remove it. Browser-bundled.
85
+ - **Fixed — the external references carried by the framework READMEs are current again (issue #62).** The country-codes locale README pointed at a Simple Data Format specification URL that no longer resolves; it now names the Tabular Data Package specification that superseded it, matching the upstream dataset the file mirrors. Every remaining plain-HTTP reference in the locales and frontend-asset READMEs is now HTTPS, with the geonames.org link resolved to the `www` host because the bare domain redirects back down to HTTP. Documentation onlyno runtime or API change.
91
86
  ## Documentation
92
87
 
93
88
  Full installation guide, tutorials, configuration reference, and API docs at **[gina.io/docs](https://gina.io/docs/)**.
package/ROADMAP.md CHANGED
@@ -63,6 +63,7 @@ This roadmap covers planned features, architectural improvements, new connectors
63
63
  | **Q4 2026** | `0.6.9` ✅ | **Security**: an engine.io socket's session identity is derived server-side from the upgrade request's own cookie instead of a field the browser asserts on every message — any client could previously claim another user's session and receive the pushes addressed to it, which took strictly less than stealing the cookie, since a rendered page carries the bare session id while the cookie carries the signed form; the binding replays the bundle's own session middleware (same secret, store and cookie name, no new configuration) and fails closed, so an id-less socket receives only deliberate broadcasts · **Added**: `gina.pushToSession()` gives code with no request context — a job handler, a cron tick, a boot hook — a sanctioned route to a user's socket, with a required recipient, no reachable broadcast, and delivery reported rather than assumed; and a bundle can declare which scopes it is deployed in through a `scopes` allow-list on its manifest entry, so one still under development stays out of every other scope · **Fixed**: `engine: "express"` bundles boot and serve on Express 5, with the supported range declared for the first time (`>= 4 < 6`, both majors verified live) · `project:add`/`project:import` no longer empty a project's `bundles` block on a declared-count mismatch, no longer adopt a bundle's invalid `server.protocol`/`server.scheme` into the project's registry lists, and no longer resolve one project's bundles against another project's path · `project:add` writes the `.gitignore` the shipped template's underscore prefix has always implied · the path helper's copier stages to a temp sibling and publishes with an atomic rename, so a failed copy can no longer destroy the destination it was replacing · the secrets resolver reads its two environment tiers independently, so a swept boolean no longer lets a plaintext file shadow `process.env`, and three malformed `settings.secrets.file` shapes that used to pass in silence are caught (ACTION REQUIRED — two of them now refuse to boot) · a bundle whose release tree cannot be linked refuses by name instead of dying as an opaque TypeError · `self.push()` refuses by name when the server instance has no engine.io channel |
64
64
  | **Q4 2026** | `0.6.10` ✅ | **Added**: maintenance mode — a bundle can be closed to the public without being stopped. When it is active every request except the framework's own built-in endpoints is answered `503` with a `Retry-After` header and a self-contained maintenance page, and the response is marked never to be stored so a cached copy cannot outlive the window. The gate runs on both engines ahead of static assets, the output cache and routing, so it also covers files and URLs that a route middleware never sees. The liveness endpoint deliberately keeps answering normally, so an orchestrator does not restart healthy instances over a declared window. Chosen visitors can still browse: a shared bypass key presented as a header or once in the address bar (which then sets a short-lived cookie and redirects without the secret) works under any deployment, while the supplementary IP allowlist applies only to requests that did not arrive through a reverse proxy — behind one, every address is the proxy's, so an unconditioned list would let either everybody or nobody through. Maintenance can be flipped at runtime through an administrator-gated endpoint with an optional expiry; a runtime flip is not persisted, and an expiry reverts to the configured state rather than to off, so a forgotten timer cannot re-open a site that configuration says is closed. **Fixed**: boot-time bundle mounts are idempotent, atomic and concurrency-safe — a mount symlink that already resolves to its source is left untouched (so the steady-state boot writes nothing), a wrong or missing one is published atomically through a temp sibling and a rename, and a process that loses the race to another publishing the identical link treats that as success instead of refusing to boot. Previously every boot re-created every declared bundle's link in two non-atomic steps with no mutual exclusion, so several processes sharing one project tree raced the same directory entries and a contended link could fail a boot or abort the shared configuration load for every bundle in the project. The same race is closed on the directory creation that accompanies a mount. Behaviour change: a real directory occupying a mount path is now refused by name instead of silently deleted. **Security**: cross-origin writes to the administrator-gated built-in endpoints are refused. Those endpoints authorise callers by network address alone — a credential a browser attaches automatically — so an operator browsing from an allowed machine could be lured to a page that silently issued writes to them; and because several of them read their whole input from the address rather than from a request body, the attack needed no scripting and no cross-origin negotiation at all. Such a write is now refused on both engines, using the browser's own request-context signal where it is sent, and otherwise comparing the stated origin against the address the client actually connected to — never against a forwarded header, which an attacker controls. Clients that send no browser origin signal, such as command-line tooling and deployment scripts, are deliberately unaffected, as are safe methods, so existing cross-origin read channels keep working. | `0.6.10` | 2026-08-16 |
65
65
  | **Q4 2026** | `0.6.11` ✅ | **Fixed**: `Collection.replace()` no longer silently discards the write when the stored entry carries an internal `_uuid` and the caller's `set` does not — the comparison key is now resolved from both sides (falling back to `id` when both carry one) and the call throws instead of returning quietly when the two sides share no usable key; an explicitly supplied key is honoured exactly as before (issue #64). Concurrent `util.promisify(entity.method)` calls on the same method no longer cross-deliver results or leave a caller hanging — the promisify fast-path now uses the same FIFO queue and single persistent dispatcher as the entity-context path, so every caller settles and in-order completion gives each its own result; out-of-order completion still pairs by arrival order, for which the per-call-identity path is a Promise-returning method. FormValidator: fast typing into a Safari `autocomplete="off"` field no longer scrambles the text (the caret is committed synchronously on every rebuild and the deferred restore re-asserts the latest committed position; issue #63), with three position-0 edge cases in the same interception corrected to native behaviour (Backspace, Delete with a selection, ArrowLeft); a refused submit's answer on an async-`query` form stays visible and focused instead of being re-hidden by a late completion (answer-placed focus is told from user-placed focus until the first genuine interaction); and a stale not-ready submit marker can no longer refuse every click until reload on a form whose async `query` field is not declared last (the reveal pass now carries its own completion identity and always completes). Inspector (development mode): the View tab's page-weight badge and the Flow tab's late timeline bars no longer go missing until a refresh — both data channels are refreshed at the end of the late-bind patch, keyed per tab. Pickup: restart **and** rebuild your bundles (the browser bundle changed). |
66
+ | **Q4 2026** | `0.6.12` ✅ | **Fixed**: an undefined-valued filter key no longer makes a `Collection` query match every record — `find()`, `findOne()`, `or()` and `update()` round-tripped their filter object through `JSON.stringify`, which silently drops keys whose value is `undefined`, so a filter built from a possibly-absent field degraded to the match-everything `{}` filter: `findOne()` returned the collection's first row instead of the `null` the calling guard expected, and `update()` wrote its `set` onto every record. All four now throw a descriptive error naming the offending key (ACTION REQUIRED if you relied on an undefined value meaning "no constraint" — build the filter conditionally; an explicitly empty `{}` still means no constraint, and `null` remains a legal needle). A non-string field value no longer aborts the whole form validation pass — `isEmail`, `isJsonWebToken` and `trim` called a string method on the value without a type check, so a `123`, `true` or `[]` arriving from a JSON body or a checkbox threw and the rule driver re-threw, killing every remaining field: the request went unvalidated server-side, and client-side the boot-time binding loop died so forms bound after it silently lost both validation and CSRF token injection. All three now leave a non-string untouched — the two checks record their normal rule error and `trim` passes it through untransformed, matching how `isFloat` already behaved (no action required; a defensive upstream coercion added to work around the crash can be removed). Documentation: the external references carried by the framework READMEs are current again, the retired Simple Data Format specification link replaced by the Tabular Data Package specification that superseded it, and every remaining plain-HTTP reference moved to HTTPS. Pickup: restart **and** rebuild your bundles (the browser bundle changed). |
66
67
  | **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
67
68
  | **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
68
69
  | **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys · sequence primitive · OAuth2 client-credentials egress |
@@ -2,6 +2,6 @@
2
2
  # project in one way or another.
3
3
  #
4
4
 
5
- Martin Luther ETOUMAN <contact@gina.io>
5
+ Martin Luther ETOUMAN NDAMBWE <contact@gina.io>
6
6
  Fabrice DELANEAU <contact+gina@fdelaneau.com>
7
7
  Stephane HEAV <stephane.heav@gmail.com>
@@ -0,0 +1 @@
1
+ 0.6.12
@@ -4,8 +4,8 @@ Last updated October 16th, 2016
4
4
 
5
5
  ## Requirements
6
6
 
7
- - [Requirejs](http://requirejs.org/)
8
- - [sass](http://sass-lang.com/install)
7
+ - [Requirejs](https://requirejs.org/)
8
+ - [sass](https://sass-lang.com/install)
9
9
  - [sass-lint](https://www.npmjs.com/package/sass-lint)
10
10
  - [csso](https://github.com/css/csso)
11
11
  - Java (for [Google Closure Compiler](https://developers.google.com/closure/compiler/))
@@ -4315,7 +4315,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
4315
4315
  self[el]['isEmail'] = function() {
4316
4316
 
4317
4317
 
4318
- this.value = local['data'][this.name] = (this.value) ? this.value.toLowerCase() : this.value;
4318
+ // #B200 - TYPE-guarded, not merely truthy-guarded: a truthy non-string
4319
+ // (a JSON body's 123 / true / [], or a checkbox boolean client-side —
4320
+ // see the #B87 note on the `query` rule) reached .toLowerCase() and
4321
+ // threw, and the rule driver RE-THROWS, so the whole validation pass
4322
+ // died. Non-strings now pass through untouched and the regex below
4323
+ // adjudicates them (measured: every non-string tests false, so this
4324
+ // records an invalid — it does not open a #B199-style silent bypass).
4325
+ this.value = local['data'][this.name] = (this.value && typeof(this.value) == 'string') ? this.value.toLowerCase() : this.value;
4319
4326
  // Apply on current field upper -> lower
4320
4327
  if (
4321
4328
  isGFFCtx
@@ -4361,7 +4368,9 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
4361
4368
  self[el]['isJsonWebToken'] = function() {
4362
4369
 
4363
4370
 
4364
- this.value = local['data'][this.name] = (this.value) ? this.value.toLowerCase() : this.value;
4371
+ // #B200 - TYPE-guarded, not merely truthy-guarded: see the isEmail
4372
+ // note above. Same defect, same fix, same in-file precedent (#B87).
4373
+ this.value = local['data'][this.name] = (this.value && typeof(this.value) == 'string') ? this.value.toLowerCase() : this.value;
4365
4374
  // Apply on current field upper -> lower
4366
4375
  if (
4367
4376
  isGFFCtx
@@ -5219,13 +5228,19 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet, culture) {
5219
5228
  * */
5220
5229
  self[el]['trim'] = function(isApplicable) {
5221
5230
  if ( typeof(isApplicable) == 'boolean' && isApplicable ) {
5222
- //if ( typeof(this.value) == 'string' ) {
5231
+ // #B200 - the type guard below was present but COMMENTED OUT, which
5232
+ // made this the widest of the three sites: with no truthy guard
5233
+ // either, EVERY non-string threw (a falsy 0 included, unlike the
5234
+ // isEmail/isJsonWebToken pair), and the driver re-throws, killing
5235
+ // the whole pass. Restored — a non-string is now left untouched,
5236
+ // matching how `isFloat` guards the identical .replace() call.
5237
+ if ( typeof(this.value) == 'string' ) {
5223
5238
  // was: this.value = this.value.replace(/^\s+|\s+$/, '');
5224
5239
  // #B245 - without the global flag, replace() rewrote only the FIRST
5225
5240
  // match: " x " came back "x " (leading stripped, trailing kept).
5226
5241
  this.value = this.value.replace(/^\s+|\s+$/g, '');
5227
5242
  local.data[this.name] = local.data[this.name] = this.value;
5228
- //}
5243
+ }
5229
5244
  return self[this.name]
5230
5245
  }
5231
5246
  }
@@ -26872,6 +26887,13 @@ if ( ( typeof(module) !== 'undefined' ) && module.exports ) {
26872
26887
  /**
26873
26888
  * In-memory document collection with query and mutation methods.
26874
26889
  *
26890
+ * Filter values must be defined: `find`/`findOne`/`or`/`update` throw an
26891
+ * `Error` naming the offending key when a filter object carries an
26892
+ * `undefined` value — build such filters conditionally (add a key only when
26893
+ * its value is defined). An explicitly empty `{}` filter is legal and
26894
+ * matches every record; `null` is a legal needle comparing strictly
26895
+ * against stored values.
26896
+ *
26875
26897
  * @class Collection
26876
26898
  * @constructor
26877
26899
  * @this {Collection}
@@ -26898,6 +26920,7 @@ if ( ( typeof(module) !== 'undefined' ) && module.exports ) {
26898
26920
  * col.or().find({ name: 'Alice' }, { name: 'Bob' });
26899
26921
  *
26900
26922
  * col.findOne({ id: 1 }); // { id:1, … }
26923
+ * col.findOne({ id: undefined }); // throws — filter values must be defined
26901
26924
  * col.update({ id: 1 }, { name: 'Alicia' });
26902
26925
  * col.insert({ id: 3, name: 'Carol' });
26903
26926
  * col.delete({ id: 2 });
@@ -27098,6 +27121,25 @@ function Collection(content, options) {
27098
27121
  }
27099
27122
 
27100
27123
 
27124
+ /**
27125
+ * find
27126
+ *
27127
+ * Filters the collection content with one or more filter objects.
27128
+ * Passing more than one filter object acts as an OR clause.
27129
+ *
27130
+ * Every filter value must be DEFINED. A key whose value is `undefined`
27131
+ * makes the whole call throw an Error naming the offending key: the JSON
27132
+ * round-trip below would otherwise silently drop the key, degrading the
27133
+ * filter to a weaker one — a single-key filter degraded to `{}` and
27134
+ * matched EVERY record (#B396, gh #65). An explicitly empty `{}` filter
27135
+ * stays legal and matches everything (no constraint). `null` values are
27136
+ * legal needles and compare strictly against stored values.
27137
+ *
27138
+ * @param {...object} filters - filter object(s); values compare with `===`
27139
+ * @param {boolean} [withOrClause] - trailing boolean, forces OR mode
27140
+ * @throws {Error} when any filter key's value is `undefined`
27141
+ * @returns {array} result - decorated result set (chainable)
27142
+ */
27101
27143
  instance['find'] = function() {
27102
27144
  // reset
27103
27145
  withOrClause = false;
@@ -27108,6 +27150,24 @@ function Collection(content, options) {
27108
27150
  --arguments.length;
27109
27151
  }
27110
27152
 
27153
+ // #B396 (gh #65) — refuse undefined-valued filter keys BEFORE the JSON
27154
+ // round-trip below: JSON.stringify() silently DROPS such keys, so the
27155
+ // in-loop guard further down could never see them. `findOne`, `or` and
27156
+ // `update` all delegate here, so this single gate covers the family
27157
+ // (`update` would otherwise mass-mutate every record on such a filter).
27158
+ var _fIdx = 0, _fLen = arguments.length, _fObj = null, _fKey = null;
27159
+ for (; _fIdx < _fLen; ++_fIdx) {
27160
+ _fObj = arguments[_fIdx];
27161
+ if ( _fObj && typeof(_fObj) == 'object' && !Array.isArray(_fObj) ) {
27162
+ for (_fKey in _fObj) {
27163
+ if ( typeof(_fObj[_fKey]) == 'undefined' ) {
27164
+ throw new Error('filter `'+ _fKey +'` cannot be left undefined');
27165
+ }
27166
+ }
27167
+ }
27168
+ }
27169
+ _fObj = null;
27170
+
27111
27171
  var filtersStr = null;
27112
27172
  var filters = null;
27113
27173
  var filtersCount = null;
@@ -27415,6 +27475,10 @@ function Collection(content, options) {
27415
27475
  matched = 0;
27416
27476
 
27417
27477
  for (var f in filter) {
27478
+ // Belt only since #B396: undefined-valued keys are refused at
27479
+ // the method entry, before the JSON round-trip that used to
27480
+ // strip them — and JSON.parse can never produce such a value
27481
+ // here, so this in-loop guard is unreachable by construction.
27418
27482
  if ( typeof(filter[f]) == 'undefined' ) throw new Error('filter `'+f+'` cannot be left undefined');
27419
27483
 
27420
27484
  localeLowerCase = ( filter[f] !== null && !/(boolean|number)/.test(typeof(filter[f])) ) ? filter[f].toLocaleLowerCase() : filter[f];
@@ -87,27 +87,27 @@ jb;++ha)typeof l[Fa[ha]]!='undefined'&&Fa[ha]&&(ta=new RegExp('\\$'+Fa[ha]+'(?!\
87
87
  var za=typeof H=='string'?H.match(ua):null;if(za){ua=function(gb){var yb=gb.replace(/^\s+|\s+$/g,'');if(yb==='null')return null;if(yb!=='undefined'){if(yb==='true')return!0;if(yb==='false')return!1;if(/^"[^"]*"$/.test(yb))return yb.slice(1,-1);var mb=Number(yb);if(!isNaN(mb)&&yb!=='')return mb;throw Error('Invalid operand: `'+gb+'`');}};var Oa=ua(za[1]),qb=za[2],Wa=ua(za[3]);switch(qb){case '===':ia=Oa===Wa;break;case '!==':ia=Oa!==Wa;break;case '==':ia=Oa==Wa;break;case '!=':ia=Oa!=Wa;break;case '<':ia=
88
88
  Oa<Wa;break;case '>':ia=Oa>Wa;break;case '<=':ia=Oa<=Wa;break;case '>=':ia=Oa>=Wa}}else console.warn('[FormValidator] Could not evaluate condition `'+H+'` - treating field as invalid.\n(grammar: <operand><op><operand>; operand \u2208 number | "string" | true | false | null | undefined; op \u2208 === !== == != < > <= >=)'),ia=!1}}catch(gb){throw Error(gb.stack||gb.message);}}}else if(H instanceof RegExp)ia=H.test(this.value)?!0:!1;else if(typeof H=='boolean')ia=H?!0:!1;else try{if(/\/(.*)\//.test(H))ta=
89
89
  H.match(/\/(.*)\//).pop(),Fa=H.replace('/'+ta+'/',''),ia=(new RegExp(ta,Fa)).test(this.value);else throw Error('[FormValidator] Unsupported condition shape \u2014 supported: binary comparison (a OP b), RegExp, boolean, /regex/flags literal. Got: `'+H+'`');}catch(gb){throw Error(gb.stack||gb.message);}}ia?ia&&typeof sa[xa]!='undefined'&&delete sa[xa]:(sa[xa]=Y(this.error||da||w.errorLabels[xa]||w.errorLabels.is,this,xa),typeof ma!='undefined'&&(sa.stack=ma));this.valid=ia&&!sa.isRequired;sa.count()>
90
- 0&&(this.errors=sa);return l[this.name]};l[C].set=function(H){this.value=w.data[this.name]=H;this.target.setAttribute('value',H);return l[this.name]};l[C].isEmail=function(){this.value=w.data[this.name]=this.value?this.value.toLowerCase():this.value;q&&this.target&&this.target.value!=''&&/[A-Z]+/.test(this.target.value)&&(this.target.value=this.value);var H=/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(this.value)?
91
- !0:!1,da=l[this.name].errors||{};this.value===''&&(H=!0);H?H&&typeof da.isEmail!='undefined'&&delete da.isEmail:da.isEmail=Y(this.error||w.errorLabels.isEmail,this,'isEmail');this.valid=H&&!da.isRequired;da.count()>0&&(this.errors=da);return l[this.name]};l[C].isJsonWebToken=function(){this.value=w.data[this.name]=this.value?this.value.toLowerCase():this.value;q&&this.target&&this.target.value!=''&&/[A-Z]+/.test(this.target.value)&&(this.target.value=this.value);var H=/^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/.test(this.value)?
92
- !0:!1,da=l[this.name].errors||{};this.value===''&&(H=!0);H?H&&typeof da.isJsonWebToken!='undefined'&&delete da.isJsonWebToken:da.isJsonWebToken=Y(this.error||w.errorLabels.isJsonWebToken,this,'isJsonWebToken');this.valid=H&&!da.isRequired;da.count()>0&&(this.errors=da);return l[this.name]};l[C].isBoolean=function(){var H=null,da=l[this.name].errors||{};if(this.value==='')var ma=!0;else{switch(this.value){case 'true':case !0:case 1:H=this.value=w.data[this.name]=!0;break;case 'false':case !1:case 0:H=
93
- this.value=w.data[this.name]=!1}ma=H!==null?!0:!1;H!==null&&da.isRequired&&delete da.isRequired}ma?ma&&typeof da.isBoolean!='undefined'&&delete da.isBoolean:da.isBoolean=Y(this.error||w.errorLabels.isBoolean,this,'isBoolean');this.valid=ma&&!da.isRequired;da.count()>0&&(this.errors=da);return l[this.name]};l[C].isNumber=function(H,da){var ma=this.value,ia=!1,sa=!0,xa=!0,ta=l[this.name].errors||{};try{typeof ma=='string'&&/,|\./g.test(ma)?ma=w.data[this.name]=this.value=parseFloat(ma.replace(/,/g,
94
- '.').replace(/\s+/g,'')):typeof ma=='string'&&ma!=''&&(ma=w.data[this.name]=this.value=parseInt(ma.replace(/\s+/g,'')))}catch(ha){ta.isNumber=Y(this.error||w.errorLabels.isNumber,this,'isNumber'),this.valid=!1,ta.count()>0&&(this.errors=ta)}if(+ma===+ma&&(ia=!0,!ta.isRequired&&ma!=='')){var Fa=ma.toString().length;H&&typeof H=='number'&&Fa<H&&(sa=!1,this.size=H);da&&typeof da=='number'&&Fa>da&&(xa=!1,this.size=da)}ia&&sa&&xa||(ia||(ta.isNumber=Y(this.error||w.errorLabels.isNumber,this,'isNumber')),
95
- sa&&xa||(sa||(ta.isNumberLength=Y(this.error||w.errorLabels.isNumberMinLength,this,'isNumberMinLength')),xa||(ta.isNumberLength=Y(this.error||w.errorLabels.isNumberMaxLength,this,'isNumberMaxLength')),H===da&&(ta.isNumberLength=Y(this.error||w.errorLabels.isNumberLength,this,'isNumberLength'))),ia=!1);ia&&typeof ta.isNumberLength!='undefined'&&delete ta.isNumberLength;this.valid=ia;this.value=w.data[this.name]=ma!=''?Number(ma):ma;ta.count()>0&&(this.errors=ta);return l[this.name]};l[C].toInteger=
96
- function(){var H=this.value,da=l[this.name].errors||{};if(H)try{this.value=w.data[this.name]=Math.round(H)}catch(ma){da.toInteger=Y(this.error||w.errorLabels.toInteger,this,'toInteger'),this.valid=!1,da.count()>0&&(this.errors=da)}return l[this.name]};l[C].isInteger=function(H,da){var ma=this.value,ia=!1,sa=!0,xa=!0,ta=l[this.name].errors||{};+ma===+ma&&ma%1===0&&(ia=!0,ta.isRequired||ma===''||(H&&typeof H=='number'&&ma.toString().length<H&&(sa=!1,this.size=H),da&&typeof da=='number'&&ma.toString().length>
97
- da&&(xa=!1,this.size=da)));ia&&sa&&xa||(ia||(ta.isInteger=Y(this.error||w.errorLabels.isInteger,this,'isInteger')),sa&&xa||(sa||(ta.isIntegerLength=Y(this.error||w.errorLabels.isIntegerMinLength,this,'isIntegerMinLength'),ia=!1),xa||(ta.isIntegerLength=Y(this.error||w.errorLabels.isIntegerMaxLength,this,'isIntegerMaxLength'),ia=!1),H===da&&(ta.isIntegerLength=Y(this.error||w.errorLabels.isIntegerLength,this,'isIntegerLength'),ia=!1)));this.valid=ia;this.value=w.data[this.name]=Number(ma);ta.count()>
98
- 0&&(this.errors=ta);return l[this.name]};l[C].toFloat=function(H){var da=document.getElementById(this.target.getAttribute('id')).value||this.value;isFloatingWithCommas=!1;typeof da=='string'&&(da=da.replace(/\s+/g,''),/,/.test(da)&&/\./.test(da)?da=da.replace(/,/g,''):/,/.test(da)&&(da=da.replace(/,/g,'.'),isFloatingWithCommas=!0));w.data[this.name]=da;var ma=l[this.name].errors||{},ia=!0;H?this.decimals=parseInt(H):typeof this.decimals=='undefined'&&(this.decimals=2);if(da)if(this.isNumber().valid)try{Number.isFinite(da)||
99
- (da=new Number(parseFloat(da.match(/[0-9.,]+/g).join('').replace(/,/,'.'))))}catch(sa){ia=!1,ma.toFloat=Y(this.error||w.errorLabels.toFloat,this,'toFloat'),this.valid=!1,ma.count()>0&&(this.errors=ma)}else ia=!1,ma.toFloat=Y(this.error||w.errorLabels.toFloatNAN,this,'toFloatNAN');else return l[this.name];this.decimals&&da&&!ma.toFloat&&(da=parseFloat(da.toFixed(this.decimals)));this.value=w.data[this.name]=da;q&&(isFloatingWithCommas&&(da=(''+da).replace(/\./g,',')),this.target.setAttribute('value',
100
- da));this.valid=ia;ma.count()>0&&(this.errors=ma);return l[this.name]};l[C].isFloat=function(H){typeof this.value=='string'&&(this.value=this.value.replace(/\s+/g,''));var da=w.data[this.name]=this.value;H=l[this.name].errors||{};typeof da=='string'&&/\./.test(da)&&Number.isFinite(Number(da));typeof da=='string'&&/,/g.test(da)&&(da=this.value=w.data[this.name]=Number(da.replace(/,/g,'.')));da=Number(da);Number.isFinite(da)&&da%1!==0?(this.value=w.data[this.name]=da,da=!0):da=!1;this.value===''&&(da=
101
- !0);da||(H.isFloat=Y(this.error||w.errorLabels.isFloat,this,'isFloat'));this.valid=da&&!H.isRequired;H.count()>0&&(this.errors=H);return l[this.name]};l[C].isRequired=function(H){if(typeof H=='boolean'&&!H)return this.valid=!0,H=w.excluded.indexOf(this.name),H>-1&&w.excluded.splice(H,1),l[this.name];if(q&&this.target&&this.target.tagName=='INPUT'&&typeof this.target.type!='undefined'&&this.target.type=='radio'){var da=this.target;H=document.getElementsByName(this.name);H=Array.prototype.filter.call(H,
102
- function(sa){return sa.form===da.form});for(var ma=0,ia=H.length;ma<ia;++ma)if(H[ma].checked){/true|false/.test(H[ma].value)?this.value=w.data[this.name]=/true/.test(H[ma].value)?!0:!1:this.value=w.data[this.name]=H[ma].value;this.valid=!0;break}}H=typeof this.value=='undefined'||this.value==null||this.value==''||/^\s+$/.test(this.value)?!1:!0;ma=l[this.name].errors||{};H?H&&typeof ma.isRequired!='undefined'&&delete ma.isRequired:ma.isRequired=Y(this.error||w.errorLabels.isRequired,this,'isRequired');
103
- this.valid=H;ma.count()>0&&(this.errors=ma);return l[this.name]};l[C].isString=function(H,da){var ma=w.data[this.name]=this.value,ia=!1,sa=!0,xa=!0,ta=l[this.name].errors||{};typeof ma!='string'||ta.isRequired||ma==''||(ia=!0,H&&typeof H=='number'&&ma.length<H&&(sa=!1,this.size=H),da&&typeof da=='number'&&ma.length>da&&(xa=!1,this.size=da));ia&&sa&&xa||(!ia&&ta.isRequired&&ma==''?ia=!1:ia||ta.isRequired||(ia=!0),sa&&xa||(ia=!1,sa||(ta.isStringLength=Y(this.error||w.errorLabels.isStringMinLength,this,
104
- 'isStringMinLength')),xa||(ta.isStringLength=Y(this.error||w.errorLabels.isStringMaxLength,this,'isStringMaxLength')),H===da&&(ta.isStringLength=Y(this.error||w.errorLabels.isStringLength,this,'isStringLength'))));this.valid=ia;ta.count()>0&&(this.errors=ta);return l[this.name]};l[C].isDate=function(H){var da=this.value,ma=!1,ia=l[this.name].errors||{},sa=null;if(!da||da==''||/NaN|Invalid Date/i.test(da))return/NaN|Invalid Date/i.test(da)&&(console.warn('[FormValidator::isDate] Provided value for field `'+
105
- this.name+'` is not allowed: `'+da+'`'),ia.isDate=Y(this.error||w.errorLabels.isDate,this,'isDate')),this.valid=ma,ia.count()>0&&(this.errors=ia),l[this.name];if(typeof H=='undefined'||typeof H!='undefined'&&/true/i.test(H))H='yyyy-mm-dd';if(da instanceof Date)da.format(H);else{try{sa=H.match(/[^\/\- ]+/g)}catch(Oa){throw Error('[FormValidator::isDate] Provided mask not allowed: `'+H+'`');}var xa={},ta,Fa=null,ha=H=NaN,jb=NaN;try{Fa=da.match(/[^\/\- ]+/g);var ua=0;for(ta=sa.length;ua<ta;++ua)xa[sa[ua]]=
106
- Fa[ua]}catch(Oa){throw Error('[FormValidator::isDate] Provided value not allowed: `'+da+'`'+Oa);}for(var za in xa)/y/i.test(za)?H=parseInt(xa[za],10):/m/i.test(za)?ha=parseInt(xa[za],10):/d/i.test(za)&&(jb=parseInt(xa[za],10));if(!Number.isFinite(H)||!Number.isFinite(ha)||!Number.isFinite(jb)||ha<1||ha>12||jb<1||jb>31)da=this.value=w.data[this.name]=new Date(NaN);else{da=new Date(H,ha-1,jb);if(da.getFullYear()!==H||da.getMonth()!==ha-1||da.getDate()!==jb)da=new Date(NaN);this.value=w.data[this.name]=
107
- da}if(/Invalid Date/i.test(da)||da instanceof Date===!1)return ia.isRequired||this.value!=''?ia.isDate=Y(this.error||w.errorLabels.isDate,this,'isDate'):ma=!0,this.valid=ma,ia.count()>0&&(this.errors=ia),l[this.name];ma=!0}this.valid=ma;return l[this.name]};l[C].isInList=function(){for(var H=l[this.name].errors||{},da=[],ma=0,ia=arguments.length;ma<ia;++ma){var sa=typeof arguments[ma];if(sa!=='string'&&sa!=='number'&&sa!=='boolean')throw Error('`isInList` requires an array of allowed primitive values; got '+
90
+ 0&&(this.errors=sa);return l[this.name]};l[C].set=function(H){this.value=w.data[this.name]=H;this.target.setAttribute('value',H);return l[this.name]};l[C].isEmail=function(){this.value=w.data[this.name]=this.value&&typeof this.value=='string'?this.value.toLowerCase():this.value;q&&this.target&&this.target.value!=''&&/[A-Z]+/.test(this.target.value)&&(this.target.value=this.value);var H=/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(this.value)?
91
+ !0:!1,da=l[this.name].errors||{};this.value===''&&(H=!0);H?H&&typeof da.isEmail!='undefined'&&delete da.isEmail:da.isEmail=Y(this.error||w.errorLabels.isEmail,this,'isEmail');this.valid=H&&!da.isRequired;da.count()>0&&(this.errors=da);return l[this.name]};l[C].isJsonWebToken=function(){this.value=w.data[this.name]=this.value&&typeof this.value=='string'?this.value.toLowerCase():this.value;q&&this.target&&this.target.value!=''&&/[A-Z]+/.test(this.target.value)&&(this.target.value=this.value);var H=
92
+ /^[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*$/.test(this.value)?!0:!1,da=l[this.name].errors||{};this.value===''&&(H=!0);H?H&&typeof da.isJsonWebToken!='undefined'&&delete da.isJsonWebToken:da.isJsonWebToken=Y(this.error||w.errorLabels.isJsonWebToken,this,'isJsonWebToken');this.valid=H&&!da.isRequired;da.count()>0&&(this.errors=da);return l[this.name]};l[C].isBoolean=function(){var H=null,da=l[this.name].errors||{};if(this.value==='')var ma=!0;else{switch(this.value){case 'true':case !0:case 1:H=
93
+ this.value=w.data[this.name]=!0;break;case 'false':case !1:case 0:H=this.value=w.data[this.name]=!1}ma=H!==null?!0:!1;H!==null&&da.isRequired&&delete da.isRequired}ma?ma&&typeof da.isBoolean!='undefined'&&delete da.isBoolean:da.isBoolean=Y(this.error||w.errorLabels.isBoolean,this,'isBoolean');this.valid=ma&&!da.isRequired;da.count()>0&&(this.errors=da);return l[this.name]};l[C].isNumber=function(H,da){var ma=this.value,ia=!1,sa=!0,xa=!0,ta=l[this.name].errors||{};try{typeof ma=='string'&&/,|\./g.test(ma)?
94
+ ma=w.data[this.name]=this.value=parseFloat(ma.replace(/,/g,'.').replace(/\s+/g,'')):typeof ma=='string'&&ma!=''&&(ma=w.data[this.name]=this.value=parseInt(ma.replace(/\s+/g,'')))}catch(ha){ta.isNumber=Y(this.error||w.errorLabels.isNumber,this,'isNumber'),this.valid=!1,ta.count()>0&&(this.errors=ta)}if(+ma===+ma&&(ia=!0,!ta.isRequired&&ma!=='')){var Fa=ma.toString().length;H&&typeof H=='number'&&Fa<H&&(sa=!1,this.size=H);da&&typeof da=='number'&&Fa>da&&(xa=!1,this.size=da)}ia&&sa&&xa||(ia||(ta.isNumber=
95
+ Y(this.error||w.errorLabels.isNumber,this,'isNumber')),sa&&xa||(sa||(ta.isNumberLength=Y(this.error||w.errorLabels.isNumberMinLength,this,'isNumberMinLength')),xa||(ta.isNumberLength=Y(this.error||w.errorLabels.isNumberMaxLength,this,'isNumberMaxLength')),H===da&&(ta.isNumberLength=Y(this.error||w.errorLabels.isNumberLength,this,'isNumberLength'))),ia=!1);ia&&typeof ta.isNumberLength!='undefined'&&delete ta.isNumberLength;this.valid=ia;this.value=w.data[this.name]=ma!=''?Number(ma):ma;ta.count()>
96
+ 0&&(this.errors=ta);return l[this.name]};l[C].toInteger=function(){var H=this.value,da=l[this.name].errors||{};if(H)try{this.value=w.data[this.name]=Math.round(H)}catch(ma){da.toInteger=Y(this.error||w.errorLabels.toInteger,this,'toInteger'),this.valid=!1,da.count()>0&&(this.errors=da)}return l[this.name]};l[C].isInteger=function(H,da){var ma=this.value,ia=!1,sa=!0,xa=!0,ta=l[this.name].errors||{};+ma===+ma&&ma%1===0&&(ia=!0,ta.isRequired||ma===''||(H&&typeof H=='number'&&ma.toString().length<H&&
97
+ (sa=!1,this.size=H),da&&typeof da=='number'&&ma.toString().length>da&&(xa=!1,this.size=da)));ia&&sa&&xa||(ia||(ta.isInteger=Y(this.error||w.errorLabels.isInteger,this,'isInteger')),sa&&xa||(sa||(ta.isIntegerLength=Y(this.error||w.errorLabels.isIntegerMinLength,this,'isIntegerMinLength'),ia=!1),xa||(ta.isIntegerLength=Y(this.error||w.errorLabels.isIntegerMaxLength,this,'isIntegerMaxLength'),ia=!1),H===da&&(ta.isIntegerLength=Y(this.error||w.errorLabels.isIntegerLength,this,'isIntegerLength'),ia=!1)));
98
+ this.valid=ia;this.value=w.data[this.name]=Number(ma);ta.count()>0&&(this.errors=ta);return l[this.name]};l[C].toFloat=function(H){var da=document.getElementById(this.target.getAttribute('id')).value||this.value;isFloatingWithCommas=!1;typeof da=='string'&&(da=da.replace(/\s+/g,''),/,/.test(da)&&/\./.test(da)?da=da.replace(/,/g,''):/,/.test(da)&&(da=da.replace(/,/g,'.'),isFloatingWithCommas=!0));w.data[this.name]=da;var ma=l[this.name].errors||{},ia=!0;H?this.decimals=parseInt(H):typeof this.decimals==
99
+ 'undefined'&&(this.decimals=2);if(da)if(this.isNumber().valid)try{Number.isFinite(da)||(da=new Number(parseFloat(da.match(/[0-9.,]+/g).join('').replace(/,/,'.'))))}catch(sa){ia=!1,ma.toFloat=Y(this.error||w.errorLabels.toFloat,this,'toFloat'),this.valid=!1,ma.count()>0&&(this.errors=ma)}else ia=!1,ma.toFloat=Y(this.error||w.errorLabels.toFloatNAN,this,'toFloatNAN');else return l[this.name];this.decimals&&da&&!ma.toFloat&&(da=parseFloat(da.toFixed(this.decimals)));this.value=w.data[this.name]=da;q&&
100
+ (isFloatingWithCommas&&(da=(''+da).replace(/\./g,',')),this.target.setAttribute('value',da));this.valid=ia;ma.count()>0&&(this.errors=ma);return l[this.name]};l[C].isFloat=function(H){typeof this.value=='string'&&(this.value=this.value.replace(/\s+/g,''));var da=w.data[this.name]=this.value;H=l[this.name].errors||{};typeof da=='string'&&/\./.test(da)&&Number.isFinite(Number(da));typeof da=='string'&&/,/g.test(da)&&(da=this.value=w.data[this.name]=Number(da.replace(/,/g,'.')));da=Number(da);Number.isFinite(da)&&
101
+ da%1!==0?(this.value=w.data[this.name]=da,da=!0):da=!1;this.value===''&&(da=!0);da||(H.isFloat=Y(this.error||w.errorLabels.isFloat,this,'isFloat'));this.valid=da&&!H.isRequired;H.count()>0&&(this.errors=H);return l[this.name]};l[C].isRequired=function(H){if(typeof H=='boolean'&&!H)return this.valid=!0,H=w.excluded.indexOf(this.name),H>-1&&w.excluded.splice(H,1),l[this.name];if(q&&this.target&&this.target.tagName=='INPUT'&&typeof this.target.type!='undefined'&&this.target.type=='radio'){var da=this.target;
102
+ H=document.getElementsByName(this.name);H=Array.prototype.filter.call(H,function(sa){return sa.form===da.form});for(var ma=0,ia=H.length;ma<ia;++ma)if(H[ma].checked){/true|false/.test(H[ma].value)?this.value=w.data[this.name]=/true/.test(H[ma].value)?!0:!1:this.value=w.data[this.name]=H[ma].value;this.valid=!0;break}}H=typeof this.value=='undefined'||this.value==null||this.value==''||/^\s+$/.test(this.value)?!1:!0;ma=l[this.name].errors||{};H?H&&typeof ma.isRequired!='undefined'&&delete ma.isRequired:
103
+ ma.isRequired=Y(this.error||w.errorLabels.isRequired,this,'isRequired');this.valid=H;ma.count()>0&&(this.errors=ma);return l[this.name]};l[C].isString=function(H,da){var ma=w.data[this.name]=this.value,ia=!1,sa=!0,xa=!0,ta=l[this.name].errors||{};typeof ma!='string'||ta.isRequired||ma==''||(ia=!0,H&&typeof H=='number'&&ma.length<H&&(sa=!1,this.size=H),da&&typeof da=='number'&&ma.length>da&&(xa=!1,this.size=da));ia&&sa&&xa||(!ia&&ta.isRequired&&ma==''?ia=!1:ia||ta.isRequired||(ia=!0),sa&&xa||(ia=!1,
104
+ sa||(ta.isStringLength=Y(this.error||w.errorLabels.isStringMinLength,this,'isStringMinLength')),xa||(ta.isStringLength=Y(this.error||w.errorLabels.isStringMaxLength,this,'isStringMaxLength')),H===da&&(ta.isStringLength=Y(this.error||w.errorLabels.isStringLength,this,'isStringLength'))));this.valid=ia;ta.count()>0&&(this.errors=ta);return l[this.name]};l[C].isDate=function(H){var da=this.value,ma=!1,ia=l[this.name].errors||{},sa=null;if(!da||da==''||/NaN|Invalid Date/i.test(da))return/NaN|Invalid Date/i.test(da)&&
105
+ (console.warn('[FormValidator::isDate] Provided value for field `'+this.name+'` is not allowed: `'+da+'`'),ia.isDate=Y(this.error||w.errorLabels.isDate,this,'isDate')),this.valid=ma,ia.count()>0&&(this.errors=ia),l[this.name];if(typeof H=='undefined'||typeof H!='undefined'&&/true/i.test(H))H='yyyy-mm-dd';if(da instanceof Date)da.format(H);else{try{sa=H.match(/[^\/\- ]+/g)}catch(Oa){throw Error('[FormValidator::isDate] Provided mask not allowed: `'+H+'`');}var xa={},ta,Fa=null,ha=H=NaN,jb=NaN;try{Fa=
106
+ da.match(/[^\/\- ]+/g);var ua=0;for(ta=sa.length;ua<ta;++ua)xa[sa[ua]]=Fa[ua]}catch(Oa){throw Error('[FormValidator::isDate] Provided value not allowed: `'+da+'`'+Oa);}for(var za in xa)/y/i.test(za)?H=parseInt(xa[za],10):/m/i.test(za)?ha=parseInt(xa[za],10):/d/i.test(za)&&(jb=parseInt(xa[za],10));if(!Number.isFinite(H)||!Number.isFinite(ha)||!Number.isFinite(jb)||ha<1||ha>12||jb<1||jb>31)da=this.value=w.data[this.name]=new Date(NaN);else{da=new Date(H,ha-1,jb);if(da.getFullYear()!==H||da.getMonth()!==
107
+ ha-1||da.getDate()!==jb)da=new Date(NaN);this.value=w.data[this.name]=da}if(/Invalid Date/i.test(da)||da instanceof Date===!1)return ia.isRequired||this.value!=''?ia.isDate=Y(this.error||w.errorLabels.isDate,this,'isDate'):ma=!0,this.valid=ma,ia.count()>0&&(this.errors=ia),l[this.name];ma=!0}this.valid=ma;return l[this.name]};l[C].isInList=function(){for(var H=l[this.name].errors||{},da=[],ma=0,ia=arguments.length;ma<ia;++ma){var sa=typeof arguments[ma];if(sa!=='string'&&sa!=='number'&&sa!=='boolean')throw Error('`isInList` requires an array of allowed primitive values; got '+
108
108
  sa+' at position '+ma+'. Use `isInList: ["a", "b", "c"]` form.');da.push(arguments[ma])}ma=w.data[this.name]=this.value;ia=!1;ma===''||ma==null?ia=!0:da.indexOf(ma)>-1&&(ia=!0);ia?typeof H.isInList!='undefined'&&delete H.isInList:(this.size=da.join(', '),H.isInList=Y(this.error||w.errorLabels.isInList,this,'isInList'));this.valid=ia&&!H.isRequired;H.count()>0&&(this.errors=H);return l[this.name]};l[C].format=function(H,da){var ma=this.value;return ma?ma.format(H,da):l[this.name]};l[C].setFlash=function(H,
109
- da){typeof da!='undefined'&&da!=''&&(this.error=da);return l[this.name]};l[C].setLabel=function(H){typeof H!='undefined'&&H!=''&&(this.label=H);return l[this.name]};l[C].trim=function(H){if(typeof H=='boolean'&&H)return this.value=this.value.replace(/^\s+|\s+$/g,''),w.data[this.name]=w.data[this.name]=this.value,l[this.name]};l[C].exclude=function(H){if(typeof H=='boolean'&&!H)return/^true|false$/i.test(this.value)&&(this.value=/^true$/i.test(this.value)?!0:!1,w.data[this.name]=this.value),l[this.name];
110
- this.isExcluded=!1;w.excluded.indexOf(this.name)<0&&(w.excluded.push(this.name),this.isExcluded=!0);return l[this.name]};l[C].query=T;l[C].getValidationContext=function(){return{isGFFCtx:q,self:l,local:w,replace:Y}};if(J()){la=I=null;try{for(let H in gina.forms.validators)la='/validators/'+H+'/main.js',typeof w.errorLabels[H]=='undefined'&&(w.errorLabels[H]='Condition not satisfied'),q?(I=M(gina.forms.validators[H].data),I=I.replace(/(\)\s+\{|\)\{){1}/,'$&\n\tvar validationContext = this.getValidationContext(),isGFFCtx = validationContext.isGFFCtx,self = validationContext.self,local = validationContext.local,replace = validationContext.replace;')):
109
+ da){typeof da!='undefined'&&da!=''&&(this.error=da);return l[this.name]};l[C].setLabel=function(H){typeof H!='undefined'&&H!=''&&(this.label=H);return l[this.name]};l[C].trim=function(H){if(typeof H=='boolean'&&H)return typeof this.value=='string'&&(this.value=this.value.replace(/^\s+|\s+$/g,''),w.data[this.name]=w.data[this.name]=this.value),l[this.name]};l[C].exclude=function(H){if(typeof H=='boolean'&&!H)return/^true|false$/i.test(this.value)&&(this.value=/^true$/i.test(this.value)?!0:!1,w.data[this.name]=
110
+ this.value),l[this.name];this.isExcluded=!1;w.excluded.indexOf(this.name)<0&&(w.excluded.push(this.name),this.isExcluded=!0);return l[this.name]};l[C].query=T;l[C].getValidationContext=function(){return{isGFFCtx:q,self:l,local:w,replace:Y}};if(J()){la=I=null;try{for(let H in gina.forms.validators)la='/validators/'+H+'/main.js',typeof w.errorLabels[H]=='undefined'&&(w.errorLabels[H]='Condition not satisfied'),q?(I=M(gina.forms.validators[H].data),I=I.replace(/(\)\s+\{|\)\{){1}/,'$&\n\tvar validationContext = this.getValidationContext(),isGFFCtx = validationContext.isGFFCtx,self = validationContext.self,local = validationContext.local,replace = validationContext.replace;')):
111
111
  I=gina.forms.validators[H].toString(),l[C][H]=eval('('+I+')\n//# sourceURL='+H+'.js')}catch(H){throw Error('[UserFormValidator] Could not evaluate: `'+la+'`\n'+H.stack);}}};for(let C in l)N(C,l[C]);l.addField=function(C,I){typeof l[C]=='undefined'&&N(C,I)};l.isValid=function(){return l.getErrors().count()>0?!1:!0};l.setErrors=function(C){if(!C)return{};for(var I in l)if(typeof l[I]=='object'){for(var la in l[I])typeof C[I]=='object'&&typeof C[I][la]!='undefined'&&(typeof l[I].valid!='undefined'&&
112
112
  /^true$/i.test(l[I].valid)?delete C[I][la]:(typeof l[I].errors=='undefined'&&(l[I].errors={}),l[I].errors[la]=C[I][la]));(typeof l[I].errors=='undefined'&&typeof C[I]!='undefined'||typeof l[I].errors!='undefined'&&l[I].errors.count()==0&&typeof C[I]!='undefined')&&delete C[I]}return C};l.getErrors=function(C){var I={};if(typeof C!='undefined')return typeof l[C]!='undefined'&&l[C]&&typeof l[C].errors!='undefined'&&l[C].errors.count()>0&&(I[C]=l[C].errors),I;for(var la in l)typeof l[la]=='object'&&
113
113
  typeof l[la].errors!='undefined'&&l[la].errors.count()>0&&(I[la]=l[la].errors);return I};l.toData=function(){if(w.excluded.length>0)for(var C=0,I=w.excluded.length;C<I;++C)typeof w.data[w.excluded[C]]!='undefined'&&delete w.data[w.excluded[C]];return w.data};var Y=function(C,I,la){if(typeof C!=='string'){var va=la&&typeof w.errorLabels[la]==='string'?w.errorLabels[la]:la&&typeof m[la]==='string'?m[la]:'';la=la||'(unknown rule)';oa[la]||(oa[la]=!0,console.warn('[FormValidator] error label for rule `'+
@@ -606,34 +606,34 @@ J=function(v){var y=v.match(/^\s*new\s+Date\("([^"]*)"\)\s*$/);if(y)return new D
606
606
  l=y[2],ja=J(y[3]);if(l==='<'||l==='>'||l==='<='||l==='>=')z instanceof Date&&(z=z.getTime()),ja instanceof Date&&(ja=ja.getTime());switch(l){case '===':return z===ja;case '!==':return z!==ja;case '==':return z==ja;case '!=':return z!=ja;case '<':return z<ja;case '>':return z>ja;case '<=':return z<=ja;case '>=':return z>=ja}}catch(M){throw Error('Could not evaluate condition `'+v+'`.\n'+M.stack);}};if(typeof h=='undefined'||h==''||h==null)h=[];if(!Array.isArray(h))throw Error('`new Collection([content] [, options] )`: `content` argument must be an Array !');
607
607
  h=h?JSON.clone(h):[];for(var m=[],oa=F=0,S=h.length;oa<S;++oa)h[oa]||(h[oa]={}),typeof h[oa]._uuid!='undefined'?h[oa]._hasItsOwnUuid=!0:h[oa]._uuid=L(16),m[F]=h[oa]._uuid,++F;var r=h;r.setSearchOption=function(){if(!arguments.length)throw Error('searchOption cannot be left blank');if(arguments.length>3||arguments.length<3&&arguments.length>1)throw Error('argument length mismatch');var v=0,y=arguments.length;if(y==1){if(typeof arguments[0]!='object')throw Error('searchOption must be an object');for(var z in arguments[0])if(typeof q[z]==
608
608
  'undefined')throw Error(arguments[1]+' is not an allowed searchOption !');P=arguments[0]}else for(P||={};v<y;++v){if(typeof q[arguments[1]]=='undefined')throw Error(arguments[1]+' is not an allowed searchOption !');typeof P[arguments[0]]=='undefined'&&(P[arguments[0]]={});/true|false/i.test(arguments[2])?P[arguments[0]][arguments[1]]=/true/i.test(arguments[2])?!0:!1:P[arguments[0]][arguments[1]]=arguments[2]}return r};r.find=function(){O=!1;typeof arguments[arguments.length-1]=='boolean'&&(O=arguments[arguments.length-
609
- 1],delete arguments[arguments.length-1],--arguments.length);var v=null,y=null,z=null;try{v=JSON.stringify(arguments),y=JSON.parse(v),z=y.count()}catch(sa){throw Error('filter must be an object\n'+sa.stack);}if(typeof y!='undefined'&&z>0){z>1&&(O=!0);z=v=null;var l=0,ja=Array.isArray(this)?this:JSON.clone(h),M=[],T='',N=null,Y=P,C=G.searchOptionRules,I=null,la=[],va=function(sa,xa,ta,Fa,ha){P&&typeof P[xa]!='undefined'&&(ha=U(P,ha));if(sa===null&&ta===null)++Fa;else if(sa&&ba.indexOf(T)>-1&&T=='not null'&&
610
- typeof ta!='undefined'&&typeof ta!=='object'&&ta!='null'&&ta!='undefined')M.indexOf(ta)<0&&++Fa;else if(typeof ta!='undefined'&&typeof ta!=='object'&&/(<|>|=)/.test(sa)&&!/undefined|function/.test(typeof ta)&&!ha.skipEval)xa=sa,ha=ta+sa,typeof sa=='string'&&typeof ta=='string'&&(ha=sa.replace(/^(<=|>=|!==|!=|===|!==)/g,''),typeof ta!='string'||/^"(.*)"$/.test(ha)||(sa=sa.replace(ha,'"'+ha+'"')),ha='"'+ta+'"'+sa,sa=xa),/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(ta)&&/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(sa)?
611
- w(ta.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,'new Date("$&")')+sa.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,'new Date("$&")'))&&++Fa:w(ha)&&++Fa;else if(typeof ta!='undefined'&&typeof ta!=='object'&&ta===sa&&!Y||typeof ta!='undefined'&&typeof ta!=='object'&&ta===sa&&typeof Y[xa]=='undefined'||typeof ta!='undefined'&&typeof ta!=='object'&&ta===sa&&typeof Y[xa]!='undefined'&&ha.skipEval)++Fa;else if(typeof ta!='undefined'&&typeof ta!=='object'&&Y&&typeof Y[xa]!=
612
- 'undefined'){var jb=0;var ua=Y[xa].count();for(let za in Y[xa])typeof ha[za][Y[xa][za]]!='undefined'&&(ha[za][Y[xa][za]].re=ha[za][Y[xa][za]].re.replace(/%s/,sa),N=ha[za][Y[xa][za]].modifiers?new RegExp(ha[za][Y[xa][za]].re,ha[za][Y[xa][za]].modifiers):new RegExp(ha[za][Y[xa][za]].re),N.test(ta)&&++jb);jb==ua&&++Fa}return{matched:Fa}},H=function(sa,xa,ta,Fa){var ha=xa.split(/\./g);ha=ha[ha.length-1];N=new RegExp('("'+ha+'":\\w+)');ha=null;try{if(ta){if(!/^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*)*$/.test(xa))throw Error('Invalid property path: `'+
613
- xa+'`');var jb=xa.split('.');xa=ta;for(ta=0;xa!=null&&ta<jb.length;ta++)xa=xa[jb[ta]];ha=xa}}catch(ua){}ha&&(Array.isArray(ha)?ha=ha[1].split(/:/)[1]:typeof ha=='string'&&/:/.test(ha)&&(ha=ha.split(/:/)[1]),/(<|>|=)/.test(sa)?/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(ha)&&/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(sa)?w(ha.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,'new Date("$&")')+sa.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,
614
- 'new Date("$&")'))&&++Fa:w(ha+sa)&&++Fa:ha==sa&&++Fa);return{matched:Fa}},da=function(sa,xa,ta,Fa,ha){xa=xa.split(/\[\*\]/g);ha=xa[0].replace(/\[\*\]/,'');ta=ta[ha];xa=xa[1];/^\./.test(xa)&&(xa=xa.substring(1));ha=0;if(ta)for(var jb=0,ua=ta.length;jb<ua&&!(la=/\./.test(xa)?H(sa,xa,ta[jb],ha):va(sa,xa,ta[jb],ha,C),ha=la.matched,ha>0);++jb);return{matched:Fa+ha}},ma;for(ma in ja)if(ja[ma]||(ja[ma]={}),!/undefined|function/.test(typeof ja[ma]))for(let sa=0,xa=y.count();sa<xa;++sa){v=y[sa];z=v.count();
615
- I=0;for(var ia in v){if(typeof v[ia]=='undefined')throw Error('filter `'+ia+'` cannot be left undefined');T=v[ia]===null||/(boolean|number)/.test(typeof v[ia])?v[ia]:v[ia].toLocaleLowerCase();la=/\./.test(ia)?/\[\*\]/.test(ia)?da(v[ia],ia,ja[ma],I,0):H(v[ia],ia,ja[ma],I):va(v[ia],ia,ja[ma][ia],I,C);I=la.matched}if(I==z)if(O&&A&&m.indexOf(ja[ma]._uuid)<0||A||!O){if(!O||O&&M.indexOf(ja[ma]._uuid)<0||A)M[l]=ja[ma],++l}else O&&!A&&M.indexOf(ja[ma]._uuid)<0&&(M[l]=ja[ma],++l)}}else M=h;P=null;M.insert=
616
- r.insert;M.notIn=r.notIn;M.find=this.find;M.update=r.update;M.replace=r.replace;M.or=r.or;M.findOne=r.findOne;M.limit=r.limit;M.orderBy=r.orderBy;M.delete=r.delete;M.toRaw=r.toRaw;M.filter=r.filter;return M};r.findOne=function(){var v=null;typeof arguments[arguments.length-1]=='string'&&(delete arguments[arguments.length-1],--arguments.length);arguments.length>0&&(v=arguments);if(typeof v=='undefined'||!v||typeof v!='object')throw Error('[ Collection ][ findOne ] `filters` argument must be defined: Array or Filter Object(s) expected');
617
- v=null;var y=Array.isArray(arguments[0])?arguments[0]:r.find.apply(this,arguments)||[];y.length>0&&(v=y.limit(1).toRaw()[0]);return v};r.or=function(){arguments[arguments.length]=!0;++arguments.length;return r.find.apply(this,arguments)};r.limit=function(v){if(typeof v=='undefined'||typeof v!='number')throw Error('[Collection::result->limit(resultLimit)] : `resultLimit` parametter must by a `number`');var y=Array.isArray(this)?this:JSON.clone(h);y=y.splice(0,v);y.insert=r.insert;y.update=r.update;
618
- y.replace=r.replace;y.notIn=r.notIn;y.findOne=r.findOne;y.orderBy=r.orderBy;y.max=r.max;y.delete=r.delete;y.toRaw=r.toRaw;y.filter=r.filter;return y};r.notIn=function(){var v=null,y=null,z=!0;typeof arguments[arguments.length-1]=='string'&&(v=arguments[arguments.length-1],delete arguments[arguments.length-1],--arguments.length);typeof arguments[arguments.length-1]=='boolean'&&(z=arguments[arguments.length-1],delete arguments[arguments.length-1],--arguments.length);arguments.length>0&&(y=arguments);
619
- if(typeof y=='undefined'||!y||typeof y!='object')throw Error('[ Collection ][ notIn ] `filters` argument must be defined: Array or Filter Object(s) expected');var l=JSON.clone(Array.isArray(this)?this:h);if(Array.isArray(arguments[0]))var ja=arguments[0];else A=!0,ja=r.find.apply(this,arguments)||[],A=!1;if(ja.length>0){if(z&&v&&typeof ja[0]=='undefined'&&typeof ja[0][v]=='undefined')throw Error('[ Collection ][ notIn ] `key` not valid');z&&!v&&typeof ja[0]._uuid!='undefined'?v='_uuid':typeof ja[0].id!=
620
- 'undefined'&&(v='id');if(!v||typeof ja[0][v]=='undefined')throw Error('No comparison key defined !');var M=0,T=ja.length,N=0,Y,C=y.count(),I;if(z&&typeof l[N]!='undefined'&&l[N].hasOwnProperty(v))for(;M<T&&l.length;++M)for(N=0,z=l.length;N<z;++N){if(typeof l[N]!='undefined'&&typeof ja[M]!='undefined'&&l[N][v]===ja[M][v]){l.splice(N,1);break}}else if(typeof l[N]=='undefined')l=JSON.clone(ja);else for(;M<T&&l.length;++M)for(N=0,z=l.length;N<z;++N)if(typeof l[N]!='undefined'){for(Y=I=0;Y<C;++Y){if(typeof y[Y]==
621
- 'undefined')throw Error('filter `'+Y+'` cannot be left undefined');var la=y[Y].count();var va=0;for(v in y[Y])l[N].hasOwnProperty(v)&&l[N][v]===ja[M][v]&&++va;va==la&&++I}if(I){l.splice(N,1);break}}}v=l;v.notIn=r.notIn;v.limit=r.limit;v.find=r.find;v.findOne=r.findOne;v.insert=r.insert;v.replace=r.replace;v.update=r.update;v.orderBy=r.orderBy;v.max=r.max;v.delete=r.delete;v.toRaw=r.toRaw;v.filter=r.filter;return v};r.insert=function(v){if(typeof v!=='object')throw Error('filter must be an object');
622
- var y=Array.isArray(this)?this:h;v._uuid=L(16);y.push(v);y.limit=r.limit;y.find=r.find;y.findOne=r.findOne;y.update=r.update;y.replace=r.replace;y.orderBy=r.orderBy;y.max=r.max;y.notIn=r.notIn;y.delete=r.delete;y.toRaw=r.toRaw;y.filter=r.filter;return y};r.update=function(){var v='_uuid',y,z=y=null;typeof arguments[arguments.length-1]=='string'&&(v=arguments[arguments.length-1],delete arguments[arguments.length-1],--arguments.length);typeof arguments[arguments.length-1]=='object'&&(z=arguments[arguments.length-
623
- 1],delete arguments[arguments.length-1],--arguments.length);arguments.length>0&&(y=arguments);if(typeof y=='undefined'||!y||typeof y!='object')throw Error('[ Collection ][ update ] `filters` argument must be defined: Array or Filter Object(s) expected');if(typeof z=='undefined'||!z||typeof z!='object')throw Error('[ Collection ][ update ] `set` argument must be defined: Object expected');var l=Array.isArray(arguments[0])?arguments[0]:r.find.apply(this,arguments)||[];y=Array.isArray(this)?this:JSON.clone(h);
624
- if(l.length>0){l=l.toRaw();for(var ja=0,M=l.length;ja<M;++ja){l[ja]=U(JSON.clone(z),l[ja]);for(var T=0,N=y.length;T<N;++T)if(typeof y[T][v]=='undefined'&&v=='_uuid'&&typeof y[T].id!='undefined'&&(v='id'),y[T][v]==l[ja][v]){y[T]=l[ja];break}}}y.limit=r.limit;y.find=r.find;y.findOne=r.findOne;y.insert=r.insert;y.update=r.update;y.replace=r.replace;y.orderBy=r.orderBy;y.max=r.max;y.notIn=r.notIn;y.delete=r.delete;y.toRaw=r.toRaw;y.filter=r.filter;return y};r.replace=function(){var v='_uuid',y=!1,z,l=
625
- z=null;typeof arguments[arguments.length-1]=='string'&&(v=arguments[arguments.length-1],y=!0,delete arguments[arguments.length-1],--arguments.length);typeof arguments[arguments.length-1]=='object'&&(l=arguments[arguments.length-1],delete arguments[arguments.length-1],--arguments.length);arguments.length>0&&(z=arguments);if(typeof z=='undefined'||!z||typeof z!='object')throw Error('[ Collection ][ update ] `filters` argument must be defined: Array or Filter Object(s) expected');if(typeof l=='undefined'||
626
- !l||typeof l!='object')throw Error('[ Collection ][ update ] `set` argument must be defined: Object expected');var ja=Array.isArray(arguments[0])?arguments[0]:r.find.apply(this,arguments)||[];z=Array.isArray(this)?this:JSON.clone(h);if(ja.length>0){ja=ja.toRaw();for(var M=0,T=ja.length;M<T;++M){ja[M]=JSON.clone(l);for(var N=0,Y=z.length;N<Y;++N){var C=v;if(!y&&(typeof z[N][C]!='undefined'&&typeof ja[M][C]!='undefined'||typeof z[N].id=='undefined'||typeof ja[M].id=='undefined'||(C='id'),typeof z[N][C]==
627
- 'undefined'||typeof ja[M][C]=='undefined'))throw Error('No comparison key defined !');if(z[N][C]==ja[M][C]){z[N]=ja[M];break}}}}z.limit=r.limit;z.find=r.find;z.findOne=r.findOne;z.insert=r.insert;z.update=r.update;z.replace=r.replace;z.orderBy=r.orderBy;z.max=r.max;z.notIn=r.notIn;z.delete=r.delete;z.toRaw=r.toRaw;z.filter=r.filter;return z};r['delete']=function(){var v=r.notIn.apply(this,arguments);v.limit=r.limit;v.find=r.find;v.findOne=r.findOne;v.insert=r.insert;v.update=r.update;v.replace=r.replace;
628
- v.orderBy=r.orderBy;v.max=r.max;v.notIn=r.notIn;v.toRaw=r.toRaw;v.filter=r.filter;v.delete=this.delete;return v};r.orderBy=function(){if(typeof arguments=='undefined'||arguments.length<1)throw Error('[ Collection->orderBy(filter) ] where `filter` must not be empty or null');if(arguments.length==1)var v=arguments[0];else{v=Array(arguments.length);for(var y=0,z=v.length;y<z;++y)v[y]=arguments[y]}y=Array.isArray(this)?this:JSON.clone(h);return V(v,y.toRaw())};r.max=function(){if(typeof arguments=='undefined'||
629
- arguments.length<1)throw Error('[ Collection->max(filter) ] where `filter` must not be empty or null');if(arguments.length>1||Array.isArray(arguments[0])||typeof arguments[0]=='object'&&arguments[0].count()>1)throw Error('[ Collection->max(filter) ] only accept one filter length, and fileter count must be equal to 1');var v=arguments[0];try{var y=Object.keys(v)[0],z={};z[y]='desc';return r.find(v).orderBy(z).limit(1)[0][y]}catch(l){throw l;}};var V=function(v,y){if(typeof v!='object')throw Error('`filter` parametter must be an object or an array');
630
- var z={},l=null,ja=null,M=l=null;l=[];if(v.count()==0)return null;z.asc=function(T,N){var Y=N.map(function(C,I){var la={};la.index=I;la[T]=C[T];return la});Y.sort(function(C,I){var la=function(va,H){/^(true|false)$/i.test(va)&&(va=/true/i.test(va)?1:0);/^(true|false)$/i.test(H)&&(H=/true/i.test(H)?1:0);if(typeof va=='string'&&va!=''||typeof H=='string'){if(typeof va=='undefined'||va==null)va='';if(typeof H=='undefined'||H==null)H='';typeof va=='number'&&(va=''+va);typeof H=='number'&&(H=''+H);return va.localeCompare(H,
631
- void 0,{sensitivity:'case',caseFirst:'upper'})}return va>H?1:va<H?-1:0};return typeof C=='object'?la(C[T],I[T]):la(C,I)});return Y.map(function(C,I,la){return N[C.index]})};z.desc=function(T,N){return z.asc(T,N).reverse()};l=function(T,N){var Y=[],C=[];if(Array.isArray(N))for(var I=0,la=N.length;I<la;++I)Y[I]=Object.keys(N[I])[0],C[I]=N[I][Y[I]];else for(la in I=0,N)Y[I]=la,C[I]=N[la],++I;ja=function(va,H,da,ma,ia){var sa=ma[ia]=='desc'?1:0,xa,ta=xa=null;return typeof va[da[ia]]=='string'&&va[da[ia]]!=
632
- ''?(xa=va[da[ia]].localeCompare(H[da[ia]]),sa==0&&xa!=0?xa<0?-1:1:xa!=0?xa<0?1:-1:da.length-1>ia?ja(va,H,da,ma,ia+1):0):typeof va[da[ia]]=='number'||typeof H[da[ia]]=='number'?(xa=(''+va[da[ia]]).localeCompare(''+H[da[ia]],void 0,{numeric:!0}),sa==0&&xa!=0?xa<0?-1:1:xa!=0?xa<0?1:-1:da.length-1>ia?ja(va,H,da,ma,ia+1):0):typeof va[da[ia]]=='boolean'||typeof H[da[ia]]=='boolean'?(typeof va[da[ia]]=='boolean'&&(xa=va[da[ia]]?1:0),typeof H[da[ia]]=='boolean'&&(ta=H[da[ia]]?1:0),xa>ta?sa==0?1:-1:xa<ta?
633
- sa==0?-1:1:da.length-1>ia?ja(va,H,da,ma,ia+1):0):va[da[ia]]>H[da[ia]]?sa==0?1:-1:va[da[ia]]<H[da[ia]]?sa==0?-1:1:da.length-1>ia?ja(va,H,da,ma,ia+1):0};return T.sort(function(va,H){return ja(va,H,Y,C,0)})};Array.isArray(v)||v.count()>1?l=l(y,v):(M=Object.keys(v)[0],l=v[M],l=z[l](M,y));l.find=r.find;l.findOne=r.findOne;l.limit=r.limit;l.notIn=r.notIn;l.insert=r.insert;l.update=r.update;l.replace=r.replace;l.delete=r.delete;l.orderBy=r.orderBy;l.max=r.max;l.toRaw=r.toRaw;l.filter=r.filter;return l};
634
- r.toRaw=function(){for(var v=Array.isArray(this)?this.slice():h.slice(),y=0,z=v.length;y<z;++y){if(v[y]._hasItsOwnUuid){let l=/^true$/i.test(v[y]._hasItsOwnUuid)?!0:!1;delete v[y]._hasItsOwnUuid;if(l)continue}v[y]._uuid&&delete v[y]._uuid}return v};r.filter=function(v){if(typeof v=='undefined')throw Error('`filter` parametter must be a string or an array.');var y=Array.isArray(this)?this:h;if(!y.length)return[];var z=0,l=y.length,ja=[],M=0;if(Array.isArray(v))for(var T,N=v.length,Y;z<l;++z){Y=!1;
635
- for(T=0;T<N;++T)typeof y[z][v[T]]!='undefined'&&(typeof ja[M]=='undefined'&&(ja[M]={}),ja[M][v[T]]=y[z][v[T]],Y=!0);Y&&++M}else for(;z<l;++z)typeof y[z][v]!='undefined'&&(typeof ja[M]=='undefined'&&(ja[M]={}),ja[M][v]=y[z][v],++M);return JSON.clone(ja)};return r}typeof module!=='undefined'&&module.exports?module.exports=Collection:typeof define==='function'&&define.amd&&define('lib/collection',[],function(){return Collection});
636
- var readyList=[{name:'gina',ctx:window.gina,fn:window.onGinaLoaded}],readyFired=!1,readyEventHandlersInstalled=!1;
609
+ 1],delete arguments[arguments.length-1],--arguments.length);for(var v=0,y=arguments.length,z=null,l=null;v<y;++v)if((z=arguments[v])&&typeof z=='object'&&!Array.isArray(z))for(l in z)if(typeof z[l]=='undefined')throw Error('filter `'+l+'` cannot be left undefined');z=v=y=z=null;try{y=JSON.stringify(arguments),v=JSON.parse(y),z=v.count()}catch(sa){throw Error('filter must be an object\n'+sa.stack);}if(typeof v!='undefined'&&z>0){z>1&&(O=!0);z=y=null;l=0;var ja=Array.isArray(this)?this:JSON.clone(h),
610
+ M=[],T='',N=null,Y=P,C=G.searchOptionRules,I=null,la=[],va=function(sa,xa,ta,Fa,ha){P&&typeof P[xa]!='undefined'&&(ha=U(P,ha));if(sa===null&&ta===null)++Fa;else if(sa&&ba.indexOf(T)>-1&&T=='not null'&&typeof ta!='undefined'&&typeof ta!=='object'&&ta!='null'&&ta!='undefined')M.indexOf(ta)<0&&++Fa;else if(typeof ta!='undefined'&&typeof ta!=='object'&&/(<|>|=)/.test(sa)&&!/undefined|function/.test(typeof ta)&&!ha.skipEval)xa=sa,ha=ta+sa,typeof sa=='string'&&typeof ta=='string'&&(ha=sa.replace(/^(<=|>=|!==|!=|===|!==)/g,
611
+ ''),typeof ta!='string'||/^"(.*)"$/.test(ha)||(sa=sa.replace(ha,'"'+ha+'"')),ha='"'+ta+'"'+sa,sa=xa),/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(ta)&&/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(sa)?w(ta.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,'new Date("$&")')+sa.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,'new Date("$&")'))&&++Fa:w(ha)&&++Fa;else if(typeof ta!='undefined'&&typeof ta!=='object'&&ta===sa&&!Y||typeof ta!=
612
+ 'undefined'&&typeof ta!=='object'&&ta===sa&&typeof Y[xa]=='undefined'||typeof ta!='undefined'&&typeof ta!=='object'&&ta===sa&&typeof Y[xa]!='undefined'&&ha.skipEval)++Fa;else if(typeof ta!='undefined'&&typeof ta!=='object'&&Y&&typeof Y[xa]!='undefined'){var jb=0;var ua=Y[xa].count();for(let za in Y[xa])typeof ha[za][Y[xa][za]]!='undefined'&&(ha[za][Y[xa][za]].re=ha[za][Y[xa][za]].re.replace(/%s/,sa),N=ha[za][Y[xa][za]].modifiers?new RegExp(ha[za][Y[xa][za]].re,ha[za][Y[xa][za]].modifiers):new RegExp(ha[za][Y[xa][za]].re),
613
+ N.test(ta)&&++jb);jb==ua&&++Fa}return{matched:Fa}},H=function(sa,xa,ta,Fa){var ha=xa.split(/\./g);ha=ha[ha.length-1];N=new RegExp('("'+ha+'":\\w+)');ha=null;try{if(ta){if(!/^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*)*$/.test(xa))throw Error('Invalid property path: `'+xa+'`');var jb=xa.split('.');xa=ta;for(ta=0;xa!=null&&ta<jb.length;ta++)xa=xa[jb[ta]];ha=xa}}catch(ua){}ha&&(Array.isArray(ha)?ha=ha[1].split(/:/)[1]:typeof ha=='string'&&/:/.test(ha)&&(ha=ha.split(/:/)[1]),/(<|>|=)/.test(sa)?/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(ha)&&
614
+ /(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/.test(sa)?w(ha.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,'new Date("$&")')+sa.replace(/(\d{4})\-(\d{2})\-(\d{2})(\s+|T)(\d{2}):(\d{2}):(\d{2})/,'new Date("$&")'))&&++Fa:w(ha+sa)&&++Fa:ha==sa&&++Fa);return{matched:Fa}},da=function(sa,xa,ta,Fa,ha){xa=xa.split(/\[\*\]/g);ha=xa[0].replace(/\[\*\]/,'');ta=ta[ha];xa=xa[1];/^\./.test(xa)&&(xa=xa.substring(1));ha=0;if(ta)for(var jb=0,ua=ta.length;jb<ua&&!(la=/\./.test(xa)?H(sa,
615
+ xa,ta[jb],ha):va(sa,xa,ta[jb],ha,C),ha=la.matched,ha>0);++jb);return{matched:Fa+ha}},ma;for(ma in ja)if(ja[ma]||(ja[ma]={}),!/undefined|function/.test(typeof ja[ma]))for(let sa=0,xa=v.count();sa<xa;++sa){y=v[sa];z=y.count();I=0;for(var ia in y){if(typeof y[ia]=='undefined')throw Error('filter `'+ia+'` cannot be left undefined');T=y[ia]===null||/(boolean|number)/.test(typeof y[ia])?y[ia]:y[ia].toLocaleLowerCase();la=/\./.test(ia)?/\[\*\]/.test(ia)?da(y[ia],ia,ja[ma],I,0):H(y[ia],ia,ja[ma],I):va(y[ia],
616
+ ia,ja[ma][ia],I,C);I=la.matched}if(I==z)if(O&&A&&m.indexOf(ja[ma]._uuid)<0||A||!O){if(!O||O&&M.indexOf(ja[ma]._uuid)<0||A)M[l]=ja[ma],++l}else O&&!A&&M.indexOf(ja[ma]._uuid)<0&&(M[l]=ja[ma],++l)}}else M=h;P=null;M.insert=r.insert;M.notIn=r.notIn;M.find=this.find;M.update=r.update;M.replace=r.replace;M.or=r.or;M.findOne=r.findOne;M.limit=r.limit;M.orderBy=r.orderBy;M.delete=r.delete;M.toRaw=r.toRaw;M.filter=r.filter;return M};r.findOne=function(){var v=null;typeof arguments[arguments.length-1]=='string'&&
617
+ (delete arguments[arguments.length-1],--arguments.length);arguments.length>0&&(v=arguments);if(typeof v=='undefined'||!v||typeof v!='object')throw Error('[ Collection ][ findOne ] `filters` argument must be defined: Array or Filter Object(s) expected');v=null;var y=Array.isArray(arguments[0])?arguments[0]:r.find.apply(this,arguments)||[];y.length>0&&(v=y.limit(1).toRaw()[0]);return v};r.or=function(){arguments[arguments.length]=!0;++arguments.length;return r.find.apply(this,arguments)};r.limit=function(v){if(typeof v==
618
+ 'undefined'||typeof v!='number')throw Error('[Collection::result->limit(resultLimit)] : `resultLimit` parametter must by a `number`');var y=Array.isArray(this)?this:JSON.clone(h);y=y.splice(0,v);y.insert=r.insert;y.update=r.update;y.replace=r.replace;y.notIn=r.notIn;y.findOne=r.findOne;y.orderBy=r.orderBy;y.max=r.max;y.delete=r.delete;y.toRaw=r.toRaw;y.filter=r.filter;return y};r.notIn=function(){var v=null,y=null,z=!0;typeof arguments[arguments.length-1]=='string'&&(v=arguments[arguments.length-
619
+ 1],delete arguments[arguments.length-1],--arguments.length);typeof arguments[arguments.length-1]=='boolean'&&(z=arguments[arguments.length-1],delete arguments[arguments.length-1],--arguments.length);arguments.length>0&&(y=arguments);if(typeof y=='undefined'||!y||typeof y!='object')throw Error('[ Collection ][ notIn ] `filters` argument must be defined: Array or Filter Object(s) expected');var l=JSON.clone(Array.isArray(this)?this:h);if(Array.isArray(arguments[0]))var ja=arguments[0];else A=!0,ja=
620
+ r.find.apply(this,arguments)||[],A=!1;if(ja.length>0){if(z&&v&&typeof ja[0]=='undefined'&&typeof ja[0][v]=='undefined')throw Error('[ Collection ][ notIn ] `key` not valid');z&&!v&&typeof ja[0]._uuid!='undefined'?v='_uuid':typeof ja[0].id!='undefined'&&(v='id');if(!v||typeof ja[0][v]=='undefined')throw Error('No comparison key defined !');var M=0,T=ja.length,N=0,Y,C=y.count(),I;if(z&&typeof l[N]!='undefined'&&l[N].hasOwnProperty(v))for(;M<T&&l.length;++M)for(N=0,z=l.length;N<z;++N){if(typeof l[N]!=
621
+ 'undefined'&&typeof ja[M]!='undefined'&&l[N][v]===ja[M][v]){l.splice(N,1);break}}else if(typeof l[N]=='undefined')l=JSON.clone(ja);else for(;M<T&&l.length;++M)for(N=0,z=l.length;N<z;++N)if(typeof l[N]!='undefined'){for(Y=I=0;Y<C;++Y){if(typeof y[Y]=='undefined')throw Error('filter `'+Y+'` cannot be left undefined');var la=y[Y].count();var va=0;for(v in y[Y])l[N].hasOwnProperty(v)&&l[N][v]===ja[M][v]&&++va;va==la&&++I}if(I){l.splice(N,1);break}}}v=l;v.notIn=r.notIn;v.limit=r.limit;v.find=r.find;v.findOne=
622
+ r.findOne;v.insert=r.insert;v.replace=r.replace;v.update=r.update;v.orderBy=r.orderBy;v.max=r.max;v.delete=r.delete;v.toRaw=r.toRaw;v.filter=r.filter;return v};r.insert=function(v){if(typeof v!=='object')throw Error('filter must be an object');var y=Array.isArray(this)?this:h;v._uuid=L(16);y.push(v);y.limit=r.limit;y.find=r.find;y.findOne=r.findOne;y.update=r.update;y.replace=r.replace;y.orderBy=r.orderBy;y.max=r.max;y.notIn=r.notIn;y.delete=r.delete;y.toRaw=r.toRaw;y.filter=r.filter;return y};r.update=
623
+ function(){var v='_uuid',y,z=y=null;typeof arguments[arguments.length-1]=='string'&&(v=arguments[arguments.length-1],delete arguments[arguments.length-1],--arguments.length);typeof arguments[arguments.length-1]=='object'&&(z=arguments[arguments.length-1],delete arguments[arguments.length-1],--arguments.length);arguments.length>0&&(y=arguments);if(typeof y=='undefined'||!y||typeof y!='object')throw Error('[ Collection ][ update ] `filters` argument must be defined: Array or Filter Object(s) expected');
624
+ if(typeof z=='undefined'||!z||typeof z!='object')throw Error('[ Collection ][ update ] `set` argument must be defined: Object expected');var l=Array.isArray(arguments[0])?arguments[0]:r.find.apply(this,arguments)||[];y=Array.isArray(this)?this:JSON.clone(h);if(l.length>0){l=l.toRaw();for(var ja=0,M=l.length;ja<M;++ja){l[ja]=U(JSON.clone(z),l[ja]);for(var T=0,N=y.length;T<N;++T)if(typeof y[T][v]=='undefined'&&v=='_uuid'&&typeof y[T].id!='undefined'&&(v='id'),y[T][v]==l[ja][v]){y[T]=l[ja];break}}}y.limit=
625
+ r.limit;y.find=r.find;y.findOne=r.findOne;y.insert=r.insert;y.update=r.update;y.replace=r.replace;y.orderBy=r.orderBy;y.max=r.max;y.notIn=r.notIn;y.delete=r.delete;y.toRaw=r.toRaw;y.filter=r.filter;return y};r.replace=function(){var v='_uuid',y=!1,z,l=z=null;typeof arguments[arguments.length-1]=='string'&&(v=arguments[arguments.length-1],y=!0,delete arguments[arguments.length-1],--arguments.length);typeof arguments[arguments.length-1]=='object'&&(l=arguments[arguments.length-1],delete arguments[arguments.length-
626
+ 1],--arguments.length);arguments.length>0&&(z=arguments);if(typeof z=='undefined'||!z||typeof z!='object')throw Error('[ Collection ][ update ] `filters` argument must be defined: Array or Filter Object(s) expected');if(typeof l=='undefined'||!l||typeof l!='object')throw Error('[ Collection ][ update ] `set` argument must be defined: Object expected');var ja=Array.isArray(arguments[0])?arguments[0]:r.find.apply(this,arguments)||[];z=Array.isArray(this)?this:JSON.clone(h);if(ja.length>0){ja=ja.toRaw();
627
+ for(var M=0,T=ja.length;M<T;++M){ja[M]=JSON.clone(l);for(var N=0,Y=z.length;N<Y;++N){var C=v;if(!y&&(typeof z[N][C]!='undefined'&&typeof ja[M][C]!='undefined'||typeof z[N].id=='undefined'||typeof ja[M].id=='undefined'||(C='id'),typeof z[N][C]=='undefined'||typeof ja[M][C]=='undefined'))throw Error('No comparison key defined !');if(z[N][C]==ja[M][C]){z[N]=ja[M];break}}}}z.limit=r.limit;z.find=r.find;z.findOne=r.findOne;z.insert=r.insert;z.update=r.update;z.replace=r.replace;z.orderBy=r.orderBy;z.max=
628
+ r.max;z.notIn=r.notIn;z.delete=r.delete;z.toRaw=r.toRaw;z.filter=r.filter;return z};r['delete']=function(){var v=r.notIn.apply(this,arguments);v.limit=r.limit;v.find=r.find;v.findOne=r.findOne;v.insert=r.insert;v.update=r.update;v.replace=r.replace;v.orderBy=r.orderBy;v.max=r.max;v.notIn=r.notIn;v.toRaw=r.toRaw;v.filter=r.filter;v.delete=this.delete;return v};r.orderBy=function(){if(typeof arguments=='undefined'||arguments.length<1)throw Error('[ Collection->orderBy(filter) ] where `filter` must not be empty or null');
629
+ if(arguments.length==1)var v=arguments[0];else{v=Array(arguments.length);for(var y=0,z=v.length;y<z;++y)v[y]=arguments[y]}y=Array.isArray(this)?this:JSON.clone(h);return V(v,y.toRaw())};r.max=function(){if(typeof arguments=='undefined'||arguments.length<1)throw Error('[ Collection->max(filter) ] where `filter` must not be empty or null');if(arguments.length>1||Array.isArray(arguments[0])||typeof arguments[0]=='object'&&arguments[0].count()>1)throw Error('[ Collection->max(filter) ] only accept one filter length, and fileter count must be equal to 1');
630
+ var v=arguments[0];try{var y=Object.keys(v)[0],z={};z[y]='desc';return r.find(v).orderBy(z).limit(1)[0][y]}catch(l){throw l;}};var V=function(v,y){if(typeof v!='object')throw Error('`filter` parametter must be an object or an array');var z={},l=null,ja=null,M=l=null;l=[];if(v.count()==0)return null;z.asc=function(T,N){var Y=N.map(function(C,I){var la={};la.index=I;la[T]=C[T];return la});Y.sort(function(C,I){var la=function(va,H){/^(true|false)$/i.test(va)&&(va=/true/i.test(va)?1:0);/^(true|false)$/i.test(H)&&
631
+ (H=/true/i.test(H)?1:0);if(typeof va=='string'&&va!=''||typeof H=='string'){if(typeof va=='undefined'||va==null)va='';if(typeof H=='undefined'||H==null)H='';typeof va=='number'&&(va=''+va);typeof H=='number'&&(H=''+H);return va.localeCompare(H,void 0,{sensitivity:'case',caseFirst:'upper'})}return va>H?1:va<H?-1:0};return typeof C=='object'?la(C[T],I[T]):la(C,I)});return Y.map(function(C,I,la){return N[C.index]})};z.desc=function(T,N){return z.asc(T,N).reverse()};l=function(T,N){var Y=[],C=[];if(Array.isArray(N))for(var I=
632
+ 0,la=N.length;I<la;++I)Y[I]=Object.keys(N[I])[0],C[I]=N[I][Y[I]];else for(la in I=0,N)Y[I]=la,C[I]=N[la],++I;ja=function(va,H,da,ma,ia){var sa=ma[ia]=='desc'?1:0,xa,ta=xa=null;return typeof va[da[ia]]=='string'&&va[da[ia]]!=''?(xa=va[da[ia]].localeCompare(H[da[ia]]),sa==0&&xa!=0?xa<0?-1:1:xa!=0?xa<0?1:-1:da.length-1>ia?ja(va,H,da,ma,ia+1):0):typeof va[da[ia]]=='number'||typeof H[da[ia]]=='number'?(xa=(''+va[da[ia]]).localeCompare(''+H[da[ia]],void 0,{numeric:!0}),sa==0&&xa!=0?xa<0?-1:1:xa!=0?xa<0?
633
+ 1:-1:da.length-1>ia?ja(va,H,da,ma,ia+1):0):typeof va[da[ia]]=='boolean'||typeof H[da[ia]]=='boolean'?(typeof va[da[ia]]=='boolean'&&(xa=va[da[ia]]?1:0),typeof H[da[ia]]=='boolean'&&(ta=H[da[ia]]?1:0),xa>ta?sa==0?1:-1:xa<ta?sa==0?-1:1:da.length-1>ia?ja(va,H,da,ma,ia+1):0):va[da[ia]]>H[da[ia]]?sa==0?1:-1:va[da[ia]]<H[da[ia]]?sa==0?-1:1:da.length-1>ia?ja(va,H,da,ma,ia+1):0};return T.sort(function(va,H){return ja(va,H,Y,C,0)})};Array.isArray(v)||v.count()>1?l=l(y,v):(M=Object.keys(v)[0],l=v[M],l=z[l](M,
634
+ y));l.find=r.find;l.findOne=r.findOne;l.limit=r.limit;l.notIn=r.notIn;l.insert=r.insert;l.update=r.update;l.replace=r.replace;l.delete=r.delete;l.orderBy=r.orderBy;l.max=r.max;l.toRaw=r.toRaw;l.filter=r.filter;return l};r.toRaw=function(){for(var v=Array.isArray(this)?this.slice():h.slice(),y=0,z=v.length;y<z;++y){if(v[y]._hasItsOwnUuid){let l=/^true$/i.test(v[y]._hasItsOwnUuid)?!0:!1;delete v[y]._hasItsOwnUuid;if(l)continue}v[y]._uuid&&delete v[y]._uuid}return v};r.filter=function(v){if(typeof v==
635
+ 'undefined')throw Error('`filter` parametter must be a string or an array.');var y=Array.isArray(this)?this:h;if(!y.length)return[];var z=0,l=y.length,ja=[],M=0;if(Array.isArray(v))for(var T,N=v.length,Y;z<l;++z){Y=!1;for(T=0;T<N;++T)typeof y[z][v[T]]!='undefined'&&(typeof ja[M]=='undefined'&&(ja[M]={}),ja[M][v[T]]=y[z][v[T]],Y=!0);Y&&++M}else for(;z<l;++z)typeof y[z][v]!='undefined'&&(typeof ja[M]=='undefined'&&(ja[M]={}),ja[M][v]=y[z][v],++M);return JSON.clone(ja)};return r}
636
+ typeof module!=='undefined'&&module.exports?module.exports=Collection:typeof define==='function'&&define.amd&&define('lib/collection',[],function(){return Collection});var readyList=[{name:'gina',ctx:window.gina,fn:window.onGinaLoaded}],readyFired=!1,readyEventHandlersInstalled=!1;
637
637
  function ready(){if(!readyFired){readyFired=!0;var h=null,G=function(F,L){if(L[F])if(L[F].name=='gina')var U=window.setInterval(function(q,O){try{if(typeof O=='undefined'&&(O=window.readyList),O[q].ctx=window.gina,h=O[q].fn.call(window,O[q].ctx,window.require))window.clearInterval(U),++q,G(q,O)}catch(A){throw window.clearInterval(U),A;}},50,F,L);else L[F].ctx=window.originalContext||null,L[F].fn.call(window,L[F].ctx,window.require),++F,G(F,L);else L=[]};G(0,readyList)}}
638
638
  function readyStateChange(){document.readyState==='complete'&&gina.ready()}
639
639
  if(typeof window.gina=='undefined'){var gina={_global:{register:function(h){if(typeof h!='undefined')for(let G in h)window[G]=h[G]},unregister:function(h){if(typeof h=='undefined'||!Array.isArray(h))throw Error('`variables` needs to ba an array');for(let G=0,F=h.length;G<F;G++)delete window[h[G]]},initialized:[]},ready:function(h,G){readyFired?setTimeout(function(){h(G)},1):(readyList.push({name:'anonymous',fn:h,ctx:G}),document.readyState==='complete'||!document.attachEvent&&document.readyState===