diff --git a/.gitignore b/.gitignore index 31d9637..41a2151 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ api/src/lib/generateGraphiQLHeader.* !.yarn/releases !.yarn/sdks !.yarn/versions +files diff --git a/api/package.json b/api/package.json index 6978f38..b886516 100644 --- a/api/package.json +++ b/api/package.json @@ -4,9 +4,11 @@ "private": true, "dependencies": { "@redwoodjs/api": "7.7.4", + "@redwoodjs/api-server": "7.7.4", "@redwoodjs/auth-dbauth-api": "7.7.4", "@redwoodjs/graphql-server": "7.7.4", - "graphql-scalars": "^1.23.0", + "@tus/file-store": "^1.4.0", + "@tus/server": "^1.7.0", "nodemailer": "^6.9.14" }, "devDependencies": { diff --git a/api/src/functions/graphql.ts b/api/src/functions/graphql.ts index a541807..e9c53e2 100644 --- a/api/src/functions/graphql.ts +++ b/api/src/functions/graphql.ts @@ -1,10 +1,3 @@ -import { - CuidDefinition, - CuidResolver, - EmailAddressTypeDefinition, - EmailAddressResolver, -} from 'graphql-scalars' - import { createAuthDecoder } from '@redwoodjs/auth-dbauth-api' import { createGraphQLHandler } from '@redwoodjs/graphql-server' @@ -25,13 +18,6 @@ export const handler = createGraphQLHandler({ directives, sdls, services, - schemaOptions: { - typeDefs: [CuidDefinition, EmailAddressTypeDefinition], - resolvers: { - Cuid: CuidResolver, - EmailAddress: EmailAddressResolver, - }, - }, onException: () => { // Disconnect from your database with an unhandled exception. db.$disconnect() diff --git a/api/src/graphql/scalars.sdl.ts b/api/src/graphql/scalars.sdl.ts deleted file mode 100644 index bb34c31..0000000 --- a/api/src/graphql/scalars.sdl.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const schema = gql` - scalar Cuid - scalar EmailAddress -` diff --git a/api/src/graphql/users.sdl.ts b/api/src/graphql/users.sdl.ts deleted file mode 100644 index 7d7b402..0000000 --- a/api/src/graphql/users.sdl.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const schema = gql` - type User { - id: Int! - username: String! - email: EmailAddress! - hashedPassword: String! - salt: String! - resetToken: String - resetTokenExpiresAt: DateTime - } - - type Query { - userCount: Int! @skipAuth - } -` diff --git a/api/src/lib/email.ts b/api/src/lib/email.ts index 246b58d..59f3a74 100644 --- a/api/src/lib/email.ts +++ b/api/src/lib/email.ts @@ -33,7 +33,7 @@ export function censorEmail(email: string): string { const firstChar = localPart[0] const lastChar = localPart[localPart.length - 1] const middleLength = Math.min(localPart.length - 2, 7) - const middle = '∗'.repeat(middleLength) + const middle = '#'.repeat(middleLength) return `${firstChar}${middle}${lastChar}@${domain}` } diff --git a/api/src/server.ts b/api/src/server.ts new file mode 100644 index 0000000..50e8e61 --- /dev/null +++ b/api/src/server.ts @@ -0,0 +1,33 @@ +import { FileStore } from '@tus/file-store' +import { Server } from '@tus/server' + +import { createServer } from '@redwoodjs/api-server' + +import { logger } from 'src/lib/logger' +;(async () => { + const server = await createServer({ + logger, + }) + + const tusServer = new Server({ + path: '/files', + datastore: new FileStore({ directory: './files' }), + }) + + server.addContentTypeParser( + 'application/offset+octet-stream', + (_request, _payload, done) => done(null) + ) + + server.all('/files', (req, res) => { + tusServer.handle(req.raw, res.raw) + return res + }) + + server.all('/files/*', (req, res) => { + tusServer.handle(req.raw, res.raw) + return res + }) + + await server.start() +})() diff --git a/api/src/services/users/users.ts b/api/src/services/users/users.ts deleted file mode 100644 index dc80e14..0000000 --- a/api/src/services/users/users.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { QueryResolvers } from 'types/graphql' - -import { db } from 'src/lib/db' - -export const userCount: QueryResolvers['userCount'] = () => { - return db.user.count() -} diff --git a/redwood.toml b/redwood.toml index 1fc7205..74b6cdd 100644 --- a/redwood.toml +++ b/redwood.toml @@ -8,7 +8,7 @@ [web] title = "${NAME}" port = 8910 - apiUrl = "/.redwood/functions" # You can customize graphql and dbauth urls individually too: see https://redwoodjs.com/docs/app-configuration-redwood-toml#api-paths + apiUrl = "/api" includeEnvironmentVariables = ["NAME"] [generate] tests = false diff --git a/scripts/seed.ts b/scripts/seed.ts index c0b5473..10d8ada 100644 --- a/scripts/seed.ts +++ b/scripts/seed.ts @@ -1,27 +1,34 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars import { db } from 'api/src/lib/db' -// Manually apply seeds via the `yarn rw prisma db seed` command. -// -// Seeds automatically run the first time you run the `yarn rw prisma migrate dev` -// command and every time you run the `yarn rw prisma migrate reset` command. -// -// See https://redwoodjs.com/docs/database-seeds for more info +import { hashPassword } from '@redwoodjs/auth-dbauth-api' export default async () => { try { - // Create your database records here! For example, seed some users: - // - // const users = [ - // { name: 'Alice', email: 'alice@redwoodjs.com }, - // { name: 'Bob', email: 'bob@redwoodjs.com }, - // ] - // - // await db.user.createMany({ data: users }) + const admin = { + username: 'admin', + email: process.env.GMAIL, + password: process.env.GMAIL_SMTP_PASSWORD, + } - console.info( - '\n No seed data, skipping. See scripts/seed.ts to start seeding your database!\n' - ) + const [hashedPassword, salt] = hashPassword(admin.password) + + await db.user.upsert({ + where: { + email: admin.email, + }, + create: { + username: admin.username, + email: admin.email, + hashedPassword, + salt, + }, + update: { + username: admin.username, + hashedPassword, + salt, + }, + }) } catch (error) { console.error(error) } diff --git a/web/package.json b/web/package.json index 22c68db..133f2f6 100644 --- a/web/package.json +++ b/web/package.json @@ -17,6 +17,15 @@ "@redwoodjs/forms": "7.7.4", "@redwoodjs/router": "7.7.4", "@redwoodjs/web": "7.7.4", + "@uppy/compressor": "^2.0.1", + "@uppy/core": "^4.1.0", + "@uppy/dashboard": "^4.0.2", + "@uppy/drag-drop": "^4.0.1", + "@uppy/file-input": "^4.0.0", + "@uppy/image-editor": "^3.0.0", + "@uppy/progress-bar": "^4.0.0", + "@uppy/react": "^4.0.1", + "@uppy/tus": "^4.0.0", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/web/src/Routes.tsx b/web/src/Routes.tsx index 7b98703..60362ce 100644 --- a/web/src/Routes.tsx +++ b/web/src/Routes.tsx @@ -7,10 +7,6 @@ import NavbarLayout from './layouts/NavbarLayout/NavbarLayout' const Routes = () => { return ( - - - - diff --git a/web/src/components/Uploader/Uploader.tsx b/web/src/components/Uploader/Uploader.tsx new file mode 100644 index 0000000..57dbe2e --- /dev/null +++ b/web/src/components/Uploader/Uploader.tsx @@ -0,0 +1,29 @@ +import { useState } from 'react' + +import Compressor from '@uppy/compressor' +import Uppy from '@uppy/core' +import ImageEditor from '@uppy/image-editor' +import { Dashboard } from '@uppy/react' +import Tus from '@uppy/tus' + +import '@uppy/image-editor/dist/style.min.css' +import '@uppy/core/dist/style.min.css' +import '@uppy/dashboard/dist/style.min.css' + +const Uploader = () => { + const [uppy] = useState(() => + new Uppy({ + restrictions: { + allowedFileTypes: ['image/*'], + maxNumberOfFiles: 10, + }, + }) + .use(Tus, { endpoint: 'http://localhost:8911/files' }) // TODO: check if env is production and change endpoint accordingly + .use(ImageEditor) + .use(Compressor) + ) + + return +} + +export default Uploader diff --git a/web/src/pages/HomePage/HomePage.tsx b/web/src/pages/HomePage/HomePage.tsx index a30969e..3874b2c 100644 --- a/web/src/pages/HomePage/HomePage.tsx +++ b/web/src/pages/HomePage/HomePage.tsx @@ -1,53 +1,15 @@ import { Metadata } from '@redwoodjs/web' -import { toast } from '@redwoodjs/web/toast' + +import { useAuth } from 'src/auth' +import Uploader from 'src/components/Uploader/Uploader' const HomePage = () => { + const { isAuthenticated } = useAuth() return ( <> - - - - - - + {isAuthenticated ? : <>} ) } diff --git a/web/src/pages/SignupPage/SignupPage.tsx b/web/src/pages/SignupPage/SignupPage.tsx deleted file mode 100644 index 1af690c..0000000 --- a/web/src/pages/SignupPage/SignupPage.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import { useEffect, useRef } from 'react' - -import { mdiEmail, mdiKey, mdiAccount } from '@mdi/js' -import { Icon } from '@mdi/react' - -import { - Form, - Label, - TextField, - PasswordField, - Submit, - FieldError, -} from '@redwoodjs/forms' -import { navigate, routes } from '@redwoodjs/router' -import { Metadata, useQuery } from '@redwoodjs/web' -import { toast } from '@redwoodjs/web/toast' - -import { useAuth } from 'src/auth' - -const QUERY = gql` - query UserCount { - userCount - } -` - -const SignupPage = () => { - const { data, loading } = useQuery(QUERY) - const { isAuthenticated, signUp } = useAuth() - - useEffect(() => { - if (!loading && data.userCount >= 1) { - toast.error('Account already exists') - - navigate(routes.home()) - } - }, [data, loading]) - - useEffect(() => { - if (isAuthenticated) navigate(routes.home()) - }, [isAuthenticated]) - - const emailRef = useRef(null) - - useEffect(() => { - emailRef.current?.focus() - }, []) - - const onSubmit = async (data: Record) => { - const response = await signUp({ - username: data.username, - password: data.password, - email: data.email.toLowerCase(), - }) - - if (response.message) toast(response.message) - else if (response.error) toast.error(response.error) - else toast.success('Welcome!') - } - - if (loading) return - - return ( - <> - - -
-
- - - - - - - - -
- Create -
- -
- - ) -} - -export default SignupPage diff --git a/yarn.lock b/yarn.lock index d0b13af..f1adcdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4475,6 +4475,17 @@ __metadata: languageName: node linkType: hard +"@redis/client@npm:^1.5.13": + version: 1.6.0 + resolution: "@redis/client@npm:1.6.0" + dependencies: + cluster-key-slot: "npm:1.1.2" + generic-pool: "npm:3.9.0" + yallist: "npm:4.0.0" + checksum: 10c0/c80a01b4f72d32284515dac6d1aefe0e9c881d08b8db33281f87b51650c1c116b18074a29ca81599d15dccb37b29eef9b26a75a5755150ae27d163e680c34bf6 + languageName: node + linkType: hard + "@redwoodjs/api-server@npm:7.7.4": version: 7.7.4 resolution: "@redwoodjs/api-server@npm:7.7.4" @@ -5295,6 +5306,13 @@ __metadata: languageName: node linkType: hard +"@transloadit/prettier-bytes@npm:^0.3.4": + version: 0.3.4 + resolution: "@transloadit/prettier-bytes@npm:0.3.4" + checksum: 10c0/67834ae4e321067dbe0eed36116f7865aaa989b970931101d3715f105558d286643617c175e135bdf1655f0fe39b5cb2ce45ac7cf011466bc19e2a9eafe772c4 + languageName: node + linkType: hard + "@trysound/sax@npm:0.2.0": version: 0.2.0 resolution: "@trysound/sax@npm:0.2.0" @@ -5354,6 +5372,42 @@ __metadata: languageName: node linkType: hard +"@tus/file-store@npm:^1.4.0": + version: 1.4.0 + resolution: "@tus/file-store@npm:1.4.0" + dependencies: + "@redis/client": "npm:^1.5.13" + "@tus/utils": "npm:^0.3.0" + debug: "npm:^4.3.4" + dependenciesMeta: + "@redis/client": + optional: true + checksum: 10c0/28ca244dc9acd9ff62fd58c7b4af7c91b71eac12b357899ccc65fb7f583b93832674d7c3716da92293e54ab9d5227585d7d844be3bc2e4aa4015e1af818a6ec6 + languageName: node + linkType: hard + +"@tus/server@npm:^1.7.0": + version: 1.7.0 + resolution: "@tus/server@npm:1.7.0" + dependencies: + "@redis/client": "npm:^1.5.13" + "@tus/utils": "npm:^0.3.0" + debug: "npm:^4.3.4" + lodash.throttle: "npm:^4.1.1" + dependenciesMeta: + "@redis/client": + optional: true + checksum: 10c0/64c06dbd4af16a6ac380acd702a125b69cf04a33e38485ef0e92e128a2f814b28202d83bcf89de180181ba45b30741675464f74688dc7e3c3f38462662ea8f23 + languageName: node + linkType: hard + +"@tus/utils@npm:^0.3.0": + version: 0.3.0 + resolution: "@tus/utils@npm:0.3.0" + checksum: 10c0/65b357c80022018067b53640b984e79531e5335d04467eff24f256ae175bbf7055293e169e1589fd2064221fc1ffcc8032080c31f9b56655d1a17f4f3698b43a + languageName: node + linkType: hard + "@types/aria-query@npm:^5.0.1": version: 5.0.4 resolution: "@types/aria-query@npm:5.0.4" @@ -5820,6 +5874,13 @@ __metadata: languageName: node linkType: hard +"@types/retry@npm:0.12.2": + version: 0.12.2 + resolution: "@types/retry@npm:0.12.2" + checksum: 10c0/07481551a988cc90b423351919928b9ddcd14e3f5591cac3ab950851bb20646e55a10e89141b38bc3093d2056d4df73700b22ff2612976ac86a6367862381884 + languageName: node + linkType: hard + "@types/semver@npm:^7.3.12": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" @@ -6060,6 +6121,233 @@ __metadata: languageName: node linkType: hard +"@uppy/companion-client@npm:^4.0.0": + version: 4.0.0 + resolution: "@uppy/companion-client@npm:4.0.0" + dependencies: + "@uppy/utils": "npm:^6.0.0" + namespace-emitter: "npm:^2.0.1" + p-retry: "npm:^6.1.0" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/6212d6bb919a965b09148f9143fd3467f58db59147a5a2adab4c6c9582ddde6df204a7fb43a45d248af00a435e68e7d7440483c0435edf724664c8a1ff9c9967 + languageName: node + linkType: hard + +"@uppy/compressor@npm:^2.0.1": + version: 2.0.1 + resolution: "@uppy/compressor@npm:2.0.1" + dependencies: + "@transloadit/prettier-bytes": "npm:^0.3.4" + "@uppy/utils": "npm:^6.0.1" + compressorjs: "npm:^1.2.1" + preact: "npm:^10.5.13" + promise-queue: "npm:^2.2.5" + peerDependencies: + "@uppy/core": ^4.1.0 + checksum: 10c0/dd849e6dc3d73da3363bf69d6667e3ab5c02e56af8734766d757da453f906edf7ca4c6e6ae80ec51ef10ba4c172d8cb9128c3ab8992fa9a4356fc45973499570 + languageName: node + linkType: hard + +"@uppy/core@npm:^4.1.0": + version: 4.1.0 + resolution: "@uppy/core@npm:4.1.0" + dependencies: + "@transloadit/prettier-bytes": "npm:^0.3.4" + "@uppy/store-default": "npm:^4.1.0" + "@uppy/utils": "npm:^6.0.1" + lodash: "npm:^4.17.21" + mime-match: "npm:^1.0.2" + namespace-emitter: "npm:^2.0.1" + nanoid: "npm:^5.0.0" + preact: "npm:^10.5.13" + checksum: 10c0/a8dec44ff49b0b206bb9a480aaa19159d3f4802d79a2e0523ef11c60ad82c96899db03621502cd558c58ef25fec2ed96e5d364d68abb6b00d4fcb488a70742c9 + languageName: node + linkType: hard + +"@uppy/dashboard@npm:^4.0.2": + version: 4.0.2 + resolution: "@uppy/dashboard@npm:4.0.2" + dependencies: + "@transloadit/prettier-bytes": "npm:^0.3.4" + "@uppy/informer": "npm:^4.0.0" + "@uppy/provider-views": "npm:^4.0.0" + "@uppy/status-bar": "npm:^4.0.1" + "@uppy/thumbnail-generator": "npm:^4.0.0" + "@uppy/utils": "npm:^6.0.1" + classnames: "npm:^2.2.6" + lodash: "npm:^4.17.21" + memoize-one: "npm:^6.0.0" + nanoid: "npm:^5.0.0" + preact: "npm:^10.5.13" + shallow-equal: "npm:^3.0.0" + peerDependencies: + "@uppy/core": ^4.1.0 + checksum: 10c0/e2e51f8d0fd438865bb4fb32f6084df64b50fc2f80884fbba8f2a2fb98454a622ff3597b0a2e86c5a64fd8f9f8e986f55b9edafc955da879cfba560363aac76f + languageName: node + linkType: hard + +"@uppy/drag-drop@npm:^4.0.1": + version: 4.0.1 + resolution: "@uppy/drag-drop@npm:4.0.1" + dependencies: + "@uppy/utils": "npm:^6.0.0" + preact: "npm:^10.5.13" + peerDependencies: + "@uppy/core": ^4.0.1 + checksum: 10c0/db9ccd8a0d27787ebbcbb42d9ae713cc9b05748f4f5a6afe8e83a28b224a01980f1a09217e94578f37158d412ae6e18f8f9179507d611848a3477180e32eee2b + languageName: node + linkType: hard + +"@uppy/file-input@npm:^4.0.0": + version: 4.0.0 + resolution: "@uppy/file-input@npm:4.0.0" + dependencies: + "@uppy/utils": "npm:^6.0.0" + preact: "npm:^10.5.13" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/3bec88e89bc22659cb076a8d71c86e2149a56f1bdf17b5c6a4f189f4978ad9a386c66fdaa1bae2a77cd6cdfc71aebfcbe7b90a5e2a0b7163ebc004a8ed039ae2 + languageName: node + linkType: hard + +"@uppy/image-editor@npm:^3.0.0": + version: 3.0.0 + resolution: "@uppy/image-editor@npm:3.0.0" + dependencies: + "@uppy/utils": "npm:^6.0.0" + cropperjs: "npm:1.5.7" + preact: "npm:^10.5.13" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/c609720ddb53c6116763a6f8e8569f05a6d67ed0e9664bdedcb65dca08a744d4bed2bcb141e8e701091c89a351cdf5bce28da57d0c39972a8a512ef200f063c7 + languageName: node + linkType: hard + +"@uppy/informer@npm:^4.0.0": + version: 4.0.0 + resolution: "@uppy/informer@npm:4.0.0" + dependencies: + "@uppy/utils": "npm:^6.0.0" + preact: "npm:^10.5.13" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/6ebd4e40c323c79b24a59b621c51053e898003ae53219ed707a04761277ef13ffbe67753936a640f502bd74cfcd085a768620cc2f1b963de2b71bb92a7210fc9 + languageName: node + linkType: hard + +"@uppy/progress-bar@npm:^4.0.0": + version: 4.0.0 + resolution: "@uppy/progress-bar@npm:4.0.0" + dependencies: + "@uppy/utils": "npm:^6.0.0" + preact: "npm:^10.5.13" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/6a169f376ae12bef9f2f217cb0644a6843d319ff4060800c3de11e88728ccfae8c0209138d7abadccd791ac736b05f19d6298fce740826d8ddf3b9e747d96354 + languageName: node + linkType: hard + +"@uppy/provider-views@npm:^4.0.0": + version: 4.0.0 + resolution: "@uppy/provider-views@npm:4.0.0" + dependencies: + "@uppy/utils": "npm:^6.0.0" + classnames: "npm:^2.2.6" + nanoid: "npm:^5.0.0" + p-queue: "npm:^8.0.0" + preact: "npm:^10.5.13" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/ba900ad092d103170235927a9e0558e040373f36ce88e654d402afb3931b90ec5570e135cd0a41f934a9bd082c1e1a46a0a48eb170ee866abd5a8820085dc06b + languageName: node + linkType: hard + +"@uppy/react@npm:^4.0.1": + version: 4.0.1 + resolution: "@uppy/react@npm:4.0.1" + dependencies: + "@uppy/utils": "npm:^6.0.0" + use-sync-external-store: "npm:^1.2.0" + peerDependencies: + "@uppy/core": ^4.0.1 + "@uppy/dashboard": ^4.0.1 + "@uppy/drag-drop": ^4.0.1 + "@uppy/file-input": ^4.0.0 + "@uppy/progress-bar": ^4.0.0 + "@uppy/status-bar": ^4.0.0 + react: ^18.0.0 + peerDependenciesMeta: + "@uppy/dashboard": + optional: true + "@uppy/drag-drop": + optional: true + "@uppy/file-input": + optional: true + "@uppy/progress-bar": + optional: true + "@uppy/status-bar": + optional: true + checksum: 10c0/1a90a04c3f96847c5c04145991e76f46678eb38a6f07939e51961536d212453a29190fc195b7db010e40a269e33471c7ccdd106e8b239686d958fb15bfa5da0f + languageName: node + linkType: hard + +"@uppy/status-bar@npm:^4.0.1": + version: 4.0.1 + resolution: "@uppy/status-bar@npm:4.0.1" + dependencies: + "@transloadit/prettier-bytes": "npm:^0.3.4" + "@uppy/utils": "npm:^6.0.1" + classnames: "npm:^2.2.6" + preact: "npm:^10.5.13" + peerDependencies: + "@uppy/core": ^4.1.0 + checksum: 10c0/f8cb3aeb08be7cc8c0871a9bf25b269c288bbd9a8a324c4b3a2d293f0e09e5fc6a2aaab8df05bcf680f6226d822282a64858cc1bd4a05d9075a3469684d05996 + languageName: node + linkType: hard + +"@uppy/store-default@npm:^4.1.0": + version: 4.1.0 + resolution: "@uppy/store-default@npm:4.1.0" + checksum: 10c0/35fa0576cfdcee005a2437e0899d494725462430d2d2a28991f4f91e2d81cc0e511812d2a5a9f946876412f3305b099408163cdcf46cd2ffeda5b9bab4beb759 + languageName: node + linkType: hard + +"@uppy/thumbnail-generator@npm:^4.0.0": + version: 4.0.0 + resolution: "@uppy/thumbnail-generator@npm:4.0.0" + dependencies: + "@uppy/utils": "npm:^6.0.0" + exifr: "npm:^7.0.0" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/0152f9f15512581ab10217671eb0c257c0d74c848bb417a8f880c199d1dd30b3a3ad3101fa6601dc1f6aa173744ac57a773233f253c3649c8be8646bae246942 + languageName: node + linkType: hard + +"@uppy/tus@npm:^4.0.0": + version: 4.0.0 + resolution: "@uppy/tus@npm:4.0.0" + dependencies: + "@uppy/companion-client": "npm:^4.0.0" + "@uppy/utils": "npm:^6.0.0" + tus-js-client: "npm:^4.1.0" + peerDependencies: + "@uppy/core": ^4.0.0 + checksum: 10c0/043e8f3b7e3d026ddfacef1389c9e462a9bd14de0b7a0bac1b79f5b43b2cddc7f666506279de88c67fef1a5a2dd20a4272aaa894c3c15c86232056bdf486c9e5 + languageName: node + linkType: hard + +"@uppy/utils@npm:^6.0.0, @uppy/utils@npm:^6.0.1": + version: 6.0.1 + resolution: "@uppy/utils@npm:6.0.1" + dependencies: + lodash: "npm:^4.17.21" + preact: "npm:^10.5.13" + checksum: 10c0/1226c2894d9cf7444759004a212abedc07c796da104b8bb9a7480f03dd508f9b9d020e59061403d9cf1cd80388c96ca74a57ce7017837cc4a05fc65c62c820e3 + languageName: node + linkType: hard + "@vitejs/plugin-react@npm:4.2.1": version: 4.2.1 resolution: "@vitejs/plugin-react@npm:4.2.1" @@ -6967,10 +7255,12 @@ __metadata: resolution: "api@workspace:api" dependencies: "@redwoodjs/api": "npm:7.7.4" + "@redwoodjs/api-server": "npm:7.7.4" "@redwoodjs/auth-dbauth-api": "npm:7.7.4" "@redwoodjs/graphql-server": "npm:7.7.4" + "@tus/file-store": "npm:^1.4.0" + "@tus/server": "npm:^1.7.0" "@types/nodemailer": "npm:^6.4.15" - graphql-scalars: "npm:^1.23.0" nodemailer: "npm:^6.9.14" languageName: unknown linkType: soft @@ -7804,6 +8094,13 @@ __metadata: languageName: node linkType: hard +"blueimp-canvas-to-blob@npm:^3.29.0": + version: 3.29.0 + resolution: "blueimp-canvas-to-blob@npm:3.29.0" + checksum: 10c0/6c44cf20aa8287d4b31b2a6133074add338e4b8de092d2f7072a48cd5e04dead04814ffd34607f71dd7b3a285b5c8322c2e8c17776cfa20a1357df395862d646 + languageName: node + linkType: hard + "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -8035,7 +8332,7 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:^1.0.0": +"buffer-from@npm:^1.0.0, buffer-from@npm:^1.1.2": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 @@ -8537,6 +8834,13 @@ __metadata: languageName: node linkType: hard +"classnames@npm:^2.2.6": + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: 10c0/afff4f77e62cea2d79c39962980bf316bacb0d7c49e13a21adaadb9221e1c6b9d3cdb829d8bb1b23c406f4e740507f37e1dcf506f7e3b7113d17c5bab787aa69 + languageName: node + linkType: hard + "clean-css@npm:^5.2.2": version: 5.3.3 resolution: "clean-css@npm:5.3.3" @@ -8674,6 +8978,13 @@ __metadata: languageName: node linkType: hard +"cluster-key-slot@npm:1.1.2": + version: 1.1.2 + resolution: "cluster-key-slot@npm:1.1.2" + checksum: 10c0/d7d39ca28a8786e9e801eeb8c770e3c3236a566625d7299a47bb71113fb2298ce1039596acb82590e598c52dbc9b1f088c8f587803e697cb58e1867a95ff94d3 + languageName: node + linkType: hard + "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -8765,6 +9076,16 @@ __metadata: languageName: node linkType: hard +"combine-errors@npm:^3.0.3": + version: 3.0.3 + resolution: "combine-errors@npm:3.0.3" + dependencies: + custom-error-instance: "npm:2.1.1" + lodash.uniqby: "npm:4.5.0" + checksum: 10c0/6e7c04102596dfc43ddb252c8390e869e358fb6df3b027567b33f5d998fdb2ad84573ce30a3861feb84fdee1fc3da3c465d68e23f7ab39f98bbe846ca9f70c6d + languageName: node + linkType: hard + "combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -8881,6 +9202,16 @@ __metadata: languageName: node linkType: hard +"compressorjs@npm:^1.2.1": + version: 1.2.1 + resolution: "compressorjs@npm:1.2.1" + dependencies: + blueimp-canvas-to-blob: "npm:^3.29.0" + is-blob: "npm:^2.1.0" + checksum: 10c0/811eb37b7211af94da6e87df4986f1f8d07524bd762e913927469cede270a705c56de91000b0c190f4bdf059d601c81e259c4ff19efbf5cb34d97b87367b7c92 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -9206,6 +9537,13 @@ __metadata: languageName: node linkType: hard +"cropperjs@npm:1.5.7": + version: 1.5.7 + resolution: "cropperjs@npm:1.5.7" + checksum: 10c0/0674042b395397f17e8ffd5dcb639663bf00ff4dcbb896329033e7daa255f22ea5a61548460be9cf1c21e44b874d01d8464cde92bb7a9565670a24694b7468f1 + languageName: node + linkType: hard + "cross-env@npm:7.0.3": version: 7.0.3 resolution: "cross-env@npm:7.0.3" @@ -9528,6 +9866,13 @@ __metadata: languageName: node linkType: hard +"custom-error-instance@npm:2.1.1": + version: 2.1.1 + resolution: "custom-error-instance@npm:2.1.1" + checksum: 10c0/c4f68550ae88426c49810846c62651438f04a10462c4d8667c089fb9264bcf1723c9b188e3f1d7791d727b0e5aa48ed1de0415eef50d43ea078517844296b85e + languageName: node + linkType: hard + "cyclist@npm:^1.0.1": version: 1.0.2 resolution: "cyclist@npm:1.0.2" @@ -11171,6 +11516,13 @@ __metadata: languageName: node linkType: hard +"exifr@npm:^7.0.0": + version: 7.1.3 + resolution: "exifr@npm:7.1.3" + checksum: 10c0/296d66941a402f2abc42c622240c8fe943f6f7ff0526ec7aab5fe38e190cca41dadb1d5c4015ebb302ded346429524ed984b93b99815c55b3d9cc00237cee82a + languageName: node + linkType: hard + "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -11976,6 +12328,13 @@ __metadata: languageName: node linkType: hard +"generic-pool@npm:3.9.0": + version: 3.9.0 + resolution: "generic-pool@npm:3.9.0" + checksum: 10c0/6b314d0d71170d5cbaf7162c423f53f8d6556b2135626a65bcdc03c089840b0a2f59eeb2d907939b8200e945eaf71ceb6630426f22d2128a1d242aec4b232aa7 + languageName: node + linkType: hard + "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -12312,7 +12671,7 @@ __metadata: languageName: node linkType: hard -"graphql-scalars@npm:1.23.0, graphql-scalars@npm:^1.23.0": +"graphql-scalars@npm:1.23.0": version: 1.23.0 resolution: "graphql-scalars@npm:1.23.0" dependencies: @@ -13136,6 +13495,13 @@ __metadata: languageName: node linkType: hard +"is-blob@npm:^2.1.0": + version: 2.1.0 + resolution: "is-blob@npm:2.1.0" + checksum: 10c0/324eb4dc16a359acf14c56c0f65a031c9ddb6ec8ca651894783abe3f3252688facd9e02edeb756eddca0c8ddb5b1efd0af97ea7d3c7b8567fc29fa75f9b1a159 + languageName: node + linkType: hard + "is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" @@ -13342,6 +13708,13 @@ __metadata: languageName: node linkType: hard +"is-network-error@npm:^1.0.0": + version: 1.1.0 + resolution: "is-network-error@npm:1.1.0" + checksum: 10c0/89eef83c2a4cf43d853145ce175d1cf43183b7a58d48c7a03e7eed4eb395d0934c1f6d101255cdd8c8c2980ab529bfbe5dd9edb24e1c3c28d2b3c814469b5b7d + languageName: node + linkType: hard + "is-node-process@npm:^1.2.0": version: 1.2.0 resolution: "is-node-process@npm:1.2.0" @@ -14218,6 +14591,13 @@ __metadata: languageName: node linkType: hard +"js-base64@npm:^3.7.2": + version: 3.7.7 + resolution: "js-base64@npm:3.7.7" + checksum: 10c0/3c905a7e78b601e4751b5e710edd0d6d045ce2d23eb84c9df03515371e1b291edc72808dc91e081cb9855aef6758292a2407006f4608ec3705373dd8baf2f80f + languageName: node + linkType: hard + "js-levenshtein@npm:^1.1.6": version: 1.1.6 resolution: "js-levenshtein@npm:1.1.6" @@ -14820,6 +15200,55 @@ __metadata: languageName: node linkType: hard +"lodash._baseiteratee@npm:~4.7.0": + version: 4.7.0 + resolution: "lodash._baseiteratee@npm:4.7.0" + dependencies: + lodash._stringtopath: "npm:~4.8.0" + checksum: 10c0/67f80e6878444e44e3cc6e779941c78da2bfa02413e305b5bfbe612e6ddedbbb05bda025e673014d734b79d69db911c7cfaf25dbc05abc56356eccc90e1e59e3 + languageName: node + linkType: hard + +"lodash._basetostring@npm:~4.12.0": + version: 4.12.0 + resolution: "lodash._basetostring@npm:4.12.0" + checksum: 10c0/08d4f8affb3cfed7cc50bbe35d35605597bd72c05e6ed0696122b0a4da242de1b5f5396e986645f46a97e976d6f7b4943a001b002a4e2b3b8ea087949dc9eb98 + languageName: node + linkType: hard + +"lodash._baseuniq@npm:~4.6.0": + version: 4.6.0 + resolution: "lodash._baseuniq@npm:4.6.0" + dependencies: + lodash._createset: "npm:~4.0.0" + lodash._root: "npm:~3.0.0" + checksum: 10c0/07e2ac63efde634685ed12b16664ee04931b258cd2511b703fddd9ddfc624a85542e3f03a6c2fdac369c00559296198daa8efffaf90d71c7a35f5c89f94ebb14 + languageName: node + linkType: hard + +"lodash._createset@npm:~4.0.0": + version: 4.0.3 + resolution: "lodash._createset@npm:4.0.3" + checksum: 10c0/6144f59a63cedb8bf2840970579dc7dfdad55970741a80f9a6e5c6b29b629fc204c846e54e29266ec24b41e3f680bcbeb9fe9332fb9f2bab71eb9c70cacd26d8 + languageName: node + linkType: hard + +"lodash._root@npm:~3.0.0": + version: 3.0.1 + resolution: "lodash._root@npm:3.0.1" + checksum: 10c0/679c8a570381795b6953ec8c680442acb5472c5b399263ed4ea6839630cf4dd5d65aa8c2a0f6934507fc5bc70f2af20bc430cbd847728b8c1672db95555edb51 + languageName: node + linkType: hard + +"lodash._stringtopath@npm:~4.8.0": + version: 4.8.0 + resolution: "lodash._stringtopath@npm:4.8.0" + dependencies: + lodash._basetostring: "npm:~4.12.0" + checksum: 10c0/5e3a58a97b481a9069fc43ca6ddeace83891e3d9cff8d36400064c85977c225621a9c52131224d64632a054a7c19d8ca7b2f0f5bfc983402564bd2a5e49d8672 + languageName: node + linkType: hard + "lodash.chunk@npm:^4.2.0": version: 4.2.0 resolution: "lodash.chunk@npm:4.2.0" @@ -14918,6 +15347,13 @@ __metadata: languageName: node linkType: hard +"lodash.throttle@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.throttle@npm:4.1.1" + checksum: 10c0/14628013e9e7f65ac904fc82fd8ecb0e55a9c4c2416434b1dd9cf64ae70a8937f0b15376a39a68248530adc64887ed0fe2b75204b2c9ec3eea1cb2d66ddd125d + languageName: node + linkType: hard + "lodash.uniq@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniq@npm:4.5.0" @@ -14925,6 +15361,16 @@ __metadata: languageName: node linkType: hard +"lodash.uniqby@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.uniqby@npm:4.5.0" + dependencies: + lodash._baseiteratee: "npm:~4.7.0" + lodash._baseuniq: "npm:~4.6.0" + checksum: 10c0/4f479ec2dd92825c2a308986d3613e32fe02b13dffc5d0998cbb1ef4eeee56835f13a88e093c7a88473fa72cf5ffd37f807f5ae2d9496e738d776c1911fdabc8 + languageName: node + linkType: hard + "lodash@npm:4.17.21, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -15190,6 +15636,13 @@ __metadata: languageName: node linkType: hard +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: 10c0/45c88e064fd715166619af72e8cf8a7a17224d6edf61f7a8633d740ed8c8c0558a4373876c9b8ffc5518c2b65a960266adf403cc215cb1e90f7e262b58991f54 + languageName: node + linkType: hard + "memory-fs@npm:^0.4.1": version: 0.4.1 resolution: "memory-fs@npm:0.4.1" @@ -15307,6 +15760,15 @@ __metadata: languageName: node linkType: hard +"mime-match@npm:^1.0.2": + version: 1.0.2 + resolution: "mime-match@npm:1.0.2" + dependencies: + wildcard: "npm:^1.1.0" + checksum: 10c0/f7f465246abe7798ed4b2072d9474fe86c8bbee6ea6169abb22eceab4a9752b0393272be3efd8620d3214d421a55420663416a1b4e728daba0f431da55030309 + languageName: node + linkType: hard + "mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" @@ -15716,6 +16178,13 @@ __metadata: languageName: node linkType: hard +"namespace-emitter@npm:^2.0.1": + version: 2.0.1 + resolution: "namespace-emitter@npm:2.0.1" + checksum: 10c0/847fdc3cc68fc9ba0f8959f240bf530f5c0b33c679079aa7756a39954cfef13f397bb4e4209387032a73f10a73684c75df7c6f60794e03c2b5786eda57bea756 + languageName: node + linkType: hard + "nan@npm:^2.12.1": version: 2.20.0 resolution: "nan@npm:2.20.0" @@ -15734,6 +16203,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^5.0.0": + version: 5.0.7 + resolution: "nanoid@npm:5.0.7" + bin: + nanoid: bin/nanoid.js + checksum: 10c0/a3fb1c157e3e35378f44e5a7130c70f80c9037f66c9a37285e5e3d8298e8405fcb2399baaa420980b0fe5fd9c2e4186a6a31c3526f21de03cf34c1b459871401 + languageName: node + linkType: hard + "nanomatch@npm:^1.2.9": version: 1.2.13 resolution: "nanomatch@npm:1.2.13" @@ -16353,6 +16831,16 @@ __metadata: languageName: node linkType: hard +"p-queue@npm:^8.0.0": + version: 8.0.1 + resolution: "p-queue@npm:8.0.1" + dependencies: + eventemitter3: "npm:^5.0.1" + p-timeout: "npm:^6.1.2" + checksum: 10c0/fe185bc8bbd32d17a5f6dba090077b1bb326b008b4ec9b0646c57a32a6984035aa8ece909a6d0de7f6c4640296dc288197f430e7394cdc76a26d862339494616 + languageName: node + linkType: hard + "p-retry@npm:^4.5.0": version: 4.6.2 resolution: "p-retry@npm:4.6.2" @@ -16363,6 +16851,24 @@ __metadata: languageName: node linkType: hard +"p-retry@npm:^6.1.0": + version: 6.2.0 + resolution: "p-retry@npm:6.2.0" + dependencies: + "@types/retry": "npm:0.12.2" + is-network-error: "npm:^1.0.0" + retry: "npm:^0.13.1" + checksum: 10c0/3277f2a8450fb1429c29c432d24c5965b32f187228f1beea56f5d49209717588a7dc0415def1c653f60e0d15ed72c56dacaa2d5fdfa71b0f860592b0aa6ce823 + languageName: node + linkType: hard + +"p-timeout@npm:^6.1.2": + version: 6.1.2 + resolution: "p-timeout@npm:6.1.2" + checksum: 10c0/d46b90a9a5fb7c650a5c56dd5cf7102ea9ab6ce998defa2b3d4672789aaec4e2f45b3b0b5a4a3e17a0fb94301ad5dd26da7d8728402e48db2022ad1847594d19 + languageName: node + linkType: hard + "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" @@ -17278,6 +17784,13 @@ __metadata: languageName: node linkType: hard +"preact@npm:^10.5.13": + version: 10.23.2 + resolution: "preact@npm:10.23.2" + checksum: 10c0/6e0dc1b38ead7554c99ddec9a32162b456e8f622229413b136042a777445a12d115633cd49d6df83c30b64d721a0ad4d3c71bb468edc759c15799896e96fd9f2 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -17466,6 +17979,13 @@ __metadata: languageName: node linkType: hard +"promise-queue@npm:^2.2.5": + version: 2.2.5 + resolution: "promise-queue@npm:2.2.5" + checksum: 10c0/6b29c1c717399c7e10d9527f3a6af74ea7f811aa297dab27c22e5718a824b1cb012d179e1f5d609bf2db051aaf49630fe8222317dedc2174b24971026ab39969 + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -17506,6 +18026,17 @@ __metadata: languageName: node linkType: hard +"proper-lockfile@npm:^4.1.2": + version: 4.1.2 + resolution: "proper-lockfile@npm:4.1.2" + dependencies: + graceful-fs: "npm:^4.2.4" + retry: "npm:^0.12.0" + signal-exit: "npm:^3.0.2" + checksum: 10c0/2f265dbad15897a43110a02dae55105c04d356ec4ed560723dcb9f0d34bc4fb2f13f79bb930e7561be10278e2314db5aca2527d5d3dcbbdee5e6b331d1571f6d + languageName: node + linkType: hard + "proxy-addr@npm:^2.0.7, proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -18860,6 +19391,13 @@ __metadata: languageName: node linkType: hard +"shallow-equal@npm:^3.0.0": + version: 3.1.0 + resolution: "shallow-equal@npm:3.1.0" + checksum: 10c0/57079f8741a86b25229b58b86df5d503414aca324e486ec7ddb2423db65914c80c8282149ef66a6803092847dc0d840da8fc338ea5027bbf4fc877f944df9bf6 + languageName: node + linkType: hard + "shallowequal@npm:^1.1.0": version: 1.1.0 resolution: "shallowequal@npm:1.1.0" @@ -20307,6 +20845,21 @@ __metadata: languageName: node linkType: hard +"tus-js-client@npm:^4.1.0": + version: 4.1.0 + resolution: "tus-js-client@npm:4.1.0" + dependencies: + buffer-from: "npm:^1.1.2" + combine-errors: "npm:^3.0.3" + is-stream: "npm:^2.0.0" + js-base64: "npm:^3.7.2" + lodash.throttle: "npm:^4.1.1" + proper-lockfile: "npm:^4.1.2" + url-parse: "npm:^1.5.7" + checksum: 10c0/ae8c69c3ec29f4299ca1f10a622a243060305be0fbb75d3c6ef9d984d7cc8337c2fc135b5800df26107e8040e8eb9bc178298cefaef27e72335f0509ebcb2ef0 + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -20698,7 +21251,7 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.3": +"url-parse@npm:^1.5.3, url-parse@npm:^1.5.7": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: @@ -20732,6 +21285,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.2.0": + version: 1.2.2 + resolution: "use-sync-external-store@npm:1.2.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10c0/23b1597c10adf15b26ade9e8c318d8cc0abc9ec0ab5fc7ca7338da92e89c2536abd150a5891bf076836c352fdfa104fc7231fb48f806fd9960e0cbe03601abaf + languageName: node + linkType: hard + "use@npm:^3.1.0": version: 3.1.1 resolution: "use@npm:3.1.1" @@ -21035,6 +21597,15 @@ __metadata: "@redwoodjs/web": "npm:7.7.4" "@types/react": "npm:^18.2.55" "@types/react-dom": "npm:^18.2.19" + "@uppy/compressor": "npm:^2.0.1" + "@uppy/core": "npm:^4.1.0" + "@uppy/dashboard": "npm:^4.0.2" + "@uppy/drag-drop": "npm:^4.0.1" + "@uppy/file-input": "npm:^4.0.0" + "@uppy/image-editor": "npm:^3.0.0" + "@uppy/progress-bar": "npm:^4.0.0" + "@uppy/react": "npm:^4.0.1" + "@uppy/tus": "npm:^4.0.0" autoprefixer: "npm:^10.4.20" daisyui: "npm:^4.12.10" postcss: "npm:^8.4.41" @@ -21518,6 +22089,13 @@ __metadata: languageName: node linkType: hard +"wildcard@npm:^1.1.0": + version: 1.1.2 + resolution: "wildcard@npm:1.1.2" + checksum: 10c0/4051a90884f60c2e7eed81811cbb21b2de37986c0f2f82f081b2a43b9693d5d240e80a98ede68a6fa3fb0779bcdf26720e954a890de26ae4e73ee5f04e233649 + languageName: node + linkType: hard + "wildcard@npm:^2.0.0": version: 2.0.1 resolution: "wildcard@npm:2.0.1" @@ -21696,6 +22274,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:4.0.0, yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -21703,13 +22288,6 @@ __metadata: languageName: node linkType: hard -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a - languageName: node - linkType: hard - "yaml-ast-parser@npm:^0.0.43": version: 0.0.43 resolution: "yaml-ast-parser@npm:0.0.43"