gina 0.1.6-alpha.8 → 0.1.6-alpha.81
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.
- package/README-4Contributors.md +14 -8
- package/README.md +3 -3
- package/bin/cli +13 -0
- package/bin/gina +29 -1
- package/framework/v0.1.6-alpha.81/VERSION +1 -0
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/plugin/README.md +1 -0
- package/framework/v0.1.6-alpha.81/core/asset/plugin/dist/vendor/gina/css/gina.min.css.map +1 -0
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/plugin/dist/vendor/gina/js/gina.js +422 -128
- package/framework/v0.1.6-alpha.81/core/asset/plugin/dist/vendor/gina/js/gina.min.js +777 -0
- package/framework/v0.1.6-alpha.81/core/asset/plugin/dist/vendor/gina/js/gina.min.js.map +8 -0
- package/framework/v0.1.6-alpha.81/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +8 -0
- package/framework/v0.1.6-alpha.81/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.map +8 -0
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/config.js +117 -51
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/connector.v4.js +28 -22
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/controller/controller.js +329 -56
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/.github/workflows/ci.yml +24 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/.github/workflows/lint.yml +23 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/LICENSE +19 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/README.md +191 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-big.js +149 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-small.js +143 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-multipart-files-100mb-big.js +154 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-multipart-files-100mb-small.js +148 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-urlencoded-fields-100pairs-small.js +101 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-urlencoded-fields-900pairs-small-alt.js +84 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/lib/index.js +57 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/lib/types/multipart.js +680 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/lib/types/urlencoded.js +350 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/lib/utils.js +596 -0
- package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/package.json +22 -0
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/gna.js +97 -18
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/model/index.js +28 -24
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/validator/src/form-validator.js +38 -26
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/validator/src/main.js +296 -70
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/router.js +75 -40
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/server.isaac.js +46 -8
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/server.js +31 -5
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/controllers/setup.js +2 -2
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/conf/templates.json +4 -2
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/context.js +16 -11
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/path.js +25 -9
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/add.js +2 -1
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/start.js +21 -8
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/build.js +1 -1
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/init.js +18 -0
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/link-node-modules.js +2 -3
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/link.js +1 -0
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/tail.js +28 -11
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/version.js +15 -1
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/helper.js +6 -2
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/add.js +3 -2
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/build.js +4 -4
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/protocol/list.js +71 -50
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/collection/src/main.js +19 -13
- package/framework/v0.1.6-alpha.81/lib/domain/exemples/backend.js +12 -0
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/domain/src/main.js +3 -1
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/merge/package.json +1 -1
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/model.js +1 -1
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/routing/src/main.js +58 -11
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/session-store.js +2 -2
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/swig-filters/src/main.js +64 -9
- package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/validator.js +2 -2
- package/framework/v0.1.6-alpha.81/package.json +12 -0
- package/package.json +2 -2
- package/utils/helper.js +24 -0
- package/framework/v0.1.6-alpha.8/VERSION +0 -1
- package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/css/gina.min.css.map +0 -1
- package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -766
- package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.map +0 -8
- package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -7
- package/framework/v0.1.6-alpha.8/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.map +0 -8
- package/framework/v0.1.6-alpha.8/lib/domain/exemples/backend.js +0 -0
- package/framework/v0.1.6-alpha.8/package.json +0 -14
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/AUTHORS +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/LICENSE +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/html/static.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/asset/plugin/uuid.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/controller/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/.travis.yml +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/LICENSE +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/deps/encoding/encoding-indexes.js +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/deps/encoding/encoding.js +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/lib/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/lib/types/multipart.js +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/lib/utils.js +0 -0
- /package/framework/{v0.1.6-alpha.8/core/deps/busboy → v0.1.6-alpha.81/core/deps/busboy-0.2.14}/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/dev/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/currency.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/src/make.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/src/resources/currency.csv +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/src/resources/region.csv +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/locales/src/resources/region.mapping.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/mime.types +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/model/entity.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/model/template/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/file/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/file/build.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/file/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/intl/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/intl/build.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/intl/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/intl/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/server.express.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/status.codes +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/_gitignore +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/conf/env.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/conf/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/console.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/data/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/data/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/json/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/json/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/prototypes.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/task.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/helpers/text.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/archiver/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/archiver/build.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/archiver/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/collection/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/collection/build.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/collection/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/config.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cron/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cron/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/domain/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/domain/dist/public_suffix_list.dat +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/domain/exemples/frontend.html +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/domain/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/generator/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/example/inheriting_eventemitter.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/example/protected_inheritance.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/example/simple_inheritance.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/example/super_attribute_overridden_by_child_on_init.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/math/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/merge/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/merge/example/merge.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/merge/example/merge_2_literal objects.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/merge/example/merge_and_preserve_first.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/proc.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/routing/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/routing/build.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/routing/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/shell.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/url/README.md +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/url/index.js +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/url/mocks.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/lib/url/routing.json +0 -0
- /package/framework/{v0.1.6-alpha.8 → v0.1.6-alpha.81}/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.
|
package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-big.js
ADDED
|
@@ -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
|
+
}
|
package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-multipart-fields-100mb-small.js
ADDED
|
@@ -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
|
+
}
|
package/framework/v0.1.6-alpha.81/core/deps/busboy-1.6.0/bench/bench-multipart-files-100mb-big.js
ADDED
|
@@ -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
|
+
}
|