gina 0.1.6-alpha.8 → 0.1.6-alpha.80

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 (326) hide show
  1. package/README-4Contributors.md +14 -8
  2. package/README.md +3 -3
  3. package/bin/cli +13 -0
  4. package/bin/gina +29 -1
  5. package/framework/v0.1.6-alpha.80/VERSION +1 -0
  6. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/plugin/README.md +1 -0
  7. package/framework/v0.1.6-alpha.80/core/asset/plugin/dist/vendor/gina/css/gina.min.css.map +1 -0
  8. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/plugin/dist/vendor/gina/js/gina.js +369 -101
  9. package/framework/v0.1.6-alpha.80/core/asset/plugin/dist/vendor/gina/js/gina.min.js +776 -0
  10. package/framework/v0.1.6-alpha.80/core/asset/plugin/dist/vendor/gina/js/gina.min.js.map +8 -0
  11. package/framework/v0.1.6-alpha.80/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +8 -0
  12. package/framework/v0.1.6-alpha.80/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.map +8 -0
  13. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/config.js +117 -51
  14. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/connector.v4.js +28 -22
  15. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/controller/controller.js +329 -56
  16. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/.github/workflows/ci.yml +24 -0
  17. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/.github/workflows/lint.yml +23 -0
  18. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/LICENSE +19 -0
  19. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/README.md +191 -0
  20. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-big.js +149 -0
  21. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-small.js +143 -0
  22. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/bench/bench-multipart-files-100mb-big.js +154 -0
  23. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/bench/bench-multipart-files-100mb-small.js +148 -0
  24. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/bench/bench-urlencoded-fields-100pairs-small.js +101 -0
  25. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/bench/bench-urlencoded-fields-900pairs-small-alt.js +84 -0
  26. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/lib/index.js +57 -0
  27. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/lib/types/multipart.js +680 -0
  28. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/lib/types/urlencoded.js +350 -0
  29. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/lib/utils.js +596 -0
  30. package/framework/v0.1.6-alpha.80/core/deps/busboy-1.6.0/package.json +22 -0
  31. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/gna.js +97 -18
  32. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/model/index.js +28 -24
  33. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/validator/src/form-validator.js +38 -26
  34. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/validator/src/main.js +254 -56
  35. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/router.js +75 -40
  36. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/server.isaac.js +46 -8
  37. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/server.js +31 -5
  38. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/controllers/setup.js +2 -2
  39. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/conf/templates.json +4 -2
  40. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/context.js +16 -11
  41. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/path.js +25 -9
  42. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/add.js +2 -1
  43. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/start.js +21 -8
  44. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/build.js +1 -1
  45. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/init.js +18 -0
  46. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/link-node-modules.js +2 -3
  47. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/link.js +1 -0
  48. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/tail.js +28 -11
  49. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/version.js +15 -1
  50. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/helper.js +6 -2
  51. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/add.js +3 -2
  52. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/build.js +4 -4
  53. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/protocol/list.js +71 -50
  54. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/collection/src/main.js +8 -0
  55. package/framework/v0.1.6-alpha.80/lib/domain/exemples/backend.js +12 -0
  56. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/domain/src/main.js +3 -1
  57. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/merge/package.json +1 -1
  58. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/model.js +1 -1
  59. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/routing/src/main.js +58 -11
  60. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/session-store.js +2 -2
  61. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/swig-filters/src/main.js +64 -9
  62. package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/validator.js +2 -2
  63. package/framework/v0.1.6-alpha.80/package.json +12 -0
  64. package/package.json +2 -2
  65. package/utils/helper.js +24 -0
  66. package/framework/v0.1.6-alpha.8/VERSION +0 -1
  67. package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/css/gina.min.css.map +0 -1
  68. package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -766
  69. package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.map +0 -8
  70. package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -7
  71. package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.map +0 -8
  72. package/framework/v0.1.6-alpha.8/lib/domain/exemples/backend.js +0 -0
  73. package/framework/v0.1.6-alpha.8/package.json +0 -14
  74. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/AUTHORS +0 -0
  75. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/LICENSE +0 -0
  76. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/html/nolayout.html +0 -0
  77. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/html/static.html +0 -0
  78. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/img/android-chrome-192x192.png +0 -0
  79. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/img/android-chrome-512x512.png +0 -0
  80. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/img/apple-touch-icon.png +0 -0
  81. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/img/favicon-16x16.png +0 -0
  82. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/img/favicon-32x32.png +0 -0
  83. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/img/favicon.ico +0 -0
  84. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  85. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  86. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/asset/plugin/uuid.json +0 -0
  87. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/index.js +0 -0
  88. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/connector.js +0 -0
  89. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  90. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  91. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/n1ql.js +0 -0
  92. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/session-store.js +0 -0
  93. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  94. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  95. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  96. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/controller/controller.framework.js +0 -0
  97. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/controller/index.js +0 -0
  98. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/.travis.yml +0 -0
  99. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/LICENSE +0 -0
  100. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/README.md +0 -0
  101. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/deps/encoding/encoding-indexes.js +0 -0
  102. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/deps/encoding/encoding.js +0 -0
  103. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/lib/main.js +0 -0
  104. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/lib/types/multipart.js +0 -0
  105. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/lib/types/urlencoded.js +0 -0
  106. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/lib/utils.js +0 -0
  107. /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.80/core/deps/busboy-0.2.14}/package.json +0 -0
  108. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
  109. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/dev/index.js +0 -0
  110. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/dev/lib/class.js +0 -0
  111. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/dev/lib/factory.js +0 -0
  112. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/dev/lib/tools.js +0 -0
  113. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/README.md +0 -0
  114. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/currency.json +0 -0
  115. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/dist/language/en.json +0 -0
  116. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/dist/language/fr.json +0 -0
  117. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/dist/region/en.json +0 -0
  118. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/dist/region/fr.json +0 -0
  119. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/index.js +0 -0
  120. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/src/make.js +0 -0
  121. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/src/resources/currency.csv +0 -0
  122. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/src/resources/region.csv +0 -0
  123. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/locales/src/resources/region.mapping.json +0 -0
  124. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/mime.types +0 -0
  125. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/model/entity.js +0 -0
  126. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/model/template/entityFactory.js +0 -0
  127. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/model/template/index.js +0 -0
  128. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/README.md +0 -0
  129. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/index.js +0 -0
  130. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/file/README.md +0 -0
  131. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/file/build.json +0 -0
  132. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/file/package.json +0 -0
  133. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/intl/README.md +0 -0
  134. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/intl/build.json +0 -0
  135. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/intl/package.json +0 -0
  136. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/intl/src/main.js +0 -0
  137. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/storage/README.md +0 -0
  138. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/storage/build.json +0 -0
  139. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/storage/package.json +0 -0
  140. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/storage/src/main.js +0 -0
  141. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/validator/README.md +0 -0
  142. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/validator/build.json +0 -0
  143. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/plugins/lib/validator/package.json +0 -0
  144. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/server.express.js +0 -0
  145. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/status.codes +0 -0
  146. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/_gitignore +0 -0
  147. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/config/app.json +0 -0
  148. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/config/routing.json +0 -0
  149. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/config/settings.json +0 -0
  150. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  151. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/config/templates.json +0 -0
  152. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  153. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  154. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle/index.js +0 -0
  155. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  156. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  157. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  158. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  159. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  160. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_public/readme.md +0 -0
  161. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  162. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  163. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  164. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  165. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  166. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/command/gina.bat.tpl +0 -0
  167. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/command/gina.tpl +0 -0
  168. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/conf/env.json +0 -0
  169. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/conf/manifest.json +0 -0
  170. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/conf/package.json +0 -0
  171. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/conf/settings.json +0 -0
  172. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/conf/statics.json +0 -0
  173. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/error/client/json/401.json +0 -0
  174. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/error/client/json/403.json +0 -0
  175. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/error/client/json/404.json +0 -0
  176. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/error/server/html/50x.html +0 -0
  177. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/error/server/json/500.json +0 -0
  178. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/error/server/json/503.json +0 -0
  179. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/core/template/extensions/logger/config.json +0 -0
  180. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/console.js +0 -0
  181. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/data/LICENSE +0 -0
  182. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/data/README.md +0 -0
  183. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/data/package.json +0 -0
  184. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/data/src/main.js +0 -0
  185. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/dateFormat.js +0 -0
  186. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/index.js +0 -0
  187. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/json/LICENSE +0 -0
  188. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/json/README.md +0 -0
  189. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/json/package.json +0 -0
  190. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/json/src/main.js +0 -0
  191. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/plugins/README.md +0 -0
  192. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/plugins/package.json +0 -0
  193. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/plugins/src/api-error.js +0 -0
  194. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/plugins/src/main.js +0 -0
  195. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/prototypes.js +0 -0
  196. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/task.js +0 -0
  197. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/helpers/text.js +0 -0
  198. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/archiver/README.md +0 -0
  199. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/archiver/build.json +0 -0
  200. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/archiver/package.json +0 -0
  201. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/archiver/src/dep/jszip.min.js +0 -0
  202. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/archiver/src/main.js +0 -0
  203. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/aliases.json +0 -0
  204. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/arguments.json +0 -0
  205. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/copy.js +0 -0
  206. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/cp.js +0 -0
  207. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/help.js +0 -0
  208. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/help.txt +0 -0
  209. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/list.js +0 -0
  210. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/remove.js +0 -0
  211. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/rename.js +0 -0
  212. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/restart.js +0 -0
  213. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/rm.js +0 -0
  214. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/status.js +0 -0
  215. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/bundle/stop.js +0 -0
  216. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/add.js +0 -0
  217. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/get.js +0 -0
  218. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/help.js +0 -0
  219. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/help.txt +0 -0
  220. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/link-dev.js +0 -0
  221. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/list.js +0 -0
  222. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/remove.js +0 -0
  223. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/rm.js +0 -0
  224. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/set.js +0 -0
  225. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/unset.js +0 -0
  226. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/env/use.js +0 -0
  227. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/dot.js +0 -0
  228. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/get.js +0 -0
  229. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/help.js +0 -0
  230. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/help.txt +0 -0
  231. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/msg.json +0 -0
  232. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/open.js +0 -0
  233. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/restart.js +0 -0
  234. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/set.js +0 -0
  235. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/start.js +0 -0
  236. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/status.js +0 -0
  237. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/stop.js +0 -0
  238. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/framework/update.js +0 -0
  239. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/gina-dev.1.md +0 -0
  240. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/gina-framework.1.md +0 -0
  241. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/gina.1.md +0 -0
  242. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/index.js +0 -0
  243. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/msg.json +0 -0
  244. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/port/help.js +0 -0
  245. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/port/help.txt +0 -0
  246. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/port/inc/scan.js +0 -0
  247. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/port/list.js +0 -0
  248. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/port/reset.js +0 -0
  249. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/port/set.js +0 -0
  250. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/arguments.json +0 -0
  251. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/help.js +0 -0
  252. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/help.txt +0 -0
  253. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/import.js +0 -0
  254. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/list.js +0 -0
  255. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/move.js +0 -0
  256. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/remove.js +0 -0
  257. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/rename.js +0 -0
  258. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/restart.js +0 -0
  259. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/rm.js +0 -0
  260. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/start.js +0 -0
  261. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/status.js +0 -0
  262. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/project/stop.js +0 -0
  263. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/protocol/help.js +0 -0
  264. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/protocol/help.txt +0 -0
  265. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/protocol/set.js +0 -0
  266. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/add.js +0 -0
  267. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/help.js +0 -0
  268. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/help.txt +0 -0
  269. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/link-local.js +0 -0
  270. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/link-production.js +0 -0
  271. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/list.js +0 -0
  272. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/remove.js +0 -0
  273. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/rm.js +0 -0
  274. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/scope/use.js +0 -0
  275. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cmd/view/add.js +0 -0
  276. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/collection/README.md +0 -0
  277. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/collection/build.json +0 -0
  278. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/collection/package.json +0 -0
  279. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/config.js +0 -0
  280. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cron/README.md +0 -0
  281. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cron/package.json +0 -0
  282. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/cron/src/main.js +0 -0
  283. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/domain/LICENSE +0 -0
  284. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/domain/README.md +0 -0
  285. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/domain/dist/public_suffix_list.dat +0 -0
  286. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/domain/exemples/frontend.html +0 -0
  287. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/domain/package.json +0 -0
  288. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/generator/index.js +0 -0
  289. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/index.js +0 -0
  290. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/LICENSE +0 -0
  291. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/README.md +0 -0
  292. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/example/inheriting_eventemitter.js +0 -0
  293. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/example/protected_inheritance.js +0 -0
  294. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/example/simple_inheritance.js +0 -0
  295. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/example/super_attribute_overridden_by_child_on_init.js +0 -0
  296. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/package.json +0 -0
  297. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/inherits/src/main.js +0 -0
  298. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/README.md +0 -0
  299. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/package.json +0 -0
  300. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/containers/default/index.js +0 -0
  301. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/containers/file/index.js +0 -0
  302. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  303. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  304. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/containers/mq/index.js +0 -0
  305. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/containers/mq/listener.js +0 -0
  306. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/containers/mq/speaker.js +0 -0
  307. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/helper.js +0 -0
  308. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/logger/src/main.js +0 -0
  309. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/math/index.js +0 -0
  310. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/merge/README.md +0 -0
  311. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/merge/example/merge.js +0 -0
  312. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/merge/example/merge_2_literal objects.js +0 -0
  313. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/merge/example/merge_and_preserve_first.js +0 -0
  314. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/merge/src/main.js +0 -0
  315. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/proc.js +0 -0
  316. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/routing/README.md +0 -0
  317. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/routing/build.json +0 -0
  318. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/routing/package.json +0 -0
  319. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/shell.js +0 -0
  320. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/swig-filters/README.md +0 -0
  321. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/swig-filters/package.json +0 -0
  322. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/url/README.md +0 -0
  323. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/url/index.js +0 -0
  324. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/url/mocks.json +0 -0
  325. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/url/routing.json +0 -0
  326. /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.80}/lib/url/test.js +0 -0
@@ -0,0 +1,23 @@
1
+ name: lint
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [ master ]
7
+
8
+ env:
9
+ NODE_VERSION: 16.x
10
+
11
+ jobs:
12
+ lint-js:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Use Node.js ${{ env.NODE_VERSION }}
17
+ uses: actions/setup-node@v1
18
+ with:
19
+ node-version: ${{ env.NODE_VERSION }}
20
+ - name: Install ESLint + ESLint configs/plugins
21
+ run: npm install --only=dev
22
+ - name: Lint files
23
+ run: npm run lint
@@ -0,0 +1,19 @@
1
+ Copyright Brian White. All rights reserved.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
+ IN THE SOFTWARE.
@@ -0,0 +1,191 @@
1
+ # Description
2
+
3
+ A node.js module for parsing incoming HTML form data.
4
+
5
+ Changes (breaking or otherwise) in v1.0.0 can be found [here](https://github.com/mscdex/busboy/issues/266).
6
+
7
+ # Requirements
8
+
9
+ * [node.js](http://nodejs.org/) -- v10.16.0 or newer
10
+
11
+
12
+ # Install
13
+
14
+ npm install busboy
15
+
16
+
17
+ # Examples
18
+
19
+ * Parsing (multipart) with default options:
20
+
21
+ ```js
22
+ const http = require('http');
23
+
24
+ const busboy = require('busboy');
25
+
26
+ http.createServer((req, res) => {
27
+ if (req.method === 'POST') {
28
+ console.log('POST request');
29
+ const bb = busboy({ headers: req.headers });
30
+ bb.on('file', (name, file, info) => {
31
+ const { filename, encoding, mimeType } = info;
32
+ console.log(
33
+ `File [${name}]: filename: %j, encoding: %j, mimeType: %j`,
34
+ filename,
35
+ encoding,
36
+ mimeType
37
+ );
38
+ file.on('data', (data) => {
39
+ console.log(`File [${name}] got ${data.length} bytes`);
40
+ }).on('close', () => {
41
+ console.log(`File [${name}] done`);
42
+ });
43
+ });
44
+ bb.on('field', (name, val, info) => {
45
+ console.log(`Field [${name}]: value: %j`, val);
46
+ });
47
+ bb.on('close', () => {
48
+ console.log('Done parsing form!');
49
+ res.writeHead(303, { Connection: 'close', Location: '/' });
50
+ res.end();
51
+ });
52
+ req.pipe(bb);
53
+ } else if (req.method === 'GET') {
54
+ res.writeHead(200, { Connection: 'close' });
55
+ res.end(`
56
+ <html>
57
+ <head></head>
58
+ <body>
59
+ <form method="POST" enctype="multipart/form-data">
60
+ <input type="file" name="filefield"><br />
61
+ <input type="text" name="textfield"><br />
62
+ <input type="submit">
63
+ </form>
64
+ </body>
65
+ </html>
66
+ `);
67
+ }
68
+ }).listen(8000, () => {
69
+ console.log('Listening for requests');
70
+ });
71
+
72
+ // Example output:
73
+ //
74
+ // Listening for requests
75
+ // < ... form submitted ... >
76
+ // POST request
77
+ // File [filefield]: filename: "logo.jpg", encoding: "binary", mime: "image/jpeg"
78
+ // File [filefield] got 11912 bytes
79
+ // Field [textfield]: value: "testing! :-)"
80
+ // File [filefield] done
81
+ // Done parsing form!
82
+ ```
83
+
84
+ * Save all incoming files to disk:
85
+
86
+ ```js
87
+ const { randomFillSync } = require('crypto');
88
+ const fs = require('fs');
89
+ const http = require('http');
90
+ const os = require('os');
91
+ const path = require('path');
92
+
93
+ const busboy = require('busboy');
94
+
95
+ const random = (() => {
96
+ const buf = Buffer.alloc(16);
97
+ return () => randomFillSync(buf).toString('hex');
98
+ })();
99
+
100
+ http.createServer((req, res) => {
101
+ if (req.method === 'POST') {
102
+ const bb = busboy({ headers: req.headers });
103
+ bb.on('file', (name, file, info) => {
104
+ const saveTo = path.join(os.tmpdir(), `busboy-upload-${random()}`);
105
+ file.pipe(fs.createWriteStream(saveTo));
106
+ });
107
+ bb.on('close', () => {
108
+ res.writeHead(200, { 'Connection': 'close' });
109
+ res.end(`That's all folks!`);
110
+ });
111
+ req.pipe(bb);
112
+ return;
113
+ }
114
+ res.writeHead(404);
115
+ res.end();
116
+ }).listen(8000, () => {
117
+ console.log('Listening for requests');
118
+ });
119
+ ```
120
+
121
+
122
+ # API
123
+
124
+ ## Exports
125
+
126
+ `busboy` exports a single function:
127
+
128
+ **( _function_ )**(< _object_ >config) - Creates and returns a new _Writable_ form parser stream.
129
+
130
+ * Valid `config` properties:
131
+
132
+ * **headers** - _object_ - These are the HTTP headers of the incoming request, which are used by individual parsers.
133
+
134
+ * **highWaterMark** - _integer_ - highWaterMark to use for the parser stream. **Default:** node's _stream.Writable_ default.
135
+
136
+ * **fileHwm** - _integer_ - highWaterMark to use for individual file streams. **Default:** node's _stream.Readable_ default.
137
+
138
+ * **defCharset** - _string_ - Default character set to use when one isn't defined. **Default:** `'utf8'`.
139
+
140
+ * **defParamCharset** - _string_ - For multipart forms, the default character set to use for values of part header parameters (e.g. filename) that are not extended parameters (that contain an explicit charset). **Default:** `'latin1'`.
141
+
142
+ * **preservePath** - _boolean_ - If paths in filenames from file parts in a `'multipart/form-data'` request shall be preserved. **Default:** `false`.
143
+
144
+ * **limits** - _object_ - Various limits on incoming data. Valid properties are:
145
+
146
+ * **fieldNameSize** - _integer_ - Max field name size (in bytes). **Default:** `100`.
147
+
148
+ * **fieldSize** - _integer_ - Max field value size (in bytes). **Default:** `1048576` (1MB).
149
+
150
+ * **fields** - _integer_ - Max number of non-file fields. **Default:** `Infinity`.
151
+
152
+ * **fileSize** - _integer_ - For multipart forms, the max file size (in bytes). **Default:** `Infinity`.
153
+
154
+ * **files** - _integer_ - For multipart forms, the max number of file fields. **Default:** `Infinity`.
155
+
156
+ * **parts** - _integer_ - For multipart forms, the max number of parts (fields + files). **Default:** `Infinity`.
157
+
158
+ * **headerPairs** - _integer_ - For multipart forms, the max number of header key-value pairs to parse. **Default:** `2000` (same as node's http module).
159
+
160
+ This function can throw exceptions if there is something wrong with the values in `config`. For example, if the Content-Type in `headers` is missing entirely, is not a supported type, or is missing the boundary for `'multipart/form-data'` requests.
161
+
162
+ ## (Special) Parser stream events
163
+
164
+ * **file**(< _string_ >name, < _Readable_ >stream, < _object_ >info) - Emitted for each new file found. `name` contains the form field name. `stream` is a _Readable_ stream containing the file's data. No transformations/conversions (e.g. base64 to raw binary) are done on the file's data. `info` contains the following properties:
165
+
166
+ * `filename` - _string_ - If supplied, this contains the file's filename. **WARNING:** You should almost _never_ use this value as-is (especially if you are using `preservePath: true` in your `config`) as it could contain malicious input. You are better off generating your own (safe) filenames, or at the very least using a hash of the filename.
167
+
168
+ * `encoding` - _string_ - The file's `'Content-Transfer-Encoding'` value.
169
+
170
+ * `mimeType` - _string_ - The file's `'Content-Type'` value.
171
+
172
+ **Note:** If you listen for this event, you should always consume the `stream` whether you care about its contents or not (you can simply do `stream.resume();` if you want to discard/skip the contents), otherwise the `'finish'`/`'close'` event will never fire on the busboy parser stream.
173
+ However, if you aren't accepting files, you can either simply not listen for the `'file'` event at all or set `limits.files` to `0`, and any/all files will be automatically skipped (these skipped files will still count towards any configured `limits.files` and `limits.parts` limits though).
174
+
175
+ **Note:** If a configured `limits.fileSize` limit was reached for a file, `stream` will both have a boolean property `truncated` set to `true` (best checked at the end of the stream) and emit a `'limit'` event to notify you when this happens.
176
+
177
+ * **field**(< _string_ >name, < _string_ >value, < _object_ >info) - Emitted for each new non-file field found. `name` contains the form field name. `value` contains the string value of the field. `info` contains the following properties:
178
+
179
+ * `nameTruncated` - _boolean_ - Whether `name` was truncated or not (due to a configured `limits.fieldNameSize` limit)
180
+
181
+ * `valueTruncated` - _boolean_ - Whether `value` was truncated or not (due to a configured `limits.fieldSize` limit)
182
+
183
+ * `encoding` - _string_ - The field's `'Content-Transfer-Encoding'` value.
184
+
185
+ * `mimeType` - _string_ - The field's `'Content-Type'` value.
186
+
187
+ * **partsLimit**() - Emitted when the configured `limits.parts` limit has been reached. No more `'file'` or `'field'` events will be emitted.
188
+
189
+ * **filesLimit**() - Emitted when the configured `limits.files` limit has been reached. No more `'file'` events will be emitted.
190
+
191
+ * **fieldsLimit**() - Emitted when the configured `limits.fields` limit has been reached. No more `'field'` events will be emitted.
@@ -0,0 +1,149 @@
1
+ 'use strict';
2
+
3
+ function createMultipartBuffers(boundary, sizes) {
4
+ const bufs = [];
5
+ for (let i = 0; i < sizes.length; ++i) {
6
+ const mb = sizes[i] * 1024 * 1024;
7
+ bufs.push(Buffer.from([
8
+ `--${boundary}`,
9
+ `content-disposition: form-data; name="field${i + 1}"`,
10
+ '',
11
+ '0'.repeat(mb),
12
+ '',
13
+ ].join('\r\n')));
14
+ }
15
+ bufs.push(Buffer.from([
16
+ `--${boundary}--`,
17
+ '',
18
+ ].join('\r\n')));
19
+ return bufs;
20
+ }
21
+
22
+ const boundary = '-----------------------------168072824752491622650073';
23
+ const buffers = createMultipartBuffers(boundary, [
24
+ 10,
25
+ 10,
26
+ 10,
27
+ 20,
28
+ 50,
29
+ ]);
30
+ const calls = {
31
+ partBegin: 0,
32
+ headerField: 0,
33
+ headerValue: 0,
34
+ headerEnd: 0,
35
+ headersEnd: 0,
36
+ partData: 0,
37
+ partEnd: 0,
38
+ end: 0,
39
+ };
40
+
41
+ const moduleName = process.argv[2];
42
+ switch (moduleName) {
43
+ case 'busboy': {
44
+ const busboy = require('busboy');
45
+
46
+ const parser = busboy({
47
+ limits: {
48
+ fieldSizeLimit: Infinity,
49
+ },
50
+ headers: {
51
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
52
+ },
53
+ });
54
+ parser.on('field', (name, val, info) => {
55
+ ++calls.partBegin;
56
+ ++calls.partData;
57
+ ++calls.partEnd;
58
+ }).on('close', () => {
59
+ ++calls.end;
60
+ console.timeEnd(moduleName);
61
+ });
62
+
63
+ console.time(moduleName);
64
+ for (const buf of buffers)
65
+ parser.write(buf);
66
+ break;
67
+ }
68
+
69
+ case 'formidable': {
70
+ const { MultipartParser } = require('formidable');
71
+
72
+ const parser = new MultipartParser();
73
+ parser.initWithBoundary(boundary);
74
+ parser.on('data', ({ name }) => {
75
+ ++calls[name];
76
+ if (name === 'end')
77
+ console.timeEnd(moduleName);
78
+ });
79
+
80
+ console.time(moduleName);
81
+ for (const buf of buffers)
82
+ parser.write(buf);
83
+
84
+ break;
85
+ }
86
+
87
+ case 'multiparty': {
88
+ const { Readable } = require('stream');
89
+
90
+ const { Form } = require('multiparty');
91
+
92
+ const form = new Form({
93
+ maxFieldsSize: Infinity,
94
+ maxFields: Infinity,
95
+ maxFilesSize: Infinity,
96
+ autoFields: false,
97
+ autoFiles: false,
98
+ });
99
+
100
+ const req = new Readable({ read: () => {} });
101
+ req.headers = {
102
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
103
+ };
104
+
105
+ function hijack(name, fn) {
106
+ const oldFn = form[name];
107
+ form[name] = function() {
108
+ fn();
109
+ return oldFn.apply(this, arguments);
110
+ };
111
+ }
112
+
113
+ hijack('onParseHeaderField', () => {
114
+ ++calls.headerField;
115
+ });
116
+ hijack('onParseHeaderValue', () => {
117
+ ++calls.headerValue;
118
+ });
119
+ hijack('onParsePartBegin', () => {
120
+ ++calls.partBegin;
121
+ });
122
+ hijack('onParsePartData', () => {
123
+ ++calls.partData;
124
+ });
125
+ hijack('onParsePartEnd', () => {
126
+ ++calls.partEnd;
127
+ });
128
+
129
+ form.on('close', () => {
130
+ ++calls.end;
131
+ console.timeEnd(moduleName);
132
+ }).on('part', (p) => p.resume());
133
+
134
+ console.time(moduleName);
135
+ form.parse(req);
136
+ for (const buf of buffers)
137
+ req.push(buf);
138
+ req.push(null);
139
+
140
+ break;
141
+ }
142
+
143
+ default:
144
+ if (moduleName === undefined)
145
+ console.error('Missing parser module name');
146
+ else
147
+ console.error(`Invalid parser module name: ${moduleName}`);
148
+ process.exit(1);
149
+ }
@@ -0,0 +1,143 @@
1
+ 'use strict';
2
+
3
+ function createMultipartBuffers(boundary, sizes) {
4
+ const bufs = [];
5
+ for (let i = 0; i < sizes.length; ++i) {
6
+ const mb = sizes[i] * 1024 * 1024;
7
+ bufs.push(Buffer.from([
8
+ `--${boundary}`,
9
+ `content-disposition: form-data; name="field${i + 1}"`,
10
+ '',
11
+ '0'.repeat(mb),
12
+ '',
13
+ ].join('\r\n')));
14
+ }
15
+ bufs.push(Buffer.from([
16
+ `--${boundary}--`,
17
+ '',
18
+ ].join('\r\n')));
19
+ return bufs;
20
+ }
21
+
22
+ const boundary = '-----------------------------168072824752491622650073';
23
+ const buffers = createMultipartBuffers(boundary, (new Array(100)).fill(1));
24
+ const calls = {
25
+ partBegin: 0,
26
+ headerField: 0,
27
+ headerValue: 0,
28
+ headerEnd: 0,
29
+ headersEnd: 0,
30
+ partData: 0,
31
+ partEnd: 0,
32
+ end: 0,
33
+ };
34
+
35
+ const moduleName = process.argv[2];
36
+ switch (moduleName) {
37
+ case 'busboy': {
38
+ const busboy = require('busboy');
39
+
40
+ const parser = busboy({
41
+ limits: {
42
+ fieldSizeLimit: Infinity,
43
+ },
44
+ headers: {
45
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
46
+ },
47
+ });
48
+ parser.on('field', (name, val, info) => {
49
+ ++calls.partBegin;
50
+ ++calls.partData;
51
+ ++calls.partEnd;
52
+ }).on('close', () => {
53
+ ++calls.end;
54
+ console.timeEnd(moduleName);
55
+ });
56
+
57
+ console.time(moduleName);
58
+ for (const buf of buffers)
59
+ parser.write(buf);
60
+ break;
61
+ }
62
+
63
+ case 'formidable': {
64
+ const { MultipartParser } = require('formidable');
65
+
66
+ const parser = new MultipartParser();
67
+ parser.initWithBoundary(boundary);
68
+ parser.on('data', ({ name }) => {
69
+ ++calls[name];
70
+ if (name === 'end')
71
+ console.timeEnd(moduleName);
72
+ });
73
+
74
+ console.time(moduleName);
75
+ for (const buf of buffers)
76
+ parser.write(buf);
77
+
78
+ break;
79
+ }
80
+
81
+ case 'multiparty': {
82
+ const { Readable } = require('stream');
83
+
84
+ const { Form } = require('multiparty');
85
+
86
+ const form = new Form({
87
+ maxFieldsSize: Infinity,
88
+ maxFields: Infinity,
89
+ maxFilesSize: Infinity,
90
+ autoFields: false,
91
+ autoFiles: false,
92
+ });
93
+
94
+ const req = new Readable({ read: () => {} });
95
+ req.headers = {
96
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
97
+ };
98
+
99
+ function hijack(name, fn) {
100
+ const oldFn = form[name];
101
+ form[name] = function() {
102
+ fn();
103
+ return oldFn.apply(this, arguments);
104
+ };
105
+ }
106
+
107
+ hijack('onParseHeaderField', () => {
108
+ ++calls.headerField;
109
+ });
110
+ hijack('onParseHeaderValue', () => {
111
+ ++calls.headerValue;
112
+ });
113
+ hijack('onParsePartBegin', () => {
114
+ ++calls.partBegin;
115
+ });
116
+ hijack('onParsePartData', () => {
117
+ ++calls.partData;
118
+ });
119
+ hijack('onParsePartEnd', () => {
120
+ ++calls.partEnd;
121
+ });
122
+
123
+ form.on('close', () => {
124
+ ++calls.end;
125
+ console.timeEnd(moduleName);
126
+ }).on('part', (p) => p.resume());
127
+
128
+ console.time(moduleName);
129
+ form.parse(req);
130
+ for (const buf of buffers)
131
+ req.push(buf);
132
+ req.push(null);
133
+
134
+ break;
135
+ }
136
+
137
+ default:
138
+ if (moduleName === undefined)
139
+ console.error('Missing parser module name');
140
+ else
141
+ console.error(`Invalid parser module name: ${moduleName}`);
142
+ process.exit(1);
143
+ }
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ function createMultipartBuffers(boundary, sizes) {
4
+ const bufs = [];
5
+ for (let i = 0; i < sizes.length; ++i) {
6
+ const mb = sizes[i] * 1024 * 1024;
7
+ bufs.push(Buffer.from([
8
+ `--${boundary}`,
9
+ `content-disposition: form-data; name="file${i + 1}"; `
10
+ + `filename="random${i + 1}.bin"`,
11
+ 'content-type: application/octet-stream',
12
+ '',
13
+ '0'.repeat(mb),
14
+ '',
15
+ ].join('\r\n')));
16
+ }
17
+ bufs.push(Buffer.from([
18
+ `--${boundary}--`,
19
+ '',
20
+ ].join('\r\n')));
21
+ return bufs;
22
+ }
23
+
24
+ const boundary = '-----------------------------168072824752491622650073';
25
+ const buffers = createMultipartBuffers(boundary, [
26
+ 10,
27
+ 10,
28
+ 10,
29
+ 20,
30
+ 50,
31
+ ]);
32
+ const calls = {
33
+ partBegin: 0,
34
+ headerField: 0,
35
+ headerValue: 0,
36
+ headerEnd: 0,
37
+ headersEnd: 0,
38
+ partData: 0,
39
+ partEnd: 0,
40
+ end: 0,
41
+ };
42
+
43
+ const moduleName = process.argv[2];
44
+ switch (moduleName) {
45
+ case 'busboy': {
46
+ const busboy = require('busboy');
47
+
48
+ const parser = busboy({
49
+ limits: {
50
+ fieldSizeLimit: Infinity,
51
+ },
52
+ headers: {
53
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
54
+ },
55
+ });
56
+ parser.on('file', (name, stream, info) => {
57
+ ++calls.partBegin;
58
+ stream.on('data', (chunk) => {
59
+ ++calls.partData;
60
+ }).on('end', () => {
61
+ ++calls.partEnd;
62
+ });
63
+ }).on('close', () => {
64
+ ++calls.end;
65
+ console.timeEnd(moduleName);
66
+ });
67
+
68
+ console.time(moduleName);
69
+ for (const buf of buffers)
70
+ parser.write(buf);
71
+ break;
72
+ }
73
+
74
+ case 'formidable': {
75
+ const { MultipartParser } = require('formidable');
76
+
77
+ const parser = new MultipartParser();
78
+ parser.initWithBoundary(boundary);
79
+ parser.on('data', ({ name }) => {
80
+ ++calls[name];
81
+ if (name === 'end')
82
+ console.timeEnd(moduleName);
83
+ });
84
+
85
+ console.time(moduleName);
86
+ for (const buf of buffers)
87
+ parser.write(buf);
88
+
89
+ break;
90
+ }
91
+
92
+ case 'multiparty': {
93
+ const { Readable } = require('stream');
94
+
95
+ const { Form } = require('multiparty');
96
+
97
+ const form = new Form({
98
+ maxFieldsSize: Infinity,
99
+ maxFields: Infinity,
100
+ maxFilesSize: Infinity,
101
+ autoFields: false,
102
+ autoFiles: false,
103
+ });
104
+
105
+ const req = new Readable({ read: () => {} });
106
+ req.headers = {
107
+ 'content-type': `multipart/form-data; boundary=${boundary}`,
108
+ };
109
+
110
+ function hijack(name, fn) {
111
+ const oldFn = form[name];
112
+ form[name] = function() {
113
+ fn();
114
+ return oldFn.apply(this, arguments);
115
+ };
116
+ }
117
+
118
+ hijack('onParseHeaderField', () => {
119
+ ++calls.headerField;
120
+ });
121
+ hijack('onParseHeaderValue', () => {
122
+ ++calls.headerValue;
123
+ });
124
+ hijack('onParsePartBegin', () => {
125
+ ++calls.partBegin;
126
+ });
127
+ hijack('onParsePartData', () => {
128
+ ++calls.partData;
129
+ });
130
+ hijack('onParsePartEnd', () => {
131
+ ++calls.partEnd;
132
+ });
133
+
134
+ form.on('close', () => {
135
+ ++calls.end;
136
+ console.timeEnd(moduleName);
137
+ }).on('part', (p) => p.resume());
138
+
139
+ console.time(moduleName);
140
+ form.parse(req);
141
+ for (const buf of buffers)
142
+ req.push(buf);
143
+ req.push(null);
144
+
145
+ break;
146
+ }
147
+
148
+ default:
149
+ if (moduleName === undefined)
150
+ console.error('Missing parser module name');
151
+ else
152
+ console.error(`Invalid parser module name: ${moduleName}`);
153
+ process.exit(1);
154
+ }