gina 0.1.6-alpha.6 → 0.1.6-alpha.61

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 (324) hide show
  1. package/README-4Contributors.md +5 -5
  2. package/README.md +3 -3
  3. package/bin/cli +13 -0
  4. package/bin/gina +5 -0
  5. package/framework/v0.1.6-alpha.61/VERSION +1 -0
  6. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/plugin/README.md +1 -0
  7. package/framework/v0.1.6-alpha.61/core/asset/plugin/dist/vendor/gina/css/gina.min.css.map +1 -0
  8. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/plugin/dist/vendor/gina/js/gina.js +159 -27
  9. package/framework/v0.1.6-alpha.61/core/asset/plugin/dist/vendor/gina/js/gina.min.js +771 -0
  10. package/framework/v0.1.6-alpha.61/core/asset/plugin/dist/vendor/gina/js/gina.min.js.map +8 -0
  11. package/framework/v0.1.6-alpha.61/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +8 -0
  12. package/framework/v0.1.6-alpha.61/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.map +8 -0
  13. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/config.js +98 -24
  14. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/connector.v4.js +28 -22
  15. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/controller/controller.js +275 -36
  16. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/.github/workflows/ci.yml +24 -0
  17. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/.github/workflows/lint.yml +23 -0
  18. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/LICENSE +19 -0
  19. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/README.md +191 -0
  20. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-big.js +149 -0
  21. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-small.js +143 -0
  22. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/bench/bench-multipart-files-100mb-big.js +154 -0
  23. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/bench/bench-multipart-files-100mb-small.js +148 -0
  24. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/bench/bench-urlencoded-fields-100pairs-small.js +101 -0
  25. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/bench/bench-urlencoded-fields-900pairs-small-alt.js +84 -0
  26. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/lib/index.js +57 -0
  27. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/lib/types/multipart.js +680 -0
  28. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/lib/types/urlencoded.js +350 -0
  29. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/lib/utils.js +596 -0
  30. package/framework/v0.1.6-alpha.61/core/deps/busboy-1.6.0/package.json +22 -0
  31. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/gna.js +97 -18
  32. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/model/index.js +28 -24
  33. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/validator/src/main.js +43 -9
  34. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/router.js +74 -40
  35. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/server.isaac.js +28 -6
  36. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/server.js +31 -5
  37. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/controllers/setup.js +2 -2
  38. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/context.js +16 -11
  39. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/path.js +25 -9
  40. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/add.js +2 -1
  41. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/start.js +20 -8
  42. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/build.js +1 -1
  43. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/init.js +18 -0
  44. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/link-node-modules.js +2 -3
  45. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/link.js +1 -0
  46. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/tail.js +5 -5
  47. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/version.js +15 -1
  48. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/helper.js +12 -5
  49. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/add.js +3 -2
  50. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/build.js +4 -4
  51. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/protocol/list.js +71 -50
  52. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/domain/src/main.js +59 -1
  53. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/merge/package.json +1 -1
  54. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/model.js +1 -1
  55. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/routing/src/main.js +49 -10
  56. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/session-store.js +2 -2
  57. package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/swig-filters/src/main.js +63 -8
  58. package/framework/v0.1.6-alpha.61/package.json +12 -0
  59. package/package.json +2 -2
  60. package/framework/v0.1.6-alpha.6/VERSION +0 -1
  61. package/framework/v0.1.6-alpha.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.map +0 -1
  62. package/framework/v0.1.6-alpha.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -765
  63. package/framework/v0.1.6-alpha.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.map +0 -8
  64. package/framework/v0.1.6-alpha.6/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -7
  65. package/framework/v0.1.6-alpha.6/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.map +0 -8
  66. package/framework/v0.1.6-alpha.6/package.json +0 -14
  67. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/AUTHORS +0 -0
  68. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/LICENSE +0 -0
  69. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/html/nolayout.html +0 -0
  70. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/html/static.html +0 -0
  71. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/img/android-chrome-192x192.png +0 -0
  72. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/img/android-chrome-512x512.png +0 -0
  73. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/img/apple-touch-icon.png +0 -0
  74. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/img/favicon-16x16.png +0 -0
  75. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/img/favicon-32x32.png +0 -0
  76. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/img/favicon.ico +0 -0
  77. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  78. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  79. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/asset/plugin/uuid.json +0 -0
  80. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/index.js +0 -0
  81. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/connector.js +0 -0
  82. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  83. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  84. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/n1ql.js +0 -0
  85. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/session-store.js +0 -0
  86. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  87. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  88. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  89. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/controller/controller.framework.js +0 -0
  90. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/controller/index.js +0 -0
  91. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/.travis.yml +0 -0
  92. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/LICENSE +0 -0
  93. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/README.md +0 -0
  94. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/deps/encoding/encoding-indexes.js +0 -0
  95. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/deps/encoding/encoding.js +0 -0
  96. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/lib/main.js +0 -0
  97. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/lib/types/multipart.js +0 -0
  98. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/lib/types/urlencoded.js +0 -0
  99. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/lib/utils.js +0 -0
  100. /package/framework/{v0.1.6-alpha.6/core/deps/busboy → v0.1.6-alpha.61/core/deps/busboy-0.2.14}/package.json +0 -0
  101. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
  102. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/dev/index.js +0 -0
  103. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/dev/lib/class.js +0 -0
  104. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/dev/lib/factory.js +0 -0
  105. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/dev/lib/tools.js +0 -0
  106. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/README.md +0 -0
  107. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/currency.json +0 -0
  108. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/dist/language/en.json +0 -0
  109. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/dist/language/fr.json +0 -0
  110. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/dist/region/en.json +0 -0
  111. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/dist/region/fr.json +0 -0
  112. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/index.js +0 -0
  113. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/src/make.js +0 -0
  114. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/src/resources/currency.csv +0 -0
  115. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/src/resources/region.csv +0 -0
  116. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/locales/src/resources/region.mapping.json +0 -0
  117. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/mime.types +0 -0
  118. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/model/entity.js +0 -0
  119. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/model/template/entityFactory.js +0 -0
  120. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/model/template/index.js +0 -0
  121. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/README.md +0 -0
  122. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/index.js +0 -0
  123. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/file/README.md +0 -0
  124. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/file/build.json +0 -0
  125. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/file/package.json +0 -0
  126. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/intl/README.md +0 -0
  127. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/intl/build.json +0 -0
  128. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/intl/package.json +0 -0
  129. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/intl/src/main.js +0 -0
  130. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/storage/README.md +0 -0
  131. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/storage/build.json +0 -0
  132. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/storage/package.json +0 -0
  133. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/storage/src/main.js +0 -0
  134. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/validator/README.md +0 -0
  135. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/validator/build.json +0 -0
  136. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/validator/package.json +0 -0
  137. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/plugins/lib/validator/src/form-validator.js +0 -0
  138. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/server.express.js +0 -0
  139. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/status.codes +0 -0
  140. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/_gitignore +0 -0
  141. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/config/app.json +0 -0
  142. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/config/routing.json +0 -0
  143. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/config/settings.json +0 -0
  144. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  145. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/config/templates.json +0 -0
  146. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  147. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  148. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle/index.js +0 -0
  149. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  150. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  151. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  152. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  153. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  154. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_public/readme.md +0 -0
  155. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  156. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  157. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  158. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  159. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  160. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/command/gina.bat.tpl +0 -0
  161. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/command/gina.tpl +0 -0
  162. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/conf/env.json +0 -0
  163. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/conf/manifest.json +0 -0
  164. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/conf/package.json +0 -0
  165. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/conf/settings.json +0 -0
  166. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/conf/statics.json +0 -0
  167. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/conf/templates.json +0 -0
  168. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/error/client/json/401.json +0 -0
  169. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/error/client/json/403.json +0 -0
  170. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/error/client/json/404.json +0 -0
  171. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/error/server/html/50x.html +0 -0
  172. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/error/server/json/500.json +0 -0
  173. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/error/server/json/503.json +0 -0
  174. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/core/template/extensions/logger/config.json +0 -0
  175. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/console.js +0 -0
  176. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/data/LICENSE +0 -0
  177. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/data/README.md +0 -0
  178. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/data/package.json +0 -0
  179. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/data/src/main.js +0 -0
  180. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/dateFormat.js +0 -0
  181. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/index.js +0 -0
  182. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/json/LICENSE +0 -0
  183. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/json/README.md +0 -0
  184. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/json/package.json +0 -0
  185. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/json/src/main.js +0 -0
  186. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/plugins/README.md +0 -0
  187. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/plugins/package.json +0 -0
  188. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/plugins/src/api-error.js +0 -0
  189. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/plugins/src/main.js +0 -0
  190. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/prototypes.js +0 -0
  191. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/task.js +0 -0
  192. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/helpers/text.js +0 -0
  193. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/archiver/README.md +0 -0
  194. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/archiver/build.json +0 -0
  195. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/archiver/package.json +0 -0
  196. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/archiver/src/dep/jszip.min.js +0 -0
  197. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/archiver/src/main.js +0 -0
  198. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/aliases.json +0 -0
  199. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/arguments.json +0 -0
  200. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/copy.js +0 -0
  201. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/cp.js +0 -0
  202. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/help.js +0 -0
  203. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/help.txt +0 -0
  204. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/list.js +0 -0
  205. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/remove.js +0 -0
  206. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/rename.js +0 -0
  207. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/restart.js +0 -0
  208. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/rm.js +0 -0
  209. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/status.js +0 -0
  210. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/bundle/stop.js +0 -0
  211. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/add.js +0 -0
  212. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/get.js +0 -0
  213. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/help.js +0 -0
  214. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/help.txt +0 -0
  215. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/link-dev.js +0 -0
  216. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/list.js +0 -0
  217. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/remove.js +0 -0
  218. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/rm.js +0 -0
  219. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/set.js +0 -0
  220. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/unset.js +0 -0
  221. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/env/use.js +0 -0
  222. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/dot.js +0 -0
  223. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/get.js +0 -0
  224. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/help.js +0 -0
  225. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/help.txt +0 -0
  226. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/msg.json +0 -0
  227. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/open.js +0 -0
  228. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/restart.js +0 -0
  229. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/set.js +0 -0
  230. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/start.js +0 -0
  231. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/status.js +0 -0
  232. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/stop.js +0 -0
  233. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/framework/update.js +0 -0
  234. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/gina-dev.1.md +0 -0
  235. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/gina-framework.1.md +0 -0
  236. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/gina.1.md +0 -0
  237. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/index.js +0 -0
  238. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/msg.json +0 -0
  239. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/port/help.js +0 -0
  240. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/port/help.txt +0 -0
  241. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/port/inc/scan.js +0 -0
  242. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/port/list.js +0 -0
  243. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/port/reset.js +0 -0
  244. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/port/set.js +0 -0
  245. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/arguments.json +0 -0
  246. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/help.js +0 -0
  247. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/help.txt +0 -0
  248. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/import.js +0 -0
  249. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/list.js +0 -0
  250. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/move.js +0 -0
  251. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/remove.js +0 -0
  252. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/rename.js +0 -0
  253. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/restart.js +0 -0
  254. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/rm.js +0 -0
  255. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/start.js +0 -0
  256. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/status.js +0 -0
  257. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/project/stop.js +0 -0
  258. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/protocol/help.js +0 -0
  259. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/protocol/help.txt +0 -0
  260. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/protocol/set.js +0 -0
  261. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/add.js +0 -0
  262. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/help.js +0 -0
  263. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/help.txt +0 -0
  264. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/link-local.js +0 -0
  265. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/link-production.js +0 -0
  266. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/list.js +0 -0
  267. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/remove.js +0 -0
  268. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/rm.js +0 -0
  269. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/scope/use.js +0 -0
  270. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cmd/view/add.js +0 -0
  271. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/collection/README.md +0 -0
  272. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/collection/build.json +0 -0
  273. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/collection/package.json +0 -0
  274. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/collection/src/main.js +0 -0
  275. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/config.js +0 -0
  276. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cron/README.md +0 -0
  277. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cron/package.json +0 -0
  278. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/cron/src/main.js +0 -0
  279. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/domain/LICENSE +0 -0
  280. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/domain/README.md +0 -0
  281. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/domain/dist/public_suffix_list.dat +0 -0
  282. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/domain/exemples/backend.js +0 -0
  283. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/domain/exemples/frontend.html +0 -0
  284. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/domain/package.json +0 -0
  285. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/generator/index.js +0 -0
  286. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/index.js +0 -0
  287. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/LICENSE +0 -0
  288. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/README.md +0 -0
  289. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/example/inheriting_eventemitter.js +0 -0
  290. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/example/protected_inheritance.js +0 -0
  291. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/example/simple_inheritance.js +0 -0
  292. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/example/super_attribute_overridden_by_child_on_init.js +0 -0
  293. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/package.json +0 -0
  294. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/inherits/src/main.js +0 -0
  295. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/README.md +0 -0
  296. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/package.json +0 -0
  297. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/containers/default/index.js +0 -0
  298. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/containers/file/index.js +0 -0
  299. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  300. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  301. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/containers/mq/index.js +0 -0
  302. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/containers/mq/listener.js +0 -0
  303. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/containers/mq/speaker.js +0 -0
  304. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/helper.js +0 -0
  305. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/logger/src/main.js +0 -0
  306. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/math/index.js +0 -0
  307. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/merge/README.md +0 -0
  308. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/merge/example/merge.js +0 -0
  309. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/merge/example/merge_2_literal objects.js +0 -0
  310. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/merge/example/merge_and_preserve_first.js +0 -0
  311. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/merge/src/main.js +0 -0
  312. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/proc.js +0 -0
  313. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/routing/README.md +0 -0
  314. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/routing/build.json +0 -0
  315. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/routing/package.json +0 -0
  316. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/shell.js +0 -0
  317. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/swig-filters/README.md +0 -0
  318. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/swig-filters/package.json +0 -0
  319. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/url/README.md +0 -0
  320. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/url/index.js +0 -0
  321. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/url/mocks.json +0 -0
  322. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/url/routing.json +0 -0
  323. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/url/test.js +0 -0
  324. /package/framework/{v0.1.6-alpha.6 → v0.1.6-alpha.61}/lib/validator.js +0 -0
@@ -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
+ }