UNPKG

2.06 kBJavaScriptView Raw
1"use strict";
2/*
3 * @adonisjs/bodyparser
4 *
5 * (c) Harminder Virk <virk@adonisjs.com>
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
9 */
10Object.defineProperty(exports, "__esModule", { value: true });
11/// <reference path="../../adonis-typings/bodyparser.ts" />
12const utils_1 = require("@poppinss/utils");
13const File_1 = require("../Multipart/File");
14/**
15 * Updates the validation options on the file instance
16 */
17function setFileOptions(file, options) {
18 if (file.sizeLimit === undefined && options && options.size) {
19 file.sizeLimit = options.size;
20 }
21 if (file.allowedExtensions === undefined && options && options.extnames) {
22 file.allowedExtensions = options.extnames;
23 }
24}
25/**
26 * A boolean to know if file is an instance of multipart
27 * file class
28 */
29function isInstanceOfFile(file) {
30 return file && file instanceof File_1.File;
31}
32/**
33 * Extend the Request class by adding `file` and `files` macro to read processed
34 * files
35 */
36function extendRequest(Request) {
37 /**
38 * Fetch a single file
39 */
40 Request.macro('file', function getFile(key, options) {
41 let file = utils_1.lodash.get(this.allFiles(), key);
42 file = Array.isArray(file) ? file[0] : file;
43 if (!isInstanceOfFile(file)) {
44 return null;
45 }
46 setFileOptions(file, options);
47 file.validate();
48 return file;
49 });
50 /**
51 * Fetch an array of files
52 */
53 Request.macro('files', function getFiles(key, options) {
54 let files = utils_1.lodash.get(this.allFiles(), key);
55 files = Array.isArray(files) ? files : files ? [files] : [];
56 return files.filter(isInstanceOfFile).map((file) => {
57 setFileOptions(file, options);
58 file.validate();
59 return file;
60 });
61 });
62 /**
63 * Fetch all files
64 */
65 Request.macro('allFiles', function allFiles() {
66 return this['__raw_files'] || {};
67 });
68}
69exports.default = extendRequest;