diff --git a/.adonisrc.json b/.adonisrc.json index 262e656..b672ecd 100644 --- a/.adonisrc.json +++ b/.adonisrc.json @@ -23,7 +23,11 @@ "Database": "database", "Contracts": "contracts" }, - "preloads": ["./routes/index", "./start/kernel", "./start/event"], + "preloads": [ + "./routes/index", + "./start/kernel", + "./start/event" + ], "providers": [ "./providers/AppProvider", "./providers/CloudinaryProvider", @@ -32,9 +36,12 @@ "@adonisjs/auth", "@adonisjs/redis", "@adonisjs/mail", - "@adonisjs/view" + "@adonisjs/view", + "@adonisjs/attachment-lite" + ], + "aceProviders": [ + "@adonisjs/repl" ], - "aceProviders": ["@adonisjs/repl"], "metaFiles": [ { "pattern": "resources/views/**/*.edge", diff --git a/.gitignore b/.gitignore index af14e82..4c42c21 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ coverage .DS_STORE .env tmp +uploads diff --git a/app/Controllers/Http/Api/AssetsController.ts b/app/Controllers/Http/Api/AssetsController.ts deleted file mode 100644 index 6d2efcb..0000000 --- a/app/Controllers/Http/Api/AssetsController.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; -import { Exception, inject, Ioc } from '@adonisjs/core/build/standalone'; - -/** - * Services - */ -import AssetsService from 'App/Services/AssetsService'; - -import BaseController from '../BaseController'; - -@inject() -export default class AssetsController extends BaseController { - private assetsService: AssetsService; - - constructor(assetsService: AssetsService) { - super(); - this.assetsService = assetsService; - } - - /** - * Send background image of course - * GET /assets/images/courses/:fileName - */ - public async serveCourseImage(ctx: HttpContextContract) { - const result = await this.assetsService.getCourseImagePath(ctx.params.fileName); - - if (typeof result !== 'string') { - if (!result.success && result.error) { - throw new Exception(result.message, result.status, result.error.code); - } - - return this.sendResponse(ctx, result.data, result.message, result.status); - } - - return this.sendFile(ctx, result); - } -} - -new Ioc().make(AssetsController); diff --git a/app/Models/Course.ts b/app/Models/Course.ts index a4d961a..adf5744 100644 --- a/app/Models/Course.ts +++ b/app/Models/Course.ts @@ -13,18 +13,18 @@ import { ManyToMany, manyToMany, } from '@ioc:Adonis/Lucid/Orm'; +import { attachment, AttachmentContract } from '@ioc:Adonis/Addons/AttachmentLite'; import Category from 'App/Models/Category'; import Lesson from 'App/Models/Lesson'; import User from 'App/Models/User'; import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum'; -// import Image from './Image'; export default class Course extends BaseModel { @column({ isPrimary: true }) public id: string; - @column() - public bg_image_path: string; + @attachment({ folder: 'images/courses', preComputeUrl: true }) + public image: AttachmentContract | null; @column() public title: string; @@ -46,11 +46,6 @@ export default class Course extends BaseModel { }) public category: BelongsTo; - // @belongsTo(() => Image, { - // foreignKey: 'bg_image_id', - // }) - // public image: BelongsTo; - @belongsTo(() => User, { foreignKey: 'teacher_id', }) diff --git a/app/Repositories/CourseRepository.ts b/app/Repositories/CourseRepository.ts index 0563820..1057b33 100644 --- a/app/Repositories/CourseRepository.ts +++ b/app/Repositories/CourseRepository.ts @@ -1,8 +1,10 @@ /* eslint-disable @typescript-eslint/naming-convention */ +import Database from '@ioc:Adonis/Lucid/Database'; +import { Attachment } from '@ioc:Adonis/Addons/AttachmentLite'; + /** * Datatypes */ -import Database from '@ioc:Adonis/Lucid/Database'; import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum'; /** @@ -183,14 +185,19 @@ export default class CourseRepository { /** * Create new course */ - const course = await this.Course.create({ - bg_image_path: data.image?.filePath, - title: data.title, - description: data.description, - status: data.status, - teacher_id: data.teacher_id, - category_id: data.category_id, - }); + const course = new this.Course(); + + course.title = data.title; + course.description = data.description; + course.status = data.status; + course.teacher_id = data.teacher_id; + course.category_id = data.category_id; + + if (data.image) { + course.image = Attachment.fromFile(data.image); + } + + await course.save(); return course; } diff --git a/app/Services/AssetsService.ts b/app/Services/AssetsService.ts deleted file mode 100644 index c5850f3..0000000 --- a/app/Services/AssetsService.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { inject, Ioc } from '@adonisjs/core/build/standalone'; -import Application from '@ioc:Adonis/Core/Application'; - -/** - * Datatypes - */ -import IResponse from 'App/Datatypes/Interfaces/IResponse'; -import HttpStatusEnum from 'App/Datatypes/Enums/HttpStatusEnum'; - -/** - * Reposirories - */ -import ImageRepository from 'App/Repositories/ImageRepository'; - -@inject() -export default class AssetsService { - private imageRepository: ImageRepository; - - constructor(imageRepository: ImageRepository) { - this.imageRepository = imageRepository; - } - - /** - * - * @param name Image name - * @returns Pathname - */ - public async getCourseImagePath(name: string): Promise { - const image = await this.imageRepository.getByFileName(name); - - if (!image) { - return { - success: false, - status: HttpStatusEnum.NOT_FOUND, - message: 'Image not found.', - data: {}, - error: { - code: 'E_NOT_FOUND', - }, - }; - } - - return Application.tmpPath(`uploads/images/courses/${image.name}`); - } -} - -new Ioc().make(AssetsService); diff --git a/config/drive.ts b/config/drive.ts index 4adf503..e957be5 100644 --- a/config/drive.ts +++ b/config/drive.ts @@ -42,7 +42,7 @@ const driveConfig: DriveConfig = { */ local: { driver: 'local', - visibility: 'public', + visibility: 'private', /* |-------------------------------------------------------------------------- @@ -53,7 +53,7 @@ const driveConfig: DriveConfig = { | files. | */ - root: Application.tmpPath('uploads'), + root: Application.makePath('uploads'), /* |-------------------------------------------------------------------------- diff --git a/database/factories/index.ts b/database/factories/index.ts index 759e150..e3577b8 100644 --- a/database/factories/index.ts +++ b/database/factories/index.ts @@ -16,33 +16,27 @@ import LessonContent from 'App/Models/LessonContent'; import Role from 'App/Models/Role'; import User from 'App/Models/User'; +const makeFakeUser = (faker: Faker.FakerStatic) => { + return { + first_name: faker.name.firstName(), + last_name: faker.name.lastName(), + login: `${faker.lorem.word(12)}${faker.datatype.number(100)}`, + email: faker.internet.exampleEmail(), + password: '123456', + }; +}; + export const ContactFactory = Factory.define(Contact, ({ faker }) => { return { phone_number: faker.phone.phoneNumber(), }; }).build(); -export const UserFactory = Factory.define(User, ({ faker }) => { - return { - first_name: faker.name.firstName(), - last_name: faker.name.lastName(), - login: `${faker.lorem.word(12)}${faker.datatype.number(100)}`, - email: faker.internet.exampleEmail(), - password: '123456', - }; -}) +export const UserFactory = Factory.define(User, ({ faker }) => makeFakeUser(faker)) .relation('contacts', () => ContactFactory) .build(); -export const TeacherFactory = Factory.define(User, ({ faker }) => { - return { - first_name: faker.name.firstName(), - last_name: faker.name.lastName(), - login: `${faker.lorem.word(12)}${faker.datatype.number(100)}`, - email: faker.internet.exampleEmail(), - password: '123456', - }; -}) +export const TeacherFactory = Factory.define(User, ({ faker }) => makeFakeUser(faker)) .relation('contacts', () => ContactFactory) .after('create', async (_, user: User) => { /** diff --git a/database/migrations/1627300211260_courses.ts b/database/migrations/1627300211260_courses.ts index 7b69724..0ba9629 100644 --- a/database/migrations/1627300211260_courses.ts +++ b/database/migrations/1627300211260_courses.ts @@ -11,11 +11,11 @@ export default class Courses extends BaseSchema { public async up() { this.schema.createTable(this.tableName, table => { table.string('id', 21).primary(); - table.string('bg_image_path'); + table.json('image'); table.string('title').notNullable(); table.string('description').notNullable(); - table.string('teacher_id', 21).unsigned().references('users.id').onDelete('CASCADE'); - table.string('category_id', 21).unsigned().references('categories.id').onDelete('CASCADE'); + table.string('teacher_id', 21).unsigned().references('users.id').notNullable().onDelete('CASCADE'); + table.string('category_id', 21).unsigned().references('categories.id').notNullable().onDelete('CASCADE'); table .enu('status', Object.values(CourseStatusEnum), { useNative: true, diff --git a/package-lock.json b/package-lock.json index b7e233c..cf855f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,13 +5,13 @@ "requires": true, "dependencies": { "@adonisjs/ace": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@adonisjs/ace/-/ace-11.0.4.tgz", - "integrity": "sha512-/yoSbOF8gJvMbnIkQmfnvRWipaIfkdpg8lY5ueXSuKyBw0juf0q3fMHLYqi0jvkoknsq87aEWoxadvDsZU4i3w==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@adonisjs/ace/-/ace-11.0.5.tgz", + "integrity": "sha512-pN4IaBdKVvOYsRc3wtAa77TDn9C3yvQi3dIo1xSkFCWYlAvcO6tWbmQCFp2PNKM18d8n3FCTG4IH/CiGCB5Wug==", "requires": { "@poppinss/cliui": "^2.2.5", "@poppinss/prompts": "^1.2.3", - "@poppinss/utils": "^3.1.5", + "@poppinss/utils": "^3.3.1", "fs-extra": "^10.0.0", "getopts": "^2.3.0", "leven": "^3.1.0", @@ -21,9 +21,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -31,6 +31,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -39,14 +40,14 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -54,6 +55,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-5.1.6.tgz", "integrity": "sha512-xg6fkCCXijMmkoZ40ih8T1QF50Dj0J7EQ1I54TWfFCFEHsIYhXrCZxeWZEpMRHsTAWaPpP0GTnMrOac/+ERWsQ==", + "dev": true, "requires": { "@adonisjs/config": "^3.0.5", "@adonisjs/env": "^3.0.5", @@ -68,6 +70,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "dev": true, "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -90,7 +93,8 @@ "slugify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==", + "dev": true } } }, @@ -150,25 +154,18 @@ } } }, - "@adonisjs/auth": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/@adonisjs/auth/-/auth-8.0.9.tgz", - "integrity": "sha512-5lBB9N5nNUzr4rAu1yfHPK6D81ChTLH+QpRuji6Jop5QytAMMs3ZWlDPcvVur2lD7hEpm/SFQSFur9461gIXxQ==", + "@adonisjs/attachment-lite": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@adonisjs/attachment-lite/-/attachment-lite-1.0.1.tgz", + "integrity": "sha512-njbWm/19scSMfyRpDbhomKLTU29FBW18Hnqwt9fKoDyEFYh5+9oeJlnQhbFcVeI6XICDqTZOMip5X1TUpz06rw==", "requires": { - "@poppinss/hooks": "^3.0.5", - "@poppinss/utils": "^3.2.0", - "luxon": "^2.0.2" + "@poppinss/utils": "^3.2.1" }, "dependencies": { - "@poppinss/hooks": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@poppinss/hooks/-/hooks-3.0.5.tgz", - "integrity": "sha512-kazQstmIPq4n7/qjk5ms9SEiXtLEJ+EMZXxyXTupTVq7URFIUeULgXFv/F3vheLPCSzfByu/L2iO7M457RjszQ==" - }, "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -176,6 +173,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -184,7 +182,48 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", + "truncatise": "0.0.8" + } + }, + "slugify": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" + } + } + }, + "@adonisjs/auth": { + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/@adonisjs/auth/-/auth-8.0.10.tgz", + "integrity": "sha512-jE2C0btUresr1pRV1P8NAehSJlebJ+TlrQp1p1ws52AQ5h4ayjzTniZBtq6pSgm5uv6TAEQ7Mw7ZfTOwaA8MBQ==", + "requires": { + "@poppinss/hooks": "^3.0.5", + "@poppinss/utils": "^3.2.0", + "luxon": "^2.0.2" + }, + "dependencies": { + "@poppinss/utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", + "requires": { + "@types/bytes": "^3.1.1", + "@types/he": "^1.1.2", + "buffer-alloc": "^1.2.0", + "bytes": "^3.1.0", + "change-case": "^4.1.2", + "cuid": "^2.1.8", + "flattie": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "he": "^1.2.0", + "kind-of": "^6.0.3", + "lodash": "^4.17.21", + "ms": "^2.1.3", + "pluralize": "^8.0.0", + "require-all": "^3.0.0", + "resolve-from": "^5.0.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, @@ -194,9 +233,9 @@ "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg==" }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -216,9 +255,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -226,6 +265,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -234,14 +274,14 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -284,32 +324,70 @@ } }, "@adonisjs/core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-5.3.2.tgz", - "integrity": "sha512-WytmV4p0Mv/D7rJFdVHcyWZMrg80TgzdzmNSuPz8BxbGa9Kkm15LvNY5FMP6gHU9JUrmTujdAINemMrn9ClPsQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@adonisjs/core/-/core-5.4.0.tgz", + "integrity": "sha512-HBeFOJu6wWXkNmHInIT6OQMtCTblT9MZK8l4tusNowKz41sE66vWIr9vE2CJBHEUfjo3MttBffVORP+RxMm1kQ==", "requires": { "@adonisjs/ace": "^11.0.4", - "@adonisjs/application": "^5.1.6", + "@adonisjs/application": "^5.1.7", "@adonisjs/bodyparser": "^8.0.1", - "@adonisjs/drive": "^2.0.6", + "@adonisjs/drive": "^2.0.7", "@adonisjs/encryption": "^4.0.5", "@adonisjs/events": "^7.1.2", "@adonisjs/hash": "^7.0.8", - "@adonisjs/http-server": "^5.5.6", - "@adonisjs/validator": "^12.0.1", + "@adonisjs/http-server": "^5.5.7", + "@adonisjs/validator": "^12.1.1", "@poppinss/cliui": "^2.2.5", "@poppinss/manager": "^4.0.4", - "@poppinss/utils": "^3.2.0", + "@poppinss/utils": "^3.3.0", "fs-extra": "^10.0.0", - "memfs": "^3.2.2", + "memfs": "^3.3.0", "serve-static": "^1.14.1", "stringify-attributes": "^2.0.0" }, "dependencies": { + "@adonisjs/application": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@adonisjs/application/-/application-5.1.7.tgz", + "integrity": "sha512-cxMBloIq+AXly88ruvquHF/VwXa11DyOJLvDaXTYpktRlF/oSbDhcXl7nFs2ajRuyxm7vOQ8D68kA6kO1H+h6g==", + "requires": { + "@adonisjs/config": "^3.0.5", + "@adonisjs/env": "^3.0.5", + "@adonisjs/fold": "^8.1.5", + "@adonisjs/logger": "^4.1.1", + "@adonisjs/profiler": "^6.0.6", + "@poppinss/utils": "^3.2.0", + "semver": "^7.3.5" + } + }, + "@adonisjs/drive": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@adonisjs/drive/-/drive-2.0.7.tgz", + "integrity": "sha512-iQwQYyF/thj8ihJHUn/LBAAUYlOLAobAAnrzcQsmE8uFWRr0PRsqzpFaPF/S8UEnEyWQo4xGKXKJ8Zqzt4IOdw==", + "requires": { + "@poppinss/manager": "^4.0.4", + "@poppinss/utils": "^3.2.0", + "@types/fs-extra": "^9.0.12", + "etag": "^1.8.1", + "fs-extra": "^10.0.0", + "memfs": "^3.2.4" + } + }, + "@adonisjs/logger": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@adonisjs/logger/-/logger-4.1.1.tgz", + "integrity": "sha512-+daxUt7BxPU+sgWdJlqM//JHzqa7neTbo37W5tq4X8n94X0NDMkyE+ZYtgI2Rl1XrHepv7OWV5YorXPxuXMUZg==", + "requires": { + "@poppinss/utils": "^3.2.0", + "@types/pino": "^6.3.11", + "abstract-logging": "^2.0.1", + "pino": "^6.13.2" + } + }, "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -317,6 +395,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -325,34 +404,65 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, + "memfs": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", + "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", + "requires": { + "fs-monkey": "1.0.3" + } + }, + "pino": { + "version": "6.13.3", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.3.tgz", + "integrity": "sha512-tJy6qVgkh9MwNgqX1/oYi3ehfl2Y9H0uHyEEMsBe74KinESIjdMrMQDWpcZPpPicg3VV35d/GLQZmo4QgU2Xkg==", + "requires": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.8", + "fastify-warning": "^0.2.0", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + } + }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" + }, + "sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } } } }, "@adonisjs/drive": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@adonisjs/drive/-/drive-2.0.6.tgz", - "integrity": "sha512-PF7glKW7D0VcmJSDgmQVnMXhQQNN28LgmKcPJHnybsRtqYIqd6/tWL2yDcC/ZsDftSJnzZvSVZ5ZzJT7AiprBQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@adonisjs/drive/-/drive-2.0.7.tgz", + "integrity": "sha512-iQwQYyF/thj8ihJHUn/LBAAUYlOLAobAAnrzcQsmE8uFWRr0PRsqzpFaPF/S8UEnEyWQo4xGKXKJ8Zqzt4IOdw==", "requires": { "@poppinss/manager": "^4.0.4", "@poppinss/utils": "^3.2.0", "@types/fs-extra": "^9.0.12", "etag": "^1.8.1", "fs-extra": "^10.0.0", - "memfs": "^3.2.2" + "memfs": "^3.2.4" }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -360,6 +470,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -368,14 +479,14 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -388,9 +499,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -398,6 +509,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -406,14 +518,14 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -514,9 +626,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -524,6 +636,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -532,21 +645,21 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, "@adonisjs/http-server": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-5.5.6.tgz", - "integrity": "sha512-k00oLuaidk3ADe5xjqv5ajMxzfHM0tf6PxZbRCr4Vyx1IDJidsD5TNhd9asbJI2LsSl7B/FVvQDvV8h0R6oApA==", + "version": "5.5.7", + "resolved": "https://registry.npmjs.org/@adonisjs/http-server/-/http-server-5.5.7.tgz", + "integrity": "sha512-p3V00t/X8U7bSjgjJ73ReC5VNifXVWRuBUA6HsdAf3lOzKtuqFznjjA9y8qhO3kITD8x11bPzi6MZptkcP6ybQ==", "requires": { "@poppinss/matchit": "^3.1.2", "@poppinss/utils": "^3.1.5", @@ -573,9 +686,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -583,6 +696,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -591,19 +705,14 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, - "macroable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/macroable/-/macroable-5.1.4.tgz", - "integrity": "sha512-6yOJQT7QhYlJqhNWn/B2h+1ylsCnL8dMBmBpdnVNK+02PfQm13Ix4Szx4HiS3rp4a28EKckCGW27gtTZoYXYYQ==" - }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -617,6 +726,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/@adonisjs/logger/-/logger-4.1.0.tgz", "integrity": "sha512-Baxx9FiI/rRQ2U58TpTYf5psG345YzTVs0Fh2lHP1f33wekjYLHFbHSjo/1vJDIBEAR0/4udO2BbBNG9jKa10Q==", + "dev": true, "requires": { "@poppinss/utils": "^3.1.5", "@types/pino": "^6.3.9", @@ -628,6 +738,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "dev": true, "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -650,17 +761,18 @@ "slugify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==", + "dev": true } } }, "@adonisjs/lucid": { - "version": "16.0.2", - "resolved": "https://registry.npmjs.org/@adonisjs/lucid/-/lucid-16.0.2.tgz", - "integrity": "sha512-t3qh/ehlTPRt0N4qzCZMUsGEqNpzigo+dDzbIC5HwpoBBSE/GCQkcUs5rSFmIllbo49Bxa43SLt1bB6M3RNlRQ==", + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@adonisjs/lucid/-/lucid-16.2.1.tgz", + "integrity": "sha512-1UAPyB3j/JkGHMT5G3YkkoCdVSaTHtm1Mn3HwSzvkAQ7d7Ffx88SYZFwpTdtT8oDfxxHunzZuTaWG0CmoUixcA==", "requires": { "@poppinss/hooks": "^3.0.5", - "@poppinss/utils": "^3.1.5", + "@poppinss/utils": "^3.2.1", "@types/faker": "^5.5.7", "faker": "^5.5.3", "fast-deep-equal": "^3.1.3", @@ -675,9 +787,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -685,6 +797,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -693,7 +806,7 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, @@ -703,9 +816,9 @@ "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg==" }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -726,9 +839,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -736,6 +849,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -744,14 +858,14 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -805,9 +919,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -815,6 +929,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -823,21 +938,21 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, "@adonisjs/repl": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-3.1.6.tgz", - "integrity": "sha512-+IvyAK4KvPotYX194T6lspcTqK+6sCR8+tO1/xW5SDdU9flrMDkwFwbUNuOJv1DxgUR2YSC6GGSZNVJ3aVohmg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@adonisjs/repl/-/repl-3.1.7.tgz", + "integrity": "sha512-TGnB+JakDBZgxECgUm/t/bOLK2WDgJuBeO1yy/QGbeSzjFro9sI2vYitgZ4fedJIIbJxgQavgCWMw9r+e2woLQ==", "requires": { "@poppinss/colors": "^2.1.5", "node-repl-await": "^0.1.2", @@ -944,12 +1059,12 @@ } }, "@adonisjs/validator": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@adonisjs/validator/-/validator-12.0.1.tgz", - "integrity": "sha512-u7fceSIvSx4bMF9k+v5kQ/dHtbfIXwz6GTOs6GN+/QTXIuM2vIpQHKlAnS3Kws1/mLMgMVITzHdi+LRyncH3Cg==", + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@adonisjs/validator/-/validator-12.1.1.tgz", + "integrity": "sha512-vqp3NAuJd1L1DX0AVL7T5jSmpzmjjbKAPR9hj+2uQT0oclAWEP3zIGvpmab/QFcF8y7njzjiYY1Q2CsP3dptUg==", "requires": { - "@poppinss/utils": "^3.1.5", - "@types/luxon": "^2.0.2", + "@poppinss/utils": "^3.3.0", + "@types/luxon": "^2.0.5", "@types/validator": "^13.6.3", "luxon": "^2.0.1", "normalize-url": "^6.1.0", @@ -958,9 +1073,9 @@ }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -968,6 +1083,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -976,7 +1092,7 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, @@ -986,20 +1102,20 @@ "integrity": "sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg==" }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, "@adonisjs/view": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@adonisjs/view/-/view-6.1.0.tgz", - "integrity": "sha512-6odN0FLSM4+0zVOQ14BTXBymDsCRrI95yGbAOUex6hMeSvBBff6f+VlH+WsiPS7xyKewI7ihZx6yRsVERBb0bw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@adonisjs/view/-/view-6.1.1.tgz", + "integrity": "sha512-wSbeV7UvDA6lLJtc2nKQ3rTHRoAlj0KmRwBzIT81Lmqo6WdFIAbNqiNSwbI0SHIo+NaB3oSXmV5Brh7rGpwmPQ==", "requires": { - "edge-error": "^2.0.5", + "edge-error": "^2.0.6", "edge-supercharged": "^3.1.1", - "edge.js": "^5.3.1" + "edge.js": "^5.3.2" } }, "@arr/every": { @@ -1345,9 +1461,9 @@ } }, "@sindresorhus/is": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", - "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" }, "@szmarczak/http-timer": { "version": "4.0.6", @@ -1379,9 +1495,9 @@ } }, "@types/faker": { - "version": "5.5.8", - "resolved": "https://registry.npmjs.org/@types/faker/-/faker-5.5.8.tgz", - "integrity": "sha512-bsl0rYsaZVHlZkynL5O04q6YXDmVjcid6MbOHWqvtE2WWs/EKhp0qchDDhVWlWyQXUffX1G83X9LnMxRl8S/Mw==" + "version": "5.5.9", + "resolved": "https://registry.npmjs.org/@types/faker/-/faker-5.5.9.tgz", + "integrity": "sha512-uCx6mP3UY5SIO14XlspxsGjgaemrxpssJI0Ol+GfhxtcKpv9pgRZYsS4eeKeHVLje6Qtc8lGszuBI461+gVZBA==" }, "@types/fs-extra": { "version": "9.0.12", @@ -1412,9 +1528,9 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "@types/ioredis": { - "version": "4.27.1", - "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.27.1.tgz", - "integrity": "sha512-+JichYPCtVapxi5Z+7V/8Uhn+4Piz+rkb03JQTQ0kW0pkV71+bmzSTkpwmIqa7FfWIszp0VbRyN8gfgWDNQMdA==", + "version": "4.27.8", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.27.8.tgz", + "integrity": "sha512-THsyghYuFI6h/UzwEaeSeagRxiDG1P/NIiL5uTjN7bcbQHwDP6nMWJfEmY0iuu3pOzl1j0FgRpAYz7WWX2eW0Q==", "requires": { "@types/node": "*" } @@ -1432,17 +1548,17 @@ "dev": true }, "@types/keyv": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.2.tgz", - "integrity": "sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "requires": { "@types/node": "*" } }, "@types/luxon": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-2.0.2.tgz", - "integrity": "sha512-CUrDlIVYv7TNkdQV8YfT2WGAHyMAwFIT1PXoUcQhX2EFMVL20lxEQHWc73gdJfRtMsI6Vc22HvR7eUN0jkx6+w==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-2.0.5.tgz", + "integrity": "sha512-GKrG5v16BOs9XGpouu33hOkAFaiSDi3ZaDXG9F2yAoyzHRBtksZnI60VWY5aM/yAENCccBejrxw8jDY+9OVlxw==" }, "@types/minimatch": { "version": "3.0.5", @@ -1497,9 +1613,9 @@ "dev": true }, "@types/validator": { - "version": "13.6.3", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.6.3.tgz", - "integrity": "sha512-fWG42pMJOL4jKsDDZZREnXLjc3UE0R8LOJfARWYg6U966rxDT7TYejYzLnUF5cvSObGg34nd0+H2wHHU5Omdfw==" + "version": "13.6.5", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.6.5.tgz", + "integrity": "sha512-ilpDKpjjq/w/IyyTuQ38mABdaEzTzTugPyU7DlMCMKd8MMYngnPKhA2TgdO1MfEDED9KVV7uSOL1fDkgwJp/wg==" }, "@typescript-eslint/eslint-plugin": { "version": "4.30.0", @@ -1715,9 +1831,9 @@ } }, "acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" }, "adonis-preset-ts": { "version": "2.1.0", @@ -2881,24 +2997,24 @@ } }, "edge.js": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/edge.js/-/edge.js-5.3.1.tgz", - "integrity": "sha512-TWiPo7Unaww1fYll/zMANVma08q2WoG8j7g9iK3fed5AevD0XuBl8N2L9+vCE7TKJmTm/zNP5z8bKbfGWOTRbw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/edge.js/-/edge.js-5.3.2.tgz", + "integrity": "sha512-hpMdNZDqZPTvZYGFGQ7VPPAQR6lW3S8+R5em20X/XgtOlxwyKrfEEG7DZcFdgX+6hU7PTqn9/OFFSVdD7a0Qog==", "requires": { "@poppinss/inspect": "^1.0.1", - "@poppinss/utils": "^3.1.4", - "edge-error": "^2.0.5", - "edge-lexer": "^4.0.7", - "edge-parser": "^8.0.10", + "@poppinss/utils": "^3.2.0", + "edge-error": "^2.0.6", + "edge-lexer": "^4.0.8", + "edge-parser": "^8.0.11", "js-stringify": "^1.0.2", "macroable": "^5.1.4", "stringify-attributes": "^2.0.0" }, "dependencies": { "@poppinss/utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.2.0.tgz", - "integrity": "sha512-gnqlrxE4zMvqW+LpviyCWCg4+RShCYCFyBdVTyg9ZZEEgPBV9bEY+YB5r/2klFrKx30k9nfClHVI2n8ZKmXgsw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@poppinss/utils/-/utils-3.3.1.tgz", + "integrity": "sha512-k4MFt+4JhOWJZ9D2xpEcG/mpZyXVXYT+dSOg83vHK1xhXl+7r0IYBXRKWX2+To7/90KJaWlwpcdCAalXE8Debg==", "requires": { "@types/bytes": "^3.1.1", "@types/he": "^1.1.2", @@ -2906,6 +3022,7 @@ "bytes": "^3.1.0", "change-case": "^4.1.2", "cuid": "^2.1.8", + "flattie": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "he": "^1.2.0", "kind-of": "^6.0.3", @@ -2914,19 +3031,14 @@ "pluralize": "^8.0.0", "require-all": "^3.0.0", "resolve-from": "^5.0.0", - "slugify": "^1.6.0", + "slugify": "^1.6.1", "truncatise": "0.0.8" } }, - "macroable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/macroable/-/macroable-5.1.4.tgz", - "integrity": "sha512-6yOJQT7QhYlJqhNWn/B2h+1ylsCnL8dMBmBpdnVNK+02PfQm13Ix4Szx4HiS3rp4a28EKckCGW27gtTZoYXYYQ==" - }, "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.1.tgz", + "integrity": "sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA==" } } }, @@ -3835,6 +3947,11 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, + "flattie": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.0.tgz", + "integrity": "sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw==" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4280,9 +4397,9 @@ "dev": true }, "ical-generator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-3.0.0.tgz", - "integrity": "sha512-PlDOOipgTlMzbfDDy+NJixAf5bzNb46wf0JXPkhnSjNQJc50y/XTOhOnQW/cp6tD+4ITHIMhkCkQ4CrUlDKMFQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ical-generator/-/ical-generator-3.0.1.tgz", + "integrity": "sha512-IdvCi0Pi53wNIJW0ww1XT1AsqzMkYYVZF1njA0zA7I1aQ1mLhf4VHgOchQBCOVxJauo1g8x0+B4w7Jj5PcjqFg==", "requires": { "uuid-random": "^1.3.2" } @@ -4372,9 +4489,9 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, "ioredis": { - "version": "4.27.9", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.27.9.tgz", - "integrity": "sha512-hAwrx9F+OQ0uIvaJefuS3UTqW+ByOLyLIV+j0EH8ClNVxvFyH9Vmb08hCL4yje6mDYT5zMquShhypkd50RRzkg==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.0.tgz", + "integrity": "sha512-I+zkeeWp3XFgPT2CtJKxvaF5FjGBGt4yGYljRjQecdQKteThuAsKqffeF1lgHVlYnuNeozRbPOCDNZ7tDWPeig==", "requires": { "cluster-key-slot": "^1.1.0", "debug": "^4.3.1", @@ -5006,9 +5123,9 @@ } }, "memfs": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.4.tgz", - "integrity": "sha512-2mDCPhuduRPOxlfgsXF9V+uqC6Jgz8zt/bNe4d4W7d5f6pCzHrWkxLNr17jKGXd4+j2kQNsAG2HARPnt74sqVQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", + "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", "requires": { "fs-monkey": "1.0.3" } @@ -5416,9 +5533,9 @@ } }, "nodemailer": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.3.tgz", - "integrity": "sha512-faZFufgTMrphYoDjvyVpbpJcYzwyFnbAMmQtj1lVBYAUSm3SOy2fIdd9+Mr4UxPosBa0JRw9bJoIwQn+nswiew==" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.0.tgz", + "integrity": "sha512-AtiTVUFHLiiDnMQ43zi0YgkzHOEWUkhDgPlBXrsDzJiJvB29Alo4OKxHQ0ugF3gRqRQIneCLtZU3yiUo7pItZw==" }, "nopt": { "version": "5.0.0", @@ -5943,6 +6060,7 @@ "version": "6.13.1", "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.1.tgz", "integrity": "sha512-QQf67BU+cANnc/2U+wzUV20UjO5oBryWpnNyKshdLfT9BdeiXlh9wxLGmOjAuBWMYITdMs+BtJSQQNlGRNbWpA==", + "dev": true, "requires": { "fast-redact": "^3.0.0", "fast-safe-stringify": "^2.0.8", @@ -5957,6 +6075,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "dev": true, "requires": { "atomic-sleep": "^1.0.0", "flatstr": "^1.0.12" diff --git a/package.json b/package.json index 908f6b6..ff6c4c4 100644 --- a/package.json +++ b/package.json @@ -32,14 +32,15 @@ "youch-terminal": "^1.1.1" }, "dependencies": { - "@adonisjs/auth": "^8.0.9", - "@adonisjs/core": "^5.3.2", - "@adonisjs/drive": "^2.0.6", - "@adonisjs/lucid": "^16.0.2", + "@adonisjs/attachment-lite": "^1.0.1", + "@adonisjs/auth": "^8.0.10", + "@adonisjs/core": "^5.4.0", + "@adonisjs/drive": "^2.0.7", + "@adonisjs/lucid": "^16.2.1", "@adonisjs/mail": "^7.2.4", "@adonisjs/redis": "^7.0.9", - "@adonisjs/repl": "^3.1.6", - "@adonisjs/view": "^6.1.0", + "@adonisjs/repl": "^3.1.7", + "@adonisjs/view": "^6.1.1", "cloudinary": "^1.26.3", "luxon": "^1.28.0", "nanoid": "^3.1.25", diff --git a/routes/assets.ts b/routes/assets.ts deleted file mode 100644 index 674ee26..0000000 --- a/routes/assets.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Route from '@ioc:Adonis/Core/Route'; - -Route.group(() => { - /** - * Serve background image for course - */ - Route.get('/images/courses/:fileName', 'Api/AssetsController.serveCourseImage').as('serve.course.image'); -}) - .prefix('assets') - .as('assets'); diff --git a/routes/index.ts b/routes/index.ts index 7149843..d614d40 100644 --- a/routes/index.ts +++ b/routes/index.ts @@ -26,9 +26,4 @@ Route.group(() => { * Api routes */ require('./api'); - - /** - * Serve assets - */ - require('./assets'); }); diff --git a/tsconfig.json b/tsconfig.json index 5ae061e..ea9c925 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -33,7 +33,8 @@ "@adonisjs/auth", "@adonisjs/redis", "@adonisjs/mail", - "@adonisjs/view" + "@adonisjs/view", + "@adonisjs/attachment-lite" ] } }