diff --git a/packages/cli/src/commands/buildHandler.js b/packages/cli/src/commands/buildHandler.js index 3be5f00eee16..026879b41fae 100644 --- a/packages/cli/src/commands/buildHandler.js +++ b/packages/cli/src/commands/buildHandler.js @@ -11,6 +11,7 @@ import { buildApi } from '@redwoodjs/internal/dist/build/api' import { loadAndValidateSdls } from '@redwoodjs/internal/dist/validateSchema' import { detectPrerenderRoutes } from '@redwoodjs/prerender/detection' import { timedTelemetry } from '@redwoodjs/telemetry' +import { buildFeServer } from '@redwoodjs/vite' import { getPaths, getConfig } from '../lib' import { generatePrismaCommand } from '../lib/generatePrismaClient' @@ -105,19 +106,28 @@ export const handler = async ({ title: 'Building Web...', task: async () => { if (getConfig().web.bundler !== 'webpack') { - // @NOTE: we're using the vite build command here, instead of the - // buildWeb function directly because we want the process.cwd to be - // the web directory, not the root of the project. - // This is important for postcss/tailwind to work correctly - // Having a separate binary lets us contain the change of cwd to that - // process only. If we changed cwd here, or in the buildWeb function, - // it could affect other things that run in parallel while building. - // We don't have any parallel tasks right now, but someone might add - // one in the future as a performance optimization. - await execa(`yarn rw-vite-build --webDir="${rwjsPaths.web.base}"`, { - stdio: verbose ? 'inherit' : 'pipe', - shell: true, - }) + if (!getConfig().experimental?.streamingSsr?.enabled) { + // @NOTE: we're using the vite build command here, instead of the + // buildWeb function directly because we want the process.cwd to be + // the web directory, not the root of the project. + // This is important for postcss/tailwind to work correctly + // Having a separate binary lets us contain the change of cwd to that + // process only. If we changed cwd here, or in the buildWeb function, + // it could affect other things that run in parallel while building. + // We don't have any parallel tasks right now, but someone might add + // one in the future as a performance optimization. + await execa(`yarn rw-vite-build --webDir="${rwjsPaths.web.base}"`, { + stdio: verbose ? 'inherit' : 'pipe', + shell: true, + }) + } else { + // TODO (STREAMING) we need to contain this in a separate binary + process.chdir(rwjsPaths.web.base) + + // TODO (STREAMING) we need to use a binary here, so the the cwd is correct + // Should merge this with the existing rw-vite-build binary + await buildFeServer({ verbose }) + } } else { await execa( `yarn cross-env NODE_ENV=production webpack --config ${require.resolve( diff --git a/packages/cli/src/commands/serve.js b/packages/cli/src/commands/serve.js index eb88039f6f30..57f1518d24be 100644 --- a/packages/cli/src/commands/serve.js +++ b/packages/cli/src/commands/serve.js @@ -18,6 +18,22 @@ function hasExperimentalServerFile() { return fs.existsSync(serverFilePath) } +const streamServerErrorHandler = () => { + console.error('⚠️ Experimental Render Mode ~ Cannot serve the web side ⚠️') + console.log('~'.repeat(50)) + console.log() + console.log() + console.log('You can run the new frontend server with: `yarn rw-serve-fe`') + console.log('You can run the api server with: yarn rw serve api') + console.log() + console.log() + console.log('~'.repeat(50)) + + throw new Error( + 'You will need to run the FE server and API server separately.' + ) +} + export const builder = async (yargs) => { yargs .usage('usage: $0 ') @@ -41,6 +57,11 @@ export const builder = async (yargs) => { socket: argv.socket, }) + if (getConfig().experimental?.streamingSsr?.enabled) { + streamServerErrorHandler() + return + } + // Run the experimental server file, if it exists, with web side also if (hasExperimentalServerFile()) { console.log( @@ -145,6 +166,11 @@ export const builder = async (yargs) => { apiHost: argv.apiHost, }) + if (getConfig().experimental?.streamingSsr?.enabled) { + streamServerErrorHandler() + return + } + const { webServerHandler } = await import('./serveHandler.js') await webServerHandler(argv) }, diff --git a/packages/core/package.json b/packages/core/package.json index b022cd195a65..7a62b1732b63 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -16,9 +16,12 @@ "redwood": "./dist/bins/redwood.js", "rw": "./dist/bins/redwood.js", "rw-api-server-watch": "./dist/bins/rw-api-server-watch.js", + "rw-dev-fe": "./dist/bins/rw-dev-fe.js", "rw-gen": "./dist/bins/rw-gen.js", "rw-gen-watch": "./dist/bins/rw-gen-watch.js", "rw-log-formatter": "./dist/bins/rw-log-formatter.js", + "rw-serve-api": "./dist/bins/rw-serve-api.js", + "rw-serve-fe": "./dist/bins/rw-serve-fe.js", "rwfw": "./dist/bins/rwfw.js" }, "files": [ diff --git a/packages/core/src/bins/rw-dev-fe.ts b/packages/core/src/bins/rw-dev-fe.ts new file mode 100644 index 000000000000..e25b584ad397 --- /dev/null +++ b/packages/core/src/bins/rw-dev-fe.ts @@ -0,0 +1,10 @@ +#!/usr/bin/env node +import { createRequire } from 'module' + +const requireFromRwVite = createRequire( + require.resolve('@redwoodjs/vite/package.json') +) + +const bins = requireFromRwVite('./package.json')['bin'] + +requireFromRwVite(bins['rw-dev-fe']) diff --git a/packages/core/src/bins/rw-serve-api.ts b/packages/core/src/bins/rw-serve-api.ts new file mode 100644 index 000000000000..4156ecaa86f7 --- /dev/null +++ b/packages/core/src/bins/rw-serve-api.ts @@ -0,0 +1,10 @@ +#!/usr/bin/env node +import { createRequire } from 'module' + +const requireFromApiServer = createRequire( + require.resolve('@redwoodjs/api-server/package.json') +) + +const bins = requireFromApiServer('./package.json')['bin'] + +requireFromApiServer(bins['rw-serve-api']) diff --git a/packages/core/src/bins/rw-serve-fe.ts b/packages/core/src/bins/rw-serve-fe.ts new file mode 100644 index 000000000000..a31988ae98bf --- /dev/null +++ b/packages/core/src/bins/rw-serve-fe.ts @@ -0,0 +1,10 @@ +#!/usr/bin/env node +import { createRequire } from 'module' + +const requireFromRwVite = createRequire( + require.resolve('@redwoodjs/vite/package.json') +) + +const bins = requireFromRwVite('./package.json')['bin'] + +requireFromRwVite(bins['rw-serve-fe']) diff --git a/packages/internal/package.json b/packages/internal/package.json index 43e9150e45d1..d1c8fcf72901 100644 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -43,6 +43,7 @@ "@graphql-codegen/typescript-resolvers": "3.2.1", "@redwoodjs/graphql-server": "5.0.0", "@redwoodjs/project-config": "5.0.0", + "@redwoodjs/router": "5.0.0", "@sdl-codegen/node": "0.0.10", "babel-plugin-graphql-tag": "3.3.0", "babel-plugin-polyfill-corejs3": "0.8.1", diff --git a/packages/internal/src/build/babel/api.ts b/packages/internal/src/build/babel/api.ts index 6e1ff3900929..ea0ddb8c7119 100644 --- a/packages/internal/src/build/babel/api.ts +++ b/packages/internal/src/build/babel/api.ts @@ -228,3 +228,27 @@ export const prebuildApiFile = ( }) return result } + +// TODO (STREAMING) I changed the prebuildApiFile function in https://github.com/redwoodjs/redwood/pull/7672/files +// but we had to revert. For this branch temporarily, I'm going to add a new function +// This is used in building routeHooks +export const transformWithBabel = ( + srcPath: string, + plugins: TransformOptions['plugins'] +) => { + const code = fs.readFileSync(srcPath, 'utf-8') + const defaultOptions = getApiSideDefaultBabelConfig() + + const result = transform(code, { + ...defaultOptions, + cwd: getPaths().api.base, + filename: srcPath, + // we need inline sourcemaps at this level + // because this file will eventually be fed to esbuild + // when esbuild finds an inline sourcemap, it tries to "combine" it + // so the final sourcemap (the one that esbuild generates) combines both mappings + sourceMaps: 'inline', + plugins, + }) + return result +} diff --git a/packages/internal/src/build/babel/common.ts b/packages/internal/src/build/babel/common.ts index 7c6d50f65c76..777612b3fc9d 100644 --- a/packages/internal/src/build/babel/common.ts +++ b/packages/internal/src/build/babel/common.ts @@ -6,6 +6,8 @@ import { parseConfigFileTextToJson } from 'typescript' import { getPaths } from '@redwoodjs/project-config' +import { getWebSideBabelPlugins } from './web' + const pkgJson = require('../../../package.json') export interface RegisterHookOptions { @@ -69,6 +71,28 @@ export const getCommonPlugins = () => { ] } +// TODO (STREAMING) double check this, think about it more carefully please! +// It's related to yarn workspaces to be or not to be +export const getRouteHookBabelPlugins = () => { + return [ + ...getWebSideBabelPlugins({ + forVite: true, + }), + [ + 'babel-plugin-module-resolver', + { + alias: { + 'api/src': './src', + }, + root: [getPaths().api.base], + cwd: 'packagejson', + loglevel: 'silent', // to silence the unnecessary warnings + }, + 'rwjs-api-module-resolver', + ], + ] +} + /** * Finds, reads and parses the [ts|js]config.json file * @returns The config object diff --git a/packages/internal/src/build/babel/web.ts b/packages/internal/src/build/babel/web.ts index fa3e807bda8a..5048be2a8db3 100644 --- a/packages/internal/src/build/babel/web.ts +++ b/packages/internal/src/build/babel/web.ts @@ -37,6 +37,7 @@ export const getWebSideBabelPlugins = ( forJest ? rwjsPaths.web.src : './src', // adds the paths from [ts|js]config.json to the module resolver ...getPathsFromConfig(tsConfigs.web), + $api: rwjsPaths.api.base, }, root: [rwjsPaths.web.base], cwd: 'packagejson', diff --git a/packages/internal/src/files.ts b/packages/internal/src/files.ts index e88a136a157d..8a7a0c1ecb94 100644 --- a/packages/internal/src/files.ts +++ b/packages/internal/src/files.ts @@ -96,6 +96,13 @@ export const findApiDistFunctions = (cwd: string = getPaths().api.base) => { }) } +export const findRouteHooksSrc = (cwd: string = getPaths().web.src) => { + return fg.sync('**/*.routeHooks.{js,ts,tsx,jsx}', { + absolute: true, + cwd, + }) +} + export const findPrerenderedHtml = (cwd = getPaths().web.dist) => fg.sync('**/*.html', { cwd, ignore: ['200.html', '404.html'] }) diff --git a/packages/internal/src/generate/templates/api-globImports.d.ts.template b/packages/internal/src/generate/templates/api-globImports.d.ts.template index 51e248fd5f82..ada756867205 100644 --- a/packages/internal/src/generate/templates/api-globImports.d.ts.template +++ b/packages/internal/src/generate/templates/api-globImports.d.ts.template @@ -2,3 +2,8 @@ declare module 'src/services/**/*.{js,ts}' declare module 'src/directives/**/*.{js,ts}' declare module 'src/graphql/**/*.sdl.{js,ts}' declare module 'src/subscriptions/**/*.{js,ts}' + + +declare module 'api/src/services/**/*.{js,ts}' +declare module 'api/src/directives/**/*.{js,ts}' +declare module 'api/src/graphql/**/*.sdl.{js,ts}' diff --git a/packages/internal/src/routes.ts b/packages/internal/src/routes.ts index 8fd37f6df17c..21e460cd8fa6 100644 --- a/packages/internal/src/routes.ts +++ b/packages/internal/src/routes.ts @@ -1,6 +1,9 @@ +import path from 'path' + import chalk from 'chalk' -import { getPaths } from '@redwoodjs/project-config' +import { getPaths, getRouteHookForPage } from '@redwoodjs/project-config' +import { getRouteRegexAndParams } from '@redwoodjs/router' // Circular dependency when trying to use the standard import const { getProject } = require('@redwoodjs/structure/dist/index') @@ -63,3 +66,48 @@ export function warningForDuplicateRoutes() { } return message.trimEnd() } + +export interface RouteSpec { + name: string + path: string + hasParams: boolean + id: string + isNotFound: boolean + filePath: string | undefined + relativeFilePath: string | undefined + routeHooks: string | undefined | null + matchRegexString: string | null + redirect: { to: string; permanent: boolean } | null + renderMode: 'stream' | 'html' +} + +export const getProjectRoutes = (): RouteSpec[] => { + const rwProject = getProject(getPaths().base) + const routes = rwProject.getRouter().routes + + return routes.map((route: any) => { + const { matchRegexString, routeParams } = route.isNotFound + ? { matchRegexString: null, routeParams: null } + : getRouteRegexAndParams(route.path) + + return { + name: route.isNotFound ? 'NotFoundPage' : route.name, + path: route.isNotFound ? 'notfound' : route.path, + hasParams: route.hasParameters, + id: route.id, + isNotFound: route.isNotFound, + filePath: route.page?.filePath, + relativeFilePath: route.page?.filePath + ? path.relative(getPaths().web.src, route.page?.filePath) + : undefined, + routeHooks: getRouteHookForPage(route.page?.filePath), + renderMode: route.renderMode, + matchRegexString: matchRegexString, + paramNames: routeParams, + // TODO (STREAMING) deal with permanent/temp later + redirect: route.redirect + ? { to: route.redirect, permanent: false } + : null, + } + }) +} diff --git a/packages/internal/tsconfig.json b/packages/internal/tsconfig.json index d7c3724e5c43..dc8605264e3a 100644 --- a/packages/internal/tsconfig.json +++ b/packages/internal/tsconfig.json @@ -10,5 +10,6 @@ "references": [ { "path": "../graphql-server" }, // ODD, but we do this so we dont have to have internal as a runtime dependency { "path": "../project-config" }, + { "path": "../router" }, ] } diff --git a/packages/project-config/src/__tests__/paths.test.ts b/packages/project-config/src/__tests__/paths.test.ts index a7bb4bda9549..df64ffd2eb0f 100644 --- a/packages/project-config/src/__tests__/paths.test.ts +++ b/packages/project-config/src/__tests__/paths.test.ts @@ -94,6 +94,13 @@ describe('paths', () => { }, web: { routes: path.join(FIXTURE_BASEDIR, 'web', 'src', 'Routes.tsx'), + routeManifest: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'route-manifest.json' + ), base: path.join(FIXTURE_BASEDIR, 'web'), pages: path.join(FIXTURE_BASEDIR, 'web', 'src', 'pages/'), components: path.join(FIXTURE_BASEDIR, 'web', 'src', 'components'), @@ -135,10 +142,19 @@ describe('paths', () => { 'storybook.manager.js' ), dist: path.join(FIXTURE_BASEDIR, 'web', 'dist'), + distRouteHooks: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'routeHooks' + ), + distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), // Vite paths ~ not configured in empty-project viteConfig: null, entryClient: null, + entryServer: null, }, } @@ -332,6 +348,13 @@ describe('paths', () => { }, web: { routes: path.join(FIXTURE_BASEDIR, 'web', 'src', 'Routes.js'), + routeManifest: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'route-manifest.json' + ), base: path.join(FIXTURE_BASEDIR, 'web'), pages: path.join(FIXTURE_BASEDIR, 'web', 'src', 'pages/'), components: path.join(FIXTURE_BASEDIR, 'web', 'src', 'components'), @@ -374,10 +397,19 @@ describe('paths', () => { 'storybook.manager.js' ), dist: path.join(FIXTURE_BASEDIR, 'web', 'dist'), + distRouteHooks: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'routeHooks' + ), + distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), // New Vite paths viteConfig: path.join(FIXTURE_BASEDIR, 'web', 'vite.config.ts'), - entryClient: null, // doesnt exist in example-todo-main + entryClient: null, // doesn't exist in example-todo-main + entryServer: null, // doesn't exist in example-todo-main }, } @@ -617,6 +649,13 @@ describe('paths', () => { }, web: { routes: path.join(FIXTURE_BASEDIR, 'web', 'src', 'Routes.js'), + routeManifest: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'route-manifest.json' + ), base: path.join(FIXTURE_BASEDIR, 'web'), pages: path.join(FIXTURE_BASEDIR, 'web', 'src', 'pages/'), components: path.join(FIXTURE_BASEDIR, 'web', 'src', 'components'), @@ -659,7 +698,16 @@ describe('paths', () => { 'storybook.manager.js' ), entryClient: null, + entryServer: null, dist: path.join(FIXTURE_BASEDIR, 'web', 'dist'), + distRouteHooks: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'routeHooks' + ), + distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), }, } @@ -860,6 +908,13 @@ describe('paths', () => { }, web: { routes: path.join(FIXTURE_BASEDIR, 'web', 'src', 'Routes.tsx'), + routeManifest: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'route-manifest.json' + ), base: path.join(FIXTURE_BASEDIR, 'web'), pages: path.join(FIXTURE_BASEDIR, 'web', 'src', 'pages/'), components: path.join(FIXTURE_BASEDIR, 'web', 'src', 'components'), @@ -901,10 +956,19 @@ describe('paths', () => { 'storybook.manager.js' ), dist: path.join(FIXTURE_BASEDIR, 'web', 'dist'), + distRouteHooks: path.join( + FIXTURE_BASEDIR, + 'web', + 'dist', + 'server', + 'routeHooks' + ), + distServer: path.join(FIXTURE_BASEDIR, 'web', 'dist', 'server'), types: path.join(FIXTURE_BASEDIR, 'web', 'types'), // Vite paths viteConfig: path.join(FIXTURE_BASEDIR, 'web', 'vite.config.ts'), entryClient: path.join(FIXTURE_BASEDIR, 'web/src/entry.client.tsx'), + entryServer: null, }, } diff --git a/packages/project-config/src/paths.ts b/packages/project-config/src/paths.ts index 1c26d24bfab5..56f7c42272ca 100644 --- a/packages/project-config/src/paths.ts +++ b/packages/project-config/src/paths.ts @@ -39,11 +39,15 @@ export interface WebPaths { webpack: string viteConfig: string | null // because vite is opt-in only entryClient: string | null + entryServer: string | null postcss: string storybookConfig: string storybookPreviewConfig: string storybookManagerConfig: string dist: string + distServer: string + distRouteHooks: string + routeManifest: string types: string } @@ -101,6 +105,7 @@ const PATH_WEB_DIR_CONFIG = 'web/config' const PATH_WEB_DIR_CONFIG_WEBPACK = 'web/config/webpack.config.js' const PATH_WEB_DIR_CONFIG_VITE = 'web/vite.config' // .js,.ts const PATH_WEB_DIR_ENTRY_CLIENT = 'web/src/entry.client' // .jsx,.tsx +const PATH_WEB_DIR_ENTRY_SERVER = 'web/src/entry-server' // .jsx,.tsx const PATH_WEB_DIR_CONFIG_POSTCSS = 'web/config/postcss.config.js' const PATH_WEB_DIR_CONFIG_STORYBOOK_CONFIG = 'web/config/storybook.config.js' @@ -108,6 +113,9 @@ const PATH_WEB_DIR_CONFIG_STORYBOOK_PREVIEW = 'web/config/storybook.preview.js' const PATH_WEB_DIR_CONFIG_STORYBOOK_MANAGER = 'web/config/storybook.manager.js' const PATH_WEB_DIR_DIST = 'web/dist' +const PATH_WEB_DIR_DIST_SERVER = 'web/dist/server' +const PATH_WEB_DIR_DIST_SERVER_ROUTEHOOKS = 'web/dist/server/routeHooks' +const PATH_WEB_DIR_ROUTE_MANIFEST = 'web/dist/server/route-manifest.json' /** * The Redwood config file is used as an anchor for the base directory of a project. @@ -212,8 +220,12 @@ export const getPaths = (BASE_DIR: string = getBaseDir()): Paths => { PATH_WEB_DIR_CONFIG_STORYBOOK_MANAGER ), dist: path.join(BASE_DIR, PATH_WEB_DIR_DIST), + distServer: path.join(BASE_DIR, PATH_WEB_DIR_DIST_SERVER), + distRouteHooks: path.join(BASE_DIR, PATH_WEB_DIR_DIST_SERVER_ROUTEHOOKS), + routeManifest: path.join(BASE_DIR, PATH_WEB_DIR_ROUTE_MANIFEST), types: path.join(BASE_DIR, 'web/types'), entryClient: resolveFile(path.join(BASE_DIR, PATH_WEB_DIR_ENTRY_CLIENT)), // new vite/stream entry point for client + entryServer: resolveFile(path.join(BASE_DIR, PATH_WEB_DIR_ENTRY_SERVER)), }, } @@ -224,6 +236,32 @@ export const getPaths = (BASE_DIR: string = getBaseDir()): Paths => { return paths } +/** + * Returns the route hook for the supplied page path. + * Note that the page name doesn't have to match + * + * @param pagePath + * @returns string + */ +export const getRouteHookForPage = (pagePath: string | undefined | null) => { + if (!pagePath) { + return null + } + + // We just use fg, so if they make typos in the routeHook file name, + // it's all good, we'll still find it + return fg + .sync('*.routeHooks.{js,ts,tsx,jsx}', { + absolute: true, + cwd: path.dirname(pagePath), // the page's folder + }) + .at(0) +} + +export const getAppRouteHook = () => { + return resolveFile(path.join(getPaths().web.src, 'App.routeHooks')) +} + /** * Process the pages directory and return information useful for automated imports. * diff --git a/packages/structure/src/model/RWRoute.ts b/packages/structure/src/model/RWRoute.ts index 289cf5bf8535..fbe67fbd5f9a 100644 --- a/packages/structure/src/model/RWRoute.ts +++ b/packages/structure/src/model/RWRoute.ts @@ -144,6 +144,11 @@ export class RWRoute extends BaseNode { return this.getBoolAttr('prerender') } + // TODO (STREAMING) Remove this once we're sure we don't want to do Render Modes + @lazy() get renderMode(): string | undefined { + return this.getStringAttr('renderMode') || 'stream' + } + @lazy() get path_literal_node() { const a = this.jsxNode.getAttribute('path') if (!a) { @@ -162,6 +167,10 @@ export class RWRoute extends BaseNode { return typeof this.jsxNode.getAttribute('notfound') !== 'undefined' } + @lazy() get redirect() { + return this.getStringAttr('redirect') + } + *diagnostics() { if (this.page_identifier && !this.page) { // normally this would be caught by TypeScript diff --git a/packages/vite/ambient.d.ts b/packages/vite/ambient.d.ts new file mode 100644 index 000000000000..3814acb97c3d --- /dev/null +++ b/packages/vite/ambient.d.ts @@ -0,0 +1,15 @@ +/* eslint-disable no-var */ + +declare global { + var RWJS_ENV: { + RWJS_API_GRAPHQL_URL?: string + /** URL or absolute path to serverless functions */ + RWJS_API_URL?: string + + __REDWOOD__APP_TITLE?: string + } + + var __REDWOOD__PRERENDER_PAGES: any +} + +export {} diff --git a/packages/vite/inject/reactRefresh.js b/packages/vite/inject/reactRefresh.js new file mode 100644 index 000000000000..b411150d2f00 --- /dev/null +++ b/packages/vite/inject/reactRefresh.js @@ -0,0 +1,7 @@ +/* eslint-disable no-undef */ + +import RefreshRuntime from '/@react-refresh' +RefreshRuntime.injectIntoGlobalHook(window) +window.$RefreshReg$ = () => {} +window.$RefreshSig$ = () => (type) => type +window.__vite_plugin_react_preamble_installed__ = true diff --git a/packages/vite/package.json b/packages/vite/package.json index 0fc6de4214f8..25b8b9dfdc18 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -9,10 +9,13 @@ }, "license": "MIT", "files": [ - "dist" + "dist", + "inject" ], "main": "dist/index.js", "bin": { + "rw-dev-fe": "./dist/devFeServer.js", + "rw-serve-fe": "./dist/runFeServer.js", "rw-vite-build": "./bins/rw-vite-build.mjs", "rw-vite-dev": "./bins/rw-vite-dev.mjs", "vite": "./bins/vite.mjs" @@ -29,15 +32,21 @@ "@babel/runtime-corejs3": "7.22.5", "@redwoodjs/internal": "5.0.0", "@redwoodjs/project-config": "5.0.0", + "@redwoodjs/web": "5.0.0", "@vitejs/plugin-react": "4.0.1", "buffer": "6.0.3", "core-js": "3.31.0", + "dotenv-defaults": "5.0.2", + "express": "4.18.2", + "http-proxy-middleware": "2.0.6", + "isbot": "3.6.8", "vite": "4.3.9", "vite-plugin-environment": "1.1.3", "yargs-parser": "21.1.1" }, "devDependencies": { "@babel/cli": "7.22.5", + "@types/express": "4", "@types/yargs-parser": "21.0.0", "glob": "10.3.1", "jest": "29.5.0", diff --git a/packages/vite/src/buildFeServer.ts b/packages/vite/src/buildFeServer.ts new file mode 100644 index 000000000000..7eb123f411e4 --- /dev/null +++ b/packages/vite/src/buildFeServer.ts @@ -0,0 +1,145 @@ +import fs from 'fs/promises' +import path from 'path' + +import { build as esbuildBuild, PluginBuild } from 'esbuild' +import type { Manifest as ViteManifest } from 'vite' + +import { getRouteHookBabelPlugins } from '@redwoodjs/internal' +import { transformWithBabel } from '@redwoodjs/internal/dist/build/babel/api' +import { buildWeb } from '@redwoodjs/internal/dist/build/web' +import { findRouteHooksSrc } from '@redwoodjs/internal/dist/files' +import { getProjectRoutes } from '@redwoodjs/internal/dist/routes' +import { getAppRouteHook, getPaths } from '@redwoodjs/project-config' + +import { RWRouteManifest } from './types' + +interface BuildOptions { + verbose?: boolean +} + +export const buildFeServer = async ({ verbose }: BuildOptions) => { + const rwPaths = getPaths() + const viteConfig = rwPaths.web.viteConfig + + if (!viteConfig) { + throw new Error( + 'Vite config not found. You need to setup your project with Vite using `yarn rw setup vite`' + ) + } + + if (!rwPaths.web.entryServer || !rwPaths.web.entryClient) { + throw new Error( + 'Vite entry points not found. Please check that your project has an entry-client.{jsx,tsx} and entry-server.{jsx,tsx} file in the web/src directory.' + ) + } + + // Step 1A: Generate the client bundle + await buildWeb({ verbose }) + + // TODO (STREAMING) When Streaming is released Vite will be the only bundler, + // so we can switch to a regular import + // @NOTE: Using dynamic import, because vite is still opt-in + const { build } = await import('vite') + + // Step 1B: Generate the server output + await build({ + configFile: viteConfig, + build: { + // Because we configure the root to be web/src, we need to go up one level + outDir: rwPaths.web.distServer, + ssr: rwPaths.web.entryServer, + }, + envFile: false, + logLevel: verbose ? 'info' : 'warn', + }) + + const allRouteHooks = findRouteHooksSrc() + + const runRwBabelTransformsPlugin = { + name: 'rw-esbuild-babel-transform', + setup(build: PluginBuild) { + build.onLoad({ filter: /\.(js|ts|tsx|jsx)$/ }, async (args) => { + // Remove RedwoodJS "magic" from a user's code leaving JavaScript behind. + // TODO (STREAMING) We need the new transformWithBabel function in https://github.com/redwoodjs/redwood/pull/7672/files + const transformedCode = transformWithBabel(args.path, [ + ...getRouteHookBabelPlugins(), + ]) + + if (transformedCode?.code) { + return { + contents: transformedCode.code, + loader: 'js', + } + } + + throw new Error(`Could not transform file: ${args.path}`) + }) + }, + } + + await esbuildBuild({ + absWorkingDir: getPaths().web.base, + entryPoints: allRouteHooks, + platform: 'node', + target: 'node16', + // @MARK Disable splitting and esm, because Redwood web modules don't support esm yet + // outExtension: { '.js': '.mjs' }, + // format: 'esm', + // splitting: true, + bundle: true, + plugins: [runRwBabelTransformsPlugin], + packages: 'external', + logLevel: verbose ? 'info' : 'error', + outdir: rwPaths.web.distRouteHooks, + }) + + // Step 3: Generate route-manifest.json + const manifestPath = path.join(getPaths().web.dist, 'build-manifest.json') + const buildManifestStr = await fs.readFile(manifestPath, 'utf-8') + const clientBuildManifest: ViteManifest = JSON.parse(buildManifestStr) + + const routesList = getProjectRoutes() + + const routeManifest = routesList.reduce((acc, route) => { + acc[route.path] = { + name: route.name, + bundle: route.relativeFilePath + ? clientBuildManifest[route.relativeFilePath].file + : null, + matchRegexString: route.matchRegexString, + // @NOTE this is the path definition, not the actual path + // E.g. /blog/post/{id:Int} + pathDefinition: route.path, + hasParams: route.hasParams, + routeHooks: FIXME_constructRouteHookPath(route.routeHooks), + redirect: route.redirect + ? { + to: route.redirect?.to, + permanent: false, + } + : null, + renderMode: route.renderMode, + } + return acc + }, {}) + + await fs.writeFile(rwPaths.web.routeManifest, JSON.stringify(routeManifest)) +} + +// TODO (STREAMING) Hacky work around because when you don't have a App.routeHook, esbuild doesn't create +// the pages folder in the dist/server/routeHooks directory. +// @MARK need to change to .mjs here if we use esm +const FIXME_constructRouteHookPath = (rhSrcPath: string | null | undefined) => { + const rwPaths = getPaths() + if (!rhSrcPath) { + return null + } + + if (getAppRouteHook()) { + return path.relative(rwPaths.web.src, rhSrcPath).replace('.ts', '.js') + } else { + return path + .relative(path.join(rwPaths.web.src, 'pages'), rhSrcPath) + .replace('.ts', '.js') + } +} diff --git a/packages/vite/src/devFeServer.ts b/packages/vite/src/devFeServer.ts new file mode 100644 index 000000000000..7f0a95194655 --- /dev/null +++ b/packages/vite/src/devFeServer.ts @@ -0,0 +1,174 @@ +// TODO (STREAMING) Merge with runFeServer so we only have one file +import path from 'path' + +import express from 'express' +import { renderToPipeableStream } from 'react-dom/server' +import { createServer as createViteServer } from 'vite' + +import { getProjectRoutes } from '@redwoodjs/internal/dist/routes' +import { getAppRouteHook, getConfig, getPaths } from '@redwoodjs/project-config' +import { matchPath } from '@redwoodjs/router' +import type { TagDescriptor } from '@redwoodjs/web' + +import { loadAndRunRouteHooks } from './triggerRouteHooks' +import { stripQueryStringAndHashFromPath } from './utils' + +// These values are defined in the vite.config.ts +globalThis.RWJS_ENV = {} + +// TODO (STREAMING) Just so it doesn't error out. Not sure how to handle this. +globalThis.__REDWOOD__PRERENDER_PAGES = {} + +async function createServer() { + const app = express() + const rwPaths = getPaths() + + // TODO (STREAMING) When Streaming is released Vite will be the only bundler, + // and this file should always exist. So the error message needs to change + // (or be removed perhaps) + // @MARK: Vite is still experimental, and opt-in + if (!rwPaths.web.viteConfig) { + throw new Error( + 'Vite config not found. You need to setup your project with Vite using `yarn rw setup vite`' + ) + } + + // Create Vite server in middleware mode and configure the app type as + // 'custom', disabling Vite's own HTML serving logic so parent server + // can take control + const vite = await createViteServer({ + configFile: rwPaths.web.viteConfig, + server: { middlewareMode: true }, + logLevel: 'info', + clearScreen: false, + appType: 'custom', + }) + + // use vite's connect instance as middleware + // if you use your own express router (express.Router()), you should use router.use + app.use(vite.middlewares) + + app.use('*', async (req, res, next) => { + const currentPathName = stripQueryStringAndHashFromPath(req.originalUrl) + + try { + const routes = getProjectRoutes() + + // Do a simple match with regex, don't bother parsing params yet + const currentRoute = routes.find((route) => { + if (!route.matchRegexString) { + // This is the 404/NotFoundPage case + return false + } + + const matches = [ + ...currentPathName.matchAll(new RegExp(route.matchRegexString, 'g')), + ] + + return matches.length > 0 + }) + + let metaTags: TagDescriptor[] = [] + + if (currentRoute?.redirect) { + return res.redirect(currentRoute.redirect.to) + } + + if (currentRoute) { + const parsedParams = currentRoute.hasParams + ? matchPath(currentRoute.path, currentPathName).params + : undefined + + const routeHookOutput = await loadAndRunRouteHooks({ + paths: [getAppRouteHook(), currentRoute.routeHooks], + reqMeta: { + req, + parsedParams, + }, + viteDevServer: vite, // because its dev + }) + + metaTags = routeHookOutput.meta + } + + if (!currentRoute) { + // TODO (STREAMING) do something + } + + if (!rwPaths.web.entryServer || !rwPaths.web.entryClient) { + throw new Error( + 'Vite entry points not found. Please check that your project has an entry-client.{jsx,tsx} and entry-server.{jsx,tsx} file in the web/src directory.' + ) + } + + // 3. Load the server entry. vite.ssrLoadModule automatically transforms + // your ESM source code to be usable in Node.js! There is no bundling + // required, and provides efficient invalidation similar to HMR. + const { serverEntry } = await vite.ssrLoadModule(rwPaths.web.entryServer) + + // TODO (STREAMING) CSS is handled by Vite in dev mode, we don't need to + // worry about it in dev but..... it causes a flash of unstyled content. + // For now I'm just injecting index css here + // We believe we saw a fix for this somewhere in the Waku sources. Maybe + // it was called something like "Capture Css". And it's also mentioned + // in the Vite issues on GitHub + const FIXME_HardcodedIndexCss = ['index.css'] + + const assetMap = JSON.stringify({ + css: FIXME_HardcodedIndexCss, + meta: metaTags, + }) + + const bootstrapModules = [ + path.join(__dirname, '../inject', 'reactRefresh.js'), + ] + + const pageWithJs = currentRoute?.renderMode !== 'html' + + if (pageWithJs) { + bootstrapModules.push(rwPaths.web.entryClient) + } + + const { pipe } = renderToPipeableStream( + serverEntry({ + url: currentPathName, + css: FIXME_HardcodedIndexCss, + meta: metaTags, + }), + { + bootstrapScriptContent: pageWithJs + ? `window.__assetMap = function() { return ${assetMap} }` + : undefined, + bootstrapModules, + onShellReady() { + res.setHeader('content-type', 'text/html; charset=utf-8') + pipe(res) + }, + } + ) + } catch (e) { + // TODO (STREAMING) Is this what we want to do? + // send back a SPA page + // res.status(200).set({ 'Content-Type': 'text/html' }).end(template) + + // If an error is caught, let Vite fix the stack trace so it maps back to + // your actual source code. + vite.ssrFixStacktrace(e as any) + next(e) + } + }) + + const port = getConfig().web.port + console.log(`Started server on http://localhost:${port}`) + return await app.listen(port) +} + +let devApp = createServer() + +process.stdin.on('data', async (data) => { + const str = data.toString().trim().toLowerCase() + if (str === 'rs' || str === 'restart') { + ;(await devApp).close() + devApp = createServer() + } +}) diff --git a/packages/vite/src/index.ts b/packages/vite/src/index.ts index 939c81b4a350..37ae566af730 100644 --- a/packages/vite/src/index.ts +++ b/packages/vite/src/index.ts @@ -214,3 +214,5 @@ export default function redwoodPluginVite(): PluginOption[] { }), ] } + +export { buildFeServer } from './buildFeServer' diff --git a/packages/vite/src/runFeServer.ts b/packages/vite/src/runFeServer.ts new file mode 100644 index 000000000000..9aefa342c38a --- /dev/null +++ b/packages/vite/src/runFeServer.ts @@ -0,0 +1,249 @@ +// TODO (STREAMING) Move this to a new package called @redwoodjs/fe-server (goes +// well in naming with with @redwoodjs/api-server) +// Only things used during dev can be in @redwoodjs/vite. Everything else has +// to go in fe-server + +import fs from 'fs/promises' +import path from 'path' + +// @ts-expect-error We will remove dotenv-defaults from this package anyway +import { config as loadDotEnv } from 'dotenv-defaults' +import express from 'express' +import { createProxyMiddleware } from 'http-proxy-middleware' +import isbot from 'isbot' +import { renderToPipeableStream } from 'react-dom/server' +import type { Manifest as ViteManifest } from 'vite' + +import { getConfig, getPaths } from '@redwoodjs/project-config' +import { matchPath } from '@redwoodjs/router' +import type { TagDescriptor } from '@redwoodjs/web' + +import { loadAndRunRouteHooks } from './triggerRouteHooks' +import { RWRouteManifest } from './types' +import { stripQueryStringAndHashFromPath } from './utils' + +globalThis.RWJS_ENV = {} + +/** + * TODO (STREAMING) + * We have this server in the vite package only temporarily. + * We will need to decide where to put it, so that rwjs/internal and other heavy dependencies + * can be removed from the final docker image + */ + +// --- @MARK This should be removed once we have re-architected the rw serve command --- +// We need the dotenv, so that prisma knows the DATABASE env var +// Normally the RW cli loads this for us, but we expect this file to be run directly +// without using the CLI. Remember to remove dotenv-defaults dependency from this package +loadDotEnv({ + path: path.join(getPaths().base, '.env'), + defaults: path.join(getPaths().base, '.env.defaults'), + multiline: true, +}) +//------------------------------------------------ + +const checkUaForSeoCrawler = isbot.spawn() +checkUaForSeoCrawler.exclude(['chrome-lighthouse']) + +export async function runFeServer() { + const app = express() + const rwPaths = getPaths() + const rwConfig = getConfig() + + const routeManifestStr = await fs.readFile(rwPaths.web.routeManifest, 'utf-8') + const routeManifest: RWRouteManifest = JSON.parse(routeManifestStr) + + const manifestPath = path.join(getPaths().web.dist, 'build-manifest.json') + const buildManifestStr = await fs.readFile(manifestPath, 'utf-8') + const buildManifest: ViteManifest = JSON.parse(buildManifestStr) + + const indexEntry = Object.values(buildManifest).find((manifestItem) => { + return manifestItem.isEntry + }) + + if (!indexEntry) { + throw new Error('Could not find index.html in build manifest') + } + + // 👉 1. Use static handler for assets + // For CF workers, we'd need an equivalent of this + app.use('/assets', express.static(rwPaths.web.dist + '/assets')) + + // 👉 2. Proxy the api server + // TODO (STREAMING) we need to be able to specify whether proxying is required or not + // e.g. deploying to Netlify, we don't need to proxy but configure it in Netlify + // Also be careful of differences between v2 and v3 of the server + app.use( + rwConfig.web.apiUrl, + // @WARN! Be careful, between v2 and v3 of http-proxy-middleware + // the syntax has changed https://github.com/chimurai/http-proxy-middleware + createProxyMiddleware({ + changeOrigin: true, + pathRewrite: { + [`^${rwConfig.web.apiUrl}`]: '', // remove base path + }, + // Using 127.0.0.1 to force ipv4. With `localhost` you don't really know + // if it's going to be ipv4 or ipv6 + target: `http://127.0.0.1:${rwConfig.api.port}`, + }) + ) + + // 👉 3. Handle all other requests with the server entry + // This is where we match the url to the correct route, and render it + // We also call the relevant routeHooks here + app.use('*', async (req, res) => { + const currentPathName = stripQueryStringAndHashFromPath(req.originalUrl) + + try { + const { serverEntry } = await import( + path.join(rwPaths.web.distServer, '/entry-server.js') + ) + + // TODO (STREAMING) should we generate individual express Routes for each Route? + // This would make handling 404s and favicons / public assets etc. easier + const currentRoute = Object.values(routeManifest).find((route) => { + if (!route.matchRegexString) { + // This is the 404/NotFoundPage case + return false + } + + const matches = [ + ...currentPathName.matchAll(new RegExp(route.matchRegexString, 'g')), + ] + return matches.length > 0 + }) + + // Doesn't match any of the defined Routes + // Render 404 page, and send back 404 status + if (!currentRoute) { + // TODO (STREAMING) should we CONST it? + const fourOhFourRoute = routeManifest['notfound'] + + if (!fourOhFourRoute) { + return res.sendStatus(404) + } + + const assetMap = JSON.stringify({ css: indexEntry.css }) + + const { pipe } = renderToPipeableStream( + serverEntry({ + url: currentPathName, + routeContext: null, + css: indexEntry.css, + }), + { + bootstrapScriptContent: `window.__assetMap = function() { return ${assetMap} }`, + // @NOTE have to add slash so subpaths still pick up the right file + // Vite is currently producing modules not scripts: https://vitejs.dev/config/build-options.html#build-target + bootstrapModules: [ + '/' + indexEntry.file, + '/' + fourOhFourRoute.bundle, + ], + onShellReady() { + res.setHeader('content-type', 'text/html') + res.status(404) + pipe(res) + }, + } + ) + + return + } + + let metaTags: TagDescriptor[] = [] + + if (currentRoute?.redirect) { + // TODO (STREAMING) deal with permanent/temp + // Short-circuit, and return a 301 or 302 + return res.redirect(currentRoute.redirect.to) + } + + if (currentRoute) { + // Make sure we access the dist routeHooks! + const routeHookPaths = [ + // TODO (STREAMING) hardcoded JS file, watchout if we switch to ESM! + path.join(rwPaths.web.distRouteHooks, 'App.routeHooks.js'), + currentRoute.routeHooks + ? path.join(rwPaths.web.distRouteHooks, currentRoute.routeHooks) + : null, + ] + + const parsedParams = currentRoute.hasParams + ? matchPath(currentRoute.pathDefinition, currentPathName).params + : undefined + + const routeHookOutput = await loadAndRunRouteHooks({ + paths: routeHookPaths, + reqMeta: { + req, + parsedParams, + }, + }) + + metaTags = routeHookOutput.meta + } + + const pageWithJs = currentRoute.renderMode !== 'html' + // @NOTE have to add slash so subpaths still pick up the right file + // Vite is currently producing modules not scripts: https://vitejs.dev/config/build-options.html#build-target + const bootstrapModules = pageWithJs + ? ['/' + indexEntry.file, '/' + currentRoute.bundle] + : undefined + + const isSeoCrawler = checkUaForSeoCrawler(req.get('user-agent')) + + const { pipe, abort } = renderToPipeableStream( + // we should use the same shape as Remix or Next for the meta object + serverEntry({ + url: currentPathName, + css: indexEntry.css, + meta: metaTags, + }), + { + bootstrapScriptContent: pageWithJs + ? `window.__assetMap = function() { return ${JSON.stringify({ + css: indexEntry.css, + meta: metaTags, + })} }` + : undefined, + bootstrapModules, + onShellReady() { + if (!isSeoCrawler) { + res.setHeader('content-type', 'text/html; charset=utf-8') + pipe(res) + } + }, + onAllReady() { + if (isSeoCrawler) { + res.setHeader('content-type', 'text/html; charset=utf-8') + pipe(res) + } + }, + onError(error) { + console.error(error) + }, + } + ) + + // TODO (STREAMING) make the timeout configurable + setTimeout(() => { + abort() + }, 10_000) + } catch (e) { + console.error(e) + + // streaming no longer requires us to send back a blank page + // React will automatically switch to client rendering on error + return res.sendStatus(500) + } + + return + }) + + app.listen(rwConfig.web.port) + console.log( + `Started production FE server on http://localhost:${rwConfig.web.port}` + ) +} + +runFeServer() diff --git a/packages/vite/src/triggerRouteHooks.ts b/packages/vite/src/triggerRouteHooks.ts new file mode 100644 index 000000000000..9f118a11429c --- /dev/null +++ b/packages/vite/src/triggerRouteHooks.ts @@ -0,0 +1,114 @@ +import { Request } from 'express' +import { ViteDevServer } from 'vite' + +import { MetaHook, TagDescriptor } from '@redwoodjs/web' +import type { RouteHookEvent, RouteHookOutput } from '@redwoodjs/web' + +interface RouteHooks { + meta?: MetaHook +} + +interface TriggerRouteHooksParam { + routeHooks: RouteHooks + req: Request + parsedParams?: Record + previousOutput?: RouteHookOutput +} + +export const triggerRouteHooks = async ({ + routeHooks, + req, + parsedParams = {}, + previousOutput, +}: TriggerRouteHooksParam) => { + const event: RouteHookEvent = { + params: parsedParams, + headers: req.headers || {}, + query: req.query as any, // TODO (STREAMING) we should parse query parameters the same way as RW router + // cookies: req.cookies || {}, // TODO (STREAMING) we probably need some sort of cookie parser + // TODO (STREAMING) called app routeHook, but its just the previous output + appRouteHook: previousOutput, + } + + let meta: TagDescriptor[] = previousOutput?.meta || [] + + try { + const metaRouteHookOutput = (await routeHooks?.meta?.(event)) || [] + + // Convert it to an array, if it's not already + const currentMeta = Array.isArray(metaRouteHookOutput) + ? metaRouteHookOutput + : [metaRouteHookOutput] + + meta = [...meta, ...currentMeta] + } catch (e: any) { + throw new Error(`Error in meta hook: ${e.message}`) + } + + return { + meta, + } +} + +interface LoadAndRunRouteHooks { + paths: Array // will run in order of the array + reqMeta: { + req: Request + parsedParams?: Record + } + viteDevServer?: ViteDevServer + previousOutput?: RouteHookOutput +} + +const defaultRouteHookOutput = { + meta: [], +} + +export const loadAndRunRouteHooks = async ({ + paths = [], + reqMeta, + viteDevServer, + previousOutput = defaultRouteHookOutput, +}: LoadAndRunRouteHooks): Promise => { + // Step 1, load the route hooks + const loadModule = async (path: string) => { + return viteDevServer ? viteDevServer.ssrLoadModule(path) : import(path) + } + + let currentRouteHooks: RouteHooks + + // Pull out the first path + // Remember shift will mutate the array + const routeHookPath = paths.shift() + + if (!routeHookPath) { + return defaultRouteHookOutput + } else { + try { + currentRouteHooks = await loadModule(routeHookPath) + + // Step 2, run the route hooks + const rhOutput = await triggerRouteHooks({ + routeHooks: currentRouteHooks, + req: reqMeta.req, + parsedParams: reqMeta.parsedParams, + previousOutput, + }) + + if (paths.length > 0) { + // Step 3, recursively call this function + return loadAndRunRouteHooks({ + paths, + reqMeta, + previousOutput: rhOutput, + viteDevServer, + }) + } else { + return rhOutput + } + } catch (e) { + console.error(`Error loading route hooks in ${routeHookPath}}`) + throw new Error(e as any) + } + } +} diff --git a/packages/vite/src/types.ts b/packages/vite/src/types.ts new file mode 100644 index 000000000000..445f3226a572 --- /dev/null +++ b/packages/vite/src/types.ts @@ -0,0 +1,25 @@ +/** + * + * Sub+Superset of RouteSpec returned by getProjectRoutes() + * in packages/internal/src/routes.ts + * + * Differences: + * - has path to routeHook (which is not available until after build) + * - bundle doesn't exist before build, comes from vite build manifest. Used in script injection + * + * **All** of these properties are used by the prod FE server + */ +export interface RWRouteManifestItem { + matchRegexString: string | null // xAR, RouteSpec.matchRegexString + routeHooks: string | null // xAR, RouteSpec.routeHooks BUT in RouteSpec its the src path, here its the dist path + bundle: string | null // xAR, xRS + pathDefinition: PathDefinition // <-- AnalyzedRoute.path, RouteSpec.path + hasParams: boolean // xAR, RouteSpec.hasParams + name: string // <-- AnalyzedRoute.name, RouteSpec.name + redirect: { to: string; permanent: boolean } | null // xAR (not same type), RouteSpec.redirect + renderMode: 'html' | 'stream' // x, RouteSpec.renderMode +} + +export type RWRouteManifest = Record + +type PathDefinition = string diff --git a/packages/vite/src/utils.ts b/packages/vite/src/utils.ts new file mode 100644 index 000000000000..fcf22a750f11 --- /dev/null +++ b/packages/vite/src/utils.ts @@ -0,0 +1,3 @@ +export function stripQueryStringAndHashFromPath(url: string) { + return url.split('?')[0].split('#')[0]; +} diff --git a/packages/vite/tsconfig.json b/packages/vite/tsconfig.json index be7311543e87..00e919443e94 100644 --- a/packages/vite/tsconfig.json +++ b/packages/vite/tsconfig.json @@ -9,5 +9,7 @@ "include": ["src/**/*", "./ambient.d.ts"], "references": [ { "path": "../internal" }, + { "path": "../project-config" }, + { "path": "../web" }, ] } diff --git a/packages/web/src/apollo/index.tsx b/packages/web/src/apollo/index.tsx index b6d826bb135e..f7b0827ced72 100644 --- a/packages/web/src/apollo/index.tsx +++ b/packages/web/src/apollo/index.tsx @@ -5,6 +5,7 @@ import type { } from '@apollo/client' import * as apolloClient from '@apollo/client' import { setContext } from '@apollo/client/link/context' +import { fetch as crossFetch } from '@whatwg-node/fetch' import { print } from 'graphql/language/printer' // Note: Importing directly from `apollo/client` doesn't work properly in Storybook. @@ -182,7 +183,10 @@ const ApolloProviderWithFetchConfig: React.FunctionComponent<{ // A terminating link. Apollo Client uses this to send GraphQL operations to a server over HTTP. // See https://www.apollographql.com/docs/react/api/link/introduction/#the-terminating-link. - const httpLink = new HttpLink({ uri, ...httpLinkConfig }) + let httpLink = new HttpLink({ uri, ...httpLinkConfig }) + if (globalThis.RWJS_EXP_STREAMING_SSR) { + httpLink = new HttpLink({ uri, fetch: crossFetch, ...httpLinkConfig }) + } // The order here is important. The last link *must* be a terminating link like HttpLink. const redwoodApolloLinks: RedwoodApolloLinks = [ diff --git a/packages/web/src/components/RedwoodProvider.tsx b/packages/web/src/components/RedwoodProvider.tsx index dd331c92461c..bc84deeb17af 100644 --- a/packages/web/src/components/RedwoodProvider.tsx +++ b/packages/web/src/components/RedwoodProvider.tsx @@ -18,6 +18,12 @@ export const RedwoodProvider = ({ } return '' } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + // TODO (STREAMING) need to disable helmet here, because it clashes with meta + // routeHooks but can still leave helmet provider to make it easy to migrate + // to new setup + // TODO (STREAMING) Figure out how the Helmet stuff can live along side + // streaming while streaming is still experimental return ( diff --git a/packages/web/src/components/htmlTags.tsx b/packages/web/src/components/htmlTags.tsx new file mode 100644 index 000000000000..57482830ece8 --- /dev/null +++ b/packages/web/src/components/htmlTags.tsx @@ -0,0 +1,116 @@ +import { Fragment } from 'react' +/** CSS is a specialised metatag */ +export const Css = ({ css = [] }: { css: string[] }) => { + return ( + <> + {css.map((cssLinks, index) => { + return ( + + ) + })} + + ) +} + +/** + * My Page + */ +interface Title { + title: string +} + +/** + * + */ +interface NameContent { + name: string + content: string +} + +/** + * + */ +interface OpenGraph { + property: string + content: string +} + +/** + * + */ +interface HttpEquiv { + httpEquiv: string + content: string +} + +/*** + * + */ +interface Custom { + [name: string]: unknown +} + +/** + * + */ +interface Other extends Custom { + tagType: string // link, script, etc +} + +// @MARK Maintaining a similar format to Remix's V2_MetaDescriptor +// 1. because I (Danny) like it +// 2. because it'll feel consistent to people who are familiar with Remix +// I've modified it a little bit, but we need to decide wether we want the +// remix style DIY meta tags, or the more opinionated approach in MetaTags.tsx +export type TagDescriptor = + | Title + // TODO (STREAMING) Not sure why we need these, maybe just for ease of use + | NameContent + | OpenGraph + | HttpEquiv + // ------------------------ + | Custom + | Other + +interface MetaProps { + tags: TagDescriptor[] | undefined +} + +export const Meta = ({ tags = [] }: MetaProps) => { + return ( + <> + {tags.map((tag, index) => { + if (!tag) { + return null + } + + if (isTitleTag(tag)) { + return ( + + {tag.title} + + + ) + } + + // TODO (STREAMING) add validate tag function + if (otherTag(tag)) { + const { tagType: TagName, ...rest } = tag + return + } + + return + })} + + ) +} + +const isTitleTag = (tag: TagDescriptor): tag is Title => { + return 'title' in tag +} + +// Not a "" tag +const otherTag = (tag: TagDescriptor): tag is Other => { + return 'tagType' in tag +} diff --git a/packages/web/src/index.ts b/packages/web/src/index.ts index 7774301aab5b..baa1196cb448 100644 --- a/packages/web/src/index.ts +++ b/packages/web/src/index.ts @@ -31,3 +31,6 @@ export * from './components/RedwoodProvider' export * from './components/MetaTags' export { Helmet as Head, Helmet } from 'react-helmet-async' + +export * from './components/htmlTags' +export * from './routeHooks.types' diff --git a/packages/web/src/routeHooks.types.ts b/packages/web/src/routeHooks.types.ts new file mode 100644 index 000000000000..b282ec3db667 --- /dev/null +++ b/packages/web/src/routeHooks.types.ts @@ -0,0 +1,17 @@ +import { TagDescriptor } from './components/htmlTags' + +export type RouteHookOutput = { + meta: TagDescriptor[] +} +export interface RouteHookEvent { + params: Record // this has to be provided from RW router + headers: Record + query: Record + // cookies: Record TODO (STREAMING) pass in parsed cookies + // TODO (STREAMING) this is the previous output, but we call it appRouteHook, we should rename it + appRouteHook?: RouteHookOutput +} + +export type MetaHook = ( + event: RouteHookEvent +) => Promise | TagDescriptor[] | TagDescriptor diff --git a/packages/web/src/serverContext.tsx b/packages/web/src/serverContext.tsx new file mode 100644 index 000000000000..f2ac6ac7a698 --- /dev/null +++ b/packages/web/src/serverContext.tsx @@ -0,0 +1,9 @@ +// TODO (STREAMING) is this even used anymore? +import React from 'react' + +const ServerContext = React.createContext({}) + +export const { + Provider: ServerContextProvider, + Consumer: ServerContextConsumer, +} = ServerContext diff --git a/yarn.lock b/yarn.lock index 8bae508d81a5..ce0b3900e693 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,13 @@ __metadata: version: 6 cacheKey: 8c0 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: 53c2b231a61a46792b39a0d43bc4f4f776bb4542aa57ee04930676802e5501282c2fc8aac14e4cd1f1120ff8b52616b6ff5ab539ad30aa2277d726444b71619f + languageName: node + linkType: hard + "@actions/cache@npm:3.2.1": version: 3.2.1 resolution: "@actions/cache@npm:3.2.1" @@ -424,8 +431,8 @@ __metadata: linkType: hard "@azure/core-http@npm:^3.0.0": - version: 3.0.1 - resolution: "@azure/core-http@npm:3.0.1" + version: 3.0.2 + resolution: "@azure/core-http@npm:3.0.2" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.3.0 @@ -441,7 +448,7 @@ __metadata: tunnel: ^0.0.6 uuid: ^8.3.0 xml2js: ^0.5.0 - checksum: 3e74fa4f7aab2b5f3fe2256b0e922f331c21f1367f3e1e069802126d3e3ef3235f9df07180919acd82b9ea5869d42ea55cd73ee31cf0fcf9db4a2c5fa3607b6a + checksum: 2dacb199bb77b07bc3cf8d3e9426e0ddec0de4a105f1f38a85d13c3e438bf34c29c1bd9a7e54d36483162ec9ddb6d0081caeb924445c0689868f432f5ccdc6cc languageName: node linkType: hard @@ -1316,14 +1323,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6": - version: 7.21.4 - resolution: "@babel/plugin-syntax-flow@npm:7.21.4" +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-flow@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ff6bd5e5b6064276fd18b8a2e9bafb4d8cdf95b7a06b34bc93cd4fa3b5dfcc482f830c1174cbb245c160c32beed2d4ac6b402be9b3b6962d40a032fda3f61c80 + checksum: 07afc7df02141597968532bfbfa3f6c0ad21a2bdd885d0e5e035dcf60fdf35f0995631c9750b464e1a6f2feea14160a82787f914e88e8f7115dc99f09853e43e languageName: node linkType: hard @@ -1679,15 +1686,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.21.0" +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-flow": ^7.18.6 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-flow": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7d6c6a4de53c4106ed30cd32c769f340d048d7c4d01391eebd3ad71eabbd6910bd1d483bc23eebcfd9bb45d40cb9b743d916c0746cdedd952791a1222620b48c + checksum: 5949a8e5214e3fc65d31dab0551423cea9d9eef35faa5d0004707ba7347baf96166aa400907ce7498f754db4e1e9d039ca434a508546b0dc9fdae9a42e814c1a languageName: node linkType: hard @@ -2363,15 +2370,15 @@ __metadata: linkType: hard "@babel/preset-flow@npm:^7.13.13, @babel/preset-flow@npm:^7.18.6": - version: 7.21.4 - resolution: "@babel/preset-flow@npm:7.21.4" + version: 7.22.5 + resolution: "@babel/preset-flow@npm:7.22.5" dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-option": ^7.21.0 - "@babel/plugin-transform-flow-strip-types": ^7.21.0 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.5 + "@babel/plugin-transform-flow-strip-types": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 50ec8dc9a30ef7ba668e9872f2142bad4ecf7a9a37dfe323a28b7f1de3b2db861e4cf7737e9dfa1a433bd65c3a26d4da93d2efce4f83c39bb8114fcc010ec39f + checksum: d3a54fbaa6da304bedc08847876f23c4bd6f9b13eb8b675ae48c45c678066f7610437b16a8972209c5250bdb205bde8800b8055a844922488b899fdbfe295f31 languageName: node linkType: hard @@ -2454,11 +2461,11 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": - version: 7.22.3 - resolution: "@babel/runtime@npm:7.22.3" + version: 7.22.5 + resolution: "@babel/runtime@npm:7.22.5" dependencies: regenerator-runtime: ^0.13.11 - checksum: 097d0d6aaab0dea782d14f720a7383ea50fa87cba6c070495aea691739ea11459d80b4acd086a38d52894a2b15d4748dc8040dba3706aa18a8d5c8d896dec9b0 + checksum: 11dcaeecd2246857ccf22f939fcae28a58d29e410607bfa28b95d9b03e298a3e3df8a530e22637d5bfccfc1661fb39cc50c06b404b5d53454bd93889c7dd3eb8 languageName: node linkType: hard @@ -2623,17 +2630,17 @@ __metadata: linkType: hard "@clerk/backend@npm:^0.23.5": - version: 0.23.5 - resolution: "@clerk/backend@npm:0.23.5" + version: 0.23.7 + resolution: "@clerk/backend@npm:0.23.7" dependencies: - "@clerk/types": ^3.46.0 + "@clerk/types": ^3.46.1 "@peculiar/webcrypto": 1.4.1 "@types/node": 16.18.6 deepmerge: 4.2.2 node-fetch-native: 1.0.1 snakecase-keys: 5.4.4 tslib: 2.4.1 - checksum: dfddb681fc898d48a778e51958265fe6ee64aee3b15dc70e9e3a952f1a6cf1fa3705f8304c8b3f1939239e5fdd2d67187e393aeb5c4752d2c0bf3853c61168d3 + checksum: aa2cd1f63c9cdb7a24da3bbcc59132cd041a8df5e92cc7fbc0b2934cd032d7e2add48ef6428f67202ab955c02b66bdbea957c930965cf332db4df1d354667f4e languageName: node linkType: hard @@ -2681,7 +2688,7 @@ __metadata: languageName: node linkType: hard -"@clerk/types@npm:3.46.1, @clerk/types@npm:^3.46.0": +"@clerk/types@npm:3.46.1, @clerk/types@npm:^3.46.0, @clerk/types@npm:^3.46.1": version: 3.46.1 resolution: "@clerk/types@npm:3.46.1" dependencies: @@ -3443,9 +3450,9 @@ __metadata: linkType: hard "@fastify/error@npm:^3.0.0, @fastify/error@npm:^3.2.0": - version: 3.2.1 - resolution: "@fastify/error@npm:3.2.1" - checksum: d6626cbefa9caf42cda5347323031a5bb5e8ca9a2952f99d44e395f8e85f18a16593c60dcf0788cb936902f29e93c702c3999b29daa23ad3b25e2d04fb3cb5ea + version: 3.3.0 + resolution: "@fastify/error@npm:3.3.0" + checksum: b9651ad1b25781880343514bd4dfcbdb55e2459830a78ada73c0ac3dbf217161ee80af7245c7c7bfa370775d0beb146845c7314da13f478ff67520c8128ec3f0 languageName: node linkType: hard @@ -3470,8 +3477,8 @@ __metadata: linkType: hard "@fastify/reply-from@npm:^9.0.0": - version: 9.1.0 - resolution: "@fastify/reply-from@npm:9.1.0" + version: 9.4.0 + resolution: "@fastify/reply-from@npm:9.4.0" dependencies: "@fastify/error": ^3.0.0 end-of-stream: ^1.4.4 @@ -3480,7 +3487,7 @@ __metadata: pump: ^3.0.0 tiny-lru: ^11.0.0 undici: ^5.19.1 - checksum: 5a7c343d90393d8a545cf43c14f66c17c4533d903a9a0aded84428abaff9140dbd4e9d22bb3c18e184bdc4ddc0dd2a6807ace7ff233a8b2ac82e09a0fa97bdb8 + checksum: 2090866e5d381685cf553918921fb27cd229aa3aa9d03353f91facf2f0637ee66a56391704a0bcb88344d7f10ff0360c4159e7f31eca5fa181271474da8a0d31 languageName: node linkType: hard @@ -4029,7 +4036,7 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": +"@gar/promisify@npm:^1.0.1": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" checksum: 0b3c9958d3cd17f4add3574975e3115ae05dc7f1298a60810414b16f6f558c137b5fb3cd3905df380bacfd955ec13f67c1e6710cbb5c246a7e8d65a8289b2bff @@ -4839,12 +4846,12 @@ __metadata: linkType: hard "@grpc/grpc-js@npm:~1.8.0": - version: 1.8.16 - resolution: "@grpc/grpc-js@npm:1.8.16" + version: 1.8.17 + resolution: "@grpc/grpc-js@npm:1.8.17" dependencies: "@grpc/proto-loader": ^0.7.0 "@types/node": ">=12.12.47" - checksum: d69b286d444535ae06f42845fcda9e807e296d0f1446ab0db319787f7ea9e520ef29c8484411ce1c0b12e65d66bd44c0f5497f3e7c1bc9ff0473d06e3cec9eea + checksum: 08e15d8795310dc45facf6af17708d92623380866cc0586cca766b3692abf6816a0cf7b9a9b4c3e6f1188c697df996244f64fd102c039271db5c63ff2d5981a8 languageName: node linkType: hard @@ -5234,13 +5241,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/source-map@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/source-map@npm:0.3.3" - dependencies: - "@jridgewell/gen-mapping": ^0.3.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: f341e3ed1e9dfe5ae95201e9e820bee7c0518f20f2831b9964ce6c4bfe59477fb7e3257a45fac193cb4aea0019f0a4f8ed68abb12fd3956610317946f7341e3f +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.4 + resolution: "@jridgewell/source-map@npm:0.3.4" + checksum: 4b83e015c3df8552b303f0d7d3f46b9fc297ae08e67dfe621ccbacf2879193e0890c397668a75ec90444de701616905376b02305d1a762c813ca03e86b8d9def languageName: node linkType: hard @@ -5546,16 +5550,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" - dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: c50d087733d0d8df23be24f700f104b19922a28677aa66fdbe06ff6af6431cc4a5bb1e27683cbc661a5dafa9bafdc603e6a0378121506dfcd394b2b6dd76a187 - languageName: node - linkType: hard - "@npmcli/fs@npm:^3.1.0": version: 3.1.0 resolution: "@npmcli/fs@npm:3.1.0" @@ -5565,9 +5559,9 @@ __metadata: languageName: node linkType: hard -"@npmcli/git@npm:^4.0.0": - version: 4.0.4 - resolution: "@npmcli/git@npm:4.0.4" +"@npmcli/git@npm:^4.0.0, @npmcli/git@npm:^4.1.0": + version: 4.1.0 + resolution: "@npmcli/git@npm:4.1.0" dependencies: "@npmcli/promise-spawn": ^6.0.0 lru-cache: ^7.4.4 @@ -5577,7 +5571,7 @@ __metadata: promise-retry: ^2.0.1 semver: ^7.3.5 which: ^3.0.0 - checksum: 42a2a600c380adf141b6fe01a41ebbaab4c0f5541af58a79e66d7c62acca08ec1f5a9f0a636e3c63dad47000c4a80496b912f18a3af58f1a40624f283ef3fd00 + checksum: 78591ba8f03de3954a5b5b83533455696635a8f8140c74038685fec4ee28674783a5b34a3d43840b2c5f9aa37fd0dce57eaf4ef136b52a8ec2ee183af2e40724 languageName: node linkType: hard @@ -5627,16 +5621,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 11b2151e6d1de6f6eb23128de5aa8a429fd9097d839a5190cb77aa47a6b627022c42d50fa7c47a00f1c9f8f0c1560092b09b061855d293fa0741a2a94cfb174d - languageName: node - linkType: hard - "@npmcli/name-from-folder@npm:^2.0.0": version: 2.0.0 resolution: "@npmcli/name-from-folder@npm:2.0.0" @@ -5652,14 +5636,16 @@ __metadata: linkType: hard "@npmcli/package-json@npm:^3.0.0": - version: 3.1.0 - resolution: "@npmcli/package-json@npm:3.1.0" + version: 3.1.1 + resolution: "@npmcli/package-json@npm:3.1.1" dependencies: + "@npmcli/git": ^4.1.0 glob: ^10.2.2 json-parse-even-better-errors: ^3.0.0 normalize-package-data: ^5.0.0 npm-normalize-package-bin: ^3.0.1 - checksum: e2d054a3c012fd180864d60afb2e66f2e8b0c5bb4ecad97371d288ff23fc668765be3c55e60c8b9cfb0231904536f639fdc5e9e37dd0e329ce8cf41bc87733a7 + proc-log: ^3.0.0 + checksum: fc3052a36cb65c011da75dfdb051b631557e5ccc7b25b64be87cb363e8f2e99d78fcf94495f456406ada2c75afaff8177a2a06a46594f15eb0b4e667110a415e languageName: node linkType: hard @@ -5694,12 +5680,12 @@ __metadata: languageName: node linkType: hard -"@nrwl/devkit@npm:16.3.2": - version: 16.3.2 - resolution: "@nrwl/devkit@npm:16.3.2" +"@nrwl/devkit@npm:16.4.1": + version: 16.4.1 + resolution: "@nrwl/devkit@npm:16.4.1" dependencies: - "@nx/devkit": 16.3.2 - checksum: b53edcbd65e24aa2232cae29389540ccd1db9d7a571cf8620b754ba7063a72bdb7c929a30627527f663bbef9c3d267b0bc2a3069609631e49136e60b6829668f + "@nx/devkit": 16.4.1 + checksum: 9382bc2e05a9849042b8a738108fe5b59a18aeee9de349ef06196311b588482e7c3ea4909769ed255928c3827704ecc4efa8fa3bd5be8593662c903e94dc28fb languageName: node linkType: hard @@ -5723,19 +5709,30 @@ __metadata: languageName: node linkType: hard -"@nx/devkit@npm:16.3.2, @nx/devkit@npm:>=16.1.3 < 17": - version: 16.3.2 - resolution: "@nx/devkit@npm:16.3.2" +"@nrwl/tao@npm:16.4.1": + version: 16.4.1 + resolution: "@nrwl/tao@npm:16.4.1" + dependencies: + nx: 16.4.1 + bin: + tao: index.js + checksum: 1b170fe0a1cfdb85b43947f47b96f0bcc62ee3c24b183b479d25dc280b2338d65269105e2297382c6527d6e95a11ef3a09022a5eef3134b9a0ae69a729547239 + languageName: node + linkType: hard + +"@nx/devkit@npm:16.4.1, @nx/devkit@npm:>=16.1.3 < 17": + version: 16.4.1 + resolution: "@nx/devkit@npm:16.4.1" dependencies: - "@nrwl/devkit": 16.3.2 + "@nrwl/devkit": 16.4.1 ejs: ^3.1.7 ignore: ^5.0.4 - semver: 7.3.4 + semver: 7.5.3 tmp: ~0.2.1 tslib: ^2.3.0 peerDependencies: nx: ">= 15 <= 17" - checksum: ec6b4f7dca3449aabf2b7f9aab61ca6278185b6c1596d1bc555dc870104c10e408eb7a1e65b2dae4f2987ace4d9ff07ba5ba36ef6ad3f0da4b4115e6ed13d13d + checksum: b2b6b779f9a8f90ecd6e0da1777c87f3102a5ee87d415bf1c02d2086b992dc1e309297c37cad158113e1f6b9cb2f028f428c980bc21dfb1989ef9ea4b46b24da languageName: node linkType: hard @@ -5746,6 +5743,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-darwin-arm64@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-darwin-arm64@npm:16.4.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@nx/nx-darwin-x64@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-darwin-x64@npm:16.4.0" @@ -5753,6 +5757,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-darwin-x64@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-darwin-x64@npm:16.4.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@nx/nx-freebsd-x64@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-freebsd-x64@npm:16.4.0" @@ -5760,6 +5771,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-freebsd-x64@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-freebsd-x64@npm:16.4.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@nx/nx-linux-arm-gnueabihf@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-linux-arm-gnueabihf@npm:16.4.0" @@ -5767,6 +5785,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm-gnueabihf@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-linux-arm-gnueabihf@npm:16.4.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@nx/nx-linux-arm64-gnu@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-linux-arm64-gnu@npm:16.4.0" @@ -5774,6 +5799,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm64-gnu@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-linux-arm64-gnu@npm:16.4.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@nx/nx-linux-arm64-musl@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-linux-arm64-musl@npm:16.4.0" @@ -5781,6 +5813,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-arm64-musl@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-linux-arm64-musl@npm:16.4.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@nx/nx-linux-x64-gnu@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-linux-x64-gnu@npm:16.4.0" @@ -5788,6 +5827,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-x64-gnu@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-linux-x64-gnu@npm:16.4.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@nx/nx-linux-x64-musl@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-linux-x64-musl@npm:16.4.0" @@ -5795,6 +5841,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-linux-x64-musl@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-linux-x64-musl@npm:16.4.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@nx/nx-win32-arm64-msvc@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-win32-arm64-msvc@npm:16.4.0" @@ -5802,6 +5855,13 @@ __metadata: languageName: node linkType: hard +"@nx/nx-win32-arm64-msvc@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-win32-arm64-msvc@npm:16.4.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@nx/nx-win32-x64-msvc@npm:16.4.0": version: 16.4.0 resolution: "@nx/nx-win32-x64-msvc@npm:16.4.0" @@ -5809,9 +5869,16 @@ __metadata: languageName: node linkType: hard +"@nx/nx-win32-x64-msvc@npm:16.4.1": + version: 16.4.1 + resolution: "@nx/nx-win32-x64-msvc@npm:16.4.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@octokit/app@npm:^13.1.5": - version: 13.1.5 - resolution: "@octokit/app@npm:13.1.5" + version: 13.1.8 + resolution: "@octokit/app@npm:13.1.8" dependencies: "@octokit/auth-app": ^4.0.13 "@octokit/auth-unauthenticated": ^3.0.0 @@ -5820,7 +5887,7 @@ __metadata: "@octokit/plugin-paginate-rest": ^6.0.0 "@octokit/types": ^9.0.0 "@octokit/webhooks": ^10.0.0 - checksum: deb79bbf29e1704e4981a8fe2344510a2e65a3f647331f03bd1d575803362dc33d78aee4b195c68bcee1787053de2a9b74b6cb75d69fc95eee5af9326fefbcbd + checksum: baf0382ff9e51d7e081745826e9b1b722ae4e3b27f7d6badafcc92e3daeb5eae7e368c6acf980d4a6f3c85ce17afe1a19c06abc8416ea48f0ac926f566054690 languageName: node linkType: hard @@ -5842,8 +5909,8 @@ __metadata: linkType: hard "@octokit/auth-oauth-app@npm:^5.0.0": - version: 5.0.5 - resolution: "@octokit/auth-oauth-app@npm:5.0.5" + version: 5.0.6 + resolution: "@octokit/auth-oauth-app@npm:5.0.6" dependencies: "@octokit/auth-oauth-device": ^4.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -5852,25 +5919,25 @@ __metadata: "@types/btoa-lite": ^1.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: 6d74dfb63c2fa91d3f77aed7f929779364fb182b3f251302b77517946abff0bdd0f420cf15fd366a83a6fd8f553bbd6eed0040e37bc92ab9bbe8ee725e8b2aa6 + checksum: 94760dc9799c8a5b3f723892272b8852f8f15f5a1ff0d2eb4d145b984cb305622a625ffcc332f18f9359c6cc43ceb5fe07e31d4079e7b2a436ecbaed093ae986 languageName: node linkType: hard "@octokit/auth-oauth-device@npm:^4.0.0": - version: 4.0.4 - resolution: "@octokit/auth-oauth-device@npm:4.0.4" + version: 4.0.5 + resolution: "@octokit/auth-oauth-device@npm:4.0.5" dependencies: "@octokit/oauth-methods": ^2.0.0 "@octokit/request": ^6.0.0 "@octokit/types": ^9.0.0 universal-user-agent: ^6.0.0 - checksum: d114204e6dbbedad197e07fa99528138312d99207af1e8a266c700356c336b4e60e379af29e6e19e5d878d14330972108b7a62232b03d8421ea5d684561f10ad + checksum: e962835dcbb2138aa75077284968eb8e2d244859ed8c72dd0ecf2e55724c1bdedbe32e94bcd4f0a44c3e2fc382433ac10026ec0808b9b8bccece1741160227a1 languageName: node linkType: hard "@octokit/auth-oauth-user@npm:^2.0.0": - version: 2.1.1 - resolution: "@octokit/auth-oauth-user@npm:2.1.1" + version: 2.1.2 + resolution: "@octokit/auth-oauth-user@npm:2.1.2" dependencies: "@octokit/auth-oauth-device": ^4.0.0 "@octokit/oauth-methods": ^2.0.0 @@ -5878,16 +5945,14 @@ __metadata: "@octokit/types": ^9.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: b5ded133df1b6ea0759301272b10b6d3de1ce83cf185cec894ba2197538d32c3f131a3b5cf83d3522450a0d6a2ac2ec360ef19415f1b358fe0ed4c65a13cc261 + checksum: 3adc7aa7cf277d50572120be22832a4ef2f88103371d888be6ad3a9d58b4b40f3c2e3b3dca4df583dd4c48f45ed0c4825c426fc1ff8a4570e9cba2857004452e languageName: node linkType: hard "@octokit/auth-token@npm:^3.0.0": - version: 3.0.3 - resolution: "@octokit/auth-token@npm:3.0.3" - dependencies: - "@octokit/types": ^9.0.0 - checksum: ff33a5bbfcef8f9303d5fb7fd4757828490efe893ebe894f4ae5faa7bd37cc8d732408ce5f565bb6ad476f0d601ac3205b2256077530caebc7bac80dab8e4770 + version: 3.0.4 + resolution: "@octokit/auth-token@npm:3.0.4" + checksum: abdf5e2da36344de9727c70ba782d58004f5ae1da0f65fa9bc9216af596ef23c0e4675f386df2f6886806612558091d603564051b693b0ad1986aa6160b7a231 languageName: node linkType: hard @@ -5902,8 +5967,8 @@ __metadata: linkType: hard "@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.2.1": - version: 4.2.1 - resolution: "@octokit/core@npm:4.2.1" + version: 4.2.4 + resolution: "@octokit/core@npm:4.2.4" dependencies: "@octokit/auth-token": ^3.0.0 "@octokit/graphql": ^5.0.0 @@ -5912,18 +5977,18 @@ __metadata: "@octokit/types": ^9.0.0 before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: b21f60d1ceb8a1aa8cc1573718de2941aad1d2ca5c46ed4b6a2feec4830463efd32434e9452655455f6e6ea0a9fe030d4a09c1b7e0be7cd194afb51dade405e9 + checksum: e54081a56884e628d1804837fddcd48c10d516117bb891551c8dc9d8e3dad449aeb9b4677ca71e8f0e76268c2b7656c953099506679aaa4666765228474a3ce6 languageName: node linkType: hard "@octokit/endpoint@npm:^7.0.0": - version: 7.0.5 - resolution: "@octokit/endpoint@npm:7.0.5" + version: 7.0.6 + resolution: "@octokit/endpoint@npm:7.0.6" dependencies: "@octokit/types": ^9.0.0 is-plain-object: ^5.0.0 universal-user-agent: ^6.0.0 - checksum: 68de3e40b4d2b4d3decfc3e23480d5a781275ebf86d084a38ba70c5d46a6cad051b63332da1768a64d58b0b810c5b57401a3892dff4dd0060d8b6b31d78fc2f5 + checksum: fd147a55010b54af7567bf90791359f7096a1c9916a2b7c72f8afd0c53141338b3d78da3a4ab3e3bdfeb26218a1b73735432d8987ccc04996b1019219299f115 languageName: node linkType: hard @@ -5939,8 +6004,8 @@ __metadata: linkType: hard "@octokit/oauth-app@npm:^4.0.7, @octokit/oauth-app@npm:^4.2.1": - version: 4.2.2 - resolution: "@octokit/oauth-app@npm:4.2.2" + version: 4.2.4 + resolution: "@octokit/oauth-app@npm:4.2.4" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -5951,7 +6016,7 @@ __metadata: "@types/aws-lambda": ^8.10.83 fromentries: ^1.3.1 universal-user-agent: ^6.0.0 - checksum: d6caa25fc3188afdcf06aa883df88d89d9668ba3a4525162486113b7c98ab5a46e2640d05b4cefd929db7c4d62e967f737d287bb97be4f12632c152da68f9085 + checksum: a39e7627790594797e64ef337fe82fcca239eb3f01957154ce4a558edb24e868526003007608ace80b72dfe03fdd3e3d7ba123681be22cf5b4cbb1c2acfbb97d languageName: node linkType: hard @@ -5963,22 +6028,15 @@ __metadata: linkType: hard "@octokit/oauth-methods@npm:^2.0.0": - version: 2.0.5 - resolution: "@octokit/oauth-methods@npm:2.0.5" + version: 2.0.6 + resolution: "@octokit/oauth-methods@npm:2.0.6" dependencies: "@octokit/oauth-authorization-url": ^5.0.0 "@octokit/request": ^6.2.3 "@octokit/request-error": ^3.0.3 "@octokit/types": ^9.0.0 btoa-lite: ^1.0.0 - checksum: 4a51cc8580f4246f95a0c5c6c5d31ab4846cf1757b7da2776263bd93f2f3ba940fb4367bdc9a3ae59a5e6a71fc9642fdc57e3f04e69c5f78cfd18c4e18da40a6 - languageName: node - linkType: hard - -"@octokit/openapi-types@npm:^17.2.0": - version: 17.2.0 - resolution: "@octokit/openapi-types@npm:17.2.0" - checksum: baec94b9c300171245d8b0592867ef96d3aa9cbb3261e961c5138e91894e165fffc421288d98f51031af12ab4149efb7ba597d79dee2e5b5a38962348528b1e5 + checksum: eeaaa772de3dbce954b6fea7aeaa77e87aafcae831618321e128ab65e8009aec518a0417db1a856cf55522bd0f5ff9916cba3fe9ed2287ca4c18a589ee8df05a languageName: node linkType: hard @@ -6018,25 +6076,25 @@ __metadata: linkType: hard "@octokit/plugin-rest-endpoint-methods@npm:^7.1.1, @octokit/plugin-rest-endpoint-methods@npm:^7.1.2": - version: 7.2.2 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.2" + version: 7.2.3 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" dependencies: "@octokit/types": ^10.0.0 peerDependencies: "@octokit/core": ">=3" - checksum: c62de2dd1202d5050dc5d8a799d0a6f52954858e9294af7a904257b883c8471c04ee9b93a4828e960e71963238776eff37aec7123de1423bb7397c07978c75d0 + checksum: 8bffbc5852695dd08d65cc64b6ab7d2871ed9df1e791608f48b488a3908b5b655e3686b5dd72fc37c824e82bdd4dfc9d24e2e50205bbc324667def1d705bc9da languageName: node linkType: hard "@octokit/plugin-retry@npm:^4.1.3": - version: 4.1.3 - resolution: "@octokit/plugin-retry@npm:4.1.3" + version: 4.1.6 + resolution: "@octokit/plugin-retry@npm:4.1.6" dependencies: "@octokit/types": ^9.0.0 bottleneck: ^2.15.3 peerDependencies: "@octokit/core": ">=3" - checksum: 375a31c5e52effb1cabdfb47bcf83b418d3555344eda682e9ccca619d8a0d741bf530845fe433405d852bbc9574e4e763d1161b1fa3d3af1e63a18ba77ec4c64 + checksum: becda71309b8fde99b2daa6c5ab7c9774adfabc2c950da53741bb911c6cd4db1b4d9cc878498580f8b8e881f491450a57bfaa50b6ad749aea421766675dbebdb languageName: node linkType: hard @@ -6064,8 +6122,8 @@ __metadata: linkType: hard "@octokit/request@npm:^6.0.0, @octokit/request@npm:^6.2.3": - version: 6.2.5 - resolution: "@octokit/request@npm:6.2.5" + version: 6.2.8 + resolution: "@octokit/request@npm:6.2.8" dependencies: "@octokit/endpoint": ^7.0.0 "@octokit/request-error": ^3.0.0 @@ -6073,7 +6131,7 @@ __metadata: is-plain-object: ^5.0.0 node-fetch: ^2.6.7 universal-user-agent: ^6.0.0 - checksum: 1f9feaedd75156ffc5b05294974e18b1798a3350ed99acb6d7f9d7b76fc338a47cb9d88b927e7d506894edf49e3a1ef1e18d877403a0aa386d0037b734ab59e4 + checksum: 6b6079ed45bac44c4579b40990bfd1905b03d4bc4e5255f3d5a10cf5182171578ebe19abeab32ebb11a806f1131947f2a06b7a077bd7e77ade7b15fe2882174b languageName: node linkType: hard @@ -6106,18 +6164,18 @@ __metadata: linkType: hard "@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.2, @octokit/types@npm:^9.2.3": - version: 9.2.3 - resolution: "@octokit/types@npm:9.2.3" + version: 9.3.2 + resolution: "@octokit/types@npm:9.3.2" dependencies: - "@octokit/openapi-types": ^17.2.0 - checksum: 9604939ed79be2298827e832177bb8e871d44170144a7504adb0c399966e45361fb909ccffacbd7151f08b94d2e739c6a2d1c0b9a2f9a4bde09c968d27060514 + "@octokit/openapi-types": ^18.0.0 + checksum: 2925479aa378a4491762b4fcf381bdc7daca39b4e0b2dd7062bce5d74a32ed7d79d20d3c65ceaca6d105cf4b1f7417fea634219bf90f79a57d03e2dac629ec45 languageName: node linkType: hard "@octokit/webhooks-methods@npm:^3.0.0": - version: 3.0.2 - resolution: "@octokit/webhooks-methods@npm:3.0.2" - checksum: 553626b5c55ac4b7fef0ca2aadbfedbbb22b96f8a3311212fbf62e667b0dbaf8a8620b89cb9adb08302b063e4373b62f247c95b9a0ee1ec6b138c76b012924f4 + version: 3.0.3 + resolution: "@octokit/webhooks-methods@npm:3.0.3" + checksum: f000d7b3cb2523bc352a0f2cb9d6f6f19c499704f9273a7564cbb0a69545fe92fc35f8f18ddc45026d54275ecef5ea6c127a7a058a6af2852abd5055a838fc9f languageName: node linkType: hard @@ -7571,9 +7629,12 @@ __metadata: redwood: ./dist/bins/redwood.js rw: ./dist/bins/redwood.js rw-api-server-watch: ./dist/bins/rw-api-server-watch.js + rw-dev-fe: ./dist/bins/rw-dev-fe.js rw-gen: ./dist/bins/rw-gen.js rw-gen-watch: ./dist/bins/rw-gen-watch.js rw-log-formatter: ./dist/bins/rw-log-formatter.js + rw-serve-api: ./dist/bins/rw-serve-api.js + rw-serve-fe: ./dist/bins/rw-serve-fe.js rwfw: ./dist/bins/rwfw.js languageName: unknown linkType: soft @@ -7740,6 +7801,7 @@ __metadata: "@graphql-codegen/typescript-resolvers": 3.2.1 "@redwoodjs/graphql-server": 5.0.0 "@redwoodjs/project-config": 5.0.0 + "@redwoodjs/router": 5.0.0 "@sdl-codegen/node": 0.0.10 "@types/babel-plugin-tester": 9.0.5 "@types/babel__core": 7.20.1 @@ -8021,17 +8083,25 @@ __metadata: "@babel/runtime-corejs3": 7.22.5 "@redwoodjs/internal": 5.0.0 "@redwoodjs/project-config": 5.0.0 + "@redwoodjs/web": 5.0.0 + "@types/express": 4 "@types/yargs-parser": 21.0.0 "@vitejs/plugin-react": 4.0.1 buffer: 6.0.3 core-js: 3.31.0 + dotenv-defaults: 5.0.2 + express: 4.18.2 glob: 10.3.1 + http-proxy-middleware: 2.0.6 + isbot: 3.6.8 jest: 29.5.0 typescript: 5.1.3 vite: 4.3.9 vite-plugin-environment: 1.1.3 yargs-parser: 21.1.1 bin: + rw-dev-fe: ./dist/devFeServer.js + rw-serve-fe: ./dist/runFeServer.js rw-vite-build: ./bins/rw-vite-build.mjs rw-vite-dev: ./bins/rw-vite-dev.mjs vite: ./bins/vite.mjs @@ -8114,6 +8184,17 @@ __metadata: languageName: node linkType: hard +"@sigstore/tuf@npm:^1.0.0": + version: 1.0.0 + resolution: "@sigstore/tuf@npm:1.0.0" + dependencies: + "@sigstore/protobuf-specs": ^0.1.0 + make-fetch-happen: ^11.0.1 + tuf-js: ^1.1.3 + checksum: 95251d95b42875907863f67637238c4cafe7c24d816ab01f71dc6ac07e275d8fef33c65d49a4165368c208e427119bd57737e4913dd7053cee0021195bc5655f + languageName: node + linkType: hard + "@simplewebauthn/browser@npm:7.2.0": version: 7.2.0 resolution: "@simplewebauthn/browser@npm:7.2.0" @@ -8185,11 +8266,11 @@ __metadata: linkType: hard "@sinonjs/fake-timers@npm:^10.0.2": - version: 10.2.0 - resolution: "@sinonjs/fake-timers@npm:10.2.0" + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" dependencies: "@sinonjs/commons": ^3.0.0 - checksum: 9f4726e7799a409d51d6760af3b65dac061b4f5c0b69b3af4caf79ecc3012dacae1f40078d915f9cec1ecd81d84a41619a98d4878bb2ef9f3ed66c16c2f5f833 + checksum: 2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 languageName: node linkType: hard @@ -8891,11 +8972,11 @@ __metadata: linkType: hard "@storybook/csf@npm:^0.1.0": - version: 0.1.0 - resolution: "@storybook/csf@npm:0.1.0" + version: 0.1.1 + resolution: "@storybook/csf@npm:0.1.1" dependencies: type-fest: ^2.19.0 - checksum: 76e284884eacb54bb2130448c45204d64e9ca436d73614d3369d72049b1e786e31e55c0bbb922b8e1069fecbc97a3d68796d401f8e3d93d7ffba0df59b6d8cbe + checksum: 999bb87fbbe047a559bbaa5baf2ed84872fcd5cdcae3c1169f8e4c641eefe8759d09a09034a78ed114032c0e5cf6301b7fa89e5e3ce60d75cf0bd5e33ec0a6e7 languageName: node linkType: hard @@ -9203,29 +9284,29 @@ __metadata: linkType: hard "@supabase/functions-js@npm:^2.1.0": - version: 2.1.1 - resolution: "@supabase/functions-js@npm:2.1.1" + version: 2.1.2 + resolution: "@supabase/functions-js@npm:2.1.2" dependencies: cross-fetch: ^3.1.5 - checksum: 1cb1b2fdfc845f472527eef285cb6fba7e06045dfd13b869815b5956a38a423926d1c9484839c30eab611bbf0999bb7d74f0d4d126ea129dd385d35578129af0 + checksum: fe35d1a145570c83d33c3f09148b0d7448b0d78e8a55da38b7d7ba3d22d6373303cf23a5c19d8a8dcc98f53f4247de2cb831923e6aff6bdc9cf2aa2e58ce7335 languageName: node linkType: hard "@supabase/gotrue-js@npm:^2.31.0": - version: 2.31.0 - resolution: "@supabase/gotrue-js@npm:2.31.0" + version: 2.37.0 + resolution: "@supabase/gotrue-js@npm:2.37.0" dependencies: cross-fetch: ^3.1.5 - checksum: b04c29c965e8b90779baed425d356d6132772aff602cd4980fe80df08ab2d9b25312c197b1150f7cee9450047a5c26225b02565af5d3881314f50b6d406b15f6 + checksum: 9727b6dd04c52f333036ce857b315dfae230779954812e20a6ea43aba0d8d4f41b450207bfba6e6cf695e2abad2242843cd9b58fc63c4f8c7f846b6a6b6ea587 languageName: node linkType: hard "@supabase/postgrest-js@npm:^1.7.0": - version: 1.7.0 - resolution: "@supabase/postgrest-js@npm:1.7.0" + version: 1.7.1 + resolution: "@supabase/postgrest-js@npm:1.7.1" dependencies: cross-fetch: ^3.1.5 - checksum: dff68d516f4c54d7425941fa41579f4cfc0f95b490f299ab9a0fe96a01946c7e6a3622f174c0013770e5de2066f8d5c09e54fe8977d74b19687511fe4fc3f663 + checksum: d781c403209b1394e575b47ccb21044e6c8123518311a9ff7f6f5be30f5a02fb285cbcfd178993f814250e5d2daf13f47fb2e6404878a6f3e49a39e3ef801846 languageName: node linkType: hard @@ -9416,18 +9497,18 @@ __metadata: linkType: hard "@testing-library/dom@npm:^8.11.1": - version: 8.20.0 - resolution: "@testing-library/dom@npm:8.20.0" + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 "@types/aria-query": ^5.0.1 - aria-query: ^5.0.0 + aria-query: 5.1.3 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 - lz-string: ^1.4.4 + lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: 454c71f65708d1504256ae055f060adf8ed9eadcc7ddbf6d07a528045beceb842783c1253871759f5c137eca58e5e32700dc64b130cbb37e10e7a52ab08d7b44 + checksum: 614013756706467f2a7f3f693c18377048c210ec809884f0f9be866f7d865d075805ad15f5d100e8a699467fdde09085bf79e23a00ea0a6ab001d9583ef15e5d languageName: node linkType: hard @@ -9673,11 +9754,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.20.0 - resolution: "@types/babel__traverse@npm:7.20.0" + version: 7.20.1 + resolution: "@types/babel__traverse@npm:7.20.1" dependencies: "@babel/types": ^7.20.7 - checksum: 9a4cfe345fc681f6009f11de705d19c6546fc681b9c7408f2ddd3eb18e8cbfbae80b63e153ac62afdd5a4e9beb57987b377dc2f84d50c477e5470abce9648e74 + checksum: 5a6a3a26be090573309527184a31f1b82ef55f3d73d811c15f181d323e471305f2390651a04d49d4cd4ca41bbeabb53c9f7862a8e09eab5a0f8910a6aec6e867 languageName: node linkType: hard @@ -9860,7 +9941,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.14, @types/express@npm:^4.7.0": +"@types/express@npm:*, @types/express@npm:4, @types/express@npm:^4.17.13, @types/express@npm:^4.17.14, @types/express@npm:^4.7.0": version: 4.17.17 resolution: "@types/express@npm:4.17.17" dependencies: @@ -9927,6 +10008,13 @@ __metadata: languageName: node linkType: hard +"@types/http-errors@npm:*": + version: 2.0.1 + resolution: "@types/http-errors@npm:2.0.1" + checksum: 3bbc8c84fb02b381737e2eec563b434121384b1aef4e070edec4479a1bc74f27373edc09162680cd3ea1035ef8e5ab6d606bd7c99e3855c424045fb74376cb66 + languageName: node + linkType: hard + "@types/http-proxy@npm:^1.17.8": version: 1.17.11 resolution: "@types/http-proxy@npm:1.17.11" @@ -10222,9 +10310,9 @@ __metadata: linkType: hard "@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": - version: 20.2.5 - resolution: "@types/node@npm:20.2.5" - checksum: 1c3db8a4ceb5e5d12e7cb140e37c14a16ce013084c6d65579b91cefbe0ecaca57d85093d968172b11c3d1d95bcbc5d972b08aa3dc3935206fb39bc6c10751102 + version: 20.3.2 + resolution: "@types/node@npm:20.3.2" + checksum: d857cbe388d11fefd6c598144db42a32e1c15c09624b9e0669ec65e9d72e080093db3ec6b536037e6575574e33413479d4b3762140c2544ff30eb0c2111b5596 languageName: node linkType: hard @@ -10243,16 +10331,16 @@ __metadata: linkType: hard "@types/node@npm:^14.14.31": - version: 14.18.48 - resolution: "@types/node@npm:14.18.48" - checksum: 83c43539d579665588ad4eeafb7b2f112dda2b4fb35eb8b0f2bb53270ba99022c85d312a992332cca393e03bb9300c43ca78b835130139ba4413204734d5a09e + version: 14.18.52 + resolution: "@types/node@npm:14.18.52" + checksum: 25b34334c109fae745ad7d52d2eebbc20e2feee5967594008992338f05f1d235d3f56929d3213b15dbb35681b2722dd106c603170606f2ec89e1215ba490e080 languageName: node linkType: hard "@types/node@npm:^16.0.0": - version: 16.18.34 - resolution: "@types/node@npm:16.18.34" - checksum: d6572e12b2200a813b2e0944add0abb8ac59d51a0cf28651dd1dde9de4d43e9d4c2c41fd7cf910d0c3bd8e13d10047f58211a53e76780279fc6d284137d3b001 + version: 16.18.37 + resolution: "@types/node@npm:16.18.37" + checksum: b0bc60bb9045ab13af31d4de14a53a0e2617296bb3c686849150d579043691164833b844ca0db1fea16d91d8e8d8fc6fc91ebf38f8615044bd131198de38ac90 languageName: node linkType: hard @@ -10430,12 +10518,13 @@ __metadata: linkType: hard "@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": - version: 1.15.1 - resolution: "@types/serve-static@npm:1.15.1" + version: 1.15.2 + resolution: "@types/serve-static@npm:1.15.2" dependencies: + "@types/http-errors": "*" "@types/mime": "*" "@types/node": "*" - checksum: dc934e2adce730480af5af6081b99f50be4dfb7f44537893444bcf1dc97f5d5ffb16b38350ecd89dd114184d751ba3271500631fa56cf1faa35be56f8e45971b + checksum: 5e7b3e17b376f8910d5c9a0b1def38d7841c8939713940098f1b80a330d5caa9cfe9b632c122252cd70165052439e18fafa46635dc55b1d6058343901eec22eb languageName: node linkType: hard @@ -11283,13 +11372,23 @@ __metadata: languageName: node linkType: hard +"@yarnpkg/parsers@npm:3.0.0-rc.46": + version: 3.0.0-rc.46 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.46" + dependencies: + js-yaml: ^3.10.0 + tslib: ^2.4.0 + checksum: c7f421c6885142f351459031c093fb2e79abcce6f4a89765a10e600bb7ab122949c54bcea2b23de9572a2b34ba29f822b17831c1c43ba50373ceb8cb5b336667 + languageName: node + linkType: hard + "@yarnpkg/parsers@npm:^3.0.0-rc.18": - version: 3.0.0-rc.44 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.44" + version: 3.0.0-rc.47.1 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.47.1" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: b4f6ccec3a4e91332c4f5ae76c8949b25a427062ba0e1e1358591f4de839458af8dd471481be4086de960aa83a781ea7b70bcf4f38b1738dcf8b4309fd2ef2a7 + checksum: f06da6653a79c6eeaabaddbc73c120c49362fdffcbc00993c3c706e2362094881b19c960d6b0ae22a06b81a1d8ef9112ac9829c8961682f30dd0a4357a55d21c languageName: node linkType: hard @@ -11428,7 +11527,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:8.9.0, acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1": +"acorn@npm:8.9.0, acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": version: 8.9.0 resolution: "acorn@npm:8.9.0" bin: @@ -11872,7 +11971,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.1.3, aria-query@npm:^5.0.0, aria-query@npm:^5.1.3": +"aria-query@npm:5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -11881,6 +11980,15 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.0.0, aria-query@npm:^5.1.3": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: ^2.0.3 + checksum: 2bff0d4eba5852a9dd578ecf47eaef0e82cc52569b48469b0aac2db5145db0b17b7a58d9e01237706d1e14b7a1b0ac9b78e9c97027ad97679dd8f91b85da1469 + languageName: node + linkType: hard + "arr-diff@npm:^4.0.0": version: 4.0.0 resolution: "arr-diff@npm:4.0.0" @@ -11940,7 +12048,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": +"array-includes@npm:^3.1.6": version: 3.1.6 resolution: "array-includes@npm:3.1.6" dependencies: @@ -12265,8 +12373,8 @@ __metadata: linkType: hard "aws-sdk@npm:^2.814.0": - version: 2.1387.0 - resolution: "aws-sdk@npm:2.1387.0" + version: 2.1408.0 + resolution: "aws-sdk@npm:2.1408.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -12278,7 +12386,7 @@ __metadata: util: ^0.12.4 uuid: 8.0.0 xml2js: 0.5.0 - checksum: 7a4ca0fe6059b320f13e1a6419db64d61bc082a769779d1eb834eceb0ec55be03835eecbc3d7111ba9ed19df741ee28ca5fa0ed5d15d96190c7ec70664b9062d + checksum: 32db1abaf86b7ff39d095ce2e144c838d7299b390751498182719924603c702cda0145e9bd9538dc941f01134c77e2e9e3cded35a411d5cd5d0d0eecabc41b25 languageName: node linkType: hard @@ -12326,11 +12434,11 @@ __metadata: linkType: hard "axobject-query@npm:^3.1.1": - version: 3.1.1 - resolution: "axobject-query@npm:3.1.1" + version: 3.2.1 + resolution: "axobject-query@npm:3.2.1" dependencies: - deep-equal: ^2.0.5 - checksum: fff3175a22fd1f41fceb7ae0cd25f6594a0d7fba28c2335dd904538b80eb4e1040432564a3c643025cd2bb748f68d35aaabffb780b794da97ecfc748810b25ad + dequal: ^2.0.3 + checksum: f7debc2012e456139b57d888c223f6d3cb4b61eb104164a85e3d346273dd6ef0bc9a04b6660ca9407704a14a8e05fa6b6eb9d55f44f348c7210de7ffb350c3a7 languageName: node linkType: hard @@ -13091,16 +13199,16 @@ __metadata: linkType: hard "browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5": - version: 4.21.7 - resolution: "browserslist@npm:4.21.7" + version: 4.21.9 + resolution: "browserslist@npm:4.21.9" dependencies: - caniuse-lite: ^1.0.30001489 - electron-to-chromium: ^1.4.411 + caniuse-lite: ^1.0.30001503 + electron-to-chromium: ^1.4.431 node-releases: ^2.0.12 update-browserslist-db: ^1.0.11 bin: browserslist: cli.js - checksum: c523a982ef5d4141907795bbb72d7e2c5df79b2c6e495ef8ff6405b6734a2f16529a7f54c86b113085cad8a3359ac2fc6a478e86ae715084ba7384b9344b2ef5 + checksum: 903189787141f645f47ec46ec482dc85985d1297948062690dc2ea8480eb98fd6213507234eb17177825acaae49c53888445910f1af984abce5373fb65c270b8 languageName: node linkType: hard @@ -13313,32 +13421,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" - dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^8.0.1 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 - tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: cdf6836e1c457d2a5616abcaf5d8240c0346b1f5bd6fdb8866b9d84b6dff0b54e973226dc11e0d099f35394213d24860d1989c8358d2a41b39eb912b3000e749 - languageName: node - linkType: hard - "cacache@npm:^17.0.0, cacache@npm:^17.0.4": version: 17.1.3 resolution: "cacache@npm:17.1.3" @@ -13474,10 +13556,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001489": - version: 1.0.30001492 - resolution: "caniuse-lite@npm:1.0.30001492" - checksum: df7ad55d2475ff6561e84e2f21c8da45fe02ba539d493d5a77214aeaf264632cf74084a8eb13bfd2cb0c9fbde0ff6af4acbd923b8590eb6b2920ba44fcac9b2d +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001503": + version: 1.0.30001509 + resolution: "caniuse-lite@npm:1.0.30001509" + checksum: 631e61b8de50174ffe0baeb0b87d52f0b873bae6c13b4b4eb7eb9e2dbd7d48fb05c8426cc9eccc21e4e4156d2d2bdfe7f7d9677a6f9484c2f24404e737020700 languageName: node linkType: hard @@ -13588,7 +13670,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.2.0, chalk@npm:^5.2.0": +"chalk@npm:5.2.0": version: 5.2.0 resolution: "chalk@npm:5.2.0" checksum: 8a519b35c239f96e041b7f1ed8fdd79d3ca2332a8366cb957378b8a1b8a4cdfb740d19628e8bf74654d4c0917aa10cf39c20752e177a1304eac29a1168a740e9 @@ -13616,6 +13698,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^5.2.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + "change-case-all@npm:1.0.14": version: 1.0.14 resolution: "change-case-all@npm:1.0.14" @@ -13862,9 +13951,9 @@ __metadata: linkType: hard "cjs-module-lexer@npm:^1.0.0": - version: 1.2.2 - resolution: "cjs-module-lexer@npm:1.2.2" - checksum: 83330e1feda2e3699b8c305bfa8f841b41822049393f5eefeb574e60bde556e2a251ee9b7971cde0cb47ac4f7823bf4ab4a6005b8471f86ad9f5509eefb66cbd + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 0de9a9c3fad03a46804c0d38e7b712fb282584a9c7ef1ed44cae22fb71d9bb600309d66a9711ac36a596fd03422f5bb03e021e8f369c12a39fa1786ae531baab languageName: node linkType: hard @@ -14591,18 +14680,18 @@ __metadata: linkType: hard "core-js-compat@npm:^3.25.1, core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.30.2": - version: 3.30.2 - resolution: "core-js-compat@npm:3.30.2" + version: 3.31.0 + resolution: "core-js-compat@npm:3.31.0" dependencies: browserslist: ^4.21.5 - checksum: 7cb984fc6bcdd2f28c2f2f19fc8fc874a303adf7f835720b9937f0b1d40793819ed744dc14dff28ddb7735404b02a43f08493c3e2f227b27090cd6d64d28c5f9 + checksum: 09cca4c2565ddea1fb65324ef17c2dcc61e6c3ec089d8b343e6cbea2b42a9c3ae5e76a42c6faff3759a321c5e7165201db93b7b47912c4c2d1c3d6afad44f7fc languageName: node linkType: hard "core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.30.2": - version: 3.30.2 - resolution: "core-js-pure@npm:3.30.2" - checksum: 4035947addee484227e99281fc594837387f4c4e209a5996c9d6c1609cbbe11e1a583133414c6685974ebcf228e620011ad4edcad8991882f69ff1663cbbfd82 + version: 3.31.0 + resolution: "core-js-pure@npm:3.31.0" + checksum: fd3f003391bf13722ab40de30c1e0bad9284a2289303ce34db119906eb0f26df677d1f755d07628a1d595d7728c51cea9d41f5dc8fe1b5d4e4214817c557a01a languageName: node linkType: hard @@ -15248,9 +15337,9 @@ __metadata: linkType: hard "dayjs@npm:^1.10.4": - version: 1.11.7 - resolution: "dayjs@npm:1.11.7" - checksum: 41a54853c8b8bf0fa94a5559eec98b3e4d11b31af81a9558a159d40adeaafb1f3414e8c41a4e3277281d97687d8252f400015e1f715b47f8c24d88a9ebd43626 + version: 1.11.8 + resolution: "dayjs@npm:1.11.8" + checksum: 66833f3eb88ac06c8dd9b163986faab9b03f46df9e16a7d1a95aa3fca86eee334234e873e322977c8a458d721dee8f730a43ddda2c383e70d306454088eca8bb languageName: node linkType: hard @@ -15602,7 +15691,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.2": +"dequal@npm:^2.0.2, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 @@ -16047,10 +16136,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.411": - version: 1.4.414 - resolution: "electron-to-chromium@npm:1.4.414" - checksum: bb8397bfbcf369d8a5dc307346b5b721720d8355c03cb312673a0fc283396eac1998db4fbb95c7eac74da22aff5c4f62324509036a23feda7904aa955afba636 +"electron-to-chromium@npm:^1.4.431": + version: 1.4.446 + resolution: "electron-to-chromium@npm:1.4.446" + checksum: 207de6583e24d643a62223b623cb93dfd553bbf767be31eaf91ba6c503795eebb4393f21b5d30fbc615551b284848c09566e3464b224f2ea5140eb3c992ace44 languageName: node linkType: hard @@ -16207,7 +16296,7 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:7.9.0, envinfo@npm:^7.7.3": +"envinfo@npm:7.9.0": version: 7.9.0 resolution: "envinfo@npm:7.9.0" bin: @@ -16216,6 +16305,15 @@ __metadata: languageName: node linkType: hard +"envinfo@npm:^7.7.3": + version: 7.10.0 + resolution: "envinfo@npm:7.10.0" + bin: + envinfo: dist/cli.js + checksum: ebc7792fbedca72bc829913abe0c2a3384b883903012f97b56085afd4e83d26f7dd0652403fedd99cd3e1c93d4fb0706f5d2c3dc06ac6a1eda348280a06a9dcf + languageName: node + linkType: hard + "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -16319,9 +16417,9 @@ __metadata: linkType: hard "es-module-lexer@npm:^1.2.1": - version: 1.2.1 - resolution: "es-module-lexer@npm:1.2.1" - checksum: 6e0a9095e0abe38f480e0f366cdeca19db64d85a533da9332739a64d70e97a61e68c1f98a2396468ae6229245b8e5edcb1e48c4d3615ae4da9052a1bdc2367e2 + version: 1.3.0 + resolution: "es-module-lexer@npm:1.3.0" + checksum: cbd9bdc65458d4c4bd0d22a1c792926bfdf7bb6a96a9ed04da7d31f317159bd4945d2dbeb318717f9214f9695ee85a8fae64a5d25bf360baa82b58079032fc7a languageName: node linkType: hard @@ -16629,13 +16727,12 @@ __metadata: linkType: hard "escodegen@npm:^2.0.0": - version: 2.0.0 - resolution: "escodegen@npm:2.0.0" + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" dependencies: esprima: ^4.0.1 estraverse: ^5.2.0 esutils: ^2.0.2 - optionator: ^0.8.1 source-map: ~0.6.1 dependenciesMeta: source-map: @@ -16643,7 +16740,7 @@ __metadata: bin: escodegen: bin/escodegen.js esgenerate: bin/esgenerate.js - checksum: 7d9834841db85d7cce2026c18da56c803564ca18bd6c1e81934cc08329ac4d366fac8b571e8708a81e21143f3dada56a4e34c9a9904c8b066f13abe8d9869871 + checksum: e1450a1f75f67d35c061bf0d60888b15f62ab63aef9df1901cffc81cffbbb9e8b3de237c5502cf8613a017c1df3a3003881307c78835a1ab54d8c8d2206e01d3 languageName: node linkType: hard @@ -17159,7 +17256,14 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.17.1, express@npm:^4.17.3": +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"express@npm:4.18.2, express@npm:^4.17.1, express@npm:^4.17.3": version: 4.18.2 resolution: "express@npm:4.18.2" dependencies: @@ -17402,11 +17506,11 @@ __metadata: linkType: hard "fast-querystring@npm:^1.0.0, fast-querystring@npm:^1.1.1": - version: 1.1.1 - resolution: "fast-querystring@npm:1.1.1" + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" dependencies: fast-decode-uri-component: ^1.0.1 - checksum: bfc14761201796ef2ad9b4c645512701c474c8ed2bd503f7dd4b966894f29ef67e38ef4d3cfb4c633fa6e9118d512b610356b1eae9d89a710f773f585d56d391 + checksum: e8223273a9b199722f760f5a047a77ad049a14bd444b821502cb8218f5925e3a5fffb56b64389bca73ab2ac6f1aa7aebbe4e203e5f6e53ff5978de97c0fde4e3 languageName: node linkType: hard @@ -17531,8 +17635,8 @@ __metadata: linkType: hard "fbjs@npm:^3.0.0": - version: 3.0.4 - resolution: "fbjs@npm:3.0.4" + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" dependencies: cross-fetch: ^3.1.5 fbjs-css-vars: ^1.0.0 @@ -17540,8 +17644,8 @@ __metadata: object-assign: ^4.1.0 promise: ^7.1.1 setimmediate: ^1.0.5 - ua-parser-js: ^0.7.30 - checksum: 6c605d038d6852f0199a333e0b7f1f3e2602eebd0b815fba505f641912610007a0a8419222909e17ad0e07365d3b8a0bf45cacf9b43366dde0e95e5ced251632 + ua-parser-js: ^1.0.35 + checksum: 66d0a2fc9a774f9066e35ac2ac4bf1245931d27f3ac287c7d47e6aa1fc152b243c2109743eb8f65341e025621fb51a12038fadb9fd8fda2e3ddae04ebab06f91 languageName: node linkType: hard @@ -17865,9 +17969,9 @@ __metadata: linkType: hard "flow-parser@npm:0.*": - version: 0.207.0 - resolution: "flow-parser@npm:0.207.0" - checksum: a6d6c64bf6f5818e325d0ad0e3529220817be88488481933ee498fd093b0d3031e59ddc5d8d3e661c05801cc0820ae36aa1af4e855aa239f92c7fe48095a866a + version: 0.210.2 + resolution: "flow-parser@npm:0.210.2" + checksum: 498dc1d92cec80f8d5035a7af3faa29b7411c5d0e9e4081c0f987722e4d659b22fadf44015fef9bf191f1c6f1973097df55fe2a174ea4a9b915abfcb75343ad3 languageName: node linkType: hard @@ -18118,7 +18222,7 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": +"fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: @@ -18136,10 +18240,10 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:^1.0.3": - version: 1.0.3 - resolution: "fs-monkey@npm:1.0.3" - checksum: 197fd276d224d54a27c6267c69887ec29ccd4bedd83d72b5050abf3b6c6ef83d7b86a85a87f615c24a4e6f9a4888fd151c9f16a37ffb23e37c4c2d14c1da6275 +"fs-monkey@npm:^1.0.4": + version: 1.0.4 + resolution: "fs-monkey@npm:1.0.4" + checksum: eeb2457ec50f7202c44273de2a42b50868c8e6b2ab4825d517947143d4e727c028e24f6d0f46e6f3e7a149a1c9e7d8b3ca28243c3b10366d280a08016483e829 languageName: node linkType: hard @@ -18312,13 +18416,13 @@ __metadata: languageName: node linkType: hard -"gcp-metadata@npm:^5.2.0": - version: 5.2.0 - resolution: "gcp-metadata@npm:5.2.0" +"gcp-metadata@npm:^5.3.0": + version: 5.3.0 + resolution: "gcp-metadata@npm:5.3.0" dependencies: gaxios: ^5.0.0 json-bigint: ^1.0.0 - checksum: 67a17a1fe2d5823bec99937e60595f865d6ae26072f33f7d88f5137e76b1d9278bba3fe8bd46e04440d7a6a6d588654c5af521010118f49f35a59aa38e1c05b4 + checksum: c0570f8ed821429444d6d9d46279831aa1b68092bd5f394928dd816c39904721f8a80ed463fcbeb607a469b1917fe24dad0e66dc4a94388620c9172a54fb5a5f languageName: node linkType: hard @@ -18450,11 +18554,11 @@ __metadata: linkType: hard "get-tsconfig@npm:^4.4.0": - version: 4.6.0 - resolution: "get-tsconfig@npm:4.6.0" + version: 4.6.2 + resolution: "get-tsconfig@npm:4.6.2" dependencies: resolve-pkg-maps: ^1.0.0 - checksum: 6480197512fc97e4bc049fc23943d78ef5f034e6a3c7c7dbc1d16d8a2091aa08b72122ebf29c2dc815842266f966cf0c12000dc9151e632296feb9e1a285b854 + checksum: 352c7313720b0f1172de5b6697da55c02744bacd8587f4cd989bfa25d8bb1af702128c2869121e6e4eef06c5c2f013406d2840905a8e898fd35351a305298ee1 languageName: node linkType: hard @@ -18599,13 +18703,13 @@ __metadata: linkType: hard "glob-promise@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-promise@npm:6.0.2" + version: 6.0.3 + resolution: "glob-promise@npm:6.0.3" dependencies: "@types/glob": ^8.0.0 peerDependencies: glob: ^8.0.3 - checksum: fa08c8beb32b87d9313d7f24d17b2eebeed6e77fcfe0e4b743f94e9621663292cf5e665f671502dcf925683aea1086d3a756032bef08c87d7dc05014aef71c5a + checksum: f6b4f318449a2ed4c4a511921d5ec311b78c1f6e75e8c1479791b7576bf4c0ad72ed5d2ee95e60cafc037633c9295603191fb1987b529055a116bc051f30d43a languageName: node linkType: hard @@ -18748,15 +18852,15 @@ __metadata: linkType: hard "globby@npm:^13.1.1, globby@npm:^13.1.4": - version: 13.1.4 - resolution: "globby@npm:13.1.4" + version: 13.2.0 + resolution: "globby@npm:13.2.0" dependencies: dir-glob: ^3.0.1 fast-glob: ^3.2.11 ignore: ^5.2.0 merge2: ^1.4.1 slash: ^4.0.0 - checksum: cbf4ce32ea7fba37be8c4749a2f69c2803b70a57e40a968b57343cc74daced8c87a7cdea038f69eda95fe17df8ebf75346d18e188c2bc4948f081bbbc655c323 + checksum: d1ea2b09dbb24961d16413cdb45764cb63280a2a7066739df5e5b33292ce4980d9da1d168a6a135c332ea1856f921e28d8ffcc2c6c24b82d4f4208477bfe62b4 languageName: node linkType: hard @@ -18770,19 +18874,19 @@ __metadata: linkType: hard "google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": - version: 8.8.0 - resolution: "google-auth-library@npm:8.8.0" + version: 8.9.0 + resolution: "google-auth-library@npm:8.9.0" dependencies: arrify: ^2.0.0 base64-js: ^1.3.0 ecdsa-sig-formatter: ^1.0.11 fast-text-encoding: ^1.0.0 gaxios: ^5.0.0 - gcp-metadata: ^5.2.0 + gcp-metadata: ^5.3.0 gtoken: ^6.1.0 jws: ^4.0.0 lru-cache: ^6.0.0 - checksum: f41a1d37763c593b39533bb86d5d35960c04a05f89abbed74e1270c94a2034c0029e659b02efe406794eb83a92c64f2fe1c064c9abc6afcafdd48894323a7e77 + checksum: a9b101e15ba0457d3abe548b59323211f2c34071721da73a74ba6a773e199e73736910fd7d39b0c978eb7655220ae6f90f4e0b5665419d298ab544f9159d1625 languageName: node linkType: hard @@ -19326,9 +19430,9 @@ __metadata: linkType: hard "html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": - version: 2.3.3 - resolution: "html-entities@npm:2.3.3" - checksum: a76cbdbb276d9499dc7ef800d23f3964254e659f04db51c8d1ff6abfe21992c69b7217ecfd6e3c16ff0aa027ba4261d77f0dba71f55639c16a325bbdf69c535d + version: 2.4.0 + resolution: "html-entities@npm:2.4.0" + checksum: 42bbd5d91f451625d7e35aaed41c8cd110054c0d0970764cb58df467b3f27f20199e8cf7b4aebc8d4eeaf17a27c0d1fb165f2852db85de200995d0f009c9011d languageName: node linkType: hard @@ -19490,7 +19594,7 @@ __metadata: languageName: node linkType: hard -"http-proxy-middleware@npm:^2.0.3": +"http-proxy-middleware@npm:2.0.6, http-proxy-middleware@npm:^2.0.3": version: 2.0.6 resolution: "http-proxy-middleware@npm:2.0.6" dependencies: @@ -20592,6 +20696,13 @@ __metadata: languageName: node linkType: hard +"isbot@npm:3.6.8": + version: 3.6.8 + resolution: "isbot@npm:3.6.8" + checksum: fbc067d6567fc006026f24527fd09ff655f5eb7e3672070ceb7e62afae9973aeb88f37dd29b88318ee25404818bb294bcc0cab93fb447c798294f0fd36b4b436 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -21661,12 +21772,14 @@ __metadata: linkType: hard "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": - version: 3.3.3 - resolution: "jsx-ast-utils@npm:3.3.3" + version: 3.3.4 + resolution: "jsx-ast-utils@npm:3.3.4" dependencies: - array-includes: ^3.1.5 - object.assign: ^4.1.3 - checksum: fb69ce100931e50d42c8f72a01495b7d090064824ce481cf7746449609c148a29aae6984624cf9066ac14bdf7978f8774461e120d5b50fa90b3bfe0a0e21ff77 + array-includes: ^3.1.6 + array.prototype.flat: ^1.3.1 + object.assign: ^4.1.4 + object.values: ^1.1.6 + checksum: 6761ccd830deab6a4cb8ca182c7b3627f4478138b6f4e2b680afc2b5e954635feb460ff75218b67f8694a9f8a0da6f0833a013e34961a16fbe4457fb34a0a7b2 languageName: node linkType: hard @@ -22517,9 +22630,9 @@ __metadata: linkType: hard "lru-cache@npm:^9.0.0": - version: 9.1.1 - resolution: "lru-cache@npm:9.1.1" - checksum: a70630bccc94e6d6bf5523de8103302407a3b0090f4e245d126569ba96f85b4fa10ad537fb5d9435c58ba3762c0880361f8f5a92d7c9d10b59c8fcc8a0c615e5 + version: 9.1.2 + resolution: "lru-cache@npm:9.1.2" + checksum: 886811ab451332c899c230274e7e51507c15e5b3b18f0b39fb55f558978d58799a0b1a50e04d60a448d8c970ff4e6ee718bb119083ca88abb78930284f1e0900 languageName: node linkType: hard @@ -22543,7 +22656,7 @@ __metadata: languageName: node linkType: hard -"lz-string@npm:^1.4.4, lz-string@npm:^1.5.0": +"lz-string@npm:^1.5.0": version: 1.5.0 resolution: "lz-string@npm:1.5.0" bin: @@ -22599,31 +22712,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 28ec392f63ab93511f400839dcee83107eeecfaad737d1e8487ea08b4332cd89a8f3319584222edd9f6f1d0833cf516691469496d46491863f9e88c658013949 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.1, make-fetch-happen@npm:^11.1.0": +"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.1, make-fetch-happen@npm:^11.0.3, make-fetch-happen@npm:^11.1.1": version: 11.1.1 resolution: "make-fetch-happen@npm:11.1.1" dependencies: @@ -22756,11 +22845,11 @@ __metadata: linkType: hard "markdown-to-jsx@npm:^7.1.8": - version: 7.2.0 - resolution: "markdown-to-jsx@npm:7.2.0" + version: 7.2.1 + resolution: "markdown-to-jsx@npm:7.2.1" peerDependencies: react: ">= 0.14.0" - checksum: 43056a49a222efddb0d5a055bc0ad61e038ac299d1008db4c4bebb270b4efc9872dc51dad2f6078d58bf178f8f15df6677f6e67295095284d8b61cfb8e9876f3 + checksum: 002ba7c723853c456a4902976d5f5a15d9585bd75dc6ab3add783b4a346e3372327c4fffd7843f30fd5b6550c5fd97e7142330521a5886f8b770db4c61558d61 languageName: node linkType: hard @@ -22840,11 +22929,11 @@ __metadata: linkType: hard "memfs@npm:^3.4.1, memfs@npm:^3.4.3": - version: 3.5.1 - resolution: "memfs@npm:3.5.1" + version: 3.5.3 + resolution: "memfs@npm:3.5.3" dependencies: - fs-monkey: ^1.0.3 - checksum: c0365330bd861b900284c5b50056dddc841ab64196cc8eb164214104031559130ab129c20de67c91314bc7b2b4f20d521d43b0e389080ac2bf6bf77813601b2c + fs-monkey: ^1.0.4 + checksum: 038fc81bce17ea92dde15aaa68fa0fdaf4960c721ce3ffc7c2cb87a259333f5159784ea48b3b72bf9e054254d9d0d0d5209d0fdc3d07d08653a09933b168fbd7 languageName: node linkType: hard @@ -23150,11 +23239,11 @@ __metadata: linkType: hard "minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": - version: 9.0.1 - resolution: "minimatch@npm:9.0.1" + version: 9.0.2 + resolution: "minimatch@npm:9.0.2" dependencies: brace-expansion: ^2.0.1 - checksum: aa043eb8822210b39888a5d0d28df0017b365af5add9bd522f180d2a6962de1cbbf1bdeacdb1b17f410dc3336bc8d76fb1d3e814cdc65d00c2f68e01f0010096 + checksum: 39157d5fd831a7981f7c0c5b22a0e0c2ae8a987ec4a4aeaacc21d3e85da24ce812808cbf7c07cde0d63ad1cf307f73be581131a7a84eeda65f00be1f51972471 languageName: node linkType: hard @@ -23200,21 +23289,6 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" - dependencies: - encoding: ^0.1.13 - minipass: ^3.1.6 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: 33ab2c5bdb3d91b9cb8bc6ae42d7418f4f00f7f7beae14b3bb21ea18f9224e792f560a6e17b6f1be12bbeb70dbe99a269f4204c60e5d99130a0777b153505c43 - languageName: node - linkType: hard - "minipass-fetch@npm:^3.0.0": version: 3.0.3 resolution: "minipass-fetch@npm:3.0.3" @@ -23267,7 +23341,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: @@ -23684,13 +23758,13 @@ __metadata: linkType: hard "node-fetch-native@npm:^1.0.2": - version: 1.1.1 - resolution: "node-fetch-native@npm:1.1.1" - checksum: 4b12e42c7bd80688acbfd8cceaa246aa00c532d00193e049d9ccce7038b135932a7f1d8a12107e790b827f295d1fd9e76706b634bce7c7e375e6a2f96e233e0f + version: 1.2.0 + resolution: "node-fetch-native@npm:1.2.0" + checksum: 85faa0b7af6884fd615ddc05ec70f05d3818bef8ece43952c49dd849885b21fe7cef54f62cf17b9c0faadfe13498f667a996070d386918ab7017b46c725c5ff6 languageName: node linkType: hard -"node-fetch@npm:2.6.11, node-fetch@npm:^2.0.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": +"node-fetch@npm:2.6.11": version: 2.6.11 resolution: "node-fetch@npm:2.6.11" dependencies: @@ -23729,6 +23803,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.0.0, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": + version: 2.6.12 + resolution: "node-fetch@npm:2.6.12" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10372e4b5ee07acadc15e6b2bc6fd8940582eea7b9b2a331f4e3665fdcd968498c1656f79f2fa572080ebb37ea80e1474a6478b3b36057ef901b63f4be8fd899 + languageName: node + linkType: hard + "node-forge@npm:^1, node-forge@npm:^1.3.1": version: 1.3.1 resolution: "node-forge@npm:1.3.1" @@ -23779,13 +23867,14 @@ __metadata: linkType: hard "node-gyp@npm:^9.0.0, node-gyp@npm:latest": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" dependencies: env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 glob: ^7.1.4 graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 + make-fetch-happen: ^11.0.3 nopt: ^6.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 @@ -23794,7 +23883,7 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: 3285c110768eb65aadd9aa1d056f917e594ea22611d21fd535ab3677ea433d0a281e7f09bc73d53e64b02214f4379dbca476dc33faffe455b0ac1d5ba92802f4 + checksum: e8dfbe2b02f23d056f69e01c409381963e92c71cafba6c9cfbf63b038f65ca19ab8183bb6891d080e59c4eb2cc425fc736f42e90afc0f0030ecd97bfc64fb7ad languageName: node linkType: hard @@ -23893,13 +23982,13 @@ __metadata: linkType: hard "nopt@npm:^7.0.0": - version: 7.1.0 - resolution: "nopt@npm:7.1.0" + version: 7.2.0 + resolution: "nopt@npm:7.2.0" dependencies: abbrev: ^2.0.0 bin: nopt: bin/nopt.js - checksum: f6dc14b7ae956d561798ed98e40ab5354ace6b6b23a74c7fd5f60036b5d734a6a99e4873c7a76dccda1b0326f0e3cdd432536fe8d1eab4d96fe525b53830f674 + checksum: 9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff languageName: node linkType: hard @@ -24217,7 +24306,7 @@ __metadata: languageName: node linkType: hard -"nx@npm:16.4.0, nx@npm:>=16.1.3 < 17": +"nx@npm:16.4.0": version: 16.4.0 resolution: "nx@npm:16.4.0" dependencies: @@ -24300,6 +24389,89 @@ __metadata: languageName: node linkType: hard +"nx@npm:16.4.1, nx@npm:>=16.1.3 < 17": + version: 16.4.1 + resolution: "nx@npm:16.4.1" + dependencies: + "@nrwl/tao": 16.4.1 + "@nx/nx-darwin-arm64": 16.4.1 + "@nx/nx-darwin-x64": 16.4.1 + "@nx/nx-freebsd-x64": 16.4.1 + "@nx/nx-linux-arm-gnueabihf": 16.4.1 + "@nx/nx-linux-arm64-gnu": 16.4.1 + "@nx/nx-linux-arm64-musl": 16.4.1 + "@nx/nx-linux-x64-gnu": 16.4.1 + "@nx/nx-linux-x64-musl": 16.4.1 + "@nx/nx-win32-arm64-msvc": 16.4.1 + "@nx/nx-win32-x64-msvc": 16.4.1 + "@parcel/watcher": 2.0.4 + "@yarnpkg/lockfile": ^1.1.0 + "@yarnpkg/parsers": 3.0.0-rc.46 + "@zkochan/js-yaml": 0.0.6 + axios: ^1.0.0 + chalk: ^4.1.0 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + cliui: ^7.0.2 + dotenv: ~10.0.0 + enquirer: ~2.3.6 + fast-glob: 3.2.7 + figures: 3.2.0 + flat: ^5.0.2 + fs-extra: ^11.1.0 + glob: 7.1.4 + ignore: ^5.0.4 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: ~2.0.3 + minimatch: 3.0.5 + npm-run-path: ^4.0.1 + open: ^8.4.0 + semver: 7.5.3 + string-width: ^4.2.3 + strong-log-transformer: ^2.1.0 + tar-stream: ~2.2.0 + tmp: ~0.2.1 + tsconfig-paths: ^4.1.2 + tslib: ^2.3.0 + v8-compile-cache: 2.3.0 + yargs: ^17.6.2 + yargs-parser: 21.1.1 + peerDependencies: + "@swc-node/register": ^1.4.2 + "@swc/core": ^1.2.173 + dependenciesMeta: + "@nx/nx-darwin-arm64": + optional: true + "@nx/nx-darwin-x64": + optional: true + "@nx/nx-freebsd-x64": + optional: true + "@nx/nx-linux-arm-gnueabihf": + optional: true + "@nx/nx-linux-arm64-gnu": + optional: true + "@nx/nx-linux-arm64-musl": + optional: true + "@nx/nx-linux-x64-gnu": + optional: true + "@nx/nx-linux-x64-musl": + optional: true + "@nx/nx-win32-arm64-msvc": + optional: true + "@nx/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + checksum: cfafd5e4ec5ac6f7c4751342c6f10365abb91df644568c07a0aa91e9047a0b9192b570bb96442adec42d4e7f8fe156ddd13a86be2d2927fc78fbf7cb577b3e01 + languageName: node + linkType: hard + "object-assign@npm:^4, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -24365,7 +24537,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": +"object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -24569,16 +24741,16 @@ __metadata: linkType: hard "optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" + version: 0.9.3 + resolution: "optionator@npm:0.9.3" dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 - word-wrap: ^1.2.3 - checksum: 8b574d50b032f34713dc09bfacdc351824f713c3c80773ead3a05ab977364de88f2f3962a6f15437747b93a5e0636928253949970daea3aaeeefbd3a525da6a4 + checksum: 66fba794d425b5be51353035cf3167ce6cfa049059cbb93229b819167687e0f48d2bc4603fcb21b091c99acb516aae1083624675b15c4765b2e4693a085e959c languageName: node linkType: hard @@ -25148,9 +25320,9 @@ __metadata: linkType: hard "pathe@npm:^1.1.0": - version: 1.1.0 - resolution: "pathe@npm:1.1.0" - checksum: 1c5d07378475bcdf4f435684566190d35d06be2db8b8e61cf9e866ae649941fdb093d732fa01b0f51d86e3f94140543c2571b0bf65a87ca7b5d1f52152aabe03 + version: 1.1.1 + resolution: "pathe@npm:1.1.1" + checksum: 3ae5a0529c3415d91c3ac9133f52cffea54a0dd46892fe059f4b80faf36fd207957d4594bdc87043b65d0761b1e5728f81f46bafff3b5302da4e2e48889b8c0e languageName: node linkType: hard @@ -25263,9 +25435,9 @@ __metadata: linkType: hard "pino-std-serializers@npm:^6.0.0": - version: 6.2.1 - resolution: "pino-std-serializers@npm:6.2.1" - checksum: 6f5e7525edc515160a2edb414b327096f7a305ffdf93cafdec692b660b11abec98dc79da57c5084ea59ff5413af03f75ec6d1d34a6d48cb8e9505babcc2f866e + version: 6.2.2 + resolution: "pino-std-serializers@npm:6.2.2" + checksum: 8f1c7f0f0d8f91e6c6b5b2a6bfb48f06441abeb85f1c2288319f736f9c6d814fbeebe928d2314efc2ba6018fa7db9357a105eca9fc99fc1f28945a8a8b28d3d5 languageName: node linkType: hard @@ -25291,9 +25463,9 @@ __metadata: linkType: hard "pirates@npm:^4.0.4, pirates@npm:^4.0.5": - version: 4.0.5 - resolution: "pirates@npm:4.0.5" - checksum: 58b6ff0f137a3d70ff34ac4802fd19819cdc19b53e9c95adecae6c7cfc77719a11f561ad85d46e79e520ef57c31145a564c8bc3bee8cfee75d441fab2928a51d + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 languageName: node linkType: hard @@ -26002,7 +26174,7 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:7.2.3, protobufjs@npm:^7.0.0": +"protobufjs@npm:7.2.3": version: 7.2.3 resolution: "protobufjs@npm:7.2.3" dependencies: @@ -26046,6 +26218,26 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^7.0.0": + version: 7.2.4 + resolution: "protobufjs@npm:7.2.4" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/node": ">=13.7.0" + long: ^5.0.0 + checksum: 7610b4e3b961e7637e8f61099931161af7f47f8b88b4a0d55124158f9b7fbe6e8fdfe551803b0c65fefad9d58d49332f0b5b4aa5826d8dcd8b062c351cbe2ebb + languageName: node + linkType: hard + "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.1 resolution: "protocols@npm:2.0.1" @@ -26179,7 +26371,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^1.2.4, punycode@npm:^1.3.2": +"punycode@npm:^1.2.4, punycode@npm:^1.3.2, punycode@npm:^1.4.1": version: 1.4.1 resolution: "punycode@npm:1.4.1" checksum: 354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08 @@ -26243,7 +26435,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.2, qs@npm:^6.10.0": +"qs@npm:6.11.2, qs@npm:^6.10.0, qs@npm:^6.11.0": version: 6.11.2 resolution: "qs@npm:6.11.2" dependencies: @@ -26491,11 +26683,11 @@ __metadata: linkType: hard "react-inspector@npm:^6.0.0": - version: 6.0.1 - resolution: "react-inspector@npm:6.0.1" + version: 6.0.2 + resolution: "react-inspector@npm:6.0.2" peerDependencies: react: ^16.8.4 || ^17.0.0 || ^18.0.0 - checksum: 34b0ba6e8c718aa0bbde3bc325531bc94b1e536eb226579e57cb912065693ff70611308c8e567c8e5703b0513655eb5258e5c3ac447e6a5003a44559abc84fa7 + checksum: 8f9b23c21b4d95722e28c9455c2bf00fd9437347714382594461f98e5b9954d60864d0f4e74e881639b065e752a97ba52a65e39930c234072e5bff291bb02b5e languageName: node linkType: hard @@ -26694,14 +26886,14 @@ __metadata: linkType: hard "readable-stream@npm:^4.0.0, readable-stream@npm:^4.1.0": - version: 4.4.0 - resolution: "readable-stream@npm:4.4.0" + version: 4.4.1 + resolution: "readable-stream@npm:4.4.1" dependencies: abort-controller: ^3.0.0 buffer: ^6.0.3 events: ^3.3.0 process: ^0.11.10 - checksum: 83f5a11285e5ebefb7b22a43ea77a2275075639325b4932a328a1fb0ee2475b83b9cc94326724d71c6aa3b60fa87e2b16623530b1cac34f3825dcea0996fdbe4 + checksum: 3bd4b8a847b0a582e98e2d61cb1469ac2d4168be30c6849384a1b091aaf0b5ebbb79f3d8583afc4b0c130923c5982d401b236140172ee3902dcfb9d87f68dcc7 languageName: node linkType: hard @@ -27375,8 +27567,8 @@ __metadata: linkType: hard "rollup@npm:^3.21.0": - version: 3.23.0 - resolution: "rollup@npm:3.23.0" + version: 3.26.0 + resolution: "rollup@npm:3.26.0" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -27384,7 +27576,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: e0cdd5c188272e33d12c7f411f1a5727dbe97bdc58e178b14d4dccf679152c14abaae5130d5de7bc69ba5be5de829c367dc5c29ba93725756a15a241b80de4ab + checksum: 948b028978dc943c2dee30713c12e2cdc5f63c99871a86e8de1fa31038209dd14a1408146e6d112105d9f82231f2cdfca319cadd29459eec81cb37a152692311 languageName: node linkType: hard @@ -27727,17 +27919,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.3.4": - version: 7.3.4 - resolution: "semver@npm:7.3.4" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 16b77752071597135b934bb33258badbac6c1cebbabe507ce31f68db3229acae7afa9602265c375c34df092339caa738b105e0c62240536ea1efd4767c36e674 - languageName: node - linkType: hard - "semver@npm:7.5.3, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.0, semver@npm:^7.5.2": version: 7.5.3 resolution: "semver@npm:7.5.3" @@ -28008,15 +28189,16 @@ __metadata: linkType: hard "sigstore@npm:^1.3.0, sigstore@npm:^1.4.0": - version: 1.5.2 - resolution: "sigstore@npm:1.5.2" + version: 1.6.0 + resolution: "sigstore@npm:1.6.0" dependencies: "@sigstore/protobuf-specs": ^0.1.0 + "@sigstore/tuf": ^1.0.0 make-fetch-happen: ^11.0.1 tuf-js: ^1.1.3 bin: sigstore: bin/sigstore.js - checksum: dfe6426c7fc9631883280655f54bd264d2a4f2fa95815ada678cafef5b9d8b02468ea1c560a95a1e7538017f4fa77f7f06840117b1c61289cad8e547bca47f50 + checksum: d0dd051774765ded57d19652a115ddebd2bd3253b1db11ce6cb83f32ab86c3f200bfe83138c577ea179236e148d93d3480430561081eef7cb0d8deab1b466f75 languageName: node linkType: hard @@ -28526,7 +28708,7 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^9.0.0, ssri@npm:^9.0.1": +"ssri@npm:^9.0.1": version: 9.0.1 resolution: "ssri@npm:9.0.1" dependencies: @@ -29291,16 +29473,16 @@ __metadata: linkType: hard "terser@npm:^5.10.0, terser@npm:^5.16.8": - version: 5.17.6 - resolution: "terser@npm:5.17.6" + version: 5.18.2 + resolution: "terser@npm:5.18.2" dependencies: - "@jridgewell/source-map": ^0.3.2 - acorn: ^8.5.0 + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 commander: ^2.20.0 source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 4c175f35af332320189db20e2b37b0671c51164d55a3fc44ed5b74b023858fd670cb987de7b2e8e3704b0d863f95ea9a0ecff37c8c01a48906fb7f81b512a5c8 + checksum: 7a7203eceef379c6381f5b43aaed509d12381c7453baee28b320fcd968523347f1bf4ba297cd3155ec860e9604279a1c9bc7060b35d9c34fae94c80cfa2738c2 languageName: node linkType: hard @@ -29549,14 +29731,14 @@ __metadata: linkType: hard "tough-cookie@npm:^4.1.2": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" + version: 4.1.3 + resolution: "tough-cookie@npm:4.1.3" dependencies: psl: ^1.1.33 punycode: ^2.1.1 universalify: ^0.2.0 url-parse: ^1.5.3 - checksum: 1f9d97bc9ff22b41e107eca4a146064f916e567b5557795dbfe742f098557ba1101b8f7c4e02ac785236663f7f086c37dc595a5b9813ef8fb27f8d800dc9eb9b + checksum: 4fc0433a0cba370d57c4b240f30440c848906dee3180bb6e85033143c2726d322e7e4614abb51d42d111ebec119c4876ed8d7247d4113563033eebbc1739c831 languageName: node linkType: hard @@ -29768,7 +29950,14 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.5.2, tslib@npm:~2.5.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.5.0, tslib@npm:^2.5.2": + version: 2.6.0 + resolution: "tslib@npm:2.6.0" + checksum: 8d18020a8b9e70ecc529a744c883c095f177805efdbc9786bd50bd82a46c17547923133c5444fbcaf1f7f1c44e0e29c89f73ecf6d8fd1039668024a073a81dc6 + languageName: node + linkType: hard + +"tslib@npm:~2.5.0": version: 2.5.3 resolution: "tslib@npm:2.5.3" checksum: 4cb1817d34fae5b27d146e6c4a468d4155097d95c1335d0bc9690f11f33e63844806bf4ed6d97c30c72b8d85261b66cbbe16d871d9c594ac05701ec83e62a607 @@ -29811,13 +30000,13 @@ __metadata: linkType: hard "tuf-js@npm:^1.1.3": - version: 1.1.6 - resolution: "tuf-js@npm:1.1.6" + version: 1.1.7 + resolution: "tuf-js@npm:1.1.7" dependencies: "@tufjs/models": 1.0.4 debug: ^4.3.4 - make-fetch-happen: ^11.1.0 - checksum: bb34127ba88d842a8c186e297bebeb75e2cd27cb4a39b51996294da34f9e6b72b3aa052ab2dbeb87f2ad061076bddca879ca9f8250cc94c382204fffce536c27 + make-fetch-happen: ^11.1.1 + checksum: 7c4980ada7a55f2670b895e8d9345ef2eec4a471c47f6127543964a12a8b9b69f16002990e01a138cd775aa954880b461186a6eaf7b86633d090425b4273375b languageName: node linkType: hard @@ -29933,9 +30122,9 @@ __metadata: linkType: hard "type-fest@npm:^3.0.0": - version: 3.11.1 - resolution: "type-fest@npm:3.11.1" - checksum: 55c0ba11e8b494684bf63f76e762ac44a95a9243a873cfc03c97f909477938d4a80f0c6265bfae92074072305447428748726385bbf2be4484b8451d73c84881 + version: 3.12.0 + resolution: "type-fest@npm:3.12.0" + checksum: c51abb6bcb7f92601a9b143d0fa44cacc1d1c19041300168303476c36f05e561610b8c2457e321a107c715160a33f63f507552034d2fd49a7bc1dbb4c1de565f languageName: node linkType: hard @@ -29990,7 +30179,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.1.3, typescript@npm:>=3 < 6": +"typescript@npm:5.1.3": version: 5.1.3 resolution: "typescript@npm:5.1.3" bin: @@ -30000,7 +30189,17 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@5.1.3#~builtin, typescript@patch:typescript@>=3 < 6#~builtin": +"typescript@npm:>=3 < 6": + version: 5.1.6 + resolution: "typescript@npm:5.1.6" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 45ac28e2df8365fd28dac42f5d62edfe69a7203d5ec646732cadc04065331f34f9078f81f150fde42ed9754eed6fa3b06a8f3523c40b821e557b727f1992e025 + languageName: node + linkType: hard + +"typescript@patch:typescript@5.1.3#~builtin": version: 5.1.3 resolution: "typescript@patch:typescript@npm%3A5.1.3#~builtin::version=5.1.3&hash=5da071" bin: @@ -30010,10 +30209,20 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^0.7.30": - version: 0.7.35 - resolution: "ua-parser-js@npm:0.7.35" - checksum: 53091de47669f042a7644b6f8b8f21cf901f94b58a4658249db47c47569295aadf1c3ae11c92cb8cafa57b483ab75cb206b9476480a698adc68158f8476bb8f8 +"typescript@patch:typescript@>=3 < 6#~builtin": + version: 5.1.6 + resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=5da071" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: c2bded58ab897a8341fdbb0c1d92ea2362f498cfffebdc8a529d03e15ea2454142dfbf122dabbd9a5cb79b7123790d27def16e11844887d20636226773ed329a + languageName: node + linkType: hard + +"ua-parser-js@npm:^1.0.35": + version: 1.0.35 + resolution: "ua-parser-js@npm:1.0.35" + checksum: 4641332fdf163ecdec4810cc2335932754f1b71527097f06005a658de256e22f5836a4a7860619c9e611d578e0451ff39dbff1a9b83c6615e3b0b3dd29588c30 languageName: node linkType: hard @@ -30134,15 +30343,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 55d95cd670c4a86117ebc34d394936d712d43b56db6bc511f9ca00f666373818bf9f075fb0ab76bcbfaf134592ef26bb75aad20786c1ff1ceba4457eaba90fb8 - languageName: node - linkType: hard - "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" @@ -30161,15 +30361,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 617240eb921af803b47d322d75a71a363dacf2e56c29ae5d1404fad85f64f4ec81ef10ee4fd79215d0202cbe1e5a653edb0558d59c9c81d3bd538c2d58e4c026 - languageName: node - linkType: hard - "unique-slug@npm:^4.0.0": version: 4.0.0 resolution: "unique-slug@npm:4.0.0" @@ -30410,12 +30601,12 @@ __metadata: linkType: hard "url@npm:^0.11.0": - version: 0.11.0 - resolution: "url@npm:0.11.0" + version: 0.11.1 + resolution: "url@npm:0.11.1" dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - checksum: bbe05f9f570ec5c06421c50ca63f287e61279092eed0891db69a9619323703ccd3987e6eed234c468794cf25680c599680d5c1f58d26090f1956c8e9ed8346a2 + punycode: ^1.4.1 + qs: ^6.11.0 + checksum: 9e18c57b854d6a8e0288c4ddf21f9e30273a0ef2efb28a7e3e3d6eac392637dbdecce0d8f616586d58ff43154997150ecc2c9873e6c845d1e742e24c940b6e12 languageName: node linkType: hard @@ -30982,13 +31173,13 @@ __metadata: linkType: hard "webpack-hot-middleware@npm:^2.25.1": - version: 2.25.3 - resolution: "webpack-hot-middleware@npm:2.25.3" + version: 2.25.4 + resolution: "webpack-hot-middleware@npm:2.25.4" dependencies: ansi-html-community: 0.0.8 html-entities: ^2.1.0 strip-ansi: ^6.0.0 - checksum: dca26d6d32eb684469830b4074dcd11c298036fe3ec8276ea5a69bc14bc8a53aab2494e02871ada146ec0881965d7018d559683cbcc73bcafcfa4da1184e92b5 + checksum: c0702d308a39bdbc9277d66df50272e8c358c2238cecb0881df57136f54cb7a3d8291320b13075325b58f7a3cbf7a1ef10829554a5bc2ddfa3effbf416dc8e8c languageName: node linkType: hard @@ -31311,7 +31502,7 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": +"word-wrap@npm:~1.2.3": version: 1.2.3 resolution: "word-wrap@npm:1.2.3" checksum: 1cb6558996deb22c909330db1f01d672feee41d7f0664492912de3de282da3f28ba2d49e87b723024e99d56ba2dac2f3ab28f8db07ac199f5e5d5e2e437833de