This commit is contained in:
parent
f486be9780
commit
0d411428dc
BIN
.yarn/install-state.gz
vendored
BIN
.yarn/install-state.gz
vendored
Binary file not shown.
@ -5,8 +5,10 @@
|
||||
"@codemirror/language": "https://github.com/lishid/cm-language",
|
||||
"@codemirror/state": "^6.0.1",
|
||||
"@codemirror/view": "^6.0.1",
|
||||
"@playwright/test": "^1.48.1",
|
||||
"asar": "^3.2.0",
|
||||
"electron": "^33.0.2",
|
||||
"obsidian": "latest",
|
||||
"playwright": "^1.48.1",
|
||||
"tmp": "^0.2.3",
|
||||
"typescript": "^5.6.3"
|
||||
@ -34,9 +36,7 @@
|
||||
"prepublish": "npm run build"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.48.1",
|
||||
"@types/tmp": "^0",
|
||||
"obsidian": "latest",
|
||||
"vitest": "^2.1.3"
|
||||
},
|
||||
"type": "module"
|
||||
|
@ -4,7 +4,7 @@ import { Fixtures } from "@playwright/test";
|
||||
import path from "path";
|
||||
import { ObsidianTestFixtures } from "./fixtures.js";
|
||||
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
||||
import { getApp, waitForIndexingComplete } from "./util.js";
|
||||
import { pageUtils, waitForIndexingComplete } from "./util.js";
|
||||
import { execSync } from "child_process";
|
||||
import { randomBytes } from "crypto";
|
||||
|
||||
@ -47,11 +47,12 @@ function checkToy() {
|
||||
}
|
||||
|
||||
function generateVaultConfig(vault: string) {
|
||||
const vaultHash = randomBytes(16).toString("hex").toLocaleLowerCase();
|
||||
const vaultHash = randomBytes(8).toString("hex").toLocaleLowerCase();
|
||||
let configLocation;
|
||||
console.log("vault is", vault)
|
||||
checkToy();
|
||||
if (process.platform == "win32") {
|
||||
configLocation = path.join(`${process.env.LOCALAPPDATA}`, "Obsidian");
|
||||
configLocation = path.join(`${process.env.APPDATA}`, "Obsidian");
|
||||
} else {
|
||||
configLocation = path.join(`${process.env.XDG_CONFIG_HOME}`, "obsidian");
|
||||
try {
|
||||
@ -122,7 +123,18 @@ const obsidianTestFixtures: Fixtures<ObsidianTestFixtures> = {
|
||||
page = electronApp.windows()[electronApp.windows().length - 1]!;
|
||||
await page.waitForEvent("load");
|
||||
await page.waitForLoadState("domcontentloaded");
|
||||
await waitForIndexingComplete(await getApp(page));
|
||||
for(let fn of Object.entries(pageUtils)) {
|
||||
await page.exposeFunction(fn[0], fn[1]);
|
||||
}
|
||||
try {
|
||||
await waitForIndexingComplete(page);
|
||||
} catch(e) {
|
||||
console.warn("timed out waiting for metadata cache. continuing...");
|
||||
}
|
||||
page.on("pageerror", exc => {
|
||||
console.error("EXCEPTION");
|
||||
console.error(exc);
|
||||
})
|
||||
page.on("console", async (msg) => {
|
||||
console.log(
|
||||
...(await Promise.all(msg.args().map((a) => a.jsonValue())))
|
||||
|
@ -1,114 +0,0 @@
|
||||
import {
|
||||
_electron,
|
||||
_electron as electron,
|
||||
ElectronApplication,
|
||||
Page,
|
||||
} from "playwright";
|
||||
import {expect} from "vitest"
|
||||
import { App, TFile, Vault } from "obsidian";
|
||||
import { execSync } from "child_process";
|
||||
import path from "path";
|
||||
import { EOL } from "os";
|
||||
type RawOptions = NonNullable<Parameters<typeof _electron.launch>[0]>;
|
||||
export type TestOptions = Omit<RawOptions, "executablePath"> & {
|
||||
vault: string;
|
||||
};
|
||||
export class ObsidianTester {
|
||||
#loadPromise: Promise<void>;
|
||||
|
||||
public electronApp: ElectronApplication | null = null;
|
||||
public page: Page;
|
||||
public app: App;
|
||||
|
||||
constructor(options: Partial<TestOptions & { vault: string }>) {
|
||||
const args = [...(options.args || [])];
|
||||
if (options.vault)
|
||||
args.push(`obsidian://open?vault=${encodeURI(options.vault)}`);
|
||||
this.#loadPromise = new Promise((res, rej) => {
|
||||
electron
|
||||
.launch({
|
||||
...options,
|
||||
args,
|
||||
executablePath: ObsidianTester.getExe(),
|
||||
})
|
||||
.then((v) => {
|
||||
this.postInit(v).then(() => {
|
||||
res();
|
||||
});
|
||||
})
|
||||
.catch((e) => rej(e));
|
||||
});
|
||||
}
|
||||
public get vault(): Vault {
|
||||
return this.app.vault
|
||||
}
|
||||
|
||||
public async doWithApp(
|
||||
callback: (app: App) => Promise<unknown>
|
||||
): Promise<unknown> {
|
||||
await this.#loadPromise;
|
||||
return await callback(this.app);
|
||||
}
|
||||
|
||||
public async doWithVault(
|
||||
callback: (vault: Vault) => Promise<unknown>
|
||||
): Promise<unknown> {
|
||||
await this.#loadPromise;
|
||||
return await callback(this.app.vault);
|
||||
}
|
||||
|
||||
public async assertFileEquals(path: string, expectedContent: string, cached: boolean = true) {
|
||||
await this.#loadPromise;
|
||||
const fileContent = await this.readFile(path, cached);
|
||||
|
||||
expect(fileContent).toEqual(this.normalizeEOL(expectedContent));
|
||||
}
|
||||
public async assertLineEquals(path: string, lineNumber: number, expectedContent: string, cached: boolean = true) {
|
||||
await this.#loadPromise;
|
||||
const fileContent = await this.readFile(path, cached);
|
||||
|
||||
expect(fileContent.split("\n")[lineNumber]).toEqual(this.normalizeEOL(expectedContent));
|
||||
}
|
||||
|
||||
public async assertLinesEqual(filePath: string, start: number, end: number, expected: string, cached: boolean = true) {
|
||||
await this.#loadPromise;
|
||||
const fileContent = await this.readFile(filePath, cached);
|
||||
const lines = fileContent.split("\n").slice(start, end);
|
||||
const expectedLines = this.normalizeEOL(expected).split("\n");
|
||||
expect(lines.every((l, i) => l == expectedLines[i])).toEqual(true);
|
||||
}
|
||||
|
||||
public getFile(file: string): TFile {
|
||||
let f = this.app.vault.getFileByPath(file);
|
||||
if(!f) {
|
||||
throw new Error("File does not exist in vault.");
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
normalizeEOL(str: string): string {
|
||||
return str.split(/\r\n|\r|\n/).join("\n");
|
||||
}
|
||||
|
||||
async readFile(path: string, cached: boolean = true): Promise<string> {
|
||||
await this.#loadPromise;
|
||||
const file = this.getFile(path);
|
||||
return this.normalizeEOL(await (cached ? this.app.vault.cachedRead(file) : this.app.vault.read(file)));
|
||||
}
|
||||
|
||||
private async postInit(electronApp: ElectronApplication) {
|
||||
this.electronApp = electronApp;
|
||||
this.page = await this.electronApp.firstWindow();
|
||||
this.app = await this.page.evaluate<App>("window.app");
|
||||
}
|
||||
|
||||
public static getExe(): string {
|
||||
if (process.platform == "win32") {
|
||||
return path.join(process.env.LOCALAPPDATA!, "Obsidian", "Obsidian.exe");
|
||||
}
|
||||
if (process.platform == "darwin") {
|
||||
throw new Error("use a non-toy operating system, dumbass");
|
||||
}
|
||||
return execSync("command -v obsidian").toString();
|
||||
}
|
||||
}
|
@ -1,9 +1,17 @@
|
||||
import { App, TFile } from "obsidian";
|
||||
import { JSHandle, Page } from "playwright";
|
||||
import { Page } from "playwright";
|
||||
import { expect } from "@playwright/test";
|
||||
|
||||
// type TestArgs = Parameters<Parameters<typeof test>[2]>[0];
|
||||
|
||||
/**
|
||||
* asserts that the contents of the file at `path` is equal to `expectedContent`.
|
||||
*
|
||||
* @export
|
||||
* @param {Page} page - a Playwright page
|
||||
* @param {string} path - the file to check
|
||||
* @param {string} expectedContent - the expected content
|
||||
* @param {boolean} [cached=true] - whether to use `app.vault.cachedRead`
|
||||
*/
|
||||
export async function assertFileEquals(
|
||||
page: Page,
|
||||
path: string,
|
||||
@ -11,9 +19,20 @@ export async function assertFileEquals(
|
||||
cached: boolean = true
|
||||
) {
|
||||
const fileContent = await readFile(page, path, cached);
|
||||
|
||||
expect(fileContent).toEqual(normalizeEOL(expectedContent));
|
||||
}
|
||||
|
||||
/**
|
||||
* asserts that the line at `lineNumber` in the file at `path` is equal
|
||||
* to `expectedContent`.
|
||||
*
|
||||
* @export
|
||||
* @param {Page} page - a Playwright page
|
||||
* @param {string} path - the file to check
|
||||
* @param {number} lineNumber - the line in the file to check (0-based)
|
||||
* @param {string} expectedContent - the expected content
|
||||
* @param {boolean} [cached=true] - whether to use `app.vault.cachedRead`
|
||||
*/
|
||||
export async function assertLineEquals(
|
||||
page: Page,
|
||||
path: string,
|
||||
@ -27,73 +46,122 @@ export async function assertLineEquals(
|
||||
normalizeEOL(expectedContent)
|
||||
);
|
||||
}
|
||||
export async function getApp(page: Page): Promise<JSHandle<App>> {
|
||||
return await page.evaluateHandle("window.app");
|
||||
}
|
||||
|
||||
/**
|
||||
* asserts that the lines in the specified range are equal to the expected
|
||||
* content.
|
||||
*
|
||||
* @export
|
||||
* @param {Page} page - a Playwright page
|
||||
* @param {string} path the file to check
|
||||
* @param {number} start - the start of the desired line range (0-based)
|
||||
* @param {number} end - the end of the desired line range (1-based)
|
||||
* @param {string} expected the expected content
|
||||
* @param {boolean} [cached=true] - whether to use `app.vault.cachedRead`
|
||||
*/
|
||||
export async function assertLinesEqual(
|
||||
page: Page,
|
||||
filePath: string,
|
||||
path: string,
|
||||
start: number,
|
||||
end: number,
|
||||
expected: string,
|
||||
cached: boolean = true
|
||||
) {
|
||||
const fileContent = await readFile(page, filePath, cached);
|
||||
const fileContent = await readFile(page, path, cached);
|
||||
const lines = fileContent.split("\n").slice(start, end);
|
||||
const expectedLines = normalizeEOL(expected).split("\n");
|
||||
expect(lines.every((l, i) => l == expectedLines[i])).toEqual(true);
|
||||
}
|
||||
|
||||
export function getFile(app: App, file: string): TFile {
|
||||
let f = app.vault.getFileByPath(file);
|
||||
const getFile = (file: string): TFile => {
|
||||
console.log("gfbp", window.app.vault.getFileByPath, file)
|
||||
let f = window.app.vault.getFileByPath(file);
|
||||
if (!f) {
|
||||
throw new Error("File does not exist in vault.");
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
function normalizeEOL(str: string): string {
|
||||
return str.split(/\r\n|\r|\n/).join("\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* reads the file at `path` and returns its contents
|
||||
*
|
||||
* @export
|
||||
* @param {Page} page - a Playwright page
|
||||
* @param {string} path the file to read
|
||||
* @param {boolean} [cached=true] - whether to use `app.vault.cachedRead`
|
||||
* @return {*} {Promise<string>} the file's contents
|
||||
*/
|
||||
export async function readFile(
|
||||
app: Page,
|
||||
page: Page,
|
||||
path: string,
|
||||
cached: boolean = true
|
||||
): Promise<string> {
|
||||
const fn = getFile.toString();
|
||||
return normalizeEOL(
|
||||
await doWithApp(app, (a) => {
|
||||
const file = getFile(a, path);
|
||||
return cached ? a.vault.cachedRead(file) : a.vault.read(file);
|
||||
})
|
||||
await doWithApp(page, async (app, args) => {
|
||||
console.log(args);
|
||||
console.log(app.vault.getFileByPath)
|
||||
const gf = eval(`(${args.getFile})`);
|
||||
console.log("file", gf);
|
||||
const file = (eval(args.getFile))(args.path);
|
||||
return await (args.cached ? app.vault.cachedRead(file) : app.vault.read(file));
|
||||
}, {path, cached, getFile: fn})
|
||||
);
|
||||
}
|
||||
|
||||
export async function doWithApp<T = unknown>(
|
||||
/**
|
||||
* do something with the global `App` instance,
|
||||
* and return the result of that invocation
|
||||
*
|
||||
* @export
|
||||
* @typeParam - T the return type of the callback
|
||||
* @typeParam - A the additional argument(s) to pass
|
||||
* @param {Page} page - a Playwright page
|
||||
* @param {((a: App, args?: A) => T | Promise<T>)} callback - the function to execute
|
||||
* @param {A} [args] - optional arguments to pass to the callback
|
||||
* @return {*} {Promise<T>} a promise containing `callback`'s return value (if any)
|
||||
*/
|
||||
export async function doWithApp<T = unknown, A = any>(
|
||||
page: Page,
|
||||
callback: (a: App) => T | Promise<T>
|
||||
callback: (a: App, args?: A) => T | Promise<T>,
|
||||
args?: A
|
||||
): Promise<T> {
|
||||
const cbStr = callback.toString();
|
||||
return await page.evaluate<T, string>(async (cb) => {
|
||||
const func = new Function(`return (${cb})(window.app)`)
|
||||
return await func();
|
||||
}, cbStr);
|
||||
return await page.evaluate<T, {__callback: string, args: A}>(async ({__callback: cb, args}) => {
|
||||
const func = new Function("args", `return ((${cb}))(window.app, args)`)
|
||||
console.log(func.toString());
|
||||
return await func(args);
|
||||
}, {__callback: cbStr, args});
|
||||
}
|
||||
|
||||
export function waitForIndexingComplete(appHandle: JSHandle<App>) {
|
||||
return appHandle.evaluate(() => {
|
||||
return new Promise((res2, rej2) => {
|
||||
let resolved = false;
|
||||
app.metadataCache.on("resolved", () => {
|
||||
res2(null);
|
||||
resolved = true;
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export function waitForIndexingComplete(page: Page) {
|
||||
return page.evaluateHandle<App>("window.app").then((appHandle) => {
|
||||
return appHandle.evaluate(() => {
|
||||
return new Promise((res2, rej2) => {
|
||||
let resolved = false;
|
||||
app.metadataCache.on("resolved", () => {
|
||||
res2(null);
|
||||
resolved = true;
|
||||
});
|
||||
setTimeout(() => !resolved && rej2("timeout"), 10000);
|
||||
});
|
||||
setTimeout(() => !resolved && rej2("timeout"), 10000);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
function normalizeEOL(str: string): string {
|
||||
return str.split(/\r\n|\r|\n/).join("\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export const pageUtils = {
|
||||
getFile,
|
||||
}
|
||||
};
|
||||
|
@ -2,7 +2,7 @@
|
||||
"compilerOptions": {
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "Node",
|
||||
"moduleResolution": "bundler",
|
||||
"lib": [
|
||||
"es2015",
|
||||
"DOM",
|
||||
@ -11,20 +11,16 @@
|
||||
|
||||
"outDir": "lib",
|
||||
"baseUrl": ".",
|
||||
"strict": true,
|
||||
"alwaysStrict": true,
|
||||
"strictFunctionTypes": true,
|
||||
"strictNullChecks": true,
|
||||
"strictPropertyInitialization": false,
|
||||
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noImplicitAny": true,
|
||||
"noImplicitAny": false,
|
||||
"noImplicitReturns": true,
|
||||
"noImplicitThis": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
|
||||
"resolvePackageJsonExports": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"downlevelIteration": true,
|
||||
|
@ -1,3 +1,4 @@
|
||||
import { Funkify } from "@han-moe-htet/funkify";
|
||||
import {App} from "obsidian";
|
||||
declare global {
|
||||
var app: App;
|
||||
|
@ -1,22 +1,21 @@
|
||||
import { expect } from '@playwright/test';
|
||||
import {test} from "obsidian-testing-framework"
|
||||
import {doWithApp, getApp} from "obsidian-testing-framework/utils";
|
||||
import {TFile} from "obsidian";
|
||||
import {assertLineEquals, doWithApp, readFile} from "obsidian-testing-framework/utils";
|
||||
test('something', async ({ page }) => {
|
||||
console.log(page.url());
|
||||
expect(/obsidian\.md/i.test(page.url())).toBeTruthy()
|
||||
});
|
||||
test("idk", async({page}) => {
|
||||
console.log("idk")
|
||||
let what = await doWithApp(page,async (app) => {
|
||||
console.log("hi", Object.keys(app), (app.metadataCache));
|
||||
let thing = app.metadataCache.getFirstLinkpathDest("Welcome", "/");
|
||||
console.log("THING", thing);
|
||||
await new Promise(res => setTimeout(res, 5000))
|
||||
console.log(thing?.path);
|
||||
const what = {...thing};
|
||||
delete what.parent;
|
||||
delete what.vault;
|
||||
return what;
|
||||
let what = await doWithApp<TFile | null>(page, async (app) => {
|
||||
return app.metadataCache.getFirstLinkpathDest("Welcome", "/");
|
||||
});
|
||||
expect(what.basename).toEqual("Welcome")
|
||||
// console.log("WHAT", what)
|
||||
// console.log(what?.vault)
|
||||
expect(what?.basename).toEqual("Welcome")
|
||||
})
|
||||
|
||||
test("file line", async({page}) => {
|
||||
console.log(await readFile(page, "Welcome.md"))
|
||||
await assertLineEquals(page, "Welcome.md", 0, "This is your new *vault*.");
|
||||
})
|
||||
|
@ -39,7 +39,6 @@ export default defineConfig<ObsidianTestFixtures>({
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/* Configure projects for major browsers */
|
||||
|
||||
|
||||
|
286
yarn.lock
286
yarn.lock
@ -371,6 +371,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@han-moe-htet/funkify@npm:^0.0.1":
|
||||
version: 0.0.1
|
||||
resolution: "@han-moe-htet/funkify@npm:0.0.1"
|
||||
checksum: 10c0/5d7380fc8bc73d16c9d362374b28ca3fe03a3f69693025bccf64c2bf56bd5eb9dfe559a4c70f5381b9f4b61c6d42fa79aebfb16702339ae6c3d6dfe68d33f714
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@isaacs/cliui@npm:^8.0.2":
|
||||
version: 8.0.2
|
||||
resolution: "@isaacs/cliui@npm:8.0.2"
|
||||
@ -938,6 +945,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@yarnpkg/lockfile@npm:^1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "@yarnpkg/lockfile@npm:1.1.0"
|
||||
checksum: 10c0/0bfa50a3d756623d1f3409bc23f225a1d069424dbc77c6fd2f14fb377390cd57ec703dc70286e081c564be9051ead9ba85d81d66a3e68eeb6eb506d4e0c0fbda
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"abbrev@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "abbrev@npm:2.0.0"
|
||||
@ -978,7 +992,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansi-styles@npm:^4.0.0":
|
||||
"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
|
||||
version: 4.3.0
|
||||
resolution: "ansi-styles@npm:4.3.0"
|
||||
dependencies:
|
||||
@ -1026,6 +1040,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"at-least-node@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "at-least-node@npm:1.0.0"
|
||||
checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"balanced-match@npm:^1.0.0":
|
||||
version: 1.0.2
|
||||
resolution: "balanced-match@npm:1.0.2"
|
||||
@ -1131,6 +1152,19 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"call-bind@npm:^1.0.5":
|
||||
version: 1.0.7
|
||||
resolution: "call-bind@npm:1.0.7"
|
||||
dependencies:
|
||||
es-define-property: "npm:^1.0.0"
|
||||
es-errors: "npm:^1.3.0"
|
||||
function-bind: "npm:^1.1.2"
|
||||
get-intrinsic: "npm:^1.2.4"
|
||||
set-function-length: "npm:^1.2.1"
|
||||
checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chai@npm:^5.1.1":
|
||||
version: 5.1.1
|
||||
resolution: "chai@npm:5.1.1"
|
||||
@ -1144,6 +1178,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chalk@npm:^4.1.2":
|
||||
version: 4.1.2
|
||||
resolution: "chalk@npm:4.1.2"
|
||||
dependencies:
|
||||
ansi-styles: "npm:^4.1.0"
|
||||
supports-color: "npm:^7.1.0"
|
||||
checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"check-error@npm:^2.1.1":
|
||||
version: 2.1.1
|
||||
resolution: "check-error@npm:2.1.1"
|
||||
@ -1165,6 +1209,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ci-info@npm:^3.7.0":
|
||||
version: 3.9.0
|
||||
resolution: "ci-info@npm:3.9.0"
|
||||
checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"clean-stack@npm:^2.0.0":
|
||||
version: 2.2.0
|
||||
resolution: "clean-stack@npm:2.2.0"
|
||||
@ -1211,7 +1262,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cross-spawn@npm:^7.0.0":
|
||||
"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3":
|
||||
version: 7.0.3
|
||||
resolution: "cross-spawn@npm:7.0.3"
|
||||
dependencies:
|
||||
@ -1266,7 +1317,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"define-data-property@npm:^1.0.1":
|
||||
"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4":
|
||||
version: 1.1.4
|
||||
resolution: "define-data-property@npm:1.1.4"
|
||||
dependencies:
|
||||
@ -1688,6 +1739,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"find-yarn-workspace-root@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "find-yarn-workspace-root@npm:2.0.0"
|
||||
dependencies:
|
||||
micromatch: "npm:^4.0.2"
|
||||
checksum: 10c0/b0d3843013fbdaf4e57140e0165889d09fa61745c9e85da2af86e54974f4cc9f1967e40f0d8fc36a79d53091f0829c651d06607d552582e53976f3cd8f4e5689
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"foreground-child@npm:^3.1.0":
|
||||
version: 3.3.0
|
||||
resolution: "foreground-child@npm:3.3.0"
|
||||
@ -1709,6 +1769,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fs-extra@npm:^9.0.0":
|
||||
version: 9.1.0
|
||||
resolution: "fs-extra@npm:9.1.0"
|
||||
dependencies:
|
||||
at-least-node: "npm:^1.0.0"
|
||||
graceful-fs: "npm:^4.2.0"
|
||||
jsonfile: "npm:^6.0.1"
|
||||
universalify: "npm:^2.0.0"
|
||||
checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"fs-minipass@npm:^2.0.0":
|
||||
version: 2.1.0
|
||||
resolution: "fs-minipass@npm:2.1.0"
|
||||
@ -1833,7 +1905,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"glob@npm:^7.1.6":
|
||||
"glob@npm:^7.1.3, glob@npm:^7.1.6":
|
||||
version: 7.2.3
|
||||
resolution: "glob@npm:7.2.3"
|
||||
dependencies:
|
||||
@ -1913,14 +1985,21 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6":
|
||||
"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6":
|
||||
version: 4.2.11
|
||||
resolution: "graceful-fs@npm:4.2.11"
|
||||
checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-property-descriptors@npm:^1.0.0":
|
||||
"has-flag@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "has-flag@npm:4.0.0"
|
||||
checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "has-property-descriptors@npm:1.0.2"
|
||||
dependencies:
|
||||
@ -2046,6 +2125,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-docker@npm:^2.0.0":
|
||||
version: 2.2.1
|
||||
resolution: "is-docker@npm:2.2.1"
|
||||
bin:
|
||||
is-docker: cli.js
|
||||
checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-extglob@npm:^2.1.1":
|
||||
version: 2.1.1
|
||||
resolution: "is-extglob@npm:2.1.1"
|
||||
@ -2083,6 +2171,22 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-wsl@npm:^2.1.1":
|
||||
version: 2.2.0
|
||||
resolution: "is-wsl@npm:2.2.0"
|
||||
dependencies:
|
||||
is-docker: "npm:^2.0.0"
|
||||
checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isarray@npm:^2.0.5":
|
||||
version: 2.0.5
|
||||
resolution: "isarray@npm:2.0.5"
|
||||
checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isexe@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "isexe@npm:2.0.0"
|
||||
@ -2110,6 +2214,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"javascript-stringify@npm:^2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "javascript-stringify@npm:2.1.0"
|
||||
checksum: 10c0/374e74ebff29b94de78da39daa6e530999c58a145aeb293dc21180c4584459b14d9e5721d9bc6ed4eba319c437ef0145c157c946b70ecddcff6668682a002bcc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsbn@npm:1.1.0":
|
||||
version: 1.1.0
|
||||
resolution: "jsbn@npm:1.1.0"
|
||||
@ -2124,6 +2235,18 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"json-stable-stringify@npm:^1.0.2":
|
||||
version: 1.1.1
|
||||
resolution: "json-stable-stringify@npm:1.1.1"
|
||||
dependencies:
|
||||
call-bind: "npm:^1.0.5"
|
||||
isarray: "npm:^2.0.5"
|
||||
jsonify: "npm:^0.0.1"
|
||||
object-keys: "npm:^1.1.1"
|
||||
checksum: 10c0/3801e3eeccbd030afb970f54bea690a079cfea7d9ed206a1b17ca9367f4b7772c764bf77a48f03e56b50e5f7ee7d11c52339fe20d8d7ccead003e4ca69e4cfde
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"json-stringify-safe@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "json-stringify-safe@npm:5.0.1"
|
||||
@ -2143,6 +2266,26 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsonfile@npm:^6.0.1":
|
||||
version: 6.1.0
|
||||
resolution: "jsonfile@npm:6.1.0"
|
||||
dependencies:
|
||||
graceful-fs: "npm:^4.1.6"
|
||||
universalify: "npm:^2.0.0"
|
||||
dependenciesMeta:
|
||||
graceful-fs:
|
||||
optional: true
|
||||
checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsonify@npm:^0.0.1":
|
||||
version: 0.0.1
|
||||
resolution: "jsonify@npm:0.0.1"
|
||||
checksum: 10c0/7f5499cdd59a0967ed35bda48b7cec43d850bbc8fb955cdd3a1717bb0efadbe300724d5646de765bb7a99fc1c3ab06eb80d93503c6faaf99b4ff50a3326692f6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"keyv@npm:^4.0.0":
|
||||
version: 4.5.4
|
||||
resolution: "keyv@npm:4.5.4"
|
||||
@ -2152,6 +2295,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"klaw-sync@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "klaw-sync@npm:6.0.0"
|
||||
dependencies:
|
||||
graceful-fs: "npm:^4.1.11"
|
||||
checksum: 10c0/00d8e4c48d0d699b743b3b028e807295ea0b225caf6179f51029e19783a93ad8bb9bccde617d169659fbe99559d73fb35f796214de031d0023c26b906cecd70a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"loupe@npm:^3.1.0, loupe@npm:^3.1.1":
|
||||
version: 3.1.2
|
||||
resolution: "loupe@npm:3.1.2"
|
||||
@ -2218,7 +2370,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"micromatch@npm:^4.0.4":
|
||||
"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4":
|
||||
version: 4.0.8
|
||||
resolution: "micromatch@npm:4.0.8"
|
||||
dependencies:
|
||||
@ -2260,6 +2412,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"minimist@npm:^1.2.6":
|
||||
version: 1.2.8
|
||||
resolution: "minimist@npm:1.2.8"
|
||||
checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"minipass-collect@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "minipass-collect@npm:2.0.1"
|
||||
@ -2468,11 +2627,14 @@ __metadata:
|
||||
"@codemirror/language": "https://github.com/lishid/cm-language"
|
||||
"@codemirror/state": "npm:^6.0.1"
|
||||
"@codemirror/view": "npm:^6.0.1"
|
||||
"@han-moe-htet/funkify": "npm:^0.0.1"
|
||||
"@playwright/test": "npm:^1.48.1"
|
||||
"@types/tmp": "npm:^0"
|
||||
asar: "npm:^3.2.0"
|
||||
electron: "npm:^33.0.2"
|
||||
javascript-stringify: "npm:^2.1.0"
|
||||
obsidian: "npm:latest"
|
||||
patch-package: "npm:^8.0.0"
|
||||
playwright: "npm:^1.48.1"
|
||||
tmp: "npm:^0.2.3"
|
||||
typescript: "npm:^5.6.3"
|
||||
@ -2502,6 +2664,23 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"open@npm:^7.4.2":
|
||||
version: 7.4.2
|
||||
resolution: "open@npm:7.4.2"
|
||||
dependencies:
|
||||
is-docker: "npm:^2.0.0"
|
||||
is-wsl: "npm:^2.1.1"
|
||||
checksum: 10c0/77573a6a68f7364f3a19a4c80492712720746b63680ee304555112605ead196afe91052bd3c3d165efdf4e9d04d255e87de0d0a77acec11ef47fd5261251813f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"os-tmpdir@npm:~1.0.2":
|
||||
version: 1.0.2
|
||||
resolution: "os-tmpdir@npm:1.0.2"
|
||||
checksum: 10c0/f438450224f8e2687605a8dd318f0db694b6293c5d835ae509a69e97c8de38b6994645337e5577f5001115470414638978cc49da1cdcc25106dad8738dc69990
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"p-cancelable@npm:^2.0.0":
|
||||
version: 2.1.1
|
||||
resolution: "p-cancelable@npm:2.1.1"
|
||||
@ -2525,6 +2704,31 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"patch-package@npm:^8.0.0":
|
||||
version: 8.0.0
|
||||
resolution: "patch-package@npm:8.0.0"
|
||||
dependencies:
|
||||
"@yarnpkg/lockfile": "npm:^1.1.0"
|
||||
chalk: "npm:^4.1.2"
|
||||
ci-info: "npm:^3.7.0"
|
||||
cross-spawn: "npm:^7.0.3"
|
||||
find-yarn-workspace-root: "npm:^2.0.0"
|
||||
fs-extra: "npm:^9.0.0"
|
||||
json-stable-stringify: "npm:^1.0.2"
|
||||
klaw-sync: "npm:^6.0.0"
|
||||
minimist: "npm:^1.2.6"
|
||||
open: "npm:^7.4.2"
|
||||
rimraf: "npm:^2.6.3"
|
||||
semver: "npm:^7.5.3"
|
||||
slash: "npm:^2.0.0"
|
||||
tmp: "npm:^0.0.33"
|
||||
yaml: "npm:^2.2.2"
|
||||
bin:
|
||||
patch-package: index.js
|
||||
checksum: 10c0/690eab0537e953a3fd7d32bb23f0e82f97cd448f8244c3227ed55933611a126f9476397325c06ad2c11d881a19b427a02bd1881bee78d89f1731373fc4fe0fee
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"path-is-absolute@npm:^1.0.0":
|
||||
version: 1.0.1
|
||||
resolution: "path-is-absolute@npm:1.0.1"
|
||||
@ -2711,6 +2915,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"rimraf@npm:^2.6.3":
|
||||
version: 2.7.1
|
||||
resolution: "rimraf@npm:2.7.1"
|
||||
dependencies:
|
||||
glob: "npm:^7.1.3"
|
||||
bin:
|
||||
rimraf: ./bin.js
|
||||
checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"roarr@npm:^2.15.3":
|
||||
version: 2.15.4
|
||||
resolution: "roarr@npm:2.15.4"
|
||||
@ -2820,7 +3035,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7":
|
||||
"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3":
|
||||
version: 7.6.3
|
||||
resolution: "semver@npm:7.6.3"
|
||||
bin:
|
||||
@ -2838,6 +3053,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"set-function-length@npm:^1.2.1":
|
||||
version: 1.2.2
|
||||
resolution: "set-function-length@npm:1.2.2"
|
||||
dependencies:
|
||||
define-data-property: "npm:^1.1.4"
|
||||
es-errors: "npm:^1.3.0"
|
||||
function-bind: "npm:^1.1.2"
|
||||
get-intrinsic: "npm:^1.2.4"
|
||||
gopd: "npm:^1.0.1"
|
||||
has-property-descriptors: "npm:^1.0.2"
|
||||
checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"shebang-command@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "shebang-command@npm:2.0.0"
|
||||
@ -2868,6 +3097,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"slash@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "slash@npm:2.0.0"
|
||||
checksum: 10c0/f83dbd3cb62c41bb8fcbbc6bf5473f3234b97fa1d008f571710a9d3757a28c7169e1811cad1554ccb1cc531460b3d221c9a7b37f549398d9a30707f0a5af9193
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"slash@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "slash@npm:3.0.0"
|
||||
@ -2996,6 +3232,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"supports-color@npm:^7.1.0":
|
||||
version: 7.2.0
|
||||
resolution: "supports-color@npm:7.2.0"
|
||||
dependencies:
|
||||
has-flag: "npm:^4.0.0"
|
||||
checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tar@npm:^6.1.11, tar@npm:^6.2.1":
|
||||
version: 6.2.1
|
||||
resolution: "tar@npm:6.2.1"
|
||||
@ -3045,6 +3290,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tmp@npm:^0.0.33":
|
||||
version: 0.0.33
|
||||
resolution: "tmp@npm:0.0.33"
|
||||
dependencies:
|
||||
os-tmpdir: "npm:~1.0.2"
|
||||
checksum: 10c0/69863947b8c29cabad43fe0ce65cec5bb4b481d15d4b4b21e036b060b3edbf3bc7a5541de1bacb437bb3f7c4538f669752627fdf9b4aaf034cebd172ba373408
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tmp@npm:^0.2.3":
|
||||
version: 0.2.3
|
||||
resolution: "tmp@npm:0.2.3"
|
||||
@ -3165,6 +3419,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"universalify@npm:^2.0.0":
|
||||
version: 2.0.1
|
||||
resolution: "universalify@npm:2.0.1"
|
||||
checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"vite-node@npm:2.1.3":
|
||||
version: 2.1.3
|
||||
resolution: "vite-node@npm:2.1.3"
|
||||
@ -3371,6 +3632,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yaml@npm:^2.2.2":
|
||||
version: 2.6.0
|
||||
resolution: "yaml@npm:2.6.0"
|
||||
bin:
|
||||
yaml: bin.mjs
|
||||
checksum: 10c0/9e74cdb91cc35512a1c41f5ce509b0e93cc1d00eff0901e4ba831ee75a71ddf0845702adcd6f4ee6c811319eb9b59653248462ab94fa021ab855543a75396ceb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"yauzl@npm:^2.10.0":
|
||||
version: 2.10.0
|
||||
resolution: "yauzl@npm:2.10.0"
|
||||
|
Loading…
Reference in New Issue
Block a user