>(): T {
- return getEntrypointPreferences()
-}
-
export function showHud(display: string): void {
return showHudWindow(display)
}
-export interface GeneratedCommand {
+export interface GeneratedEntrypoint {
name: string
+ actions: GeneratedEntrypointAction[]
icon?: ArrayBuffer
- fn: () => void
- actions?: GeneratedCommandAction[]
+ accessories?: GeneratedEntrypointAccessory[]
}
-export interface GeneratedCommandAction {
+export type GeneratedEntrypointAction = GeneratedEntrypointActionRun | GeneratedEntrypointActionView
+
+export interface GeneratedEntrypointActionRun {
ref?: string
label: string
- fn: () => void
+ run: () => void
}
-export type GeneratorProps = {
- add: (id: string, data: GeneratedCommand) => void,
+export interface GeneratedEntrypointActionView {
+ ref?: string
+ label: string
+ view: FC
+}
+
+export type GeneratedEntrypointAccessory = GeneratedEntrypointTextAccessory | GeneratedEntrypointIconAccessory;
+
+export interface GeneratedEntrypointTextAccessory {
+ text: string
+ icon?: string
+ tooltip?: string
+}
+
+export interface GeneratedEntrypointIconAccessory {
+ icon: string
+ tooltip?: string
+}
+
+export type GeneratorContext = {
+ add: (id: string, data: GeneratedEntrypoint) => void,
remove: (id: string) => void,
+ get: (id: string) => GeneratedEntrypoint | undefined
+ getAll: () => { [id: string]: GeneratedEntrypoint },
+ pluginPreferences: P,
+ entrypointPreferences: E,
+};
+
+export type CommandContext
= {
+ pluginPreferences: P,
+ entrypointPreferences: E,
};
export const Clipboard: Clipboard = {
- read: async function (): Promise<{ "text/plain"?: string | undefined; "image/png"?: Blob | undefined; }> {
- const data = await InternalApi.clipboard_read();
+ read: async function (): Promise<{ "text/plain"?: string | undefined; "image/png"?: ArrayBuffer | undefined; }> {
+ const data = await clipboard_read();
- const result: { "text/plain"?: string; "image/png"?: Blob; } = {};
+ const result: { "text/plain"?: string; "image/png"?: ArrayBuffer; } = {};
if (data.text_data) {
result["text/plain"] = data.text_data;
}
if (data.png_data) {
- result["image/png"] = data.png_data; // TODO arraybuffer? fix when migrating to deno's op2
+ result["image/png"] = data.png_data;
}
return result
},
readText: async function (): Promise {
- return await InternalApi.clipboard_read_text()
+ return await clipboard_read_text()
},
- write: async function (data: { "text/plain"?: string | undefined; "image/png"?: Blob | undefined; }): Promise {
+ write: async function (data: { "text/plain"?: string | undefined; "image/png"?: ArrayBuffer | undefined; }): Promise {
const text_data = data["text/plain"];
const png_data = data["image/png"];
- return await InternalApi.clipboard_write({
- text_data: text_data,
- png_data: png_data != undefined ? Array.from(new Uint8Array(png_data as any)) : undefined, // TODO arraybuffer? fix when migrating to deno's op2
- })
+
+ const write_data: { text_data?: string, png_data?: ArrayBuffer } = {};
+
+ if (text_data) {
+ write_data.text_data = text_data;
+ }
+
+ if (png_data) {
+ write_data.png_data = png_data;
+ }
+
+ return await clipboard_write(write_data)
},
writeText: async function (data: string): Promise {
- return await InternalApi.clipboard_write_text(data)
+ return await clipboard_write_text(data)
},
clear: async function (): Promise {
- await InternalApi.clipboard_clear()
+ await clipboard_clear()
}
}
export interface Clipboard {
- read(): Promise<{ ["text/plain"]?: string, ["image/png"]?: Blob }>;
+ read(): Promise<{ ["text/plain"]?: string, ["image/png"]?: ArrayBuffer }>;
readText(): Promise;
- write(data: { ["text/plain"]?: string, ["image/png"]?: Blob }): Promise;
+ write(data: { ["text/plain"]?: string, ["image/png"]?: ArrayBuffer }): Promise;
writeText(data: string): Promise;
clear(): Promise;
}
export const Environment: Environment = {
get gauntletVersion(): number {
- return InternalApi.environment_gauntlet_version()
+ return environment_gauntlet_version()
},
get isDevelopment(): boolean {
- return InternalApi.environment_is_development()
+ return environment_is_development()
},
get pluginDataDir(): string {
- return InternalApi.environment_plugin_data_dir()
+ return environment_plugin_data_dir()
},
get pluginCacheDir(): string {
- return InternalApi.environment_plugin_cache_dir()
+ return environment_plugin_cache_dir()
},
}
diff --git a/js/api/src/hooks.ts b/js/api/src/hooks.ts
index 535ec31..a68d87b 100644
--- a/js/api/src/hooks.ts
+++ b/js/api/src/hooks.ts
@@ -1,6 +1,6 @@
import { ReactNode, useRef, useId, useState, useCallback, useEffect, MutableRefObject, Dispatch, SetStateAction } from 'react';
// @ts-ignore TODO how to add declaration for this?
-import { useGauntletContext } from "gauntlet:renderer";
+import { useGauntletContext } from "ext:gauntlet/renderer.js";
export function useNavigation(): { popView: () => void, pushView: (component: ReactNode) => void } {
const { popView, pushView }: { popView: () => void, pushView: (component: ReactNode) => void } = useGauntletContext();
@@ -15,6 +15,18 @@ export function useNavigation(): { popView: () => void, pushView: (component: Re
}
}
+export function usePluginPreferences>(): T {
+ const { pluginPreferences }: { pluginPreferences: () => T } = useGauntletContext();
+
+ return pluginPreferences()
+}
+
+export function useEntrypointPreferences>(): T {
+ const { entrypointPreferences }: { entrypointPreferences: () => T } = useGauntletContext();
+
+ return entrypointPreferences()
+}
+
export type AsyncState = {
isLoading: boolean;
error?: unknown;
@@ -159,6 +171,8 @@ function usePromiseInternal(
abortable.current = undefined;
}
+ console.error("Error happened when executing promise: ", error)
+
onError?.(error);
}
return
@@ -290,7 +304,8 @@ function useWebStorage(
useEffect(() => {
if (value === undefined) {
- return storageObject.removeItem(key)
+ storageObject.removeItem(key)
+ return
}
storageObject.setItem(key, JSON.stringify(value))
}, [key, value, storageObject])
@@ -384,4 +399,4 @@ export function useFetch(
onWillExecute: options?.onWillExecute,
}
)
-}
\ No newline at end of file
+}
diff --git a/js/api_build/package.json b/js/api_build/package.json
index 813d333..6d732f8 100644
--- a/js/api_build/package.json
+++ b/js/api_build/package.json
@@ -4,12 +4,12 @@
"type": "module",
"scripts": {
"build": "npm run generate-json && npm run build-generator && npm run run-generator",
- "generate-json": "cd ../.. && cargo run --package component_model -- ./js/api_build/component_model.json",
+ "generate-json": "cd ../.. && cargo run --package gauntlet-component-model -- ./js/api_build/component_model.json",
"build-generator": "tsc",
"run-generator": "node dist/index.js"
},
"devDependencies": {
- "@types/node": "^18.17.1",
- "typescript": "^5.3.3"
+ "@types/node": "^22.10.2",
+ "typescript": "^5.7.2"
}
}
diff --git a/js/api_build/src/index.ts b/js/api_build/src/index.ts
index 615fd16..dae197c 100644
--- a/js/api_build/src/index.ts
+++ b/js/api_build/src/index.ts
@@ -270,7 +270,7 @@ function makeComponents(modelInput: Component[]): ts.SourceFile {
undefined,
ts.factory.createIdentifier(propName),
undefined,
- makeType(type)
+ makeType(type, "no")
)
})
)
@@ -285,7 +285,7 @@ function makeComponents(modelInput: Component[]): ts.SourceFile {
ts.factory.createIdentifier(name),
undefined,
ts.factory.createUnionTypeNode(
- sharedType.items.map(type => makeType(type))
+ sharedType.items.map(type => makeType(type, "no"))
)
)
@@ -541,8 +541,8 @@ function makePropertyTypes(component: StandardComponent, componentPropsInChildre
return ts.factory.createPropertySignature(
undefined,
ts.factory.createIdentifier(property.name),
- !property.optional ? undefined : ts.factory.createToken(ts.SyntaxKind.QuestionToken),
- makeType(property.type)
+ property.optional == "no" ? undefined : ts.factory.createToken(ts.SyntaxKind.QuestionToken),
+ makeType(property.type, property.optional)
)
});
@@ -633,37 +633,46 @@ function makeChildrenType(type: Children, additionalComponentRefs: ComponentRef[
}
-function makeType(type: PropertyType): ts.TypeNode {
+function makeType(type: PropertyType, optional: Property["optional"]): ts.TypeNode {
+ let result: ts.TypeNode
switch (type.type) {
case "boolean": {
- return ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword)
+ result = ts.factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword)
+ break;
}
case "number": {
- return ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword)
+ result = ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword)
+ break;
}
case "string": {
- return ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
+ result = ts.factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
+ break;
}
case "function": {
const params = type.arguments.map(arg => {
+ if (arg.optional != "no" && arg.optional != "yes") {
+ throw new Error("following optional type is not supported here: " + arg.optional)
+ }
+
return ts.factory.createParameterDeclaration(
undefined,
undefined,
ts.factory.createIdentifier(arg.name),
undefined,
- !arg.optional ? makeType(arg.type) : ts.factory.createUnionTypeNode([makeType(arg.type), ts.factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword)]),
+ arg.optional == "no" ? makeType(arg.type, "no") : ts.factory.createUnionTypeNode([makeType(arg.type, arg.optional), ts.factory.createLiteralTypeNode(ts.factory.createNull())]),
undefined
)
});
- return ts.factory.createFunctionTypeNode(
+ result = ts.factory.createFunctionTypeNode(
undefined,
params,
ts.factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword)
)
+ break;
}
case "component": {
- return ts.factory.createTypeReferenceNode(
+ result = ts.factory.createTypeReferenceNode(
ts.factory.createIdentifier("ElementComponent"),
[
ts.factory.createTypeQueryNode(
@@ -672,24 +681,33 @@ function makeType(type: PropertyType): ts.TypeNode {
)
]
)
+ break;
}
case "array": {
- return ts.factory.createArrayTypeNode(makeType(type.item))
+ result = ts.factory.createArrayTypeNode(makeType(type.item, "no"))
+ break;
}
case "shared_type_ref": {
- return ts.factory.createTypeReferenceNode(
+ result = ts.factory.createTypeReferenceNode(
ts.factory.createIdentifier(type.name),
undefined
)
+ break;
}
case "union": {
- return ts.factory.createUnionTypeNode(type.items.map(value => makeType(value)))
+ result = ts.factory.createUnionTypeNode(type.items.map(value => makeType(value, "no")))
+ break
}
default: {
throw new Error(`unsupported type ${JSON.stringify(type)}`)
}
}
+ if (optional == "yes_but_complicated") {
+ return ts.factory.createUnionTypeNode([result, ts.factory.createLiteralTypeNode(ts.factory.createNull())]);
+ } else {
+ return result
+ }
}
function isInProperty(propertyType: PropertyType) {
@@ -767,4 +785,4 @@ if (!existsSync(genDir)) {
mkdirSync(genDir);
}
-generate("./component_model.json", `${genDir}/components.tsx`)
\ No newline at end of file
+generate("./component_model.json", `${genDir}/components.tsx`)
diff --git a/js/bridge_build/.gitignore b/js/bridge_build/.gitignore
new file mode 100644
index 0000000..d77bc98
--- /dev/null
+++ b/js/bridge_build/.gitignore
@@ -0,0 +1,2 @@
+component_model.json
+dist
\ No newline at end of file
diff --git a/js/bridge_build/package.json b/js/bridge_build/package.json
new file mode 100644
index 0000000..dfbc31d
--- /dev/null
+++ b/js/bridge_build/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "@project-gauntlet/bridge-build",
+ "version": "0.1.0",
+ "type": "module",
+ "scripts": {
+ "build": "npm run build-generator && npm run run-generator",
+ "build-generator": "tsc",
+ "run-generator": "node dist/index.js"
+ },
+ "devDependencies": {
+ "@types/node": "^22.10.2",
+ "typescript": "^5.7.2"
+ }
+}
diff --git a/js/bridge_build/src/index.ts b/js/bridge_build/src/index.ts
new file mode 100644
index 0000000..111bd0d
--- /dev/null
+++ b/js/bridge_build/src/index.ts
@@ -0,0 +1,218 @@
+import ts, {
+ ExpressionStatement,
+ ImportDeclaration,
+ isExportDeclaration,
+ isExportSpecifier,
+ isIdentifier,
+ isNamedExports,
+ ScriptKind,
+ Statement
+} from "typescript";
+import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
+
+
+function generate(outFile: string, sourceFile: ts.SourceFile) {
+ const resultFile = ts.createSourceFile("unused", "", ts.ScriptTarget.Latest, false, ts.ScriptKind.JS);
+ const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
+
+ const result = printer.printNode(ts.EmitHint.Unspecified, sourceFile, resultFile);
+
+ writeFileSync(outFile, result)
+}
+
+function collectExports(inputFile: string): string[] {
+ const sourceFile = ts.createSourceFile(
+ "input.js",
+ readFileSync(inputFile).toString(),
+ ts.ScriptTarget.ESNext,
+ /*setParentNodes */ false,
+ ScriptKind.JS
+ );
+
+ const result: string[] = []
+
+ for (const statement of sourceFile.statements) {
+ if (isExportDeclaration(statement)) {
+ const exportClause = statement.exportClause;
+ if (exportClause) {
+ if (isNamedExports(exportClause)) {
+ for (const element of exportClause.elements) {
+ if (isExportSpecifier(element)) {
+ if (isIdentifier(element.name)) {
+ if (typeof element.name.escapedText === "string") {
+ if (element.name.escapedText.startsWith("___")) {
+ result.push(element.name.escapedText.slice(1)) // remove one _, typescript special case
+ } else {
+ result.push(element.name.escapedText)
+ }
+ } else {
+ throw new Error(`unexpected export clause element element name type: ${JSON.stringify(element)}`)
+ }
+ } else {
+ throw new Error(`unknown export clause element element name type: ${JSON.stringify(element)}`)
+ }
+ } else {
+ throw new Error(`unknown export clause element: ${JSON.stringify(element)}`)
+ }
+ }
+ } else {
+ throw new Error(`unknown export clause: ${JSON.stringify(exportClause)}`)
+ }
+ }
+ }
+ }
+
+ return result
+}
+
+
+function generateInternal(exportConfig: Record): ts.SourceFile {
+
+ function createImport(exports: string[], namespace:string, importString: string): ImportDeclaration {
+ return ts.factory.createImportDeclaration(
+ undefined,
+ ts.factory.createImportClause(
+ false,
+ undefined,
+ ts.factory.createNamedImports(exports.map(value => {
+ return ts.factory.createImportSpecifier(
+ false,
+ ts.factory.createIdentifier(value),
+ ts.factory.createIdentifier(`${namespace}_${value}`)
+ )
+ }))
+ ),
+ ts.factory.createStringLiteral(importString),
+ undefined
+ )
+ }
+
+ const initialDeclarations: Statement[] = Object.entries(exportConfig)
+ .map(([namespace, { importUrl, exports }]) => createImport(exports, namespace, importUrl));
+
+ function createAssignment(namespace: string, variableName: string): ExpressionStatement {
+ return ts.factory.createExpressionStatement(ts.factory.createBinaryExpression(
+ ts.factory.createPropertyAccessExpression(
+ ts.factory.createIdentifier("globalThis"),
+ ts.factory.createIdentifier(`${namespace}_${variableName}`)
+ ),
+ ts.factory.createToken(ts.SyntaxKind.EqualsToken),
+ ts.factory.createIdentifier(`${namespace}_${variableName}`)
+ ))
+ }
+
+ const assignments: Statement[] = Object.entries(exportConfig)
+ .flatMap(([namespace, { exports }]) => exports.map(value => createAssignment(namespace, value)));
+
+ return ts.factory.createSourceFile(
+ [
+ ...initialDeclarations,
+ ...assignments,
+ ],
+ ts.factory.createToken(ts.SyntaxKind.EndOfFileToken),
+ ts.NodeFlags.None
+ )
+}
+
+function generateExternal(namespace: string, exports: string[]): ts.SourceFile {
+
+ const assignments = exports.map(value => {
+
+ return ts.factory.createVariableStatement(
+ undefined,
+ ts.factory.createVariableDeclarationList(
+ [ts.factory.createVariableDeclaration(
+ ts.factory.createIdentifier(`${namespace}_${value}`),
+ undefined,
+ undefined,
+ ts.factory.createPropertyAccessExpression(
+ ts.factory.createIdentifier("globalThis"),
+ ts.factory.createIdentifier(`${namespace}_${value}`)
+ )
+ )],
+ ts.NodeFlags.Const
+ )
+ );
+ });
+
+ const exportDeclaration = ts.factory.createExportDeclaration(
+ undefined,
+ false,
+ ts.factory.createNamedExports(exports.map(value => {
+ return ts.factory.createExportSpecifier(
+ false,
+ ts.factory.createIdentifier(`${namespace}_${value}`),
+ ts.factory.createIdentifier(value)
+ )
+ })),
+ undefined,
+ undefined
+ );
+
+ return ts.factory.createSourceFile(
+ [...assignments, exportDeclaration],
+ ts.factory.createToken(ts.SyntaxKind.EndOfFileToken),
+ ts.NodeFlags.None
+ )
+}
+
+const outDir = `./dist`;
+
+if (!existsSync(outDir)) {
+ mkdirSync(outDir);
+}
+
+const componentExports = collectExports(`../api/dist/gen/components.js`);
+const helpersExports = collectExports(`../api/dist/helpers.js`);
+const hooksExports = collectExports(`../api/dist/hooks.js`);
+const coreExports = collectExports(`../core/dist/core.js`);
+
+// prod bundle exports are identical and hopefully it stays like this in future
+const reactExports = collectExports(`../react/dist/dev/react.development.js`);
+const reactJsxRuntimeExports = collectExports(`../react/dist/dev/react-jsx-runtime.development.js`);
+
+const internalAllExports = collectExports(`../core/dist/internal-all.js`);
+const internalLinuxExports = collectExports(`../core/dist/internal-linux.js`);
+const internalMacosExports = collectExports(`../core/dist/internal-macos.js`);
+const internalWindowsExports = collectExports(`../core/dist/internal-windows.js`);
+
+generate(
+ `${outDir}/bridge-bootstrap.js`,
+ generateInternal({
+ "GauntletComponents": { importUrl: "ext:gauntlet/api/components.js", exports: componentExports },
+ "GauntletHelpers": { importUrl: "ext:gauntlet/api/helpers.js", exports: helpersExports },
+ "GauntletHooks": { importUrl: "ext:gauntlet/api/hooks.js", exports: hooksExports },
+ "GauntletCore": { importUrl: "ext:gauntlet/core.js", exports: coreExports },
+ "GauntletReact": { importUrl: "ext:gauntlet/react.js", exports: reactExports },
+ "GauntletReactJsxRuntime": { importUrl: "ext:gauntlet/react-jsx-runtime.js", exports: reactJsxRuntimeExports },
+ })
+)
+
+generate(`${outDir}/bridge-internal-all-bootstrap.js`, generateInternal({
+ "GauntletInternalAll": { importUrl: "ext:gauntlet/internal-all.js", exports: internalAllExports }
+}))
+generate(`${outDir}/bridge-internal-linux-bootstrap.js`, generateInternal({
+ "GauntletInternalLinux": { importUrl: "ext:gauntlet/internal-linux.js", exports: internalLinuxExports }
+}))
+generate(`${outDir}/bridge-internal-macos-bootstrap.js`, generateInternal({
+ "GauntletInternalMacos": { importUrl: "ext:gauntlet/internal-macos.js", exports: internalMacosExports }
+}))
+
+generate(`${outDir}/bridge-internal-windows-bootstrap.js`, generateInternal({
+ "GauntletInternalWindows": { importUrl: "ext:gauntlet/internal-windows.js", exports: internalWindowsExports }
+}))
+
+
+generate(`${outDir}/bridge-components.js`, generateExternal("GauntletComponents", componentExports))
+generate(`${outDir}/bridge-helpers.js`, generateExternal("GauntletHelpers", helpersExports))
+generate(`${outDir}/bridge-hooks.js`, generateExternal("GauntletHooks", hooksExports))
+generate(`${outDir}/bridge-core.js`, generateExternal("GauntletCore", coreExports))
+generate(`${outDir}/bridge-react.js`, generateExternal("GauntletReact", reactExports))
+generate(`${outDir}/bridge-react-jsx-runtime.js`, generateExternal("GauntletReactJsxRuntime", reactJsxRuntimeExports))
+
+generate(`${outDir}/bridge-internal-all.js`, generateExternal("GauntletInternalAll", internalAllExports))
+generate(`${outDir}/bridge-internal-linux.js`, generateExternal("GauntletInternalLinux", internalLinuxExports))
+generate(`${outDir}/bridge-internal-macos.js`, generateExternal("GauntletInternalMacos", internalMacosExports))
+generate(`${outDir}/bridge-internal-windows.js`, generateExternal("GauntletInternalWindows", internalWindowsExports))
+
+
diff --git a/js/deno/tsconfig.json b/js/bridge_build/tsconfig.json
similarity index 65%
rename from js/deno/tsconfig.json
rename to js/bridge_build/tsconfig.json
index 2854811..1433d49 100644
--- a/js/deno/tsconfig.json
+++ b/js/bridge_build/tsconfig.json
@@ -5,8 +5,10 @@
"esModuleInterop": true,
"target": "ES2022",
"moduleResolution": "bundler",
- "outDir": "./builddist"
+ "jsx": "react",
+ "types": ["@types/node"],
+ "outDir": "./dist"
},
"lib": ["ES2020"],
- "include": ["./generator"]
+ "include": ["./src"]
}
\ No newline at end of file
diff --git a/js/build/package.json b/js/build/package.json
index 0828044..2b7b24e 100644
--- a/js/build/package.json
+++ b/js/build/package.json
@@ -13,19 +13,19 @@
},
"type": "module",
"dependencies": {
- "@actions/core": "^1.10.1",
- "commander": "^11.1.0",
- "octokit": "^3.1.2",
- "simple-git": "^3.22.0",
- "cross-spawn": "^7.0.3"
+ "@actions/core": "^1.11.1",
+ "commander": "^12.1.0",
+ "octokit": "^4.0.2",
+ "simple-git": "^3.27.0",
+ "cross-spawn": "^7.0.6"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-typescript": "^11.1.5",
- "@types/node": "^18.17.1",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/node": "^22.10.2",
"@types/cross-spawn": "^6.0.6",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
}
diff --git a/js/build/src/main.ts b/js/build/src/main.ts
index 9569bba..28d0a37 100644
--- a/js/build/src/main.ts
+++ b/js/build/src/main.ts
@@ -6,7 +6,7 @@ import { Octokit } from 'octokit';
import { sync as spawnSync } from "cross-spawn";
import path from "node:path";
import { mkdirSync, readFileSync } from "fs";
-import { copyFileSync, writeFileSync } from "node:fs";
+import { copyFileSync, existsSync, rmdirSync, writeFileSync } from "node:fs";
import * as core from '@actions/core';
import { SpawnSyncOptions } from "child_process";
@@ -58,10 +58,10 @@ program.command('build-windows')
await program.parseAsync(process.argv);
-async function doBuild(projectRoot: string, arch: string) {
+async function doBuild(projectRoot: string, arch: string, profile: string) {
console.log("Building Gauntlet...")
- build(projectRoot, arch)
+ build(projectRoot, arch, profile)
}
async function doPublishInit() {
@@ -85,15 +85,18 @@ async function doPublishInit() {
}
async function doPublishLinux() {
- console.log("Publishing Gauntlet... Linux...")
-
const projectRoot = getProjectRoot()
+ const git = simpleGit(projectRoot);
+
+ console.log("git pull...")
+ await git.pull()
+
const arch = 'x86_64-unknown-linux-gnu';
+ const profile = 'release-size';
- build(projectRoot, arch)
-
- const { fileName, filePath } = packageForLinux(projectRoot, arch)
+ build(projectRoot, arch, profile)
+ const { fileName, filePath } = packageForLinux(projectRoot, arch, profile)
await addFileToRelease(filePath, fileName)
}
@@ -101,39 +104,72 @@ async function doPublishLinux() {
async function doBuildLinux() {
const arch = 'x86_64-unknown-linux-gnu';
const projectRoot = getProjectRoot();
+ const profile = 'release';
- await doBuild(projectRoot, arch)
- packageForLinux(projectRoot, arch)
+ await doBuild(projectRoot, arch, profile)
+ packageForLinux(projectRoot, arch, profile)
}
async function doPublishMacOS() {
const projectRoot = getProjectRoot();
- const arch = 'aarch64-apple-darwin';
+ const git = simpleGit(projectRoot);
- build(projectRoot, arch)
+ console.log("git pull...")
+ await git.pull()
- const { fileName, filePath } = await packageForMacos(projectRoot, arch, true, true)
+ const archArm = 'aarch64-apple-darwin';
+ const archIntel = 'x86_64-apple-darwin';
+ const profile = 'release-size';
+
+ buildJs(projectRoot)
+ buildRust(projectRoot, archArm, profile)
+ buildRust(projectRoot, archIntel, profile)
+
+ const { fileName, filePath } = await packageForMacos(
+ projectRoot,
+ [archArm, archIntel],
+ profile,
+ true,
+ true
+ )
await addFileToRelease(filePath, fileName)
}
async function doBuildMacOS() {
const projectRoot = getProjectRoot();
- const arch = 'aarch64-apple-darwin';
+ const archArm = 'aarch64-apple-darwin';
+ const archIntel = 'x86_64-apple-darwin';
+ const profile = 'release';
- await doBuild(projectRoot, arch)
- await packageForMacos(projectRoot, arch, true, false)
+ buildJs(projectRoot)
+ buildRust(projectRoot, archArm, profile)
+ buildRust(projectRoot, archIntel, profile)
+
+ await packageForMacos(
+ projectRoot,
+ [archArm, archIntel],
+ profile,
+ false,
+ false
+ )
}
async function doPublishWindows() {
const projectRoot = getProjectRoot();
+ const git = simpleGit(projectRoot);
+
+ console.log("git pull...")
+ await git.pull()
+
const arch = 'x86_64-pc-windows-msvc';
+ const profile = 'release-size';
- build(projectRoot, arch)
+ build(projectRoot, arch, profile)
- const { fileName, filePath } = await packageForWindows(projectRoot, arch)
+ const { fileName, filePath } = await packageForWindows(projectRoot, arch, profile)
await addFileToRelease(filePath, fileName)
}
@@ -141,25 +177,36 @@ async function doPublishWindows() {
async function doBuildWindows() {
const projectRoot = getProjectRoot();
const arch = 'x86_64-pc-windows-msvc';
+ const profile = 'release';
- await doBuild(projectRoot, arch)
- await packageForWindows(projectRoot, arch)
+ await doBuild(projectRoot, arch, profile)
+ await packageForWindows(projectRoot, arch, profile)
}
async function doPublishFinal() {
- console.log("Publishing Gauntlet npm packages...")
const projectRoot = getProjectRoot()
+ const git = simpleGit(projectRoot);
+
+ console.log("git pull...")
+ await git.pull()
+
+ console.log("Publishing Gauntlet npm packages...")
+
buildJs(projectRoot)
- publishNpmPackage(projectRoot)
+ await publishNpmPackage(projectRoot)
}
-function build(projectRoot: string, arch: string) {
+function build(projectRoot: string, arch: string, profile: string) {
buildJs(projectRoot)
+ buildRust(projectRoot, arch, profile)
+}
+
+function buildRust(projectRoot: string, arch: string, profile: string) {
console.log("Building rust...")
- spawnWithErrors('cargo', ['build', '--release', '--features', 'release', '--target', arch], {
+ spawnWithErrors('cargo', ['build', '--profile', profile, '--features', 'release', '--target', arch], {
cwd: projectRoot
});
}
@@ -234,18 +281,6 @@ async function makeRepoChanges(projectRoot: string): Promise<{ releaseNotes: str
console.log("Writing changelog file...")
await writeFile(changelogFilePath, newChangelog.join(EOL))
- const bumpNpmPackage = (packageDir: string) => {
- spawnWithErrors('npm', ['version', `0.${newVersion}.0`], { cwd: packageDir })
- }
-
- console.log("Bump version for deno subproject...")
- const denoProjectPath = path.join(projectRoot, "js", "deno");
- bumpNpmPackage(denoProjectPath)
-
- console.log("Bump version for api subproject...")
- const apiProjectPath = path.join(projectRoot, "js", "api");
- bumpNpmPackage(apiProjectPath)
-
console.log("git add all files...")
await git.raw('add', '-A')
console.log("git commit...")
@@ -263,8 +298,8 @@ async function makeRepoChanges(projectRoot: string): Promise<{ releaseNotes: str
}
}
-function packageForLinux(projectRoot: string, arch: string): { filePath: string; fileName: string } {
- const releaseDirPath = path.join(projectRoot, 'target', arch, 'release');
+function packageForLinux(projectRoot: string, arch: string, profile: string): { filePath: string; fileName: string } {
+ const releaseDirPath = path.join(projectRoot, 'target', arch, profile);
const assetsDirPath = path.join(projectRoot, 'assets', 'linux');
const sourceExecutableFilePath = path.join(releaseDirPath, 'gauntlet');
@@ -306,11 +341,11 @@ function packageForLinux(projectRoot: string, arch: string): { filePath: string;
}
}
-async function packageForMacos(projectRoot: string, arch: string, sign: boolean, notarize: boolean): Promise<{ filePath: string; fileName: string }> {
- const releaseDirPath = path.join(projectRoot, 'target', arch, 'release');
- const sourceExecutableFilePath = path.join(releaseDirPath, 'gauntlet');
- const outFileName = "gauntlet-aarch64-macos.dmg"
- const outFilePath = path.join(releaseDirPath, outFileName);
+async function packageForMacos(projectRoot: string, arch: string[], profile: string, sign: boolean, notarize: boolean): Promise<{ filePath: string; fileName: string }> {
+ const targetDirPath = path.join(projectRoot, 'target');
+ const outDirPath = path.join(targetDirPath, 'out');
+ const outFileName = "gauntlet-universal-macos.dmg"
+ const outFilePath = path.join(targetDirPath, outFileName);
const assetsDirPath = path.join(projectRoot, 'assets', 'macos');
const sourceInfoFilePath = path.join(assetsDirPath, 'Info.plist');
@@ -318,7 +353,7 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
const dmgBackground = path.join(assetsDirPath, 'dmg-background.png');
const entitlementsPath = path.join(assetsDirPath, 'entitlements.plist');
- const bundleDir = path.join(releaseDirPath, 'Gauntlet.app');
+ const bundleDir = path.join(outDirPath, 'Gauntlet.app');
const contentsDir = path.join(bundleDir, 'Contents');
const macosContentsDir = path.join(contentsDir, 'MacOS');
const resourcesContentsDir = path.join(contentsDir, 'Resources');
@@ -326,14 +361,29 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
const targetInfoFilePath = path.join(contentsDir, 'Info.plist');
const targetIconFilePath = path.join(resourcesContentsDir, 'AppIcon.icns');
+ const sourceExecutableFilePaths = arch.map(arch => path.join(targetDirPath, arch, profile, 'gauntlet'));
+
const version = await readVersion(projectRoot)
+ if (existsSync(outDirPath)) {
+ rmdirSync(outDirPath)
+ }
+
+ mkdirSync(outDirPath)
mkdirSync(bundleDir)
mkdirSync(contentsDir)
mkdirSync(macosContentsDir)
mkdirSync(resourcesContentsDir)
- copyFileSync(sourceExecutableFilePath, targetExecutableFilePath)
+ spawnWithErrors(`lipo`, [
+ ...sourceExecutableFilePaths,
+ '-create',
+ '-output',
+ targetExecutableFilePath
+ ], {
+ cwd: outDirPath
+ })
+
copyFileSync(sourceInfoFilePath, targetInfoFilePath)
copyFileSync(sourceIconFilePath, targetIconFilePath)
@@ -341,9 +391,9 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
const infoResult = infoSource.replace('__VERSION__', `${version}.0.0`);
writeFileSync(targetInfoFilePath, infoResult,'utf8');
- const signKeyPath = path.join(releaseDirPath, 'signKey.pem');
- const signCertPath = path.join(releaseDirPath, 'signCert.pem');
- const connectApiKeyPath = path.join(releaseDirPath, 'connectApiKey.json');
+ const signKeyPath = path.join(outDirPath, 'signKey.pem');
+ const signCertPath = path.join(outDirPath, 'signCert.pem');
+ const connectApiKeyPath = path.join(outDirPath, 'connectApiKey.json');
const signKeyContent = process.env.APPLE_SIGNING_KEY_PEM;
const signCertContent = process.env.APPLE_SIGNING_CERT_PEM;
@@ -367,7 +417,7 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
entitlementsPath,
bundleDir
], {
- cwd: releaseDirPath
+ cwd: outDirPath
})
}
@@ -382,7 +432,7 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
outFileName,
bundleDir
], {
- cwd: releaseDirPath
+ cwd: targetDirPath
})
if (sign) {
@@ -395,7 +445,7 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
'--for-notarization',
outFilePath
], {
- cwd: releaseDirPath
+ cwd: outDirPath
})
}
@@ -409,7 +459,7 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
'--staple',
outFilePath
], {
- cwd: releaseDirPath
+ cwd: outDirPath
})
}
@@ -419,8 +469,8 @@ async function packageForMacos(projectRoot: string, arch: string, sign: boolean,
}
}
-async function packageForWindows(projectRoot: string, arch: string): Promise<{ filePath: string; fileName: string }> {
- const releaseDirPath = path.join(projectRoot, 'target', arch, 'release');
+async function packageForWindows(projectRoot: string, arch: string, profile: string): Promise<{ filePath: string; fileName: string }> {
+ const releaseDirPath = path.join(projectRoot, 'target', arch, profile);
const sourceExecutableFilePath = path.join(releaseDirPath, 'gauntlet.exe');
const outFileName = "gauntlet-x86_64-windows.msi"
const outFilePath = path.join(releaseDirPath, outFileName);
@@ -460,13 +510,15 @@ async function packageForWindows(projectRoot: string, arch: string): Promise<{ f
}
-function publishNpmPackage(projectRoot: string) {
- console.log("Publishing npm deno package...")
- const denoProjectPath = path.join(projectRoot, "js", "deno");
- spawnWithErrors('npm', ['publish'], { cwd: denoProjectPath })
+async function publishNpmPackage(projectRoot: string) {
+ const version = await readVersion(projectRoot)
+
+ const apiProjectPath = path.join(projectRoot, "js", "api");
+
+ console.log("Bump version for api subproject...")
+ spawnWithErrors('npm', ['version', `0.${version}.0`], { cwd: apiProjectPath })
console.log("Publishing npm api package...")
- const apiProjectPath = path.join(projectRoot, "js", "api");
spawnWithErrors('npm', ['publish'], { cwd: apiProjectPath })
}
@@ -545,4 +597,4 @@ function spawnWithErrors(command: string, args: string[], options: SpawnSyncOpti
if (npmRunResult.status !== 0) {
throw new Error(`Unable to run ${command} ${args}, status: ${JSON.stringify(npmRunResult, null, 2)}`);
}
-}
\ No newline at end of file
+}
diff --git a/js/core/package.json b/js/core/package.json
index 59445a3..1398cae 100644
--- a/js/core/package.json
+++ b/js/core/package.json
@@ -5,15 +5,16 @@
"build": "tsc --noEmit && rollup --config rollup.config.ts --configPlugin typescript"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-typescript": "^11.1.5",
- "@types/react": "^18.2.35",
"@project-gauntlet/api": "*",
"@project-gauntlet/typings": "*",
- "@project-gauntlet/deno": "*",
- "rollup": "^4.3.0",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "@rollup/plugin-alias": "^5.1.1",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/deno": "^2.0.0",
+ "@types/react": "^18.3.18",
+ "rollup": "^4.28.1",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
}
diff --git a/js/core/rollup.config.ts b/js/core/rollup.config.ts
index 68a33d4..760a198 100644
--- a/js/core/rollup.config.ts
+++ b/js/core/rollup.config.ts
@@ -2,10 +2,16 @@ import nodeResolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';
import { defineConfig } from "rollup";
+import alias from '@rollup/plugin-alias';
export default defineConfig({
input: [
- 'src/init.tsx',
+ 'src/core.tsx',
+ 'src/init.ts',
+ 'src/internal-all.ts',
+ 'src/internal-linux.ts',
+ 'src/internal-macos.ts',
+ 'src/internal-windows.ts',
],
output: [
{
@@ -14,12 +20,18 @@ export default defineConfig({
sourcemap: 'inline',
}
],
- external: ["react", "react/jsx-runtime"],
+ external: [/^ext:.+/],
plugins: [
nodeResolve(),
commonjs(),
typescript({
tsconfig: './tsconfig.json',
}),
+ alias({
+ entries: [
+ { find: 'react/jsx-runtime', replacement: 'ext:gauntlet/react-jsx-runtime.js' },
+ { find: 'react', replacement: 'ext:gauntlet/react.js' },
+ ]
+ }),
]
})
diff --git a/js/core/src/command-generator.ts b/js/core/src/command-generator.ts
deleted file mode 100644
index 58e861c..0000000
--- a/js/core/src/command-generator.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-import { reloadSearchIndex } from "./search-index";
-
-// @ts-expect-error does typescript support such symbol declarations?
-const denoCore: DenoCore = Deno[Deno.internal].core;
-const InternalApi = denoCore.ops;
-
-interface GeneratedCommand { // TODO is it possible to import api here
- name: string
- icon?: ArrayBuffer
- fn: () => void
- actions?: GeneratedCommandAction[]
-}
-
-interface GeneratedCommandAction {
- ref?: string
- label: string
- fn: () => void
-}
-
-type GeneratorProps = {
- add: (id: string, data: GeneratedCommand) => void,
- remove: (id: string) => void,
-};
-
-type Generator = (props: GeneratorProps) => void | (() => (void | Promise)) | Promise (void | Promise))>
-
-type ProcessedGeneratedCommand = { generatorEntrypointId: string, uuid: string, command: GeneratedCommand };
-
-type ProcessedGeneratedCommands = { [lookupEntrypointId: string]: ProcessedGeneratedCommand };
-type GeneratorCleanups = { [generatorEntrypointId: string]: () => (void | Promise) };
-
-let storedGeneratedCommands: ProcessedGeneratedCommands = {}
-let generatorCleanups: GeneratorCleanups = {}
-
-export async function runCommandGenerators(): Promise {
- for (let [generatorEntrypointId, cleanup] of Object.entries(generatorCleanups)) {
- try {
- await cleanup()
- } catch (err) {
- console.error(`Error occurred when calling cleanup function of generator entrypoint: ${generatorEntrypointId}`, err)
- }
- }
-
- storedGeneratedCommands = {}
- generatorCleanups = {}
-
- await reloadSearchIndex(true)
-
- const entrypointIds = await InternalApi.get_command_generator_entrypoint_ids();
- for (const generatorEntrypointId of entrypointIds) {
- try {
- const generator: Generator = (await import(`gauntlet:entrypoint?${generatorEntrypointId}`)).default;
-
- InternalApi.op_log_info("command_generator", `Running command generator entrypoint ${generatorEntrypointId}`)
-
- const add = (id: string, data: GeneratedCommand) => {
- InternalApi.op_log_info("command_generator", `Adding entry '${id}' by command generator entrypoint '${generatorEntrypointId}'`)
-
- const lookupId = generatorEntrypointId + ":" + id;
-
- storedGeneratedCommands[lookupId] = {
- generatorEntrypointId: generatorEntrypointId,
- uuid: crypto.randomUUID(),
- command: data
- }
-
- reloadSearchIndex(true)
- }
- const remove = (id: string) => {
- InternalApi.op_log_info("command_generator", `Removing entry '${id}' by command generator entrypoint '${generatorEntrypointId}'`)
- const lookupId = generatorEntrypointId + ":" + id;
-
- delete storedGeneratedCommands[lookupId]
-
- reloadSearchIndex(true)
- }
-
- // noinspection ES6MissingAwait
- (async () => {
- try {
- InternalApi.update_loading_bar(generatorEntrypointId, true)
- let cleanup = await generator({ add, remove })
- InternalApi.update_loading_bar(generatorEntrypointId, false)
- if (typeof cleanup === "function") {
- generatorCleanups[generatorEntrypointId] = cleanup
- }
- } catch (e) {
- console.error(`Error occurred when calling command generator for entrypoint: ${generatorEntrypointId}`, e)
- }
- })()
- } catch (e) {
- console.error(`Error occurred when importing command generator for entrypoint: ${generatorEntrypointId}`, e)
- }
- }
-}
-
-export function generatedCommandSearchIndex(): AdditionalSearchItem[] {
- return Object.entries(storedGeneratedCommands).map(([entrypointLookupId, value]) => ({
- generator_entrypoint_id: value.generatorEntrypointId,
- entrypoint_id: entrypointLookupId,
- entrypoint_uuid: value.uuid,
- entrypoint_name: value.command.name,
- entrypoint_icon: value.command.icon,
- entrypoint_actions: (value.command.actions || [])
- .map(action => ({
- id: action.ref,
- label: action.label
- })),
- }))
-}
-
-export async function runGeneratedCommandAction(entrypointId: string, key: string, modifierShift: boolean, modifierControl: boolean, modifierAlt: boolean, modifierMeta: boolean) {
- const command = storedGeneratedCommands[entrypointId];
-
- if (command) {
- const id = await InternalApi.fetch_action_id_for_shortcut(command.generatorEntrypointId, key, modifierShift, modifierControl, modifierAlt, modifierMeta);
- if (id) {
- const action = command.command.actions?.find(value => value.ref == id);
- if (action) {
- action.fn()
- }
- }
- }
-}
-
-export function runGeneratedCommand(entrypointId: string, action_index: number | undefined) {
- const generatedCommand = storedGeneratedCommands[entrypointId];
-
- if (generatedCommand) {
- if (typeof action_index == "number") {
- const actions = generatedCommand.command.actions;
- if (actions) {
- actions[action_index].fn()
- } else {
- throw new Error("Generated command with entrypoint id '" + entrypointId + "' doesn't have actions, action index: " + action_index)
- }
- } else {
- generatedCommand.command.fn()
- }
- } else {
- throw new Error("Generated command with entrypoint id '" + entrypointId + "' not found")
- }
-}
\ No newline at end of file
diff --git a/js/core/src/core.tsx b/js/core/src/core.tsx
new file mode 100644
index 0000000..2afa162
--- /dev/null
+++ b/js/core/src/core.tsx
@@ -0,0 +1,179 @@
+import type { FC } from "react";
+import { runEntrypointGenerators, runGeneratedEntrypoint, runGeneratedEntrypointAction } from "./entrypoint-generator";
+import { reloadSearchIndex } from "./search-index";
+import {
+ closeView,
+ handleEvent,
+ handlePluginViewKeyboardEvent, popMainView,
+ renderInlineView,
+ renderView,
+} from "./render";
+import {
+ entrypoint_preferences_required,
+ get_entrypoint_preferences,
+ get_plugin_preferences,
+ op_entrypoint_names,
+ op_inline_view_entrypoint_id,
+ op_log_trace,
+ op_plugin_get_pending_event,
+ plugin_preferences_required,
+ show_plugin_error_view,
+ show_preferences_required_view
+} from "ext:core/ops";
+
+
+async function handleKeyboardEvent(event: NotReactsKeyboardEvent) {
+ op_log_trace("plugin_event_handler", `Handling keyboard event: ${Deno.inspect(event)}`);
+ switch (event.origin) {
+ case "MainView": {
+ runGeneratedEntrypointAction(event.entrypointId, event.key, event.modifierShift, event.modifierControl, event.modifierAlt, event.modifierMeta)
+ break;
+ }
+ case "PluginView": {
+ handlePluginViewKeyboardEvent(event.entrypointId, event.key, event.modifierShift, event.modifierControl, event.modifierAlt, event.modifierMeta)
+ break;
+ }
+ }
+}
+
+async function checkRequiredPreferences(entrypointId: string): Promise {
+ const pluginPreferencesRequired = plugin_preferences_required();
+ const entrypointPreferencesRequired = entrypoint_preferences_required(entrypointId);
+
+ return pluginPreferencesRequired || entrypointPreferencesRequired;
+}
+
+async function checkRequiredPreferencesAndAsk(entrypointId: string): Promise {
+ const pluginPreferencesRequired = await plugin_preferences_required();
+ const entrypointPreferencesRequired = await entrypoint_preferences_required(entrypointId);
+
+ const required = pluginPreferencesRequired || entrypointPreferencesRequired;
+ if (required) {
+ show_preferences_required_view(entrypointId, pluginPreferencesRequired, entrypointPreferencesRequired)
+ }
+
+ return required;
+}
+
+export async function runPluginLoop() {
+ await runEntrypointGenerators();
+
+ // runtime is stopped using tokio cancellation
+ // noinspection InfiniteLoopJS
+ while (true) {
+ op_log_trace("plugin_loop", "Waiting for next plugin event...")
+ const pluginEvent = await op_plugin_get_pending_event();
+ op_log_trace("plugin_loop", `Received plugin event: ${Deno.inspect(pluginEvent)}`)
+ switch (pluginEvent.type) {
+ case "ViewEvent": {
+ try {
+ handleEvent(pluginEvent)
+ } catch (e) {
+ console.error("Error occurred when receiving view event to handle", e)
+ }
+ break;
+ }
+ case "KeyboardEvent": {
+ try {
+ await handleKeyboardEvent(pluginEvent)
+ } catch (e) {
+ console.error("Error occurred when receiving keyboard event to handle", e)
+ }
+ break;
+ }
+ case "OpenView": {
+ const entrypointId = pluginEvent.entrypointId
+ try {
+ if (await checkRequiredPreferencesAndAsk(entrypointId)) {
+ break;
+ }
+
+ const view: FC = (await import(`gauntlet:entrypoint?${entrypointId}`)).default;
+ renderView(entrypointId, getEntrypointName(entrypointId), view)
+ } catch (e) {
+ console.error("Error occurred when rendering view", entrypointId, e)
+ show_plugin_error_view(entrypointId, "View")
+ }
+ break;
+ }
+ case "CloseView": {
+ closeView()
+ break;
+ }
+ case "PopView": {
+ const entrypointId = pluginEvent.entrypointId
+ try {
+ popMainView()
+ } catch (e) {
+ console.error("Error occurred when popping view", entrypointId, e)
+ show_plugin_error_view(entrypointId, "View")
+ }
+ break;
+ }
+ case "RunCommand": {
+ try {
+ if (await checkRequiredPreferencesAndAsk(pluginEvent.entrypointId)) {
+ break;
+ }
+
+ type CommandContext = {
+ pluginPreferences: P,
+ entrypointPreferences: E,
+ };
+
+ const pluginPreferences = get_plugin_preferences();
+ const entrypointPreferences = get_entrypoint_preferences(pluginEvent.entrypointId);
+
+ const command: (context: CommandContext) => Promise | void = (await import(`gauntlet:entrypoint?${pluginEvent.entrypointId}`)).default;
+ command({ pluginPreferences, entrypointPreferences })
+ } catch (e) {
+ console.error("Error occurred when running a command", pluginEvent.entrypointId, e)
+ }
+ break;
+ }
+ case "RunGeneratedEntrypoint": {
+ try {
+ runGeneratedEntrypoint(pluginEvent.entrypointId, pluginEvent.actionIndex)
+ } catch (e) {
+ console.error("Error occurred when running a generated command", pluginEvent.entrypointId, e)
+ }
+ break;
+ }
+ case "OpenInlineView": {
+ const entrypointId = op_inline_view_entrypoint_id();
+
+ if (entrypointId) {
+ if (await checkRequiredPreferences(entrypointId)) {
+ break;
+ }
+
+ try {
+ type InlineView = { text: string };
+ const handler: FC = (await import(`gauntlet:entrypoint?${entrypointId}`)).default;
+
+ renderInlineView(entrypointId, getEntrypointName(entrypointId), handler, pluginEvent.text)
+ } catch (e) {
+ console.error("Error occurred when rendering inline view", e)
+ }
+ }
+ break;
+ }
+ case "RefreshSearchIndex": {
+ // noinspection ES6MissingAwait
+ reloadSearchIndex(false)
+ break;
+ }
+ }
+ }
+}
+
+function getEntrypointName(entrypointId: string): string {
+ const entrypointNames = op_entrypoint_names();
+ const entrypointName = entrypointNames[entrypointId];
+
+ if (entrypointName) {
+ return entrypointName
+ }
+
+ throw new Error(`Unable to get entrypoint name for entrypoint id: ${entrypointId}`)
+}
diff --git a/js/core/src/entrypoint-generator.ts b/js/core/src/entrypoint-generator.ts
new file mode 100644
index 0000000..2e9ab6b
--- /dev/null
+++ b/js/core/src/entrypoint-generator.ts
@@ -0,0 +1,263 @@
+import {
+ fetch_action_id_for_shortcut,
+ get_entrypoint_generator_entrypoint_ids,
+ op_log_info,
+ op_log_debug,
+ update_loading_bar,
+ get_plugin_preferences,
+ get_entrypoint_preferences
+} from "ext:core/ops";
+import { reloadSearchIndex } from "./search-index";
+import type { FC } from "react";
+import { renderView } from "./render";
+
+interface GeneratedEntrypoint { // TODO is it possible to import api here
+ name: string
+ actions: GeneratedEntrypointAction[]
+ icon?: ArrayBuffer
+ accessories?: GeneratedEntrypointAccessory[]
+}
+
+type GeneratedEntrypointAction = GeneratedEntrypointActionRun | GeneratedEntrypointActionView
+
+interface GeneratedEntrypointActionRun {
+ ref?: string
+ label: string
+ run: () => void
+}
+
+interface GeneratedEntrypointActionView {
+ ref?: string
+ label: string
+ view: FC
+}
+
+export type GeneratorContext = {
+ add: (id: string, data: GeneratedEntrypoint) => void,
+ remove: (id: string) => void,
+ get: (id: string) => GeneratedEntrypoint | undefined
+ getAll: () => { [id: string]: GeneratedEntrypoint },
+ pluginPreferences: P,
+ entrypointPreferences: E,
+};
+
+type Generator = (props: GeneratorContext) => void | (() => (void | Promise)) | Promise (void | Promise))>
+
+type ProcessedGeneratedEntrypoint = {
+ generatorEntrypointId: string,
+ id: string,
+ uuid: string,
+ command: GeneratedEntrypoint
+ derivedActions: GeneratedEntrypointDerivedAction[]
+};
+
+type GeneratedEntrypointDerivedAction = GeneratedEntrypointDerivedActionRun | GeneratedEntrypointDerivedActionView
+
+interface GeneratedEntrypointDerivedActionRun {
+ type: "Command"
+ ref?: string
+ label: string
+ run: () => void
+}
+
+interface GeneratedEntrypointDerivedActionView {
+ type: "View"
+ ref?: string
+ label: string
+ view: FC
+}
+
+
+type ProcessedGeneratedEntrypoints = { [lookupEntrypointId: string]: ProcessedGeneratedEntrypoint };
+type GeneratorCleanups = { [generatorEntrypointId: string]: () => (void | Promise) };
+
+let storedGeneratedEntrypoints: ProcessedGeneratedEntrypoints = {}
+let generatorCleanups: GeneratorCleanups = {}
+
+export async function runEntrypointGenerators(): Promise {
+ for (let [generatorEntrypointId, cleanup] of Object.entries(generatorCleanups)) {
+ try {
+ await cleanup()
+ } catch (err) {
+ console.error(`Error occurred when calling cleanup function of generator entrypoint: ${generatorEntrypointId}`, err)
+ }
+ }
+
+ storedGeneratedEntrypoints = {}
+ generatorCleanups = {}
+
+ await reloadSearchIndex(true)
+
+ const entrypointIds = await get_entrypoint_generator_entrypoint_ids();
+ for (const generatorEntrypointId of entrypointIds) {
+ try {
+ const generator: Generator = (await import(`gauntlet:entrypoint?${generatorEntrypointId}`)).default;
+
+ op_log_info("entrypoint_generator", `Running entrypoint generator entrypoint ${generatorEntrypointId}`)
+
+ const add = (id: string, data: GeneratedEntrypoint) => {
+ op_log_info("entrypoint_generator", `Adding entry '${id}' by entrypoint generator entrypoint '${generatorEntrypointId}'`)
+
+ if (data.actions.length < 1) {
+ throw new Error(`Error when adding entry '${id}': at least one action should be provided`)
+ }
+
+ const derivedActions: GeneratedEntrypointDerivedAction[] = []
+ for (const action of data.actions) {
+ const label = action.label;
+
+ const run = "run" in action;
+ const view = "view" in action;
+
+ if (run && view) {
+ throw new Error(`only one of 'run' or 'view' properties can be specified in action: '${label}'`)
+ }
+
+ if (!run && !view) {
+ throw new Error(`one of 'run' or 'view' properties has to be specified in action: '${label}'`)
+ }
+
+ if (run) {
+ derivedActions.push({
+ type: "Command",
+ ref: action.ref,
+ label: action.label,
+ run: action.run,
+ })
+ } else if (view) {
+ derivedActions.push({
+ type: "View",
+ ref: action.ref,
+ label: action.label,
+ view: action.view,
+ })
+ }
+ }
+
+ const lookupId = generatorEntrypointId + ":" + id;
+
+ storedGeneratedEntrypoints[lookupId] = {
+ generatorEntrypointId: generatorEntrypointId,
+ id: id,
+ uuid: crypto.randomUUID(),
+ command: data,
+ derivedActions,
+ }
+
+ reloadSearchIndex(true)
+ }
+ const remove = (id: string) => {
+ op_log_info("entrypoint_generator", `Removing entry '${id}' by entrypoint generator entrypoint '${generatorEntrypointId}'`)
+ const lookupId = generatorEntrypointId + ":" + id;
+
+ delete storedGeneratedEntrypoints[lookupId]
+
+ reloadSearchIndex(true)
+ }
+
+ const get = (id: string) => {
+ op_log_debug("entrypoint_generator", `Getting entry '${id}' by entrypoint generator entrypoint '${generatorEntrypointId}'`)
+ const lookupId = generatorEntrypointId + ":" + id;
+
+ const generatedEntrypoint = storedGeneratedEntrypoints[lookupId];
+ if (generatedEntrypoint) {
+ return generatedEntrypoint.command
+ } else {
+ return undefined
+ }
+ }
+
+ const getAll = (): { [id: string]: GeneratedEntrypoint } => {
+ op_log_debug("entrypoint_generator", `Getting all entries by entrypoint generator entrypoint '${generatorEntrypointId}'`)
+
+ return Object.fromEntries(
+ Object.entries(storedGeneratedEntrypoints)
+ .map(([_lookupId, value]) => [value.id, value.command])
+ )
+ }
+
+ const pluginPreferences = get_plugin_preferences();
+ const entrypointPreferences = get_entrypoint_preferences(generatorEntrypointId);
+
+ // noinspection ES6MissingAwait
+ (async () => {
+ try {
+ update_loading_bar(generatorEntrypointId, true)
+ let cleanup = await generator({ add, remove, get, getAll, pluginPreferences, entrypointPreferences })
+ update_loading_bar(generatorEntrypointId, false)
+ if (typeof cleanup === "function") {
+ generatorCleanups[generatorEntrypointId] = cleanup
+ }
+ } catch (e) {
+ console.error(`Error occurred when calling entrypoint generator for entrypoint: ${generatorEntrypointId}`, e)
+ }
+ })()
+ } catch (e) {
+ console.error(`Error occurred when importing entrypoint generator for entrypoint: ${generatorEntrypointId}`, e)
+ }
+ }
+}
+
+export function generatedEntrypointSearchIndex(): GeneratedSearchItem[] {
+ return Object.entries(storedGeneratedEntrypoints).map(([entrypointLookupId, value]) => ({
+ generator_entrypoint_id: value.generatorEntrypointId,
+ entrypoint_id: entrypointLookupId,
+ entrypoint_uuid: value.uuid,
+ entrypoint_name: value.command.name,
+ entrypoint_icon: value.command.icon,
+ entrypoint_actions: value.derivedActions
+ .map(action => ({
+ id: action.ref,
+ action_type: action.type,
+ label: action.label
+ })),
+ entrypoint_accessories: value.command.accessories || []
+ }))
+}
+
+export async function runGeneratedEntrypointAction(entrypointId: string, key: string, modifierShift: boolean, modifierControl: boolean, modifierAlt: boolean, modifierMeta: boolean) {
+ const command = storedGeneratedEntrypoints[entrypointId];
+
+ if (command) {
+ const id = await fetch_action_id_for_shortcut(command.generatorEntrypointId, key, modifierShift, modifierControl, modifierAlt, modifierMeta);
+ if (id) {
+ const action = command.derivedActions.find(value => value.ref == id);
+ if (action) {
+ runAction(entrypointId, action)
+ }
+ }
+ }
+}
+
+export function runGeneratedEntrypoint(entrypointId: string, action_index: number) {
+ const generatedEntrypoint = storedGeneratedEntrypoints[entrypointId];
+
+ if (generatedEntrypoint) {
+ const action = generatedEntrypoint.derivedActions[action_index];
+ if (action) {
+ runAction(entrypointId, action)
+ } else {
+ throw new Error("Generated command with entrypoint id '" + entrypointId + "' doesn't have action with index: " + action_index)
+ }
+ } else {
+ throw new Error("Generated command with entrypoint id '" + entrypointId + "' not found")
+ }
+}
+
+function runAction(entrypointId: string, action: GeneratedEntrypointDerivedAction) {
+ switch (action.type) {
+ case "Command": {
+ action.run()
+
+ break;
+ }
+ case "View": {
+ const entrypointName = storedGeneratedEntrypoints[entrypointId]
+ .command
+ .name
+
+ renderView(entrypointId, entrypointName, action.view)
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/js/core/src/init.ts b/js/core/src/init.ts
new file mode 100644
index 0000000..4dfbad5
--- /dev/null
+++ b/js/core/src/init.ts
@@ -0,0 +1,10 @@
+import { runPluginLoop } from "gauntlet:core";
+
+globalThis.addEventListener("unhandledrejection", (event) => {
+ event.preventDefault()
+ console.error("Rejected promise, reason:", event.reason);
+});
+
+(async () => {
+ await runPluginLoop()
+})();
diff --git a/js/core/src/init.tsx b/js/core/src/init.tsx
deleted file mode 100644
index 9300b17..0000000
--- a/js/core/src/init.tsx
+++ /dev/null
@@ -1,248 +0,0 @@
-import { FC } from "react";
-import { runCommandGenerators, runGeneratedCommand, runGeneratedCommandAction } from "./command-generator";
-import { reloadSearchIndex } from "./search-index";
-import { clearRenderer } from "gauntlet:renderer";
-
-// @ts-expect-error does typescript support such symbol declarations?
-const denoCore: DenoCore = Deno[Deno.internal].core;
-const InternalApi = denoCore.ops;
-
-let latestRootUiWidget: UiWidget | undefined = undefined
-
-function findWidgetWithId(widget: UiWidget, widgetId: number): UiWidget | undefined {
- if (widget.widgetId === widgetId) {
- return widget
- }
-
- for (let widgetChild of widget.widgetChildren) {
- const widgetWithId = findWidgetWithId(widgetChild, widgetId);
- if (widgetWithId) {
- return widgetWithId
- }
- }
-
- return undefined;
-}
-
-function findAllActionHandlers(widget: UiWidget): { id: string, onAction: () => void }[] {
- if (widget.widgetType === "gauntlet:action") {
- const id = widget.widgetProperties["id"];
- const onAction = widget.widgetProperties["onAction"];
- if (!!id && !!onAction) {
- return [{ id, onAction }]
- } else {
- return []
- }
- }
-
- let result: { id: string, onAction: () => void }[] = []
- for (let widgetChild of widget.widgetChildren) {
- const actionHandler = findAllActionHandlers(widgetChild);
-
- result.push(...actionHandler)
- }
-
- return result;
-}
-
-function handleEvent(event: ViewEvent) {
- InternalApi.op_log_trace("plugin_event_handler", `Handling view event: ${Deno.inspect(event)}`);
- InternalApi.op_log_trace("plugin_event_handler", `Root widget: ${Deno.inspect(latestRootUiWidget)}`);
- if (latestRootUiWidget) {
- const widgetWithId = findWidgetWithId(latestRootUiWidget, event.widgetId);
- InternalApi.op_log_trace("plugin_event_handler", `Found widget with id ${event.widgetId}: ${Deno.inspect(widgetWithId)}`)
-
- if (widgetWithId) {
- const property = widgetWithId.widgetProperties[event.eventName];
-
- InternalApi.op_log_trace("plugin_event_handler", `Found event handler with name ${event.eventName}: ${Deno.inspect(property)}`)
-
- if (property) {
- if (typeof property === "function") {
-
- const eventArgs = event.eventArguments
- .map(arg => {
- switch (arg.type) {
- case "Undefined": {
- return undefined
- }
- case "String": {
- return arg.value
- }
- case "Number": {
- return arg.value
- }
- case "Bool": {
- return arg.value
- }
- }
- });
-
- InternalApi.op_log_trace("plugin_event_handler", `Calling handler with arguments ${Deno.inspect(eventArgs)}`)
-
- property(...eventArgs);
- } else {
- throw new Error(`Event handler has type ${typeof property}, but should be function`)
- }
- }
- }
- }
-}
-
-async function handleKeyboardEvent(event: NotReactsKeyboardEvent) {
- InternalApi.op_log_trace("plugin_event_handler", `Handling keyboard event: ${Deno.inspect(event)}`);
- switch (event.origin) {
- case "MainView": {
- runGeneratedCommandAction(event.entrypointId, event.key, event.modifierShift, event.modifierControl, event.modifierAlt, event.modifierMeta)
- break;
- }
- case "PluginView": {
- if (latestRootUiWidget) {
- const actionHandlers = findAllActionHandlers(latestRootUiWidget);
-
- const id = await InternalApi.fetch_action_id_for_shortcut(event.entrypointId, event.key, event.modifierShift, event.modifierControl, event.modifierAlt, event.modifierMeta);
-
- if (id) {
- const actionHandler = actionHandlers.find(value => value.id === id);
-
- if (actionHandler) {
- actionHandler.onAction()
- }
- }
- }
- break;
- }
- }
-}
-
-async function checkRequiredPreferences(entrypointId: string): Promise {
- const pluginPreferencesRequired = InternalApi.plugin_preferences_required();
- const entrypointPreferencesRequired = InternalApi.entrypoint_preferences_required(entrypointId);
-
- return pluginPreferencesRequired || entrypointPreferencesRequired;
-}
-
-async function checkRequiredPreferencesAndAsk(entrypointId: string): Promise {
- const pluginPreferencesRequired = await InternalApi.plugin_preferences_required();
- const entrypointPreferencesRequired = await InternalApi.entrypoint_preferences_required(entrypointId);
-
- const required = pluginPreferencesRequired || entrypointPreferencesRequired;
- if (required) {
- InternalApi.show_preferences_required_view(entrypointId, pluginPreferencesRequired, entrypointPreferencesRequired)
- }
-
- return required;
-}
-
-async function runLoop() {
- // runtime is stopped using tokio cancellation
- // noinspection InfiniteLoopJS
- while (true) {
- InternalApi.op_log_trace("plugin_loop", "Waiting for next plugin event...")
- const pluginEvent = await denoCore.opAsync("op_plugin_get_pending_event");
- InternalApi.op_log_trace("plugin_loop", `Received plugin event: ${Deno.inspect(pluginEvent)}`)
- switch (pluginEvent.type) {
- case "ViewEvent": {
- try {
- handleEvent(pluginEvent)
- } catch (e) {
- console.error("Error occurred when receiving view event to handle", e)
- }
- break;
- }
- case "KeyboardEvent": {
- try {
- await handleKeyboardEvent(pluginEvent)
- } catch (e) {
- console.error("Error occurred when receiving keyboard event to handle", e)
- }
- break;
- }
- case "OpenView": {
- try {
- if (await checkRequiredPreferencesAndAsk(pluginEvent.entrypointId)) {
- break;
- }
-
- const View: FC = (await import(`gauntlet:entrypoint?${pluginEvent.entrypointId}`)).default;
- const { render } = await import("gauntlet:renderer");
- latestRootUiWidget = render(pluginEvent.entrypointId, "View", );
- } catch (e) {
- console.error("Error occurred when rendering view", pluginEvent.entrypointId, e)
- InternalApi.show_plugin_error_view(pluginEvent.entrypointId, "View")
- }
- break;
- }
- case "CloseView": {
- clearRenderer()
- break;
- }
- case "RunCommand": {
- try {
- if (await checkRequiredPreferencesAndAsk(pluginEvent.entrypointId)) {
- break;
- }
-
- const command: () => Promise | void = (await import(`gauntlet:entrypoint?${pluginEvent.entrypointId}`)).default;
- command()
- } catch (e) {
- console.error("Error occurred when running a command", pluginEvent.entrypointId, e)
- }
- break;
- }
- case "RunGeneratedCommand": {
- try {
- runGeneratedCommand(pluginEvent.entrypointId, pluginEvent.actionIndex)
- } catch (e) {
- console.error("Error occurred when running a generated command", pluginEvent.entrypointId, e)
- }
- break;
- }
- case "OpenInlineView": {
- const endpointId = InternalApi.op_inline_view_endpoint_id();
-
- if (endpointId) {
- if (await checkRequiredPreferences(endpointId)) {
- break;
- }
-
- try {
- const Handler: FC<{ text: string }> = (await import(`gauntlet:entrypoint?${endpointId}`)).default;
- const { render } = await import("gauntlet:renderer");
-
- latestRootUiWidget = render(endpointId, "InlineView", );
-
- if (latestRootUiWidget.widgetChildren.length === 0) {
- InternalApi.op_log_debug("plugin_loop", `Inline view rendered no children, clearing inline view...`)
- InternalApi.clear_inline_view()
- }
- } catch (e) {
- console.error("Error occurred when rendering inline view", e)
- }
- }
- break;
- }
- case "ReloadSearchIndex": {
- runCommandGenerators()
- break;
- }
- case "RefreshSearchIndex": {
- // noinspection ES6MissingAwait
- reloadSearchIndex(false)
- break;
- }
- }
- }
-}
-
-denoCore.setPromiseRejectCallback((_type, _promise, reason) => {
- console.error("Rejected promise", reason)
-})
-
-reloadSearchIndex(true)
-
-runCommandGenerators();
-
-(async () => {
- await runLoop()
-})();
diff --git a/js/core/src/internal-all.ts b/js/core/src/internal-all.ts
new file mode 100644
index 0000000..fac9402
--- /dev/null
+++ b/js/core/src/internal-all.ts
@@ -0,0 +1,6 @@
+export {
+ run_numbat,
+ open_settings,
+ current_os,
+ wayland,
+} from "ext:core/ops";
diff --git a/js/core/src/internal-linux.ts b/js/core/src/internal-linux.ts
new file mode 100644
index 0000000..503605f
--- /dev/null
+++ b/js/core/src/internal-linux.ts
@@ -0,0 +1,9 @@
+export {
+ linux_app_from_path,
+ linux_application_dirs,
+ linux_open_application,
+ linux_x11_focus_window,
+ linux_wayland_focus_window,
+ application_x11_pending_event,
+ application_wayland_pending_event,
+} from "ext:core/ops";
diff --git a/js/core/src/internal-macos.ts b/js/core/src/internal-macos.ts
new file mode 100644
index 0000000..8bd72e2
--- /dev/null
+++ b/js/core/src/internal-macos.ts
@@ -0,0 +1,13 @@
+export {
+ macos_app_from_arbitrary_path,
+ macos_app_from_path,
+ macos_application_dirs,
+ macos_major_version,
+ macos_open_application,
+ macos_get_localized_language,
+ macos_open_setting_13_and_post,
+ macos_open_setting_pre_13,
+ macos_settings_13_and_post,
+ macos_settings_pre_13,
+ macos_system_applications,
+} from "ext:core/ops";
diff --git a/js/core/src/internal-windows.ts b/js/core/src/internal-windows.ts
new file mode 100644
index 0000000..77f40d5
--- /dev/null
+++ b/js/core/src/internal-windows.ts
@@ -0,0 +1,5 @@
+export {
+ windows_app_from_path,
+ windows_application_dirs,
+ windows_open_application
+} from "ext:core/ops";
diff --git a/js/core/src/render.tsx b/js/core/src/render.tsx
new file mode 100644
index 0000000..22936da
--- /dev/null
+++ b/js/core/src/render.tsx
@@ -0,0 +1,146 @@
+import {
+ fetch_action_id_for_shortcut,
+ op_log_trace,
+ hide_window
+} from "ext:core/ops";
+import { clearRenderer, rerender, render, popView } from "ext:gauntlet/renderer.js";
+import type { FC } from "react";
+
+let latestRootUiWidget: UiWidget | undefined = undefined
+let latestRootUiRenderLocation: RenderLocation | undefined = undefined
+
+export function renderView(entrypointId: string, entrypointName: string, View: FC) {
+ latestRootUiRenderLocation = "View";
+ latestRootUiWidget = render(entrypointId, entrypointName, "View", );
+}
+
+export function popMainView() {
+ popView()
+}
+
+export function renderInlineView(entrypointId: string, entrypointName: string, Handler: FC<{ text: string }>, text: string) {
+ switch (latestRootUiRenderLocation) {
+ case "InlineView": {
+ rerender();
+ break
+ }
+ default: {
+ latestRootUiRenderLocation = "InlineView";
+ latestRootUiWidget = render(entrypointId, entrypointName, "InlineView", );
+ break
+ }
+ }
+}
+
+export function closeView() {
+ latestRootUiRenderLocation = undefined;
+ clearRenderer()
+}
+
+export async function handlePluginViewKeyboardEvent(entrypointId: string, key: string, modifierShift: boolean, modifierControl: boolean, modifierAlt: boolean, modifierMeta: boolean) {
+ if (latestRootUiWidget) {
+ const actionHandlers = findAllActionHandlers(latestRootUiWidget);
+
+ const id = await fetch_action_id_for_shortcut(entrypointId, key, modifierShift, modifierControl, modifierAlt, modifierMeta);
+
+ if (id) {
+ const actionHandler = actionHandlers.find(value => value.id === id);
+
+ if (actionHandler) {
+ actionHandler.onAction()
+ }
+ }
+ }
+}
+
+function findAllActionHandlers(widget: UiWidget): { id: string, onAction: () => void }[] {
+ if (widget.widgetType === "gauntlet:action") {
+ const id = widget.widgetProperties["id"];
+ const onAction = widget.widgetProperties["onAction"];
+ if (!!id && !!onAction) {
+ return [{ id, onAction }]
+ } else {
+ return []
+ }
+ }
+
+ let result: { id: string, onAction: () => void }[] = []
+ for (let widgetChild of widget.widgetChildren) {
+ const actionHandler = findAllActionHandlers(widgetChild);
+
+ result.push(...actionHandler)
+ }
+
+ return result;
+}
+
+export function handleEvent(event: ViewEvent) {
+ op_log_trace("plugin_event_handler", `Handling view event: ${Deno.inspect(event)}`);
+ op_log_trace("plugin_event_handler", `Root widget: ${Deno.inspect(latestRootUiWidget)}`);
+ if (latestRootUiWidget) {
+ const widgetWithId = findWidgetWithId(latestRootUiWidget, event.widgetId);
+ op_log_trace("plugin_event_handler", `Found widget with id ${event.widgetId}: ${Deno.inspect(widgetWithId)}`)
+
+ if (widgetWithId) {
+ const property = widgetWithId.widgetProperties[event.eventName];
+
+ op_log_trace("plugin_event_handler", `Found event handler with name ${event.eventName}: ${Deno.inspect(property)}`)
+
+ if (property) {
+ if (typeof property === "function") {
+
+ const eventArgs = event.eventArguments
+ .map(arg => {
+ switch (arg.type) {
+ case "Undefined": {
+ return undefined
+ }
+ case "Null": {
+ return null
+ }
+ case "String": {
+ return arg.value
+ }
+ case "Number": {
+ return arg.value
+ }
+ case "Bool": {
+ return arg.value
+ }
+ }
+ });
+
+ op_log_trace("plugin_event_handler", `Calling handler with arguments ${Deno.inspect(eventArgs)}`);
+
+ (async () => {
+ const result = await property(...eventArgs);
+
+ // special case for action results
+ if (event.eventName == "onAction") {
+ if (result?.close === true) {
+ hide_window()
+ }
+ }
+ })();
+ } else {
+ throw new Error(`Event handler has type ${typeof property}, but should be function`)
+ }
+ }
+ }
+ }
+}
+
+function findWidgetWithId(widget: UiWidget, widgetId: number): UiWidget | undefined {
+ if (widget.widgetId === widgetId) {
+ return widget
+ }
+
+ for (let widgetChild of widget.widgetChildren) {
+ const widgetWithId = findWidgetWithId(widgetChild, widgetId);
+ if (widgetWithId) {
+ return widgetWithId
+ }
+ }
+
+ return undefined;
+}
diff --git a/js/core/src/search-index.ts b/js/core/src/search-index.ts
index 31caaec..f7fc547 100644
--- a/js/core/src/search-index.ts
+++ b/js/core/src/search-index.ts
@@ -1,9 +1,6 @@
-import { generatedCommandSearchIndex } from "./command-generator";
-
-// @ts-expect-error does typescript support such symbol declarations?
-const denoCore: DenoCore = Deno[Deno.internal].core;
-const InternalApi = denoCore.ops;
+import { generatedEntrypointSearchIndex } from "./entrypoint-generator";
+import { reload_search_index } from "ext:core/ops";
export async function reloadSearchIndex(refreshSearchList: boolean) {
- await InternalApi.reload_search_index(generatedCommandSearchIndex(), refreshSearchList);
+ await reload_search_index(generatedEntrypointSearchIndex(), refreshSearchList);
}
\ No newline at end of file
diff --git a/js/core/tsconfig.json b/js/core/tsconfig.json
index 7f14964..7b10001 100644
--- a/js/core/tsconfig.json
+++ b/js/core/tsconfig.json
@@ -3,10 +3,10 @@
"strict": true,
"module": "ES2022",
"esModuleInterop": true,
- "target": "ES2022",
+ "target": "ESNext",
"moduleResolution": "bundler",
"jsx": "react-jsx",
- "types": ["@project-gauntlet/typings", "@project-gauntlet/deno"]
+ "types": ["@project-gauntlet/typings", "@types/deno"]
},
"lib": ["ES2020"]
}
\ No newline at end of file
diff --git a/js/core/typings/index.d.ts b/js/core/typings/index.d.ts
deleted file mode 100644
index c17ef8c..0000000
--- a/js/core/typings/index.d.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-declare module "gauntlet:renderer" {
- import { ReactNode } from "react";
-
- const render: (entrypointId: string, renderLocation: RenderLocation, component: ReactNode) => UiWidget;
- const clearRenderer: () => void;
- export { render, clearRenderer };
-}
\ No newline at end of file
diff --git a/js/deno/.gitignore b/js/deno/.gitignore
deleted file mode 100644
index 18ce544..0000000
--- a/js/deno/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-dist
-builddist
\ No newline at end of file
diff --git a/js/deno/generator/index.ts b/js/deno/generator/index.ts
deleted file mode 100644
index 8f3c6d7..0000000
--- a/js/deno/generator/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { existsSync, mkdirSync, writeFileSync } from "node:fs";
-
-// https://github.com/denoland/deno/releases/tag/v1.36.4
-const LIB_DENO_DECLARATION_URL = "https://github.com/denoland/deno/releases/download/v1.36.4/lib.deno.d.ts";
-
-const res = await fetch(LIB_DENO_DECLARATION_URL);
-const content = await res.text();
-
-const fixedContent = content.replaceAll(/\/\/\/ /g, "")
-
-const distDir = "./dist";
-if (!existsSync(distDir)) {
- mkdirSync(distDir);
-}
-
-writeFileSync(`${distDir}/lib.deno.d.ts`, fixedContent)
diff --git a/js/deno/package.json b/js/deno/package.json
deleted file mode 100644
index 910dc3a..0000000
--- a/js/deno/package.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "@project-gauntlet/deno",
- "version": "0.11.0",
- "type": "module",
- "exports": {
- ".": {
- "types": "./dist/lib.deno.d.ts"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/project-gauntlet/gauntlet.git",
- "directory": "js/deno"
- },
- "files": [
- "dist"
- ],
- "scripts": {
- "build": "npm run run-generator-source",
- "run-generator-source": "tsc --project tsconfig.json && node builddist/index.js"
- },
- "devDependencies": {
- "@types/node": "^18.17.1",
- "typescript": "^5.3.3"
- },
- "publishConfig": {
- "access": "public"
- }
-}
diff --git a/js/react/package.json b/js/react/package.json
index 5a0d165..e744a6c 100644
--- a/js/react/package.json
+++ b/js/react/package.json
@@ -5,14 +5,14 @@
"build": "rollup --config rollup.config.ts --configPlugin typescript"
},
"dependencies": {
- "react": "^18.2.0"
+ "react": "^18.3.1"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-replace": "^5.0.5",
- "@rollup/plugin-typescript": "^11.1.5",
- "rollup": "^4.3.0",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-replace": "^6.0.2",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "rollup": "^4.28.1",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
}
diff --git a/js/react/rollup.config.ts b/js/react/rollup.config.ts
index 5df2085..a24467a 100644
--- a/js/react/rollup.config.ts
+++ b/js/react/rollup.config.ts
@@ -1,6 +1,7 @@
import commonjs from '@rollup/plugin-commonjs';
import replace from "@rollup/plugin-replace";
import { defineConfig, RollupOptions } from "rollup";
+import alias from "@rollup/plugin-alias";
const fixedDevExports = `
@@ -54,9 +55,11 @@ const config = (nodeEnv: string, reactBundle: string, outDir: string): RollupOpt
dir: outDir,
format: 'esm',
},
- external: ['react'],
+ external: [/^ext:.+/],
plugins: [
- commonjs(),
+ commonjs({
+ strictRequires: "auto"
+ }),
replace({
delimiters: ['', ''],
values: {
@@ -65,7 +68,13 @@ const config = (nodeEnv: string, reactBundle: string, outDir: string): RollupOpt
// To fix exports in development bundle https://github.com/rollup/plugins/issues/1546
'export { react_development as default };': fixedDevExports,
}
- })
+ }),
+ alias({
+ entries: [
+ { find: 'react/jsx-runtime', replacement: 'ext:gauntlet/react-jsx-runtime.js' },
+ { find: 'react', replacement: 'ext:gauntlet/react.js' },
+ ]
+ }),
]
}
}
diff --git a/js/react_renderer/package.json b/js/react_renderer/package.json
index 9745046..1649ffe 100644
--- a/js/react_renderer/package.json
+++ b/js/react_renderer/package.json
@@ -5,19 +5,20 @@
"build": "tsc --noEmit && rollup --config rollup.config.ts --configPlugin typescript"
},
"dependencies": {
- "react-reconciler": "^0.29.0"
+ "react-reconciler": "^0.29.2"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-replace": "^5.0.5",
- "@rollup/plugin-typescript": "^11.1.5",
- "@types/react": "^18.2.35",
- "@types/react-reconciler": "^0.28.6",
+ "@rollup/plugin-alias": "^5.1.1",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-replace": "^6.0.2",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/deno": "^2.0.0",
+ "@types/react": "^18.3.18",
+ "@types/react-reconciler": "^0.28.9",
"@project-gauntlet/typings": "*",
- "@project-gauntlet/deno": "*",
- "rollup": "^4.3.0",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "rollup": "^4.28.1",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
}
diff --git a/js/react_renderer/rollup.config.ts b/js/react_renderer/rollup.config.ts
index 41587a3..e44ffd9 100644
--- a/js/react_renderer/rollup.config.ts
+++ b/js/react_renderer/rollup.config.ts
@@ -3,6 +3,7 @@ import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';
import replace from "@rollup/plugin-replace";
import { defineConfig, RollupOptions } from "rollup";
+import alias from '@rollup/plugin-alias';
const config = (nodeEnv: string, outDir: string): RollupOptions => {
return {
@@ -16,7 +17,7 @@ const config = (nodeEnv: string, outDir: string): RollupOptions => {
sourcemap: 'inline',
}
],
- external: ["react", "react/jsx-runtime"],
+ external: [/^ext:.+/],
plugins: [
nodeResolve(),
commonjs({
@@ -34,7 +35,13 @@ const config = (nodeEnv: string, outDir: string): RollupOptions => {
'–': "-",
'—': "-"
}
- })
+ }),
+ alias({
+ entries: [
+ { find: 'react/jsx-runtime', replacement: 'ext:gauntlet/react-jsx-runtime.js' },
+ { find: 'react', replacement: 'ext:gauntlet/react.js' },
+ ]
+ }),
]
}
}
diff --git a/js/react_renderer/src/renderer.ts b/js/react_renderer/src/renderer.ts
index cdfc2f7..c7ce931 100644
--- a/js/react_renderer/src/renderer.ts
+++ b/js/react_renderer/src/renderer.ts
@@ -1,10 +1,16 @@
import ReactReconciler, { HostConfig, OpaqueHandle } from "react-reconciler";
-import { createContext, FC, ReactNode, useContext } from 'react';
+import { createContext, ReactNode, useContext } from 'react';
import { DefaultEventPriority } from 'react-reconciler/constants';
-
-// @ts-expect-error does typescript support such symbol declarations?
-const denoCore: DenoCore = Deno[Deno.internal].core;
-const InternalApi = denoCore.ops;
+import {
+ asset_data,
+ asset_data_blocking,
+ get_entrypoint_preferences,
+ get_plugin_preferences,
+ op_component_model,
+ op_log_trace,
+ op_react_replace_view,
+ show_hud
+} from "ext:core/ops";
// Usage of MessageChannel seems to block Deno runtime from exiting
// causing plugin to be in stuck state where it is disabled but still have running runtime
@@ -41,10 +47,12 @@ class GauntletContextValue {
private _renderLocation: RenderLocation | undefined
private _rerender: ((node: ReactNode) => void) | undefined
private _entrypointId: string | undefined;
+ private _entrypointName: string | undefined;
private _clear: (() => void) | undefined;
- reset(entrypointId: string, renderLocation: RenderLocation, view: ReactNode, rerender: (node: ReactNode) => void, clear: () => void) {
+ reset(entrypointId: string, entrypointName: string, renderLocation: RenderLocation, view: ReactNode, rerender: (node: ReactNode) => void, clear: () => void) {
this._entrypointId = entrypointId
+ this._entrypointName = entrypointName
this._renderLocation = renderLocation
this._rerender = rerender
this._clear = clear
@@ -68,6 +76,10 @@ class GauntletContextValue {
return this._entrypointId!!
}
+ entrypointName = () => {
+ return this._entrypointName!!
+ }
+
rerender = (component: ReactNode) => {
this._rerender!!(component)
};
@@ -89,11 +101,11 @@ class GauntletContextValue {
};
entrypointPreferences = () => {
- return InternalApi.get_entrypoint_preferences(this.entrypointId())
+ return get_entrypoint_preferences(this.entrypointId())
}
pluginPreferences = () => {
- return InternalApi.get_plugin_preferences()
+ return get_plugin_preferences()
}
}
@@ -105,13 +117,11 @@ export function useGauntletContext() {
}
export async function getAssetData(path: string): Promise {
- const vecU8 = await InternalApi.asset_data(path);
- return new Uint8Array(vecU8).buffer; // FIXME move array creation into rust if possible
+ return await asset_data(path);
}
export function getAssetDataSync(path: string): ArrayBuffer {
- const vecU8 = InternalApi.asset_data_blocking(path);
- return new Uint8Array(vecU8).buffer;
+ return asset_data_blocking(path);
}
export function getPluginPreferences(): Record {
@@ -123,26 +133,32 @@ export function getEntrypointPreferences(): Record {
}
export function showHudWindow(display: string): void {
- InternalApi.show_hud(display)
+ show_hud(display)
}
-function createWidget(hostContext: HostContext, type: ComponentType, properties: Props, children: UiWidget[] = []): Instance {
+function createWidget(id: number | undefined, hostContext: HostContext, type: ComponentType, properties: Props, children: UiWidget[]): Instance {
const props = Object.fromEntries(
Object.entries(properties)
.filter(([key, _]) => key !== "children")
);
const instance: Instance = {
- widgetId: hostContext.nextId,
+ widgetId: id != undefined ? id : hostContext.nextId,
widgetType: type,
widgetProperties: props,
widgetChildren: children,
hostContext
};
- hostContext.nextId += 1
+
+ if (id == undefined) {
+ hostContext.nextId += 1
+ }
+
return instance
}
+const componentModel = op_component_model();
+
export const createHostConfig = (): HostConfig<
ComponentType,
PropsWithChildren,
@@ -168,9 +184,9 @@ export const createHostConfig = (): HostConfig<
hostContext: HostContext,
_internalHandle: OpaqueHandle,
): Instance => {
- InternalApi.op_log_trace("renderer_js_common", `createInstance is called, type: ${type}, props: ${Deno.inspect(props)}, rootContainer: ${Deno.inspect(rootContainer)}`)
- const instance = createWidget(hostContext, type, props)
- InternalApi.op_log_trace("renderer_js_common", `createInstance returned, widget: ${Deno.inspect(instance)}`)
+ op_log_trace("renderer_js_common", `createInstance is called, type: ${type}, props: ${Deno.inspect(props)}, rootContainer: ${Deno.inspect(rootContainer)}`)
+ const instance = createWidget(undefined, hostContext, type, props, [])
+ op_log_trace("renderer_js_common", `createInstance returned, widget: ${Deno.inspect(instance)}`)
return instance;
},
@@ -181,15 +197,15 @@ export const createHostConfig = (): HostConfig<
hostContext: HostContext,
_internalHandle: OpaqueHandle
): TextInstance => {
- InternalApi.op_log_trace("renderer_js_common", `createTextInstance is called, text: ${text}, rootContainer: ${Deno.inspect(rootContainer)}`)
- const textInstance = createWidget(hostContext, "gauntlet:text_part", { value: text })
- InternalApi.op_log_trace("renderer_js_common", `createTextInstance returned, widget: ${Deno.inspect(textInstance)}`)
+ op_log_trace("renderer_js_common", `createTextInstance is called, text: ${text}, rootContainer: ${Deno.inspect(rootContainer)}`)
+ const textInstance = createWidget(undefined, hostContext, "gauntlet:text_part", { value: text }, [])
+ op_log_trace("renderer_js_common", `createTextInstance returned, widget: ${Deno.inspect(textInstance)}`)
return textInstance;
},
appendInitialChild: (parentInstance: Instance, child: Instance | TextInstance): void => {
- InternalApi.op_log_trace("renderer_js_common", `appendInitialChild is called, parentInstance: ${Deno.inspect(parentInstance)}, child: ${Deno.inspect(child)}`)
+ op_log_trace("renderer_js_common", `appendInitialChild is called, parentInstance: ${Deno.inspect(parentInstance)}, child: ${Deno.inspect(child)}`)
parentInstance.widgetChildren.push(child)
},
@@ -201,7 +217,7 @@ export const createHostConfig = (): HostConfig<
_rootContainer: RootUiWidget,
_hostContext: HostContext
): boolean => {
- InternalApi.op_log_trace("renderer_js_common", `finalizeInitialChildren is called, instance: ${Deno.inspect(instance)}, type: ${type}, props: ${Deno.inspect(props)}`)
+ op_log_trace("renderer_js_common", `finalizeInitialChildren is called, instance: ${Deno.inspect(instance)}, type: ${type}, props: ${Deno.inspect(props)}`)
return false;
},
@@ -213,16 +229,15 @@ export const createHostConfig = (): HostConfig<
_rootContainer: RootUiWidget,
_hostContext: HostContext,
): UpdatePayload | null => {
- InternalApi.op_log_trace("renderer_js_common", `prepareUpdate is called, instance: ${Deno.inspect(instance)}, type: ${type}, oldProps: ${Deno.inspect(oldProps)}, newProps: ${Deno.inspect(newProps)}`)
+ op_log_trace("renderer_js_common", `prepareUpdate is called, instance: ${Deno.inspect(instance)}, type: ${type}, oldProps: ${Deno.inspect(oldProps)}, newProps: ${Deno.inspect(newProps)}`)
const diff = shallowDiff(oldProps, newProps);
- InternalApi.op_log_trace("renderer_js_common", `prepareUpdate shallowDiff returned: ${Deno.inspect(diff)}`)
+ op_log_trace("renderer_js_common", `prepareUpdate shallowDiff returned: ${Deno.inspect(diff)}`)
return diff;
},
shouldSetTextContent: (_type: ComponentType, _props: PropsWithChildren): boolean => {
return false;
},
getRootHostContext: (_rootContainer: RootUiWidget): HostContext | null => {
- const componentModel = InternalApi.op_component_model();
return new HostContext(1, componentModel);
},
@@ -286,55 +301,63 @@ export const createHostConfig = (): HostConfig<
keepChildren: boolean,
recyclableInstance: null | Instance,
): Instance {
- InternalApi.op_log_trace("renderer_js_persistence", `cloneInstance is called, instance: ${Deno.inspect(instance)}, updatePayload: ${Deno.inspect(updatePayload)}, type: ${type}, oldProps: ${Deno.inspect(oldProps)}, newProps: ${Deno.inspect(newProps)}, keepChildren: ${keepChildren}, recyclableInstance: ${Deno.inspect(recyclableInstance)}`)
+ op_log_trace("renderer_js_persistence", `cloneInstance is called, instance: ${Deno.inspect(instance)}, updatePayload: ${Deno.inspect(updatePayload)}, type: ${type}, oldProps: ${Deno.inspect(oldProps)}, newProps: ${Deno.inspect(newProps)}, keepChildren: ${keepChildren}, recyclableInstance: ${Deno.inspect(recyclableInstance)}`)
+
+ const recyclableId = recyclableInstance != null ? recyclableInstance.widgetId : undefined;
let clonedInstance: Instance;
if (keepChildren) {
if (updatePayload !== null) {
- clonedInstance = createWidget(instance.hostContext, type, newProps, instance.widgetChildren)
+ clonedInstance = createWidget(recyclableId, instance.hostContext, type, newProps, instance.widgetChildren)
} else {
- clonedInstance = createWidget(instance.hostContext, type, oldProps, instance.widgetChildren)
+ clonedInstance = createWidget(recyclableId, instance.hostContext, type, oldProps, instance.widgetChildren)
}
} else {
if (updatePayload !== null) {
- clonedInstance = createWidget(instance.hostContext, type, newProps, [])
+ clonedInstance = createWidget(recyclableId, instance.hostContext, type, newProps, [])
} else {
- clonedInstance = createWidget(instance.hostContext, type, oldProps, [])
+ clonedInstance = createWidget(recyclableId, instance.hostContext, type, oldProps, [])
}
}
- InternalApi.op_log_trace("renderer_js_persistence", `cloneInstance returned, widget: ${Deno.inspect(clonedInstance)}`)
+ op_log_trace("renderer_js_persistence", `cloneInstance returned, widget: ${Deno.inspect(clonedInstance)}`)
return clonedInstance;
},
createContainerChildSet(container: RootUiWidget): ChildSet {
- InternalApi.op_log_trace("renderer_js_persistence", `createContainerChildSet is called, container: ${Deno.inspect(container)}`)
+ op_log_trace("renderer_js_persistence", `createContainerChildSet is called, container: ${Deno.inspect(container)}`)
return []
},
appendChildToContainerChildSet(childSet: ChildSet, child: Instance | TextInstance): void {
- InternalApi.op_log_trace("renderer_js_persistence", `appendChildToContainerChildSet is called, childSet: ${Deno.inspect(childSet)}, child: ${Deno.inspect(child)}`)
+ op_log_trace("renderer_js_persistence", `appendChildToContainerChildSet is called, childSet: ${Deno.inspect(childSet)}, child: ${Deno.inspect(child)}`)
childSet.push(child);
},
finalizeContainerChildren(container: RootUiWidget, newChildren: ChildSet): void {
- InternalApi.op_log_trace("renderer_js_persistence", `finalizeContainerChildren is called, container: ${Deno.inspect(container)}, newChildren: ${Deno.inspect(newChildren)}`)
+ op_log_trace("renderer_js_persistence", `finalizeContainerChildren is called, container: ${Deno.inspect(container)}, newChildren: ${Deno.inspect(newChildren)}`)
},
replaceContainerChildren(container: RootUiWidget, newChildren: ChildSet): void {
- // InternalApi.op_log_info("renderer_js_persistence", `replaceContainerChildren is called, container: ${Deno.inspect(container)}, newChildren: ${Deno.inspect(newChildren, { depth: Number.MAX_VALUE })}`)
+ // op_log_info("renderer_js_persistence", `replaceContainerChildren is called, container: ${Deno.inspect(container)}, newChildren: ${Deno.inspect(newChildren, { depth: Number.MAX_VALUE })}`)
container.widgetChildren = newChildren
const containerComponent = { content: newChildren.map(value => convertComponents(value)) }
- // InternalApi.op_log_info("renderer_js_persistence", `Converted container: ${Deno.inspect(containerComponent, { depth: Number.MAX_VALUE })}`)
+ // op_log_info("renderer_js_persistence", `Converted container: ${Deno.inspect(containerComponent, { depth: Number.MAX_VALUE })}`)
- InternalApi.op_react_replace_view(gauntletContextValue.renderLocation(), gauntletContextValue.isBottommostView(), gauntletContextValue.entrypointId(), containerComponent)
+ op_react_replace_view(
+ gauntletContextValue.renderLocation(),
+ gauntletContextValue.isBottommostView(),
+ gauntletContextValue.entrypointId(),
+ gauntletContextValue.entrypointName(),
+ containerComponent
+ )
},
cloneHiddenInstance(
@@ -357,23 +380,21 @@ export const createHostConfig = (): HostConfig<
});
-function convertComponents(widget: UiWidget): any {
- const component: any = {
- __id__: widget.widgetId,
- __type__: widget.widgetType,
- ...widget.widgetProperties
- }
+function convertComponents(widget: UiWidget): any {
+ const widgetProperties = Object.fromEntries(
+ Object.entries(widget.widgetProperties)
+ .filter(([_, value]) => typeof value !== "function")
+ );
- for (const [name, value] of Object.entries(component)) {
- if (typeof value === "function") {
- delete component[name]
- }
- }
-
- component.content = widget.widgetChildren
+ const widgetChildren = widget.widgetChildren
.map(child => convertComponents(child))
- return component
+ return {
+ widgetId: widget.widgetId,
+ widgetType: widget.widgetType,
+ widgetProperties: widgetProperties,
+ widgetChildren: widgetChildren,
+ }
}
function shallowDiff(oldObj: Record, newObj: Record): string[] | null {
@@ -395,7 +416,7 @@ const createTracedHostConfig = (hostConfig: any) => new Proxy(hostConfig, {
return function _noop(...args: any[]) {
console.log('MethodTrace Stub:', propKey, ...args.map(function (arg) {
- return Deno.inspect(arg, {depth: 1});
+ return Deno.inspect(arg, { depth: 1 });
}));
}
}
@@ -403,7 +424,7 @@ const createTracedHostConfig = (hostConfig: any) => new Proxy(hostConfig, {
if (typeof f === 'function') {
return function _traced(this: any, ...args: any[]) {
console.log('MethodTrace:', propKey, ...args.map(function (arg) {
- return Deno.inspect(arg, {depth: 1});
+ return Deno.inspect(arg, { depth: 1 });
}));
return f.apply(this, args);
@@ -418,7 +439,15 @@ export function clearRenderer() {
gauntletContextValue.clear()
}
-export function render(entrypointId: string, renderLocation: RenderLocation, view: ReactNode): UiWidget {
+export function rerender(view: ReactNode) {
+ gauntletContextValue.rerender(view)
+}
+
+export function popView() {
+ gauntletContextValue.popView()
+}
+
+export function render(entrypointId: string, entrypointName: string, renderLocation: RenderLocation, view: ReactNode): UiWidget {
const hostConfig = createHostConfig();
// const reconciler = ReactReconciler(createTracedHostConfig(hostConfig));
@@ -433,6 +462,7 @@ export function render(entrypointId: string, renderLocation: RenderLocation, vie
gauntletContextValue.reset(
entrypointId,
+ entrypointName,
renderLocation,
view,
(node: ReactNode) => {
diff --git a/js/react_renderer/tsconfig.json b/js/react_renderer/tsconfig.json
index 7f14964..292e4bb 100644
--- a/js/react_renderer/tsconfig.json
+++ b/js/react_renderer/tsconfig.json
@@ -3,10 +3,10 @@
"strict": true,
"module": "ES2022",
"esModuleInterop": true,
- "target": "ES2022",
+ "target": "ESNext",
"moduleResolution": "bundler",
"jsx": "react-jsx",
- "types": ["@project-gauntlet/typings", "@project-gauntlet/deno"]
+ "types": ["@project-gauntlet/typings", "@types/deno"],
},
"lib": ["ES2020"]
}
\ No newline at end of file
diff --git a/js/scenario_runner_cli/package.json b/js/scenario_runner_cli/package.json
index 09b97d8..932a58c 100644
--- a/js/scenario_runner_cli/package.json
+++ b/js/scenario_runner_cli/package.json
@@ -7,14 +7,14 @@
},
"type": "module",
"dependencies": {
- "commander": "^11.1.0"
+ "commander": "^12.1.0"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-typescript": "^11.1.5",
- "@types/node": "^18.17.1",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/node": "^22.10.2",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
}
diff --git a/js/scenario_runner_cli/src/main.ts b/js/scenario_runner_cli/src/main.ts
index bb4b93f..dc53787 100644
--- a/js/scenario_runner_cli/src/main.ts
+++ b/js/scenario_runner_cli/src/main.ts
@@ -1,7 +1,7 @@
import { Command } from 'commander';
import { spawnSync } from "node:child_process";
import path from "node:path";
-import { existsSync, readdirSync, rmSync } from "node:fs";
+import { existsSync, rmSync } from "node:fs";
const program = new Command();
@@ -10,146 +10,63 @@ program
.description('Gauntlet Scenario Runner Tool');
program.command('run-scenarios')
- .argument('[plugin]')
- .action(async (plugin) => {
- await runScenarios(plugin)
- });
-
-program.command('run-screenshot-gen')
.argument('[plugin]')
.argument('[entrypoint]')
.action(async (plugin, entrypoint) => {
- await runScreenshotGen(plugin, entrypoint)
+ await runScenarios(plugin, entrypoint)
});
await program.parseAsync(process.argv);
-async function sleep(ms: number) {
- return new Promise((r) => setTimeout(r, ms));
-}
-
-async function runScenarios(expectedPlugin: string | undefined) {
+async function runScenarios(
+ expectedPlugin: string | undefined,
+ expectedEntrypoint: string | undefined
+) {
const projectRoot = path.resolve(process.cwd(), '..', '..');
- const scenarios = path.join(projectRoot, "scenarios");
- const scenariosData = path.join(scenarios, "data");
- const scenariosRun = path.join(scenarios, "run");
-
- console.log("Building server")
- buildServer(projectRoot)
-
- console.log("Building scenario plugins")
+ console.log("Building scenario plugins...")
buildScenarioPlugins(projectRoot)
- for (const pluginName of readdirSync(scenariosData)) {
- if (expectedPlugin) {
- if (pluginName != expectedPlugin) {
- continue
- }
- }
+ console.log("Running scenario runner...")
+ const scenarios = path.join(projectRoot, "example_plugins");
+ const scenariosRun = path.join(scenarios, "run");
- console.log("Starting runner")
+ const env: Record = {
+ RUST_BACKTRACE: "1",
+ RUST_LOG: "gauntlet_server=INFO,gauntlet_client=INFO,gauntlet_scenario_runner=INFO",
+ XDG_DATA_HOME: path.join(scenariosRun, "data"),
+ XDG_CONFIG_HOME: path.join(scenariosRun, "config"),
+ XDG_CACHE_HOME: path.join(scenariosRun, "cache"),
+ XDG_STATE_HOME: path.join(scenariosRun, "state"),
+ GAUNTLET_SCENARIOS_DIR: path.join(scenarios, "scenarios"),
+ GAUNTLET_SCENARIOS_PLUGINS_DIR: path.join(scenarios, "plugins"),
+ GAUNTLET_SCENARIOS_SCREENSHOTS_DIR: path.join(scenarios, "out_screenshot"),
+ };
- const backendProcess = spawnSync('target/debug/gauntlet', {
- stdio: "inherit",
- cwd: projectRoot,
- env: Object.assign(process.env, {
- RUST_LOG: "server=info",
- GAUNTLET_SCENARIO_RUNNER_TYPE: "scenario_runner",
- GAUNTLET_SCENARIOS_DIR: scenarios,
- GAUNTLET_SCENARIO_PLUGIN_NAME: pluginName,
- XDG_DATA_HOME: path.join(scenariosRun, "data"),
- XDG_CONFIG_HOME: path.join(scenariosRun, "config"),
- XDG_CACHE_HOME: path.join(scenariosRun, "cache"),
- XDG_STATE_HOME: path.join(scenariosRun, "state"),
- })
- })
-
- if (backendProcess.status !== 0) {
- throw new Error(`Unable to run scenario runner, status: ${JSON.stringify(backendProcess)}`);
- }
-
- if (existsSync(scenariosRun)) {
- rmSync(scenariosRun, { recursive: true })
- }
-
- await sleep(1000)
+ if (expectedPlugin) {
+ env.GAUNTLET_SCENARIOS_ONLY_PLUGIN = expectedPlugin;
}
-}
-
-async function runScreenshotGen(expectedPlugin: string | undefined, expectedEntrypoint: string | undefined) {
- const projectRoot = path.resolve(process.cwd(), '..', '..');
- const scenarios = path.join(projectRoot, "scenarios");
- const scenariosOut = path.join(scenarios, "out");
-
- buildServer(projectRoot)
-
- for (const plugin of readdirSync(scenariosOut)) {
- if (expectedPlugin) {
- if (plugin != expectedPlugin) {
- continue
- }
- }
-
- const pluginDir = path.join(scenariosOut, plugin);
-
- for (const entrypoint of readdirSync(pluginDir)) {
- if (expectedEntrypoint) {
- if (entrypoint != expectedEntrypoint) {
- continue
- }
- }
-
- const entrypointDir = path.join(pluginDir, entrypoint);
-
- for (const scenario of readdirSync(entrypointDir)) {
- const scenarioFile = path.join(entrypointDir, scenario);
-
- console.log("Starting screenshot generating runner for scenario: " + scenarioFile)
-
- const scenarioName = path.parse(scenario).name;
- const entrypointName = path.parse(entrypoint).name;
-
- let scenarioNameTitle = entrypointName
- .split("-")
- .filter(x => x.length > 0)
- .map(x => (x.charAt(0).toUpperCase() + x.slice(1)))
- .join(" ");
-
- const frontendReturn = spawnSync('target/debug/gauntlet', {
- stdio: "inherit",
- cwd: projectRoot,
- env: Object.assign(process.env, {
- RUST_LOG: "client=info",
- GAUNTLET_SCENARIO_RUNNER_TYPE: "screenshot_gen",
- GAUNTLET_SCREENSHOT_GEN_IN: scenarioFile,
- GAUNTLET_SCREENSHOT_GEN_OUT: path.join(scenarios, "out-screenshot", plugin, entrypoint, scenarioName + ".png"),
- GAUNTLET_SCREENSHOT_GEN_NAME: scenarioNameTitle,
- })
- });
-
- if (frontendReturn.status !== 0) {
- throw new Error(`Unable to run frontend, status: ${JSON.stringify(frontendReturn)}`);
- }
-
- console.log("Runner exited")
- }
- }
+ if (expectedEntrypoint) {
+ env.GAUNTLET_SCENARIOS_ONLY_ENTRYPOINT = expectedEntrypoint;
}
-}
-function buildServer(projectRoot: string) {
- const serverBuildResult = spawnSync('cargo', ['build', '--features', 'scenario_runner'], {
+ const runReturn = spawnSync('cargo', ['run', '--package', 'gauntlet-scenario-runner', '--features', 'scenario_runner'], {
stdio: "inherit",
cwd: projectRoot,
- env: Object.assign(process.env, {
- RUST_BACKTRACE: "1"
- })
+ env: Object.assign(process.env, env)
});
- if (serverBuildResult.status !== 0) {
- throw new Error(`Unable to compile server, status: ${JSON.stringify(serverBuildResult)}`);
+ if (runReturn.status !== 0) {
+ throw new Error(`Unable to run scenario, status: ${JSON.stringify(runReturn)}`);
}
+
+ console.log("Runner is done, cleaning up...")
+
+ if (existsSync(scenariosRun)) {
+ rmSync(scenariosRun, { recursive: true })
+ }
+
+ console.log("Done")
}
function buildScenarioPlugins(projectRoot: string) {
diff --git a/js/typings/index.d.ts b/js/typings/index.d.ts
index c190871..afa8470 100644
--- a/js/typings/index.d.ts
+++ b/js/typings/index.d.ts
@@ -1,15 +1,51 @@
// js runtime types
-interface DenoCore {
- opAsync: (op: "op_plugin_get_pending_event") => Promise
- setPromiseRejectCallback: (cb: PromiseRejectCallback) => undefined | PromiseRejectCallback;
- ops: InternalApi
+type DesktopPathAction = DesktopPathActionAdd | DesktopPathActionRemove
+
+type DesktopPathActionAdd = {
+ type: "add",
+ id: string,
+ data: DATA
}
-type PromiseRejectCallback = (type: number, promise: Promise, reason: any) => void;
+type DesktopPathActionRemove = {
+ type: "remove"
+ id: string
+}
-type PluginEvent = ViewEvent | NotReactsKeyboardEvent | RunCommand | RunGeneratedCommand | OpenView | CloseView | OpenInlineView | ReloadSearchIndex | RefreshSearchIndex
+type LinuxDesktopApplicationData = {
+ name: string
+ icon: ArrayBuffer | undefined,
+ desktop_file_path: string,
+ startup_wm_class: string | undefined,
+}
+
+type MacOSDesktopApplicationData = {
+ name: string
+ path: string,
+ icon: ArrayBuffer | undefined,
+}
+
+type WindowsDesktopApplicationData = {
+ name: string
+ path: string,
+ icon: ArrayBuffer | undefined,
+}
+
+type MacOSDesktopSettingsPre13Data = {
+ name: string
+ path: string,
+ icon: ArrayBuffer | undefined,
+}
+
+type MacOSDesktopSettings13AndPostData = {
+ name: string
+ preferences_id: string
+ icon: ArrayBuffer | undefined,
+}
+
+type PluginEvent = ViewEvent | NotReactsKeyboardEvent | RunCommand | RunGeneratedEntrypoint | OpenView | CloseView | PopView | OpenInlineView | RefreshSearchIndex
type RenderLocation = "InlineView" | "View"
type ViewEvent = {
@@ -42,15 +78,20 @@ type CloseView = {
type: "CloseView"
}
+type PopView = {
+ type: "PopView"
+ entrypointId: string
+}
+
type RunCommand = {
type: "RunCommand"
entrypointId: string
}
-type RunGeneratedCommand = {
- type: "RunGeneratedCommand"
+type RunGeneratedEntrypoint = {
+ type: "RunGeneratedEntrypoint"
entrypointId: string
- actionIndex: number | undefined
+ actionIndex: number
}
type OpenInlineView = {
@@ -58,19 +99,16 @@ type OpenInlineView = {
text: string
}
-type ReloadSearchIndex = {
- type: "ReloadSearchIndex"
-}
-
type RefreshSearchIndex = {
type: "RefreshSearchIndex"
}
-type PropertyValue = PropertyValueString | PropertyValueNumber | PropertyValueBool | PropertyValueUndefined
+type PropertyValue = PropertyValueString | PropertyValueNumber | PropertyValueBool | PropertyValueUndefined | PropertyValueNull
type PropertyValueString = { type: "String", value: string }
type PropertyValueNumber = { type: "Number", value: number }
type PropertyValueBool = { type: "Bool", value: boolean }
type PropertyValueUndefined = { type: "Undefined" }
+type PropertyValueNull = { type: "Null" }
type UiWidget = {
widgetId: number,
@@ -82,61 +120,160 @@ type UiWidget = {
type Props = { [key: string]: any };
type PropsWithChildren = { children?: UiWidget[] } & Props;
-type AdditionalSearchItem = {
+type GeneratedEntrypointAccessory = GeneratedEntrypointTextAccessory | GeneratedEntrypointIconAccessory;
+
+interface GeneratedEntrypointTextAccessory {
+ text: string
+ icon?: string
+ tooltip?: string
+}
+
+interface GeneratedEntrypointIconAccessory {
+ icon: string
+ tooltip?: string
+}
+
+type GeneratedSearchItem = {
entrypoint_name: string,
entrypoint_id: string,
entrypoint_uuid: string,
entrypoint_icon: ArrayBuffer | undefined,
- entrypoint_actions: AdditionalSearchItemAction[],
+ entrypoint_actions: GeneratedSearchItemAction[],
+ entrypoint_accessories: GeneratedEntrypointAccessory[],
}
-type AdditionalSearchItemAction = {
+type GeneratedSearchItemAction = {
id?: string,
+ action_type: "Command" | "View"
label: string,
}
-interface InternalApi {
- op_log_trace(target: string, message: string): void;
- op_log_debug(target: string, message: string): void;
- op_log_info(target: string, message: string): void;
- op_log_warn(target: string, message: string): void;
- op_log_error(target: string, message: string): void;
+declare module "gauntlet:core" {
+ export function runPluginLoop(): Promise;
+}
- op_component_model(): Record;
- asset_data(path: string): Promise;
- asset_data_blocking(path: string): number[];
+declare module "gauntlet:bridge/internal-all" {
+ function open_settings(): void
+ function run_numbat(input: string): { left: string, right: string }
+ function current_os(): string
+ function wayland(): boolean
+}
- op_inline_view_endpoint_id(): string | null;
- clear_inline_view(): void;
+declare module "gauntlet:bridge/internal-linux" {
+ function linux_open_application(desktop_id: string): void
+ function linux_x11_focus_window(window_id: string): void
+ function linux_wayland_focus_window(window_id: string): void
+ function linux_application_dirs(): string[]
+ function linux_app_from_path(path: string): Promise>
+ function application_x11_pending_event(): Promise
+ function application_wayland_pending_event(): Promise
+}
- get_command_generator_entrypoint_ids(): Promise
+declare module "gauntlet:bridge/internal-macos" {
+ function macos_major_version(): number
+ function macos_settings_pre_13(): MacOSDesktopSettingsPre13Data[]
+ function macos_settings_13_and_post(lang: string | undefined): MacOSDesktopSettings13AndPostData[]
+ function macos_open_setting_13_and_post(preferences_id: String): void
+ function macos_open_setting_pre_13(setting_path: String): void
- get_plugin_preferences(): Record;
- get_entrypoint_preferences(entrypointId: string): Record;
- plugin_preferences_required(): Promise;
- entrypoint_preferences_required(entrypointId: string): Promise;
- show_preferences_required_view(entrypointId: string, pluginPreferencesRequired: boolean, entrypointPreferencesRequired: boolean): void;
+ function macos_system_applications(): string[]
+ function macos_application_dirs(): string[]
+ function macos_app_from_path(path: string, lang: string | undefined): Promise>
+ function macos_app_from_arbitrary_path(path: string, lang: string | undefined): Promise>
+ function macos_open_application(app_path: String): void
+ function macos_get_localized_language(): string | undefined
+}
- reload_search_index(searchItems: AdditionalSearchItem[], refreshSearchList: boolean): Promise;
+declare module "gauntlet:bridge/internal-windows" {
+ function windows_application_dirs(): string[]
+ function windows_open_application(path: string): void
+ function windows_app_from_path(path: string): Promise>
+}
- show_hud(display: string): void;
- update_loading_bar(entrypoint_id: string, show: boolean): void;
+declare module "ext:gauntlet/renderer.js" {
+ import { ReactNode } from "react";
- op_react_replace_view(render_location: RenderLocation, top_level_view: boolean, entrypoint_id: string, container: any): void;
- show_plugin_error_view(entrypoint_id: string, render_location: RenderLocation): void;
+ export const render: (entrypointId: string, entrypointName: string, renderLocation: RenderLocation, component: ReactNode) => UiWidget;
+ export const popView: () => void;
+ export const rerender: (component: ReactNode) => void;
+ export const clearRenderer: () => void;
+}
- fetch_action_id_for_shortcut(entrypointId: string, key: string, modifierShift: boolean, modifierControl: boolean, modifierAlt: boolean, modifierMeta: boolean): Promise;
+declare module "ext:core/ops" {
+ function open_settings(): void
+ function run_numbat(input: string): { left: string, right: string }
- clipboard_read(): Promise<{ text_data?: string, png_data?: Blob }>;
- clipboard_read_text(): Promise;
- clipboard_write(data: { text_data?: string, png_data?: number[] }): Promise;
- clipboard_write_text(data: string): Promise;
- clipboard_clear(): Promise;
+ function current_os(): string
+ function wayland(): boolean
+ function application_x11_pending_event(): Promise
+ function application_wayland_pending_event(): Promise
- environment_gauntlet_version(): number;
- environment_is_development(): boolean;
- environment_plugin_data_dir(): string;
- environment_plugin_cache_dir(): string;
+ function linux_open_application(desktop_id: string): void
+ function linux_x11_focus_window(window_id: string): void
+ function linux_wayland_focus_window(window_id: string): void
+ function linux_application_dirs(): string[]
+ function linux_app_from_path(path: string): Promise>
+
+ function macos_major_version(): number
+ function macos_settings_pre_13(): MacOSDesktopSettingsPre13Data[]
+ function macos_settings_13_and_post(lang: string | undefined): MacOSDesktopSettings13AndPostData[]
+ function macos_open_setting_13_and_post(preferences_id: String): void
+ function macos_open_setting_pre_13(setting_path: String): void
+
+ function macos_system_applications(): string[]
+ function macos_application_dirs(): string[]
+ function macos_app_from_path(path: string, lang: string | undefined): Promise>
+ function macos_app_from_arbitrary_path(path: string, lang: string | undefined): Promise>
+ function macos_open_application(app_path: String): void
+ function macos_get_localized_language(): string | undefined
+
+ function windows_application_dirs(): string[]
+ function windows_open_application(path: string): void
+ function windows_app_from_path(path: string): Promise>
+
+ function op_log_trace(target: string, message: string): void;
+ function op_log_debug(target: string, message: string): void;
+ function op_log_info(target: string, message: string): void;
+ function op_log_warn(target: string, message: string): void;
+ function op_log_error(target: string, message: string): void;
+
+ function op_component_model(): Record;
+ function asset_data(path: string): Promise;
+ function asset_data_blocking(path: string): ArrayBuffer;
+
+ function op_inline_view_entrypoint_id(): string | null;
+ function op_entrypoint_names(): Record;
+ function op_plugin_get_pending_event(): Promise;
+ function hide_window(): void;
+
+ function get_entrypoint_generator_entrypoint_ids(): Promise
+
+ function get_plugin_preferences(): Record;
+ function get_entrypoint_preferences(entrypointId: string): Record;
+ function plugin_preferences_required(): Promise;
+ function entrypoint_preferences_required(entrypointId: string): Promise;
+ function show_preferences_required_view(entrypointId: string, pluginPreferencesRequired: boolean, entrypointPreferencesRequired: boolean): void;
+
+ function reload_search_index(searchItems: GeneratedSearchItem[], refreshSearchList: boolean): Promise;
+
+ function show_hud(display: string): void;
+ function update_loading_bar(entrypoint_id: string, show: boolean): void;
+
+ function op_react_replace_view(render_location: RenderLocation, top_level_view: boolean, entrypoint_id: string, entrypoint_name: string, container: any): void;
+ function show_plugin_error_view(entrypoint_id: string, render_location: RenderLocation): void;
+
+ function fetch_action_id_for_shortcut(entrypointId: string, key: string, modifierShift: boolean, modifierControl: boolean, modifierAlt: boolean, modifierMeta: boolean): Promise;
+
+ function clipboard_read(): Promise<{ text_data?: string, png_data?: ArrayBuffer }>;
+ function clipboard_read_text(): Promise;
+ function clipboard_write(data: { text_data?: string, png_data?: ArrayBuffer }): Promise;
+ function clipboard_write_text(data: string): Promise;
+ function clipboard_clear(): Promise;
+
+ function environment_gauntlet_version(): number;
+ function environment_is_development(): boolean;
+ function environment_plugin_data_dir(): string;
+ function environment_plugin_cache_dir(): string;
}
// component model types
@@ -182,7 +319,7 @@ type TextPartComponent = {
type Property = {
name: string
- optional: boolean
+ optional: "no" | "yes" | "yes_but_complicated"
type: PropertyType
}
type Children = ChildrenMembers | ChildrenString | ChildrenNone | ChildrenStringOrMembers
@@ -242,3 +379,124 @@ type TypeImageArray = {
type: "array"
item: PropertyType
}
+
+type WaylandApplicationEvent = WaylandApplicationEventWindowOpened
+ | WaylandApplicationEventWindowClosed
+ | WaylandApplicationEventWindowTitleChanged
+ | WaylandApplicationEventWindowAppIdChanged
+
+type WaylandApplicationEventWindowOpened = {
+ type: "WindowOpened",
+ window_id: string,
+};
+type WaylandApplicationEventWindowClosed = {
+ type: "WindowClosed",
+ window_id: string,
+};
+type WaylandApplicationEventWindowTitleChanged = {
+ type: "WindowTitleChanged",
+ window_id: string,
+ title: string,
+};
+type WaylandApplicationEventWindowAppIdChanged = {
+ type: "WindowAppIdChanged",
+ window_id: string,
+ app_id: string,
+};
+
+type X11WindowProtocol = "DeleteWindow" | "TakeFocus"
+type X11WindowType = "DropdownMenu" | "Dialog" | "Menu" | "Notification" | "Normal" | "PopupMenu" | "Splash" | "Toolbar" | "Tooltip" | "Utility"
+type X11WindowId = string
+
+type X11ApplicationEvent = X11ApplicationEventInit
+ | X11ApplicationEventCreateNotify
+ | X11ApplicationEventDestroyNotify
+ | X11ApplicationEventMapNotify
+ | X11ApplicationEventUnmapNotify
+ | X11ApplicationEventReparentNotify
+ | X11ApplicationEventTitlePropertyNotify
+ | X11ApplicationEventClassPropertyNotify
+ | X11ApplicationEventHintsPropertyNotify
+ | X11ApplicationEventProtocolsPropertyNotify
+ | X11ApplicationEventTransientForPropertyNotify
+ | X11ApplicationEventWindowTypePropertyNotify
+ | X11ApplicationEventDesktopFileNamePropertyNotify;
+
+
+type X11ApplicationEventInit = {
+ type: "Init",
+ id: X11WindowId,
+ parent_id: X11WindowId,
+ override_redirect: boolean,
+ mapped: boolean,
+};
+
+type X11ApplicationEventCreateNotify = {
+ type: "CreateNotify",
+ id: X11WindowId,
+ parent_id: X11WindowId,
+ override_redirect: boolean,
+};
+
+type X11ApplicationEventDestroyNotify = {
+ type: "DestroyNotify",
+ id: X11WindowId,
+}
+
+type X11ApplicationEventMapNotify = {
+ type: "MapNotify",
+ id: X11WindowId,
+};
+
+type X11ApplicationEventUnmapNotify = {
+ type: "UnmapNotify",
+ id: X11WindowId,
+};
+
+type X11ApplicationEventReparentNotify = {
+ type: "ReparentNotify",
+ id: X11WindowId,
+};
+
+type X11ApplicationEventTitlePropertyNotify = {
+ type: "TitlePropertyNotify",
+ id: X11WindowId,
+ title: string
+};
+
+type X11ApplicationEventClassPropertyNotify = {
+ type: "ClassPropertyNotify",
+ id: X11WindowId,
+ class: string,
+ instance: string
+};
+
+type X11ApplicationEventHintsPropertyNotify = {
+ type: "HintsPropertyNotify",
+ id: X11WindowId,
+ window_group: X11WindowId | undefined,
+};
+
+type X11ApplicationEventProtocolsPropertyNotify = {
+ type: "ProtocolsPropertyNotify",
+ id: X11WindowId,
+ protocols: X11WindowProtocol[],
+};
+
+type X11ApplicationEventTransientForPropertyNotify = {
+ type: "TransientForPropertyNotify",
+ id: X11WindowId,
+ transient_for: X11WindowId | undefined,
+};
+
+type X11ApplicationEventWindowTypePropertyNotify = {
+ type: "WindowTypePropertyNotify",
+ id: X11WindowId,
+ window_types: X11WindowType[]
+};
+
+type X11ApplicationEventDesktopFileNamePropertyNotify = {
+ type: "DesktopFileNamePropertyNotify",
+ id: X11WindowId,
+ desktop_file_name: string
+};
diff --git a/nix/README.md b/nix/README.md
new file mode 100644
index 0000000..ce21033
--- /dev/null
+++ b/nix/README.md
@@ -0,0 +1,63 @@
+# Nix
+
+The Nix package derivation is currently defined for all [default systems](https://github.com/nix-systems/default), and it can be integrated into NixOS and Home-Manager configurations as below.
+
+## Installation
+
+Here's how to reference the package derivation (and explicitly pin it) in your `flake.nix`:
+
+``` nix
+{
+ inputs.gauntlet.url = github:project-gauntlet/gauntlet/;
+ inputs.gauntlet.inputs.nixpkgs.follows = "nixpkgs";
+}
+```
+
+The package can then be referenced directly with `gauntlet.packages.${system}.default` or integrated as an overlay with `gauntlet.overlays.default`.
+
+## Configuration
+
+Under `programs.gauntlet`, the options provide the following:
+
+1. `enable`: adds executable to system path
+2. `service.enable`: runs daemon with systemd (MacOS launchd not yet supported)
+
+The examples below assume flake inputs are passed to `nixpkgs.lib.nixosSystem` and `home-manager.lib.mkHomeManagerConfiguration` respectively as `inputs` parameter.
+
+### NixOS
+
+``` nix
+{inputs, ...}: {
+ imports = [inputs.gauntlet.nixosModules.default];
+ programs.gauntlet = {
+ enable = true;
+ service.enable = true;
+ };
+}
+```
+
+### Home-Manager
+
+Once `config.toml` is [supported](../README.md#application-config), Home-Manager can populate its contents with `programs.gauntlet.config`.
+
+``` nix
+{inputs, ...}: {
+ imports = [inputs.gauntlet.homeManagerModules.default];
+ programs.gauntlet = {
+ enable = true;
+ service.enable = true;
+ config = {};
+ };
+}
+```
+
+## Development
+
+When updating dependencies or bumping the project version, please follow these steps to adjust the relevant values at the top of `./nix/overlay.nix`:
+
+1. If `package-lock.json` has changed, set `npmDepsHash` to `""` and rebuild with `nix build`, copying the actual value back into `npmDepsHash`. This is necessary for `fetchNpmDeps` because `importNpmLock` doesn't work with `git://` dependencies like for `@project-gauntlet/tools`.
+2. If `Cargo.lock` has changed, run `nix run .#fetch-rusty-v8-hashes` and replace `RUSTY_V8_ARCHIVE` as instructed if different. Because building `librusty_v8` takes forever, we follow nixpkgs precedent and fetch binaries in a fixed-output-derivation.
+
+When making any changes to nix code, please format with `nix fmt` when done.
+
+When running the project in development, `.#devShells.default` will provide access to all repository tooling. You can access this by running `nix develop`, or `direnv allow` if you have `direnv` + `nix-direnv`.
diff --git a/nix/default.nix b/nix/default.nix
new file mode 100644
index 0000000..fcc3a82
--- /dev/null
+++ b/nix/default.nix
@@ -0,0 +1,33 @@
+{inputs, ...}: {
+ imports = [
+ ./modules/home.nix
+ ./modules/nixos.nix
+ ./overlay.nix
+ ];
+ systems = import inputs.systems;
+ perSystem = {
+ pkgs,
+ lib,
+ system,
+ ...
+ }: let
+ inherit (lib) makeBinPath makeLibraryPath optionals optionalString;
+ inherit (pkgs) alejandra cargo cmake deno gauntlet gtk3 libxkbcommon libGL mkShell nodejs pkg-config protobuf stdenv xorg wayland;
+ inherit (stdenv.hostPlatform) isLinux;
+ in {
+ _module.args.pkgs = import inputs.nixpkgs {
+ inherit system;
+ overlays = [inputs.self.overlays.default];
+ };
+ devShells.default = mkShell {
+ packages = [cargo cmake deno nodejs protobuf] ++ optionals isLinux [libxkbcommon pkg-config];
+ shellHook = optionalString isLinux ''
+ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${makeLibraryPath [libGL xorg.libX11 wayland]}"
+ export PATH="$PATH:${makeBinPath [gtk3]}"
+ '';
+ };
+ formatter = alejandra;
+ packages.default = gauntlet;
+ packages.fetch-rusty-v8-hashes = gauntlet.fetchRustyV8Hashes;
+ };
+}
diff --git a/nix/modules/common.nix b/nix/modules/common.nix
new file mode 100644
index 0000000..043fb33
--- /dev/null
+++ b/nix/modules/common.nix
@@ -0,0 +1,12 @@
+{self, ...}: {
+ lib,
+ pkgs,
+ ...
+}: {
+ options.programs.gauntlet = {
+ enable = lib.mkEnableOption "Gauntlet application launcher";
+ package = lib.mkPackageOption pkgs "gauntlet" {};
+ service.enable = lib.mkEnableOption "running Gauntlet as a service";
+ };
+ config.nixpkgs.overlays = [self.overlays.default];
+}
diff --git a/nix/modules/home.nix b/nix/modules/home.nix
new file mode 100644
index 0000000..aee1492
--- /dev/null
+++ b/nix/modules/home.nix
@@ -0,0 +1,35 @@
+flake: {
+ flake.homeManagerModules.default = {
+ config,
+ lib,
+ pkgs,
+ ...
+ }: let
+ inherit (lib) elem getExe mkIf mkMerge mkOption platforms toList types;
+ inherit (pkgs.stdenv.hostPlatform) isLinux isDarwin;
+ cfg = config.programs.gauntlet;
+ toml = pkgs.formats.toml {};
+ in {
+ imports = [(import ./common.nix flake)];
+ options.programs.gauntlet.config = mkOption {
+ inherit (toml) type;
+ default = {};
+ description = "Application configuration in config.toml";
+ };
+ config = mkIf cfg.enable {
+ home.packages = [cfg.package];
+ launchd.agents = mkIf (cfg.service.enable && isDarwin) {
+ gauntlet.enable = true;
+ gauntlet.config = {
+ RunAtLoad = true;
+ KeepAlive.Crashed = true;
+ ProgramArguments = [(getExe cfg.package) "--minimized"];
+ };
+ };
+ xdg.configFile = mkMerge [
+ (mkIf (cfg.service.enable && isLinux) {"systemd/user/gauntlet.service".source = "${cfg.package}/lib/systemd/user/gauntlet.service";})
+ (mkIf (cfg.config != {}) {"gauntlet/config.toml".source = toml.generate "gauntlet.config.toml" config.programs.gauntlet.config;})
+ ];
+ };
+ };
+}
diff --git a/nix/modules/nixos.nix b/nix/modules/nixos.nix
new file mode 100644
index 0000000..734d870
--- /dev/null
+++ b/nix/modules/nixos.nix
@@ -0,0 +1,15 @@
+flake: {
+ flake.nixosModules.default = {
+ config,
+ lib,
+ ...
+ }: let
+ cfg = config.programs.gauntlet;
+ in {
+ imports = [(import ./common.nix flake)];
+ config = lib.mkIf cfg.enable {
+ environment.systemPackages = [cfg.package];
+ systemd.packages = lib.mkIf cfg.service.enable [cfg.package];
+ };
+ };
+}
diff --git a/nix/overlay.nix b/nix/overlay.nix
new file mode 100644
index 0000000..95531ad
--- /dev/null
+++ b/nix/overlay.nix
@@ -0,0 +1,119 @@
+{
+ config,
+ inputs,
+ ...
+}: {
+ flake.overlays.default = final: _: let
+ version = "v${builtins.readFile ./../VERSION}";
+ # These must be updated following the instructions in ./nix/README.md when dependencies are updated or the version bumped
+ npmDepsHash = "sha256-CrQeEFpyKiYOTuNg6lZz7HwF1EEM4zV2iXse5UcKSFY=";
+ RUSTY_V8_ARCHIVE = fetchRustyV8 "137.2.0" {
+ aarch64-darwin = "sha256-fgmFCBPeD7u9qXcVjgCO1oTr1mXLrtvqy4rMftZO0iE=";
+ aarch64-linux = "sha256-0+2QcsjAx80Ethrulnp0nDQRphkuaDfuaW5GkIxWmb8=";
+ x86_64-darwin = "sha256-p+B1tpPImRJt9R+TJpuUhiX7Q8dh7emf/Hca8K18Zh8=";
+ x86_64-linux = "sha256-9M67FZ4TzjoiGL73B8Jtwn38lW521yCLIqyvGzYCc50=";
+ };
+ inherit
+ (final)
+ # Libraries
+ lib
+ stdenv
+ # Builders
+ buildPackages
+ fetchurl
+ fetchNpmDeps
+ makeWrapper
+ writeShellScriptBin
+ # Packages
+ cmake
+ deno
+ gtk3
+ libxkbcommon
+ libGL
+ xorg
+ nodejs
+ openssl
+ pkg-config
+ protobuf
+ wayland
+ yq
+ rustPlatform
+ ;
+ inherit (buildPackages.npmHooks.override {inherit nodejs;}) npmConfigHook;
+ inherit (lib) concatStringsSep getExe' makeBinPath makeLibraryPath optional;
+ inherit (stdenv.hostPlatform) isLinux rust system;
+ # Borrowed from other packages in nixpkgs https://github.com/search?q=repo%3ANixOS%2Fnixpkgs%20RUSTY_V8_ARCHIVE&type=code
+ buildRustyV8Url = version: target: "https://github.com/denoland/rusty_v8/releases/download/v${version}/librusty_v8_release_${target}.a.gz";
+ fetchRustyV8 = version: hashes:
+ fetchurl {
+ name = "librusty_v8-${version}";
+ url = buildRustyV8Url version rust.rustcTarget;
+ hash = hashes.${system};
+ meta.version = version;
+ meta.sourceProvenance = [lib.sourceTypes.binaryNativeCode];
+ };
+ fetchRustyV8Hashes = writeShellScriptBin "fetch-librusty_v8-hashes.sh" ''
+ version=$(${getExe' yq "tomlq"} '.package | map(select(.name == "v8")) | .[0].version' --raw-output ${inputs.self}/Cargo.lock)
+ echo "Update ./nix/overlay.nix as follows:"
+ echo "RUSTY_V8_ARCHIVE = fetchRustyV8 \"$version\" {"
+ for system in ${concatStringsSep " " config.systems}; do
+ target=$(nix eval --raw nixpkgs#legacyPackages.$system.stdenv.hostPlatform.rust.rustcTarget)
+ hash=$(nix-prefetch-url --print-path ${buildRustyV8Url "$version" "$target"} | tail -n 1 | xargs nix hash file)
+ echo " $system = \"$hash\";"
+ done
+ echo "};"
+ '';
+ pname = "gauntlet";
+ src = inputs.self;
+ cargoArtifactsArgs = {
+ inherit pname src version RUSTY_V8_ARCHIVE;
+ cargoExtraArgs = "--features release";
+ nativeBuildInputs = [cmake pkg-config protobuf rustPlatform.bindgenHook];
+ buildInputs = [openssl] ++ optional isLinux libxkbcommon;
+ # OPENSSL_CONFIG_DIR didn't work for vendored dependencies
+ OPENSSL_NO_VENDOR = true;
+ };
+ craneLib = inputs.crane.mkLib final;
+ cargoArtifacts = craneLib.buildDepsOnly cargoArtifactsArgs;
+ in {
+ gauntlet = craneLib.buildPackage {
+ inherit (cargoArtifactsArgs) cargoExtraArgs OPENSSL_NO_VENDOR RUSTY_V8_ARCHIVE;
+ inherit cargoArtifacts pname src version;
+ # fetchNpmDeps + makeCacheWritable is necessary with npm git:// dependencies
+ npmDeps = fetchNpmDeps {
+ inherit src;
+ name = "${pname}-${version}-npm-deps";
+ hash = npmDepsHash;
+ };
+ makeCacheWritable = true;
+ nativeBuildInputs = cargoArtifactsArgs.nativeBuildInputs ++ [nodejs npmConfigHook] ++ optional isLinux makeWrapper;
+ buildInputs = cargoArtifactsArgs.buildInputs ++ [deno];
+ preBuild = "npm run build";
+ postInstall =
+ if isLinux
+ then ''
+ install -Dm644 assets/linux/gauntlet.desktop $out/share/applications/gauntlet.desktop
+ install -Dm644 assets/linux/gauntlet.service $out/lib/systemd/user/gauntlet.service
+ install -Dm644 assets/linux/icon_256.png $out/share/icons/hicolor/256x256/apps/gauntlet.png
+ ''
+ else ''
+ contentsDir=$out/Applications/Gauntlet.app/Contents
+ install -Dm755 $out/bin/gauntlet $contentsDir/MacOS/Gauntlet
+ install -Dm644 assets/macos/AppIcon.icns $contentsDir/Resources/AppIcon.icns
+ install -Dm644 assets/macos/Info.plist $contentsDir/Info.plist
+ '';
+ postFixup =
+ if isLinux
+ then ''
+ patchelf --add-rpath ${makeLibraryPath [libGL xorg.libX11 wayland]} $out/bin/gauntlet
+ wrapProgram $out/bin/gauntlet --suffix PATH : ${makeBinPath [gtk3]}
+ substituteInPlace $out/lib/systemd/user/gauntlet.service --replace /usr/bin/gauntlet $out/bin/gauntlet
+ ''
+ else ''
+ substituteInPlace $out/Applications/Gauntlet.app/Contents/Info.plist --replace __VERSION__ ${version}
+ '';
+ passthru = {inherit fetchRustyV8Hashes;};
+ meta.mainProgram = "gauntlet";
+ };
+ };
+}
diff --git a/package-lock.json b/package-lock.json
index d791e13..74b0da5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,18 +6,17 @@
"": {
"name": "project-gauntlet",
"workspaces": [
- "tools",
"dev_plugin",
"bundled_plugins/*",
- "scenarios/plugins/*",
+ "example_plugins/plugins/*",
"js/typings",
"js/build",
"js/api_build",
- "js/deno",
"js/api",
"js/react",
"js/core",
"js/react_renderer",
+ "js/bridge_build",
"js/scenario_runner_cli"
]
},
@@ -25,168 +24,660 @@
"name": "@project-gauntlet/bundled-plugin",
"dependencies": {
"@project-gauntlet/api": "file:../../js/api",
- "@std/async": "npm:@jsr/std__async@^1.0.8",
- "@std/fs": "npm:@jsr/std__fs@^1.0.5"
+ "@std/async": "npm:@jsr/std__async@^1.0.9",
+ "@std/fs": "npm:@jsr/std__fs@^1.0.8"
},
"devDependencies": {
- "@project-gauntlet/deno": "file:../../js/deno",
- "@project-gauntlet/tools": "file:../../tools",
- "@types/react": "^18.2.14",
- "typescript": "^5.3.3"
+ "@project-gauntlet/tools": "git://github.com/project-gauntlet/tools.git#6b77be418d6eb48c4139979ff1b8d0350c5b5268",
+ "@types/deno": "^2.0.0",
+ "@types/react": "^18.3.18",
+ "typescript": "^5.7.2"
}
},
"dev_plugin": {
"name": "@project-gauntlet/dev-plugin",
"dependencies": {
"@project-gauntlet/api": "file:../js/api",
- "@types/lodash": "^4.14.196",
+ "@types/lodash": "^4.17.13",
"lodash": "^4.17.21"
},
"devDependencies": {
- "@project-gauntlet/deno": "file:../js/deno",
- "@project-gauntlet/tools": "file:../tools",
- "@types/react": "^18.2.14",
- "typescript": "^5.3.3"
+ "@project-gauntlet/tools": "git://github.com/project-gauntlet/tools.git#6b77be418d6eb48c4139979ff1b8d0350c5b5268",
+ "@types/deno": "^2.0.0",
+ "@types/react": "^18.3.18",
+ "typescript": "^5.7.2"
}
},
+ "example_plugins/js/api": {},
+ "example_plugins/plugins/command": {
+ "name": "@project-gauntlet/docs-command",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/command_environment": {
+ "name": "@project-gauntlet/docs-command-environment",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/command_environment/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/command/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/entrypoint_generator_accessories": {
+ "name": "@project-gauntlet/docs-entrypoint-generator-accessories",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/entrypoint_generator_accessories/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/entrypoint_generator_action_shortcut": {
+ "name": "@project-gauntlet/docs-entrypoint-generator-action-shortcuts",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/entrypoint_generator_action_shortcut/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/entrypoint_generator_fs_events": {
+ "name": "@project-gauntlet/docs-entrypoint-generator-fs-events",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/entrypoint_generator_fs_events/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/entrypoint_generator_icons": {
+ "name": "@project-gauntlet/docs-entrypoint-generator",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/entrypoint_generator_icons/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/entrypoint_generator_preferences": {
+ "name": "@project-gauntlet/docs-entrypoint-generator-preferences",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/entrypoint_generator_preferences/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/entrypoint_generator_simple": {
+ "name": "@project-gauntlet/docs-entrypoint-generator-simple",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/entrypoint_generator_simple/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_action_panel": {
+ "name": "@project-gauntlet/ui-action-panel",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_action_panel/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_clipboard": {
+ "name": "@project-gauntlet/docs-clipboard",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_clipboard/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_detail": {
+ "name": "@project-gauntlet/docs-detail",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_detail/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_form": {
+ "name": "@project-gauntlet/docs-form",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_form/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_grid": {
+ "name": "@project-gauntlet/docs-grid",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_grid/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_icons_and_images": {
+ "name": "@project-gauntlet/ui-icons-and-images",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_icons_and_images/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_code_block": {
+ "name": "@project-gauntlet/docs-inline-code-block",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_code_block/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_header": {
+ "name": "@project-gauntlet/docs-inline-header",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_header/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_horizontal_break": {
+ "name": "@project-gauntlet/docs-inline-horizontal-break",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_horizontal_break/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_image": {
+ "name": "@project-gauntlet/docs-inline-image",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_image/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_main": {
+ "name": "@project-gauntlet/docs-inline-main",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_main/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_paragraph": {
+ "name": "@project-gauntlet/docs-inline-paragraph",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_paragraph/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_separator": {
+ "name": "@project-gauntlet/docs-inline-separator",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_separator/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_svg": {
+ "name": "@project-gauntlet/docs-inline-svg",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_svg/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_three_sections": {
+ "name": "@project-gauntlet/docs-inline-three-sections",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_three_sections/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_inline_two_sections": {
+ "name": "@project-gauntlet/docs-inline-two-sections",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_inline_two_sections/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_list": {
+ "name": "@project-gauntlet/docs-list",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_list/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_navigation": {
+ "name": "@project-gauntlet/ui-navigation",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_navigation/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_preferences": {
+ "name": "@project-gauntlet/ui-preferences",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_preferences/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_promise_helpers": {
+ "name": "@project-gauntlet/docs-ui-promise-helpers",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_promise_helpers/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
+ "example_plugins/plugins/ui_storage": {
+ "name": "@project-gauntlet/ui-storage",
+ "dependencies": {
+ "@project-gauntlet/api": "file:../../js/api"
+ },
+ "devDependencies": {
+ "@project-gauntlet/tools": "*",
+ "@types/deno": "*",
+ "@types/react": "*",
+ "typescript": "*"
+ }
+ },
+ "example_plugins/plugins/ui_storage/node_modules/@project-gauntlet/api": {
+ "resolved": "example_plugins/js/api",
+ "link": true
+ },
"js/api": {
"name": "@project-gauntlet/api",
- "version": "0.11.0",
+ "version": "0.0.0",
"devDependencies": {
"@project-gauntlet/typings": "*",
- "typescript": "^5.3.3"
+ "@rollup/plugin-alias": "^5.1.1",
+ "@types/react": "^18.3.18",
+ "glob": "^11.0.0",
+ "rollup": "^4.28.1",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
},
"js/api_build": {
"name": "@project-gauntlet/api-build",
"version": "0.1.0",
"devDependencies": {
- "@types/node": "^18.17.1",
- "typescript": "^5.3.3"
+ "@types/node": "^22.10.2",
+ "typescript": "^5.7.2"
+ }
+ },
+ "js/bridge_build": {
+ "name": "@project-gauntlet/bridge-build",
+ "version": "0.1.0",
+ "devDependencies": {
+ "@types/node": "^22.10.2",
+ "typescript": "^5.7.2"
}
},
"js/build": {
"name": "@project-gauntlet/build",
"dependencies": {
- "@actions/core": "^1.10.1",
- "commander": "^11.1.0",
- "cross-spawn": "^7.0.3",
- "octokit": "^3.1.2",
- "simple-git": "^3.22.0"
+ "@actions/core": "^1.11.1",
+ "commander": "^12.1.0",
+ "cross-spawn": "^7.0.6",
+ "octokit": "^4.0.2",
+ "simple-git": "^3.27.0"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-typescript": "^11.1.5",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-typescript": "^12.1.2",
"@types/cross-spawn": "^6.0.6",
- "@types/node": "^18.17.1",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "@types/node": "^22.10.2",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
},
"js/core": {
"name": "@project-gauntlet/core",
"devDependencies": {
"@project-gauntlet/api": "*",
- "@project-gauntlet/deno": "*",
"@project-gauntlet/typings": "*",
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-typescript": "^11.1.5",
- "@types/react": "^18.2.35",
- "rollup": "^4.3.0",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
- }
- },
- "js/deno": {
- "name": "@project-gauntlet/deno",
- "version": "0.11.0",
- "devDependencies": {
- "@types/node": "^18.17.1",
- "typescript": "^5.3.3"
+ "@rollup/plugin-alias": "^5.1.1",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/deno": "^2.0.0",
+ "@types/react": "^18.3.18",
+ "rollup": "^4.28.1",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
},
"js/react": {
"name": "@project-gauntlet/react",
"dependencies": {
- "react": "^18.2.0"
+ "react": "^18.3.1"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-replace": "^5.0.5",
- "@rollup/plugin-typescript": "^11.1.5",
- "rollup": "^4.3.0",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-replace": "^6.0.2",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "rollup": "^4.28.1",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
},
"js/react_renderer": {
"name": "@project-gauntlet/react-renderer",
"dependencies": {
- "react-reconciler": "^0.29.0"
+ "react-reconciler": "^0.29.2"
},
"devDependencies": {
- "@project-gauntlet/deno": "*",
"@project-gauntlet/typings": "*",
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-replace": "^5.0.5",
- "@rollup/plugin-typescript": "^11.1.5",
- "@types/react": "^18.2.35",
- "@types/react-reconciler": "^0.28.6",
- "rollup": "^4.3.0",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "@rollup/plugin-alias": "^5.1.1",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-replace": "^6.0.2",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/deno": "^2.0.0",
+ "@types/react": "^18.3.18",
+ "@types/react-reconciler": "^0.28.9",
+ "rollup": "^4.28.1",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
},
"js/scenario_runner_cli": {
"name": "@project-gauntlet/scenario-runner-cli",
"dependencies": {
- "commander": "^11.1.0"
+ "commander": "^12.1.0"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.7",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "@rollup/plugin-typescript": "^11.1.5",
- "@types/node": "^18.17.1",
- "tslib": "^2.6.2",
- "typescript": "^5.3.3"
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-typescript": "^12.1.2",
+ "@types/node": "^22.10.2",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2"
}
},
"js/typings": {
"name": "@project-gauntlet/typings"
},
"node_modules/@actions/core": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz",
- "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz",
+ "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==",
+ "license": "MIT",
"dependencies": {
- "@actions/http-client": "^2.0.1",
- "uuid": "^8.3.2"
+ "@actions/exec": "^1.1.1",
+ "@actions/http-client": "^2.0.1"
+ }
+ },
+ "node_modules/@actions/exec": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
+ "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
+ "license": "MIT",
+ "dependencies": {
+ "@actions/io": "^1.0.1"
}
},
"node_modules/@actions/http-client": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz",
- "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.3.tgz",
+ "integrity": "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==",
+ "license": "MIT",
"dependencies": {
"tunnel": "^0.0.6",
"undici": "^5.25.4"
}
},
+ "node_modules/@actions/io": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz",
+ "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==",
+ "license": "MIT"
+ },
"node_modules/@fastify/busboy": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
"integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "license": "MIT",
"engines": {
"node": ">=14"
}
},
"node_modules/@grpc/grpc-js": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.1.tgz",
- "integrity": "sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==",
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz",
+ "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@grpc/proto-loader": "^0.7.13",
"@js-sdsl/ordered-map": "^4.4.2"
@@ -196,9 +687,11 @@
}
},
"node_modules/@grpc/proto-loader": {
- "version": "0.7.13",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz",
- "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==",
+ "version": "0.7.15",
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz",
+ "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"lodash.camelcase": "^4.3.0",
"long": "^5.0.0",
@@ -212,10 +705,35 @@
"node": ">=6"
}
},
+ "node_modules/@isaacs/balanced-match": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
+ "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/@isaacs/brace-expansion": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
+ "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@isaacs/balanced-match": "^4.0.1"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -228,102 +746,34 @@
"node": ">=12"
}
},
- "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@js-sdsl/ordered-map": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz",
"integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==",
+ "dev": true,
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/js-sdsl"
}
},
"node_modules/@jsr/std__path": {
- "version": "1.0.8",
- "resolved": "https://npm.jsr.io/~/11/@jsr/std__path/1.0.8.tgz",
- "integrity": "sha512-eNBGlh/8ZVkMxtFH4bwIzlAeKoHYk5in4wrBZhi20zMdOiuX4QozP4+19mIXBT2lzHDjhuVLyECbhFeR304iDg=="
+ "version": "1.1.0",
+ "resolved": "https://npm.jsr.io/~/11/@jsr/std__path/1.1.0.tgz",
+ "integrity": "sha512-rnxGg/nJGfDbJO+xIJ9YEzLD7dCzjr3NHShf4dbnlt44WEYNwMjg+TcDO6F2NPHBnn/6iUFwbnNzysrZvyD1Og=="
},
"node_modules/@kwsites/file-exists": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
"integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
"dependencies": {
"debug": "^4.1.1"
}
@@ -331,673 +781,360 @@
"node_modules/@kwsites/promise-deferred": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
- "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
},
"node_modules/@mstssk/cleandir": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@mstssk/cleandir/-/cleandir-1.2.1.tgz",
- "integrity": "sha512-n/62eVEJOBb3CI1Y4r/IOLzvXoI0/MxGGOryT7UGF2C2WSXV3HozwrowqtHoDDbLmWIw+HJbuHZl9vledmGpoQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@mstssk/cleandir/-/cleandir-2.0.0.tgz",
+ "integrity": "sha512-CidYeaV4VQLIMbZlYqs0SJaZe/DyI0E4nsbFmPtCa2koKzMjZj/BThTCb+bvzcGhzp2A4Js1c4jDg6lqaqapyQ==",
+ "dev": true,
+ "license": "MIT",
"bin": {
"cleandir": "bin/cleandir.js"
}
},
- "node_modules/@node-kit/extra.fs": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@node-kit/extra.fs/-/extra.fs-3.2.0.tgz",
- "integrity": "sha512-BtGZcB4ffMneAyKd2qy0umOURc7kMjgNOQlEQNqgkQwcwoGejqiJLQpzKVhAr2waBx7OLZx+/3sNzGgngSzx7w==",
- "dev": true
- },
- "node_modules/@node-kit/lerna-workspace-root": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@node-kit/lerna-workspace-root/-/lerna-workspace-root-3.2.0.tgz",
- "integrity": "sha512-z9yfrFJzFuib4Pz1fU6tn6YmKhrISpopbKJsh8BfMXYmKRF4/8Td2JPfNIubAN2rlG3F3hSO4VPCDRwHNaKOhg==",
- "dev": true,
- "dependencies": {
- "@node-kit/extra.fs": "3.2.0",
- "find-up": "^5.0.0"
- }
- },
- "node_modules/@node-kit/lerna-workspace-root/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/lerna-workspace-root/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/lerna-workspace-root/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/lerna-workspace-root/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/pnpm-workspace-root": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@node-kit/pnpm-workspace-root/-/pnpm-workspace-root-3.2.0.tgz",
- "integrity": "sha512-+6/4wT34/iipIaFc9P2dYxRNdfrcUULDERnWd+xdLjP4K2VyPRpx/E83BQ1eXhuuNtvevKI5yOxIR03+gb97ZA==",
- "dev": true,
- "dependencies": {
- "@node-kit/extra.fs": "3.2.0",
- "@pnpm/error": "^5.0.2",
- "find-up": "^5.0.0"
- }
- },
- "node_modules/@node-kit/pnpm-workspace-root/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/pnpm-workspace-root/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/pnpm-workspace-root/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/pnpm-workspace-root/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/yarn-workspace-root": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@node-kit/yarn-workspace-root/-/yarn-workspace-root-3.2.0.tgz",
- "integrity": "sha512-CJmCTaM0Goi9bRL4gfFxx1INxU9ETyqcnPGFoOMIHCyxJYRpB5C+C3x4BNWsBsBErdZ+BoyvgLsPj6jukCnFFQ==",
- "dev": true,
- "dependencies": {
- "@node-kit/extra.fs": "3.2.0",
- "find-up": "^5.0.0",
- "micromatch": "^4.0.5"
- }
- },
- "node_modules/@node-kit/yarn-workspace-root/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/yarn-workspace-root/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/yarn-workspace-root/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@node-kit/yarn-workspace-root/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/@octokit/app": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.1.0.tgz",
- "integrity": "sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==",
+ "version": "15.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/app/-/app-15.1.6.tgz",
+ "integrity": "sha512-WELCamoCJo9SN0lf3SWZccf68CF0sBNPQuLYmZ/n87p5qvBJDe9aBtr5dHkh7T9nxWZ608pizwsUbypSzZAiUw==",
+ "license": "MIT",
"dependencies": {
- "@octokit/auth-app": "^6.0.0",
- "@octokit/auth-unauthenticated": "^5.0.0",
- "@octokit/core": "^5.0.0",
- "@octokit/oauth-app": "^6.0.0",
- "@octokit/plugin-paginate-rest": "^9.0.0",
- "@octokit/types": "^12.0.0",
- "@octokit/webhooks": "^12.0.4"
+ "@octokit/auth-app": "^7.2.1",
+ "@octokit/auth-unauthenticated": "^6.1.3",
+ "@octokit/core": "^6.1.5",
+ "@octokit/oauth-app": "^7.1.6",
+ "@octokit/plugin-paginate-rest": "^12.0.0",
+ "@octokit/types": "^14.0.0",
+ "@octokit/webhooks": "^13.6.1"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/auth-app": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.1.1.tgz",
- "integrity": "sha512-VrTtzRpyuT5nYGUWeGWQqH//hqEZDV+/yb6+w5wmWpmmUA1Tx950XsAc2mBBfvusfcdF2E7w8jZ1r1WwvfZ9pA==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-7.2.1.tgz",
+ "integrity": "sha512-4jaopCVOtWN0V8qCx/1s2pkRqC6tcvIQM3kFB99eIpsP53GfsoIKO08D94b83n/V3iGihHmxWR2lXzE0NicUGg==",
+ "license": "MIT",
"dependencies": {
- "@octokit/auth-oauth-app": "^7.1.0",
- "@octokit/auth-oauth-user": "^4.1.0",
- "@octokit/request": "^8.3.1",
- "@octokit/request-error": "^5.1.0",
- "@octokit/types": "^13.1.0",
- "deprecation": "^2.3.1",
- "lru-cache": "^10.0.0",
- "universal-github-app-jwt": "^1.1.2",
- "universal-user-agent": "^6.0.0"
+ "@octokit/auth-oauth-app": "^8.1.4",
+ "@octokit/auth-oauth-user": "^5.1.4",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "toad-cache": "^3.7.0",
+ "universal-github-app-jwt": "^2.2.0",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
- "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/@octokit/auth-app/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
"node_modules/@octokit/auth-oauth-app": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz",
- "integrity": "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==",
+ "version": "8.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-8.1.4.tgz",
+ "integrity": "sha512-71iBa5SflSXcclk/OL3lJzdt4iFs56OJdpBGEBl1wULp7C58uiswZLV6TdRaiAzHP1LT8ezpbHlKuxADb+4NkQ==",
+ "license": "MIT",
"dependencies": {
- "@octokit/auth-oauth-device": "^6.1.0",
- "@octokit/auth-oauth-user": "^4.1.0",
- "@octokit/request": "^8.3.1",
- "@octokit/types": "^13.0.0",
- "@types/btoa-lite": "^1.0.0",
- "btoa-lite": "^1.0.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/auth-oauth-device": "^7.1.5",
+ "@octokit/auth-oauth-user": "^5.1.4",
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
- "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
"node_modules/@octokit/auth-oauth-device": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz",
- "integrity": "sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==",
+ "version": "7.1.5",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.5.tgz",
+ "integrity": "sha512-lR00+k7+N6xeECj0JuXeULQ2TSBB/zjTAmNF2+vyGPDEFx1dgk1hTDmL13MjbSmzusuAmuJD8Pu39rjp9jH6yw==",
+ "license": "MIT",
"dependencies": {
- "@octokit/oauth-methods": "^4.1.0",
- "@octokit/request": "^8.3.1",
- "@octokit/types": "^13.0.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/oauth-methods": "^5.1.5",
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
- "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
"node_modules/@octokit/auth-oauth-user": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz",
- "integrity": "sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==",
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-5.1.6.tgz",
+ "integrity": "sha512-/R8vgeoulp7rJs+wfJ2LtXEVC7pjQTIqDab7wPKwVG6+2v/lUnCOub6vaHmysQBbb45FknM3tbHW8TOVqYHxCw==",
+ "license": "MIT",
"dependencies": {
- "@octokit/auth-oauth-device": "^6.1.0",
- "@octokit/oauth-methods": "^4.1.0",
- "@octokit/request": "^8.3.1",
- "@octokit/types": "^13.0.0",
- "btoa-lite": "^1.0.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/auth-oauth-device": "^7.1.5",
+ "@octokit/oauth-methods": "^5.1.5",
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
- "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
"node_modules/@octokit/auth-token": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz",
- "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.2.tgz",
+ "integrity": "sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==",
+ "license": "MIT",
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/auth-unauthenticated": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz",
- "integrity": "sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-6.1.3.tgz",
+ "integrity": "sha512-d5gWJla3WdSl1yjbfMpET+hUSFCE15qM0KVSB0H1shyuJihf/RL1KqWoZMIaonHvlNojkL9XtLFp8QeLe+1iwA==",
+ "license": "MIT",
"dependencies": {
- "@octokit/request-error": "^5.0.0",
- "@octokit/types": "^12.0.0"
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/core": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz",
- "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==",
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.5.tgz",
+ "integrity": "sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg==",
+ "license": "MIT",
"dependencies": {
- "@octokit/auth-token": "^4.0.0",
- "@octokit/graphql": "^7.0.0",
- "@octokit/request": "^8.0.2",
- "@octokit/request-error": "^5.0.0",
- "@octokit/types": "^12.0.0",
- "before-after-hook": "^2.2.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/auth-token": "^5.0.0",
+ "@octokit/graphql": "^8.2.2",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "before-after-hook": "^3.0.2",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/endpoint": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz",
- "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==",
+ "version": "10.1.4",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.4.tgz",
+ "integrity": "sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==",
+ "license": "MIT",
"dependencies": {
- "@octokit/types": "^12.0.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.2"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/graphql": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz",
- "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==",
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.2.tgz",
+ "integrity": "sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==",
+ "license": "MIT",
"dependencies": {
- "@octokit/request": "^8.0.1",
- "@octokit/types": "^12.0.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/request": "^9.2.3",
+ "@octokit/types": "^14.0.0",
+ "universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/oauth-app": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.1.0.tgz",
- "integrity": "sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g==",
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-7.1.6.tgz",
+ "integrity": "sha512-OMcMzY2WFARg80oJNFwWbY51TBUfLH4JGTy119cqiDawSFXSIBujxmpXiKbGWQlvfn0CxE6f7/+c6+Kr5hI2YA==",
+ "license": "MIT",
"dependencies": {
- "@octokit/auth-oauth-app": "^7.0.0",
- "@octokit/auth-oauth-user": "^4.0.0",
- "@octokit/auth-unauthenticated": "^5.0.0",
- "@octokit/core": "^5.0.0",
- "@octokit/oauth-authorization-url": "^6.0.2",
- "@octokit/oauth-methods": "^4.0.0",
+ "@octokit/auth-oauth-app": "^8.1.3",
+ "@octokit/auth-oauth-user": "^5.1.3",
+ "@octokit/auth-unauthenticated": "^6.1.2",
+ "@octokit/core": "^6.1.4",
+ "@octokit/oauth-authorization-url": "^7.1.1",
+ "@octokit/oauth-methods": "^5.1.4",
"@types/aws-lambda": "^8.10.83",
- "universal-user-agent": "^6.0.0"
+ "universal-user-agent": "^7.0.0"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/oauth-authorization-url": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz",
- "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz",
+ "integrity": "sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA==",
+ "license": "MIT",
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/oauth-methods": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz",
- "integrity": "sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==",
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-5.1.5.tgz",
+ "integrity": "sha512-Ev7K8bkYrYLhoOSZGVAGsLEscZQyq7XQONCBBAl2JdMg7IT3PQn/y8P0KjloPoYpI5UylqYrLeUcScaYWXwDvw==",
+ "license": "MIT",
"dependencies": {
- "@octokit/oauth-authorization-url": "^6.0.2",
- "@octokit/request": "^8.3.1",
- "@octokit/request-error": "^5.1.0",
- "@octokit/types": "^13.0.0",
- "btoa-lite": "^1.0.0"
+ "@octokit/oauth-authorization-url": "^7.0.0",
+ "@octokit/request": "^9.2.3",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0"
},
"engines": {
"node": ">= 18"
}
},
- "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
"node_modules/@octokit/openapi-types": {
- "version": "19.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz",
- "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw=="
+ "version": "25.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz",
+ "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==",
+ "license": "MIT"
+ },
+ "node_modules/@octokit/openapi-webhooks-types": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-11.0.0.tgz",
+ "integrity": "sha512-ZBzCFj98v3SuRM7oBas6BHZMJRadlnDoeFfvm1olVxZnYeU6Vh97FhPxyS5aLh5pN51GYv2I51l/hVUAVkGBlA==",
+ "license": "MIT"
},
"node_modules/@octokit/plugin-paginate-graphql": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz",
- "integrity": "sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A==",
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-5.2.4.tgz",
+ "integrity": "sha512-pLZES1jWaOynXKHOqdnwZ5ULeVR6tVVCMm+AUbp0htdcyXDU95WbkYdU4R2ej1wKj5Tu94Mee2Ne0PjPO9cCyA==",
+ "license": "MIT",
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@octokit/core": ">=5"
+ "@octokit/core": ">=6"
}
},
"node_modules/@octokit/plugin-paginate-rest": {
- "version": "9.1.5",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz",
- "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==",
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-12.0.0.tgz",
+ "integrity": "sha512-MPd6WK1VtZ52lFrgZ0R2FlaoiWllzgqFHaSZxvp72NmoDeZ0m8GeJdg4oB6ctqMTYyrnDYp592Xma21mrgiyDA==",
+ "license": "MIT",
"dependencies": {
- "@octokit/types": "^12.4.0"
+ "@octokit/types": "^14.0.0"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@octokit/core": ">=5"
+ "@octokit/core": ">=6"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-14.0.0.tgz",
+ "integrity": "sha512-iQt6ovem4b7zZYZQtdv+PwgbL5VPq37th1m2x2TdkgimIDJpsi2A6Q/OI/23i/hR6z5mL0EgisNR4dcbmckSZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/types": "^14.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=6"
}
},
"node_modules/@octokit/plugin-retry": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz",
- "integrity": "sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.2.1.tgz",
+ "integrity": "sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A==",
+ "license": "MIT",
"dependencies": {
- "@octokit/request-error": "^5.0.0",
- "@octokit/types": "^12.0.0",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
"bottleneck": "^2.15.3"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@octokit/core": ">=5"
+ "@octokit/core": ">=6"
}
},
"node_modules/@octokit/plugin-throttling": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz",
- "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-10.0.0.tgz",
+ "integrity": "sha512-Kuq5/qs0DVYTHZuBAzCZStCzo2nKvVRo/TDNhCcpC2TKiOGz/DisXMCvjt3/b5kr6SCI1Y8eeeJTHBxxpFvZEg==",
+ "license": "MIT",
"dependencies": {
- "@octokit/types": "^12.2.0",
+ "@octokit/types": "^14.0.0",
"bottleneck": "^2.15.3"
},
"engines": {
"node": ">= 18"
},
"peerDependencies": {
- "@octokit/core": "^5.0.0"
+ "@octokit/core": "^6.1.3"
}
},
"node_modules/@octokit/request": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz",
- "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==",
+ "version": "9.2.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.3.tgz",
+ "integrity": "sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w==",
+ "license": "MIT",
"dependencies": {
- "@octokit/endpoint": "^9.0.1",
- "@octokit/request-error": "^5.1.0",
- "@octokit/types": "^13.1.0",
- "universal-user-agent": "^6.0.0"
+ "@octokit/endpoint": "^10.1.4",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "fast-content-type-parse": "^2.0.0",
+ "universal-user-agent": "^7.0.2"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/request-error": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz",
- "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==",
+ "version": "6.1.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.8.tgz",
+ "integrity": "sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==",
+ "license": "MIT",
"dependencies": {
- "@octokit/types": "^13.1.0",
- "deprecation": "^2.0.0",
- "once": "^1.4.0"
+ "@octokit/types": "^14.0.0"
},
"engines": {
"node": ">= 18"
}
},
- "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/@octokit/request-error/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
- "node_modules/@octokit/request/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/@octokit/request/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
"node_modules/@octokit/types": {
- "version": "12.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.5.0.tgz",
- "integrity": "sha512-YJEKcb0KkJlIUNU/zjnZwHEP8AoVh/OoIcP/1IyR4UHxExz7fzpe/a8IG4wBtQi7QDEqiomVLX88S6FpxxAJtg==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz",
+ "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==",
+ "license": "MIT",
"dependencies": {
- "@octokit/openapi-types": "^19.1.0"
+ "@octokit/openapi-types": "^25.1.0"
}
},
"node_modules/@octokit/webhooks": {
- "version": "12.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.2.0.tgz",
- "integrity": "sha512-CyuLJ0/P7bKZ+kIYw+fnkeVdhUzNuDKgNSI7pU/m7Nod0T7kP+s4s2f0pNmG9HL8/RZN1S0ZWTDll3VTMrFLAw==",
+ "version": "13.9.0",
+ "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-13.9.0.tgz",
+ "integrity": "sha512-5Kva+/Gi7c+39d0/0MM/v/5RCZuwqm75fUD+t7Es3Iz/adui54GnjfNmJpkkPkXGC+5IWnEvgqwY6gstK/JlUQ==",
+ "license": "MIT",
"dependencies": {
- "@octokit/request-error": "^5.0.0",
- "@octokit/webhooks-methods": "^4.1.0",
- "@octokit/webhooks-types": "7.4.0",
- "aggregate-error": "^3.1.0"
+ "@octokit/openapi-webhooks-types": "11.0.0",
+ "@octokit/request-error": "^6.1.7",
+ "@octokit/webhooks-methods": "^5.1.1"
},
"engines": {
"node": ">= 18"
}
},
"node_modules/@octokit/webhooks-methods": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz",
- "integrity": "sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-5.1.1.tgz",
+ "integrity": "sha512-NGlEHZDseJTCj8TMMFehzwa9g7On4KJMPVHDSrHxCQumL6uSQR8wIkP/qesv52fXqV1BPf4pTxwtS31ldAt9Xg==",
+ "license": "MIT",
"engines": {
"node": ">= 18"
}
},
- "node_modules/@octokit/webhooks-types": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz",
- "integrity": "sha512-FE2V+QZ2UYlh+9wWd5BPLNXG+J/XUD/PPq0ovS+nCcGX4+3qVbi3jYOmCTW48hg9SBBLtInx9+o7fFt4H5iP0Q=="
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@pnpm/constants": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@pnpm/constants/-/constants-7.1.1.tgz",
- "integrity": "sha512-31pZqMtjwV+Vaq7MaPrT1EoDFSYwye3dp6BiHIGRJmVThCQwySRKM7hCvqqI94epNkqFAAYoWrNynWoRYosGdw==",
- "dev": true,
- "engines": {
- "node": ">=16.14"
- },
- "funding": {
- "url": "https://opencollective.com/pnpm"
- }
- },
- "node_modules/@pnpm/error": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@pnpm/error/-/error-5.0.3.tgz",
- "integrity": "sha512-ONJU5cUeoeJSy50qOYsMZQHTA/9QKmGgh1ATfEpCLgtbdwqUiwD9MxHNeXUYYI/pocBCz6r1ZCFqiQvO+8SUKA==",
- "dev": true,
- "dependencies": {
- "@pnpm/constants": "7.1.1"
- },
- "engines": {
- "node": ">=16.14"
- },
- "funding": {
- "url": "https://opencollective.com/pnpm"
- }
- },
"node_modules/@project-gauntlet/api": {
"resolved": "js/api",
"link": true
@@ -1006,6 +1143,10 @@
"resolved": "js/api_build",
"link": true
},
+ "node_modules/@project-gauntlet/bridge-build": {
+ "resolved": "js/bridge_build",
+ "link": true
+ },
"node_modules/@project-gauntlet/build": {
"resolved": "js/build",
"link": true
@@ -1018,32 +1159,104 @@
"resolved": "js/core",
"link": true
},
- "node_modules/@project-gauntlet/deno": {
- "resolved": "js/deno",
- "link": true
- },
"node_modules/@project-gauntlet/dev-plugin": {
"resolved": "dev_plugin",
"link": true
},
- "node_modules/@project-gauntlet/docs-detailt": {
- "resolved": "scenarios/plugins/docs_detail",
+ "node_modules/@project-gauntlet/docs-clipboard": {
+ "resolved": "example_plugins/plugins/ui_clipboard",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-command": {
+ "resolved": "example_plugins/plugins/command",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-command-environment": {
+ "resolved": "example_plugins/plugins/command_environment",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-detail": {
+ "resolved": "example_plugins/plugins/ui_detail",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-entrypoint-generator": {
+ "resolved": "example_plugins/plugins/entrypoint_generator_icons",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-entrypoint-generator-accessories": {
+ "resolved": "example_plugins/plugins/entrypoint_generator_accessories",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-entrypoint-generator-action-shortcuts": {
+ "resolved": "example_plugins/plugins/entrypoint_generator_action_shortcut",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-entrypoint-generator-fs-events": {
+ "resolved": "example_plugins/plugins/entrypoint_generator_fs_events",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-entrypoint-generator-preferences": {
+ "resolved": "example_plugins/plugins/entrypoint_generator_preferences",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-entrypoint-generator-simple": {
+ "resolved": "example_plugins/plugins/entrypoint_generator_simple",
"link": true
},
"node_modules/@project-gauntlet/docs-form": {
- "resolved": "scenarios/plugins/docs_form",
+ "resolved": "example_plugins/plugins/ui_form",
"link": true
},
"node_modules/@project-gauntlet/docs-grid": {
- "resolved": "scenarios/plugins/docs_grid",
+ "resolved": "example_plugins/plugins/ui_grid",
"link": true
},
- "node_modules/@project-gauntlet/docs-inline": {
- "resolved": "scenarios/plugins/docs_inline",
+ "node_modules/@project-gauntlet/docs-inline-code-block": {
+ "resolved": "example_plugins/plugins/ui_inline_code_block",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-header": {
+ "resolved": "example_plugins/plugins/ui_inline_header",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-horizontal-break": {
+ "resolved": "example_plugins/plugins/ui_inline_horizontal_break",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-image": {
+ "resolved": "example_plugins/plugins/ui_inline_image",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-main": {
+ "resolved": "example_plugins/plugins/ui_inline_main",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-paragraph": {
+ "resolved": "example_plugins/plugins/ui_inline_paragraph",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-separator": {
+ "resolved": "example_plugins/plugins/ui_inline_separator",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-svg": {
+ "resolved": "example_plugins/plugins/ui_inline_svg",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-three-sections": {
+ "resolved": "example_plugins/plugins/ui_inline_three_sections",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-inline-two-sections": {
+ "resolved": "example_plugins/plugins/ui_inline_two_sections",
"link": true
},
"node_modules/@project-gauntlet/docs-list": {
- "resolved": "scenarios/plugins/docs_list",
+ "resolved": "example_plugins/plugins/ui_list",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/docs-ui-promise-helpers": {
+ "resolved": "example_plugins/plugins/ui_promise_helpers",
"link": true
},
"node_modules/@project-gauntlet/react": {
@@ -1059,37 +1272,91 @@
"link": true
},
"node_modules/@project-gauntlet/tools": {
- "resolved": "tools",
- "link": true
+ "version": "0.9.0",
+ "resolved": "git+ssh://git@github.com/project-gauntlet/tools.git#6b77be418d6eb48c4139979ff1b8d0350c5b5268",
+ "integrity": "sha512-1ZJItC7YYgFlCXYMHe7loiIeBf3MqMzdID+wmzgl2FWQEYk7VI4wG8FQAPYNjKe3C3mTetBPCdMUhIYC4L5UnQ==",
+ "dev": true,
+ "dependencies": {
+ "@grpc/grpc-js": "^1.12.5",
+ "@grpc/proto-loader": "^0.7.13",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-json": "^6.1.0",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "chalk": "^5.4.1",
+ "commander": "^12.1.0",
+ "rollup": "^4.19.2",
+ "rollup-plugin-cleandir": "^3.0.0",
+ "rollup-plugin-typescript2": "^0.36.0",
+ "simple-git": "^3.27.0",
+ "tail": "^2.2.6",
+ "toml": "^3.0.0",
+ "tslib": "^2.8.1",
+ "typescript": "^5.7.2",
+ "zod": "^3.24.1",
+ "zod-validation-error": "^3.4.0"
+ },
+ "bin": {
+ "gauntlet": "bin/main.js"
+ }
},
"node_modules/@project-gauntlet/typings": {
"resolved": "js/typings",
"link": true
},
+ "node_modules/@project-gauntlet/ui-action-panel": {
+ "resolved": "example_plugins/plugins/ui_action_panel",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/ui-icons-and-images": {
+ "resolved": "example_plugins/plugins/ui_icons_and_images",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/ui-navigation": {
+ "resolved": "example_plugins/plugins/ui_navigation",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/ui-preferences": {
+ "resolved": "example_plugins/plugins/ui_preferences",
+ "link": true
+ },
+ "node_modules/@project-gauntlet/ui-storage": {
+ "resolved": "example_plugins/plugins/ui_storage",
+ "link": true
+ },
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/base64": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
@@ -1098,43 +1365,73 @@
"node_modules/@protobufjs/float": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/path": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/pool": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@rollup/plugin-alias": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz",
+ "integrity": "sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
},
"node_modules/@rollup/plugin-commonjs": {
- "version": "25.0.7",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz",
- "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==",
+ "version": "28.0.6",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz",
+ "integrity": "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"commondir": "^1.0.1",
"estree-walker": "^2.0.2",
- "glob": "^8.0.3",
+ "fdir": "^6.2.0",
"is-reference": "1.2.1",
- "magic-string": "^0.30.3"
+ "magic-string": "^0.30.3",
+ "picomatch": "^4.0.2"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=16.0.0 || 14 >= 14.17"
},
"peerDependencies": {
"rollup": "^2.68.0||^3.0.0||^4.0.0"
@@ -1149,6 +1446,8 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
"integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.1.0"
},
@@ -1165,14 +1464,15 @@
}
},
"node_modules/@rollup/plugin-node-resolve": {
- "version": "15.2.3",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz",
- "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==",
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz",
+ "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"@types/resolve": "1.20.2",
"deepmerge": "^4.2.2",
- "is-builtin-module": "^3.2.1",
"is-module": "^1.0.0",
"resolve": "^1.22.1"
},
@@ -1189,10 +1489,11 @@
}
},
"node_modules/@rollup/plugin-replace": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz",
- "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz",
+ "integrity": "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"magic-string": "^0.30.3"
@@ -1210,10 +1511,11 @@
}
},
"node_modules/@rollup/plugin-typescript": {
- "version": "11.1.6",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz",
- "integrity": "sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==",
+ "version": "12.1.3",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.3.tgz",
+ "integrity": "sha512-gAx0AYwkyjqOw4JrZV34N/abvAobLhczyLkZ7FVL2UXPrO4zv8oqTfYT3DLBRan1EXasp4SUuEJXqPTk0gnJzw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.1.0",
"resolve": "^1.22.1"
@@ -1236,13 +1538,15 @@
}
},
"node_modules/@rollup/pluginutils": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
- "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz",
+ "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^2.0.2",
- "picomatch": "^2.3.1"
+ "picomatch": "^4.0.2"
},
"engines": {
"node": ">=14.0.0"
@@ -1257,324 +1561,483 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.2.tgz",
- "integrity": "sha512-OHflWINKtoCFSpm/WmuQaWW4jeX+3Qt3XQDepkkiFTsoxFc5BpF3Z5aDxFZgBqRjO6ATP5+b1iilp4kGIZVWlA==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz",
+ "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==",
"cpu": [
"arm"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.2.tgz",
- "integrity": "sha512-k0OC/b14rNzMLDOE6QMBCjDRm3fQOHAL8Ldc9bxEWvMo4Ty9RY6rWmGetNTWhPo+/+FNd1lsQYRd0/1OSix36A==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz",
+ "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==",
"cpu": [
"arm64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.2.tgz",
- "integrity": "sha512-IIARRgWCNWMTeQH+kr/gFTHJccKzwEaI0YSvtqkEBPj7AshElFq89TyreKNFAGh5frLfDCbodnq+Ye3dqGKPBw==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz",
+ "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==",
"cpu": [
"arm64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.2.tgz",
- "integrity": "sha512-52udDMFDv54BTAdnw+KXNF45QCvcJOcYGl3vQkp4vARyrcdI/cXH8VXTEv/8QWfd6Fru8QQuw1b2uNersXOL0g==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz",
+ "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==",
"cpu": [
"x64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "peer": true
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz",
+ "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "peer": true
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz",
+ "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.2.tgz",
- "integrity": "sha512-r+SI2t8srMPYZeoa1w0o/AfoVt9akI1ihgazGYPQGRilVAkuzMGiTtexNZkrPkQsyFrvqq/ni8f3zOnHw4hUbA==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz",
+ "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==",
"cpu": [
"arm"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.2.tgz",
- "integrity": "sha512-+tYiL4QVjtI3KliKBGtUU7yhw0GMcJJuB9mLTCEauHEsqfk49gtUBXGtGP3h1LW8MbaTY6rSFIQV1XOBps1gBA==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz",
+ "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==",
"cpu": [
"arm"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.2.tgz",
- "integrity": "sha512-OR5DcvZiYN75mXDNQQxlQPTv4D+uNCUsmSCSY2FolLf9W5I4DSoJyg7z9Ea3TjKfhPSGgMJiey1aWvlWuBzMtg==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz",
+ "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==",
"cpu": [
"arm64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.2.tgz",
- "integrity": "sha512-Hw3jSfWdUSauEYFBSFIte6I8m6jOj+3vifLg8EU3lreWulAUpch4JBjDMtlKosrBzkr0kwKgL9iCfjA8L3geoA==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz",
+ "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==",
"cpu": [
"arm64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
+ },
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz",
+ "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.2.tgz",
- "integrity": "sha512-rhjvoPBhBwVnJRq/+hi2Q3EMiVF538/o9dBuj9TVLclo9DuONqt5xfWSaE6MYiFKpo/lFPJ/iSI72rYWw5Hc7w==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz",
+ "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==",
"cpu": [
"ppc64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.2.tgz",
- "integrity": "sha512-EAz6vjPwHHs2qOCnpQkw4xs14XJq84I81sDRGPEjKPFVPBw7fwvtwhVjcZR6SLydCv8zNK8YGFblKWd/vRmP8g==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz",
+ "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==",
"cpu": [
"riscv64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz",
+ "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.2.tgz",
- "integrity": "sha512-IJSUX1xb8k/zN9j2I7B5Re6B0NNJDJ1+soezjNojhT8DEVeDNptq2jgycCOpRhyGj0+xBn7Cq+PK7Q+nd2hxLA==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz",
+ "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==",
"cpu": [
"s390x"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.2.tgz",
- "integrity": "sha512-OgaToJ8jSxTpgGkZSkwKE+JQGihdcaqnyHEFOSAU45utQ+yLruE1dkonB2SDI8t375wOKgNn8pQvaWY9kPzxDQ==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz",
+ "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==",
"cpu": [
"x64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.2.tgz",
- "integrity": "sha512-5V3mPpWkB066XZZBgSd1lwozBk7tmOkKtquyCJ6T4LN3mzKENXyBwWNQn8d0Ci81hvlBw5RoFgleVpL6aScLYg==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz",
+ "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==",
"cpu": [
"x64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.2.tgz",
- "integrity": "sha512-ayVstadfLeeXI9zUPiKRVT8qF55hm7hKa+0N1V6Vj+OTNFfKSoUxyZvzVvgtBxqSb5URQ8sK6fhwxr9/MLmxdA==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz",
+ "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==",
"cpu": [
"arm64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.2.tgz",
- "integrity": "sha512-Mda7iG4fOLHNsPqjWSjANvNZYoW034yxgrndof0DwCy0D3FvTjeNo+HGE6oGWgvcLZNLlcp0hLEFcRs+UGsMLg==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz",
+ "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==",
"cpu": [
"ia32"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "peer": true
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.2.tgz",
- "integrity": "sha512-DPi0ubYhSow/00YqmG1jWm3qt1F8aXziHc/UNy8bo9cpCacqhuWu+iSq/fp2SyEQK7iYTZ60fBU9cat3MXTjIQ==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz",
+ "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==",
"cpu": [
"x64"
],
+ "dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "peer": true
},
"node_modules/@std/async": {
"name": "@jsr/std__async",
- "version": "1.0.8",
- "resolved": "https://npm.jsr.io/~/11/@jsr/std__async/1.0.8.tgz",
- "integrity": "sha512-veKSzQ5lY6uJL60IxPFD2P1uVssdOtb8LmApllO2HzwzgY3ZDsjD4ZIaDjUykXwBNfUY2tHAlE7d62OGsbzdAg=="
+ "version": "1.0.13",
+ "resolved": "https://npm.jsr.io/~/11/@jsr/std__async/1.0.13.tgz",
+ "integrity": "sha512-GEApyNtzauJ0kEZ/GxebSkdEN0t29qJtkw+WEvzYTwkL6fHX8cq3YWzRjCqHu+4jMl+rpHiwyr/lfitNInntzA=="
},
"node_modules/@std/fs": {
"name": "@jsr/std__fs",
- "version": "1.0.5",
- "resolved": "https://npm.jsr.io/~/11/@jsr/std__fs/1.0.5.tgz",
- "integrity": "sha512-2ihx5BjO2IxpJ1aHy+joER4l1tJSktyaNaoDb9HOVK5IRToUY5OwstLe3+yhZnSn2KXlCo5DBS1mfAgrtu10aw==",
+ "version": "1.0.18",
+ "resolved": "https://npm.jsr.io/~/11/@jsr/std__fs/1.0.18.tgz",
+ "integrity": "sha512-5l8uHzraoOXWVk+cWU3DFPXoZ9XQvuU8C143Ad65bgutjaHFcbPqJDPIPliHpJcby6jCFT1uT4mh/Ho/QrrEPQ==",
"dependencies": {
- "@jsr/std__path": "^1.0.7"
+ "@jsr/std__path": "^1.1.0"
}
},
"node_modules/@types/aws-lambda": {
- "version": "8.10.138",
- "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.138.tgz",
- "integrity": "sha512-71EHMl70TPWIAsFuHd85NHq6S6T2OOjiisPTrH7RgcjzpJpPh4RQJv7PvVvIxc6PIp8CLV7F9B+TdjcAES5vcA=="
- },
- "node_modules/@types/btoa-lite": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz",
- "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg=="
+ "version": "8.10.150",
+ "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.150.tgz",
+ "integrity": "sha512-AX+AbjH/rH5ezX1fbK8onC/a+HyQHo7QGmvoxAE42n22OsciAxvZoZNEr22tbXs8WfP1nIsBjKDpgPm3HjOZbA==",
+ "license": "MIT"
},
"node_modules/@types/cross-spawn": {
"version": "6.0.6",
"resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz",
"integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
+ "node_modules/@types/deno": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@types/deno/-/deno-2.3.0.tgz",
+ "integrity": "sha512-/4SyefQpKjwNKGkq9qG3Ln7MazfbWKvydyVFBnXzP5OQA4u1paoFtaOe1iHKycIWHHkhYag0lPxyheThV1ijzw==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
- },
- "node_modules/@types/jsonwebtoken": {
- "version": "9.0.6",
- "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz",
- "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==",
- "dependencies": {
- "@types/node": "*"
- }
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/lodash": {
- "version": "4.17.7",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz",
- "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA=="
+ "version": "4.17.18",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.18.tgz",
+ "integrity": "sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==",
+ "license": "MIT"
},
"node_modules/@types/node": {
- "version": "18.19.17",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.17.tgz",
- "integrity": "sha512-SzyGKgwPzuWp2SHhlpXKzCX0pIOfcI4V2eF37nNBJOhwlegQ83omtVQ1XxZpDE06V/d6AQvfQdPfnw0tRC//Ng==",
+ "version": "22.15.32",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.32.tgz",
+ "integrity": "sha512-3jigKqgSjsH6gYZv2nEsqdXfZqIFGAV36XYYjf9KGZ3PSG+IhLecqPnI310RvjutyMwifE2hhhNEklOUrvx/wA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "undici-types": "~5.26.4"
+ "undici-types": "~6.21.0"
}
},
"node_modules/@types/prop-types": {
- "version": "15.7.11",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
- "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
- "dev": true
+ "version": "15.7.15",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/react": {
- "version": "18.2.56",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.56.tgz",
- "integrity": "sha512-NpwHDMkS/EFZF2dONFQHgkPRwhvgq/OAvIaGQzxGSBmaeR++kTg6njr15Vatz0/2VcCEwJQFi6Jf4Q0qBu0rLA==",
+ "version": "18.3.23",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz",
+ "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/prop-types": "*",
- "@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/react-reconciler": {
- "version": "0.28.8",
- "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.8.tgz",
- "integrity": "sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==",
+ "version": "0.28.9",
+ "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz",
+ "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==",
"dev": true,
- "dependencies": {
+ "license": "MIT",
+ "peerDependencies": {
"@types/react": "*"
}
},
"node_modules/@types/resolve": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
- "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="
- },
- "node_modules/@types/scheduler": {
- "version": "0.16.8",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
- "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
- "dev": true
- },
- "node_modules/@types/tail": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@types/tail/-/tail-2.2.3.tgz",
- "integrity": "sha512-Hnf352egOlDR4nVTaGX0t/kmTNXHMdovF2C7PVDFtHTHJPFmIspOI1b86vEOxU7SfCq/dADS7ptbqgG/WGGxnA==",
- "dev": true
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
+ "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/bottleneck": {
+ "version": "2.19.5",
+ "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
+ "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==",
+ "license": "MIT"
+ },
+ "node_modules/chalk": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
+ "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -1585,98 +2048,65 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "node_modules/before-after-hook": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
- "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
- },
- "node_modules/bottleneck": {
- "version": "2.19.5",
- "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
- "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="
- },
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.1.1"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/btoa-lite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz",
- "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA=="
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
- },
- "node_modules/builtin-modules": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
- "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/chalk": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
- "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">=12"
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -1687,25 +2117,31 @@
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/commander": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
- "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "license": "MIT",
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -1719,14 +2155,16 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -1741,37 +2179,32 @@
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/deprecation": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
- "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
- },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -1779,24 +2212,47 @@
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
+ "license": "MIT"
+ },
+ "node_modules/fast-content-type-parse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz",
+ "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/fdir": {
+ "version": "6.4.6",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
},
- "engines": {
- "node": ">=8"
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
}
},
"node_modules/find-cache-dir": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
"integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
@@ -1813,6 +2269,8 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -1822,11 +2280,13 @@
}
},
"node_modules/foreground-child": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
- "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "cross-spawn": "^7.0.0",
+ "cross-spawn": "^7.0.6",
"signal-exit": "^4.0.1"
},
"engines": {
@@ -1840,6 +2300,8 @@
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -1849,21 +2311,18 @@
"node": ">=12"
}
},
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
@@ -1872,6 +2331,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -1880,24 +2341,31 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "version": "11.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz",
+ "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
+ "foreground-child": "^3.3.1",
+ "jackspeak": "^4.1.1",
+ "minimatch": "^10.0.3",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=12"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -1906,12 +2374,16 @@
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/hasown": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
- "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -1919,50 +2391,17 @@
"node": ">= 0.4"
}
},
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-builtin-module": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
- "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
- "dependencies": {
- "builtin-modules": "^3.3.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "hasown": "^2.0.0"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1972,6 +2411,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -1979,21 +2420,16 @@
"node_modules/is-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
- "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
"dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
+ "license": "MIT"
},
"node_modules/is-reference": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
"integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"@types/estree": "*"
}
@@ -2001,31 +2437,37 @@
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
},
"node_modules/jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz",
+ "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
+ "engines": {
+ "node": "20 || >=22"
+ },
"funding": {
"url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
@@ -2033,50 +2475,12 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/jsonwebtoken": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
- "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
- "dependencies": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -2087,57 +2491,28 @@
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "license": "MIT"
},
"node_modules/lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/long": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
- "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
+ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
+ "dev": true,
+ "license": "Apache-2.0"
},
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
@@ -2146,28 +2521,31 @@
}
},
"node_modules/lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz",
+ "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==",
+ "dev": true,
+ "license": "ISC",
"engines": {
- "node": "14 || >=16.14"
+ "node": "20 || >=22"
}
},
"node_modules/magic-string": {
- "version": "0.30.7",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz",
- "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==",
+ "version": "0.30.17",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- },
- "engines": {
- "node": ">=12"
+ "@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
@@ -2182,121 +2560,72 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
- "node_modules/micromatch": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
- "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
"node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz",
+ "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "@isaacs/brace-expansion": "^5.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/minipass": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
"node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
},
"node_modules/octokit": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.2.1.tgz",
- "integrity": "sha512-u+XuSejhe3NdIvty3Jod00JvTdAE/0/+XbhIDhefHbu+2OcTRHd80aCiH6TX19ZybJmwPQBKFQmHGxp0i9mJrg==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/octokit/-/octokit-4.1.4.tgz",
+ "integrity": "sha512-cRvxRte6FU3vAHRC9+PMSY3D+mRAs2Rd9emMoqp70UGRvJRM3sbAoim2IXRZNNsf8wVfn4sGxVBHRAP+JBVX/g==",
+ "license": "MIT",
"dependencies": {
- "@octokit/app": "^14.0.2",
- "@octokit/core": "^5.0.0",
- "@octokit/oauth-app": "^6.0.0",
- "@octokit/plugin-paginate-graphql": "^4.0.0",
- "@octokit/plugin-paginate-rest": "11.3.1",
- "@octokit/plugin-rest-endpoint-methods": "13.2.2",
- "@octokit/plugin-retry": "^6.0.0",
- "@octokit/plugin-throttling": "^8.0.0",
- "@octokit/request-error": "^5.0.0",
- "@octokit/types": "^13.0.0"
+ "@octokit/app": "^15.1.6",
+ "@octokit/core": "^6.1.5",
+ "@octokit/oauth-app": "^7.1.6",
+ "@octokit/plugin-paginate-graphql": "^5.2.4",
+ "@octokit/plugin-paginate-rest": "^12.0.0",
+ "@octokit/plugin-rest-endpoint-methods": "^14.0.0",
+ "@octokit/plugin-retry": "^7.2.1",
+ "@octokit/plugin-throttling": "^10.0.0",
+ "@octokit/request-error": "^6.1.8",
+ "@octokit/types": "^14.0.0",
+ "@octokit/webhooks": "^13.8.3"
},
"engines": {
"node": ">= 18"
}
},
- "node_modules/octokit/node_modules/@octokit/openapi-types": {
- "version": "22.2.0",
- "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz",
- "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg=="
- },
- "node_modules/octokit/node_modules/@octokit/plugin-paginate-rest": {
- "version": "11.3.1",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz",
- "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==",
- "dependencies": {
- "@octokit/types": "^13.5.0"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "@octokit/core": "5"
- }
- },
- "node_modules/octokit/node_modules/@octokit/plugin-rest-endpoint-methods": {
- "version": "13.2.2",
- "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz",
- "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==",
- "dependencies": {
- "@octokit/types": "^13.5.0"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "@octokit/core": "^5"
- }
- },
- "node_modules/octokit/node_modules/@octokit/types": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz",
- "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==",
- "dependencies": {
- "@octokit/openapi-types": "^22.2.0"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dependencies": {
- "wrappy": "1"
- }
- },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -2311,6 +2640,8 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -2322,19 +2653,25 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw=="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2343,6 +2680,7 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2350,29 +2688,35 @@
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
},
"engines": {
- "node": ">=16 || 14 >=14.18"
+ "node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=8.6"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
@@ -2382,6 +2726,8 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
@@ -2390,10 +2736,12 @@
}
},
"node_modules/protobufjs": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz",
- "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==",
+ "version": "7.5.3",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz",
+ "integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==",
+ "dev": true,
"hasInstallScript": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
@@ -2413,9 +2761,10 @@
}
},
"node_modules/react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -2424,50 +2773,60 @@
}
},
"node_modules/react-reconciler": {
- "version": "0.29.0",
- "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.0.tgz",
- "integrity": "sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==",
+ "version": "0.29.2",
+ "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.2.tgz",
+ "integrity": "sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==",
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
+ "scheduler": "^0.23.2"
},
"engines": {
"node": ">=0.10.0"
},
"peerDependencies": {
- "react": "^18.2.0"
+ "react": "^18.3.1"
}
},
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
+ "is-core-module": "^2.16.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/rollup": {
- "version": "4.19.2",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.2.tgz",
- "integrity": "sha512-6/jgnN1svF9PjNYJ4ya3l+cqutg49vOZ4rVgsDKxdl+5gpGPnByFXWGyfH9YGx9i3nfBwSu1Iyu6vGwFFA0BdQ==",
+ "version": "4.44.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz",
+ "integrity": "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "1.0.5"
+ "@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -2477,40 +2836,48 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.19.2",
- "@rollup/rollup-android-arm64": "4.19.2",
- "@rollup/rollup-darwin-arm64": "4.19.2",
- "@rollup/rollup-darwin-x64": "4.19.2",
- "@rollup/rollup-linux-arm-gnueabihf": "4.19.2",
- "@rollup/rollup-linux-arm-musleabihf": "4.19.2",
- "@rollup/rollup-linux-arm64-gnu": "4.19.2",
- "@rollup/rollup-linux-arm64-musl": "4.19.2",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.19.2",
- "@rollup/rollup-linux-riscv64-gnu": "4.19.2",
- "@rollup/rollup-linux-s390x-gnu": "4.19.2",
- "@rollup/rollup-linux-x64-gnu": "4.19.2",
- "@rollup/rollup-linux-x64-musl": "4.19.2",
- "@rollup/rollup-win32-arm64-msvc": "4.19.2",
- "@rollup/rollup-win32-ia32-msvc": "4.19.2",
- "@rollup/rollup-win32-x64-msvc": "4.19.2",
+ "@rollup/rollup-android-arm-eabi": "4.44.0",
+ "@rollup/rollup-android-arm64": "4.44.0",
+ "@rollup/rollup-darwin-arm64": "4.44.0",
+ "@rollup/rollup-darwin-x64": "4.44.0",
+ "@rollup/rollup-freebsd-arm64": "4.44.0",
+ "@rollup/rollup-freebsd-x64": "4.44.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.44.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.44.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.44.0",
+ "@rollup/rollup-linux-arm64-musl": "4.44.0",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.44.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.44.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.44.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.44.0",
+ "@rollup/rollup-linux-x64-gnu": "4.44.0",
+ "@rollup/rollup-linux-x64-musl": "4.44.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.44.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.44.0",
+ "@rollup/rollup-win32-x64-msvc": "4.44.0",
"fsevents": "~2.3.2"
}
},
"node_modules/rollup-plugin-cleandir": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-cleandir/-/rollup-plugin-cleandir-2.0.0.tgz",
- "integrity": "sha512-cTL/WbBJqHQkYBplhtiQ/yc0IqTuRR7EGw/S+XtQdaFhtv6+Xq/j8dxkk5lzTcxd0hCahUebZFYhLBRzSsgynw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-cleandir/-/rollup-plugin-cleandir-3.0.0.tgz",
+ "integrity": "sha512-+1AlxObWpWechyLVcnpjbxBiYlQg7bXF7vw5fu6P9B0B8R4meQliG7aGCnK8MvtdXzKsjeI0lJc43d0UcQj1fg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@mstssk/cleandir": "^1.2.0"
+ "@mstssk/cleandir": "^2.0.0"
},
"peerDependencies": {
- "rollup": ">=2.0.0"
+ "rollup": ">=4.0.0"
}
},
"node_modules/rollup-plugin-typescript2": {
"version": "0.36.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz",
"integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^4.1.2",
"find-cache-dir": "^3.3.2",
@@ -2527,6 +2894,8 @@
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
"integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"estree-walker": "^2.0.1",
"picomatch": "^2.2.2"
@@ -2535,37 +2904,34 @@
"node": ">= 8.0.0"
}
},
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
+ "node_modules/rollup-plugin-typescript2/node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
},
"node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
}
},
"node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -2577,6 +2943,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -2588,6 +2955,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2596,6 +2964,8 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
"engines": {
"node": ">=14"
},
@@ -2604,13 +2974,14 @@
}
},
"node_modules/simple-git": {
- "version": "3.25.0",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.25.0.tgz",
- "integrity": "sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==",
+ "version": "3.28.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.28.0.tgz",
+ "integrity": "sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==",
+ "license": "MIT",
"dependencies": {
"@kwsites/file-exists": "^1.1.1",
"@kwsites/promise-deferred": "^1.1.1",
- "debug": "^4.3.5"
+ "debug": "^4.4.0"
},
"funding": {
"type": "github",
@@ -2618,16 +2989,21 @@
}
},
"node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/string-width-cjs": {
@@ -2635,6 +3011,8 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -2644,10 +3022,29 @@
"node": ">=8"
}
},
- "node_modules/strip-ansi": {
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2655,11 +3052,29 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2667,10 +3082,22 @@
"node": ">=8"
}
},
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -2682,44 +3109,50 @@
"version": "2.2.6",
"resolved": "https://registry.npmjs.org/tail/-/tail-2.2.6.tgz",
"integrity": "sha512-IQ6G4wK/t8VBauYiGPLx+d3fA5XjSVagjWV5SIYzvEvglbQjwEcukeYI68JOPpdydjxhZ9sIgzRlSmwSpphHyw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 6.0.0"
}
},
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
+ "node_modules/toad-cache": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz",
+ "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==",
+ "license": "MIT",
"engines": {
- "node": ">=8.0"
+ "node": ">=12"
}
},
"node_modules/toml": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz",
- "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="
+ "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
},
"node_modules/tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "license": "MIT",
"engines": {
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
}
},
"node_modules/typescript": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
- "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -2729,9 +3162,10 @@
}
},
"node_modules/undici": {
- "version": "5.28.4",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz",
- "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==",
+ "version": "5.29.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
+ "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==",
+ "license": "MIT",
"dependencies": {
"@fastify/busboy": "^2.0.0"
},
@@ -2740,44 +3174,39 @@
}
},
"node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/universal-github-app-jwt": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz",
- "integrity": "sha512-t1iB2FmLFE+yyJY9+3wMx0ejB+MQpEVkH0gQv7dR6FZyltyq+ZZO0uDpbopxhrZ3SLEO4dCEkIujOMldEQ2iOA==",
- "dependencies": {
- "@types/jsonwebtoken": "^9.0.0",
- "jsonwebtoken": "^9.0.2"
- }
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-2.2.2.tgz",
+ "integrity": "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==",
+ "license": "MIT"
},
"node_modules/universal-user-agent": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
- "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz",
+ "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==",
+ "license": "ISC"
},
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -2788,28 +3217,19 @@
"node": ">= 8"
}
},
- "node_modules/workspace-root": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/workspace-root/-/workspace-root-3.2.0.tgz",
- "integrity": "sha512-pa294ZcHkGVfVomqtgNZjbJXwae7awRDni8hVkQSBastuHS2M9LsZ75mToajutFmyYo0tvjO0RWoiKAf3To6ug==",
- "dev": true,
- "dependencies": {
- "@node-kit/lerna-workspace-root": "3.2.0",
- "@node-kit/pnpm-workspace-root": "3.2.0",
- "@node-kit/yarn-workspace-root": "3.2.0"
- }
- },
"node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
@@ -2820,6 +3240,8 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -2832,15 +3254,73 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
"engines": {
"node": ">=10"
}
@@ -2849,6 +3329,8 @@
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -2866,262 +3348,78 @@
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "license": "ISC",
"engines": {
"node": ">=12"
}
},
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/zod": {
- "version": "3.23.8",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
- "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "version": "3.25.67",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz",
+ "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==",
+ "dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/zod-validation-error": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.3.1.tgz",
- "integrity": "sha512-uFzCZz7FQis256dqw4AhPQgD6f3pzNca/Zh62RNELavlumQB3nDIUFbF5JQfFLcMbO1s02Q7Xg/gpcOBlEnYZA==",
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.5.2.tgz",
+ "integrity": "sha512-mdi7YOLtram5dzJ5aDtm1AG9+mxRma1iaMrZdYIpFO7epdKBUwLHIxTF8CPDeCQ828zAXYtizrKlEJAtzgfgrw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18.0.0"
},
"peerDependencies": {
- "zod": "^3.18.0"
- }
- },
- "scenarios/js/api": {},
- "scenarios/js/deno": {
- "dev": true
- },
- "scenarios/plugins/docs_detail": {
- "name": "@project-gauntlet/docs-detailt",
- "dependencies": {
- "@project-gauntlet/api": "file:../../js/api"
- },
- "devDependencies": {
- "@project-gauntlet/deno": "file:../../js/deno",
- "@project-gauntlet/tools": "file:../../../tools",
- "@types/react": "^18.2.14",
- "typescript": "^5.3.3"
- }
- },
- "scenarios/plugins/docs_detail/node_modules/@project-gauntlet/api": {
- "resolved": "scenarios/js/api",
- "link": true
- },
- "scenarios/plugins/docs_detail/node_modules/@project-gauntlet/deno": {
- "resolved": "scenarios/js/deno",
- "link": true
- },
- "scenarios/plugins/docs_detail/node_modules/@project-gauntlet/tools": {
- "resolved": "scenarios/tools",
- "link": true
- },
- "scenarios/plugins/docs_form": {
- "name": "@project-gauntlet/docs-form",
- "dependencies": {
- "@project-gauntlet/api": "file:../../js/api"
- },
- "devDependencies": {
- "@project-gauntlet/deno": "file:../../js/deno",
- "@project-gauntlet/tools": "file:../../../tools",
- "@types/react": "^18.2.14",
- "typescript": "^5.3.3"
- }
- },
- "scenarios/plugins/docs_form/node_modules/@project-gauntlet/api": {
- "resolved": "scenarios/js/api",
- "link": true
- },
- "scenarios/plugins/docs_form/node_modules/@project-gauntlet/deno": {
- "resolved": "scenarios/js/deno",
- "link": true
- },
- "scenarios/plugins/docs_form/node_modules/@project-gauntlet/tools": {
- "resolved": "scenarios/tools",
- "link": true
- },
- "scenarios/plugins/docs_grid": {
- "name": "@project-gauntlet/docs-grid",
- "dependencies": {
- "@project-gauntlet/api": "file:../../js/api"
- },
- "devDependencies": {
- "@project-gauntlet/deno": "file:../../js/deno",
- "@project-gauntlet/tools": "file:../../../tools",
- "@types/react": "^18.2.14",
- "typescript": "^5.3.3"
- }
- },
- "scenarios/plugins/docs_grid/node_modules/@project-gauntlet/api": {
- "resolved": "scenarios/js/api",
- "link": true
- },
- "scenarios/plugins/docs_grid/node_modules/@project-gauntlet/deno": {
- "resolved": "scenarios/js/deno",
- "link": true
- },
- "scenarios/plugins/docs_grid/node_modules/@project-gauntlet/tools": {
- "resolved": "scenarios/tools",
- "link": true
- },
- "scenarios/plugins/docs_inline": {
- "name": "@project-gauntlet/docs-inline",
- "dependencies": {
- "@project-gauntlet/api": "file:../../js/api"
- },
- "devDependencies": {
- "@project-gauntlet/deno": "file:../../js/deno",
- "@project-gauntlet/tools": "file:../../../tools",
- "@types/react": "^18.2.14",
- "typescript": "^5.3.3"
- }
- },
- "scenarios/plugins/docs_inline/node_modules/@project-gauntlet/api": {
- "resolved": "scenarios/js/api",
- "link": true
- },
- "scenarios/plugins/docs_inline/node_modules/@project-gauntlet/deno": {
- "resolved": "scenarios/js/deno",
- "link": true
- },
- "scenarios/plugins/docs_inline/node_modules/@project-gauntlet/tools": {
- "resolved": "scenarios/tools",
- "link": true
- },
- "scenarios/plugins/docs_list": {
- "name": "@project-gauntlet/docs-list",
- "dependencies": {
- "@project-gauntlet/api": "file:../../js/api"
- },
- "devDependencies": {
- "@project-gauntlet/deno": "file:../../js/deno",
- "@project-gauntlet/tools": "file:../../../tools",
- "@types/react": "^18.2.14",
- "typescript": "^5.3.3"
- }
- },
- "scenarios/plugins/docs_list/node_modules/@project-gauntlet/api": {
- "resolved": "scenarios/js/api",
- "link": true
- },
- "scenarios/plugins/docs_list/node_modules/@project-gauntlet/deno": {
- "resolved": "scenarios/js/deno",
- "link": true
- },
- "scenarios/plugins/docs_list/node_modules/@project-gauntlet/tools": {
- "resolved": "scenarios/tools",
- "link": true
- },
- "scenarios/tools": {
- "dev": true
- },
- "tools": {
- "name": "@project-gauntlet/tools",
- "version": "0.7.0",
- "dependencies": {
- "@grpc/grpc-js": "^1.11.1",
- "@grpc/proto-loader": "^0.7.13",
- "@rollup/plugin-commonjs": "^26.0.1",
- "@rollup/plugin-json": "^6.1.0",
- "@rollup/plugin-node-resolve": "^15.2.3",
- "chalk": "^5.3.0",
- "commander": "^12.1.0",
- "rollup": "^4.19.0",
- "rollup-plugin-cleandir": "^2.0.0",
- "rollup-plugin-typescript2": "^0.36.0",
- "simple-git": "^3.25.0",
- "tail": "^2.2.6",
- "toml": "^3.0.0",
- "tslib": "^2.6.3",
- "typescript": "^5.2.2",
- "zod": "^3.23.8",
- "zod-validation-error": "^3.3.0"
- },
- "bin": {
- "gauntlet": "bin/main.js"
- },
- "devDependencies": {
- "@types/node": "^18.17.1",
- "@types/tail": "^2.2.3",
- "workspace-root": "^3.2.0"
- }
- },
- "tools/node_modules/@rollup/plugin-commonjs": {
- "version": "26.0.1",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-26.0.1.tgz",
- "integrity": "sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==",
- "dependencies": {
- "@rollup/pluginutils": "^5.0.1",
- "commondir": "^1.0.1",
- "estree-walker": "^2.0.2",
- "glob": "^10.4.1",
- "is-reference": "1.2.1",
- "magic-string": "^0.30.3"
- },
- "engines": {
- "node": ">=16.0.0 || 14 >= 14.17"
- },
- "peerDependencies": {
- "rollup": "^2.68.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "tools/node_modules/commander": {
- "version": "12.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
- "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
- "engines": {
- "node": ">=18"
- }
- },
- "tools/node_modules/glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "tools/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "zod": "^3.25.0"
}
}
}
diff --git a/package.json b/package.json
index dd62cdd..912eb0f 100644
--- a/package.json
+++ b/package.json
@@ -2,26 +2,25 @@
"name": "project-gauntlet",
"private": true,
"scripts": {
- "build-all": "npm run build --workspace tools && npm run build --workspaces --if-present",
- "build-scenarios": "npm run build --workspace tools && npm run build --workspace scenarios --if-present",
- "build-dev-plugin": "npm run build --workspace tools && npm run build --workspace dev_plugin",
- "build": "npm run build --workspace tools && npm run build --workspace js --workspace bundled_plugins --if-present",
- "run-scenarios": "npm run run-scenarios --workspace js/scenario_runner_cli",
- "run-screenshot-gen": "npm run run-screenshot-gen --workspace js/scenario_runner_cli"
+ "build-all": "npm run build --workspaces --if-present",
+ "build-scenarios": "npm run build --workspace example_plugins/plugins --if-present",
+ "build-dev-plugin": "npm run build --workspace dev_plugin",
+ "build": "npm run build --workspace js --workspace bundled_plugins --if-present",
+ "run-component-model-gen": "npm run generate-json --workspace js/api_build",
+ "run-scenarios": "npm run run-scenarios --workspace js/scenario_runner_cli"
},
"workspaces": [
- "tools",
"dev_plugin",
"bundled_plugins/*",
- "scenarios/plugins/*",
+ "example_plugins/plugins/*",
"js/typings",
"js/build",
"js/api_build",
- "js/deno",
"js/api",
"js/react",
"js/core",
"js/react_renderer",
+ "js/bridge_build",
"js/scenario_runner_cli"
]
}
diff --git a/rust/cli/Cargo.toml b/rust/cli/Cargo.toml
index 7b741b2..1043dda 100644
--- a/rust/cli/Cargo.toml
+++ b/rust/cli/Cargo.toml
@@ -1,19 +1,30 @@
[package]
-name = "cli"
-edition = "2021"
+name = "gauntlet-cli"
+edition.workspace = true
[dependencies]
-clap = { version = "4.3.22", features = ["derive"] }
-tracing = "0.1"
-tracing-subscriber = "0.3"
-management_client = { path = "../management_client" }
-client = { path = "../client" }
-server = { path = "../server" }
-anyhow = { version = "1", features = ["backtrace"] }
+# workspaces
+gauntlet-client.workspace = true
+gauntlet-server.workspace = true
+gauntlet-plugin-runtime.workspace = true
+gauntlet-common.workspace = true
+gauntlet-utils.workspace = true
+
+# shared
+tokio.workspace = true
+tracing.workspace = true
+tracing-subscriber.workspace = true
+anyhow.workspace = true
+
+# other
+clap = { version = "4.5", features = ["derive"] }
+vergen-pretty = "0.3"
+
+[build-dependencies]
+vergen-gitcl = { version = "1.0", features = ["build", "cargo"] }
[target.'cfg(any(target_os = "macos", target_os = "windows"))'.dependencies]
auto-launch = "0.5.0"
[features]
-release = ["server/release"]
-scenario_runner = ["server/scenario_runner", "client/scenario_runner"]
+release = ["gauntlet-server/release"]
diff --git a/rust/server/build.rs b/rust/cli/build.rs
similarity index 76%
rename from rust/server/build.rs
rename to rust/cli/build.rs
index 954e2a9..aaac632 100644
--- a/rust/server/build.rs
+++ b/rust/cli/build.rs
@@ -1,8 +1,8 @@
-use vergen_gitcl::{CargoBuilder, Emitter, GitclBuilder};
+use vergen_gitcl::CargoBuilder;
+use vergen_gitcl::Emitter;
+use vergen_gitcl::GitclBuilder;
fn main() -> Result<(), Box> {
- println!("cargo:rerun-if-changed=src/db_migrations");
-
let gitcl = GitclBuilder::all_git()?;
let cargo = CargoBuilder::default()
.debug(true)
diff --git a/rust/cli/src/lib.rs b/rust/cli/src/lib.rs
index c774bce..2d79552 100644
--- a/rust/cli/src/lib.rs
+++ b/rust/cli/src/lib.rs
@@ -1,33 +1,77 @@
-use anyhow::{anyhow, Context};
+use std::backtrace::Backtrace;
+use std::fs::File;
+use std::io::Write;
+use std::process::exit;
+use std::time::SystemTime;
+use std::time::UNIX_EPOCH;
+
use clap::Parser;
+use gauntlet_common::cli::is_server_running;
+use gauntlet_common::cli::open_settings_window;
+use gauntlet_common::cli::open_window;
+use gauntlet_common::cli::run_action;
+use gauntlet_common::dirs::Dirs;
+use gauntlet_server::PLUGIN_CONNECT_ENV;
+use gauntlet_server::PLUGIN_UUID_ENV;
+use tracing_subscriber::EnvFilter;
+use vergen_pretty::vergen_pretty_env;
-use client::{generate_simple_theme_sample, generate_complex_theme_sample, open_window};
-use management_client::start_management_client;
-use server::start;
-
+/// Gauntlet CLI
+///
+/// If no subcommand is provided server will be started or if one is already running window will be opened
#[derive(Debug, clap::Parser)]
struct Cli {
#[command(subcommand)]
command: Option,
+ /// Start server without opening Gauntlet window, only used if no subcommand is provided
#[arg(long)]
minimized: bool,
+
+ /// Display version and exit
+ #[arg(long)]
+ version: bool,
}
#[derive(Debug, clap::Subcommand)]
enum Commands {
+ /// Open Gauntlet window
Open,
+ /// Open Gauntlet settings
Settings,
- GenerateSampleComplexTheme,
- GenerateSampleSimpleTheme,
+ /// Run action (only ones visible in main window search results) of specific entrypoint of specific plugin
+ Run {
+ /// Plugin ID, can be found in settings
+ plugin_id: String,
+
+ /// Entrypoint ID, can be found in plugin manifest at `entrypoint.*.id`
+ entrypoint_id: String,
+
+ /// Action ID, can be found in plugin manifest at `entrypoint.actions.*.id`.
+ /// Alternatively, following special values are supported:
+ /// `:primary` (action run with Enter shortcut) or
+ /// `:secondary` (action run with Shift+Enter shortcut)
+ action_id: String,
+ },
}
pub fn init() {
- tracing_subscriber::fmt::init();
+ tracing_subscriber::fmt::fmt()
+ .with_thread_names(true)
+ .with_env_filter(EnvFilter::from_default_env())
+ .init();
let cli = Cli::parse();
- match &cli.command {
+ if cli.version {
+ println!(
+ "Gauntlet v{}",
+ include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/../../VERSION"))
+ );
+ return;
+ }
+
+ match cli.command {
None => {
if cfg!(feature = "release") {
#[cfg(target_os = "macos")]
@@ -42,14 +86,38 @@ pub fn init() {
}
}
- start(cli.minimized)
+ register_panic_hook(std::env::var(PLUGIN_UUID_ENV).ok());
+
+ if let Ok(socket_name) = std::env::var(PLUGIN_CONNECT_ENV) {
+ gauntlet_plugin_runtime::run_plugin_runtime(socket_name);
+
+ return;
+ }
+
+ if is_server_running() {
+ open_window()
+ } else {
+ tracing::info!("Gauntlet Build Information:");
+ for (name, value) in vergen_pretty_env!() {
+ if let Some(value) = value {
+ tracing::info!("{}: {}", name, value);
+ }
+ }
+
+ gauntlet_client::run_app(cli.minimized)
+ }
}
Some(command) => {
match command {
Commands::Open => open_window(),
- Commands::Settings => start_management_client(),
- Commands::GenerateSampleComplexTheme => generate_complex_theme_sample().expect("Unable to generate complex theme sample"),
- Commands::GenerateSampleSimpleTheme => generate_simple_theme_sample().expect("Unable to generate simple theme sample")
+ Commands::Settings => open_settings_window(),
+ Commands::Run {
+ plugin_id,
+ entrypoint_id,
+ action_id,
+ } => {
+ run_action(plugin_id, entrypoint_id, action_id);
+ }
};
}
}
@@ -57,8 +125,9 @@ pub fn init() {
#[cfg(target_os = "macos")]
fn setup_auto_launch_macos() -> anyhow::Result<()> {
- let app_path = std::env::current_exe()
- .context("Unable to get current_exe from env")?;
+ use anyhow::Context;
+ use anyhow::anyhow;
+ let app_path = std::env::current_exe().context("Unable to get current_exe from env")?;
// expect Gauntlet.app in path according to macos app bundle structure
let app_path_fn = || {
@@ -71,15 +140,15 @@ fn setup_auto_launch_macos() -> anyhow::Result<()> {
}
};
- let app_path = app_path_fn()
- .ok_or(anyhow!("Unexpected executable path: {:?}", &app_path))?;
+ let app_path = app_path_fn().ok_or(anyhow!("Unexpected executable path: {:?}", &app_path))?;
setup_auto_launch(app_path)
}
-
#[cfg(target_os = "windows")]
fn setup_auto_launch_windows() -> anyhow::Result<()> {
+ use anyhow::Context;
+ use anyhow::anyhow;
let app_path = std::env::current_exe()
.context("Unable to get current_exe from env")?
.as_os_str()
@@ -100,4 +169,55 @@ fn setup_auto_launch(app_path: String) -> anyhow::Result<()> {
.and_then(|auto| auto.enable())?;
Ok(())
-}
\ No newline at end of file
+}
+
+fn register_panic_hook(plugin_runtime: Option) {
+ unsafe {
+ std::env::set_var("RUST_BACKTRACE", "full");
+ };
+
+ let dirs = Dirs::new();
+
+ let crash_file = match plugin_runtime {
+ None => dirs.server_crash_log_file(),
+ Some(plugin_uuid) => dirs.plugin_crash_log_file(&plugin_uuid),
+ };
+
+ let _ = std::fs::remove_file(&crash_file);
+
+ std::panic::set_hook(Box::new(move |panic_info| {
+ let payload = panic_info.payload();
+
+ let payload = if let Some(&s) = payload.downcast_ref::<&'static str>() {
+ s
+ } else if let Some(s) = payload.downcast_ref::() {
+ s.as_str()
+ } else {
+ "Box"
+ };
+
+ let location = panic_info.location().map(|l| l.to_string());
+ let backtrace = Backtrace::capture();
+
+ let now = SystemTime::now()
+ .duration_since(UNIX_EPOCH)
+ .ok()
+ .map(|duration| duration.as_millis().to_string())
+ .unwrap_or("Unknown".to_string());
+
+ let content = format!(
+ "Panic on {}\nPayload: {}\nLocation: {:?}\nBacktrace:\n{}",
+ now, payload, location, backtrace
+ );
+
+ let crash_file = File::options().create(true).append(true).open(&crash_file);
+
+ if let Ok(mut crash_file) = crash_file {
+ let _ = crash_file.write_all(content.as_bytes());
+ }
+
+ eprintln!("{}", content);
+
+ exit(101); // poor man's abort on panic because actual setting makes v8 linking fail
+ }));
+}
diff --git a/rust/client/Cargo.toml b/rust/client/Cargo.toml
index b5a779a..004a4d8 100644
--- a/rust/client/Cargo.toml
+++ b/rust/client/Cargo.toml
@@ -1,41 +1,46 @@
[package]
-name = "client"
-edition = "2021"
+name = "gauntlet-client"
+edition.workspace = true
[dependencies]
-tokio = "1.28.1"
-anyhow = { version = "1", features = ["backtrace"] }
-thiserror = "1"
-iced_aw.workspace = true
-tracing = "0.1"
-tracing-subscriber = { version = "0.3", features = ["env-filter"] }
-common = { path = "../common" }
-common-ui = { path = "../common_ui" }
-utils = { path = "../utils" }
-tonic = "0.11.0"
-itertools = "0.12.1"
-component_model = { path = "../component_model" }
-image = "0.25"
-serde = { version = "1.0", features = ["derive"] }
-serde_json = "1.0"
-once_cell = "1.19"
-bytes = "1.6.0"
-global-hotkey = "0.4.2"
+# workspaces
+gauntlet-common.workspace = true
+gauntlet-common-ui.workspace = true
+gauntlet-utils.workspace = true
+gauntlet-component-model.workspace = true
+gauntlet-server.workspace = true
+
+# shared
+tokio.workspace = true
+anyhow.workspace = true
+iced.workspace = true
+iced_fonts.workspace = true
+tracing.workspace = true
+itertools.workspace = true
+serde.workspace = true
+serde_json.workspace = true
+image.workspace = true
+once_cell.workspace = true
+futures.workspace = true
+indexmap.workspace = true
+
+# other
+arc-swap = "1.7.1"
[target.'cfg(any(target_os = "macos", target_os = "windows"))'.dependencies]
-tray-icon = { version = "0.15.1", default-features = false }
+tray-icon = { version = "0.19.2", default-features = false }
[target.'cfg(target_os = "linux")'.dependencies]
-iced.workspace = true
-iced.features = ["wayland"]
+x11rb-async.workspace = true
+smithay-client-toolkit.workspace = true
-[target.'cfg(not(target_os = "linux"))'.dependencies]
-iced.workspace = true
+[target.'cfg(target_os = "macos")'.dependencies]
+objc2-app-kit = { version = "0.2.2", features = ["NSWorkspace"] }
[build-dependencies]
-component_model = { path = "../component_model" }
-anyhow = { version = "1", features = ["backtrace"] }
+gauntlet-component-model.workspace = true
+anyhow.workspace = true
convert_case = "0.6.0"
[features]
-scenario_runner = []
+scenario_runner = ["gauntlet-server/scenario_runner"]
diff --git a/rust/client/build.rs b/rust/client/build.rs
index 39c63d2..eb9de1e 100644
--- a/rust/client/build.rs
+++ b/rust/client/build.rs
@@ -3,9 +3,14 @@ use std::fs::File;
use std::io::Write;
use std::path::Path;
-use convert_case::{Case, Casing};
-
-use component_model::{create_component_model, Component, ComponentName, Property, PropertyType};
+use convert_case::Case;
+use convert_case::Casing;
+use gauntlet_component_model::Component;
+use gauntlet_component_model::ComponentName;
+use gauntlet_component_model::OptionalKind;
+use gauntlet_component_model::Property;
+use gauntlet_component_model::PropertyType;
+use gauntlet_component_model::create_component_model;
fn main() -> anyhow::Result<()> {
let out_dir = env::var("OUT_DIR")?;
@@ -20,13 +25,18 @@ fn main() -> anyhow::Result<()> {
Component::Standard { name, props, .. } => {
for prop in props {
let PropertyType::Function { arguments } = &prop.property_type else {
- continue
+ continue;
};
- output.push_str(&format!("fn create_{}_{}_event(\n", name.to_string().to_case(Case::Snake), prop.name.to_case(Case::Snake)));
+ output.push_str(&format!(
+ "fn create_{}_{}_event(\n",
+ name.to_string().to_case(Case::Snake),
+ prop.name.to_case(Case::Snake)
+ ));
output.push_str(" widget_id: UiWidgetId,\n");
for arg in arguments {
+ output.push_str(&" #[allow(non_snake_case)]\n".to_string());
output.push_str(&format!(" {}: {}\n", arg.name, generate_type(&arg, name)));
}
@@ -34,29 +44,56 @@ fn main() -> anyhow::Result<()> {
output.push_str(" crate::model::UiViewEvent::View {\n");
output.push_str(" widget_id,\n");
output.push_str(&format!(" event_name: \"{}\".to_owned(),\n", prop.name));
- output.push_str(" event_arguments: vec![\n",);
+ output.push_str(" event_arguments: vec![\n");
for arg in arguments {
match arg.property_type {
PropertyType::String => {
- if arg.optional {
- output.push_str(&format!(" {}.map(|{}| common::model::UiPropertyValue::String({})).unwrap_or_else(|| common::model::UiPropertyValue::Undefined),\n", arg.name, arg.name, arg.name));
- } else {
- output.push_str(&format!(" common::model::UiPropertyValue::String({}),\n", arg.name));
+ match arg.optional {
+ OptionalKind::No => {
+ output.push_str(&format!(
+ " gauntlet_common::model::UiPropertyValue::String({}),\n",
+ arg.name
+ ));
+ }
+ OptionalKind::Yes => {
+ output.push_str(&format!(" {}.map(|#[allow(non_snake_case)] {}| gauntlet_common::model::UiPropertyValue::String({})).unwrap_or_else(|| gauntlet_common::model::UiPropertyValue::Null),\n", arg.name, arg.name, arg.name));
+ }
+ OptionalKind::YesButComplicated => {
+ todo!()
+ }
}
}
PropertyType::Number => {
- if arg.optional {
- output.push_str(&format!(" {}.map(|{}| common::model::UiPropertyValue::Number({})).unwrap_or_else(|| common::model::UiPropertyValue::Undefined),\n", arg.name, arg.name, arg.name));
- } else {
- output.push_str(&format!(" common::model::UiPropertyValue::Number({}),\n", arg.name));
+ match arg.optional {
+ OptionalKind::No => {
+ output.push_str(&format!(
+ " gauntlet_common::model::UiPropertyValue::Number({}),\n",
+ arg.name
+ ));
+ }
+ OptionalKind::Yes => {
+ output.push_str(&format!(" {}.map(|{}| gauntlet_common::model::UiPropertyValue::Number({})).unwrap_or_else(|| gauntlet_common::model::UiPropertyValue::Null),\n", arg.name, arg.name, arg.name));
+ }
+ OptionalKind::YesButComplicated => {
+ todo!()
+ }
}
}
PropertyType::Boolean => {
- if arg.optional {
- output.push_str(&format!(" {}.map(|{}| common::model::UiPropertyValue::Bool({})).unwrap_or_else(|| common::model::UiPropertyValue::Undefined),\n", arg.name, arg.name, arg.name));
- } else {
- output.push_str(&format!(" common::model::UiPropertyValue::Bool({}),\n", arg.name));
+ match arg.optional {
+ OptionalKind::No => {
+ output.push_str(&format!(
+ " gauntlet_common::model::UiPropertyValue::Bool({}),\n",
+ arg.name
+ ));
+ }
+ OptionalKind::Yes => {
+ output.push_str(&format!(" {}.map(|{}| gauntlet_common::model::UiPropertyValue::Bool({})).unwrap_or_else(|| gauntlet_common::model::UiPropertyValue::Null),\n", arg.name, arg.name, arg.name));
+ }
+ OptionalKind::YesButComplicated => {
+ todo!()
+ }
}
}
_ => {
@@ -87,8 +124,21 @@ fn generate_file>(path: P, text: &str) -> std::io::Result<()> {
fn generate_type(property: &Property, name: &ComponentName) -> String {
match property.optional {
- true => generate_optional_type(&property.property_type, format!("{}{}", name, &property.name.to_case(Case::Pascal))),
- false => generate_required_type(&property.property_type, Some(format!("{}{}", name, &property.name.to_case(Case::Pascal))))
+ OptionalKind::No => {
+ generate_required_type(
+ &property.property_type,
+ Some(format!("{}{}", name, &property.name.to_case(Case::Pascal))),
+ )
+ }
+ OptionalKind::Yes => {
+ generate_optional_type(
+ &property.property_type,
+ format!("{}{}", name, &property.name.to_case(Case::Pascal)),
+ )
+ }
+ OptionalKind::YesButComplicated => {
+ todo!()
+ }
}
}
@@ -104,13 +154,12 @@ fn generate_required_type(property_type: &PropertyType, union_name: Option panic!("client doesn't know about functions in properties"),
PropertyType::Component { reference } => format!("{}Widget", reference.component_name.to_string()),
PropertyType::SharedTypeRef { name } => name.to_owned(),
- // PropertyType::ImageSource => "bytes::Bytes".to_owned(),
PropertyType::Union { .. } => {
match union_name {
None => panic!("should not be used"),
- Some(union_name) => union_name
+ Some(union_name) => union_name,
}
- },
- PropertyType::Array { item } => format!("Vec<{}>", generate_required_type(item, union_name))
+ }
+ PropertyType::Array { item } => format!("Vec<{}>", generate_required_type(item, union_name)),
}
-}
\ No newline at end of file
+}
diff --git a/rust/client/src/global_shortcut.rs b/rust/client/src/global_shortcut.rs
deleted file mode 100644
index 581b6a5..0000000
--- a/rust/client/src/global_shortcut.rs
+++ /dev/null
@@ -1,235 +0,0 @@
-use global_hotkey::hotkey::{Code, HotKey, Modifiers};
-use iced::futures::channel::mpsc::Sender;
-use iced::futures::SinkExt;
-use tokio::runtime::Handle;
-use common::model::{PhysicalKey, PhysicalShortcut};
-use crate::ui::AppMsg;
-
-pub fn register_listener(msg_sender: Sender) {
- let handle = Handle::current();
-
- global_hotkey::GlobalHotKeyEvent::set_event_handler(Some(move |e: global_hotkey::GlobalHotKeyEvent| {
- let mut msg_sender = msg_sender.clone();
-
- if let global_hotkey::HotKeyState::Released = e.state() {
- handle.spawn(async move {
- if let Err(err) = msg_sender.send(AppMsg::ShowWindow).await {
- tracing::warn!(target = "rpc", "error occurred when receiving shortcut event {:?}", err)
- }
- });
- }
- }));
-}
-
-pub fn convert_physical_shortcut_to_hotkey(shortcut: PhysicalShortcut) -> HotKey {
-
- let modifiers: Modifiers = {
- let mut modifiers = Modifiers::empty();
-
- if shortcut.modifier_alt {
- modifiers.insert(Modifiers::ALT);
- }
-
- if shortcut.modifier_control {
- modifiers.insert(Modifiers::CONTROL);
- }
-
- if shortcut.modifier_meta {
- modifiers.insert(Modifiers::META);
- }
-
- if shortcut.modifier_shift {
- modifiers.insert(Modifiers::SHIFT);
- }
-
- modifiers
- };
-
- let code = match shortcut.physical_key {
- PhysicalKey::Backquote => Code::Backquote,
- PhysicalKey::Backslash => Code::Backslash,
- PhysicalKey::BracketLeft => Code::BracketLeft,
- PhysicalKey::BracketRight => Code::BracketRight,
- PhysicalKey::Comma => Code::Comma,
- PhysicalKey::Digit1 => Code::Digit1,
- PhysicalKey::Digit2 => Code::Digit2,
- PhysicalKey::Digit3 => Code::Digit3,
- PhysicalKey::Digit4 => Code::Digit4,
- PhysicalKey::Digit5 => Code::Digit5,
- PhysicalKey::Digit6 => Code::Digit6,
- PhysicalKey::Digit7 => Code::Digit7,
- PhysicalKey::Digit8 => Code::Digit8,
- PhysicalKey::Digit9 => Code::Digit9,
- PhysicalKey::Digit0 => Code::Digit0,
- PhysicalKey::Equal => Code::Equal,
- PhysicalKey::IntlBackslash => Code::IntlBackslash,
- PhysicalKey::IntlRo => Code::IntlRo,
- PhysicalKey::IntlYen => Code::IntlYen,
- PhysicalKey::KeyA => Code::KeyA,
- PhysicalKey::KeyB => Code::KeyB,
- PhysicalKey::KeyC => Code::KeyC,
- PhysicalKey::KeyD => Code::KeyD,
- PhysicalKey::KeyE => Code::KeyE,
- PhysicalKey::KeyF => Code::KeyF,
- PhysicalKey::KeyG => Code::KeyG,
- PhysicalKey::KeyH => Code::KeyH,
- PhysicalKey::KeyI => Code::KeyI,
- PhysicalKey::KeyJ => Code::KeyJ,
- PhysicalKey::KeyK => Code::KeyK,
- PhysicalKey::KeyL => Code::KeyL,
- PhysicalKey::KeyM => Code::KeyM,
- PhysicalKey::KeyN => Code::KeyN,
- PhysicalKey::KeyO => Code::KeyO,
- PhysicalKey::KeyP => Code::KeyP,
- PhysicalKey::KeyQ => Code::KeyQ,
- PhysicalKey::KeyR => Code::KeyR,
- PhysicalKey::KeyS => Code::KeyS,
- PhysicalKey::KeyT => Code::KeyT,
- PhysicalKey::KeyU => Code::KeyU,
- PhysicalKey::KeyV => Code::KeyV,
- PhysicalKey::KeyW => Code::KeyW,
- PhysicalKey::KeyX => Code::KeyX,
- PhysicalKey::KeyY => Code::KeyY,
- PhysicalKey::KeyZ => Code::KeyZ,
- PhysicalKey::Minus => Code::Minus,
- PhysicalKey::Period => Code::Period,
- PhysicalKey::Quote => Code::Quote,
- PhysicalKey::Semicolon => Code::Semicolon,
- PhysicalKey::Slash => Code::Slash,
- PhysicalKey::Backspace => Code::Backspace,
- PhysicalKey::CapsLock => Code::CapsLock,
- PhysicalKey::ContextMenu => Code::ContextMenu,
- PhysicalKey::Enter => Code::Enter,
- PhysicalKey::Space => Code::Space,
- PhysicalKey::Tab => Code::Tab,
- PhysicalKey::Convert => Code::Convert,
- PhysicalKey::KanaMode => Code::KanaMode,
- PhysicalKey::Lang1 => Code::Lang1,
- PhysicalKey::Lang2 => Code::Lang2,
- PhysicalKey::Lang3 => Code::Lang3,
- PhysicalKey::Lang4 => Code::Lang4,
- PhysicalKey::Lang5 => Code::Lang5,
- PhysicalKey::NonConvert => Code::NonConvert,
- PhysicalKey::Delete => Code::Delete,
- PhysicalKey::End => Code::End,
- PhysicalKey::Help => Code::Help,
- PhysicalKey::Home => Code::Home,
- PhysicalKey::Insert => Code::Insert,
- PhysicalKey::PageDown => Code::PageDown,
- PhysicalKey::PageUp => Code::PageUp,
- PhysicalKey::ArrowDown => Code::ArrowDown,
- PhysicalKey::ArrowLeft => Code::ArrowLeft,
- PhysicalKey::ArrowRight => Code::ArrowRight,
- PhysicalKey::ArrowUp => Code::ArrowUp,
- PhysicalKey::NumLock => Code::NumLock,
- PhysicalKey::Numpad0 => Code::Numpad0,
- PhysicalKey::Numpad1 => Code::Numpad1,
- PhysicalKey::Numpad2 => Code::Numpad2,
- PhysicalKey::Numpad3 => Code::Numpad3,
- PhysicalKey::Numpad4 => Code::Numpad4,
- PhysicalKey::Numpad5 => Code::Numpad5,
- PhysicalKey::Numpad6 => Code::Numpad6,
- PhysicalKey::Numpad7 => Code::Numpad7,
- PhysicalKey::Numpad8 => Code::Numpad8,
- PhysicalKey::Numpad9 => Code::Numpad9,
- PhysicalKey::NumpadAdd => Code::NumpadAdd,
- PhysicalKey::NumpadBackspace => Code::NumpadBackspace,
- PhysicalKey::NumpadClear => Code::NumpadClear,
- PhysicalKey::NumpadClearEntry => Code::NumpadClearEntry,
- PhysicalKey::NumpadComma => Code::NumpadComma,
- PhysicalKey::NumpadDecimal => Code::NumpadDecimal,
- PhysicalKey::NumpadDivide => Code::NumpadDivide,
- PhysicalKey::NumpadEnter => Code::NumpadEnter,
- PhysicalKey::NumpadEqual => Code::NumpadEqual,
- PhysicalKey::NumpadHash => Code::NumpadHash,
- PhysicalKey::NumpadMemoryAdd => Code::NumpadMemoryAdd,
- PhysicalKey::NumpadMemoryClear => Code::NumpadMemoryClear,
- PhysicalKey::NumpadMemoryRecall => Code::NumpadMemoryRecall,
- PhysicalKey::NumpadMemoryStore => Code::NumpadMemoryStore,
- PhysicalKey::NumpadMemorySubtract => Code::NumpadMemorySubtract,
- PhysicalKey::NumpadMultiply => Code::NumpadMultiply,
- PhysicalKey::NumpadParenLeft => Code::NumpadParenLeft,
- PhysicalKey::NumpadParenRight => Code::NumpadParenRight,
- PhysicalKey::NumpadStar => Code::NumpadStar,
- PhysicalKey::NumpadSubtract => Code::NumpadSubtract,
- PhysicalKey::Escape => Code::Escape,
- PhysicalKey::Fn => Code::Fn,
- PhysicalKey::FnLock => Code::FnLock,
- PhysicalKey::PrintScreen => Code::PrintScreen,
- PhysicalKey::ScrollLock => Code::ScrollLock,
- PhysicalKey::Pause => Code::Pause,
- PhysicalKey::BrowserBack => Code::BrowserBack,
- PhysicalKey::BrowserFavorites => Code::BrowserFavorites,
- PhysicalKey::BrowserForward => Code::BrowserForward,
- PhysicalKey::BrowserHome => Code::BrowserHome,
- PhysicalKey::BrowserRefresh => Code::BrowserRefresh,
- PhysicalKey::BrowserSearch => Code::BrowserSearch,
- PhysicalKey::BrowserStop => Code::BrowserStop,
- PhysicalKey::Eject => Code::Eject,
- PhysicalKey::LaunchApp1 => Code::LaunchApp1,
- PhysicalKey::LaunchApp2 => Code::LaunchApp2,
- PhysicalKey::LaunchMail => Code::LaunchMail,
- PhysicalKey::MediaPlayPause => Code::MediaPlayPause,
- PhysicalKey::MediaSelect => Code::MediaSelect,
- PhysicalKey::MediaStop => Code::MediaStop,
- PhysicalKey::MediaTrackNext => Code::MediaTrackNext,
- PhysicalKey::MediaTrackPrevious => Code::MediaTrackPrevious,
- PhysicalKey::Power => Code::Power,
- PhysicalKey::Sleep => Code::Sleep,
- PhysicalKey::AudioVolumeDown => Code::AudioVolumeDown,
- PhysicalKey::AudioVolumeMute => Code::AudioVolumeMute,
- PhysicalKey::AudioVolumeUp => Code::AudioVolumeUp,
- PhysicalKey::WakeUp => Code::WakeUp,
- PhysicalKey::Abort => Code::Abort,
- PhysicalKey::Resume => Code::Resume,
- PhysicalKey::Suspend => Code::Suspend,
- PhysicalKey::Again => Code::Again,
- PhysicalKey::Copy => Code::Copy,
- PhysicalKey::Cut => Code::Cut,
- PhysicalKey::Find => Code::Find,
- PhysicalKey::Open => Code::Open,
- PhysicalKey::Paste => Code::Paste,
- PhysicalKey::Props => Code::Props,
- PhysicalKey::Select => Code::Select,
- PhysicalKey::Undo => Code::Undo,
- PhysicalKey::Hiragana => Code::Hiragana,
- PhysicalKey::Katakana => Code::Katakana,
- PhysicalKey::F1 => Code::F1,
- PhysicalKey::F2 => Code::F2,
- PhysicalKey::F3 => Code::F3,
- PhysicalKey::F4 => Code::F4,
- PhysicalKey::F5 => Code::F5,
- PhysicalKey::F6 => Code::F6,
- PhysicalKey::F7 => Code::F7,
- PhysicalKey::F8 => Code::F8,
- PhysicalKey::F9 => Code::F9,
- PhysicalKey::F10 => Code::F10,
- PhysicalKey::F11 => Code::F11,
- PhysicalKey::F12 => Code::F12,
- PhysicalKey::F13 => Code::F13,
- PhysicalKey::F14 => Code::F14,
- PhysicalKey::F15 => Code::F15,
- PhysicalKey::F16 => Code::F16,
- PhysicalKey::F17 => Code::F17,
- PhysicalKey::F18 => Code::F18,
- PhysicalKey::F19 => Code::F19,
- PhysicalKey::F20 => Code::F20,
- PhysicalKey::F21 => Code::F21,
- PhysicalKey::F22 => Code::F22,
- PhysicalKey::F23 => Code::F23,
- PhysicalKey::F24 => Code::F24,
- PhysicalKey::F25 => Code::F25,
- PhysicalKey::F26 => Code::F26,
- PhysicalKey::F27 => Code::F27,
- PhysicalKey::F28 => Code::F28,
- PhysicalKey::F29 => Code::F29,
- PhysicalKey::F30 => Code::F30,
- PhysicalKey::F31 => Code::F31,
- PhysicalKey::F32 => Code::F32,
- PhysicalKey::F33 => Code::F33,
- PhysicalKey::F34 => Code::F34,
- PhysicalKey::F35 => Code::F35,
- };
-
- HotKey::new(Some(modifiers), code)
-}
\ No newline at end of file
diff --git a/rust/client/src/lib.rs b/rust/client/src/lib.rs
index c8dde8d..40bccd3 100644
--- a/rust/client/src/lib.rs
+++ b/rust/client/src/lib.rs
@@ -1,109 +1,27 @@
-use common::dirs::Dirs;
-use common::model::{BackendRequestData, BackendResponseData, UiRequestData, UiResponseData};
-use common::rpc::backend_api::BackendApi;
-use utils::channel::{RequestReceiver, RequestSender};
-use crate::ui::GauntletComplexTheme;
+use crate::ui::scenario_runner::ScenarioRunnerData;
-pub(in crate) mod ui;
-pub(in crate) mod model;
-pub mod global_shortcut;
+mod model;
+mod ui;
-pub fn start_client(
- minimized: bool,
- frontend_receiver: RequestReceiver,
- backend_sender: RequestSender,
+pub fn run_app(minimized: bool) {
+ ui::run(minimized, None);
+}
+
+pub fn run_scenario(
+ scenarios_dir: String,
+ plugins_dir: String,
+ screenshots_dir: String,
+ only_plugin: Option,
+ only_entrypoint: Option,
) {
- ui::run(minimized, frontend_receiver, backend_sender);
+ ui::run(
+ false,
+ Some(ScenarioRunnerData {
+ scenarios_dir,
+ plugins_dir,
+ screenshots_dir,
+ only_plugin,
+ only_entrypoint,
+ }),
+ );
}
-
-pub fn open_window() {
- tokio::runtime::Builder::new_current_thread()
- .enable_all()
- .build()
- .expect("unable to start server tokio runtime")
- .block_on(async {
- let result = BackendApi::new().await;
-
- match result {
- Ok(mut backend_api) => {
- tracing::info!("Server is already running, opening window...");
-
- backend_api.show_window()
- .await
- .expect("Unknown error")
- }
- Err(_) => {
- tracing::error!("Unable to connect to server. Please check if you have Gauntlet running on your PC")
- }
- }
- })
-}
-
-pub fn open_settings_window() {
- tokio::runtime::Builder::new_current_thread()
- .enable_all()
- .build()
- .expect("unable to start server tokio runtime")
- .block_on(async {
- let result = BackendApi::new().await;
-
- match result {
- Ok(mut backend_api) => {
- backend_api.show_settings_window()
- .await
- .expect("Unknown error")
- }
- Err(_) => {
- tracing::error!("Unable to connect to server. Please check if you have Gauntlet running on your PC")
- }
- }
- })
-}
-
-pub fn generate_complex_theme_sample() -> anyhow::Result<()> {
- let dirs = Dirs::new();
-
- let sample_complex_theme_file = dirs.sample_complex_theme_file();
- let complex_theme_file = dirs.complex_theme_file();
-
- let theme_complex = GauntletComplexTheme::default_theme(GauntletComplexTheme::default_simple_theme());
-
- let string = serde_json::to_string_pretty(&theme_complex)?;
-
- let sample_theme_parent = sample_complex_theme_file
- .parent()
- .expect("no parent?");
-
- std::fs::create_dir_all(sample_theme_parent)?;
-
- std::fs::write(&sample_complex_theme_file, string)?;
-
- println!("Created sample using default complex theme at {:?}", sample_complex_theme_file);
- println!("Make changes and rename file to {:?}", complex_theme_file.file_name().unwrap());
-
- Ok(())
-}
-
-pub fn generate_simple_theme_sample() -> anyhow::Result<()> {
- let dirs = Dirs::new();
-
- let sample_simple_theme_file = dirs.sample_simple_theme_color_file();
- let simple_theme_file = dirs.theme_simple_file();
-
- let theme = GauntletComplexTheme::default_simple_theme();
-
- let string = serde_json::to_string_pretty(&theme)?;
-
- let sample_theme_parent = sample_simple_theme_file
- .parent()
- .expect("no parent?");
-
- std::fs::create_dir_all(sample_theme_parent)?;
-
- std::fs::write(&sample_simple_theme_file, string)?;
-
- println!("Created sample using default simple theme at {:?}", sample_simple_theme_file);
- println!("Make changes and rename file to {:?}", simple_theme_file.file_name().unwrap());
-
- Ok(())
-}
\ No newline at end of file
diff --git a/rust/client/src/model.rs b/rust/client/src/model.rs
index 06a866a..1b013d4 100644
--- a/rust/client/src/model.rs
+++ b/rust/client/src/model.rs
@@ -1,4 +1,6 @@
-use common::model::{UiPropertyValue, UiWidgetId};
+use gauntlet_common::model::UiPropertyValue;
+use gauntlet_common::model::UiWidgetId;
+
use crate::ui::AppMsg;
#[derive(Debug, Clone)]
@@ -9,9 +11,9 @@ pub enum UiViewEvent {
event_arguments: Vec,
},
Open {
- href: String
+ href: String,
},
AppEvent {
- event: AppMsg
+ event: AppMsg,
},
}
diff --git a/rust/client/src/ui/client_context.rs b/rust/client/src/ui/client_context.rs
index ecbb9b7..585bb62 100644
--- a/rust/client/src/ui/client_context.rs
+++ b/rust/client/src/ui/client_context.rs
@@ -1,39 +1,45 @@
-use crate::model::UiViewEvent;
-use crate::ui::widget::{ActionPanel, ComponentWidgetEvent};
-use crate::ui::widget_container::PluginWidgetContainer;
-use crate::ui::AppMsg;
-use common::model::{EntrypointId, PhysicalShortcut, PluginId, RootWidget, UiRenderLocation, UiWidgetId};
-use iced::Command;
use std::collections::HashMap;
+use std::sync::Arc;
+
+use gauntlet_common::model::EntrypointId;
+use gauntlet_common::model::PhysicalShortcut;
+use gauntlet_common::model::PluginId;
+use gauntlet_common::model::RootWidget;
+use gauntlet_common::model::UiRenderLocation;
+use gauntlet_common::model::UiWidgetId;
+use iced::Task;
+use iced::widget::container;
+
+use crate::model::UiViewEvent;
+use crate::ui::AppMsg;
+use crate::ui::view_container::PluginViewContainer;
+use crate::ui::widget::action_panel::ActionPanel;
+use crate::ui::widget::events::ComponentWidgetEvent;
pub struct ClientContext {
- inline_views: Vec<(PluginId, PluginWidgetContainer)>, // Vec to have stable ordering
+ views: Vec<(PluginId, PluginViewContainer)>, // Vec to have stable ordering
inline_view_shortcuts: HashMap>,
- view: PluginWidgetContainer,
}
impl ClientContext {
pub fn new() -> Self {
Self {
- inline_views: vec![],
+ views: vec![],
inline_view_shortcuts: HashMap::new(),
- view: PluginWidgetContainer::new(),
}
}
- pub fn get_all_inline_view_containers(&self) -> &Vec<(PluginId, PluginWidgetContainer)> {
- &self.inline_views
- }
-
- pub fn get_first_inline_view_container(&self) -> Option<&PluginWidgetContainer> {
- self.inline_views.first()
+ pub fn get_first_inline_view_container(&self) -> Option<&PluginViewContainer> {
+ self.get_inline_view_containers()
+ .iter()
+ .next()
.map(|(_, container)| container)
}
pub fn get_first_inline_view_action_panel(&self) -> Option {
self.get_first_inline_view_container()
.map(|container| {
- match self.inline_view_shortcuts.get(&container.get_plugin_id()) {
+ match self.inline_view_shortcuts.get(&container.plugin_id()) {
None => container.get_action_panel(&HashMap::new()),
Some(shortcuts) => container.get_action_panel(shortcuts),
}
@@ -41,110 +47,86 @@ impl ClientContext {
.flatten()
}
- pub fn get_inline_view_container(&self, plugin_id: &PluginId) -> &PluginWidgetContainer {
- self.inline_views.iter()
- .find(|(id, _)| id == plugin_id)
- .map(|(_, container)| container)
- .expect("there should always be container for plugin at this point")
+ pub fn get_inline_view_containers(&self) -> Vec<&(PluginId, PluginViewContainer)> {
+ self.views
+ .iter()
+ .filter(|(_, container)| matches!(container.render_location(), UiRenderLocation::InlineView))
+ .collect()
}
- pub fn get_mut_inline_view_container(&mut self, plugin_id: &PluginId) -> &mut PluginWidgetContainer {
- if let Some(index) = self.inline_views.iter().position(|(id, _)| id == plugin_id) {
- let (_, container) = &mut self.inline_views[index];
+ pub fn get_mut_or_create_any_view_container(
+ &mut self,
+ render_location: UiRenderLocation,
+ plugin_id: &PluginId,
+ entrypoint_id: &EntrypointId,
+ ) -> &mut PluginViewContainer {
+ if let Some(index) = self.views.iter().position(|(id, _)| id == plugin_id) {
+ let (_, container) = &mut self.views[index];
container
} else {
- self.inline_views.push((plugin_id.clone(), PluginWidgetContainer::new()));
- let (_, container) = self.inline_views.last_mut().expect("getting just pushed item");
+ let container = PluginViewContainer::new(render_location, plugin_id.clone(), entrypoint_id.clone());
+ self.views.push((plugin_id.clone(), container));
+ let (_, container) = self.views.last_mut().expect("getting just pushed item");
container
}
}
- pub fn get_view_container(&self) -> &PluginWidgetContainer {
- &self.view
+ pub fn get_view_container(&self, plugin_id: &PluginId) -> Option<&PluginViewContainer> {
+ self.views
+ .iter()
+ .find(|(id, _)| id == plugin_id)
+ .filter(|(_, container)| matches!(container.render_location(), UiRenderLocation::View))
+ .map(|(_, container)| container)
}
- pub fn get_mut_view_container(&mut self) -> &mut PluginWidgetContainer {
- &mut self.view
+ pub fn get_mut_view_container(&mut self, plugin_id: &PluginId) -> Option<&mut PluginViewContainer> {
+ self.get_mut_any_view_container(plugin_id)
+ .filter(|container| matches!(container.render_location(), UiRenderLocation::View))
}
- pub fn get_view_plugin_id(&self) -> PluginId {
- self.view.get_plugin_id()
+ pub fn get_mut_any_view_container(&mut self, plugin_id: &PluginId) -> Option<&mut PluginViewContainer> {
+ self.views
+ .iter_mut()
+ .find(|(id, _)| id == plugin_id)
+ .map(|(_, container)| container)
}
- pub fn get_view_entrypoint_id(&self) -> EntrypointId {
- self.view.get_entrypoint_id()
- }
-
- pub fn replace_view(
+ pub fn render_ui(
&mut self,
render_location: UiRenderLocation,
- container: RootWidget,
- images: HashMap,
+ container: Arc,
+ data: HashMap>,
plugin_id: &PluginId,
plugin_name: &str,
entrypoint_id: &EntrypointId,
- entrypoint_name: &str
+ entrypoint_name: &str,
) -> AppMsg {
- match render_location {
- UiRenderLocation::InlineView => self.get_mut_inline_view_container(plugin_id).replace_view(container, images, plugin_id, plugin_name, entrypoint_id, entrypoint_name),
- UiRenderLocation::View => self.get_mut_view_container().replace_view(container, images, plugin_id, plugin_name, entrypoint_id, entrypoint_name)
- }
+ self.get_mut_or_create_any_view_container(render_location, plugin_id, entrypoint_id)
+ .replace_view(container, data, plugin_name, entrypoint_name)
+ }
+
+ pub fn handle_event(&mut self, plugin_id: &PluginId, event: ComponentWidgetEvent) -> Option {
+ self.get_mut_any_view_container(plugin_id)
+ .and_then(|view| view.handle_event(plugin_id.clone(), event))
}
pub fn set_inline_view_shortcuts(&mut self, shortcuts: HashMap>) {
self.inline_view_shortcuts = shortcuts;
}
- pub fn clear_all_inline_views(&mut self) {
- self.inline_views.clear()
+ pub fn clear_all_views(&mut self) {
+ self.views.clear()
}
- pub fn clear_inline_view(&mut self, plugin_id: &PluginId) {
- if let Some(index) = self.inline_views.iter().position(|(id, _)| id == plugin_id) {
- self.inline_views.remove(index);
+ pub fn clear_view(&mut self, plugin_id: &PluginId) {
+ if let Some(index) = self.views.iter().position(|(id, _)| id == plugin_id) {
+ self.views.remove(index);
}
}
- pub fn handle_event(&self, render_location: UiRenderLocation, plugin_id: &PluginId, event: ComponentWidgetEvent) -> Option {
- match render_location {
- UiRenderLocation::InlineView => self.get_inline_view_container(&plugin_id).handle_event(plugin_id.clone(), event),
- UiRenderLocation::View => self.get_view_container().handle_event(plugin_id.clone(), event)
- }
- }
-
- pub fn append_text(&self, text: &str) -> Command {
- self.view.append_text(text)
- }
-
- pub fn backspace_text(&self) -> Command {
- self.view.backspace_text()
- }
-
- pub fn focus_search_bar(&self, widget_id: UiWidgetId) -> Command {
- self.view.focus_search_bar(widget_id)
- }
-
- pub fn toggle_action_panel(&self) {
- self.view.toggle_action_panel()
- }
-
- pub fn get_action_ids(&self) -> Vec {
- self.view.get_action_ids()
- }
-
- pub fn focus_up(&self) -> Command {
- self.view.focus_up()
- }
-
- pub fn focus_down(&self) -> Command {
- self.view.focus_down()
- }
-
- pub fn focus_left(&self) -> Command {
- self.view.focus_left()
- }
-
- pub fn focus_right(&self) -> Command {
- self.view.focus_right()
+ pub fn set_current_focused_item(&mut self, plugin_id: PluginId, target_id: Option