feat(nx-dev): new page for ai docs (#18025)

This commit is contained in:
Katerina Skroumpelou 2023-07-13 17:30:01 +03:00 committed by GitHub
parent e657de8583
commit 6ccbbbc98f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
27 changed files with 1001 additions and 92 deletions

View File

@ -0,0 +1,18 @@
{
"extends": ["../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@ -0,0 +1,11 @@
# nx-dev-data-access-ai
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build nx-dev-data-access-ai` to build the library.
## Running unit tests
Run `nx test nx-dev-data-access-ai` to execute the unit tests via [Jest](https://jestjs.io).

View File

@ -0,0 +1,11 @@
/* eslint-disable */
export default {
displayName: 'nx-dev-data-access-ai',
preset: '../../jest.preset.js',
testEnvironment: 'node',
transform: {
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
},
moduleFileExtensions: ['ts', 'js', 'html'],
coverageDirectory: '../../coverage/nx-dev/data-access-ai',
};

View File

@ -0,0 +1,5 @@
{
"name": "@nx/nx-dev/data-access-ai",
"version": "0.0.1",
"type": "commonjs"
}

View File

@ -0,0 +1,40 @@
{
"name": "nx-dev-data-access-ai",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "nx-dev/data-access-ai/src",
"projectType": "library",
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": ["{options.outputPath}"],
"options": {
"outputPath": "dist/nx-dev/data-access-ai",
"main": "nx-dev/data-access-ai/src/index.ts",
"tsConfig": "nx-dev/data-access-ai/tsconfig.lib.json",
"assets": ["nx-dev/data-access-ai/*.md"]
}
},
"lint": {
"executor": "@nx/linter:eslint",
"outputs": ["{options.outputFile}"],
"options": {
"lintFilePatterns": ["nx-dev/data-access-ai/**/*.ts"]
}
},
"test": {
"executor": "@nx/jest:jest",
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
"options": {
"jestConfig": "nx-dev/data-access-ai/jest.config.ts",
"passWithNoTests": true
},
"configurations": {
"ci": {
"ci": true,
"codeCoverage": true
}
}
}
},
"tags": []
}

View File

@ -0,0 +1,2 @@
export * from './lib/data-access-ai';
export * from './lib/utils';

View File

@ -0,0 +1,192 @@
// based on:
// https://github.com/supabase-community/nextjs-openai-doc-search/blob/main/pages/api/vector-search.ts
import { createClient } from '@supabase/supabase-js';
import GPT3Tokenizer from 'gpt3-tokenizer';
import {
Configuration,
OpenAIApi,
CreateModerationResponse,
CreateEmbeddingResponse,
ChatCompletionRequestMessageRoleEnum,
CreateCompletionResponseUsage,
} from 'openai';
import { getMessageFromResponse, sanitizeLinksInResponse } from './utils';
const openAiKey = process.env['NX_OPENAI_KEY'];
const supabaseUrl = process.env['NX_NEXT_PUBLIC_SUPABASE_URL'];
const supabaseServiceKey = process.env['NX_SUPABASE_SERVICE_ROLE_KEY'];
const config = new Configuration({
apiKey: openAiKey,
});
const openai = new OpenAIApi(config);
export async function nxDevDataAccessAi(
query: string
): Promise<{ textResponse: string; usage?: CreateCompletionResponseUsage }> {
try {
if (!openAiKey) {
throw new ApplicationError('Missing environment variable NX_OPENAI_KEY');
}
if (!supabaseUrl) {
throw new ApplicationError(
'Missing environment variable NX_NEXT_PUBLIC_SUPABASE_URL'
);
}
if (!supabaseServiceKey) {
throw new ApplicationError(
'Missing environment variable NX_SUPABASE_SERVICE_ROLE_KEY'
);
}
if (!query) {
throw new UserError('Missing query in request data');
}
const supabaseClient = createClient(supabaseUrl, supabaseServiceKey);
// Moderate the content to comply with OpenAI T&C
const sanitizedQuery = query.trim();
const moderationResponse: CreateModerationResponse = await openai
.createModeration({ input: sanitizedQuery })
.then((res) => res.data);
const [results] = moderationResponse.results;
if (results.flagged) {
throw new UserError('Flagged content', {
flagged: true,
categories: results.categories,
});
}
// Create embedding from query
const embeddingResponse = await openai.createEmbedding({
model: 'text-embedding-ada-002',
input: sanitizedQuery,
});
if (embeddingResponse.status !== 200) {
throw new ApplicationError(
'Failed to create embedding for question',
embeddingResponse
);
}
const {
data: [{ embedding }],
}: CreateEmbeddingResponse = embeddingResponse.data;
const { error: matchError, data: pageSections } = await supabaseClient.rpc(
'match_page_sections',
{
embedding,
match_threshold: 0.78,
match_count: 10,
min_content_length: 50,
}
);
if (matchError) {
throw new ApplicationError('Failed to match page sections', matchError);
}
const tokenizer = new GPT3Tokenizer({ type: 'gpt3' });
let tokenCount = 0;
let contextText = '';
for (let i = 0; i < pageSections.length; i++) {
const pageSection = pageSections[i];
const content = pageSection.content;
const encoded = tokenizer.encode(content);
tokenCount += encoded.text.length;
if (tokenCount >= 1500) {
break;
}
contextText += `${content.trim()}\n---\n`;
}
const prompt = `
${`
You are a knowledgeable Nx representative.
Your knowledge is based entirely on the official Nx documentation.
You should answer queries using ONLY that information.
Answer in markdown format. Always give an example, answer as thoroughly as you can, and
always provide a link to relevant documentation
on the https://nx.dev website. All the links you find or post
that look like local or relative links, always prepend with "https://nx.dev".
Your answer should be in the form of a Markdown article, much like the
existing Nx documentation. Include a title, and subsections, if it makes sense.
Mark the titles and the subsections with the appropriate markdown syntax.
If you are unsure and the answer is not explicitly written in the Nx documentation, say
"Sorry, I don't know how to help with that.
You can visit the [Nx documentation](https://nx.dev/getting-started/intro) for more info."
Remember, answer the question using ONLY the information provided in the Nx documentation.
Answer as markdown (including related code snippets if available).
`
.replace(/\s+/g, ' ')
.trim()}
`;
const chatGptMessages = [
{
role: ChatCompletionRequestMessageRoleEnum.System,
content: prompt,
},
{
role: ChatCompletionRequestMessageRoleEnum.Assistant,
content: contextText,
},
{
role: ChatCompletionRequestMessageRoleEnum.User,
content: sanitizedQuery,
},
];
const response = await openai.createChatCompletion({
model: 'gpt-3.5-turbo-16k',
messages: chatGptMessages,
temperature: 0,
stream: false,
});
if (response.status !== 200) {
const error = response.data;
throw new ApplicationError('Failed to generate completion', error);
}
const message = getMessageFromResponse(response.data);
const responseWithoutBadLinks = await sanitizeLinksInResponse(message);
return {
textResponse: responseWithoutBadLinks,
usage: response.data.usage,
};
} catch (err: unknown) {
if (err instanceof UserError) {
console.error(err.message);
} else if (err instanceof ApplicationError) {
// Print out application errors with their additional data
console.error(`${err.message}: ${JSON.stringify(err.data)}`);
} else {
// Print out unexpected errors as is to help with debugging
console.error(err);
}
// TODO: include more response info in debug environments
console.error(err);
throw err;
}
}
export class ApplicationError extends Error {
constructor(message: string, public data: Record<string, any> = {}) {
super(message);
}
}
export class UserError extends ApplicationError {}

View File

@ -0,0 +1,50 @@
import { CreateChatCompletionResponse } from 'openai';
export function getMessageFromResponse(
response: CreateChatCompletionResponse
): string {
/**
*
* This function here will or may be enhanced
* once we add more functionality
*/
return response.choices[0].message?.content ?? '';
}
export async function sanitizeLinksInResponse(
response: string
): Promise<string> {
const regex = /https:\/\/nx\.dev[^) \n]*[^).]/g;
const urls = response.match(regex);
if (urls) {
for (const url of urls) {
const linkIsWrong = await is404(url);
if (linkIsWrong) {
response = response.replace(
url,
'https://nx.dev/getting-started/intro'
);
}
}
}
return response;
}
async function is404(url: string): Promise<boolean> {
try {
const response = await fetch(url.replace('https://nx.dev', ''));
if (response.status === 404) {
return true;
} else {
return false;
}
} catch (error) {
if ((error as any)?.response?.status === 404) {
return true;
} else {
return false;
}
}
}

View File

@ -0,0 +1,24 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"target": "es2021",
"lib": ["es2021", "DOM"]
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}

View File

@ -0,0 +1,10 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"],
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"]
}

View File

@ -0,0 +1,14 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"module": "commonjs",
"types": ["jest", "node"]
},
"include": [
"jest.config.ts",
"src/**/*.test.ts",
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
}

View File

@ -0,0 +1,12 @@
{
"presets": [
[
"@nx/react/babel",
{
"runtime": "automatic",
"useBuiltIns": "usage"
}
]
],
"plugins": []
}

View File

@ -0,0 +1,18 @@
{
"extends": ["plugin:@nx/react", "../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@ -0,0 +1,7 @@
# nx-dev-feature-ai
This library was generated with [Nx](https://nx.dev).
## Running unit tests
Run `nx test nx-dev-feature-ai` to execute the unit tests via [Jest](https://jestjs.io).

View File

@ -0,0 +1,10 @@
/* eslint-disable */
export default {
displayName: 'nx-dev-feature-search',
transform: {
'^.+\\.[tj]sx?$': ['babel-jest', { presets: ['@nx/next/babel'] }],
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
coverageDirectory: '../../coverage/nx-dev/feature-ai',
preset: '../../jest.preset.js',
};

View File

@ -0,0 +1,11 @@
{
"name": "nx-dev-feature-ai",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "nx-dev/feature-ai/src",
"projectType": "library",
"targets": {
"lint": {},
"test": {}
},
"tags": ["scope:nx-dev", "type:feature"]
}

View File

@ -0,0 +1,3 @@
// Use this file to export React client components (e.g. those with 'use client' directive) or other non-server utilities
export * from './lib/feature-ai';

View File

@ -0,0 +1,120 @@
import { ReactNode, useState } from 'react';
import { Button } from '@nx/nx-dev/ui-common';
import { sendCustomEvent } from '@nx/nx-dev/feature-analytics';
import { renderMarkdown } from '@nx/nx-dev/ui-markdoc';
import { nxDevDataAccessAi } from '@nx/nx-dev/data-access-ai';
export function FeatureAi(): JSX.Element {
const [finalResult, setFinalResult] = useState<null | ReactNode>(null);
const [error, setError] = useState(null);
const [query, setSearchTerm] = useState('');
const [loading, setLoading] = useState(false);
const warning = `
{% callout type="warning" title="Always double check!" %}
This feature is still in Alpha.
The results may not be accurate, so please always double check with our documentation.
{% /callout %}
`;
const handleSubmit = async () => {
setLoading(true);
let completeText = '';
let usage;
try {
const aiResponse = await nxDevDataAccessAi(query);
completeText = aiResponse.textResponse;
usage = aiResponse.usage;
setLoading(false);
} catch (error) {
setError(error as any);
setLoading(false);
}
sendCustomEvent('ai_query', 'ai', 'query', undefined, { query, ...usage });
setFinalResult(
renderMarkdown(warning + completeText, { filePath: '' }).node
);
};
return (
<div
className="p-2 mx-auto flex h-full w-full flex-col"
id="wrapper"
data-testid="wrapper"
>
<div className="w-full flex">
<input
id="search"
name="search"
disabled={loading}
className="block w-full rounded-md border border-slate-300 bg-white py-2 pl-10 pr-3 text-sm placeholder-slate-500 transition focus:placeholder-slate-400 dark:border-slate-900 dark:bg-slate-700"
placeholder="What do you want to know?"
onChange={(event) => setSearchTerm(event.target.value)}
onKeyDown={(event) => {
if (event.keyCode === 13 || event.key === 'Enter') {
handleSubmit();
}
}}
type="search"
/>
<Button
variant="primary"
size="small"
disabled={loading}
onClick={() => handleSubmit()}
>
Ask
</Button>
</div>
{loading ? (
<div className="p-4 max-w-none">
<h1>Thinking...</h1>
</div>
) : null}
{finalResult && !error ? (
<>
<div className="p-4 max-w-none prose prose-slate dark:prose-invert">
{finalResult}
</div>
<div>
<Button
variant="primary"
size="small"
onClick={() =>
sendCustomEvent('ai_feedback', 'ai', 'good', undefined, {
query,
result: finalResult,
})
}
>
Answer was helpful{' '}
<span role="img" aria-label="thumbs-up">
👍
</span>
</Button>
<Button
variant="primary"
size="small"
onClick={() =>
sendCustomEvent('ai_feedback', 'ai', 'bad', undefined, {
query,
result: finalResult,
})
}
>
Answer looks wrong{' '}
<span role="img" aria-label="thumbs-down">
👎
</span>
</Button>
</div>
</>
) : null}
{error ? <div>There was an error: {error['message']}</div> : null}
</div>
);
}
export default FeatureAi;

View File

@ -0,0 +1,23 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"jsx": "react-jsx",
"allowJs": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
},
{
"path": "./tsconfig.spec.json"
}
]
}

View File

@ -0,0 +1,20 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"types": ["node"],
"lib": ["dom"]
},
"files": [
"../../node_modules/@nx/react/typings/cssmodule.d.ts",
"../../node_modules/@nx/react/typings/image.d.ts"
],
"exclude": [
"**/*.spec.ts",
"**/*.test.ts",
"**/*.spec.tsx",
"**/*.test.tsx",
"jest.config.ts"
],
"include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"]
}

View File

@ -0,0 +1,20 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"module": "commonjs",
"types": ["jest", "node"]
},
"include": [
"**/*.spec.ts",
"**/*.test.ts",
"**/*.spec.tsx",
"**/*.test.tsx",
"**/*.spec.js",
"**/*.test.js",
"**/*.spec.jsx",
"**/*.test.jsx",
"**/*.d.ts",
"jest.config.ts"
]
}

View File

@ -26,13 +26,15 @@ export function sendCustomEvent(
action: string,
category: string,
label: string,
value?: number
value?: number,
customObject?: Record<string, unknown>
): void {
try {
gtag('event', action, {
event_category: category,
event_label: label,
value,
...customObject,
});
} catch (error) {
throw new Error(`Cannot send Google Tag event: ${error}`);

View File

@ -3,6 +3,7 @@ const path = require('path');
module.exports = {
siteUrl: process.env.SITE_URL || 'https://nx.dev',
generateRobotsTxt: true,
exclude: ['/ai'],
sourceDir: path.resolve(__dirname, '../../dist/nx-dev/nx-dev/.next'),
outDir: path.resolve(__dirname, '../../dist/nx-dev/nx-dev/public'),
};

View File

@ -0,0 +1,32 @@
import { DocumentationHeader } from '@nx/nx-dev/ui-common';
import { FeatureAi } from '@nx/nx-dev/feature-ai';
import { useNavToggle } from '../../lib/navigation-toggle.effect';
import { NextSeo } from 'next-seo';
export default function AiDocs(): JSX.Element {
const { toggleNav, navIsOpen } = useNavToggle();
return (
<>
<NextSeo
noindex={true}
robotsProps={{
nosnippet: true,
notranslate: true,
noimageindex: true,
noarchive: true,
maxSnippet: -1,
maxImagePreview: 'none',
maxVideoPreview: -1,
}}
/>
<div id="shell" className="flex h-full flex-col">
<div className="w-full flex-shrink-0">
<DocumentationHeader isNavOpen={navIsOpen} toggleNav={toggleNav} />
</div>
<main id="main" role="main" className="flex h-full flex-1">
<FeatureAi />
</main>
</div>
</>
);
}

View File

@ -92,6 +92,7 @@
"@storybook/react": "^7.0.24",
"@storybook/react-webpack5": "^7.0.24",
"@storybook/types": "^7.0.24",
"@supabase/supabase-js": "^2.26.0",
"@svgr/rollup": "^8.0.1",
"@svgr/webpack": "^8.0.1",
"@swc-node/register": "^1.4.2",
@ -128,6 +129,7 @@
"@xstate/immer": "0.3.1",
"@xstate/inspect": "0.7.0",
"@xstate/react": "3.0.1",
"ai": "^2.1.15",
"ajv": "^8.11.0",
"autoprefixer": "10.4.13",
"babel-jest": "29.4.3",
@ -173,6 +175,7 @@
"flat": "^5.0.2",
"fork-ts-checker-webpack-plugin": "7.2.13",
"fs-extra": "^11.1.0",
"gpt3-tokenizer": "^1.1.5",
"html-webpack-plugin": "5.5.0",
"http-server": "14.1.0",
"husky": "^8.0.1",
@ -214,6 +217,7 @@
"nx-cloud": "16.0.5",
"octokit": "^2.0.14",
"open": "^8.4.0",
"openai":"~3.3.0",
"ora": "5.3.0",
"parse-markdown-links": "^1.0.4",
"parse5": "4.0.0",
@ -354,5 +358,4 @@
"lerna@6.6.2": "patches/lerna@6.6.2.patch"
}
}
}
}

424
pnpm-lock.yaml generated
View File

@ -1,9 +1,5 @@
lockfileVersion: '6.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
overrides:
minimist: ^1.2.6
underscore: ^1.12.1
@ -349,6 +345,9 @@ devDependencies:
'@storybook/types':
specifier: ^7.0.24
version: 7.0.24
'@supabase/supabase-js':
specifier: ^2.26.0
version: 2.26.0
'@svgr/rollup':
specifier: ^8.0.1
version: 8.0.1(rollup@2.79.0)
@ -457,6 +456,9 @@ devDependencies:
'@xstate/react':
specifier: 3.0.1
version: 3.0.1(@types/react@18.2.13)(react@18.2.0)(xstate@4.34.0)
ai:
specifier: ^2.1.15
version: 2.1.15(react@18.2.0)(svelte@3.59.2)(vue@3.3.4)
ajv:
specifier: ^8.11.0
version: 8.11.0
@ -592,6 +594,9 @@ devDependencies:
fs-extra:
specifier: ^11.1.0
version: 11.1.0
gpt3-tokenizer:
specifier: ^1.1.5
version: 1.1.5
html-webpack-plugin:
specifier: 5.5.0
version: 5.5.0(webpack@5.88.0)
@ -715,6 +720,9 @@ devDependencies:
open:
specifier: ^8.4.0
version: 8.4.0
openai:
specifier: ~3.3.0
version: 3.3.0
ora:
specifier: 5.3.0
version: 5.3.0
@ -5808,7 +5816,6 @@ packages:
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
dev: true
/@jridgewell/sourcemap-codec@1.4.14:
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
@ -6891,42 +6898,6 @@ packages:
- typescript
dev: true
/@nrwl/js@15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3):
resolution: {integrity: sha512-l2Q7oFpzx6ul7G0nKpMkrvnIEaOY+X8fc2g2Db5WqpnnBdfkrtWXZPg/O4DQ1p9O6BXrZ+Q2AK9bfgnliiwyEg==}
dependencies:
'@babel/core': 7.22.5
'@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5)
'@babel/plugin-proposal-decorators': 7.21.0(@babel/core@7.22.5)
'@babel/plugin-transform-runtime': 7.22.5(@babel/core@7.22.5)
'@babel/preset-env': 7.22.5(@babel/core@7.22.5)
'@babel/preset-typescript': 7.21.4(@babel/core@7.22.5)
'@babel/runtime': 7.22.5
'@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3)
'@nrwl/workspace': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(eslint@8.15.0)(prettier@2.7.1)(typescript@5.1.3)
'@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3)
babel-plugin-const-enum: 1.2.0(@babel/core@7.22.5)
babel-plugin-macros: 2.8.0
babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.22.5)
chalk: 4.1.2
fast-glob: 3.2.7
fs-extra: 11.1.1
ignore: 5.2.0
js-tokens: 4.0.0
minimatch: 3.0.5
source-map-support: 0.5.19
tree-kill: 1.2.2
tslib: 2.5.3
transitivePeerDependencies:
- '@babel/traverse'
- '@swc-node/register'
- '@swc/core'
- debug
- nx
- prettier
- supports-color
- typescript
dev: true
/@nrwl/js@16.5.0-beta.3(@swc-node/register@1.5.4)(@swc/core@1.3.51)(nx@16.5.0-beta.3)(typescript@5.1.3)(verdaccio@5.15.4):
resolution: {integrity: sha512-6ZeiIEt67meBC5mTugzSCbMHsMLTrYGzqkaXWWr3jj+8WTxCgVqTqV8JSgUq/sW9btQM7zAqH7ABLp0Cr4FS+A==}
dependencies:
@ -6951,7 +6922,7 @@ packages:
optional: true
dependencies:
'@nrwl/devkit': 15.8.0(nx@15.8.0)(typescript@5.1.3)
'@nrwl/js': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(nx@15.8.0)(prettier@2.7.1)(typescript@5.1.3)
'@nrwl/js': 15.8.0(@swc-node/register@1.5.4)(@swc/core@1.3.51)(eslint@8.15.0)(nx@16.5.0-beta.3)(prettier@2.7.1)(typescript@5.1.3)
'@phenomnomnominal/tsquery': 4.1.1(typescript@5.1.3)
eslint: 8.15.0
tmp: 0.2.1
@ -8102,7 +8073,7 @@ packages:
'@octokit/request-error': 3.0.3
'@octokit/types': 9.0.0
is-plain-object: 5.0.0
node-fetch: 2.6.7
node-fetch: 2.6.12
universal-user-agent: 6.0.0
transitivePeerDependencies:
- encoding
@ -9085,7 +9056,7 @@ packages:
glob-promise: 6.0.2(glob@8.1.0)
handlebars: 4.7.7
lazy-universal-dotenv: 4.0.0
node-fetch: 2.6.7
node-fetch: 2.6.12
picomatch: 2.3.1
pkg-dir: 5.0.0
pretty-hrtime: 1.0.3
@ -9599,6 +9570,62 @@ packages:
file-system-cache: 2.3.0
dev: true
/@supabase/functions-js@2.1.2:
resolution: {integrity: sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ==}
dependencies:
cross-fetch: 3.1.8
transitivePeerDependencies:
- encoding
dev: true
/@supabase/gotrue-js@2.39.1:
resolution: {integrity: sha512-qRz9mBleA/QATGKOdMAUjpn+YcbZJrTHyWQCe2hAFqJo15JIe1XziD1ZeFraRpsXwja+vONslGeynGv7H8ZZeQ==}
dependencies:
cross-fetch: 3.1.8
transitivePeerDependencies:
- encoding
dev: true
/@supabase/postgrest-js@1.7.2:
resolution: {integrity: sha512-GK80JpRq8l6Qll85erICypAfQCied8tdlXfsDN14W844HqXCSOisk8AaE01DAwGJanieaoN5fuqhzA2yKxDvEQ==}
dependencies:
cross-fetch: 3.1.8
transitivePeerDependencies:
- encoding
dev: true
/@supabase/realtime-js@2.7.3:
resolution: {integrity: sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==}
dependencies:
'@types/phoenix': 1.6.0
'@types/websocket': 1.0.5
websocket: 1.0.34
transitivePeerDependencies:
- supports-color
dev: true
/@supabase/storage-js@2.5.1:
resolution: {integrity: sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==}
dependencies:
cross-fetch: 3.1.8
transitivePeerDependencies:
- encoding
dev: true
/@supabase/supabase-js@2.26.0:
resolution: {integrity: sha512-RXmTPTobaYAwkSobadHZmEVLmzX3SGrtRZIGfLWnLv92VzBRrjuXn0a+bJqKl50GUzsyqPA+j5pod7EwMkcH5A==}
dependencies:
'@supabase/functions-js': 2.1.2
'@supabase/gotrue-js': 2.39.1
'@supabase/postgrest-js': 1.7.2
'@supabase/realtime-js': 2.7.3
'@supabase/storage-js': 2.5.1
cross-fetch: 3.1.8
transitivePeerDependencies:
- encoding
- supports-color
dev: true
/@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.22.5):
resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==}
engines: {node: '>=14'}
@ -10492,6 +10519,10 @@ packages:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
dev: true
/@types/phoenix@1.6.0:
resolution: {integrity: sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==}
dev: true
/@types/prettier@2.7.1:
resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==}
@ -10602,6 +10633,12 @@ packages:
resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==}
dev: true
/@types/websocket@1.0.5:
resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==}
dependencies:
'@types/node': 18.16.9
dev: true
/@types/ws@8.5.3:
resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==}
dependencies:
@ -10958,6 +10995,15 @@ packages:
source-map: 0.6.1
dev: true
/@vue/compiler-core@3.3.4:
resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
dependencies:
'@babel/parser': 7.22.5
'@vue/shared': 3.3.4
estree-walker: 2.0.2
source-map-js: 1.0.2
dev: true
/@vue/compiler-dom@3.2.41:
resolution: {integrity: sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==}
dependencies:
@ -10965,6 +11011,13 @@ packages:
'@vue/shared': 3.2.41
dev: true
/@vue/compiler-dom@3.3.4:
resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
dependencies:
'@vue/compiler-core': 3.3.4
'@vue/shared': 3.3.4
dev: true
/@vue/compiler-sfc@3.2.41:
resolution: {integrity: sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==}
dependencies:
@ -10980,6 +11033,21 @@ packages:
source-map: 0.6.1
dev: true
/@vue/compiler-sfc@3.3.4:
resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
dependencies:
'@babel/parser': 7.22.5
'@vue/compiler-core': 3.3.4
'@vue/compiler-dom': 3.3.4
'@vue/compiler-ssr': 3.3.4
'@vue/reactivity-transform': 3.3.4
'@vue/shared': 3.3.4
estree-walker: 2.0.2
magic-string: 0.30.0
postcss: 8.4.19
source-map-js: 1.0.2
dev: true
/@vue/compiler-ssr@3.2.41:
resolution: {integrity: sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==}
dependencies:
@ -10987,6 +11055,13 @@ packages:
'@vue/shared': 3.2.41
dev: true
/@vue/compiler-ssr@3.3.4:
resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
dependencies:
'@vue/compiler-dom': 3.3.4
'@vue/shared': 3.3.4
dev: true
/@vue/reactivity-transform@3.2.41:
resolution: {integrity: sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A==}
dependencies:
@ -10997,10 +11072,55 @@ packages:
magic-string: 0.25.9
dev: true
/@vue/reactivity-transform@3.3.4:
resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
dependencies:
'@babel/parser': 7.22.5
'@vue/compiler-core': 3.3.4
'@vue/shared': 3.3.4
estree-walker: 2.0.2
magic-string: 0.30.0
dev: true
/@vue/reactivity@3.3.4:
resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
dependencies:
'@vue/shared': 3.3.4
dev: true
/@vue/runtime-core@3.3.4:
resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
dependencies:
'@vue/reactivity': 3.3.4
'@vue/shared': 3.3.4
dev: true
/@vue/runtime-dom@3.3.4:
resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
dependencies:
'@vue/runtime-core': 3.3.4
'@vue/shared': 3.3.4
csstype: 3.1.1
dev: true
/@vue/server-renderer@3.3.4(vue@3.3.4):
resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
peerDependencies:
vue: 3.3.4
dependencies:
'@vue/compiler-ssr': 3.3.4
'@vue/shared': 3.3.4
vue: 3.3.4
dev: true
/@vue/shared@3.2.41:
resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==}
dev: true
/@vue/shared@3.3.4:
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
dev: true
/@webassemblyjs/ast@1.11.1:
resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==}
dependencies:
@ -11463,6 +11583,31 @@ packages:
indent-string: 4.0.0
dev: true
/ai@2.1.15(react@18.2.0)(svelte@3.59.2)(vue@3.3.4):
resolution: {integrity: sha512-ePxoo9yEpHrC6n2O5b0Ko9C0dZEEXBY9FuhbrR1PVgdo4cSislTqg9TSPdVKT3mnw01A2pEg24cQ8ikRyH9m4Q==}
engines: {node: '>=14.6'}
peerDependencies:
react: ^18.2.0
svelte: ^4.0.0
vue: ^3.3.4
peerDependenciesMeta:
react:
optional: true
svelte:
optional: true
vue:
optional: true
dependencies:
eventsource-parser: 1.0.0
nanoid: 3.3.6
react: 18.2.0
sswr: 1.10.0(svelte@3.59.2)
svelte: 3.59.2
swr: 2.1.5(react@18.2.0)
swrv: 1.0.3(vue@3.3.4)
vue: 3.3.4
dev: true
/ajv-formats@2.1.1(ajv@8.11.0):
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
peerDependencies:
@ -11748,6 +11893,10 @@ packages:
is-string: 1.0.7
dev: true
/array-keyed-map@2.1.3:
resolution: {integrity: sha512-JIUwuFakO+jHjxyp4YgSiKXSZeC0U+R1jR94bXWBcVlFRBycqXlb+kH9JHxBGcxnVuSqx5bnn0Qz9xtSeKOjiA==}
dev: true
/array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
@ -11939,6 +12088,14 @@ packages:
- debug
dev: true
/axios@0.26.1:
resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==}
dependencies:
follow-redirects: 1.15.2(debug@4.3.2)
transitivePeerDependencies:
- debug
dev: true
/axios@1.0.0:
resolution: {integrity: sha512-SsHsGFN1qNPFT5QhSoSD37SHDfGyLSW5AESmyLk2JeCMHv5g0I9g0Hz/zQHx2KNe0jGXh2q2hAm7OdkXm360CA==}
dependencies:
@ -12677,7 +12834,6 @@ packages:
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
dev: true
/buffer-indexof-polyfill@1.0.2:
resolution: {integrity: sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==}
@ -12703,6 +12859,14 @@ packages:
engines: {node: '>=0.2.0'}
dev: true
/bufferutil@4.0.7:
resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==}
engines: {node: '>=6.14.2'}
requiresBuild: true
dependencies:
node-gyp-build: 4.5.0
dev: true
/builtin-modules@1.1.1:
resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==}
engines: {node: '>=0.10.0'}
@ -13250,7 +13414,6 @@ packages:
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
/commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
@ -13771,6 +13934,14 @@ packages:
pretty-bytes: 5.6.0
dev: true
/cross-fetch@3.1.8:
resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==}
dependencies:
node-fetch: 2.6.12
transitivePeerDependencies:
- encoding
dev: true
/cross-spawn@5.1.0:
resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==}
dependencies:
@ -15645,6 +15816,11 @@ packages:
engines: {node: '>=0.8.x'}
dev: true
/eventsource-parser@1.0.0:
resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==}
engines: {node: '>=14.18'}
dev: true
/execa@0.7.0:
resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==}
engines: {node: '>=4'}
@ -16826,6 +17002,13 @@ packages:
responselike: 2.0.1
dev: true
/gpt3-tokenizer@1.1.5:
resolution: {integrity: sha512-O9iCL8MqGR0Oe9wTh0YftzIbysypNQmS5a5JG3cB3M4LMYjlAVvNnf8LUzVY9MrI7tj+YLY356uHtO2lLX2HpA==}
engines: {node: '>=12'}
dependencies:
array-keyed-map: 2.1.3
dev: true
/graceful-fs@4.2.10:
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
dev: true
@ -17966,7 +18149,7 @@ packages:
/isomorphic-unfetch@3.1.0:
resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==}
dependencies:
node-fetch: 2.6.7
node-fetch: 2.6.12
unfetch: 4.2.0
transitivePeerDependencies:
- encoding
@ -18270,7 +18453,7 @@ packages:
resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@babel/code-frame': 7.21.4
'@babel/code-frame': 7.22.5
'@jest/types': 29.5.0
'@types/stack-utils': 2.0.1
chalk: 4.1.2
@ -20315,6 +20498,18 @@ packages:
lodash: 4.17.21
dev: true
/node-fetch@2.6.12:
resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
peerDependenciesMeta:
encoding:
optional: true
dependencies:
whatwg-url: 5.0.0
dev: true
/node-fetch@2.6.7:
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
engines: {node: 4.x || >=6.0.0}
@ -21015,6 +21210,15 @@ packages:
is-wsl: 2.2.0
dev: true
/openai@3.3.0:
resolution: {integrity: sha512-uqxI/Au+aPRnsaQRe8CojU0eCR7I0mBiKjD3sNMzY6DaC1ZVrc85u98mtJW6voDug8fgGN+DIZmTDxTthxb7dQ==}
dependencies:
axios: 0.26.1
form-data: 4.0.0
transitivePeerDependencies:
- debug
dev: true
/opener@1.5.2:
resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
hasBin: true
@ -24022,7 +24226,6 @@ packages:
chokidar: 3.5.3
immutable: 4.1.0
source-map-js: 1.0.2
dev: true
/sax@1.2.4:
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
@ -24619,7 +24822,6 @@ packages:
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
dev: true
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
@ -24751,6 +24953,15 @@ packages:
minipass: 3.3.4
dev: true
/sswr@1.10.0(svelte@3.59.2):
resolution: {integrity: sha512-nLWAJSQy3h8t7rrbTXanRyVHuQPj4PwKIVGe4IMlxJFdhyaxnN/JGACnvQKGDeWiTGYIZIx/jRuUsPEF0867Pg==}
peerDependencies:
svelte: ^3.29.0
dependencies:
svelte: 3.59.2
swrev: 3.0.0
dev: true
/stable@0.1.8:
resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility'
@ -25150,6 +25361,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
/svelte@3.59.2:
resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==}
engines: {node: '>= 8'}
dev: true
/svg-parser@2.0.4:
resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
dev: true
@ -25185,6 +25401,27 @@ packages:
resolution: {integrity: sha512-DlZARu6ckUFqDe0j5IPayO4k0gQvYQw9Un02MhxAgaMtVnTH2vmyyDe+yKeV0r1LiiPx3JbasdS/5Yyb/AV3iw==}
dev: true
/swr@2.1.5(react@18.2.0):
resolution: {integrity: sha512-/OhfZMcEpuz77KavXST5q6XE9nrOBOVcBLWjMT+oAE/kQHyE3PASrevXCtQDZ8aamntOfFkbVJp7Il9tNBQWrw==}
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0
dependencies:
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: true
/swrev@3.0.0:
resolution: {integrity: sha512-QJuZiptdOmbDY45pECBRVEgnoBlOKjeT2MWVz04wKHpWX15hM3P7EjcIbHDg5yLoPCMQ7to3349MEE+l9QF5HA==}
dev: true
/swrv@1.0.3(vue@3.3.4):
resolution: {integrity: sha512-sl+eLEE+aPPjhP1E8gQ75q3RPRyw5Gd/kROnrTFo3+LkCeLskv7F+uAl5W97wgJkzitobL6FLsRPVm0DgIgN8A==}
peerDependencies:
vue: '>=3.2.26 < 4'
dependencies:
vue: 3.3.4
dev: true
/symbol-observable@1.0.1:
resolution: {integrity: sha512-Kb3PrPYz4HanVF1LVGuAdW6LoVgIwjUYJGzFe7NDrBLCN4lsV/5J0MFurV+ygS4bRVwrCEt2c7MQ1R2a72oJDw==}
engines: {node: '>=0.10.0'}
@ -25469,7 +25706,6 @@ packages:
acorn: 8.8.2
commander: 2.20.3
source-map-support: 0.5.21
dev: true
/terser@5.18.0:
resolution: {integrity: sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==}
@ -26025,6 +26261,12 @@ packages:
resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==}
dev: true
/typedarray-to-buffer@3.1.5:
resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
dependencies:
is-typedarray: 1.0.0
dev: true
/typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
dev: true
@ -26363,6 +26605,14 @@ packages:
react: 18.2.0
dev: true
/utf-8-validate@5.0.10:
resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==}
engines: {node: '>=6.14.2'}
requiresBuild: true
dependencies:
node-gyp-build: 4.5.0
dev: true
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@ -26556,7 +26806,7 @@ packages:
mlly: 1.2.0
pathe: 1.1.0
picocolors: 1.0.0
vite: 4.3.9(@types/node@18.16.9)(less@4.1.3)(sass@1.55.0)(stylus@0.59.0)
vite: 4.3.9(@types/node@18.16.9)(less@4.1.3)(sass@1.63.2)(stylus@0.59.0)(terser@5.17.7)
transitivePeerDependencies:
- '@types/node'
- less
@ -26602,42 +26852,6 @@ packages:
optionalDependencies:
fsevents: 2.3.2
/vite@4.3.9(@types/node@18.16.9)(less@4.1.3)(sass@1.55.0)(stylus@0.59.0):
resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
dependencies:
'@types/node': 18.16.9
esbuild: 0.17.19
less: 4.1.3
postcss: 8.4.24
rollup: 3.21.0
sass: 1.55.0
stylus: 0.59.0
optionalDependencies:
fsevents: 2.3.2
dev: false
/vite@4.3.9(@types/node@18.16.9)(less@4.1.3)(sass@1.63.2)(stylus@0.59.0)(terser@5.17.7):
resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -26673,7 +26887,6 @@ packages:
terser: 5.17.7
optionalDependencies:
fsevents: 2.3.2
dev: true
/vitest@0.32.0(less@4.1.3)(sass@1.55.0)(stylus@0.59.0):
resolution: {integrity: sha512-SW83o629gCqnV3BqBnTxhB10DAwzwEx3z+rqYZESehUB+eWsJxwcBQx7CKy0otuGMJTYh7qCVuUX23HkftGl/Q==}
@ -26748,6 +26961,16 @@ packages:
resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==}
dev: true
/vue@3.3.4:
resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
dependencies:
'@vue/compiler-dom': 3.3.4
'@vue/compiler-sfc': 3.3.4
'@vue/runtime-dom': 3.3.4
'@vue/server-renderer': 3.3.4(vue@3.3.4)
'@vue/shared': 3.3.4
dev: true
/w3c-hr-time@1.0.2:
resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==}
deprecated: Use your platform's native performance.now() and performance.timeOrigin.
@ -27224,6 +27447,20 @@ packages:
engines: {node: '>=0.8.0'}
dev: true
/websocket@1.0.34:
resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==}
engines: {node: '>=4.0.0'}
dependencies:
bufferutil: 4.0.7
debug: 2.6.9
es5-ext: 0.10.62
typedarray-to-buffer: 3.1.5
utf-8-validate: 5.0.10
yaeti: 0.0.6
transitivePeerDependencies:
- supports-color
dev: true
/well-known-symbols@2.0.0:
resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==}
engines: {node: '>=6'}
@ -27543,6 +27780,11 @@ packages:
engines: {node: '>=10'}
dev: true
/yaeti@0.0.6:
resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==}
engines: {node: '>=0.10.32'}
dev: true
/yallist@2.1.2:
resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==}
dev: true
@ -27650,3 +27892,7 @@ packages:
dependencies:
tslib: 2.5.3
dev: true
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false

View File

@ -25,6 +25,8 @@
"@nx/detox": ["packages/detox"],
"@nx/devkit": ["packages/devkit"],
"@nx/devkit/*": ["packages/devkit/*"],
"@nx/docs": ["docs"],
"@nx/docs/*": ["docs/*"],
"@nx/e2e/utils": ["e2e/utils"],
"@nx/esbuild": ["packages/esbuild"],
"@nx/eslint-plugin": ["packages/eslint-plugin/src"],
@ -45,6 +47,7 @@
"@nx/next/*": ["packages/next/*"],
"@nx/node": ["packages/node"],
"@nx/node/*": ["packages/node/*"],
"@nx/nx-dev/data-access-ai": ["nx-dev/data-access-ai/src/index.ts"],
"@nx/nx-dev/data-access-documents": [
"nx-dev/data-access-documents/src/index.ts"
],
@ -58,6 +61,7 @@
"@nx/nx-dev/data-access-packages/node-only": [
"nx-dev/data-access-packages/src/node.index.ts"
],
"@nx/nx-dev/feature-ai": ["nx-dev/feature-ai/src/index.ts"],
"@nx/nx-dev/feature-analytics": ["nx-dev/feature-analytics/src/index.ts"],
"@nx/nx-dev/feature-doc-viewer": [
"nx-dev/feature-doc-viewer/src/index.ts"