diff --git a/.changeset/new-rivers-sniff.md b/.changeset/fast-ligers-perform.md similarity index 56% rename from .changeset/new-rivers-sniff.md rename to .changeset/fast-ligers-perform.md index d6339a1..33801b7 100644 --- a/.changeset/new-rivers-sniff.md +++ b/.changeset/fast-ligers-perform.md @@ -1,9 +1,11 @@ --- -"@urami/demo-sveltekit": major "@urami/core": major +"@urami/react": major +"@urami/solid": major "@urami/svelte": major "@urami/types": major "@urami/utils": major +"@urami/vue": major --- -initialize as monorepo +initialize diff --git a/.github/workflows/changeset.yml b/.github/workflows/changeset.yml index ba77afb..9453977 100644 --- a/.github/workflows/changeset.yml +++ b/.github/workflows/changeset.yml @@ -33,7 +33,7 @@ jobs: - name: install run: pnpm install - name: build - run: pnpm build + run: pnpm build --filter='./packages/*' - name: changesets id: changesets uses: changesets/action@v1 diff --git a/README.md b/README.md index 1302f63..bd9f51e 100644 --- a/README.md +++ b/README.md @@ -1,113 +1,5 @@ -# svelte-aio +# Urami -Automatic image optimization for SvelteKit, inspired by NextJS +[Documentation](https://urami.dev) -[![NPM](https://img.shields.io/npm/v/svelte-aio)](https://www.npmjs.com/package/svelte-aio) - -## Table of contents - -1. [Usage](#usage) -2. [Configuration](#configuration) - -## Usage - -Check out full sample at [`src/routes`](./src/routes) - -Install dependencies - -``` -pnpm add svelte-aio -``` - -(Optional) To resolve export paths correctly in **VS Code**, we require you to set module resolution in `tsconfig.json` into `bundler` first. - -```json -{ - "compilerOptions": { - "moduleResolution": "bundler" - } -} -``` - -In `routes/api/_images`, create `+server.ts` endpoint - -```ts -import { requestHandler } from 'svelte-aio/api' - -import type { RequestHandler } from '@sveltejs/kit' - -export const GET: RequestHandler = requestHandler() -``` - -Then use normally (almost) like `next/image` - -```svelte - - - -Tom Scott -``` - -## Configuration - -Server configrations can be specified via option params. **All parameters are optional!** - -```ts -export const GET: RequestHandler = requestHandler({ - avif: false, - remoteDomains: ['demo.rayriffy.com'], - allowedDomains: ['svelte-aio.vercel.app'], - ttl: 1000 * 60 * 60 * 24 * 7, - storePath: '.svelte-kit/images', -}) -``` - -### avif - -`boolean` - -Enable AVIF image format. Defaults to `false` - -> **Warning:** optimizing image into AVIF format currently not reccomended due to high CPU and memory usage. Overall performance is not great when comparing to WebP. - -### remoteDomains - -`string[] | undefined` - -List of domains that API will be allowed to optimize. Defaults to _unset_ - -From example above, `remoteDomains: ['demo.rayriffy.com'],` means that API will only be allowed to optimize images that served from `demo.rayriffy.com`. - -Unset this option will tell API to optimize **ALL IMAGES** from **EVERYWHERE** - -### allowedDomains - -`string[] | undefined` - -List of domains that allowed to use the API, this will be checked via header `Referer` - -Only affects on `NODE_ENV=production`. Unset this option will allow anywhere to request image from this API. - -### ttl - -`number` - -Time until images will become invalidated, defaults to **7 days** - -Values are in **milliseconds** - -### storePath - -`string` - -Directory path to cache optimized images. Defaults to `.svelte-kit/images` - -Provided paths will be relative to `process.cwd()` +Urami, automatic image optimization for all! diff --git a/package.json b/package.json index ab7720b..d930051 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "build": "turbo run build", - "dev": "turbo run dev", + "dev": "turbo run dev --filter=@urami/docs", "lint": "turbo run lint", "format": "prettier --write \"**/*.{ts,tsx,md}\"" }, diff --git a/packages/core/README.md b/packages/core/README.md new file mode 100644 index 0000000..a0407a4 --- /dev/null +++ b/packages/core/README.md @@ -0,0 +1,19 @@ +# @urami/core + +Server-side for Urami automatic image optimization. Please refer to [documentation](https://urami.dev/core/overview) for more details. + +## createRequestHandler + +A high-order function to ceate a request handler. Options can be specifed, please refer to [Configuration](https://urami.dev/core/configuration) page + +```ts +const handler = createRequestHandler({ + // configuration +}) +``` + +The handler itself is a function that accepts a `Request` object and returns a `Response` object. + +```ts +export type RequestHandler = (request: Request) => Promise +``` diff --git a/packages/core/package.json b/packages/core/package.json index 364d70c..a8f2445 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -7,6 +7,7 @@ "email": "contact@rayriffy.com", "url": "https://rayriffy.com" }, + "homepage": "https://urami.dev/", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/core/src/@types/RequestHandler.ts b/packages/core/src/@types/RequestHandler.ts new file mode 100644 index 0000000..0225f68 --- /dev/null +++ b/packages/core/src/@types/RequestHandler.ts @@ -0,0 +1 @@ +export type RequestHandler = (request: Request) => Promise diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 533f092..0ba8590 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -21,10 +21,11 @@ import { writeImageToFileSystem } from './functions/writeImageToFileSystem.js' import type { Config } from './@types/Config.js' import type { ResponsePayload } from './@types/ResponsePayload.js' +import type { RequestHandler } from './@types/RequestHandler.js' export const createRequestHandler = - (config: Partial = {}) => - async (request: Request): Promise => { + (config: Partial = {}): RequestHandler => + async request => { // build general config const mergedConfig = { ...defaultConfig, diff --git a/packages/react/README.md b/packages/react/README.md new file mode 100644 index 0000000..b06110b --- /dev/null +++ b/packages/react/README.md @@ -0,0 +1,33 @@ +# @urami/react + +Optimized image component for [React](https://react.dev/). + +[Documentation](https://urami.dev/components/react) + +## Usage + +```tsx +import Image from '@urami/react' + +const Component = () => { + return ( + Tom Scott + ) +} +``` + +## Props + +| Name | Type | Default | Required | Description | +| --------- | -------- | -------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------- | +| `src` | `string` | - | ✅ | Source of the image | +| `width` | `number` | - | ✅ | Width of the image | +| `height` | `number` | - | ❌ | Height of the image (Specify this will results in less layout shift) | +| `quality` | `number` | `75` | ❌ | Quality of the image | +| `loader` | `fn` | [`defaultLoader`](https://github.com/rayriffy/urami/blob/main/packages/utils/src/defaultLoader.ts) | ❌ | Loader function, please refer to [Loader](https://urami.dev/utilities/loader) | diff --git a/packages/react/package.json b/packages/react/package.json new file mode 100644 index 0000000..009902e --- /dev/null +++ b/packages/react/package.json @@ -0,0 +1,45 @@ +{ + "name": "@urami/react", + "version": "0.0.0", + "description": "Automatic image optimization component for React", + "author": { + "name": "Phumrapee Limpiancop", + "email": "contact@rayriffy.com", + "url": "https://rayriffy.com" + }, + "homepage": "https://urami.dev/", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/rayriffy/urami.git" + }, + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "src", + "dist" + ], + "scripts": { + "build": "tsup src/index.tsx --format esm --dts --sourcemap", + "dev": "pnpm run build --watch" + }, + "keywords": [], + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "dependencies": { + "@urami/utils": "workspace:*" + }, + "devDependencies": { + "@tsconfig/recommended": "^1.0.3", + "@types/react": "^18.2.28", + "@types/react-dom": "^18.2.13", + "@urami/types": "workspace:*" + } +} diff --git a/packages/react/src/index.tsx b/packages/react/src/index.tsx new file mode 100644 index 0000000..711241f --- /dev/null +++ b/packages/react/src/index.tsx @@ -0,0 +1,33 @@ +import { defaultLoader, buildSource } from '@urami/utils' + +import type { FunctionComponent, ImgHTMLAttributes } from 'react' +import type { Loader } from '@urami/types' + +export interface ImageProps extends ImgHTMLAttributes { + src: string + width: number + quality?: number + loader?: Loader +} + +const Image: FunctionComponent = ({ + src, + width, + quality = 75, + loader = defaultLoader, + ...rest +}) => { + const builtProps = buildSource(loader, src, width, quality) + + return ( + + ) +} + +export default Image diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json new file mode 100644 index 0000000..e4c911d --- /dev/null +++ b/packages/react/tsconfig.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@tsconfig/recommended/tsconfig.json", + "compilerOptions": { + "module": "es2022", + "lib": ["es2023", "DOM"], + "moduleResolution": "bundler", + "verbatimModuleSyntax": true, + "noEmit": true, + "jsx": "react-jsx" + } +} diff --git a/packages/react/tsup.config.ts b/packages/react/tsup.config.ts new file mode 100644 index 0000000..cb9e043 --- /dev/null +++ b/packages/react/tsup.config.ts @@ -0,0 +1,3 @@ +import { defineConfig } from 'tsup' + +export default defineConfig({}) diff --git a/packages/solid/README.md b/packages/solid/README.md new file mode 100644 index 0000000..61265ee --- /dev/null +++ b/packages/solid/README.md @@ -0,0 +1,33 @@ +# @urami/solid + +Optimized image component for [Solid](https://www.solidjs.com/). + +[Documentation](https://urami.dev/components/solid) + +## Usage + +```tsx +import Image from '@urami/solid' + +const Component = () => { + return ( + Tom Scott + ) +} +``` + +## Props + +| Name | Type | Default | Required | Description | +| --------- | -------- | -------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------- | +| `src` | `string` | - | ✅ | Source of the image | +| `width` | `number` | - | ✅ | Width of the image | +| `height` | `number` | - | ❌ | Height of the image (Specify this will results in less layout shift) | +| `quality` | `number` | `75` | ❌ | Quality of the image | +| `loader` | `fn` | [`defaultLoader`](https://github.com/rayriffy/urami/blob/main/packages/utils/src/defaultLoader.ts) | ❌ | Loader function, please refer to [Loader](https://urami.dev/utilities/loader) | diff --git a/packages/solid/package.json b/packages/solid/package.json index 43acde1..e244e61 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -1,12 +1,13 @@ { "name": "@urami/solid", "version": "0.0.0", - "description": "Utilities function for automatic image optimization", + "description": "Automatic image optimization component for Solid", "author": { "name": "Phumrapee Limpiancop", "email": "contact@rayriffy.com", "url": "https://rayriffy.com" }, + "homepage": "https://urami.dev/", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" @@ -19,10 +20,19 @@ "main": "./dist/index.js", "module": "./dist/index.js", "types": "./dist/index.d.ts", + "exports": { + "solid": "./dist/index.jsx", + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, "files": [ "src", "dist" ], + "browser": {}, + "typesVersions": {}, "scripts": { "build": "tsup --format esm --dts --sourcemap", "dev": "pnpm run build --watch" @@ -39,14 +49,5 @@ "@urami/types": "workspace:*", "solid-js": "^1.7.12", "tsup-preset-solid": "^2.1.0" - }, - "browser": {}, - "exports": { - "solid": "./dist/index.jsx", - "import": { - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - } - }, - "typesVersions": {} + } } diff --git a/packages/svelte/README.md b/packages/svelte/README.md new file mode 100644 index 0000000..831d85d --- /dev/null +++ b/packages/svelte/README.md @@ -0,0 +1,31 @@ +# @urami/svelte + +Optimized image component for [Svelte](https://svelte.dev/). + +[Documentation](https://urami.dev/components/svelte) + +## Usage + +```svelte + + +Tom Scott +``` + +## Props + +| Name | Type | Default | Required | Description | +| --------- | -------- | -------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------- | +| `src` | `string` | - | ✅ | Source of the image | +| `width` | `number` | - | ✅ | Width of the image | +| `height` | `number` | - | ❌ | Height of the image (Specify this will results in less layout shift) | +| `quality` | `number` | `75` | ❌ | Quality of the image | +| `loader` | `fn` | [`defaultLoader`](https://github.com/rayriffy/urami/blob/main/packages/utils/src/defaultLoader.ts) | ❌ | Loader function, please refer to [Loader](https://urami.dev/utilities/loader) | diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 6cf2f89..8d72147 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -7,6 +7,7 @@ "email": "contact@rayriffy.com", "url": "https://rayriffy.com" }, + "homepage": "https://urami.dev/", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/types/README.md b/packages/types/README.md new file mode 100644 index 0000000..4c077bf --- /dev/null +++ b/packages/types/README.md @@ -0,0 +1,3 @@ +# @urami/types + +Types for [Urami](https://urami.dev) packages diff --git a/packages/types/package.json b/packages/types/package.json index 8e34903..db8f920 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -6,6 +6,7 @@ "email": "contact@rayriffy.com", "url": "https://rayriffy.com" }, + "homepage": "https://urami.dev/", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/utils/README.md b/packages/utils/README.md new file mode 100644 index 0000000..1bb35c1 --- /dev/null +++ b/packages/utils/README.md @@ -0,0 +1,11 @@ +# @urami/utils + +Utility functions for [Urami](https://urami.dev) packages + +## defaultLoader + +Default loader function for [Urami](https://urami.dev) image components. Please refer to [documentation](https://urami.dev/utilities/loader) for more information. + +## buildSource + +Generate optimized URLs from original image source. diff --git a/packages/utils/package.json b/packages/utils/package.json index 46e62f7..85b3a08 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -7,6 +7,7 @@ "email": "contact@rayriffy.com", "url": "https://rayriffy.com" }, + "homepage": "https://urami.dev/", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org" diff --git a/packages/vue/README.md b/packages/vue/README.md new file mode 100644 index 0000000..47b2a0b --- /dev/null +++ b/packages/vue/README.md @@ -0,0 +1,33 @@ +# @urami/vue + +Optimized image component for [Vue](https://vuejs.org/). + +[Documentation](https://urami.dev/components/vue) + +## Usage + +```vue + + + +``` + +## Props + +| Name | Type | Default | Required | Description | +| --------- | -------- | -------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------- | +| `src` | `string` | - | ✅ | Source of the image | +| `width` | `number` | - | ✅ | Width of the image | +| `height` | `number` | - | ❌ | Height of the image (Specify this will results in less layout shift) | +| `quality` | `number` | `75` | ❌ | Quality of the image | +| `loader` | `fn` | [`defaultLoader`](https://github.com/rayriffy/urami/blob/main/packages/utils/src/defaultLoader.ts) | ❌ | Loader function, please refer to [Loader](https://urami.dev/utilities/loader) | diff --git a/packages/vue/package.json b/packages/vue/package.json new file mode 100644 index 0000000..1261a0d --- /dev/null +++ b/packages/vue/package.json @@ -0,0 +1,43 @@ +{ + "name": "@urami/vue", + "version": "0.0.0", + "description": "Automatic image optimization component for Vue", + "author": { + "name": "Phumrapee Limpiancop", + "email": "contact@rayriffy.com", + "url": "https://rayriffy.com" + }, + "homepage": "https://urami.dev/", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/rayriffy/urami.git" + }, + "type": "module", + "main": "./dist/index.js", + "module": "./dist/index.js", + "files": [ + "src", + "dist" + ], + "scripts": { + "build": "vite build" + }, + "keywords": [], + "peerDependencies": { + "vue": "^3.0.0" + }, + "dependencies": { + "@urami/utils": "workspace:*" + }, + "devDependencies": { + "@tsconfig/recommended": "^1.0.3", + "@urami/types": "workspace:*", + "@vitejs/plugin-vue": "^4.4.0", + "vite": "^4.4.11", + "vue": "^3.3.4" + } +} diff --git a/packages/vue/src/Image.vue b/packages/vue/src/Image.vue new file mode 100644 index 0000000..e6f8923 --- /dev/null +++ b/packages/vue/src/Image.vue @@ -0,0 +1,20 @@ + + + diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts new file mode 100644 index 0000000..32b6d9c --- /dev/null +++ b/packages/vue/src/index.ts @@ -0,0 +1,3 @@ +import Image from './Image.vue' + +export default Image diff --git a/packages/vue/tsconfig.json b/packages/vue/tsconfig.json new file mode 100644 index 0000000..cf44875 --- /dev/null +++ b/packages/vue/tsconfig.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@tsconfig/recommended/tsconfig.json", + "compilerOptions": { + "module": "es2022", + "lib": ["es2023", "DOM"], + "moduleResolution": "bundler", + "verbatimModuleSyntax": true, + "noEmit": true, + "jsx": "preserve" + } +} diff --git a/packages/vue/vite.config.ts b/packages/vue/vite.config.ts new file mode 100644 index 0000000..b7b7524 --- /dev/null +++ b/packages/vue/vite.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +export default defineConfig({ + plugins: [vue()], + build: { + lib: { + entry: 'src/index.ts', + name: 'Image', + fileName: 'index', + }, + rollupOptions: { + external: ['vue', '@urami/utils'], + output: { + globals: { + vue: 'Vue', + }, + }, + }, + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1166437..432b30e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,6 +126,31 @@ importers: specifier: ^0.17.1 version: 0.17.2 + packages/react: + dependencies: + '@urami/utils': + specifier: workspace:* + version: link:../utils + react: + specifier: ^18.0.0 + version: 18.2.0 + react-dom: + specifier: ^18.0.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@tsconfig/recommended': + specifier: ^1.0.3 + version: 1.0.3 + '@types/react': + specifier: ^18.2.28 + version: 18.2.28 + '@types/react-dom': + specifier: ^18.2.13 + version: 18.2.13 + '@urami/types': + specifier: workspace:* + version: link:../types + packages/solid: dependencies: '@urami/utils': @@ -179,6 +204,28 @@ importers: specifier: workspace:* version: link:../types + packages/vue: + dependencies: + '@urami/utils': + specifier: workspace:* + version: link:../utils + devDependencies: + '@tsconfig/recommended': + specifier: ^1.0.3 + version: 1.0.3 + '@urami/types': + specifier: workspace:* + version: link:../types + '@vitejs/plugin-vue': + specifier: ^4.4.0 + version: 4.4.0(vite@4.4.11)(vue@3.3.4) + vite: + specifier: ^4.4.11 + version: 4.4.11(@types/node@18.18.5) + vue: + specifier: ^3.3.4 + version: 3.3.4 + packages: /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0)(search-insights@2.9.0): @@ -2377,13 +2424,35 @@ packages: resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} dev: true + /@types/prop-types@15.7.8: + resolution: {integrity: sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==} + dev: true + /@types/pug@2.0.7: resolution: {integrity: sha512-I469DU0UXNC1aHepwirWhu9YKg5fkxohZD95Ey/5A7lovC+Siu+MCLffva87lnfThaOrw9Vb1DUN5t55oULAAw==} dev: true + /@types/react-dom@18.2.13: + resolution: {integrity: sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==} + dependencies: + '@types/react': 18.2.28 + dev: true + + /@types/react@18.2.28: + resolution: {integrity: sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==} + dependencies: + '@types/prop-types': 15.7.8 + '@types/scheduler': 0.16.4 + csstype: 3.1.2 + dev: true + /@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + /@types/scheduler@0.16.4: + resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} + dev: true + /@types/semver@7.5.3: resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} dev: true @@ -2399,6 +2468,17 @@ packages: resolution: {integrity: sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==} dev: true + /@vitejs/plugin-vue@4.4.0(vite@4.4.11)(vue@3.3.4): + resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.2.25 + dependencies: + vite: 4.4.11(@types/node@18.18.5) + vue: 3.3.4 + dev: true + /@vue/compiler-core@3.3.4: resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} dependencies: @@ -4470,6 +4550,13 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: @@ -5080,6 +5167,23 @@ packages: strip-json-comments: 2.0.1 dev: false + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -5312,6 +5416,12 @@ packages: rimraf: 2.7.1 dev: true + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + /search-insights@2.9.0: resolution: {integrity: sha512-bkWW9nIHOFkLwjQ1xqVaMbjjO5vhP26ERsH9Y3pKr8imthofEFIxlnOabkmGcw6ksRj9jWidcI65vvjJH/nTGg==} dev: true