Compare commits

...

9 Commits

Author SHA1 Message Date
Emanuel Ferreira 0b2d43b532 chore: remove console.log 2024-03-04 08:13:16 -03:00
Emanuel Ferreira 02feb54070 chore: string response example 2024-03-04 08:12:57 -03:00
Emanuel Ferreira 9bf778eb36 chore: remove files 2024-03-04 08:10:56 -03:00
Emanuel Ferreira 746408b992 chore: remove build files 2024-03-04 08:07:10 -03:00
Emanuel Ferreira ea64162b89 merge 2024-03-03 12:28:32 -03:00
Emanuel Ferreira 0094a2e420 wip 2024-03-03 12:27:30 -03:00
Emanuel Ferreira ef1e8b4121 fix: reinstancing query bundle 2024-03-01 07:56:38 -03:00
Emanuel Ferreira a20704bbf8 wip 2024-02-29 11:27:11 -03:00
Emanuel Ferreira 247a3d0b5f wip 2024-02-28 08:38:14 -03:00
18 changed files with 1439 additions and 19 deletions
+81
View File
@@ -0,0 +1,81 @@
import knex from "knex";
import {
NLSQLQueryEngine,
OpenAI,
SQLDatabase,
serviceContextFromDefaults,
} from "llamaindex";
async function main() {
const llm = new OpenAI({
model: "gpt-4",
});
const engine = knex({
client: "sqlite3", // or 'better-sqlite3'
connection: {
filename: ":memory:",
},
});
const db = new SQLDatabase({
engine,
schema: undefined,
metadata: {},
ignoreTables: undefined,
includeTables: ["test_table_1"],
sampleRowsInTableInfo: 3,
indexesInTableInfo: true,
customTableInfo: undefined,
maxStringLength: 100,
});
const tableName = "test_table_1";
await engine.schema.createTable(tableName, async (table) => {
table.increments("id");
table.string("comment");
table.string("author");
await db.insertIntoTable(tableName, {
comment: "this is a test1",
author: "emanuel",
});
await db.insertIntoTable(tableName, {
comment: "this is a test2",
author: "alex",
});
await db.insertIntoTable(tableName, {
comment: "this is a test3",
author: "yi",
});
await db.insertIntoTable(tableName, {
comment: "this is a test4",
author: "alex",
});
const ctx = serviceContextFromDefaults({
llm,
});
const engine = new NLSQLQueryEngine({
sqlDatabase: db,
tables: ["test_table_1"],
verbose: true,
serviceContext: ctx,
synthesizeResponse: true,
});
const response = await engine.query({
query: "What's the comment from author yi and emanuel?",
});
console.log({ response });
process.exit(0);
});
}
main().then(() => [
// process.exit(0)
]);
+3 -1
View File
@@ -9,8 +9,10 @@
"chromadb": "^1.8.1",
"commander": "^11.1.0",
"dotenv": "^16.4.1",
"knex": "^3.1.0",
"llamaindex": "latest",
"mongodb": "^6.2.0"
"mongodb": "^6.2.0",
"sqlite3": "^5.1.7"
},
"devDependencies": {
"@types/node": "^18.19.10",
+46
View File
@@ -0,0 +1,46 @@
import knex from "knex";
import { SQLDatabase } from "llamaindex";
async function main() {
const engine = knex({
client: "sqlite3", // or 'better-sqlite3'
connection: {
filename: ":memory:",
},
});
const db = new SQLDatabase({
engine,
schema: undefined,
metadata: {},
ignoreTables: undefined,
includeTables: ["test_table"],
sampleRowsInTableInfo: 3,
indexesInTableInfo: true,
customTableInfo: undefined,
maxStringLength: 100,
});
const tableName = "test_table";
await engine.schema.createTable(tableName, () => {});
await db.insertIntoTable(tableName, {
name: "test1",
comment: "this is a test1",
});
await db.insertIntoTable(tableName, {
name: "test2",
comment: "this is a test2",
});
await db.insertIntoTable(tableName, {
name: "test3",
comment: "this is a test3",
});
await db.insertIntoTable(tableName, {
name: "test4",
comment: "this is a test4",
});
}
main();
+6 -5
View File
@@ -7,22 +7,23 @@
"@anthropic-ai/sdk": "^0.13.0",
"@aws-crypto/sha256-js": "^5.2.0",
"@datastax/astra-db-ts": "^0.1.4",
"@types/lodash": "^4.14.202",
"@types/node": "^18.19.14",
"@types/papaparse": "^5.3.14",
"@types/pg": "^8.11.0",
"@llamaindex/cloud": "0.0.4",
"@llamaindex/env": "workspace:*",
"@mistralai/mistralai": "^0.0.10",
"@notionhq/client": "^2.2.14",
"@pinecone-database/pinecone": "^2.0.1",
"@qdrant/js-client-rest": "^1.7.0",
"@types/lodash": "^4.14.202",
"@types/node": "^18.19.14",
"@types/papaparse": "^5.3.14",
"@types/pg": "^8.11.0",
"@xenova/transformers": "^2.15.0",
"assemblyai": "^4.2.2",
"chromadb": "~1.7.3",
"cohere-ai": "^7.7.5",
"file-type": "^18.7.0",
"js-tiktoken": "^1.0.10",
"knex": "^3.1.0",
"lodash": "^4.17.21",
"mammoth": "^1.6.0",
"md-utils-ts": "^2.0.0",
@@ -94,7 +95,7 @@
"build": "rm -rf ./dist && pnpm run build:esm && pnpm run build:cjs && pnpm run build:type",
"build:esm": "swc src -d dist --strip-leading-paths --config-file .swcrc",
"build:cjs": "swc src -d dist/cjs --strip-leading-paths --config-file .cjs.swcrc",
"build:type": "pnpm run -w type-check",
"build:type": "rm -f .tsbuildinfo && tsc -b --diagnostics",
"copy": "cp -r ../../README.md ../../LICENSE .",
"postbuild": "pnpm run copy && node -e \"require('fs').writeFileSync('./dist/cjs/package.json', JSON.stringify({ type: 'commonjs' }))\"",
"circular-check": "madge -c ./src/index.ts",
+1
View File
@@ -1,3 +1,4 @@
export * from "./RetrieverQueryEngine.js";
export * from "./RouterQueryEngine.js";
export * from "./SubQuestionQueryEngine.js";
export * from "./sql/index.js";
@@ -0,0 +1,59 @@
import {
NLSQLRetriever,
type SQLDatabase,
type ServiceContext,
} from "../../../index.js";
import type { TextToSQLPrompt } from "../../../retriever/sql/prompts.js";
import { BaseSQLTableQueryEngine } from "./types.js";
type NLSQLQueryEngineParams = {
sqlDatabase: SQLDatabase;
textToSQLPrompt?: TextToSQLPrompt;
contextQueryKwargs?: any | null;
synthesizeResponse?: boolean;
responseSynthesisPrompt?: any | null;
tables?: any[] | string[] | undefined;
serviceContext?: ServiceContext | undefined;
contextStrPrefix?: string | undefined;
sqlOnly?: boolean;
verbose?: boolean;
};
export class NLSQLQueryEngine extends BaseSQLTableQueryEngine {
_sqlRetriever: NLSQLRetriever;
constructor({
sqlDatabase,
textToSQLPrompt,
contextQueryKwargs = null,
synthesizeResponse = true,
responseSynthesisPrompt = null,
tables,
serviceContext,
contextStrPrefix,
sqlOnly = false,
verbose = false,
}: NLSQLQueryEngineParams) {
super({
synthesizeResponse,
responseSynthesisPrompt,
serviceContext,
verbose,
});
this._sqlRetriever = new NLSQLRetriever({
sqlDatabase,
textToSQLPrompt,
contextQueryKwargs,
tables,
contextStrPrefix,
serviceContext,
sqlOnly,
verbose,
});
}
get sqlRetriever(): NLSQLRetriever {
return this._sqlRetriever;
}
}
@@ -0,0 +1 @@
export * from "./NLSQLQueryEngine.js";
@@ -0,0 +1,17 @@
export const defaultResponseSynthesisPrompt = ({
query,
context,
sqlQuery,
}: {
query?: string;
context?: string;
sqlQuery: string;
}) => `
Given an input question, synthesize a response from the query results.
Query: ${query}
SQL: ${sqlQuery}
SQL Response: ${context}
Response:
`;
export type ResponseSynthesisPrompt = typeof defaultResponseSynthesisPrompt;
@@ -0,0 +1,117 @@
import { Response } from "../../../Response.js";
import {
serviceContextFromDefaults,
type ServiceContext,
} from "../../../ServiceContext.js";
import {
CompactAndRefine,
MetadataMode,
ResponseSynthesizer,
} from "../../../index.js";
import type { SQLRetriever } from "../../../retriever/sql/types.js";
import type {
BaseQueryEngine,
QueryEngineParamsNonStreaming,
QueryEngineParamsStreaming,
} from "../../../types.js";
import {
defaultResponseSynthesisPrompt,
type ResponseSynthesisPrompt,
} from "./prompts.js";
export abstract class BaseSQLTableQueryEngine implements BaseQueryEngine {
synthesizeResponse: boolean;
responseSynthesisPrompt: ResponseSynthesisPrompt;
serviceContext: ServiceContext;
verbose: boolean;
constructor(init: {
synthesizeResponse?: boolean;
responseSynthesisPrompt?: ResponseSynthesisPrompt;
serviceContext?: ServiceContext;
verbose?: boolean;
}) {
this.synthesizeResponse = init.synthesizeResponse ?? true;
this.responseSynthesisPrompt =
init.responseSynthesisPrompt || defaultResponseSynthesisPrompt;
this.serviceContext = init.serviceContext || serviceContextFromDefaults({});
this.verbose = init.verbose || false;
}
getPrompts(): {
responseSynthesisPrompt: ResponseSynthesisPrompt;
} {
return { responseSynthesisPrompt: this.responseSynthesisPrompt };
}
updatePrompts(prompts: {
responseSynthesisPrompt: ResponseSynthesisPrompt;
}): void {
if ("responseSynthesisPrompt" in prompts) {
this.responseSynthesisPrompt = prompts.responseSynthesisPrompt;
}
}
getPromptModules(): {
sqlRetriever: SQLRetriever;
} {
return { sqlRetriever: this.sqlRetriever };
}
abstract get sqlRetriever(): SQLRetriever;
query(params: QueryEngineParamsStreaming): Promise<AsyncIterable<Response>>;
query(params: QueryEngineParamsNonStreaming): Promise<Response>;
async query(
params: QueryEngineParamsStreaming | QueryEngineParamsNonStreaming,
): Promise<Response | AsyncIterable<Response>> {
const { query, stream } = params;
if (stream) {
throw new Error("Streaming is not supported");
}
const [retrievedNodes, metadata] =
await this.sqlRetriever.retrieveWithMetadata({
queryStr: query,
});
const sqlQueryStr = metadata.sqlQuery;
console.log(`> SQL query: ${sqlQueryStr}`); // TODO: Remove
console.log(`> Sythesize Response ${this.synthesizeResponse}`);
if (this.synthesizeResponse) {
const responseBuilder = new CompactAndRefine(
this.serviceContext,
({ query, context }) =>
this.responseSynthesisPrompt({
query,
context,
sqlQuery: sqlQueryStr,
}),
);
const responseSynthesizer = new ResponseSynthesizer({
serviceContext: this.serviceContext,
responseBuilder,
});
const response = await responseSynthesizer.synthesize({
query,
nodesWithScore: retrievedNodes,
});
response.metadata.sqlQuery = sqlQueryStr;
return response;
}
const responseStr = retrievedNodes
.map((node) => node.node.getContent(MetadataMode.ALL))
.join("\n");
return new Response(responseStr, []);
}
}
+2
View File
@@ -26,7 +26,9 @@ export * from "./objects/index.js";
export * from "./postprocessors/index.js";
export * from "./prompts/index.js";
export * from "./readers/index.js";
export * from "./retriever/index.js";
export * from "./selectors/index.js";
export * from "./storage/index.js";
export * from "./synthesizers/index.js";
export * from "./tools/index.js";
export * from "./utilities/index.js";
+1
View File
@@ -0,0 +1 @@
export * from "./sql/index.js";
@@ -0,0 +1,259 @@
import { serviceContextFromDefaults } from "../../ServiceContext.js";
import {
TextNode,
type BaseRetriever,
type CallbackManager,
type LLM,
type NodeWithScore,
type ObjectRetriever,
type SQLDatabase,
type ServiceContext,
} from "../../index.js";
import { QueryBundle } from "../../types.js";
import { defaultTextToSQLPrompt, type TextToSQLPrompt } from "./prompts.js";
import {
DefaultSQLParser,
SQLParserMode,
SQLRetriever,
type SQLTableSchema,
} from "./types.js";
export class NLSQLRetriever extends SQLRetriever implements BaseRetriever {
sqlDatabase: SQLDatabase;
sqlRetriever: SQLRetriever;
sqlParser: DefaultSQLParser;
textToSQLPrompt: TextToSQLPrompt;
contextQueryKwargs: Record<string, any> | undefined;
tables: any[] | string[] | undefined;
tableRetriever: ObjectRetriever | undefined;
contextStrPrefix: string | undefined;
sqlParserMode: SQLParserMode;
llm: LLM;
serviceContext: ServiceContext;
returnRaw: boolean;
handleSQLErrors: boolean;
sqlOnly: boolean;
callbackManager: CallbackManager | undefined;
verbose: boolean;
getTables: any;
constructor({
sqlDatabase,
textToSQLPrompt,
contextQueryKwargs,
tables,
tableRetriever,
contextStrPrefix,
sqlParserMode,
llm,
serviceContext,
returnRaw,
handleSQLErrors,
sqlOnly,
callbackManager,
verbose,
}: {
sqlDatabase: SQLDatabase;
textToSQLPrompt?: TextToSQLPrompt;
contextQueryKwargs?: Record<string, any>;
tables?: any[] | string[];
tableRetriever?: ObjectRetriever;
contextStrPrefix?: string;
sqlParserMode?: SQLParserMode;
llm?: LLM;
serviceContext?: ServiceContext;
returnRaw?: boolean;
handleSQLErrors?: boolean;
sqlOnly?: boolean;
callbackManager?: CallbackManager;
verbose?: boolean;
}) {
super(sqlDatabase, returnRaw, callbackManager);
this.sqlRetriever = new SQLRetriever(sqlDatabase, returnRaw);
this.sqlDatabase = sqlDatabase;
this.getTables = this.loadGetTablesFn(
sqlDatabase,
tables,
contextQueryKwargs,
tableRetriever,
);
this.contextStrPrefix = contextStrPrefix;
this.serviceContext = serviceContext ?? serviceContextFromDefaults();
this.textToSQLPrompt = textToSQLPrompt ?? defaultTextToSQLPrompt;
this.sqlParserMode = sqlParserMode ?? SQLParserMode.DEFAULT;
this.sqlParser = this.loadSQLParser(
this.sqlParserMode,
this.serviceContext,
);
this.handleSQLErrors = handleSQLErrors ?? true;
this.sqlOnly = sqlOnly ?? false;
this.verbose = verbose ?? false;
this.returnRaw = returnRaw ?? false;
this.llm = llm ?? this.serviceContext.llm;
}
_getPrompts() {
return {
textToSQLPrompt: this.textToSQLPrompt,
};
}
_updatePrompts(prompts: Record<string, any>) {
if ("textToSQLPrompt" in prompts) {
this.textToSQLPrompt = prompts.textToSQLPrompt;
}
}
_getPromptModules() {
return {};
}
getServiceContext(): ServiceContext {
return this.serviceContext;
}
loadSQLParser(sqlParserMode: SQLParserMode, serviceContext: ServiceContext) {
if (sqlParserMode === SQLParserMode.DEFAULT) {
return new DefaultSQLParser();
} else {
throw new Error(`Unknown SQL parser mode: ${sqlParserMode}`);
}
}
loadGetTablesFn(
sqlDatabase: SQLDatabase,
tables: any[] | string[] | undefined,
contextQueryKwargs: Record<string, any> | undefined,
tableRetriever: ObjectRetriever | undefined,
) {
contextQueryKwargs = contextQueryKwargs || {};
if (tableRetriever) {
return async (queryStr: string) =>
await tableRetriever.retrieve(queryStr);
} else {
let tableNames: SQLTableSchema[] | string[];
if (tables) {
tableNames = tables.map((t) => t);
} else {
tableNames = Array.from(sqlDatabase.usableTableNames);
}
const contextStrs: string[] = [];
const tableSchemas = tableNames.map((t, i) => {
if (typeof t === "string") {
return {
tableName: t,
...(contextQueryKwargs
? { contextStr: contextQueryKwargs[t] }
: {}),
};
}
return {
tableName: t.tableName,
...(contextQueryKwargs
? { contextStr: contextQueryKwargs[t.tableName] }
: {}),
};
});
return () => tableSchemas;
}
}
async retrieveWithMetadata(strOrQueryBundle: string | QueryBundle): Promise<
[
NodeWithScore[],
{
sqlQuery: string;
},
]
> {
const queryBundle =
typeof strOrQueryBundle === "string"
? { queryStr: strOrQueryBundle }
: strOrQueryBundle;
const tableDescStr = await this.getTableContext(queryBundle);
if (this.verbose) {
console.log(`> Table desc str: ${tableDescStr}`);
}
const response = await this.serviceContext?.llm?.complete({
prompt: this.textToSQLPrompt({
dialect: "sql",
schema: tableDescStr,
queryStr: queryBundle.queryStr,
}),
});
if (!response) {
throw new Error("No response from LLM");
}
const sqlQueryStr = this.sqlParser.parseResponseToSQL(
response?.text,
queryBundle,
);
if (this.verbose) {
console.log(`> Predicted SQL query: ${sqlQueryStr}`);
}
let retrievedNodes: NodeWithScore[];
let metadata: Record<string, unknown> = {};
if (this.sqlOnly) {
const sqlOnlyNode = new TextNode({ text: sqlQueryStr });
retrievedNodes = [{ node: sqlOnlyNode }];
metadata = {};
} else {
try {
const retrieverResponse = await this.sqlRetriever.retrieveWithMetadata({
queryStr: sqlQueryStr,
});
retrievedNodes = retrieverResponse[0];
metadata = retrieverResponse[1];
} catch (e) {
if (this.handleSQLErrors) {
const errNode = new TextNode({ text: `Error: ${e}` });
retrievedNodes = [{ node: errNode }];
metadata = {};
} else {
throw e;
}
}
}
return [retrievedNodes, { sqlQuery: sqlQueryStr, ...metadata }];
}
async retrieve(query: string): Promise<NodeWithScore[]> {
const [retrievedNodes] = await this.retrieveWithMetadata(query);
return retrievedNodes;
}
async getTableContext(queryBundle: QueryBundle) {
const tableSchemaObjs = this.getTables(queryBundle.queryStr);
const contextStrs = [];
if (this.contextStrPrefix) {
contextStrs.push(this.contextStrPrefix);
}
for (const tableSchemaObj of tableSchemaObjs) {
let tableInfo = await this.sqlDatabase.getSingleTableInfo(
tableSchemaObj.tableName,
);
if (tableSchemaObj.contextStr) {
const tableOptContext = `The table description is: ${tableSchemaObj.contextStr}`;
tableInfo += tableOptContext;
}
contextStrs.push(tableInfo);
}
return contextStrs.join("\n\n");
}
}
+1
View File
@@ -0,0 +1 @@
export * from "./NLSQLRetriever.js";
@@ -0,0 +1,31 @@
export const defaultTextToSQLPrompt = ({
dialect,
schema,
queryStr,
}: {
dialect: string;
schema: string;
queryStr: string;
}) => `Given an input question, first create a syntactically correct ${dialect}
query to run, then look at the results of the query and return the answer.
You can order the results by a relevant column to return the most
interesting examples in the database.
Never query for all the columns from a specific table, only ask for a
few relevant columns given the question.
Pay attention to use only the column names that you can see in the schema
description.
Be careful to not query for columns that do not exist.
Pay attention to which column is in which table.
Also, qualify column names with the table name when needed.
You are required to use the following format, each taking one line:
Question: Question here
SQLQuery: SQL Query to run
SQLResult: Result of the SQLQuery
Answer: Final answer here
Only use tables listed below.
${schema}
Question: ${queryStr}
SQLQuery:
`;
export type TextToSQLPrompt = typeof defaultTextToSQLPrompt;
+105
View File
@@ -0,0 +1,105 @@
import type { BaseRetriever } from "../../Retriever.js";
import {
TextNode,
type CallbackManager,
type Event,
type NodeWithScore,
type SQLDatabase,
type ServiceContext,
} from "../../index.js";
import type { QueryBundle } from "../../types.js";
export interface SQLTableSchema {
tableName: string;
contextStr: string;
}
export enum SQLParserMode {
DEFAULT = "default",
PGVECTOR = "pgvector",
}
// export type SQLParserMode = "default" | "pgvector";
export interface BaseSQLParser {
parseResponseToSQL(response: string, queryBundle: QueryBundle): string;
}
export class DefaultSQLParser implements BaseSQLParser {
parseResponseToSQL(response: string, queryBundle: QueryBundle): string {
const sqlQueryStart = response.indexOf("SQLQuery:");
if (sqlQueryStart !== -1) {
response = response.slice(sqlQueryStart);
if (response.startsWith("SQLQuery:")) {
response = response.slice("SQLQuery:".length);
}
}
const sqlResultStart = response.indexOf("SQLResult:");
if (sqlResultStart !== -1) {
response = response.slice(0, sqlResultStart);
}
return response.trim().replace("```", "").trim();
}
}
export class SQLRetriever implements BaseRetriever {
sqlDatabase: SQLDatabase;
returnRaw: boolean;
constructor(
sqlDatabase: SQLDatabase,
returnRaw: boolean = true,
callbackManager: CallbackManager | null = null,
kwargs: any = {},
) {
this.sqlDatabase = sqlDatabase;
this.returnRaw = returnRaw;
}
getServiceContext(): ServiceContext {
throw new Error("Method not implemented.");
}
_formatNodeResults(results: any[][], colKeys: string[]): NodeWithScore[] {
const nodes: NodeWithScore[] = [];
for (const result of results) {
const metadata = Object.fromEntries(
colKeys.map((key, i) => [key, result[i]]),
);
const textNode = new TextNode({
text: "",
metadata,
});
nodes.push({ node: textNode });
}
return nodes;
}
async retrieveWithMetadata(
strOrQueryBundle: QueryBundle,
): Promise<[NodeWithScore[], any]> {
const [rawResponseStr, metadata] = await this.sqlDatabase.runSQL(
strOrQueryBundle.queryStr,
);
if (this.returnRaw) {
return [[{ node: new TextNode({ text: rawResponseStr }) }], metadata];
} else {
const results = metadata.result;
const colKeys = metadata.colKeys;
return [this._formatNodeResults(results, colKeys), metadata];
}
}
async retrieve(
query: string,
parentEvent: Event | undefined,
preFilters: unknown,
): Promise<NodeWithScore[]> {
const retrievedNodes = await this.retrieveWithMetadata({
queryStr: query,
});
return retrievedNodes;
}
}
+126
View File
@@ -0,0 +1,126 @@
import knex from "knex";
type SQLDatabaseParams = {
engine: knex.Knex;
schema: string | undefined;
metadata: any;
ignoreTables: string[] | undefined;
includeTables: string[] | undefined;
sampleRowsInTableInfo: number;
indexesInTableInfo: boolean;
customTableInfo: Record<string, any> | undefined;
maxStringLength: number;
};
export class SQLDatabase {
engine: knex.Knex;
schema: string | undefined;
metadata: any;
inspector: knex.Knex;
allTables: Set<string>;
includeTables: Set<string>;
ignoreTables: Set<string>;
usableTables: Set<string>;
sampleRowsInTableInfo: number;
indexesInTableInfo: boolean;
customTableInfo: Record<string, any> | undefined;
maxStringLength: number;
constructor({
engine,
schema,
metadata,
ignoreTables,
includeTables,
sampleRowsInTableInfo,
indexesInTableInfo,
customTableInfo,
maxStringLength,
}: SQLDatabaseParams) {
this.engine = engine;
this.schema = schema;
this.metadata = metadata;
this.inspector = engine;
this.allTables = new Set(["test_table_1"]);
this.includeTables = new Set(includeTables || []);
this.ignoreTables = new Set(ignoreTables || []);
this.usableTables = new Set();
this.sampleRowsInTableInfo = sampleRowsInTableInfo;
this.indexesInTableInfo = indexesInTableInfo;
this.customTableInfo = customTableInfo;
this.maxStringLength = maxStringLength;
}
get usableTableNames(): string[] {
if (this.includeTables.size > 0) {
return Array.from(this.includeTables);
}
return Array.from(this.allTables);
}
async getTableColumns(tableName: string) {
return await this.inspector(tableName).columnInfo();
}
async getSingleTableInfo(tableName: string) {
const columns = await this.getTableColumns(tableName);
const columnStr = Object.keys(columns)
.map((column) => {
return `${column} (${columns[column].type})`;
})
.join(", ");
return `Table '${tableName}' has columns: ${columnStr}.`;
}
insertIntoTable(tableName: string, data: Record<string, any>): Promise<void> {
return this.engine(tableName).insert(data);
}
truncateWord(content: any, length: number, suffix = "..."): string {
if (typeof content !== "string" || length <= 0) {
return content;
}
if (content.length <= length) {
return content;
}
return (
content
.slice(0, length - suffix.length - 1)
.split(" ")
.slice(0, -1)
.join(" ") + suffix
);
}
async runSQL(
command: string,
): Promise<[string, { result: any[]; colKeys: string[] }]> {
return this.engine.raw(command).then((result: any) => {
if (result.length > 0) {
const truncatedResults = result.map((row: any) =>
this.truncateWord(row, this.maxStringLength),
);
return [
JSON.stringify(truncatedResults),
{ result: truncatedResults, colKeys: Object.keys(result[0]) },
];
}
return ["", { result: [], colKeys: [] }];
});
}
async getTableInfo(tableName: string): Promise<string> {
const columns = await this.getTableColumns(tableName);
const columnStr = Object.keys(columns)
.map((column: any) => {
const comment = column.COMMENT ? `'${column.COMMENT}'` : "";
return `${column.COLUMN_NAME} (${column.DATA_TYPE}): ${comment}`;
})
.join(", ");
return `Table '${tableName}' has columns: ${columnStr}.`;
}
}
+1
View File
@@ -0,0 +1 @@
export * from "./SQLWrapper.js";
+582 -13
View File
@@ -124,12 +124,18 @@ importers:
dotenv:
specifier: ^16.4.1
version: 16.4.1
knex:
specifier: ^3.1.0
version: 3.1.0(sqlite3@5.1.7)
llamaindex:
specifier: latest
version: link:../packages/core
mongodb:
specifier: ^6.2.0
version: 6.3.0
sqlite3:
specifier: ^5.1.7
version: 5.1.7
devDependencies:
'@types/node':
specifier: ^18.19.10
@@ -216,6 +222,9 @@ importers:
js-tiktoken:
specifier: ^1.0.10
version: 1.0.10
knex:
specifier: ^3.1.0
version: 3.1.0(pg@8.11.3)
lodash:
specifier: ^4.17.21
version: 4.17.21
@@ -3158,6 +3167,12 @@ packages:
engines: {node: '>=14'}
dev: false
/@gar/promisify@1.1.3:
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
requiresBuild: true
dev: false
optional: true
/@hapi/hoek@9.3.0:
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
@@ -3478,6 +3493,26 @@ packages:
- encoding
dev: false
/@npmcli/fs@1.1.1:
resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==}
requiresBuild: true
dependencies:
'@gar/promisify': 1.1.3
semver: 7.6.0
dev: false
optional: true
/@npmcli/move-file@1.1.2:
resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==}
engines: {node: '>=10'}
deprecated: This functionality has been moved to @npmcli/fs
requiresBuild: true
dependencies:
mkdirp: 1.0.4
rimraf: 3.0.2
dev: false
optional: true
/@pinecone-database/pinecone@1.1.3:
resolution: {integrity: sha512-bGldvvoAr4agVZ2ql4RZesXIDjMLjnuqNmKYfMQoVO3UFRYeuO9z+1WJodvanGIPY2iGh1w9yz0jDAkBiT53qw==}
engines: {node: '>=14.0.0'}
@@ -4085,6 +4120,13 @@ packages:
/@tokenizer/token@0.3.0:
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
/@tootallnate/once@1.1.2:
resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==}
engines: {node: '>= 6'}
requiresBuild: true
dev: false
optional: true
/@trysound/sax@0.2.0:
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
@@ -4818,6 +4860,12 @@ packages:
/@xtuc/long@4.2.2:
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
/abbrev@1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
requiresBuild: true
dev: false
optional: true
/abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
@@ -4859,6 +4907,17 @@ packages:
resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
engines: {node: '>= 10.0.0'}
/agent-base@6.0.2:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
requiresBuild: true
dependencies:
debug: 4.3.4
transitivePeerDependencies:
- supports-color
dev: false
optional: true
/agentkeepalive@4.5.0:
resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==}
engines: {node: '>= 8.0.0'}
@@ -5018,10 +5077,26 @@ packages:
resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==}
dev: true
/aproba@2.0.0:
resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
requiresBuild: true
dev: false
optional: true
/arch@2.2.0:
resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
dev: true
/are-we-there-yet@3.0.1:
resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
requiresBuild: true
dependencies:
delegates: 1.0.0
readable-stream: 3.6.2
dev: false
optional: true
/arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
dev: true
@@ -5364,6 +5439,12 @@ packages:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
/bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
dependencies:
file-uri-to-path: 1.0.0
dev: false
/bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
dependencies:
@@ -5514,6 +5595,34 @@ packages:
engines: {node: '>=8'}
dev: true
/cacache@15.3.0:
resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==}
engines: {node: '>= 10'}
requiresBuild: true
dependencies:
'@npmcli/fs': 1.1.1
'@npmcli/move-file': 1.1.2
chownr: 2.0.0
fs-minipass: 2.1.0
glob: 7.2.3
infer-owner: 1.0.4
lru-cache: 6.0.0
minipass: 3.3.6
minipass-collect: 1.0.2
minipass-flush: 1.0.5
minipass-pipeline: 1.2.4
mkdirp: 1.0.4
p-map: 4.0.0
promise-inflight: 1.0.1
rimraf: 3.0.2
ssri: 8.0.1
tar: 6.1.15
unique-filename: 1.1.1
transitivePeerDependencies:
- bluebird
dev: false
optional: true
/cacheable-lookup@2.0.1:
resolution: {integrity: sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==}
engines: {node: '>=10'}
@@ -5716,7 +5825,6 @@ packages:
/chownr@2.0.0:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
dev: true
/chromadb@1.7.3(cohere-ai@7.7.5)(openai@4.26.1):
resolution: {integrity: sha512-3GgvQjpqgk5C89x5EuTDaXKbfrdqYDJ5UVyLQ3ZmwxnpetNc+HhRDGjkvXa5KSvpQ3lmKoyDoqnN4tZepfFkbw==}
@@ -5908,6 +6016,13 @@ packages:
simple-swizzle: 0.2.2
dev: false
/color-support@1.1.3:
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
hasBin: true
requiresBuild: true
dev: false
optional: true
/color@3.2.1:
resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
dependencies:
@@ -5926,6 +6041,10 @@ packages:
/colord@2.9.3:
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
/colorette@2.0.19:
resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
dev: false
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -6067,6 +6186,12 @@ packages:
/consola@2.15.3:
resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
/console-control-strings@1.1.0:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
requiresBuild: true
dev: false
optional: true
/content-disposition@0.5.2:
resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==}
engines: {node: '>= 0.6'}
@@ -6560,6 +6685,12 @@ packages:
engines: {node: '>=0.4.0'}
dev: false
/delegates@1.0.0:
resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
requiresBuild: true
dev: false
optional: true
/depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
engines: {node: '>= 0.6'}
@@ -6996,7 +7127,12 @@ packages:
/env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
dev: true
/err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
requiresBuild: true
dev: false
optional: true
/error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
@@ -7179,11 +7315,11 @@ packages:
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
dev: true
/escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
dev: true
/escape-goat@4.0.0:
resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==}
@@ -7517,6 +7653,11 @@ packages:
transitivePeerDependencies:
- supports-color
/esm@3.2.25:
resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==}
engines: {node: '>=6'}
dev: false
/espree@9.6.1:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -7854,6 +7995,10 @@ packages:
token-types: 5.0.1
dev: false
/file-uri-to-path@1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
dev: false
/filename-reserved-regex@3.0.0:
resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -8135,7 +8280,6 @@ packages:
engines: {node: '>= 8'}
dependencies:
minipass: 3.3.6
dev: true
/fs-monkey@1.0.5:
resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==}
@@ -8193,6 +8337,22 @@ packages:
/functions-have-names@1.2.3:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
/gauge@4.0.4:
resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
requiresBuild: true
dependencies:
aproba: 2.0.0
color-support: 1.1.3
console-control-strings: 1.1.0
has-unicode: 2.0.1
signal-exit: 3.0.7
string-width: 4.2.3
strip-ansi: 6.0.1
wide-align: 1.1.5
dev: false
optional: true
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -8238,6 +8398,11 @@ packages:
/get-own-enumerable-property-symbols@3.0.2:
resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
/get-package-type@0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'}
dev: false
/get-stream@3.0.0:
resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
engines: {node: '>=4'}
@@ -8272,6 +8437,10 @@ packages:
resolve-pkg-maps: 1.0.0
dev: false
/getopts@2.3.0:
resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==}
dev: false
/github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
dev: false
@@ -8536,6 +8705,12 @@ packages:
dependencies:
has-symbols: 1.0.3
/has-unicode@2.0.1:
resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
requiresBuild: true
dev: false
optional: true
/has-yarn@3.0.0:
resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -8789,6 +8964,19 @@ packages:
/http-parser-js@0.5.8:
resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
/http-proxy-agent@4.0.1:
resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
engines: {node: '>= 6'}
requiresBuild: true
dependencies:
'@tootallnate/once': 1.1.2
agent-base: 6.0.2
debug: 4.3.4
transitivePeerDependencies:
- supports-color
dev: false
optional: true
/http-proxy-middleware@2.0.6(@types/express@4.17.21):
resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==}
engines: {node: '>=12.0.0'}
@@ -8832,6 +9020,18 @@ packages:
quick-lru: 5.1.1
resolve-alpn: 1.2.1
/https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
requiresBuild: true
dependencies:
agent-base: 6.0.2
debug: 4.3.4
transitivePeerDependencies:
- supports-color
dev: false
optional: true
/human-id@1.0.2:
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
dev: true
@@ -8926,6 +9126,12 @@ packages:
resolution: {integrity: sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==}
dev: true
/infer-owner@1.0.4:
resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
requiresBuild: true
dev: false
optional: true
/infima@0.2.0-alpha.43:
resolution: {integrity: sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==}
engines: {node: '>=12'}
@@ -8977,11 +9183,26 @@ packages:
resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==}
engines: {node: '>= 0.10'}
/interpret@2.2.0:
resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==}
engines: {node: '>= 0.10'}
dev: false
/invariant@2.2.4:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
dependencies:
loose-envify: 1.4.0
/ip-address@9.0.5:
resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
engines: {node: '>= 12'}
requiresBuild: true
dependencies:
jsbn: 1.1.0
sprintf-js: 1.1.3
dev: false
optional: true
/ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
@@ -9135,6 +9356,12 @@ packages:
engines: {node: '>=8'}
dev: true
/is-lambda@1.0.1:
resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
requiresBuild: true
dev: false
optional: true
/is-map@2.0.2:
resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
dev: false
@@ -9435,6 +9662,12 @@ packages:
dependencies:
argparse: 2.0.1
/jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
requiresBuild: true
dev: false
optional: true
/jsesc@0.5.0:
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
hasBin: true
@@ -9542,6 +9775,100 @@ packages:
engines: {node: '>=6'}
dev: true
/knex@3.1.0(pg@8.11.3):
resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==}
engines: {node: '>=16'}
hasBin: true
peerDependencies:
better-sqlite3: '*'
mysql: '*'
mysql2: '*'
pg: '*'
pg-native: '*'
sqlite3: '*'
tedious: '*'
peerDependenciesMeta:
better-sqlite3:
optional: true
mysql:
optional: true
mysql2:
optional: true
pg:
optional: true
pg-native:
optional: true
sqlite3:
optional: true
tedious:
optional: true
dependencies:
colorette: 2.0.19
commander: 10.0.1
debug: 4.3.4
escalade: 3.1.2
esm: 3.2.25
get-package-type: 0.1.0
getopts: 2.3.0
interpret: 2.2.0
lodash: 4.17.21
pg: 8.11.3
pg-connection-string: 2.6.2
rechoir: 0.8.0
resolve-from: 5.0.0
tarn: 3.0.2
tildify: 2.0.0
transitivePeerDependencies:
- supports-color
dev: false
/knex@3.1.0(sqlite3@5.1.7):
resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==}
engines: {node: '>=16'}
hasBin: true
peerDependencies:
better-sqlite3: '*'
mysql: '*'
mysql2: '*'
pg: '*'
pg-native: '*'
sqlite3: '*'
tedious: '*'
peerDependenciesMeta:
better-sqlite3:
optional: true
mysql:
optional: true
mysql2:
optional: true
pg:
optional: true
pg-native:
optional: true
sqlite3:
optional: true
tedious:
optional: true
dependencies:
colorette: 2.0.19
commander: 10.0.1
debug: 4.3.4
escalade: 3.1.2
esm: 3.2.25
get-package-type: 0.1.0
getopts: 2.3.0
interpret: 2.2.0
lodash: 4.17.21
pg-connection-string: 2.6.2
rechoir: 0.8.0
resolve-from: 5.0.0
sqlite3: 5.1.7
tarn: 3.0.2
tildify: 2.0.0
transitivePeerDependencies:
- supports-color
dev: false
/kuler@2.0.0:
resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
dev: false
@@ -9859,6 +10186,33 @@ packages:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
dev: true
/make-fetch-happen@9.1.0:
resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==}
engines: {node: '>= 10'}
requiresBuild: true
dependencies:
agentkeepalive: 4.5.0
cacache: 15.3.0
http-cache-semantics: 4.1.1
http-proxy-agent: 4.0.1
https-proxy-agent: 5.0.1
is-lambda: 1.0.1
lru-cache: 6.0.0
minipass: 3.3.6
minipass-collect: 1.0.2
minipass-fetch: 1.4.1
minipass-flush: 1.0.5
minipass-pipeline: 1.2.4
negotiator: 0.6.3
promise-retry: 2.0.1
socks-proxy-agent: 6.2.1
ssri: 8.0.1
transitivePeerDependencies:
- bluebird
- supports-color
dev: false
optional: true
/mammoth@1.6.0:
resolution: {integrity: sha512-jOwbj6BwJzxCf6jr2l1zmSemniIkLnchvELXnDJCANlJawhzyIKObIq48B8kWEPLgUUh57k7FtEO3DHFQMnjMg==}
engines: {node: '>=12.0.0'}
@@ -10604,12 +10958,60 @@ packages:
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
/minipass-collect@1.0.2:
resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
engines: {node: '>= 8'}
requiresBuild: true
dependencies:
minipass: 3.3.6
dev: false
optional: true
/minipass-fetch@1.4.1:
resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==}
engines: {node: '>=8'}
requiresBuild: true
dependencies:
minipass: 3.3.6
minipass-sized: 1.0.3
minizlib: 2.1.2
optionalDependencies:
encoding: 0.1.13
dev: false
optional: true
/minipass-flush@1.0.5:
resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
engines: {node: '>= 8'}
requiresBuild: true
dependencies:
minipass: 3.3.6
dev: false
optional: true
/minipass-pipeline@1.2.4:
resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
engines: {node: '>=8'}
requiresBuild: true
dependencies:
minipass: 3.3.6
dev: false
optional: true
/minipass-sized@1.0.3:
resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
engines: {node: '>=8'}
requiresBuild: true
dependencies:
minipass: 3.3.6
dev: false
optional: true
/minipass@3.3.6:
resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
engines: {node: '>=8'}
dependencies:
yallist: 4.0.0
dev: true
/minipass@4.2.8:
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
@@ -10619,7 +11021,6 @@ packages:
/minipass@5.0.0:
resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
engines: {node: '>=8'}
dev: true
/minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
@@ -10627,7 +11028,6 @@ packages:
dependencies:
minipass: 3.3.6
yallist: 4.0.0
dev: true
/mixme@0.5.10:
resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==}
@@ -10642,7 +11042,6 @@ packages:
resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
engines: {node: '>=10'}
hasBin: true
dev: true
/mlly@1.6.0:
resolution: {integrity: sha512-YOvg9hfYQmnaB56Yb+KrJE2u0Yzz5zR+sLejEvF4fzwzV1Al6hkf2vyHTwqCRyv0hCi9rVCqVoXpyYevQIRwLQ==}
@@ -10843,6 +11242,11 @@ packages:
resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
dev: false
/node-addon-api@7.1.0:
resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==}
engines: {node: ^16 || ^18 || >= 20}
dev: false
/node-domexception@1.0.0:
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
engines: {node: '>=10.5.0'}
@@ -10881,6 +11285,28 @@ packages:
dev: true
optional: true
/node-gyp@8.4.1:
resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==}
engines: {node: '>= 10.12.0'}
hasBin: true
requiresBuild: true
dependencies:
env-paths: 2.2.1
glob: 7.2.3
graceful-fs: 4.2.11
make-fetch-happen: 9.1.0
nopt: 5.0.0
npmlog: 6.0.2
rimraf: 3.0.2
semver: 7.6.0
tar: 6.1.15
which: 2.0.2
transitivePeerDependencies:
- bluebird
- supports-color
dev: false
optional: true
/node-releases@2.0.14:
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
@@ -10898,6 +11324,16 @@ packages:
'@babel/parser': 7.23.6
dev: true
/nopt@5.0.0:
resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
engines: {node: '>=6'}
hasBin: true
requiresBuild: true
dependencies:
abbrev: 1.1.1
dev: false
optional: true
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
@@ -10957,6 +11393,18 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: false
/npmlog@6.0.2:
resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
requiresBuild: true
dependencies:
are-we-there-yet: 3.0.1
console-control-strings: 1.1.0
gauge: 4.0.4
set-blocking: 2.0.0
dev: false
optional: true
/nprogress@0.2.0:
resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==}
dev: true
@@ -12280,6 +12728,27 @@ packages:
dev: false
optional: true
/promise-inflight@1.0.1:
resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
requiresBuild: true
peerDependencies:
bluebird: '*'
peerDependenciesMeta:
bluebird:
optional: true
dev: false
optional: true
/promise-retry@2.0.1:
resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
engines: {node: '>=10'}
requiresBuild: true
dependencies:
err-code: 2.0.3
retry: 0.12.0
dev: false
optional: true
/prompts@2.1.0:
resolution: {integrity: sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==}
engines: {node: '>= 6'}
@@ -12719,6 +13188,13 @@ packages:
dependencies:
resolve: 1.22.8
/rechoir@0.8.0:
resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
engines: {node: '>= 10.13.0'}
dependencies:
resolve: 1.22.8
dev: false
/recursive-readdir@2.2.3:
resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==}
engines: {node: '>=6.0.0'}
@@ -12973,7 +13449,6 @@ packages:
/resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
dev: true
/resolve-pathname@3.0.0:
resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==}
@@ -13039,7 +13514,6 @@ packages:
/retry@0.12.0:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
dev: true
/retry@0.13.1:
resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
@@ -13326,7 +13800,6 @@ packages:
/set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
dev: true
/set-function-length@1.1.1:
resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
@@ -13511,6 +13984,13 @@ packages:
is-fullwidth-code-point: 5.0.0
dev: true
/smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
requiresBuild: true
dev: false
optional: true
/smartwrap@2.0.2:
resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==}
engines: {node: '>=6'}
@@ -13536,6 +14016,29 @@ packages:
uuid: 8.3.2
websocket-driver: 0.7.4
/socks-proxy-agent@6.2.1:
resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==}
engines: {node: '>= 10'}
requiresBuild: true
dependencies:
agent-base: 6.0.2
debug: 4.3.4
socks: 2.8.1
transitivePeerDependencies:
- supports-color
dev: false
optional: true
/socks@2.8.1:
resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
requiresBuild: true
dependencies:
ip-address: 9.0.5
smart-buffer: 4.2.0
dev: false
optional: true
/sort-css-media-queries@2.1.0:
resolution: {integrity: sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==}
engines: {node: '>= 6.3.0'}
@@ -13646,11 +14149,44 @@ packages:
/sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
/sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
requiresBuild: true
dev: false
optional: true
/sqlite3@5.1.7:
resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==}
requiresBuild: true
peerDependenciesMeta:
node-gyp:
optional: true
dependencies:
bindings: 1.5.0
node-addon-api: 7.1.0
prebuild-install: 7.1.1
tar: 6.1.15
optionalDependencies:
node-gyp: 8.4.1
transitivePeerDependencies:
- bluebird
- supports-color
dev: false
/srcset@4.0.0:
resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==}
engines: {node: '>=12'}
dev: true
/ssri@8.0.1:
resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==}
engines: {node: '>= 8'}
requiresBuild: true
dependencies:
minipass: 3.3.6
dev: false
optional: 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'
@@ -14072,7 +14608,11 @@ packages:
minizlib: 2.1.2
mkdirp: 1.0.4
yallist: 4.0.0
dev: true
/tarn@3.0.2:
resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==}
engines: {node: '>=8.0.0'}
dev: false
/term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
@@ -14167,6 +14707,11 @@ packages:
/thunky@1.1.0:
resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
/tildify@2.0.0:
resolution: {integrity: sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==}
engines: {node: '>=8'}
dev: false
/tiny-invariant@1.3.1:
resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
@@ -14670,6 +15215,22 @@ packages:
resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==}
dev: true
/unique-filename@1.1.1:
resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==}
requiresBuild: true
dependencies:
unique-slug: 2.0.2
dev: false
optional: true
/unique-slug@2.0.2:
resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==}
requiresBuild: true
dependencies:
imurmurhash: 0.1.4
dev: false
optional: true
/unique-string@3.0.0:
resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==}
engines: {node: '>=12'}
@@ -14735,7 +15296,7 @@ packages:
browserslist: '>= 4.21.0'
dependencies:
browserslist: 4.22.3
escalade: 3.1.1
escalade: 3.1.2
picocolors: 1.0.0
/update-check@1.5.4:
@@ -15336,6 +15897,14 @@ packages:
stackback: 0.0.2
dev: true
/wide-align@1.1.5:
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
requiresBuild: true
dependencies:
string-width: 4.2.3
dev: false
optional: true
/widest-line@4.0.1:
resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
engines: {node: '>=12'}