feat(nx-dev): new page for ai docs (#18025)
This commit is contained in:
parent
e657de8583
commit
6ccbbbc98f
18
nx-dev/data-access-ai/.eslintrc.json
Normal file
18
nx-dev/data-access-ai/.eslintrc.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"extends": ["../../.eslintrc.json"],
|
||||
"ignorePatterns": ["!**/*"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.ts", "*.tsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
11
nx-dev/data-access-ai/README.md
Normal file
11
nx-dev/data-access-ai/README.md
Normal 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).
|
||||
11
nx-dev/data-access-ai/jest.config.ts
Normal file
11
nx-dev/data-access-ai/jest.config.ts
Normal 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',
|
||||
};
|
||||
5
nx-dev/data-access-ai/package.json
Normal file
5
nx-dev/data-access-ai/package.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"name": "@nx/nx-dev/data-access-ai",
|
||||
"version": "0.0.1",
|
||||
"type": "commonjs"
|
||||
}
|
||||
40
nx-dev/data-access-ai/project.json
Normal file
40
nx-dev/data-access-ai/project.json
Normal 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": []
|
||||
}
|
||||
2
nx-dev/data-access-ai/src/index.ts
Normal file
2
nx-dev/data-access-ai/src/index.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export * from './lib/data-access-ai';
|
||||
export * from './lib/utils';
|
||||
192
nx-dev/data-access-ai/src/lib/data-access-ai.ts
Normal file
192
nx-dev/data-access-ai/src/lib/data-access-ai.ts
Normal 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 {}
|
||||
50
nx-dev/data-access-ai/src/lib/utils.ts
Normal file
50
nx-dev/data-access-ai/src/lib/utils.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
24
nx-dev/data-access-ai/tsconfig.json
Normal file
24
nx-dev/data-access-ai/tsconfig.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
10
nx-dev/data-access-ai/tsconfig.lib.json
Normal file
10
nx-dev/data-access-ai/tsconfig.lib.json
Normal 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"]
|
||||
}
|
||||
14
nx-dev/data-access-ai/tsconfig.spec.json
Normal file
14
nx-dev/data-access-ai/tsconfig.spec.json
Normal 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"
|
||||
]
|
||||
}
|
||||
12
nx-dev/feature-ai/.babelrc
Normal file
12
nx-dev/feature-ai/.babelrc
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"presets": [
|
||||
[
|
||||
"@nx/react/babel",
|
||||
{
|
||||
"runtime": "automatic",
|
||||
"useBuiltIns": "usage"
|
||||
}
|
||||
]
|
||||
],
|
||||
"plugins": []
|
||||
}
|
||||
18
nx-dev/feature-ai/.eslintrc.json
Normal file
18
nx-dev/feature-ai/.eslintrc.json
Normal 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": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
7
nx-dev/feature-ai/README.md
Normal file
7
nx-dev/feature-ai/README.md
Normal 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).
|
||||
10
nx-dev/feature-ai/jest.config.ts
Normal file
10
nx-dev/feature-ai/jest.config.ts
Normal 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',
|
||||
};
|
||||
11
nx-dev/feature-ai/project.json
Normal file
11
nx-dev/feature-ai/project.json
Normal 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"]
|
||||
}
|
||||
3
nx-dev/feature-ai/src/index.ts
Normal file
3
nx-dev/feature-ai/src/index.ts
Normal 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';
|
||||
120
nx-dev/feature-ai/src/lib/feature-ai.tsx
Normal file
120
nx-dev/feature-ai/src/lib/feature-ai.tsx
Normal 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;
|
||||
23
nx-dev/feature-ai/tsconfig.json
Normal file
23
nx-dev/feature-ai/tsconfig.json
Normal 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"
|
||||
}
|
||||
]
|
||||
}
|
||||
20
nx-dev/feature-ai/tsconfig.lib.json
Normal file
20
nx-dev/feature-ai/tsconfig.lib.json
Normal 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"]
|
||||
}
|
||||
20
nx-dev/feature-ai/tsconfig.spec.json
Normal file
20
nx-dev/feature-ai/tsconfig.spec.json
Normal 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"
|
||||
]
|
||||
}
|
||||
@ -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}`);
|
||||
|
||||
@ -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'),
|
||||
};
|
||||
|
||||
32
nx-dev/nx-dev/pages/ai/index.tsx
Normal file
32
nx-dev/nx-dev/pages/ai/index.tsx
Normal 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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -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
424
pnpm-lock.yaml
generated
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user