├── .gitignore ├── .npmignore ├── CONTRIBUTING.MD ├── LICENSE.md ├── README.md ├── copymailman.js ├── jest.json ├── lib ├── constants.ts ├── index.ts ├── interfaces │ ├── MailCompiler.ts │ ├── index.ts │ ├── mjml.ts │ └── options.ts ├── mailman.ts ├── message.ts ├── module.ts ├── provider.map.ts └── service.ts ├── package-lock.json ├── package.json ├── tsconfig.json └── views ├── assets └── style.css ├── components ├── body.tsx ├── bodyBuilder.tsx ├── button.tsx ├── description.tsx ├── divider.tsx ├── footer.tsx ├── greeting.tsx ├── head.tsx ├── header.tsx ├── html.tsx ├── image.tsx ├── regards.tsx ├── table.tsx └── text.tsx └── mail ├── generic.tsx └── index.tsx /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | 4 | # IDE 5 | /.idea 6 | /.awcache 7 | /.vscode 8 | 9 | # misc 10 | npm-debug.log 11 | .DS_Store 12 | 13 | # tests 14 | /test 15 | /coverage 16 | /.nyc_output 17 | 18 | # dist 19 | dist -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # source 2 | lib 3 | tests 4 | index.ts 5 | package-lock.json 6 | tslint.json 7 | tsconfig.json 8 | .prettierrc 9 | 10 | # github 11 | .github 12 | CONTRIBUTING.MD 13 | 14 | # misc 15 | .commitlintrc.json 16 | .release-it.json 17 | .eslintignore 18 | .eslintrc.js -------------------------------------------------------------------------------- /CONTRIBUTING.MD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/squareboat/nest-mailman/c4dcbd453e773516d83e6f813cbcc1b57ccc6b6d/CONTRIBUTING.MD -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright © 2020 [SquareBoat](https://squareboat.com) 4 | 5 | > Permission is hereby granted, free of charge, to any person obtaining a copy 6 | > of this software and associated documentation files (the "Software"), to deal 7 | > in the Software without restriction, including without limitation the rights 8 | > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | > copies of the Software, and to permit persons to whom the Software is 10 | > furnished to do so, subject to the following conditions: 11 | > 12 | > The above copyright notice and this permission notice shall be included in 13 | > all copies or substantial portions of the Software. 14 | > 15 | > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | > THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nest Mailman 2 | 3 | 📮 The mailer package for your NestJS Applications. 4 | 5 | ### Features 6 | 7 | - ✅ Build mails programmtically 8 | - ✅ Supports MJML + React templating 9 | - ✅ Use JSX to easily create clean components 10 | - ✅ Comes with built-in template to quickly send mails without creating templates. 11 | - ✅ Uses nodemailer internally 12 | 13 | For complete documentation, head over to [our site](https://squareboat.com/open-source/nest-mailman/). 14 | 15 | --- 16 | 17 | ## About Us 18 | 19 | We are a bunch of dreamers, designers, and futurists. We are high on collaboration, low on ego, and take our happy hours seriously. We'd love to hear more about your product. Let's talk and turn your great ideas into something even greater! We have something in store for everyone. [☎️ 📧 Connect with us!](https://squareboat.com/contact) 20 | 21 | --- 22 | 23 | ## License 24 | 25 | The MIT License. Please see License File for more information. Copyright © 2020 SquareBoat. 26 | 27 | Made with ❤️ by [Squareboat](https://squareboat.com) 28 | -------------------------------------------------------------------------------- /copymailman.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs-extra"); 2 | var appRoot = require("app-root-path"); 3 | const picocolors = require("picocolors"); 4 | 5 | function handle() { 6 | const path = `${appRoot.path}/resources/views`; 7 | if (fs.existsSync(path)) { 8 | console.log(picocolors.blue`➡️ ${path} already exists. Returning...`); 9 | console.log( 10 | picocolors.blue`➡️ To copy file, copy from ${picocolors.white( 11 | process.cwd() + "/cli.js" 12 | )} to ${picocolors.white(path)}` 13 | ); 14 | return; 15 | } 16 | 17 | fs.copySync("./views", `${appRoot.path}/resources/views`, { 18 | overwrite: true | false, 19 | }); 20 | 21 | // (err) => { 22 | // if (err) throw err; 23 | // console.log( 24 | // picocolors.green`🚀 Copying cli.js file to ${appRoot.path}/cli`, 25 | // ); 26 | // console.log( 27 | // picocolors.yellow`❓ To know more about on how to change default module and path in cli, go to https://github.com/squareboat/nest-console`, 28 | // ); 29 | } 30 | 31 | handle(); 32 | -------------------------------------------------------------------------------- /jest.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": ["ts", "tsx", "js", "json"], 3 | "transform": { 4 | "^.+\\.tsx?$": "ts-jest" 5 | }, 6 | "testRegex": "/lib/.*\\.(test|spec).(ts|tsx|js)$", 7 | "collectCoverageFrom": [ 8 | "lib/**/*.{js,jsx,tsx,ts}", 9 | "!**/node_modules/**", 10 | "!**/vendor/**" 11 | ], 12 | "coverageReporters": ["json", "lcov","text-summary"] 13 | } -------------------------------------------------------------------------------- /lib/constants.ts: -------------------------------------------------------------------------------- 1 | export const MAILMAN_QUEUE = "MAILMAN_QUEUE"; 2 | export const SEND_MAIL = "SEND_MAIL"; 3 | 4 | // Mail Formats 5 | export const RAW_MAIL = "RAW"; 6 | export const VIEW_BASED_MAIL = "VIEW_BASED"; 7 | export const GENERIC_MAIL = "GENERIC"; 8 | 9 | export class MailmanConstant {} 10 | -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./module"; 2 | export * from "./service"; 3 | export * from "./mailman"; 4 | export * from "./interfaces"; 5 | export * from "./message"; 6 | -------------------------------------------------------------------------------- /lib/interfaces/MailCompiler.ts: -------------------------------------------------------------------------------- 1 | // All mail compilers(Handlebars, Markdown, etc.) will implement this interface. 2 | export interface MailCompiler { 3 | filePath: string; 4 | compileMail(options: Record | undefined ): string; 5 | } -------------------------------------------------------------------------------- /lib/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './options'; 2 | export * from './MailCompiler'; 3 | export * from './mjml'; 4 | -------------------------------------------------------------------------------- /lib/interfaces/mjml.ts: -------------------------------------------------------------------------------- 1 | export interface MJMLParsingOpts { 2 | fonts?: { [key: string]: string }; 3 | keepComments?: boolean; 4 | beautify?: boolean; 5 | minify?: boolean; 6 | validationLevel?: 'strict' | 'soft' | 'skip'; 7 | filePath?: string; 8 | minifyOptions?: MJMLMinifyOptions; 9 | } 10 | 11 | interface MJMLMinifyOptions { 12 | collapseWhitespace?: boolean; 13 | minifyCSS?: boolean; 14 | removeEmptyAttributes?: boolean; 15 | } 16 | -------------------------------------------------------------------------------- /lib/interfaces/options.ts: -------------------------------------------------------------------------------- 1 | import { ModuleMetadata, Type } from "@nestjs/common/interfaces"; 2 | import { Attachment } from "nodemailer/lib/mailer"; 3 | import { MailMessage } from "../message"; 4 | import { MJMLParsingOpts } from "./mjml"; 5 | 6 | export interface MailmanBaseTemplateOptions { 7 | appName?: string; 8 | appLogoSrc?: string; 9 | socialMedia?: { 10 | name: string; 11 | href: string; 12 | }[]; 13 | contactEmail?: string; 14 | } 15 | 16 | export interface MailmanMetaPayload { 17 | title?: string; 18 | preview?: string; 19 | } 20 | 21 | export interface MailmanPayload { 22 | _templateConfig?: MailmanBaseTemplateOptions; 23 | meta?: MailmanMetaPayload; 24 | genericFields?: Record[]; 25 | } 26 | 27 | export interface MailmanOptions { 28 | host: string; 29 | port: number; 30 | username: string; 31 | password: string; 32 | from: string; 33 | ignoreTLS?: boolean; 34 | replyTo?: string; 35 | path?: string; 36 | mjml?: MJMLParsingOpts; 37 | templateConfig: { 38 | baseComponent: (payload: Record) => JSX.Element; 39 | templateOptions?: MailmanBaseTemplateOptions; 40 | }; 41 | } 42 | 43 | export type CompilerOptions = { 44 | configPath: string; 45 | mjml?: MJMLParsingOpts; 46 | }; 47 | 48 | export interface MailmanOptionsFactory { 49 | createMailmanOptions(): Promise | MailmanOptions; 50 | } 51 | 52 | export interface MailmanAsyncOptions extends Pick { 53 | name?: string; 54 | useExisting?: Type; 55 | useClass?: Type; 56 | useFactory?: (...args: any[]) => Promise | MailmanOptions; 57 | inject?: any[]; 58 | } 59 | 60 | export interface MailData { 61 | subject?: string; 62 | html: string; 63 | attachments: Attachment[]; 64 | } 65 | 66 | export interface SendMailOptions { 67 | sender: string; 68 | replyTo?: string; 69 | inReplyTo?: string; 70 | mail: MailMessage; 71 | cc: string | string[]; 72 | bcc: string | string[]; 73 | receipents: string | string[]; 74 | } 75 | 76 | export type MailType = "RAW" | "VIEW_BASED" | "GENERIC"; 77 | -------------------------------------------------------------------------------- /lib/mailman.ts: -------------------------------------------------------------------------------- 1 | import { MailmanService } from './service'; 2 | import { MailMessage } from './message'; 3 | import { MailData } from './interfaces'; 4 | export class Mailman { 5 | private receipents: string | string[]; 6 | private ccReceipents: string | string[]; 7 | private bccReceipents: string | string[]; 8 | private sender: string; 9 | private _replyTo: string; 10 | private _inReplyTo: string; 11 | 12 | private constructor() { 13 | this.sender = ''; 14 | this._replyTo = ''; 15 | this._inReplyTo = ''; 16 | this.receipents = ''; 17 | this.ccReceipents = ''; 18 | this.bccReceipents = ''; 19 | } 20 | 21 | /** 22 | * Returns new instance 23 | */ 24 | static init() { 25 | return new Mailman(); 26 | } 27 | 28 | /** 29 | * `FROM` in email address. 30 | * Use this method to override the `from` address provided in configuration. 31 | * @param sender 32 | */ 33 | from(sender: string): this { 34 | this.sender = sender; 35 | return this; 36 | } 37 | 38 | /** 39 | * `REPLY_TO` in email address. 40 | * Use this method to override the `reply_to` address provided in configuration or to add one. 41 | * @param replyToEmail 42 | */ 43 | replyTo(replyToEmail: string): this { 44 | this._replyTo = replyToEmail; 45 | return this; 46 | } 47 | 48 | /** 49 | * `IN_REPLY_TO` in email address. 50 | * Use this method to provide the `in_reply_to` header. 51 | * @param replyToEmail 52 | */ 53 | inReplyTo(messageId: string): this { 54 | this._inReplyTo = messageId; 55 | return this; 56 | } 57 | 58 | /** 59 | * `TO` in email address 60 | * @param receipents 61 | */ 62 | to(receipents: string | string[]): this { 63 | this.receipents = receipents; 64 | return this; 65 | } 66 | 67 | /** 68 | * `CC` in email addres 69 | * @param ccreceipents 70 | */ 71 | cc(ccReceipents: string | string[]): this { 72 | this.ccReceipents = ccReceipents; 73 | return this; 74 | } 75 | 76 | /** 77 | * `BCC` in email address 78 | * @param bccReceipents 79 | */ 80 | bcc(bccReceipents: string | string[]): this { 81 | this.bccReceipents = bccReceipents; 82 | return this; 83 | } 84 | 85 | /** 86 | * Send mail 87 | * @param mail 88 | */ 89 | send(mail: MailMessage) { 90 | return MailmanService.send({ 91 | mail, 92 | cc: this.ccReceipents, 93 | bcc: this.bccReceipents, 94 | sender: this.sender, 95 | replyTo: this._replyTo, 96 | inReplyTo: this._inReplyTo, 97 | receipents: this.receipents, 98 | }); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /lib/message.ts: -------------------------------------------------------------------------------- 1 | import { Attachment } from "nodemailer/lib/mailer"; 2 | import { GENERIC_MAIL, RAW_MAIL, VIEW_BASED_MAIL } from "./constants"; 3 | import { 4 | MailData, 5 | MailType, 6 | MailmanMetaPayload, 7 | MailmanPayload, 8 | } from "./interfaces"; 9 | import { MailmanService } from "./service"; 10 | import { renderToMjml } from "@faire/mjml-react/utils/renderToMjml"; 11 | import mjml2html from "mjml"; 12 | 13 | export class MailMessage { 14 | private mailSubject?: string; 15 | private viewFile?: (payload: Record) => JSX.Element; 16 | private templateString?: string; 17 | private payload: MailmanPayload = {}; 18 | private mailType: MailType; 19 | private compiledHtml: string; 20 | private attachments: Record; 21 | 22 | constructor() { 23 | this.attachments = {}; 24 | this.compiledHtml = ""; 25 | this.mailType = RAW_MAIL; 26 | } 27 | 28 | /** 29 | * static method to create new instance of the MailMessage class 30 | */ 31 | static init(): MailMessage { 32 | return new MailMessage(); 33 | } 34 | 35 | /** 36 | * Define subject of the mail 37 | * @param subject 38 | */ 39 | subject(subject: string): this { 40 | this.mailSubject = subject; 41 | return this; 42 | } 43 | 44 | /** 45 | * Define the view to be used for the mail 46 | * @param viewFile 47 | * @param payload 48 | */ 49 | view( 50 | component: (payload: Record) => JSX.Element, 51 | payload?: Record 52 | ): this { 53 | this.mailType = VIEW_BASED_MAIL; 54 | this.viewFile = component; 55 | this.payload = payload || {}; 56 | return this; 57 | } 58 | 59 | /** 60 | * Define the template string to be used for the mail 61 | * @param template 62 | * @param payload 63 | */ 64 | raw(template: string, payload?: Record): this { 65 | this.mailType = RAW_MAIL; 66 | this.templateString = template; 67 | this.payload = payload || {}; 68 | return this; 69 | } 70 | 71 | /** 72 | * Add attachment to the mail 73 | * @param greeting 74 | */ 75 | attach(filename: string, content: Omit): this { 76 | this.attachments[filename] = { ...content, filename }; 77 | return this; 78 | } 79 | 80 | /** 81 | * ==> Generic Template Method <== 82 | * Use this method for adding the greeting to the generic mail 83 | * @param greeting 84 | */ 85 | greeting(greeting: string): this { 86 | this._setGenericMailProperties(); 87 | if (this.payload.genericFields) { 88 | this.payload?.genericFields.push({ greeting }); 89 | } 90 | return this; 91 | } 92 | 93 | /** 94 | * ==> Generic Template Method <== 95 | * Use this method for adding a text line to the generic mail 96 | * @param line 97 | */ 98 | line(line: string): this { 99 | this._setGenericMailProperties(); 100 | if (this.payload.genericFields) { 101 | this.payload?.genericFields.push({ line }); 102 | } 103 | return this; 104 | } 105 | 106 | html(html: string): this { 107 | this._setGenericMailProperties(); 108 | if (this.payload.genericFields) { 109 | this.payload?.genericFields.push({ html }); 110 | } 111 | return this; 112 | } 113 | 114 | /** 115 | * ==> Generic Template Method <== 116 | * Use this method for adding a url action to the generic mail 117 | * @param text 118 | * @param link 119 | */ 120 | action(text: string, link: string): this { 121 | this._setGenericMailProperties(); 122 | if (this.payload.genericFields) { 123 | this.payload.genericFields.push({ action: { text, link } }); 124 | } 125 | return this; 126 | } 127 | 128 | /** 129 | * ==> Generic Template Method <== 130 | * Use this method for adding a table to the generic mail 131 | * @param data 132 | */ 133 | table(data: Record[], showHeading = true, vertical = false): this { 134 | this._setGenericMailProperties(); 135 | if (this.payload.genericFields) { 136 | this.payload.genericFields.push({ table: data, showHeading, vertical: vertical }); 137 | } 138 | 139 | return this; 140 | } 141 | 142 | meta(payload: MailmanMetaPayload): this { 143 | this.payload.meta = payload; 144 | return this; 145 | } 146 | 147 | /** 148 | * ==> Generic Template Method <== 149 | * @param greeting 150 | */ 151 | private _setGenericMailProperties() { 152 | this.mailType = GENERIC_MAIL; 153 | if (!this.payload || !this.payload.genericFields) { 154 | this.payload.genericFields = []; 155 | } 156 | } 157 | 158 | /** 159 | * Method to compile templates 160 | */ 161 | private _compileTemplate(): string { 162 | if (this.compiledHtml) return this.compiledHtml; 163 | const config = MailmanService.getConfig(); 164 | 165 | const componentData = { 166 | ...this.payload, 167 | _templateConfig: config.templateConfig.templateOptions, 168 | }; 169 | 170 | if (this.mailType === GENERIC_MAIL) { 171 | const component = config.templateConfig?.baseComponent; 172 | 173 | if (!component) { 174 | throw new Error( 175 | "BaseComponent not found for generic view, please check if you have set the baseComponent attribute in config correctly." 176 | ); 177 | } 178 | 179 | const { html } = mjml2html( 180 | renderToMjml(component(componentData)), 181 | config.mjml 182 | ); 183 | this.compiledHtml = html; 184 | return this.compiledHtml; 185 | } 186 | 187 | if (this.mailType === VIEW_BASED_MAIL && this.viewFile) { 188 | const component = this.viewFile; 189 | const { html } = mjml2html( 190 | renderToMjml(component(componentData)), 191 | config.mjml 192 | ); 193 | 194 | this.compiledHtml = html; 195 | return this.compiledHtml; 196 | } 197 | 198 | if (this.mailType === RAW_MAIL && this.templateString) { 199 | return this.compiledHtml; 200 | } 201 | 202 | return this.compiledHtml; 203 | } 204 | 205 | /** 206 | * Returns the maildata payload 207 | */ 208 | getMailData(): MailData { 209 | if (typeof (this as any).handle === "function") { 210 | (this as any)["handle"](); 211 | } 212 | 213 | return { 214 | subject: this.mailSubject, 215 | html: this._compileTemplate(), 216 | attachments: Object.values(this.attachments), 217 | }; 218 | } 219 | 220 | /** 221 | * Render the email template. 222 | * Returns the complete html of the mail. 223 | */ 224 | render(): string { 225 | return this._compileTemplate(); 226 | } 227 | } 228 | -------------------------------------------------------------------------------- /lib/module.ts: -------------------------------------------------------------------------------- 1 | import { map } from "./provider.map"; 2 | import { Module, DynamicModule, Provider, Type } from "@nestjs/common"; 3 | import { MailmanService } from "./service"; 4 | import { 5 | MailmanOptions, 6 | MailmanAsyncOptions, 7 | MailmanOptionsFactory, 8 | } from "./interfaces"; 9 | 10 | @Module({}) 11 | export class MailmanModule { 12 | /** 13 | * Register options 14 | * @param options 15 | */ 16 | static register(options: MailmanOptions): DynamicModule { 17 | return { 18 | global: true, 19 | module: MailmanModule, 20 | providers: [ 21 | MailmanService, 22 | { provide: map.MAILABLE_OPTIONS, useValue: options }, 23 | ], 24 | }; 25 | } 26 | 27 | /** 28 | * Register Async Options 29 | */ 30 | static registerAsync(options: MailmanAsyncOptions): DynamicModule { 31 | return { 32 | global: true, 33 | module: MailmanModule, 34 | imports: [], 35 | providers: [MailmanService, this.createStorageOptionsProvider(options)], 36 | }; 37 | } 38 | 39 | private static createStorageOptionsProvider( 40 | options: MailmanAsyncOptions 41 | ): Provider { 42 | if (options.useFactory) { 43 | return { 44 | provide: map.MAILABLE_OPTIONS, 45 | useFactory: options.useFactory, 46 | inject: options.inject || [], 47 | }; 48 | } 49 | 50 | const inject = [ 51 | (options.useClass || options.useExisting) as Type, 52 | ]; 53 | 54 | return { 55 | provide: map.MAILABLE_OPTIONS, 56 | useFactory: async (optionsFactory: MailmanOptionsFactory) => 57 | await optionsFactory.createMailmanOptions(), 58 | inject, 59 | }; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /lib/provider.map.ts: -------------------------------------------------------------------------------- 1 | export const map = { 2 | MAILABLE_OPTIONS: 'MAILABLE_OPTIONS', 3 | }; 4 | -------------------------------------------------------------------------------- /lib/service.ts: -------------------------------------------------------------------------------- 1 | import { map } from "./provider.map"; 2 | import * as nodemailer from "nodemailer"; 3 | import { Injectable, Inject } from "@nestjs/common"; 4 | import { MailmanOptions, MailData, SendMailOptions } from "./interfaces"; 5 | 6 | @Injectable() 7 | export class MailmanService { 8 | private static options: MailmanOptions; 9 | private static transporter: any; 10 | 11 | constructor(@Inject(map.MAILABLE_OPTIONS) options: MailmanOptions) { 12 | MailmanService.options = options; 13 | MailmanService.transporter = nodemailer.createTransport( 14 | { 15 | host: options.host, 16 | port: options.port, 17 | ignoreTLS: options.ignoreTLS, 18 | auth: { user: options.username, pass: options.password }, 19 | }, 20 | { from: options.from } 21 | ); 22 | } 23 | 24 | static getConfig(): MailmanOptions { 25 | return MailmanService.options; 26 | } 27 | 28 | static async send(options: SendMailOptions) { 29 | const config = MailmanService.options; 30 | const mailData: MailData = options.mail.getMailData(); 31 | const mail: Record = { 32 | to: options.receipents, 33 | cc: options.cc, 34 | bcc: options.bcc, 35 | from: options.sender || config.from, 36 | html: mailData.html, 37 | subject: mailData.subject, 38 | attachments: mailData.attachments, 39 | }; 40 | if (options.replyTo || config.replyTo) { 41 | mail.replyTo = options.replyTo || config.replyTo; 42 | } 43 | if (options.inReplyTo) { 44 | mail.inReplyTo = options.inReplyTo; 45 | } 46 | await MailmanService.transporter.sendMail(mail); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@squareboat/nest-mailman", 3 | "version": "1.0.0-beta", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "@squareboat/nest-mailman", 9 | "version": "1.0.0-beta", 10 | "hasInstallScript": true, 11 | "license": "MIT", 12 | "dependencies": { 13 | "@faire/mjml-react": "^3.1.2", 14 | "app-root-path": "^3.1.0", 15 | "fs-extra": "^11.1.0", 16 | "mjml": "^4.7.1", 17 | "nodemailer": "^6.9.1", 18 | "picocolors": "^1.0.0", 19 | "reflect-metadata": "^0.1.13" 20 | }, 21 | "devDependencies": { 22 | "@nestjs/common": "^9.3.9", 23 | "@nestjs/core": "^9.3.9", 24 | "@types/mjml": "^4.7.0", 25 | "@types/nodemailer": "^6.4.7", 26 | "@types/react": "^18.0.28", 27 | "typescript": "^4.9.5" 28 | }, 29 | "peerDependencies": { 30 | "@nestjs/common": "^8.0.0 || ^9.0.0", 31 | "@nestjs/core": "^8.0.0 || ^9.0.0" 32 | } 33 | }, 34 | "node_modules/@babel/runtime": { 35 | "version": "7.21.0", 36 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", 37 | "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", 38 | "dependencies": { 39 | "regenerator-runtime": "^0.13.11" 40 | }, 41 | "engines": { 42 | "node": ">=6.9.0" 43 | } 44 | }, 45 | "node_modules/@faire/mjml-react": { 46 | "version": "3.1.2", 47 | "resolved": "https://registry.npmjs.org/@faire/mjml-react/-/mjml-react-3.1.2.tgz", 48 | "integrity": "sha512-VNSZ1B/Qd4t2jtDxOHggdbJwBk4gISCa8xUdiguYNgzhWvg0ltMOVJih/7qVwbNfOB77X4jQamjTMMokCtKYfw==", 49 | "dependencies": { 50 | "lodash.kebabcase": "^4.1.1" 51 | }, 52 | "peerDependencies": { 53 | "mjml": "^4.13.0", 54 | "react": "^16.0.0 || ^17.0.0 || ^18.0.0", 55 | "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" 56 | } 57 | }, 58 | "node_modules/@lukeed/csprng": { 59 | "version": "1.0.1", 60 | "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", 61 | "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==", 62 | "dev": true, 63 | "engines": { 64 | "node": ">=8" 65 | } 66 | }, 67 | "node_modules/@nestjs/common": { 68 | "version": "9.3.9", 69 | "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.3.9.tgz", 70 | "integrity": "sha512-GshTD9Xz+wD2em6NyzU4NXw5IXMUmapgDgD+iuj6XL0258hvDwODmNk37mBBnZvTZlqER+krvIUKnS34etqF/A==", 71 | "dev": true, 72 | "dependencies": { 73 | "iterare": "1.2.1", 74 | "tslib": "2.5.0", 75 | "uid": "2.0.1" 76 | }, 77 | "funding": { 78 | "type": "opencollective", 79 | "url": "https://opencollective.com/nest" 80 | }, 81 | "peerDependencies": { 82 | "cache-manager": "<=5", 83 | "class-transformer": "*", 84 | "class-validator": "*", 85 | "reflect-metadata": "^0.1.12", 86 | "rxjs": "^7.1.0" 87 | }, 88 | "peerDependenciesMeta": { 89 | "cache-manager": { 90 | "optional": true 91 | }, 92 | "class-transformer": { 93 | "optional": true 94 | }, 95 | "class-validator": { 96 | "optional": true 97 | } 98 | } 99 | }, 100 | "node_modules/@nestjs/core": { 101 | "version": "9.3.9", 102 | "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.3.9.tgz", 103 | "integrity": "sha512-9g1A1G9eirLXEpH21rc6dKb08zHc2+adhCRz8NW39hbejcsxxD72FApJzt4QBQAKvu862ixt/tdpStnFT7lOSw==", 104 | "dev": true, 105 | "hasInstallScript": true, 106 | "dependencies": { 107 | "@nuxtjs/opencollective": "0.3.2", 108 | "fast-safe-stringify": "2.1.1", 109 | "iterare": "1.2.1", 110 | "path-to-regexp": "3.2.0", 111 | "tslib": "2.5.0", 112 | "uid": "2.0.1" 113 | }, 114 | "funding": { 115 | "type": "opencollective", 116 | "url": "https://opencollective.com/nest" 117 | }, 118 | "peerDependencies": { 119 | "@nestjs/common": "^9.0.0", 120 | "@nestjs/microservices": "^9.0.0", 121 | "@nestjs/platform-express": "^9.0.0", 122 | "@nestjs/websockets": "^9.0.0", 123 | "reflect-metadata": "^0.1.12", 124 | "rxjs": "^7.1.0" 125 | }, 126 | "peerDependenciesMeta": { 127 | "@nestjs/microservices": { 128 | "optional": true 129 | }, 130 | "@nestjs/platform-express": { 131 | "optional": true 132 | }, 133 | "@nestjs/websockets": { 134 | "optional": true 135 | } 136 | } 137 | }, 138 | "node_modules/@nuxtjs/opencollective": { 139 | "version": "0.3.2", 140 | "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", 141 | "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", 142 | "dev": true, 143 | "dependencies": { 144 | "chalk": "^4.1.0", 145 | "consola": "^2.15.0", 146 | "node-fetch": "^2.6.1" 147 | }, 148 | "bin": { 149 | "opencollective": "bin/opencollective.js" 150 | }, 151 | "engines": { 152 | "node": ">=8.0.0", 153 | "npm": ">=5.0.0" 154 | } 155 | }, 156 | "node_modules/@nuxtjs/opencollective/node_modules/ansi-styles": { 157 | "version": "4.3.0", 158 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 159 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 160 | "dev": true, 161 | "dependencies": { 162 | "color-convert": "^2.0.1" 163 | }, 164 | "engines": { 165 | "node": ">=8" 166 | }, 167 | "funding": { 168 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 169 | } 170 | }, 171 | "node_modules/@nuxtjs/opencollective/node_modules/chalk": { 172 | "version": "4.1.2", 173 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 174 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 175 | "dev": true, 176 | "dependencies": { 177 | "ansi-styles": "^4.1.0", 178 | "supports-color": "^7.1.0" 179 | }, 180 | "engines": { 181 | "node": ">=10" 182 | }, 183 | "funding": { 184 | "url": "https://github.com/chalk/chalk?sponsor=1" 185 | } 186 | }, 187 | "node_modules/@nuxtjs/opencollective/node_modules/color-convert": { 188 | "version": "2.0.1", 189 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 190 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 191 | "dev": true, 192 | "dependencies": { 193 | "color-name": "~1.1.4" 194 | }, 195 | "engines": { 196 | "node": ">=7.0.0" 197 | } 198 | }, 199 | "node_modules/@nuxtjs/opencollective/node_modules/color-name": { 200 | "version": "1.1.4", 201 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 202 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 203 | "dev": true 204 | }, 205 | "node_modules/@nuxtjs/opencollective/node_modules/has-flag": { 206 | "version": "4.0.0", 207 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 208 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 209 | "dev": true, 210 | "engines": { 211 | "node": ">=8" 212 | } 213 | }, 214 | "node_modules/@nuxtjs/opencollective/node_modules/supports-color": { 215 | "version": "7.2.0", 216 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 217 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 218 | "dev": true, 219 | "dependencies": { 220 | "has-flag": "^4.0.0" 221 | }, 222 | "engines": { 223 | "node": ">=8" 224 | } 225 | }, 226 | "node_modules/@types/mjml": { 227 | "version": "4.7.0", 228 | "resolved": "https://registry.npmjs.org/@types/mjml/-/mjml-4.7.0.tgz", 229 | "integrity": "sha512-aWWu8Lxq2SexXGs+lBPRUpN3kFf0sDRo3Y4jz7BQ15cQvMfyZOadgFJsNlHmDqI6D2Qjx0PIK+1f9IMXgq9vTA==", 230 | "dev": true, 231 | "dependencies": { 232 | "@types/mjml-core": "*" 233 | } 234 | }, 235 | "node_modules/@types/mjml-core": { 236 | "version": "4.7.1", 237 | "resolved": "https://registry.npmjs.org/@types/mjml-core/-/mjml-core-4.7.1.tgz", 238 | "integrity": "sha512-k5IRafi93tyZBGF+0BTrcBDvG47OueI+Q7TC4V4UjGQn0AMVvL3Y+S26QF/UHMmMJW5r1hxLyv3StX2/+FatFg==", 239 | "dev": true 240 | }, 241 | "node_modules/@types/node": { 242 | "version": "18.14.6", 243 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", 244 | "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", 245 | "dev": true 246 | }, 247 | "node_modules/@types/nodemailer": { 248 | "version": "6.4.7", 249 | "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.7.tgz", 250 | "integrity": "sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==", 251 | "dev": true, 252 | "dependencies": { 253 | "@types/node": "*" 254 | } 255 | }, 256 | "node_modules/@types/prop-types": { 257 | "version": "15.7.5", 258 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 259 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 260 | "dev": true 261 | }, 262 | "node_modules/@types/react": { 263 | "version": "18.0.28", 264 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", 265 | "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", 266 | "dev": true, 267 | "dependencies": { 268 | "@types/prop-types": "*", 269 | "@types/scheduler": "*", 270 | "csstype": "^3.0.2" 271 | } 272 | }, 273 | "node_modules/@types/scheduler": { 274 | "version": "0.16.2", 275 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", 276 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", 277 | "dev": true 278 | }, 279 | "node_modules/abbrev": { 280 | "version": "1.1.1", 281 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 282 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 283 | }, 284 | "node_modules/ansi-colors": { 285 | "version": "4.1.3", 286 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", 287 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", 288 | "engines": { 289 | "node": ">=6" 290 | } 291 | }, 292 | "node_modules/ansi-regex": { 293 | "version": "5.0.1", 294 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 295 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 296 | "engines": { 297 | "node": ">=8" 298 | } 299 | }, 300 | "node_modules/anymatch": { 301 | "version": "3.1.3", 302 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 303 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 304 | "dependencies": { 305 | "normalize-path": "^3.0.0", 306 | "picomatch": "^2.0.4" 307 | }, 308 | "engines": { 309 | "node": ">= 8" 310 | } 311 | }, 312 | "node_modules/app-root-path": { 313 | "version": "3.1.0", 314 | "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", 315 | "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", 316 | "engines": { 317 | "node": ">= 6.0.0" 318 | } 319 | }, 320 | "node_modules/balanced-match": { 321 | "version": "1.0.0", 322 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 323 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 324 | }, 325 | "node_modules/binary-extensions": { 326 | "version": "2.2.0", 327 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 328 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 329 | "engines": { 330 | "node": ">=8" 331 | } 332 | }, 333 | "node_modules/boolbase": { 334 | "version": "1.0.0", 335 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 336 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" 337 | }, 338 | "node_modules/brace-expansion": { 339 | "version": "1.1.11", 340 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 341 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 342 | "dependencies": { 343 | "balanced-match": "^1.0.0", 344 | "concat-map": "0.0.1" 345 | } 346 | }, 347 | "node_modules/braces": { 348 | "version": "3.0.2", 349 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 350 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 351 | "dependencies": { 352 | "fill-range": "^7.0.1" 353 | }, 354 | "engines": { 355 | "node": ">=8" 356 | } 357 | }, 358 | "node_modules/camel-case": { 359 | "version": "3.0.0", 360 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", 361 | "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", 362 | "dependencies": { 363 | "no-case": "^2.2.0", 364 | "upper-case": "^1.1.1" 365 | } 366 | }, 367 | "node_modules/cheerio": { 368 | "version": "1.0.0-rc.10", 369 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", 370 | "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", 371 | "dependencies": { 372 | "cheerio-select": "^1.5.0", 373 | "dom-serializer": "^1.3.2", 374 | "domhandler": "^4.2.0", 375 | "htmlparser2": "^6.1.0", 376 | "parse5": "^6.0.1", 377 | "parse5-htmlparser2-tree-adapter": "^6.0.1", 378 | "tslib": "^2.2.0" 379 | }, 380 | "engines": { 381 | "node": ">= 6" 382 | }, 383 | "funding": { 384 | "url": "https://github.com/cheeriojs/cheerio?sponsor=1" 385 | } 386 | }, 387 | "node_modules/cheerio-select": { 388 | "version": "1.6.0", 389 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", 390 | "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", 391 | "dependencies": { 392 | "css-select": "^4.3.0", 393 | "css-what": "^6.0.1", 394 | "domelementtype": "^2.2.0", 395 | "domhandler": "^4.3.1", 396 | "domutils": "^2.8.0" 397 | }, 398 | "funding": { 399 | "url": "https://github.com/sponsors/fb55" 400 | } 401 | }, 402 | "node_modules/cheerio/node_modules/parse5": { 403 | "version": "6.0.1", 404 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 405 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 406 | }, 407 | "node_modules/chokidar": { 408 | "version": "3.5.3", 409 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 410 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 411 | "funding": [ 412 | { 413 | "type": "individual", 414 | "url": "https://paulmillr.com/funding/" 415 | } 416 | ], 417 | "dependencies": { 418 | "anymatch": "~3.1.2", 419 | "braces": "~3.0.2", 420 | "glob-parent": "~5.1.2", 421 | "is-binary-path": "~2.1.0", 422 | "is-glob": "~4.0.1", 423 | "normalize-path": "~3.0.0", 424 | "readdirp": "~3.6.0" 425 | }, 426 | "engines": { 427 | "node": ">= 8.10.0" 428 | }, 429 | "optionalDependencies": { 430 | "fsevents": "~2.3.2" 431 | } 432 | }, 433 | "node_modules/clean-css": { 434 | "version": "4.2.4", 435 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", 436 | "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", 437 | "dependencies": { 438 | "source-map": "~0.6.0" 439 | }, 440 | "engines": { 441 | "node": ">= 4.0" 442 | } 443 | }, 444 | "node_modules/commander": { 445 | "version": "2.20.3", 446 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 447 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 448 | }, 449 | "node_modules/concat-map": { 450 | "version": "0.0.1", 451 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 452 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 453 | }, 454 | "node_modules/config-chain": { 455 | "version": "1.1.13", 456 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", 457 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", 458 | "dependencies": { 459 | "ini": "^1.3.4", 460 | "proto-list": "~1.2.1" 461 | } 462 | }, 463 | "node_modules/consola": { 464 | "version": "2.15.3", 465 | "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", 466 | "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", 467 | "dev": true 468 | }, 469 | "node_modules/css-select": { 470 | "version": "4.3.0", 471 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 472 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 473 | "dependencies": { 474 | "boolbase": "^1.0.0", 475 | "css-what": "^6.0.1", 476 | "domhandler": "^4.3.1", 477 | "domutils": "^2.8.0", 478 | "nth-check": "^2.0.1" 479 | }, 480 | "funding": { 481 | "url": "https://github.com/sponsors/fb55" 482 | } 483 | }, 484 | "node_modules/css-what": { 485 | "version": "6.1.0", 486 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 487 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 488 | "engines": { 489 | "node": ">= 6" 490 | }, 491 | "funding": { 492 | "url": "https://github.com/sponsors/fb55" 493 | } 494 | }, 495 | "node_modules/csstype": { 496 | "version": "3.1.1", 497 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 498 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", 499 | "dev": true 500 | }, 501 | "node_modules/detect-node": { 502 | "version": "2.0.4", 503 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 504 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" 505 | }, 506 | "node_modules/dom-serializer": { 507 | "version": "1.4.1", 508 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 509 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 510 | "dependencies": { 511 | "domelementtype": "^2.0.1", 512 | "domhandler": "^4.2.0", 513 | "entities": "^2.0.0" 514 | }, 515 | "funding": { 516 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 517 | } 518 | }, 519 | "node_modules/domelementtype": { 520 | "version": "2.3.0", 521 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 522 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 523 | "funding": [ 524 | { 525 | "type": "github", 526 | "url": "https://github.com/sponsors/fb55" 527 | } 528 | ] 529 | }, 530 | "node_modules/domhandler": { 531 | "version": "4.3.1", 532 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 533 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 534 | "dependencies": { 535 | "domelementtype": "^2.2.0" 536 | }, 537 | "engines": { 538 | "node": ">= 4" 539 | }, 540 | "funding": { 541 | "url": "https://github.com/fb55/domhandler?sponsor=1" 542 | } 543 | }, 544 | "node_modules/domutils": { 545 | "version": "2.8.0", 546 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 547 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 548 | "dependencies": { 549 | "dom-serializer": "^1.0.1", 550 | "domelementtype": "^2.2.0", 551 | "domhandler": "^4.2.0" 552 | }, 553 | "funding": { 554 | "url": "https://github.com/fb55/domutils?sponsor=1" 555 | } 556 | }, 557 | "node_modules/editorconfig": { 558 | "version": "0.15.3", 559 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", 560 | "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", 561 | "dependencies": { 562 | "commander": "^2.19.0", 563 | "lru-cache": "^4.1.5", 564 | "semver": "^5.6.0", 565 | "sigmund": "^1.0.1" 566 | }, 567 | "bin": { 568 | "editorconfig": "bin/editorconfig" 569 | } 570 | }, 571 | "node_modules/emoji-regex": { 572 | "version": "8.0.0", 573 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 574 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 575 | }, 576 | "node_modules/entities": { 577 | "version": "2.2.0", 578 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 579 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 580 | "funding": { 581 | "url": "https://github.com/fb55/entities?sponsor=1" 582 | } 583 | }, 584 | "node_modules/escalade": { 585 | "version": "3.1.1", 586 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 587 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 588 | "engines": { 589 | "node": ">=6" 590 | } 591 | }, 592 | "node_modules/escape-goat": { 593 | "version": "3.0.0", 594 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", 595 | "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", 596 | "engines": { 597 | "node": ">=10" 598 | }, 599 | "funding": { 600 | "url": "https://github.com/sponsors/sindresorhus" 601 | } 602 | }, 603 | "node_modules/fast-safe-stringify": { 604 | "version": "2.1.1", 605 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 606 | "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", 607 | "dev": true 608 | }, 609 | "node_modules/fill-range": { 610 | "version": "7.0.1", 611 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 612 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 613 | "dependencies": { 614 | "to-regex-range": "^5.0.1" 615 | }, 616 | "engines": { 617 | "node": ">=8" 618 | } 619 | }, 620 | "node_modules/fs-extra": { 621 | "version": "11.1.0", 622 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", 623 | "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", 624 | "dependencies": { 625 | "graceful-fs": "^4.2.0", 626 | "jsonfile": "^6.0.1", 627 | "universalify": "^2.0.0" 628 | }, 629 | "engines": { 630 | "node": ">=14.14" 631 | } 632 | }, 633 | "node_modules/fs.realpath": { 634 | "version": "1.0.0", 635 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 636 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 637 | }, 638 | "node_modules/fsevents": { 639 | "version": "2.3.2", 640 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 641 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 642 | "hasInstallScript": true, 643 | "optional": true, 644 | "os": [ 645 | "darwin" 646 | ], 647 | "engines": { 648 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 649 | } 650 | }, 651 | "node_modules/get-caller-file": { 652 | "version": "2.0.5", 653 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 654 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 655 | "engines": { 656 | "node": "6.* || 8.* || >= 10.*" 657 | } 658 | }, 659 | "node_modules/glob": { 660 | "version": "7.1.6", 661 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 662 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 663 | "dependencies": { 664 | "fs.realpath": "^1.0.0", 665 | "inflight": "^1.0.4", 666 | "inherits": "2", 667 | "minimatch": "^3.0.4", 668 | "once": "^1.3.0", 669 | "path-is-absolute": "^1.0.0" 670 | }, 671 | "engines": { 672 | "node": "*" 673 | }, 674 | "funding": { 675 | "url": "https://github.com/sponsors/isaacs" 676 | } 677 | }, 678 | "node_modules/glob-parent": { 679 | "version": "5.1.2", 680 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 681 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 682 | "dependencies": { 683 | "is-glob": "^4.0.1" 684 | }, 685 | "engines": { 686 | "node": ">= 6" 687 | } 688 | }, 689 | "node_modules/graceful-fs": { 690 | "version": "4.2.4", 691 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 692 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 693 | }, 694 | "node_modules/he": { 695 | "version": "1.2.0", 696 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 697 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 698 | "bin": { 699 | "he": "bin/he" 700 | } 701 | }, 702 | "node_modules/html-minifier": { 703 | "version": "4.0.0", 704 | "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", 705 | "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", 706 | "dependencies": { 707 | "camel-case": "^3.0.0", 708 | "clean-css": "^4.2.1", 709 | "commander": "^2.19.0", 710 | "he": "^1.2.0", 711 | "param-case": "^2.1.1", 712 | "relateurl": "^0.2.7", 713 | "uglify-js": "^3.5.1" 714 | }, 715 | "bin": { 716 | "html-minifier": "cli.js" 717 | }, 718 | "engines": { 719 | "node": ">=6" 720 | } 721 | }, 722 | "node_modules/htmlparser2": { 723 | "version": "6.1.0", 724 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", 725 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", 726 | "funding": [ 727 | "https://github.com/fb55/htmlparser2?sponsor=1", 728 | { 729 | "type": "github", 730 | "url": "https://github.com/sponsors/fb55" 731 | } 732 | ], 733 | "dependencies": { 734 | "domelementtype": "^2.0.1", 735 | "domhandler": "^4.0.0", 736 | "domutils": "^2.5.2", 737 | "entities": "^2.0.0" 738 | } 739 | }, 740 | "node_modules/inflight": { 741 | "version": "1.0.6", 742 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 743 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 744 | "dependencies": { 745 | "once": "^1.3.0", 746 | "wrappy": "1" 747 | } 748 | }, 749 | "node_modules/inherits": { 750 | "version": "2.0.4", 751 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 752 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 753 | }, 754 | "node_modules/ini": { 755 | "version": "1.3.8", 756 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 757 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 758 | }, 759 | "node_modules/is-binary-path": { 760 | "version": "2.1.0", 761 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 762 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 763 | "dependencies": { 764 | "binary-extensions": "^2.0.0" 765 | }, 766 | "engines": { 767 | "node": ">=8" 768 | } 769 | }, 770 | "node_modules/is-extglob": { 771 | "version": "2.1.1", 772 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 773 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 774 | "engines": { 775 | "node": ">=0.10.0" 776 | } 777 | }, 778 | "node_modules/is-fullwidth-code-point": { 779 | "version": "3.0.0", 780 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 781 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 782 | "engines": { 783 | "node": ">=8" 784 | } 785 | }, 786 | "node_modules/is-glob": { 787 | "version": "4.0.3", 788 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 789 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 790 | "dependencies": { 791 | "is-extglob": "^2.1.1" 792 | }, 793 | "engines": { 794 | "node": ">=0.10.0" 795 | } 796 | }, 797 | "node_modules/is-number": { 798 | "version": "7.0.0", 799 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 800 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 801 | "engines": { 802 | "node": ">=0.12.0" 803 | } 804 | }, 805 | "node_modules/iterare": { 806 | "version": "1.2.1", 807 | "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", 808 | "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", 809 | "dev": true, 810 | "engines": { 811 | "node": ">=6" 812 | } 813 | }, 814 | "node_modules/js-beautify": { 815 | "version": "1.14.7", 816 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.7.tgz", 817 | "integrity": "sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A==", 818 | "dependencies": { 819 | "config-chain": "^1.1.13", 820 | "editorconfig": "^0.15.3", 821 | "glob": "^8.0.3", 822 | "nopt": "^6.0.0" 823 | }, 824 | "bin": { 825 | "css-beautify": "js/bin/css-beautify.js", 826 | "html-beautify": "js/bin/html-beautify.js", 827 | "js-beautify": "js/bin/js-beautify.js" 828 | }, 829 | "engines": { 830 | "node": ">=10" 831 | } 832 | }, 833 | "node_modules/js-beautify/node_modules/brace-expansion": { 834 | "version": "2.0.1", 835 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 836 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 837 | "dependencies": { 838 | "balanced-match": "^1.0.0" 839 | } 840 | }, 841 | "node_modules/js-beautify/node_modules/glob": { 842 | "version": "8.1.0", 843 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 844 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 845 | "dependencies": { 846 | "fs.realpath": "^1.0.0", 847 | "inflight": "^1.0.4", 848 | "inherits": "2", 849 | "minimatch": "^5.0.1", 850 | "once": "^1.3.0" 851 | }, 852 | "engines": { 853 | "node": ">=12" 854 | }, 855 | "funding": { 856 | "url": "https://github.com/sponsors/isaacs" 857 | } 858 | }, 859 | "node_modules/js-beautify/node_modules/minimatch": { 860 | "version": "5.1.6", 861 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 862 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 863 | "dependencies": { 864 | "brace-expansion": "^2.0.1" 865 | }, 866 | "engines": { 867 | "node": ">=10" 868 | } 869 | }, 870 | "node_modules/js-tokens": { 871 | "version": "4.0.0", 872 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 873 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 874 | "peer": true 875 | }, 876 | "node_modules/jsonfile": { 877 | "version": "6.1.0", 878 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 879 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 880 | "dependencies": { 881 | "universalify": "^2.0.0" 882 | }, 883 | "optionalDependencies": { 884 | "graceful-fs": "^4.1.6" 885 | } 886 | }, 887 | "node_modules/juice": { 888 | "version": "7.0.0", 889 | "resolved": "https://registry.npmjs.org/juice/-/juice-7.0.0.tgz", 890 | "integrity": "sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==", 891 | "dependencies": { 892 | "cheerio": "^1.0.0-rc.3", 893 | "commander": "^5.1.0", 894 | "mensch": "^0.3.4", 895 | "slick": "^1.12.2", 896 | "web-resource-inliner": "^5.0.0" 897 | }, 898 | "bin": { 899 | "juice": "bin/juice" 900 | }, 901 | "engines": { 902 | "node": ">=10.0.0" 903 | } 904 | }, 905 | "node_modules/juice/node_modules/commander": { 906 | "version": "5.1.0", 907 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 908 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", 909 | "engines": { 910 | "node": ">= 6" 911 | } 912 | }, 913 | "node_modules/lodash": { 914 | "version": "4.17.21", 915 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 916 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 917 | }, 918 | "node_modules/lodash.kebabcase": { 919 | "version": "4.1.1", 920 | "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", 921 | "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" 922 | }, 923 | "node_modules/loose-envify": { 924 | "version": "1.4.0", 925 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 926 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 927 | "peer": true, 928 | "dependencies": { 929 | "js-tokens": "^3.0.0 || ^4.0.0" 930 | }, 931 | "bin": { 932 | "loose-envify": "cli.js" 933 | } 934 | }, 935 | "node_modules/lower-case": { 936 | "version": "1.1.4", 937 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 938 | "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" 939 | }, 940 | "node_modules/lru-cache": { 941 | "version": "4.1.5", 942 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 943 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 944 | "dependencies": { 945 | "pseudomap": "^1.0.2", 946 | "yallist": "^2.1.2" 947 | } 948 | }, 949 | "node_modules/mensch": { 950 | "version": "0.3.4", 951 | "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", 952 | "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" 953 | }, 954 | "node_modules/mime": { 955 | "version": "2.6.0", 956 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 957 | "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", 958 | "bin": { 959 | "mime": "cli.js" 960 | }, 961 | "engines": { 962 | "node": ">=4.0.0" 963 | } 964 | }, 965 | "node_modules/minimatch": { 966 | "version": "3.1.2", 967 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 968 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 969 | "dependencies": { 970 | "brace-expansion": "^1.1.7" 971 | }, 972 | "engines": { 973 | "node": "*" 974 | } 975 | }, 976 | "node_modules/mjml": { 977 | "version": "4.13.0", 978 | "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.13.0.tgz", 979 | "integrity": "sha512-OnFKESouLshz8DPFSb6M/dE8GkhiJnoy6LAam5TiLA1anAj24yQ2ZH388LtQoEkvTisqwiTmc9ejDh5ctnFaJQ==", 980 | "dependencies": { 981 | "@babel/runtime": "^7.14.6", 982 | "mjml-cli": "4.13.0", 983 | "mjml-core": "4.13.0", 984 | "mjml-migrate": "4.13.0", 985 | "mjml-preset-core": "4.13.0", 986 | "mjml-validator": "4.13.0" 987 | }, 988 | "bin": { 989 | "mjml": "bin/mjml" 990 | } 991 | }, 992 | "node_modules/mjml-accordion": { 993 | "version": "4.13.0", 994 | "resolved": "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.13.0.tgz", 995 | "integrity": "sha512-E3yihZW5Oq2p+sWOcr8kWeRTROmiTYOGxB4IOxW/jTycdY07N3FX3e6vuh7Fv3rryHEUaydUQYto3ICVyctI7w==", 996 | "dependencies": { 997 | "@babel/runtime": "^7.14.6", 998 | "lodash": "^4.17.21", 999 | "mjml-core": "4.13.0" 1000 | } 1001 | }, 1002 | "node_modules/mjml-body": { 1003 | "version": "4.13.0", 1004 | "resolved": "https://registry.npmjs.org/mjml-body/-/mjml-body-4.13.0.tgz", 1005 | "integrity": "sha512-S4HgwAuO9dEsyX9sr6WBf9/xr+H2ASVaLn22aurJm1S2Lvc1wifLPYBQgFmNdCjaesTCNtOMUDpG+Rbnavyaqg==", 1006 | "dependencies": { 1007 | "@babel/runtime": "^7.14.6", 1008 | "lodash": "^4.17.21", 1009 | "mjml-core": "4.13.0" 1010 | } 1011 | }, 1012 | "node_modules/mjml-button": { 1013 | "version": "4.13.0", 1014 | "resolved": "https://registry.npmjs.org/mjml-button/-/mjml-button-4.13.0.tgz", 1015 | "integrity": "sha512-3y8IAHCCxh7ESHh1aOOqobZKUgyNxOKAGQ9TlJoyaLpsKUFzkN8nmrD0KXF0ADSuzvhMZ1CdRIJuZ5mjv2TwWQ==", 1016 | "dependencies": { 1017 | "@babel/runtime": "^7.14.6", 1018 | "lodash": "^4.17.21", 1019 | "mjml-core": "4.13.0" 1020 | } 1021 | }, 1022 | "node_modules/mjml-carousel": { 1023 | "version": "4.13.0", 1024 | "resolved": "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.13.0.tgz", 1025 | "integrity": "sha512-ORSY5bEYlMlrWSIKI/lN0Tz3uGltWAjG8DQl2Yr3pwjwOaIzGE+kozrDf+T9xItfiIIbvKajef1dg7B7XgP0zg==", 1026 | "dependencies": { 1027 | "@babel/runtime": "^7.14.6", 1028 | "lodash": "^4.17.21", 1029 | "mjml-core": "4.13.0" 1030 | } 1031 | }, 1032 | "node_modules/mjml-cli": { 1033 | "version": "4.13.0", 1034 | "resolved": "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.13.0.tgz", 1035 | "integrity": "sha512-kAZxpH0QqlTF/CcLzELgKw1ljKRxrmWJ310CJQhbPAxHvwQ/nIb+q82U+zRJAelRPPKjnOb+hSrMRqTgk9rH3w==", 1036 | "dependencies": { 1037 | "@babel/runtime": "^7.14.6", 1038 | "chokidar": "^3.0.0", 1039 | "glob": "^7.1.1", 1040 | "html-minifier": "^4.0.0", 1041 | "js-beautify": "^1.6.14", 1042 | "lodash": "^4.17.21", 1043 | "mjml-core": "4.13.0", 1044 | "mjml-migrate": "4.13.0", 1045 | "mjml-parser-xml": "4.13.0", 1046 | "mjml-validator": "4.13.0", 1047 | "yargs": "^16.1.0" 1048 | }, 1049 | "bin": { 1050 | "mjml-cli": "bin/mjml" 1051 | } 1052 | }, 1053 | "node_modules/mjml-cli/node_modules/ansi-styles": { 1054 | "version": "4.3.0", 1055 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1056 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1057 | "dependencies": { 1058 | "color-convert": "^2.0.1" 1059 | }, 1060 | "engines": { 1061 | "node": ">=8" 1062 | }, 1063 | "funding": { 1064 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1065 | } 1066 | }, 1067 | "node_modules/mjml-cli/node_modules/cliui": { 1068 | "version": "7.0.4", 1069 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 1070 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 1071 | "dependencies": { 1072 | "string-width": "^4.2.0", 1073 | "strip-ansi": "^6.0.0", 1074 | "wrap-ansi": "^7.0.0" 1075 | } 1076 | }, 1077 | "node_modules/mjml-cli/node_modules/color-convert": { 1078 | "version": "2.0.1", 1079 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1080 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1081 | "dependencies": { 1082 | "color-name": "~1.1.4" 1083 | }, 1084 | "engines": { 1085 | "node": ">=7.0.0" 1086 | } 1087 | }, 1088 | "node_modules/mjml-cli/node_modules/color-name": { 1089 | "version": "1.1.4", 1090 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1091 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1092 | }, 1093 | "node_modules/mjml-cli/node_modules/wrap-ansi": { 1094 | "version": "7.0.0", 1095 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1096 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1097 | "dependencies": { 1098 | "ansi-styles": "^4.0.0", 1099 | "string-width": "^4.1.0", 1100 | "strip-ansi": "^6.0.0" 1101 | }, 1102 | "engines": { 1103 | "node": ">=10" 1104 | }, 1105 | "funding": { 1106 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1107 | } 1108 | }, 1109 | "node_modules/mjml-cli/node_modules/y18n": { 1110 | "version": "5.0.8", 1111 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1112 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1113 | "engines": { 1114 | "node": ">=10" 1115 | } 1116 | }, 1117 | "node_modules/mjml-cli/node_modules/yargs": { 1118 | "version": "16.2.0", 1119 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1120 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1121 | "dependencies": { 1122 | "cliui": "^7.0.2", 1123 | "escalade": "^3.1.1", 1124 | "get-caller-file": "^2.0.5", 1125 | "require-directory": "^2.1.1", 1126 | "string-width": "^4.2.0", 1127 | "y18n": "^5.0.5", 1128 | "yargs-parser": "^20.2.2" 1129 | }, 1130 | "engines": { 1131 | "node": ">=10" 1132 | } 1133 | }, 1134 | "node_modules/mjml-cli/node_modules/yargs-parser": { 1135 | "version": "20.2.9", 1136 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1137 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1138 | "engines": { 1139 | "node": ">=10" 1140 | } 1141 | }, 1142 | "node_modules/mjml-column": { 1143 | "version": "4.13.0", 1144 | "resolved": "https://registry.npmjs.org/mjml-column/-/mjml-column-4.13.0.tgz", 1145 | "integrity": "sha512-O8FrWKK/bCy9XpKxrKRYWNdgWNaVd4TK4RqMeVI/I70IbnYnc1uf15jnsPMxCBSbT+NyXyk8k7fn099797uwpw==", 1146 | "dependencies": { 1147 | "@babel/runtime": "^7.14.6", 1148 | "lodash": "^4.17.21", 1149 | "mjml-core": "4.13.0" 1150 | } 1151 | }, 1152 | "node_modules/mjml-core": { 1153 | "version": "4.13.0", 1154 | "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-4.13.0.tgz", 1155 | "integrity": "sha512-kU5AoVTlZaXR/EDi3ix66xpzUe+kScYus71lBH/wo/B+LZW70GHE1AYWtsog5oJp1MuTHpMFTNuBD/wePeEgWg==", 1156 | "dependencies": { 1157 | "@babel/runtime": "^7.14.6", 1158 | "cheerio": "1.0.0-rc.10", 1159 | "detect-node": "2.0.4", 1160 | "html-minifier": "^4.0.0", 1161 | "js-beautify": "^1.6.14", 1162 | "juice": "^7.0.0", 1163 | "lodash": "^4.17.21", 1164 | "mjml-migrate": "4.13.0", 1165 | "mjml-parser-xml": "4.13.0", 1166 | "mjml-validator": "4.13.0" 1167 | } 1168 | }, 1169 | "node_modules/mjml-divider": { 1170 | "version": "4.13.0", 1171 | "resolved": "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.13.0.tgz", 1172 | "integrity": "sha512-ooPCwfmxEC+wJduqObYezMp7W5UCHjL9Y1LPB5FGna2FrOejgfd6Ix3ij8Wrmycmlol7E2N4D7c5NDH5DbRCJg==", 1173 | "dependencies": { 1174 | "@babel/runtime": "^7.14.6", 1175 | "lodash": "^4.17.21", 1176 | "mjml-core": "4.13.0" 1177 | } 1178 | }, 1179 | "node_modules/mjml-group": { 1180 | "version": "4.13.0", 1181 | "resolved": "https://registry.npmjs.org/mjml-group/-/mjml-group-4.13.0.tgz", 1182 | "integrity": "sha512-U7E8m8aaoAE/dMqjqXPjjrKcwO36B4cquAy9ASldECrIZJBcpFYO6eYf5yLXrNCUM2P0id8pgVjrUq23s00L7Q==", 1183 | "dependencies": { 1184 | "@babel/runtime": "^7.14.6", 1185 | "lodash": "^4.17.21", 1186 | "mjml-core": "4.13.0" 1187 | } 1188 | }, 1189 | "node_modules/mjml-head": { 1190 | "version": "4.13.0", 1191 | "resolved": "https://registry.npmjs.org/mjml-head/-/mjml-head-4.13.0.tgz", 1192 | "integrity": "sha512-sL2qQuoVALXBCiemu4DPo9geDr8DuUdXVJxm+4nd6k5jpLCfSDmFlNhgSsLPzsYn7VEac3/sxsjLtomQ+6/BHg==", 1193 | "dependencies": { 1194 | "@babel/runtime": "^7.14.6", 1195 | "lodash": "^4.17.21", 1196 | "mjml-core": "4.13.0" 1197 | } 1198 | }, 1199 | "node_modules/mjml-head-attributes": { 1200 | "version": "4.13.0", 1201 | "resolved": "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.13.0.tgz", 1202 | "integrity": "sha512-haggCafno+0lQylxJStkINCVCPMwfTpwE6yjCHeGOpQl/TkoNmjNkDr7DEEbNTZbt4Ekg070lQFn7clDy38EoA==", 1203 | "dependencies": { 1204 | "@babel/runtime": "^7.14.6", 1205 | "lodash": "^4.17.21", 1206 | "mjml-core": "4.13.0" 1207 | } 1208 | }, 1209 | "node_modules/mjml-head-breakpoint": { 1210 | "version": "4.13.0", 1211 | "resolved": "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.13.0.tgz", 1212 | "integrity": "sha512-D2iPDeUKQK1+rYSNa2HGOvgfPxZhNyndTG0iBEb/FxdGge2hbeDCZEN0mwDYE3wWB+qSBqlCuMI+Vr4pEjZbKg==", 1213 | "dependencies": { 1214 | "@babel/runtime": "^7.14.6", 1215 | "lodash": "^4.17.21", 1216 | "mjml-core": "4.13.0" 1217 | } 1218 | }, 1219 | "node_modules/mjml-head-font": { 1220 | "version": "4.13.0", 1221 | "resolved": "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.13.0.tgz", 1222 | "integrity": "sha512-mYn8aWnbrEap5vX2b4662hkUv6WifcYzYn++Yi6OHrJQi55LpzcU+myAGpfQEXXrpU8vGwExMTFKsJq5n2Kaow==", 1223 | "dependencies": { 1224 | "@babel/runtime": "^7.14.6", 1225 | "lodash": "^4.17.21", 1226 | "mjml-core": "4.13.0" 1227 | } 1228 | }, 1229 | "node_modules/mjml-head-html-attributes": { 1230 | "version": "4.13.0", 1231 | "resolved": "https://registry.npmjs.org/mjml-head-html-attributes/-/mjml-head-html-attributes-4.13.0.tgz", 1232 | "integrity": "sha512-m30Oro297+18Zou/1qYjagtmCOWtYXeoS38OABQ5zOSzMItE3TcZI9JNcOueIIWIyFCETe8StrTAKcQ2GHwsDw==", 1233 | "dependencies": { 1234 | "@babel/runtime": "^7.14.6", 1235 | "lodash": "^4.17.21", 1236 | "mjml-core": "4.13.0" 1237 | } 1238 | }, 1239 | "node_modules/mjml-head-preview": { 1240 | "version": "4.13.0", 1241 | "resolved": "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.13.0.tgz", 1242 | "integrity": "sha512-v0K/NocjFCbaoF/0IMVNmiqov91HxqT07vNTEl0Bt9lKFrTKVC01m1S4K7AB78T/bEeJ/HwmNjr1+TMtVNGGow==", 1243 | "dependencies": { 1244 | "@babel/runtime": "^7.14.6", 1245 | "lodash": "^4.17.21", 1246 | "mjml-core": "4.13.0" 1247 | } 1248 | }, 1249 | "node_modules/mjml-head-style": { 1250 | "version": "4.13.0", 1251 | "resolved": "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.13.0.tgz", 1252 | "integrity": "sha512-tBa33GL9Atn5bAM2UwE+uxv4rI29WgX/e5lXX+5GWlsb4thmiN6rxpFTNqBqWbBNRbZk4UEZF78M7Da8xC1ZGQ==", 1253 | "dependencies": { 1254 | "@babel/runtime": "^7.14.6", 1255 | "lodash": "^4.17.21", 1256 | "mjml-core": "4.13.0" 1257 | } 1258 | }, 1259 | "node_modules/mjml-head-title": { 1260 | "version": "4.13.0", 1261 | "resolved": "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.13.0.tgz", 1262 | "integrity": "sha512-Mq0bjuZXJlwxfVcjuYihQcigZSDTKeQaG3nORR1D0jsOH2BXU4XgUK1UOcTXn2qCBIfRoIMq7rfzYs+L0CRhdw==", 1263 | "dependencies": { 1264 | "@babel/runtime": "^7.14.6", 1265 | "lodash": "^4.17.21", 1266 | "mjml-core": "4.13.0" 1267 | } 1268 | }, 1269 | "node_modules/mjml-hero": { 1270 | "version": "4.13.0", 1271 | "resolved": "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.13.0.tgz", 1272 | "integrity": "sha512-aWEOScdrhyjwdKBWG4XQaElRHP8LU5PtktkpMeBXa4yxrxNs25qRnDqMNkjSrnnmFKWZmQ166tfboY6RBNf0UA==", 1273 | "dependencies": { 1274 | "@babel/runtime": "^7.14.6", 1275 | "lodash": "^4.17.21", 1276 | "mjml-core": "4.13.0" 1277 | } 1278 | }, 1279 | "node_modules/mjml-image": { 1280 | "version": "4.13.0", 1281 | "resolved": "https://registry.npmjs.org/mjml-image/-/mjml-image-4.13.0.tgz", 1282 | "integrity": "sha512-agMmm2wRZTIrKwrUnYFlnAbtrKYSP0R2en+Vf92HPspAwmaw3/AeOW/QxmSiMhfGf+xsEJyzVvR/nd33jbT3sg==", 1283 | "dependencies": { 1284 | "@babel/runtime": "^7.14.6", 1285 | "lodash": "^4.17.21", 1286 | "mjml-core": "4.13.0" 1287 | } 1288 | }, 1289 | "node_modules/mjml-migrate": { 1290 | "version": "4.13.0", 1291 | "resolved": "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.13.0.tgz", 1292 | "integrity": "sha512-I1euHiAyNpaz+B5vH+Z4T+hg/YtI5p3PqQ3/zTLv8gi24V6BILjTaftWhH5+3R/gQkQhH0NUaWNnRmds+Mq5DQ==", 1293 | "dependencies": { 1294 | "@babel/runtime": "^7.14.6", 1295 | "js-beautify": "^1.6.14", 1296 | "lodash": "^4.17.21", 1297 | "mjml-core": "4.13.0", 1298 | "mjml-parser-xml": "4.13.0", 1299 | "yargs": "^16.1.0" 1300 | }, 1301 | "bin": { 1302 | "migrate": "lib/cli.js" 1303 | } 1304 | }, 1305 | "node_modules/mjml-migrate/node_modules/ansi-styles": { 1306 | "version": "4.3.0", 1307 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1308 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1309 | "dependencies": { 1310 | "color-convert": "^2.0.1" 1311 | }, 1312 | "engines": { 1313 | "node": ">=8" 1314 | }, 1315 | "funding": { 1316 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1317 | } 1318 | }, 1319 | "node_modules/mjml-migrate/node_modules/cliui": { 1320 | "version": "7.0.4", 1321 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 1322 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 1323 | "dependencies": { 1324 | "string-width": "^4.2.0", 1325 | "strip-ansi": "^6.0.0", 1326 | "wrap-ansi": "^7.0.0" 1327 | } 1328 | }, 1329 | "node_modules/mjml-migrate/node_modules/color-convert": { 1330 | "version": "2.0.1", 1331 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1332 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1333 | "dependencies": { 1334 | "color-name": "~1.1.4" 1335 | }, 1336 | "engines": { 1337 | "node": ">=7.0.0" 1338 | } 1339 | }, 1340 | "node_modules/mjml-migrate/node_modules/color-name": { 1341 | "version": "1.1.4", 1342 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1343 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1344 | }, 1345 | "node_modules/mjml-migrate/node_modules/wrap-ansi": { 1346 | "version": "7.0.0", 1347 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1348 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1349 | "dependencies": { 1350 | "ansi-styles": "^4.0.0", 1351 | "string-width": "^4.1.0", 1352 | "strip-ansi": "^6.0.0" 1353 | }, 1354 | "engines": { 1355 | "node": ">=10" 1356 | }, 1357 | "funding": { 1358 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1359 | } 1360 | }, 1361 | "node_modules/mjml-migrate/node_modules/y18n": { 1362 | "version": "5.0.8", 1363 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1364 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1365 | "engines": { 1366 | "node": ">=10" 1367 | } 1368 | }, 1369 | "node_modules/mjml-migrate/node_modules/yargs": { 1370 | "version": "16.2.0", 1371 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1372 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1373 | "dependencies": { 1374 | "cliui": "^7.0.2", 1375 | "escalade": "^3.1.1", 1376 | "get-caller-file": "^2.0.5", 1377 | "require-directory": "^2.1.1", 1378 | "string-width": "^4.2.0", 1379 | "y18n": "^5.0.5", 1380 | "yargs-parser": "^20.2.2" 1381 | }, 1382 | "engines": { 1383 | "node": ">=10" 1384 | } 1385 | }, 1386 | "node_modules/mjml-migrate/node_modules/yargs-parser": { 1387 | "version": "20.2.9", 1388 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1389 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1390 | "engines": { 1391 | "node": ">=10" 1392 | } 1393 | }, 1394 | "node_modules/mjml-navbar": { 1395 | "version": "4.13.0", 1396 | "resolved": "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.13.0.tgz", 1397 | "integrity": "sha512-0Oqyyk+OdtXfsjswRb/7Ql1UOjN4MbqFPKoyltJqtj+11MRpF5+Wjd74Dj9H7l81GFwkIB9OaP+ZMiD+TPECgg==", 1398 | "dependencies": { 1399 | "@babel/runtime": "^7.14.6", 1400 | "lodash": "^4.17.21", 1401 | "mjml-core": "4.13.0" 1402 | } 1403 | }, 1404 | "node_modules/mjml-parser-xml": { 1405 | "version": "4.13.0", 1406 | "resolved": "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.13.0.tgz", 1407 | "integrity": "sha512-phljtI8DaW++q0aybR/Ykv9zCyP/jCFypxVNo26r2IQo//VYXyc7JuLZZT8N/LAI8lZcwbTVxQPBzJTmZ5IfwQ==", 1408 | "dependencies": { 1409 | "@babel/runtime": "^7.14.6", 1410 | "detect-node": "2.0.4", 1411 | "htmlparser2": "^4.1.0", 1412 | "lodash": "^4.17.15" 1413 | } 1414 | }, 1415 | "node_modules/mjml-parser-xml/node_modules/domhandler": { 1416 | "version": "3.3.0", 1417 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 1418 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 1419 | "dependencies": { 1420 | "domelementtype": "^2.0.1" 1421 | }, 1422 | "engines": { 1423 | "node": ">= 4" 1424 | }, 1425 | "funding": { 1426 | "url": "https://github.com/fb55/domhandler?sponsor=1" 1427 | } 1428 | }, 1429 | "node_modules/mjml-parser-xml/node_modules/htmlparser2": { 1430 | "version": "4.1.0", 1431 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", 1432 | "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", 1433 | "dependencies": { 1434 | "domelementtype": "^2.0.1", 1435 | "domhandler": "^3.0.0", 1436 | "domutils": "^2.0.0", 1437 | "entities": "^2.0.0" 1438 | } 1439 | }, 1440 | "node_modules/mjml-preset-core": { 1441 | "version": "4.13.0", 1442 | "resolved": "https://registry.npmjs.org/mjml-preset-core/-/mjml-preset-core-4.13.0.tgz", 1443 | "integrity": "sha512-gxzYaKkvUrHuzT1oqjEPSDtdmgEnN99Hf5f1r2CR5aMOB1x66EA3T8ATvF1o7qrBTVV4KMVlQem3IubMSYJZRw==", 1444 | "dependencies": { 1445 | "@babel/runtime": "^7.14.6", 1446 | "mjml-accordion": "4.13.0", 1447 | "mjml-body": "4.13.0", 1448 | "mjml-button": "4.13.0", 1449 | "mjml-carousel": "4.13.0", 1450 | "mjml-column": "4.13.0", 1451 | "mjml-divider": "4.13.0", 1452 | "mjml-group": "4.13.0", 1453 | "mjml-head": "4.13.0", 1454 | "mjml-head-attributes": "4.13.0", 1455 | "mjml-head-breakpoint": "4.13.0", 1456 | "mjml-head-font": "4.13.0", 1457 | "mjml-head-html-attributes": "4.13.0", 1458 | "mjml-head-preview": "4.13.0", 1459 | "mjml-head-style": "4.13.0", 1460 | "mjml-head-title": "4.13.0", 1461 | "mjml-hero": "4.13.0", 1462 | "mjml-image": "4.13.0", 1463 | "mjml-navbar": "4.13.0", 1464 | "mjml-raw": "4.13.0", 1465 | "mjml-section": "4.13.0", 1466 | "mjml-social": "4.13.0", 1467 | "mjml-spacer": "4.13.0", 1468 | "mjml-table": "4.13.0", 1469 | "mjml-text": "4.13.0", 1470 | "mjml-wrapper": "4.13.0" 1471 | } 1472 | }, 1473 | "node_modules/mjml-raw": { 1474 | "version": "4.13.0", 1475 | "resolved": "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.13.0.tgz", 1476 | "integrity": "sha512-JbBYxwX1a/zbqnCrlDCRNqov2xqUrMCaEdTHfqE2athj479aQXvLKFM20LilTMaClp/dR0yfvFLfFVrC5ej4FQ==", 1477 | "dependencies": { 1478 | "@babel/runtime": "^7.14.6", 1479 | "lodash": "^4.17.21", 1480 | "mjml-core": "4.13.0" 1481 | } 1482 | }, 1483 | "node_modules/mjml-section": { 1484 | "version": "4.13.0", 1485 | "resolved": "https://registry.npmjs.org/mjml-section/-/mjml-section-4.13.0.tgz", 1486 | "integrity": "sha512-BLcqlhavtRakKtzDQPLv6Ae4Jt4imYWq/P0jo+Sjk7tP4QifgVA2KEQOirPK5ZUqw/lvK7Afhcths5rXZ2ItnQ==", 1487 | "dependencies": { 1488 | "@babel/runtime": "^7.14.6", 1489 | "lodash": "^4.17.21", 1490 | "mjml-core": "4.13.0" 1491 | } 1492 | }, 1493 | "node_modules/mjml-social": { 1494 | "version": "4.13.0", 1495 | "resolved": "https://registry.npmjs.org/mjml-social/-/mjml-social-4.13.0.tgz", 1496 | "integrity": "sha512-zL2a7Wwsk8OXF0Bqu+1B3La1UPwdTMcEXptO8zdh2V5LL6Xb7Gfyvx6w0CmmBtG5IjyCtqaKy5wtrcpG9Hvjfg==", 1497 | "dependencies": { 1498 | "@babel/runtime": "^7.14.6", 1499 | "lodash": "^4.17.21", 1500 | "mjml-core": "4.13.0" 1501 | } 1502 | }, 1503 | "node_modules/mjml-spacer": { 1504 | "version": "4.13.0", 1505 | "resolved": "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.13.0.tgz", 1506 | "integrity": "sha512-Acw4QJ0MJ38W4IewXuMX7hLaW1BZaln+gEEuTfrv0xwPdTxX1ILqz4r+s9mYMxYkIDLWMCjBvXyQK6aWlid13A==", 1507 | "dependencies": { 1508 | "@babel/runtime": "^7.14.6", 1509 | "lodash": "^4.17.21", 1510 | "mjml-core": "4.13.0" 1511 | } 1512 | }, 1513 | "node_modules/mjml-table": { 1514 | "version": "4.13.0", 1515 | "resolved": "https://registry.npmjs.org/mjml-table/-/mjml-table-4.13.0.tgz", 1516 | "integrity": "sha512-UAWPVMaGReQhf776DFdiwdcJTIHTek3zzQ1pb+E7VlypEYgIpFvdUJ39UIiiflhqtdBATmHwKBOtePwU0MzFMg==", 1517 | "dependencies": { 1518 | "@babel/runtime": "^7.14.6", 1519 | "lodash": "^4.17.21", 1520 | "mjml-core": "4.13.0" 1521 | } 1522 | }, 1523 | "node_modules/mjml-text": { 1524 | "version": "4.13.0", 1525 | "resolved": "https://registry.npmjs.org/mjml-text/-/mjml-text-4.13.0.tgz", 1526 | "integrity": "sha512-uDuraaQFdu+6xfuigCimbeznnOnJfwRdcCL1lTBTusTuEvW/5Va6m2D3mnMeEpl+bp4+cxesXIz9st6A9pcg5A==", 1527 | "dependencies": { 1528 | "@babel/runtime": "^7.14.6", 1529 | "lodash": "^4.17.21", 1530 | "mjml-core": "4.13.0" 1531 | } 1532 | }, 1533 | "node_modules/mjml-validator": { 1534 | "version": "4.13.0", 1535 | "resolved": "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.13.0.tgz", 1536 | "integrity": "sha512-uURYfyQYtHJ6Qz/1A7/+E9ezfcoISoLZhYK3olsxKRViwaA2Mm8gy/J3yggZXnsUXWUns7Qymycm5LglLEIiQg==", 1537 | "dependencies": { 1538 | "@babel/runtime": "^7.14.6" 1539 | } 1540 | }, 1541 | "node_modules/mjml-wrapper": { 1542 | "version": "4.13.0", 1543 | "resolved": "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.13.0.tgz", 1544 | "integrity": "sha512-p/44JvHg04rAFR7QDImg8nZucEokIjFH6KJMHxsO0frJtLZ+IuakctzlZAADHsqiR52BwocDsXSa+o9SE2l6Ng==", 1545 | "dependencies": { 1546 | "@babel/runtime": "^7.14.6", 1547 | "lodash": "^4.17.21", 1548 | "mjml-core": "4.13.0", 1549 | "mjml-section": "4.13.0" 1550 | } 1551 | }, 1552 | "node_modules/no-case": { 1553 | "version": "2.3.2", 1554 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", 1555 | "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", 1556 | "dependencies": { 1557 | "lower-case": "^1.1.1" 1558 | } 1559 | }, 1560 | "node_modules/node-fetch": { 1561 | "version": "2.6.9", 1562 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 1563 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 1564 | "dependencies": { 1565 | "whatwg-url": "^5.0.0" 1566 | }, 1567 | "engines": { 1568 | "node": "4.x || >=6.0.0" 1569 | }, 1570 | "peerDependencies": { 1571 | "encoding": "^0.1.0" 1572 | }, 1573 | "peerDependenciesMeta": { 1574 | "encoding": { 1575 | "optional": true 1576 | } 1577 | } 1578 | }, 1579 | "node_modules/nodemailer": { 1580 | "version": "6.9.1", 1581 | "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.1.tgz", 1582 | "integrity": "sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==", 1583 | "engines": { 1584 | "node": ">=6.0.0" 1585 | } 1586 | }, 1587 | "node_modules/nopt": { 1588 | "version": "6.0.0", 1589 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", 1590 | "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", 1591 | "dependencies": { 1592 | "abbrev": "^1.0.0" 1593 | }, 1594 | "bin": { 1595 | "nopt": "bin/nopt.js" 1596 | }, 1597 | "engines": { 1598 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 1599 | } 1600 | }, 1601 | "node_modules/normalize-path": { 1602 | "version": "3.0.0", 1603 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1604 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1605 | "engines": { 1606 | "node": ">=0.10.0" 1607 | } 1608 | }, 1609 | "node_modules/nth-check": { 1610 | "version": "2.1.1", 1611 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 1612 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 1613 | "dependencies": { 1614 | "boolbase": "^1.0.0" 1615 | }, 1616 | "funding": { 1617 | "url": "https://github.com/fb55/nth-check?sponsor=1" 1618 | } 1619 | }, 1620 | "node_modules/once": { 1621 | "version": "1.4.0", 1622 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1623 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1624 | "dependencies": { 1625 | "wrappy": "1" 1626 | } 1627 | }, 1628 | "node_modules/param-case": { 1629 | "version": "2.1.1", 1630 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", 1631 | "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", 1632 | "dependencies": { 1633 | "no-case": "^2.2.0" 1634 | } 1635 | }, 1636 | "node_modules/parse5-htmlparser2-tree-adapter": { 1637 | "version": "6.0.1", 1638 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", 1639 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", 1640 | "dependencies": { 1641 | "parse5": "^6.0.1" 1642 | } 1643 | }, 1644 | "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { 1645 | "version": "6.0.1", 1646 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 1647 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 1648 | }, 1649 | "node_modules/path-is-absolute": { 1650 | "version": "1.0.1", 1651 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1652 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1653 | "engines": { 1654 | "node": ">=0.10.0" 1655 | } 1656 | }, 1657 | "node_modules/path-to-regexp": { 1658 | "version": "3.2.0", 1659 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", 1660 | "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", 1661 | "dev": true 1662 | }, 1663 | "node_modules/picocolors": { 1664 | "version": "1.0.0", 1665 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1666 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1667 | }, 1668 | "node_modules/picomatch": { 1669 | "version": "2.2.2", 1670 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1671 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1672 | "engines": { 1673 | "node": ">=8.6" 1674 | }, 1675 | "funding": { 1676 | "url": "https://github.com/sponsors/jonschlinkert" 1677 | } 1678 | }, 1679 | "node_modules/proto-list": { 1680 | "version": "1.2.4", 1681 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 1682 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" 1683 | }, 1684 | "node_modules/pseudomap": { 1685 | "version": "1.0.2", 1686 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1687 | "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" 1688 | }, 1689 | "node_modules/react": { 1690 | "version": "18.2.0", 1691 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 1692 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 1693 | "peer": true, 1694 | "dependencies": { 1695 | "loose-envify": "^1.1.0" 1696 | }, 1697 | "engines": { 1698 | "node": ">=0.10.0" 1699 | } 1700 | }, 1701 | "node_modules/react-dom": { 1702 | "version": "18.2.0", 1703 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 1704 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 1705 | "peer": true, 1706 | "dependencies": { 1707 | "loose-envify": "^1.1.0", 1708 | "scheduler": "^0.23.0" 1709 | }, 1710 | "peerDependencies": { 1711 | "react": "^18.2.0" 1712 | } 1713 | }, 1714 | "node_modules/readdirp": { 1715 | "version": "3.6.0", 1716 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1717 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1718 | "dependencies": { 1719 | "picomatch": "^2.2.1" 1720 | }, 1721 | "engines": { 1722 | "node": ">=8.10.0" 1723 | } 1724 | }, 1725 | "node_modules/reflect-metadata": { 1726 | "version": "0.1.13", 1727 | "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", 1728 | "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" 1729 | }, 1730 | "node_modules/regenerator-runtime": { 1731 | "version": "0.13.11", 1732 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", 1733 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" 1734 | }, 1735 | "node_modules/relateurl": { 1736 | "version": "0.2.7", 1737 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 1738 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", 1739 | "engines": { 1740 | "node": ">= 0.10" 1741 | } 1742 | }, 1743 | "node_modules/require-directory": { 1744 | "version": "2.1.1", 1745 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1746 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1747 | "engines": { 1748 | "node": ">=0.10.0" 1749 | } 1750 | }, 1751 | "node_modules/rxjs": { 1752 | "version": "7.8.0", 1753 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", 1754 | "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", 1755 | "dev": true, 1756 | "peer": true, 1757 | "dependencies": { 1758 | "tslib": "^2.1.0" 1759 | } 1760 | }, 1761 | "node_modules/scheduler": { 1762 | "version": "0.23.0", 1763 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 1764 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 1765 | "peer": true, 1766 | "dependencies": { 1767 | "loose-envify": "^1.1.0" 1768 | } 1769 | }, 1770 | "node_modules/semver": { 1771 | "version": "5.7.1", 1772 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1773 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1774 | "bin": { 1775 | "semver": "bin/semver" 1776 | } 1777 | }, 1778 | "node_modules/sigmund": { 1779 | "version": "1.0.1", 1780 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1781 | "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==" 1782 | }, 1783 | "node_modules/slick": { 1784 | "version": "1.12.2", 1785 | "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", 1786 | "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", 1787 | "engines": { 1788 | "node": "*" 1789 | } 1790 | }, 1791 | "node_modules/source-map": { 1792 | "version": "0.6.1", 1793 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1794 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1795 | "engines": { 1796 | "node": ">=0.10.0" 1797 | } 1798 | }, 1799 | "node_modules/string-width": { 1800 | "version": "4.2.0", 1801 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1802 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1803 | "dependencies": { 1804 | "emoji-regex": "^8.0.0", 1805 | "is-fullwidth-code-point": "^3.0.0", 1806 | "strip-ansi": "^6.0.0" 1807 | }, 1808 | "engines": { 1809 | "node": ">=8" 1810 | } 1811 | }, 1812 | "node_modules/strip-ansi": { 1813 | "version": "6.0.0", 1814 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1815 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1816 | "dependencies": { 1817 | "ansi-regex": "^5.0.0" 1818 | }, 1819 | "engines": { 1820 | "node": ">=8" 1821 | } 1822 | }, 1823 | "node_modules/to-regex-range": { 1824 | "version": "5.0.1", 1825 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1826 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1827 | "dependencies": { 1828 | "is-number": "^7.0.0" 1829 | }, 1830 | "engines": { 1831 | "node": ">=8.0" 1832 | } 1833 | }, 1834 | "node_modules/tr46": { 1835 | "version": "0.0.3", 1836 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1837 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1838 | }, 1839 | "node_modules/tslib": { 1840 | "version": "2.5.0", 1841 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 1842 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 1843 | }, 1844 | "node_modules/typescript": { 1845 | "version": "4.9.5", 1846 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", 1847 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 1848 | "dev": true, 1849 | "bin": { 1850 | "tsc": "bin/tsc", 1851 | "tsserver": "bin/tsserver" 1852 | }, 1853 | "engines": { 1854 | "node": ">=4.2.0" 1855 | } 1856 | }, 1857 | "node_modules/uglify-js": { 1858 | "version": "3.11.3", 1859 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.3.tgz", 1860 | "integrity": "sha512-wDRziHG94mNj2n3R864CvYw/+pc9y/RNImiTyrrf8BzgWn75JgFSwYvXrtZQMnMnOp/4UTrf3iCSQxSStPiByA==", 1861 | "bin": { 1862 | "uglifyjs": "bin/uglifyjs" 1863 | }, 1864 | "engines": { 1865 | "node": ">=0.8.0" 1866 | } 1867 | }, 1868 | "node_modules/uid": { 1869 | "version": "2.0.1", 1870 | "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.1.tgz", 1871 | "integrity": "sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==", 1872 | "dev": true, 1873 | "dependencies": { 1874 | "@lukeed/csprng": "^1.0.0" 1875 | }, 1876 | "engines": { 1877 | "node": ">=8" 1878 | } 1879 | }, 1880 | "node_modules/universalify": { 1881 | "version": "2.0.0", 1882 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 1883 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 1884 | "engines": { 1885 | "node": ">= 10.0.0" 1886 | } 1887 | }, 1888 | "node_modules/upper-case": { 1889 | "version": "1.1.3", 1890 | "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 1891 | "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" 1892 | }, 1893 | "node_modules/valid-data-url": { 1894 | "version": "3.0.1", 1895 | "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", 1896 | "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==", 1897 | "engines": { 1898 | "node": ">=10" 1899 | } 1900 | }, 1901 | "node_modules/web-resource-inliner": { 1902 | "version": "5.0.0", 1903 | "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-5.0.0.tgz", 1904 | "integrity": "sha512-AIihwH+ZmdHfkJm7BjSXiEClVt4zUFqX4YlFAzjL13wLtDuUneSaFvDBTbdYRecs35SiU7iNKbMnN+++wVfb6A==", 1905 | "dependencies": { 1906 | "ansi-colors": "^4.1.1", 1907 | "escape-goat": "^3.0.0", 1908 | "htmlparser2": "^4.0.0", 1909 | "mime": "^2.4.6", 1910 | "node-fetch": "^2.6.0", 1911 | "valid-data-url": "^3.0.0" 1912 | }, 1913 | "engines": { 1914 | "node": ">=10.0.0" 1915 | } 1916 | }, 1917 | "node_modules/web-resource-inliner/node_modules/domhandler": { 1918 | "version": "3.3.0", 1919 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 1920 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 1921 | "dependencies": { 1922 | "domelementtype": "^2.0.1" 1923 | }, 1924 | "engines": { 1925 | "node": ">= 4" 1926 | }, 1927 | "funding": { 1928 | "url": "https://github.com/fb55/domhandler?sponsor=1" 1929 | } 1930 | }, 1931 | "node_modules/web-resource-inliner/node_modules/htmlparser2": { 1932 | "version": "4.1.0", 1933 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", 1934 | "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", 1935 | "dependencies": { 1936 | "domelementtype": "^2.0.1", 1937 | "domhandler": "^3.0.0", 1938 | "domutils": "^2.0.0", 1939 | "entities": "^2.0.0" 1940 | } 1941 | }, 1942 | "node_modules/webidl-conversions": { 1943 | "version": "3.0.1", 1944 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1945 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1946 | }, 1947 | "node_modules/whatwg-url": { 1948 | "version": "5.0.0", 1949 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1950 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1951 | "dependencies": { 1952 | "tr46": "~0.0.3", 1953 | "webidl-conversions": "^3.0.0" 1954 | } 1955 | }, 1956 | "node_modules/wrappy": { 1957 | "version": "1.0.2", 1958 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1959 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1960 | }, 1961 | "node_modules/yallist": { 1962 | "version": "2.1.2", 1963 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1964 | "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" 1965 | } 1966 | }, 1967 | "dependencies": { 1968 | "@babel/runtime": { 1969 | "version": "7.21.0", 1970 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", 1971 | "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", 1972 | "requires": { 1973 | "regenerator-runtime": "^0.13.11" 1974 | } 1975 | }, 1976 | "@faire/mjml-react": { 1977 | "version": "3.1.2", 1978 | "resolved": "https://registry.npmjs.org/@faire/mjml-react/-/mjml-react-3.1.2.tgz", 1979 | "integrity": "sha512-VNSZ1B/Qd4t2jtDxOHggdbJwBk4gISCa8xUdiguYNgzhWvg0ltMOVJih/7qVwbNfOB77X4jQamjTMMokCtKYfw==", 1980 | "requires": { 1981 | "lodash.kebabcase": "^4.1.1" 1982 | } 1983 | }, 1984 | "@lukeed/csprng": { 1985 | "version": "1.0.1", 1986 | "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", 1987 | "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==", 1988 | "dev": true 1989 | }, 1990 | "@nestjs/common": { 1991 | "version": "9.3.9", 1992 | "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-9.3.9.tgz", 1993 | "integrity": "sha512-GshTD9Xz+wD2em6NyzU4NXw5IXMUmapgDgD+iuj6XL0258hvDwODmNk37mBBnZvTZlqER+krvIUKnS34etqF/A==", 1994 | "dev": true, 1995 | "requires": { 1996 | "iterare": "1.2.1", 1997 | "tslib": "2.5.0", 1998 | "uid": "2.0.1" 1999 | } 2000 | }, 2001 | "@nestjs/core": { 2002 | "version": "9.3.9", 2003 | "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.3.9.tgz", 2004 | "integrity": "sha512-9g1A1G9eirLXEpH21rc6dKb08zHc2+adhCRz8NW39hbejcsxxD72FApJzt4QBQAKvu862ixt/tdpStnFT7lOSw==", 2005 | "dev": true, 2006 | "requires": { 2007 | "@nuxtjs/opencollective": "0.3.2", 2008 | "fast-safe-stringify": "2.1.1", 2009 | "iterare": "1.2.1", 2010 | "path-to-regexp": "3.2.0", 2011 | "tslib": "2.5.0", 2012 | "uid": "2.0.1" 2013 | } 2014 | }, 2015 | "@nuxtjs/opencollective": { 2016 | "version": "0.3.2", 2017 | "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", 2018 | "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", 2019 | "dev": true, 2020 | "requires": { 2021 | "chalk": "^4.1.0", 2022 | "consola": "^2.15.0", 2023 | "node-fetch": "^2.6.1" 2024 | }, 2025 | "dependencies": { 2026 | "ansi-styles": { 2027 | "version": "4.3.0", 2028 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2029 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2030 | "dev": true, 2031 | "requires": { 2032 | "color-convert": "^2.0.1" 2033 | } 2034 | }, 2035 | "chalk": { 2036 | "version": "4.1.2", 2037 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2038 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2039 | "dev": true, 2040 | "requires": { 2041 | "ansi-styles": "^4.1.0", 2042 | "supports-color": "^7.1.0" 2043 | } 2044 | }, 2045 | "color-convert": { 2046 | "version": "2.0.1", 2047 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2048 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2049 | "dev": true, 2050 | "requires": { 2051 | "color-name": "~1.1.4" 2052 | } 2053 | }, 2054 | "color-name": { 2055 | "version": "1.1.4", 2056 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2057 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2058 | "dev": true 2059 | }, 2060 | "has-flag": { 2061 | "version": "4.0.0", 2062 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2063 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2064 | "dev": true 2065 | }, 2066 | "supports-color": { 2067 | "version": "7.2.0", 2068 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2069 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2070 | "dev": true, 2071 | "requires": { 2072 | "has-flag": "^4.0.0" 2073 | } 2074 | } 2075 | } 2076 | }, 2077 | "@types/mjml": { 2078 | "version": "4.7.0", 2079 | "resolved": "https://registry.npmjs.org/@types/mjml/-/mjml-4.7.0.tgz", 2080 | "integrity": "sha512-aWWu8Lxq2SexXGs+lBPRUpN3kFf0sDRo3Y4jz7BQ15cQvMfyZOadgFJsNlHmDqI6D2Qjx0PIK+1f9IMXgq9vTA==", 2081 | "dev": true, 2082 | "requires": { 2083 | "@types/mjml-core": "*" 2084 | } 2085 | }, 2086 | "@types/mjml-core": { 2087 | "version": "4.7.1", 2088 | "resolved": "https://registry.npmjs.org/@types/mjml-core/-/mjml-core-4.7.1.tgz", 2089 | "integrity": "sha512-k5IRafi93tyZBGF+0BTrcBDvG47OueI+Q7TC4V4UjGQn0AMVvL3Y+S26QF/UHMmMJW5r1hxLyv3StX2/+FatFg==", 2090 | "dev": true 2091 | }, 2092 | "@types/node": { 2093 | "version": "18.14.6", 2094 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.6.tgz", 2095 | "integrity": "sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==", 2096 | "dev": true 2097 | }, 2098 | "@types/nodemailer": { 2099 | "version": "6.4.7", 2100 | "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.7.tgz", 2101 | "integrity": "sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==", 2102 | "dev": true, 2103 | "requires": { 2104 | "@types/node": "*" 2105 | } 2106 | }, 2107 | "@types/prop-types": { 2108 | "version": "15.7.5", 2109 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 2110 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 2111 | "dev": true 2112 | }, 2113 | "@types/react": { 2114 | "version": "18.0.28", 2115 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", 2116 | "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", 2117 | "dev": true, 2118 | "requires": { 2119 | "@types/prop-types": "*", 2120 | "@types/scheduler": "*", 2121 | "csstype": "^3.0.2" 2122 | } 2123 | }, 2124 | "@types/scheduler": { 2125 | "version": "0.16.2", 2126 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", 2127 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", 2128 | "dev": true 2129 | }, 2130 | "abbrev": { 2131 | "version": "1.1.1", 2132 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 2133 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 2134 | }, 2135 | "ansi-colors": { 2136 | "version": "4.1.3", 2137 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", 2138 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" 2139 | }, 2140 | "ansi-regex": { 2141 | "version": "5.0.1", 2142 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2143 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2144 | }, 2145 | "anymatch": { 2146 | "version": "3.1.3", 2147 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 2148 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 2149 | "requires": { 2150 | "normalize-path": "^3.0.0", 2151 | "picomatch": "^2.0.4" 2152 | } 2153 | }, 2154 | "app-root-path": { 2155 | "version": "3.1.0", 2156 | "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", 2157 | "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==" 2158 | }, 2159 | "balanced-match": { 2160 | "version": "1.0.0", 2161 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 2162 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 2163 | }, 2164 | "binary-extensions": { 2165 | "version": "2.2.0", 2166 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2167 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 2168 | }, 2169 | "boolbase": { 2170 | "version": "1.0.0", 2171 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 2172 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" 2173 | }, 2174 | "brace-expansion": { 2175 | "version": "1.1.11", 2176 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2177 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2178 | "requires": { 2179 | "balanced-match": "^1.0.0", 2180 | "concat-map": "0.0.1" 2181 | } 2182 | }, 2183 | "braces": { 2184 | "version": "3.0.2", 2185 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2186 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2187 | "requires": { 2188 | "fill-range": "^7.0.1" 2189 | } 2190 | }, 2191 | "camel-case": { 2192 | "version": "3.0.0", 2193 | "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", 2194 | "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", 2195 | "requires": { 2196 | "no-case": "^2.2.0", 2197 | "upper-case": "^1.1.1" 2198 | } 2199 | }, 2200 | "cheerio": { 2201 | "version": "1.0.0-rc.10", 2202 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", 2203 | "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", 2204 | "requires": { 2205 | "cheerio-select": "^1.5.0", 2206 | "dom-serializer": "^1.3.2", 2207 | "domhandler": "^4.2.0", 2208 | "htmlparser2": "^6.1.0", 2209 | "parse5": "^6.0.1", 2210 | "parse5-htmlparser2-tree-adapter": "^6.0.1", 2211 | "tslib": "^2.2.0" 2212 | }, 2213 | "dependencies": { 2214 | "parse5": { 2215 | "version": "6.0.1", 2216 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 2217 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 2218 | } 2219 | } 2220 | }, 2221 | "cheerio-select": { 2222 | "version": "1.6.0", 2223 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", 2224 | "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", 2225 | "requires": { 2226 | "css-select": "^4.3.0", 2227 | "css-what": "^6.0.1", 2228 | "domelementtype": "^2.2.0", 2229 | "domhandler": "^4.3.1", 2230 | "domutils": "^2.8.0" 2231 | } 2232 | }, 2233 | "chokidar": { 2234 | "version": "3.5.3", 2235 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2236 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2237 | "requires": { 2238 | "anymatch": "~3.1.2", 2239 | "braces": "~3.0.2", 2240 | "fsevents": "~2.3.2", 2241 | "glob-parent": "~5.1.2", 2242 | "is-binary-path": "~2.1.0", 2243 | "is-glob": "~4.0.1", 2244 | "normalize-path": "~3.0.0", 2245 | "readdirp": "~3.6.0" 2246 | } 2247 | }, 2248 | "clean-css": { 2249 | "version": "4.2.4", 2250 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", 2251 | "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", 2252 | "requires": { 2253 | "source-map": "~0.6.0" 2254 | } 2255 | }, 2256 | "commander": { 2257 | "version": "2.20.3", 2258 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 2259 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 2260 | }, 2261 | "concat-map": { 2262 | "version": "0.0.1", 2263 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2264 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 2265 | }, 2266 | "config-chain": { 2267 | "version": "1.1.13", 2268 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", 2269 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", 2270 | "requires": { 2271 | "ini": "^1.3.4", 2272 | "proto-list": "~1.2.1" 2273 | } 2274 | }, 2275 | "consola": { 2276 | "version": "2.15.3", 2277 | "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", 2278 | "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", 2279 | "dev": true 2280 | }, 2281 | "css-select": { 2282 | "version": "4.3.0", 2283 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 2284 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 2285 | "requires": { 2286 | "boolbase": "^1.0.0", 2287 | "css-what": "^6.0.1", 2288 | "domhandler": "^4.3.1", 2289 | "domutils": "^2.8.0", 2290 | "nth-check": "^2.0.1" 2291 | } 2292 | }, 2293 | "css-what": { 2294 | "version": "6.1.0", 2295 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 2296 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" 2297 | }, 2298 | "csstype": { 2299 | "version": "3.1.1", 2300 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 2301 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", 2302 | "dev": true 2303 | }, 2304 | "detect-node": { 2305 | "version": "2.0.4", 2306 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 2307 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" 2308 | }, 2309 | "dom-serializer": { 2310 | "version": "1.4.1", 2311 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 2312 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 2313 | "requires": { 2314 | "domelementtype": "^2.0.1", 2315 | "domhandler": "^4.2.0", 2316 | "entities": "^2.0.0" 2317 | } 2318 | }, 2319 | "domelementtype": { 2320 | "version": "2.3.0", 2321 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 2322 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" 2323 | }, 2324 | "domhandler": { 2325 | "version": "4.3.1", 2326 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 2327 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 2328 | "requires": { 2329 | "domelementtype": "^2.2.0" 2330 | } 2331 | }, 2332 | "domutils": { 2333 | "version": "2.8.0", 2334 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 2335 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 2336 | "requires": { 2337 | "dom-serializer": "^1.0.1", 2338 | "domelementtype": "^2.2.0", 2339 | "domhandler": "^4.2.0" 2340 | } 2341 | }, 2342 | "editorconfig": { 2343 | "version": "0.15.3", 2344 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", 2345 | "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", 2346 | "requires": { 2347 | "commander": "^2.19.0", 2348 | "lru-cache": "^4.1.5", 2349 | "semver": "^5.6.0", 2350 | "sigmund": "^1.0.1" 2351 | } 2352 | }, 2353 | "emoji-regex": { 2354 | "version": "8.0.0", 2355 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2356 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2357 | }, 2358 | "entities": { 2359 | "version": "2.2.0", 2360 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 2361 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" 2362 | }, 2363 | "escalade": { 2364 | "version": "3.1.1", 2365 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 2366 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 2367 | }, 2368 | "escape-goat": { 2369 | "version": "3.0.0", 2370 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", 2371 | "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==" 2372 | }, 2373 | "fast-safe-stringify": { 2374 | "version": "2.1.1", 2375 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", 2376 | "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", 2377 | "dev": true 2378 | }, 2379 | "fill-range": { 2380 | "version": "7.0.1", 2381 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2382 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2383 | "requires": { 2384 | "to-regex-range": "^5.0.1" 2385 | } 2386 | }, 2387 | "fs-extra": { 2388 | "version": "11.1.0", 2389 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", 2390 | "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", 2391 | "requires": { 2392 | "graceful-fs": "^4.2.0", 2393 | "jsonfile": "^6.0.1", 2394 | "universalify": "^2.0.0" 2395 | } 2396 | }, 2397 | "fs.realpath": { 2398 | "version": "1.0.0", 2399 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2400 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 2401 | }, 2402 | "fsevents": { 2403 | "version": "2.3.2", 2404 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2405 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2406 | "optional": true 2407 | }, 2408 | "get-caller-file": { 2409 | "version": "2.0.5", 2410 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 2411 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 2412 | }, 2413 | "glob": { 2414 | "version": "7.1.6", 2415 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 2416 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 2417 | "requires": { 2418 | "fs.realpath": "^1.0.0", 2419 | "inflight": "^1.0.4", 2420 | "inherits": "2", 2421 | "minimatch": "^3.0.4", 2422 | "once": "^1.3.0", 2423 | "path-is-absolute": "^1.0.0" 2424 | } 2425 | }, 2426 | "glob-parent": { 2427 | "version": "5.1.2", 2428 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2429 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2430 | "requires": { 2431 | "is-glob": "^4.0.1" 2432 | } 2433 | }, 2434 | "graceful-fs": { 2435 | "version": "4.2.4", 2436 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 2437 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 2438 | }, 2439 | "he": { 2440 | "version": "1.2.0", 2441 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 2442 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 2443 | }, 2444 | "html-minifier": { 2445 | "version": "4.0.0", 2446 | "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", 2447 | "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", 2448 | "requires": { 2449 | "camel-case": "^3.0.0", 2450 | "clean-css": "^4.2.1", 2451 | "commander": "^2.19.0", 2452 | "he": "^1.2.0", 2453 | "param-case": "^2.1.1", 2454 | "relateurl": "^0.2.7", 2455 | "uglify-js": "^3.5.1" 2456 | } 2457 | }, 2458 | "htmlparser2": { 2459 | "version": "6.1.0", 2460 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", 2461 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", 2462 | "requires": { 2463 | "domelementtype": "^2.0.1", 2464 | "domhandler": "^4.0.0", 2465 | "domutils": "^2.5.2", 2466 | "entities": "^2.0.0" 2467 | } 2468 | }, 2469 | "inflight": { 2470 | "version": "1.0.6", 2471 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2472 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2473 | "requires": { 2474 | "once": "^1.3.0", 2475 | "wrappy": "1" 2476 | } 2477 | }, 2478 | "inherits": { 2479 | "version": "2.0.4", 2480 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2481 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 2482 | }, 2483 | "ini": { 2484 | "version": "1.3.8", 2485 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 2486 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 2487 | }, 2488 | "is-binary-path": { 2489 | "version": "2.1.0", 2490 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2491 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2492 | "requires": { 2493 | "binary-extensions": "^2.0.0" 2494 | } 2495 | }, 2496 | "is-extglob": { 2497 | "version": "2.1.1", 2498 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2499 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 2500 | }, 2501 | "is-fullwidth-code-point": { 2502 | "version": "3.0.0", 2503 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2504 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 2505 | }, 2506 | "is-glob": { 2507 | "version": "4.0.3", 2508 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2509 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2510 | "requires": { 2511 | "is-extglob": "^2.1.1" 2512 | } 2513 | }, 2514 | "is-number": { 2515 | "version": "7.0.0", 2516 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2517 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 2518 | }, 2519 | "iterare": { 2520 | "version": "1.2.1", 2521 | "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", 2522 | "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", 2523 | "dev": true 2524 | }, 2525 | "js-beautify": { 2526 | "version": "1.14.7", 2527 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.7.tgz", 2528 | "integrity": "sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A==", 2529 | "requires": { 2530 | "config-chain": "^1.1.13", 2531 | "editorconfig": "^0.15.3", 2532 | "glob": "^8.0.3", 2533 | "nopt": "^6.0.0" 2534 | }, 2535 | "dependencies": { 2536 | "brace-expansion": { 2537 | "version": "2.0.1", 2538 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 2539 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 2540 | "requires": { 2541 | "balanced-match": "^1.0.0" 2542 | } 2543 | }, 2544 | "glob": { 2545 | "version": "8.1.0", 2546 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 2547 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 2548 | "requires": { 2549 | "fs.realpath": "^1.0.0", 2550 | "inflight": "^1.0.4", 2551 | "inherits": "2", 2552 | "minimatch": "^5.0.1", 2553 | "once": "^1.3.0" 2554 | } 2555 | }, 2556 | "minimatch": { 2557 | "version": "5.1.6", 2558 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 2559 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 2560 | "requires": { 2561 | "brace-expansion": "^2.0.1" 2562 | } 2563 | } 2564 | } 2565 | }, 2566 | "js-tokens": { 2567 | "version": "4.0.0", 2568 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2569 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2570 | "peer": true 2571 | }, 2572 | "jsonfile": { 2573 | "version": "6.1.0", 2574 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 2575 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 2576 | "requires": { 2577 | "graceful-fs": "^4.1.6", 2578 | "universalify": "^2.0.0" 2579 | } 2580 | }, 2581 | "juice": { 2582 | "version": "7.0.0", 2583 | "resolved": "https://registry.npmjs.org/juice/-/juice-7.0.0.tgz", 2584 | "integrity": "sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==", 2585 | "requires": { 2586 | "cheerio": "^1.0.0-rc.3", 2587 | "commander": "^5.1.0", 2588 | "mensch": "^0.3.4", 2589 | "slick": "^1.12.2", 2590 | "web-resource-inliner": "^5.0.0" 2591 | }, 2592 | "dependencies": { 2593 | "commander": { 2594 | "version": "5.1.0", 2595 | "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", 2596 | "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" 2597 | } 2598 | } 2599 | }, 2600 | "lodash": { 2601 | "version": "4.17.21", 2602 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2603 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 2604 | }, 2605 | "lodash.kebabcase": { 2606 | "version": "4.1.1", 2607 | "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", 2608 | "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==" 2609 | }, 2610 | "loose-envify": { 2611 | "version": "1.4.0", 2612 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2613 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2614 | "peer": true, 2615 | "requires": { 2616 | "js-tokens": "^3.0.0 || ^4.0.0" 2617 | } 2618 | }, 2619 | "lower-case": { 2620 | "version": "1.1.4", 2621 | "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", 2622 | "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" 2623 | }, 2624 | "lru-cache": { 2625 | "version": "4.1.5", 2626 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 2627 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 2628 | "requires": { 2629 | "pseudomap": "^1.0.2", 2630 | "yallist": "^2.1.2" 2631 | } 2632 | }, 2633 | "mensch": { 2634 | "version": "0.3.4", 2635 | "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", 2636 | "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" 2637 | }, 2638 | "mime": { 2639 | "version": "2.6.0", 2640 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 2641 | "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" 2642 | }, 2643 | "minimatch": { 2644 | "version": "3.1.2", 2645 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2646 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2647 | "requires": { 2648 | "brace-expansion": "^1.1.7" 2649 | } 2650 | }, 2651 | "mjml": { 2652 | "version": "4.13.0", 2653 | "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.13.0.tgz", 2654 | "integrity": "sha512-OnFKESouLshz8DPFSb6M/dE8GkhiJnoy6LAam5TiLA1anAj24yQ2ZH388LtQoEkvTisqwiTmc9ejDh5ctnFaJQ==", 2655 | "requires": { 2656 | "@babel/runtime": "^7.14.6", 2657 | "mjml-cli": "4.13.0", 2658 | "mjml-core": "4.13.0", 2659 | "mjml-migrate": "4.13.0", 2660 | "mjml-preset-core": "4.13.0", 2661 | "mjml-validator": "4.13.0" 2662 | } 2663 | }, 2664 | "mjml-accordion": { 2665 | "version": "4.13.0", 2666 | "resolved": "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.13.0.tgz", 2667 | "integrity": "sha512-E3yihZW5Oq2p+sWOcr8kWeRTROmiTYOGxB4IOxW/jTycdY07N3FX3e6vuh7Fv3rryHEUaydUQYto3ICVyctI7w==", 2668 | "requires": { 2669 | "@babel/runtime": "^7.14.6", 2670 | "lodash": "^4.17.21", 2671 | "mjml-core": "4.13.0" 2672 | } 2673 | }, 2674 | "mjml-body": { 2675 | "version": "4.13.0", 2676 | "resolved": "https://registry.npmjs.org/mjml-body/-/mjml-body-4.13.0.tgz", 2677 | "integrity": "sha512-S4HgwAuO9dEsyX9sr6WBf9/xr+H2ASVaLn22aurJm1S2Lvc1wifLPYBQgFmNdCjaesTCNtOMUDpG+Rbnavyaqg==", 2678 | "requires": { 2679 | "@babel/runtime": "^7.14.6", 2680 | "lodash": "^4.17.21", 2681 | "mjml-core": "4.13.0" 2682 | } 2683 | }, 2684 | "mjml-button": { 2685 | "version": "4.13.0", 2686 | "resolved": "https://registry.npmjs.org/mjml-button/-/mjml-button-4.13.0.tgz", 2687 | "integrity": "sha512-3y8IAHCCxh7ESHh1aOOqobZKUgyNxOKAGQ9TlJoyaLpsKUFzkN8nmrD0KXF0ADSuzvhMZ1CdRIJuZ5mjv2TwWQ==", 2688 | "requires": { 2689 | "@babel/runtime": "^7.14.6", 2690 | "lodash": "^4.17.21", 2691 | "mjml-core": "4.13.0" 2692 | } 2693 | }, 2694 | "mjml-carousel": { 2695 | "version": "4.13.0", 2696 | "resolved": "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.13.0.tgz", 2697 | "integrity": "sha512-ORSY5bEYlMlrWSIKI/lN0Tz3uGltWAjG8DQl2Yr3pwjwOaIzGE+kozrDf+T9xItfiIIbvKajef1dg7B7XgP0zg==", 2698 | "requires": { 2699 | "@babel/runtime": "^7.14.6", 2700 | "lodash": "^4.17.21", 2701 | "mjml-core": "4.13.0" 2702 | } 2703 | }, 2704 | "mjml-cli": { 2705 | "version": "4.13.0", 2706 | "resolved": "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.13.0.tgz", 2707 | "integrity": "sha512-kAZxpH0QqlTF/CcLzELgKw1ljKRxrmWJ310CJQhbPAxHvwQ/nIb+q82U+zRJAelRPPKjnOb+hSrMRqTgk9rH3w==", 2708 | "requires": { 2709 | "@babel/runtime": "^7.14.6", 2710 | "chokidar": "^3.0.0", 2711 | "glob": "^7.1.1", 2712 | "html-minifier": "^4.0.0", 2713 | "js-beautify": "^1.6.14", 2714 | "lodash": "^4.17.21", 2715 | "mjml-core": "4.13.0", 2716 | "mjml-migrate": "4.13.0", 2717 | "mjml-parser-xml": "4.13.0", 2718 | "mjml-validator": "4.13.0", 2719 | "yargs": "^16.1.0" 2720 | }, 2721 | "dependencies": { 2722 | "ansi-styles": { 2723 | "version": "4.3.0", 2724 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2725 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2726 | "requires": { 2727 | "color-convert": "^2.0.1" 2728 | } 2729 | }, 2730 | "cliui": { 2731 | "version": "7.0.4", 2732 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2733 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2734 | "requires": { 2735 | "string-width": "^4.2.0", 2736 | "strip-ansi": "^6.0.0", 2737 | "wrap-ansi": "^7.0.0" 2738 | } 2739 | }, 2740 | "color-convert": { 2741 | "version": "2.0.1", 2742 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2743 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2744 | "requires": { 2745 | "color-name": "~1.1.4" 2746 | } 2747 | }, 2748 | "color-name": { 2749 | "version": "1.1.4", 2750 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2751 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2752 | }, 2753 | "wrap-ansi": { 2754 | "version": "7.0.0", 2755 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2756 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2757 | "requires": { 2758 | "ansi-styles": "^4.0.0", 2759 | "string-width": "^4.1.0", 2760 | "strip-ansi": "^6.0.0" 2761 | } 2762 | }, 2763 | "y18n": { 2764 | "version": "5.0.8", 2765 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2766 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 2767 | }, 2768 | "yargs": { 2769 | "version": "16.2.0", 2770 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2771 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2772 | "requires": { 2773 | "cliui": "^7.0.2", 2774 | "escalade": "^3.1.1", 2775 | "get-caller-file": "^2.0.5", 2776 | "require-directory": "^2.1.1", 2777 | "string-width": "^4.2.0", 2778 | "y18n": "^5.0.5", 2779 | "yargs-parser": "^20.2.2" 2780 | } 2781 | }, 2782 | "yargs-parser": { 2783 | "version": "20.2.9", 2784 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 2785 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 2786 | } 2787 | } 2788 | }, 2789 | "mjml-column": { 2790 | "version": "4.13.0", 2791 | "resolved": "https://registry.npmjs.org/mjml-column/-/mjml-column-4.13.0.tgz", 2792 | "integrity": "sha512-O8FrWKK/bCy9XpKxrKRYWNdgWNaVd4TK4RqMeVI/I70IbnYnc1uf15jnsPMxCBSbT+NyXyk8k7fn099797uwpw==", 2793 | "requires": { 2794 | "@babel/runtime": "^7.14.6", 2795 | "lodash": "^4.17.21", 2796 | "mjml-core": "4.13.0" 2797 | } 2798 | }, 2799 | "mjml-core": { 2800 | "version": "4.13.0", 2801 | "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-4.13.0.tgz", 2802 | "integrity": "sha512-kU5AoVTlZaXR/EDi3ix66xpzUe+kScYus71lBH/wo/B+LZW70GHE1AYWtsog5oJp1MuTHpMFTNuBD/wePeEgWg==", 2803 | "requires": { 2804 | "@babel/runtime": "^7.14.6", 2805 | "cheerio": "1.0.0-rc.10", 2806 | "detect-node": "2.0.4", 2807 | "html-minifier": "^4.0.0", 2808 | "js-beautify": "^1.6.14", 2809 | "juice": "^7.0.0", 2810 | "lodash": "^4.17.21", 2811 | "mjml-migrate": "4.13.0", 2812 | "mjml-parser-xml": "4.13.0", 2813 | "mjml-validator": "4.13.0" 2814 | } 2815 | }, 2816 | "mjml-divider": { 2817 | "version": "4.13.0", 2818 | "resolved": "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.13.0.tgz", 2819 | "integrity": "sha512-ooPCwfmxEC+wJduqObYezMp7W5UCHjL9Y1LPB5FGna2FrOejgfd6Ix3ij8Wrmycmlol7E2N4D7c5NDH5DbRCJg==", 2820 | "requires": { 2821 | "@babel/runtime": "^7.14.6", 2822 | "lodash": "^4.17.21", 2823 | "mjml-core": "4.13.0" 2824 | } 2825 | }, 2826 | "mjml-group": { 2827 | "version": "4.13.0", 2828 | "resolved": "https://registry.npmjs.org/mjml-group/-/mjml-group-4.13.0.tgz", 2829 | "integrity": "sha512-U7E8m8aaoAE/dMqjqXPjjrKcwO36B4cquAy9ASldECrIZJBcpFYO6eYf5yLXrNCUM2P0id8pgVjrUq23s00L7Q==", 2830 | "requires": { 2831 | "@babel/runtime": "^7.14.6", 2832 | "lodash": "^4.17.21", 2833 | "mjml-core": "4.13.0" 2834 | } 2835 | }, 2836 | "mjml-head": { 2837 | "version": "4.13.0", 2838 | "resolved": "https://registry.npmjs.org/mjml-head/-/mjml-head-4.13.0.tgz", 2839 | "integrity": "sha512-sL2qQuoVALXBCiemu4DPo9geDr8DuUdXVJxm+4nd6k5jpLCfSDmFlNhgSsLPzsYn7VEac3/sxsjLtomQ+6/BHg==", 2840 | "requires": { 2841 | "@babel/runtime": "^7.14.6", 2842 | "lodash": "^4.17.21", 2843 | "mjml-core": "4.13.0" 2844 | } 2845 | }, 2846 | "mjml-head-attributes": { 2847 | "version": "4.13.0", 2848 | "resolved": "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.13.0.tgz", 2849 | "integrity": "sha512-haggCafno+0lQylxJStkINCVCPMwfTpwE6yjCHeGOpQl/TkoNmjNkDr7DEEbNTZbt4Ekg070lQFn7clDy38EoA==", 2850 | "requires": { 2851 | "@babel/runtime": "^7.14.6", 2852 | "lodash": "^4.17.21", 2853 | "mjml-core": "4.13.0" 2854 | } 2855 | }, 2856 | "mjml-head-breakpoint": { 2857 | "version": "4.13.0", 2858 | "resolved": "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.13.0.tgz", 2859 | "integrity": "sha512-D2iPDeUKQK1+rYSNa2HGOvgfPxZhNyndTG0iBEb/FxdGge2hbeDCZEN0mwDYE3wWB+qSBqlCuMI+Vr4pEjZbKg==", 2860 | "requires": { 2861 | "@babel/runtime": "^7.14.6", 2862 | "lodash": "^4.17.21", 2863 | "mjml-core": "4.13.0" 2864 | } 2865 | }, 2866 | "mjml-head-font": { 2867 | "version": "4.13.0", 2868 | "resolved": "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.13.0.tgz", 2869 | "integrity": "sha512-mYn8aWnbrEap5vX2b4662hkUv6WifcYzYn++Yi6OHrJQi55LpzcU+myAGpfQEXXrpU8vGwExMTFKsJq5n2Kaow==", 2870 | "requires": { 2871 | "@babel/runtime": "^7.14.6", 2872 | "lodash": "^4.17.21", 2873 | "mjml-core": "4.13.0" 2874 | } 2875 | }, 2876 | "mjml-head-html-attributes": { 2877 | "version": "4.13.0", 2878 | "resolved": "https://registry.npmjs.org/mjml-head-html-attributes/-/mjml-head-html-attributes-4.13.0.tgz", 2879 | "integrity": "sha512-m30Oro297+18Zou/1qYjagtmCOWtYXeoS38OABQ5zOSzMItE3TcZI9JNcOueIIWIyFCETe8StrTAKcQ2GHwsDw==", 2880 | "requires": { 2881 | "@babel/runtime": "^7.14.6", 2882 | "lodash": "^4.17.21", 2883 | "mjml-core": "4.13.0" 2884 | } 2885 | }, 2886 | "mjml-head-preview": { 2887 | "version": "4.13.0", 2888 | "resolved": "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.13.0.tgz", 2889 | "integrity": "sha512-v0K/NocjFCbaoF/0IMVNmiqov91HxqT07vNTEl0Bt9lKFrTKVC01m1S4K7AB78T/bEeJ/HwmNjr1+TMtVNGGow==", 2890 | "requires": { 2891 | "@babel/runtime": "^7.14.6", 2892 | "lodash": "^4.17.21", 2893 | "mjml-core": "4.13.0" 2894 | } 2895 | }, 2896 | "mjml-head-style": { 2897 | "version": "4.13.0", 2898 | "resolved": "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.13.0.tgz", 2899 | "integrity": "sha512-tBa33GL9Atn5bAM2UwE+uxv4rI29WgX/e5lXX+5GWlsb4thmiN6rxpFTNqBqWbBNRbZk4UEZF78M7Da8xC1ZGQ==", 2900 | "requires": { 2901 | "@babel/runtime": "^7.14.6", 2902 | "lodash": "^4.17.21", 2903 | "mjml-core": "4.13.0" 2904 | } 2905 | }, 2906 | "mjml-head-title": { 2907 | "version": "4.13.0", 2908 | "resolved": "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.13.0.tgz", 2909 | "integrity": "sha512-Mq0bjuZXJlwxfVcjuYihQcigZSDTKeQaG3nORR1D0jsOH2BXU4XgUK1UOcTXn2qCBIfRoIMq7rfzYs+L0CRhdw==", 2910 | "requires": { 2911 | "@babel/runtime": "^7.14.6", 2912 | "lodash": "^4.17.21", 2913 | "mjml-core": "4.13.0" 2914 | } 2915 | }, 2916 | "mjml-hero": { 2917 | "version": "4.13.0", 2918 | "resolved": "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.13.0.tgz", 2919 | "integrity": "sha512-aWEOScdrhyjwdKBWG4XQaElRHP8LU5PtktkpMeBXa4yxrxNs25qRnDqMNkjSrnnmFKWZmQ166tfboY6RBNf0UA==", 2920 | "requires": { 2921 | "@babel/runtime": "^7.14.6", 2922 | "lodash": "^4.17.21", 2923 | "mjml-core": "4.13.0" 2924 | } 2925 | }, 2926 | "mjml-image": { 2927 | "version": "4.13.0", 2928 | "resolved": "https://registry.npmjs.org/mjml-image/-/mjml-image-4.13.0.tgz", 2929 | "integrity": "sha512-agMmm2wRZTIrKwrUnYFlnAbtrKYSP0R2en+Vf92HPspAwmaw3/AeOW/QxmSiMhfGf+xsEJyzVvR/nd33jbT3sg==", 2930 | "requires": { 2931 | "@babel/runtime": "^7.14.6", 2932 | "lodash": "^4.17.21", 2933 | "mjml-core": "4.13.0" 2934 | } 2935 | }, 2936 | "mjml-migrate": { 2937 | "version": "4.13.0", 2938 | "resolved": "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.13.0.tgz", 2939 | "integrity": "sha512-I1euHiAyNpaz+B5vH+Z4T+hg/YtI5p3PqQ3/zTLv8gi24V6BILjTaftWhH5+3R/gQkQhH0NUaWNnRmds+Mq5DQ==", 2940 | "requires": { 2941 | "@babel/runtime": "^7.14.6", 2942 | "js-beautify": "^1.6.14", 2943 | "lodash": "^4.17.21", 2944 | "mjml-core": "4.13.0", 2945 | "mjml-parser-xml": "4.13.0", 2946 | "yargs": "^16.1.0" 2947 | }, 2948 | "dependencies": { 2949 | "ansi-styles": { 2950 | "version": "4.3.0", 2951 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2952 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2953 | "requires": { 2954 | "color-convert": "^2.0.1" 2955 | } 2956 | }, 2957 | "cliui": { 2958 | "version": "7.0.4", 2959 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2960 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2961 | "requires": { 2962 | "string-width": "^4.2.0", 2963 | "strip-ansi": "^6.0.0", 2964 | "wrap-ansi": "^7.0.0" 2965 | } 2966 | }, 2967 | "color-convert": { 2968 | "version": "2.0.1", 2969 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2970 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2971 | "requires": { 2972 | "color-name": "~1.1.4" 2973 | } 2974 | }, 2975 | "color-name": { 2976 | "version": "1.1.4", 2977 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2978 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2979 | }, 2980 | "wrap-ansi": { 2981 | "version": "7.0.0", 2982 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2983 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2984 | "requires": { 2985 | "ansi-styles": "^4.0.0", 2986 | "string-width": "^4.1.0", 2987 | "strip-ansi": "^6.0.0" 2988 | } 2989 | }, 2990 | "y18n": { 2991 | "version": "5.0.8", 2992 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2993 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 2994 | }, 2995 | "yargs": { 2996 | "version": "16.2.0", 2997 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2998 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2999 | "requires": { 3000 | "cliui": "^7.0.2", 3001 | "escalade": "^3.1.1", 3002 | "get-caller-file": "^2.0.5", 3003 | "require-directory": "^2.1.1", 3004 | "string-width": "^4.2.0", 3005 | "y18n": "^5.0.5", 3006 | "yargs-parser": "^20.2.2" 3007 | } 3008 | }, 3009 | "yargs-parser": { 3010 | "version": "20.2.9", 3011 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 3012 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 3013 | } 3014 | } 3015 | }, 3016 | "mjml-navbar": { 3017 | "version": "4.13.0", 3018 | "resolved": "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.13.0.tgz", 3019 | "integrity": "sha512-0Oqyyk+OdtXfsjswRb/7Ql1UOjN4MbqFPKoyltJqtj+11MRpF5+Wjd74Dj9H7l81GFwkIB9OaP+ZMiD+TPECgg==", 3020 | "requires": { 3021 | "@babel/runtime": "^7.14.6", 3022 | "lodash": "^4.17.21", 3023 | "mjml-core": "4.13.0" 3024 | } 3025 | }, 3026 | "mjml-parser-xml": { 3027 | "version": "4.13.0", 3028 | "resolved": "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.13.0.tgz", 3029 | "integrity": "sha512-phljtI8DaW++q0aybR/Ykv9zCyP/jCFypxVNo26r2IQo//VYXyc7JuLZZT8N/LAI8lZcwbTVxQPBzJTmZ5IfwQ==", 3030 | "requires": { 3031 | "@babel/runtime": "^7.14.6", 3032 | "detect-node": "2.0.4", 3033 | "htmlparser2": "^4.1.0", 3034 | "lodash": "^4.17.15" 3035 | }, 3036 | "dependencies": { 3037 | "domhandler": { 3038 | "version": "3.3.0", 3039 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 3040 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 3041 | "requires": { 3042 | "domelementtype": "^2.0.1" 3043 | } 3044 | }, 3045 | "htmlparser2": { 3046 | "version": "4.1.0", 3047 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", 3048 | "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", 3049 | "requires": { 3050 | "domelementtype": "^2.0.1", 3051 | "domhandler": "^3.0.0", 3052 | "domutils": "^2.0.0", 3053 | "entities": "^2.0.0" 3054 | } 3055 | } 3056 | } 3057 | }, 3058 | "mjml-preset-core": { 3059 | "version": "4.13.0", 3060 | "resolved": "https://registry.npmjs.org/mjml-preset-core/-/mjml-preset-core-4.13.0.tgz", 3061 | "integrity": "sha512-gxzYaKkvUrHuzT1oqjEPSDtdmgEnN99Hf5f1r2CR5aMOB1x66EA3T8ATvF1o7qrBTVV4KMVlQem3IubMSYJZRw==", 3062 | "requires": { 3063 | "@babel/runtime": "^7.14.6", 3064 | "mjml-accordion": "4.13.0", 3065 | "mjml-body": "4.13.0", 3066 | "mjml-button": "4.13.0", 3067 | "mjml-carousel": "4.13.0", 3068 | "mjml-column": "4.13.0", 3069 | "mjml-divider": "4.13.0", 3070 | "mjml-group": "4.13.0", 3071 | "mjml-head": "4.13.0", 3072 | "mjml-head-attributes": "4.13.0", 3073 | "mjml-head-breakpoint": "4.13.0", 3074 | "mjml-head-font": "4.13.0", 3075 | "mjml-head-html-attributes": "4.13.0", 3076 | "mjml-head-preview": "4.13.0", 3077 | "mjml-head-style": "4.13.0", 3078 | "mjml-head-title": "4.13.0", 3079 | "mjml-hero": "4.13.0", 3080 | "mjml-image": "4.13.0", 3081 | "mjml-navbar": "4.13.0", 3082 | "mjml-raw": "4.13.0", 3083 | "mjml-section": "4.13.0", 3084 | "mjml-social": "4.13.0", 3085 | "mjml-spacer": "4.13.0", 3086 | "mjml-table": "4.13.0", 3087 | "mjml-text": "4.13.0", 3088 | "mjml-wrapper": "4.13.0" 3089 | } 3090 | }, 3091 | "mjml-raw": { 3092 | "version": "4.13.0", 3093 | "resolved": "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.13.0.tgz", 3094 | "integrity": "sha512-JbBYxwX1a/zbqnCrlDCRNqov2xqUrMCaEdTHfqE2athj479aQXvLKFM20LilTMaClp/dR0yfvFLfFVrC5ej4FQ==", 3095 | "requires": { 3096 | "@babel/runtime": "^7.14.6", 3097 | "lodash": "^4.17.21", 3098 | "mjml-core": "4.13.0" 3099 | } 3100 | }, 3101 | "mjml-section": { 3102 | "version": "4.13.0", 3103 | "resolved": "https://registry.npmjs.org/mjml-section/-/mjml-section-4.13.0.tgz", 3104 | "integrity": "sha512-BLcqlhavtRakKtzDQPLv6Ae4Jt4imYWq/P0jo+Sjk7tP4QifgVA2KEQOirPK5ZUqw/lvK7Afhcths5rXZ2ItnQ==", 3105 | "requires": { 3106 | "@babel/runtime": "^7.14.6", 3107 | "lodash": "^4.17.21", 3108 | "mjml-core": "4.13.0" 3109 | } 3110 | }, 3111 | "mjml-social": { 3112 | "version": "4.13.0", 3113 | "resolved": "https://registry.npmjs.org/mjml-social/-/mjml-social-4.13.0.tgz", 3114 | "integrity": "sha512-zL2a7Wwsk8OXF0Bqu+1B3La1UPwdTMcEXptO8zdh2V5LL6Xb7Gfyvx6w0CmmBtG5IjyCtqaKy5wtrcpG9Hvjfg==", 3115 | "requires": { 3116 | "@babel/runtime": "^7.14.6", 3117 | "lodash": "^4.17.21", 3118 | "mjml-core": "4.13.0" 3119 | } 3120 | }, 3121 | "mjml-spacer": { 3122 | "version": "4.13.0", 3123 | "resolved": "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.13.0.tgz", 3124 | "integrity": "sha512-Acw4QJ0MJ38W4IewXuMX7hLaW1BZaln+gEEuTfrv0xwPdTxX1ILqz4r+s9mYMxYkIDLWMCjBvXyQK6aWlid13A==", 3125 | "requires": { 3126 | "@babel/runtime": "^7.14.6", 3127 | "lodash": "^4.17.21", 3128 | "mjml-core": "4.13.0" 3129 | } 3130 | }, 3131 | "mjml-table": { 3132 | "version": "4.13.0", 3133 | "resolved": "https://registry.npmjs.org/mjml-table/-/mjml-table-4.13.0.tgz", 3134 | "integrity": "sha512-UAWPVMaGReQhf776DFdiwdcJTIHTek3zzQ1pb+E7VlypEYgIpFvdUJ39UIiiflhqtdBATmHwKBOtePwU0MzFMg==", 3135 | "requires": { 3136 | "@babel/runtime": "^7.14.6", 3137 | "lodash": "^4.17.21", 3138 | "mjml-core": "4.13.0" 3139 | } 3140 | }, 3141 | "mjml-text": { 3142 | "version": "4.13.0", 3143 | "resolved": "https://registry.npmjs.org/mjml-text/-/mjml-text-4.13.0.tgz", 3144 | "integrity": "sha512-uDuraaQFdu+6xfuigCimbeznnOnJfwRdcCL1lTBTusTuEvW/5Va6m2D3mnMeEpl+bp4+cxesXIz9st6A9pcg5A==", 3145 | "requires": { 3146 | "@babel/runtime": "^7.14.6", 3147 | "lodash": "^4.17.21", 3148 | "mjml-core": "4.13.0" 3149 | } 3150 | }, 3151 | "mjml-validator": { 3152 | "version": "4.13.0", 3153 | "resolved": "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.13.0.tgz", 3154 | "integrity": "sha512-uURYfyQYtHJ6Qz/1A7/+E9ezfcoISoLZhYK3olsxKRViwaA2Mm8gy/J3yggZXnsUXWUns7Qymycm5LglLEIiQg==", 3155 | "requires": { 3156 | "@babel/runtime": "^7.14.6" 3157 | } 3158 | }, 3159 | "mjml-wrapper": { 3160 | "version": "4.13.0", 3161 | "resolved": "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.13.0.tgz", 3162 | "integrity": "sha512-p/44JvHg04rAFR7QDImg8nZucEokIjFH6KJMHxsO0frJtLZ+IuakctzlZAADHsqiR52BwocDsXSa+o9SE2l6Ng==", 3163 | "requires": { 3164 | "@babel/runtime": "^7.14.6", 3165 | "lodash": "^4.17.21", 3166 | "mjml-core": "4.13.0", 3167 | "mjml-section": "4.13.0" 3168 | } 3169 | }, 3170 | "no-case": { 3171 | "version": "2.3.2", 3172 | "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", 3173 | "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", 3174 | "requires": { 3175 | "lower-case": "^1.1.1" 3176 | } 3177 | }, 3178 | "node-fetch": { 3179 | "version": "2.6.9", 3180 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 3181 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 3182 | "requires": { 3183 | "whatwg-url": "^5.0.0" 3184 | } 3185 | }, 3186 | "nodemailer": { 3187 | "version": "6.9.1", 3188 | "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.1.tgz", 3189 | "integrity": "sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==" 3190 | }, 3191 | "nopt": { 3192 | "version": "6.0.0", 3193 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", 3194 | "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", 3195 | "requires": { 3196 | "abbrev": "^1.0.0" 3197 | } 3198 | }, 3199 | "normalize-path": { 3200 | "version": "3.0.0", 3201 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3202 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 3203 | }, 3204 | "nth-check": { 3205 | "version": "2.1.1", 3206 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 3207 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 3208 | "requires": { 3209 | "boolbase": "^1.0.0" 3210 | } 3211 | }, 3212 | "once": { 3213 | "version": "1.4.0", 3214 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3215 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3216 | "requires": { 3217 | "wrappy": "1" 3218 | } 3219 | }, 3220 | "param-case": { 3221 | "version": "2.1.1", 3222 | "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", 3223 | "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", 3224 | "requires": { 3225 | "no-case": "^2.2.0" 3226 | } 3227 | }, 3228 | "parse5-htmlparser2-tree-adapter": { 3229 | "version": "6.0.1", 3230 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", 3231 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", 3232 | "requires": { 3233 | "parse5": "^6.0.1" 3234 | }, 3235 | "dependencies": { 3236 | "parse5": { 3237 | "version": "6.0.1", 3238 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 3239 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 3240 | } 3241 | } 3242 | }, 3243 | "path-is-absolute": { 3244 | "version": "1.0.1", 3245 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3246 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 3247 | }, 3248 | "path-to-regexp": { 3249 | "version": "3.2.0", 3250 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", 3251 | "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", 3252 | "dev": true 3253 | }, 3254 | "picocolors": { 3255 | "version": "1.0.0", 3256 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 3257 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 3258 | }, 3259 | "picomatch": { 3260 | "version": "2.2.2", 3261 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 3262 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" 3263 | }, 3264 | "proto-list": { 3265 | "version": "1.2.4", 3266 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 3267 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" 3268 | }, 3269 | "pseudomap": { 3270 | "version": "1.0.2", 3271 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 3272 | "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" 3273 | }, 3274 | "react": { 3275 | "version": "18.2.0", 3276 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 3277 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 3278 | "peer": true, 3279 | "requires": { 3280 | "loose-envify": "^1.1.0" 3281 | } 3282 | }, 3283 | "react-dom": { 3284 | "version": "18.2.0", 3285 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 3286 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 3287 | "peer": true, 3288 | "requires": { 3289 | "loose-envify": "^1.1.0", 3290 | "scheduler": "^0.23.0" 3291 | } 3292 | }, 3293 | "readdirp": { 3294 | "version": "3.6.0", 3295 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3296 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3297 | "requires": { 3298 | "picomatch": "^2.2.1" 3299 | } 3300 | }, 3301 | "reflect-metadata": { 3302 | "version": "0.1.13", 3303 | "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", 3304 | "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" 3305 | }, 3306 | "regenerator-runtime": { 3307 | "version": "0.13.11", 3308 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", 3309 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" 3310 | }, 3311 | "relateurl": { 3312 | "version": "0.2.7", 3313 | "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", 3314 | "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" 3315 | }, 3316 | "require-directory": { 3317 | "version": "2.1.1", 3318 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 3319 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 3320 | }, 3321 | "rxjs": { 3322 | "version": "7.8.0", 3323 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", 3324 | "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", 3325 | "dev": true, 3326 | "peer": true, 3327 | "requires": { 3328 | "tslib": "^2.1.0" 3329 | } 3330 | }, 3331 | "scheduler": { 3332 | "version": "0.23.0", 3333 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 3334 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 3335 | "peer": true, 3336 | "requires": { 3337 | "loose-envify": "^1.1.0" 3338 | } 3339 | }, 3340 | "semver": { 3341 | "version": "5.7.1", 3342 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 3343 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 3344 | }, 3345 | "sigmund": { 3346 | "version": "1.0.1", 3347 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 3348 | "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==" 3349 | }, 3350 | "slick": { 3351 | "version": "1.12.2", 3352 | "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", 3353 | "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==" 3354 | }, 3355 | "source-map": { 3356 | "version": "0.6.1", 3357 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3358 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 3359 | }, 3360 | "string-width": { 3361 | "version": "4.2.0", 3362 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 3363 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 3364 | "requires": { 3365 | "emoji-regex": "^8.0.0", 3366 | "is-fullwidth-code-point": "^3.0.0", 3367 | "strip-ansi": "^6.0.0" 3368 | } 3369 | }, 3370 | "strip-ansi": { 3371 | "version": "6.0.0", 3372 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 3373 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 3374 | "requires": { 3375 | "ansi-regex": "^5.0.0" 3376 | } 3377 | }, 3378 | "to-regex-range": { 3379 | "version": "5.0.1", 3380 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3381 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3382 | "requires": { 3383 | "is-number": "^7.0.0" 3384 | } 3385 | }, 3386 | "tr46": { 3387 | "version": "0.0.3", 3388 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 3389 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 3390 | }, 3391 | "tslib": { 3392 | "version": "2.5.0", 3393 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 3394 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 3395 | }, 3396 | "typescript": { 3397 | "version": "4.9.5", 3398 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", 3399 | "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", 3400 | "dev": true 3401 | }, 3402 | "uglify-js": { 3403 | "version": "3.11.3", 3404 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.3.tgz", 3405 | "integrity": "sha512-wDRziHG94mNj2n3R864CvYw/+pc9y/RNImiTyrrf8BzgWn75JgFSwYvXrtZQMnMnOp/4UTrf3iCSQxSStPiByA==" 3406 | }, 3407 | "uid": { 3408 | "version": "2.0.1", 3409 | "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.1.tgz", 3410 | "integrity": "sha512-PF+1AnZgycpAIEmNtjxGBVmKbZAQguaa4pBUq6KNaGEcpzZ2klCNZLM34tsjp76maN00TttiiUf6zkIBpJQm2A==", 3411 | "dev": true, 3412 | "requires": { 3413 | "@lukeed/csprng": "^1.0.0" 3414 | } 3415 | }, 3416 | "universalify": { 3417 | "version": "2.0.0", 3418 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 3419 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" 3420 | }, 3421 | "upper-case": { 3422 | "version": "1.1.3", 3423 | "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", 3424 | "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" 3425 | }, 3426 | "valid-data-url": { 3427 | "version": "3.0.1", 3428 | "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", 3429 | "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==" 3430 | }, 3431 | "web-resource-inliner": { 3432 | "version": "5.0.0", 3433 | "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-5.0.0.tgz", 3434 | "integrity": "sha512-AIihwH+ZmdHfkJm7BjSXiEClVt4zUFqX4YlFAzjL13wLtDuUneSaFvDBTbdYRecs35SiU7iNKbMnN+++wVfb6A==", 3435 | "requires": { 3436 | "ansi-colors": "^4.1.1", 3437 | "escape-goat": "^3.0.0", 3438 | "htmlparser2": "^4.0.0", 3439 | "mime": "^2.4.6", 3440 | "node-fetch": "^2.6.0", 3441 | "valid-data-url": "^3.0.0" 3442 | }, 3443 | "dependencies": { 3444 | "domhandler": { 3445 | "version": "3.3.0", 3446 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 3447 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 3448 | "requires": { 3449 | "domelementtype": "^2.0.1" 3450 | } 3451 | }, 3452 | "htmlparser2": { 3453 | "version": "4.1.0", 3454 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", 3455 | "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", 3456 | "requires": { 3457 | "domelementtype": "^2.0.1", 3458 | "domhandler": "^3.0.0", 3459 | "domutils": "^2.0.0", 3460 | "entities": "^2.0.0" 3461 | } 3462 | } 3463 | } 3464 | }, 3465 | "webidl-conversions": { 3466 | "version": "3.0.1", 3467 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 3468 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 3469 | }, 3470 | "whatwg-url": { 3471 | "version": "5.0.0", 3472 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 3473 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 3474 | "requires": { 3475 | "tr46": "~0.0.3", 3476 | "webidl-conversions": "^3.0.0" 3477 | } 3478 | }, 3479 | "wrappy": { 3480 | "version": "1.0.2", 3481 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3482 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 3483 | }, 3484 | "yallist": { 3485 | "version": "2.1.2", 3486 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3487 | "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" 3488 | } 3489 | } 3490 | } 3491 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@squareboat/nest-mailman", 3 | "version": "1.0.5", 4 | "description": "📮 The mailer package for your NestJS Applications", 5 | "main": "dist/index.js", 6 | "types": "dist/index.d.ts", 7 | "keywords": [ 8 | "nestjs", 9 | "nodemailer", 10 | "nestjs-mail", 11 | "nestjs-mailing", 12 | "nestjs-mailer", 13 | "nestjs-mailman" 14 | ], 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/squareboat/nest-mailman.git" 18 | }, 19 | "bugs": { 20 | "url": "https://github.com/squareboat/nest-mailman/issues" 21 | }, 22 | "homepage": "https://github.com/squareboat/nest-mailman", 23 | "author": "Vinayak Sarawagi ", 24 | "private": false, 25 | "license": "MIT", 26 | "scripts": { 27 | "postinstall": "node copymailman.js", 28 | "build": "rm -rf dist && tsc -p tsconfig.json", 29 | "format": "prettier --write \"**/*.ts\"", 30 | "lint": "eslint 'lib/**/*.ts' --fix", 31 | "prepublish:npm": "npm run build", 32 | "publish:npm": "npm publish --access public", 33 | "prepublish:next": "npm run build", 34 | "publish:next": "npm publish --access public --tag next", 35 | "test": "jest --config=jest.json", 36 | "test:cov": "jest --config=jest.json --coverage", 37 | "test:e2e": "jest --config ./tests/jest-e2e.json --runInBand", 38 | "test:e2e:dev": "jest --config ./tests/jest-e2e.json --runInBand --watch" 39 | }, 40 | "devDependencies": { 41 | "@nestjs/common": "^9.3.9", 42 | "@nestjs/core": "^9.3.9", 43 | "@types/mjml": "^4.7.0", 44 | "@types/nodemailer": "^6.4.7", 45 | "@types/react": "^18.0.28", 46 | "typescript": "^4.9.5" 47 | }, 48 | "dependencies": { 49 | "@faire/mjml-react": "^3.1.2", 50 | "app-root-path": "^3.1.0", 51 | "fs-extra": "^11.1.0", 52 | "mjml": "^4.7.1", 53 | "nodemailer": "^6.9.1", 54 | "picocolors": "^1.0.0", 55 | "reflect-metadata": "^0.1.13" 56 | }, 57 | "peerDependencies": { 58 | "@nestjs/common": "^8.0.0 || ^9.0.0", 59 | "@nestjs/core": "^8.0.0 || ^9.0.0" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "strict": true, 6 | "removeComments": true, 7 | "noLib": false, 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "target": "es6", 11 | "sourceMap": false, 12 | "outDir": "./dist", 13 | "rootDir": "./lib", 14 | "skipLibCheck": true, 15 | "esModuleInterop": true, 16 | "allowJs": true, 17 | "jsx": "react" 18 | }, 19 | "include": ["lib/**/*"], 20 | "exclude": ["node_modules", "**/*.spec.ts", "tests", "views"] 21 | } 22 | -------------------------------------------------------------------------------- /views/assets/style.css: -------------------------------------------------------------------------------- 1 | .default-bg { 2 | background-color: #d1deec; 3 | } 4 | 5 | .header { 6 | background-color: #f5f6f6; 7 | } 8 | 9 | .footer { 10 | background-color: #f5f6f6; 11 | } 12 | 13 | .card { 14 | background-color: #f5f6f6; 15 | border-radius: 8px; 16 | margin-left: 20px; 17 | margin-right: 20px; 18 | } 19 | 20 | .styled-table { 21 | /* border-collapse: collapse; */ 22 | font-size: 0.9em; 23 | font-family: sans-serif; 24 | border-radius: 10em; 25 | overflow: hidden; 26 | } 27 | 28 | .styled-table thead tr { 29 | background-color: #0275d8; 30 | color: #ffffff; 31 | text-align: left; 32 | } 33 | 34 | .styled-table th { 35 | background-color: #0275d8; 36 | color: #ffffff; 37 | text-align: left; 38 | } 39 | 40 | .styled-table th, 41 | .styled-table td { 42 | padding: 12px 15px; 43 | } 44 | 45 | .styled-table tbody tr { 46 | border-bottom: 2px solid #dddddd; 47 | } 48 | 49 | .styled-table tbody tr:nth-of-type(even) { 50 | background-color: #f3f3f3; 51 | } 52 | 53 | .styled-table tbody tr:last-of-type { 54 | border-bottom: 2px solid #0275d8; 55 | } 56 | 57 | .styled-table tbody tr.active-row { 58 | font-weight: bold; 59 | color: #2d94f3; 60 | } 61 | -------------------------------------------------------------------------------- /views/components/body.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlBody } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const MailmanBody = ({ children }: { children: JSX.Element }) => { 5 | return {children}; 6 | }; 7 | -------------------------------------------------------------------------------- /views/components/bodyBuilder.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlColumn, MjmlSection } from "@faire/mjml-react"; 2 | import { MailmanButton } from "./button"; 3 | import { MailmanDivider } from "./divider"; 4 | import { Greeting } from "./greeting"; 5 | import { TextLine } from "./text"; 6 | import React from "react"; 7 | import { MailmanTable } from "./table"; 8 | import { RawHtml } from "./html"; 9 | 10 | export const MailmanBodyBuilder = (payload: Record) => { 11 | return ( 12 | 13 | 14 | 15 | {payload.fields.map((obj) => { 16 | return ComponentView(obj); 17 | })} 18 | 19 | 20 | 21 | ); 22 | }; 23 | 24 | const ComponentView = (payload: Record) => { 25 | if (payload.greeting) { 26 | return ; 27 | } 28 | 29 | if (payload.line) { 30 | return ; 31 | } 32 | 33 | if (payload.divider) { 34 | return ; 35 | } 36 | 37 | if (payload.html) { 38 | return ; 39 | } 40 | 41 | if (payload.action) { 42 | return ; 43 | } 44 | 45 | if (payload.table) { 46 | return ; 47 | } 48 | 49 | return <>; 50 | }; 51 | -------------------------------------------------------------------------------- /views/components/button.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlButton } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const MailmanButton = (payload: Record) => { 5 | return ( 6 | <> 7 | 13 | {payload.value.text} 14 | 15 | 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /views/components/description.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlColumn, MjmlText } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const Description = (payload: Record) => { 5 | return ( 6 | 7 | 8 | {payload.value} 9 | 10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /views/components/divider.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlDivider } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const MailmanDivider = (payload: Record) => { 5 | return ; 6 | }; 7 | -------------------------------------------------------------------------------- /views/components/footer.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | MjmlColumn, 3 | MjmlDivider, 4 | MjmlImage, 5 | MjmlSection, 6 | MjmlSocial, 7 | MjmlSocialElement, 8 | MjmlSpacer, 9 | MjmlText, 10 | MjmlWrapper, 11 | } from "@faire/mjml-react"; 12 | import React from "react"; 13 | 14 | export const MailmanFooter = (payload: Record) => { 15 | const appLogoSrc = payload.config.appLogoSrc; 16 | const appName = payload.config.appName; 17 | const socialMedia = payload.config.socialMedia; 18 | const contactEmail = payload.config.contactEmail; 19 | 20 | return ( 21 | <> 22 | 23 | 24 | 25 | 32 | 33 | 34 | 35 | 41 | {socialMedia?.map((a) => ( 42 | <> 43 | 49 | 50 | ))} 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | {contactEmail && ( 64 | Contact Us: {contactEmail} 65 | )} 66 | 67 | 68 | © {new Date().getFullYear()} {appName} 69 | 70 | 71 | 72 | 73 | 74 | 75 | ); 76 | }; 77 | -------------------------------------------------------------------------------- /views/components/greeting.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const Greeting = (payload: Record) => { 5 | return ( 6 | 7 |

{payload.value}

8 |
9 | ); 10 | }; 11 | -------------------------------------------------------------------------------- /views/components/head.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlHead, MjmlPreview, MjmlStyle, MjmlTitle } from "@faire/mjml-react"; 2 | import { readFileSync } from "fs"; 3 | import React from "react"; 4 | 5 | const css = readFileSync("resources/views/assets/style.css").toString(); 6 | 7 | export const MailmanHead = (payload: Record) => { 8 | return ( 9 | 10 | {payload.title} 11 | {payload.preview || payload.title} 12 | {css} 13 | 14 | ); 15 | }; 16 | -------------------------------------------------------------------------------- /views/components/header.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | MjmlColumn, 3 | MjmlImage, 4 | MjmlSection, 5 | MjmlSpacer, 6 | } from "@faire/mjml-react"; 7 | import React from "react"; 8 | 9 | { 10 | /* 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | */ 22 | } 23 | 24 | export const MailmanHeader = (payload: Record) => { 25 | const appLogoSrc = payload.config.appLogoSrc; 26 | 27 | const appName = payload.config.appName; 28 | return ( 29 | <> 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 45 | 46 | 47 | 48 | ); 49 | }; 50 | -------------------------------------------------------------------------------- /views/components/html.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | 5 | export const RawHtml = (payload: Record) => { 6 | return ( 7 | 8 | ); 9 | }; 10 | -------------------------------------------------------------------------------- /views/components/image.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlImage } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const MailmanImage = (payload: Record) => { 5 | return ( 6 | 7 | ); 8 | }; 9 | -------------------------------------------------------------------------------- /views/components/regards.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlColumn, MjmlSection, MjmlText } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const MailmanRegards = (payload: Record) => { 5 | return ( 6 | 7 | 8 | 9 | For any help or support, please feel free to reach out to us at{" "} 10 | support@atadel.ca 11 | 12 | 13 | 14 | Thank you, 15 | 16 | 17 | 18 | Team Atadel 19 | 20 | 21 | 22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /views/components/table.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | MjmlColumn, 3 | MjmlSection, 4 | MjmlTable 5 | } from "@faire/mjml-react"; 6 | import React from "react"; 7 | 8 | function toTitleCase(str) { 9 | return str 10 | .toLowerCase() 11 | .split(" ") 12 | .map(function (word) { 13 | return word.charAt(0).toUpperCase() + word.slice(1); 14 | }) 15 | .join(" "); 16 | } 17 | 18 | export const MailmanTable = (payload: Record) => { 19 | const headings = Object.keys(payload.value[0]); 20 | 21 | const tableHeader = () => { 22 | return ( 23 | 24 | 25 | {headings.map((h) => ( 26 | {toTitleCase(h)} 27 | ))} 28 | 29 | 30 | ); 31 | }; 32 | if (payload.vertical) { 33 | return ( 34 | <> 35 | {payload.value.map((obj) => { 36 | const values = Object.values(obj) as string[]; 37 | return ( 38 | 39 | 40 | 41 | 42 | {values.map((v, index) => ( 43 | 44 | {toTitleCase(headings[index])} 45 | {v} 46 | 47 | ))} 48 | 49 | 50 | 51 | 52 | ); 53 | })} 54 | 55 | ); 56 | } else { 57 | return ( 58 | 59 | 60 | 61 | {payload.heading && tableHeader()} 62 | 63 | {payload.value.map((obj) => { 64 | const values = Object.values(obj) as string[]; 65 | return ( 66 | 67 | {values.map((v) => ( 68 | {v} 69 | ))} 70 | 71 | ); 72 | })} 73 | 74 | 75 | 76 | 77 | ); 78 | } 79 | }; 80 | -------------------------------------------------------------------------------- /views/components/text.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "@faire/mjml-react"; 2 | import React from "react"; 3 | 4 | export const TextLine = (payload: Record) => { 5 | return ( 6 | <> 7 | {payload.value} 8 | 9 | ); 10 | }; 11 | -------------------------------------------------------------------------------- /views/mail/generic.tsx: -------------------------------------------------------------------------------- 1 | import { Mjml } from "@faire/mjml-react"; 2 | import { MailmanHead } from "../components/head"; 3 | import { MailmanBody } from "../components/body"; 4 | import { MailmanHeader } from "../components/header"; 5 | import { MailmanFooter } from "../components/footer"; 6 | import { MailmanBodyBuilder } from "../components/bodyBuilder"; 7 | import React from "react"; 8 | 9 | export const GenericMail = (payload: Record) => { 10 | return ( 11 | 12 | 16 | 17 | 18 | <> 19 | 20 | 24 | 25 | 26 | 27 | 28 | ); 29 | }; 30 | -------------------------------------------------------------------------------- /views/mail/index.tsx: -------------------------------------------------------------------------------- 1 | export * from "./generic"; 2 | --------------------------------------------------------------------------------