feat: add trash restore API
This commit is contained in:
parent
144d844794
commit
4e62e7e019
|
|
@ -13,7 +13,7 @@ for that host-provided object:
|
||||||
- `commands.register/execute/executeFor`
|
- `commands.register/execute/executeFor`
|
||||||
- `contributions.list`
|
- `contributions.list`
|
||||||
- `events.publish/subscribe`
|
- `events.publish/subscribe`
|
||||||
- `files.list/metadata/readText/writeText/createFolder/move/trash/listTrash`
|
- `files.list/metadata/readText/writeText/createFolder/move/trash/listTrash/restoreTrash`
|
||||||
- `workbench.openResource/editResource`
|
- `workbench.openResource/editResource`
|
||||||
- optional `dispose`
|
- optional `dispose`
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import type { CapabilityEntry, FileEntry, FileMetadata, MovePathOptions, OpenResourceRequest, OpenResourceResult, PluginSettings, RegisteredContributionPoints, TrashEntry, TrashResult, WriteTextOptions } from './types';
|
import type { CapabilityEntry, FileEntry, FileMetadata, MovePathOptions, OpenResourceRequest, OpenResourceResult, PluginSettings, RegisteredContributionPoints, RestoreTrashOptions, TrashEntry, TrashResult, WriteTextOptions } from './types';
|
||||||
export type PluginCommandArgs = Record<string, unknown>;
|
export type PluginCommandArgs = Record<string, unknown>;
|
||||||
export type PluginCommandHandler = (args: PluginCommandArgs, declaration: PluginCommandDeclaration) => unknown | Promise<unknown>;
|
export type PluginCommandHandler = (args: PluginCommandArgs, declaration: PluginCommandDeclaration) => unknown | Promise<unknown>;
|
||||||
export type Unsubscribe = () => void;
|
export type Unsubscribe = () => void;
|
||||||
|
|
@ -87,6 +87,7 @@ export interface VerstakPluginAPI {
|
||||||
move(fromRelativePath: string, toRelativePath: string, options?: MovePathOptions): Promise<void>;
|
move(fromRelativePath: string, toRelativePath: string, options?: MovePathOptions): Promise<void>;
|
||||||
trash(relativePath: string): Promise<TrashResult>;
|
trash(relativePath: string): Promise<TrashResult>;
|
||||||
listTrash(): Promise<TrashEntry[]>;
|
listTrash(): Promise<TrashEntry[]>;
|
||||||
|
restoreTrash(trashId: string, options?: RestoreTrashOptions): Promise<string>;
|
||||||
openExternal(relativePath: string): Promise<void>;
|
openExternal(relativePath: string): Promise<void>;
|
||||||
showInFolder(relativePath: string): Promise<void>;
|
showInFolder(relativePath: string): Promise<void>;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"plugin-api.d.ts","sourceRoot":"","sources":["../src/plugin-api.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"plugin-api.d.ts","sourceRoot":"","sources":["../src/plugin-api.ts"],"names":[],"mappings":"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"}
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"plugin-api.js","sourceRoot":"","sources":["../src/plugin-api.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,8EAA8E;AAC9E,gDAAgD;AA6IhD,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;AACtF,CAAC"}
|
{"version":3,"file":"plugin-api.js","sourceRoot":"","sources":["../src/plugin-api.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,8EAA8E;AAC9E,gDAAgD;AA+IhD,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;AACtF,CAAC"}
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQ3E,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,4BAA4B,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAetF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CASnF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,SAAgB,EAAE,OAAO,GAAE,oBAAyB,GAAG,gBAAgB,CAiPlH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCxF;AAGD,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,CAAC"}
|
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,KAAK,EAAwB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAQ3E,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,4BAA4B,CAAC;CAC9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAetF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CASnF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,SAAgB,EAAE,OAAO,GAAE,oBAAyB,GAAG,gBAAgB,CA4QlH;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCxF;AAGD,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,EAAE,EAAE,CAAC"}
|
||||||
|
|
@ -44,6 +44,7 @@ export function createMockPluginAPI(pluginId = 'test.plugin', options = {}) {
|
||||||
const eventHandlers = new Map();
|
const eventHandlers = new Map();
|
||||||
const files = new Map();
|
const files = new Map();
|
||||||
const trashEntries = [];
|
const trashEntries = [];
|
||||||
|
const trashPayloads = new Map();
|
||||||
files.set('', { type: 'folder', modifiedAt: new Date().toISOString() });
|
files.set('', { type: 'folder', modifiedAt: new Date().toISOString() });
|
||||||
function normalizePath(path, allowRoot = false) {
|
function normalizePath(path, allowRoot = false) {
|
||||||
const raw = String(path || '');
|
const raw = String(path || '');
|
||||||
|
|
@ -241,11 +242,41 @@ export function createMockPluginAPI(pluginId = 'test.plugin', options = {}) {
|
||||||
originalType: node.type,
|
originalType: node.type,
|
||||||
basename: baseName(path),
|
basename: baseName(path),
|
||||||
};
|
};
|
||||||
files.delete(path);
|
const moving = Array.from(files.entries()).filter(([candidate]) => candidate === path || candidate.startsWith(`${path}/`));
|
||||||
|
trashPayloads.set(trashId, moving.map(([candidate, movingNode]) => ({
|
||||||
|
suffix: candidate.slice(path.length),
|
||||||
|
node: { ...movingNode },
|
||||||
|
})));
|
||||||
|
moving.forEach(([candidate]) => files.delete(candidate));
|
||||||
trashEntries.unshift(entry);
|
trashEntries.unshift(entry);
|
||||||
return entry;
|
return entry;
|
||||||
}),
|
}),
|
||||||
listTrash: vi.fn(async () => trashEntries.slice()),
|
listTrash: vi.fn(async () => trashEntries.slice()),
|
||||||
|
restoreTrash: vi.fn(async (trashId, options = {}) => {
|
||||||
|
const entry = trashEntries.find((item) => item.trashId === trashId);
|
||||||
|
if (!entry)
|
||||||
|
throw new Error(`not-found: trash entry ${trashId}`);
|
||||||
|
const target = normalizePath(options.targetPath || entry.originalPath);
|
||||||
|
const overwrite = !!options.overwrite;
|
||||||
|
if (files.has(target) && !overwrite)
|
||||||
|
throw new Error(`conflict: ${target}`);
|
||||||
|
const parent = parentPath(target);
|
||||||
|
if (!files.get(parent) || files.get(parent)?.type !== 'folder')
|
||||||
|
throw new Error(`parent-not-found: ${parent}`);
|
||||||
|
if (overwrite) {
|
||||||
|
Array.from(files.keys())
|
||||||
|
.filter((candidate) => candidate === target || candidate.startsWith(`${target}/`))
|
||||||
|
.forEach((candidate) => files.delete(candidate));
|
||||||
|
}
|
||||||
|
(trashPayloads.get(trashId) || []).forEach(({ suffix, node }) => {
|
||||||
|
files.set(`${target}${suffix}`, { ...node, modifiedAt: new Date().toISOString() });
|
||||||
|
});
|
||||||
|
trashPayloads.delete(trashId);
|
||||||
|
const index = trashEntries.findIndex((item) => item.trashId === trashId);
|
||||||
|
if (index >= 0)
|
||||||
|
trashEntries.splice(index, 1);
|
||||||
|
return target;
|
||||||
|
}),
|
||||||
openExternal: vi.fn(async (relativePath) => {
|
openExternal: vi.fn(async (relativePath) => {
|
||||||
const path = normalizePath(relativePath);
|
const path = normalizePath(relativePath);
|
||||||
if (!files.has(path))
|
if (!files.has(path))
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -88,6 +88,12 @@ export interface MovePathOptions {
|
||||||
/** Replace an existing target path when the host supports it. */
|
/** Replace an existing target path when the host supports it. */
|
||||||
overwrite?: boolean;
|
overwrite?: boolean;
|
||||||
}
|
}
|
||||||
|
export interface RestoreTrashOptions {
|
||||||
|
/** Restore to another vault-relative path instead of the original path. */
|
||||||
|
targetPath?: string;
|
||||||
|
/** Replace an existing target path. Hosts reject conflicts by default. */
|
||||||
|
overwrite?: boolean;
|
||||||
|
}
|
||||||
export interface TrashResult {
|
export interface TrashResult {
|
||||||
originalPath: string;
|
originalPath: string;
|
||||||
trashPath: string;
|
trashPath: string;
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -26,6 +26,7 @@ describe('VerstakPluginAPI contract', () => {
|
||||||
expect(typeof api.files.move).toBe('function');
|
expect(typeof api.files.move).toBe('function');
|
||||||
expect(typeof api.files.trash).toBe('function');
|
expect(typeof api.files.trash).toBe('function');
|
||||||
expect(typeof api.files.listTrash).toBe('function');
|
expect(typeof api.files.listTrash).toBe('function');
|
||||||
|
expect(typeof api.files.restoreTrash).toBe('function');
|
||||||
expect(typeof api.files.openExternal).toBe('function');
|
expect(typeof api.files.openExternal).toBe('function');
|
||||||
expect(typeof api.files.showInFolder).toBe('function');
|
expect(typeof api.files.showInFolder).toBe('function');
|
||||||
expect(typeof api.workbench.openResource).toBe('function');
|
expect(typeof api.workbench.openResource).toBe('function');
|
||||||
|
|
@ -251,6 +252,11 @@ describe('VerstakPluginAPI contract', () => {
|
||||||
await expect(api.files.listTrash()).resolves.toEqual([
|
await expect(api.files.listTrash()).resolves.toEqual([
|
||||||
expect.objectContaining({ originalPath: 'PlatformTest/two.txt', trashId: trash.trashId }),
|
expect.objectContaining({ originalPath: 'PlatformTest/two.txt', trashId: trash.trashId }),
|
||||||
]);
|
]);
|
||||||
|
await expect(api.files.restoreTrash(trash.trashId)).resolves.toBe('PlatformTest/two.txt');
|
||||||
|
await expect(api.files.list('PlatformTest')).resolves.toEqual([
|
||||||
|
expect.objectContaining({ relativePath: 'PlatformTest/two.txt', type: 'file' }),
|
||||||
|
]);
|
||||||
|
await expect(api.files.listTrash()).resolves.toEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('files mock rejects non-canonical and reserved paths', async () => {
|
test('files mock rejects non-canonical and reserved paths', async () => {
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import type {
|
||||||
OpenResourceResult,
|
OpenResourceResult,
|
||||||
PluginSettings,
|
PluginSettings,
|
||||||
RegisteredContributionPoints,
|
RegisteredContributionPoints,
|
||||||
|
RestoreTrashOptions,
|
||||||
TrashEntry,
|
TrashEntry,
|
||||||
TrashResult,
|
TrashResult,
|
||||||
WriteTextOptions,
|
WriteTextOptions,
|
||||||
|
|
@ -122,6 +123,7 @@ export interface VerstakPluginAPI {
|
||||||
move(fromRelativePath: string, toRelativePath: string, options?: MovePathOptions): Promise<void>;
|
move(fromRelativePath: string, toRelativePath: string, options?: MovePathOptions): Promise<void>;
|
||||||
trash(relativePath: string): Promise<TrashResult>;
|
trash(relativePath: string): Promise<TrashResult>;
|
||||||
listTrash(): Promise<TrashEntry[]>;
|
listTrash(): Promise<TrashEntry[]>;
|
||||||
|
restoreTrash(trashId: string, options?: RestoreTrashOptions): Promise<string>;
|
||||||
openExternal(relativePath: string): Promise<void>;
|
openExternal(relativePath: string): Promise<void>;
|
||||||
showInFolder(relativePath: string): Promise<void>;
|
showInFolder(relativePath: string): Promise<void>;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ export function createMockPluginAPI(pluginId = 'test.plugin', options: MockPlugi
|
||||||
const eventHandlers = new Map<string, Array<(event: any) => void>>();
|
const eventHandlers = new Map<string, Array<(event: any) => void>>();
|
||||||
const files = new Map<string, { type: 'file' | 'folder'; content?: string; modifiedAt: string }>();
|
const files = new Map<string, { type: 'file' | 'folder'; content?: string; modifiedAt: string }>();
|
||||||
const trashEntries: Array<{ originalPath: string; trashPath: string; trashId: string; deletedAt: string; originalType: 'file' | 'folder'; basename: string }> = [];
|
const trashEntries: Array<{ originalPath: string; trashPath: string; trashId: string; deletedAt: string; originalType: 'file' | 'folder'; basename: string }> = [];
|
||||||
|
const trashPayloads = new Map<string, Array<{ suffix: string; node: { type: 'file' | 'folder'; content?: string; modifiedAt: string } }>>();
|
||||||
files.set('', { type: 'folder', modifiedAt: new Date().toISOString() });
|
files.set('', { type: 'folder', modifiedAt: new Date().toISOString() });
|
||||||
|
|
||||||
function normalizePath(path: string, allowRoot = false): string {
|
function normalizePath(path: string, allowRoot = false): string {
|
||||||
|
|
@ -237,11 +238,37 @@ export function createMockPluginAPI(pluginId = 'test.plugin', options: MockPlugi
|
||||||
originalType: node.type,
|
originalType: node.type,
|
||||||
basename: baseName(path),
|
basename: baseName(path),
|
||||||
};
|
};
|
||||||
files.delete(path);
|
const moving = Array.from(files.entries()).filter(([candidate]) => candidate === path || candidate.startsWith(`${path}/`));
|
||||||
|
trashPayloads.set(trashId, moving.map(([candidate, movingNode]) => ({
|
||||||
|
suffix: candidate.slice(path.length),
|
||||||
|
node: { ...movingNode },
|
||||||
|
})));
|
||||||
|
moving.forEach(([candidate]) => files.delete(candidate));
|
||||||
trashEntries.unshift(entry);
|
trashEntries.unshift(entry);
|
||||||
return entry;
|
return entry;
|
||||||
}),
|
}),
|
||||||
listTrash: vi.fn(async () => trashEntries.slice()),
|
listTrash: vi.fn(async () => trashEntries.slice()),
|
||||||
|
restoreTrash: vi.fn(async (trashId: string, options = {}) => {
|
||||||
|
const entry = trashEntries.find((item) => item.trashId === trashId);
|
||||||
|
if (!entry) throw new Error(`not-found: trash entry ${trashId}`);
|
||||||
|
const target = normalizePath((options as { targetPath?: string }).targetPath || entry.originalPath);
|
||||||
|
const overwrite = !!(options as { overwrite?: boolean }).overwrite;
|
||||||
|
if (files.has(target) && !overwrite) throw new Error(`conflict: ${target}`);
|
||||||
|
const parent = parentPath(target);
|
||||||
|
if (!files.get(parent) || files.get(parent)?.type !== 'folder') throw new Error(`parent-not-found: ${parent}`);
|
||||||
|
if (overwrite) {
|
||||||
|
Array.from(files.keys())
|
||||||
|
.filter((candidate) => candidate === target || candidate.startsWith(`${target}/`))
|
||||||
|
.forEach((candidate) => files.delete(candidate));
|
||||||
|
}
|
||||||
|
(trashPayloads.get(trashId) || []).forEach(({ suffix, node }) => {
|
||||||
|
files.set(`${target}${suffix}`, { ...node, modifiedAt: new Date().toISOString() });
|
||||||
|
});
|
||||||
|
trashPayloads.delete(trashId);
|
||||||
|
const index = trashEntries.findIndex((item) => item.trashId === trashId);
|
||||||
|
if (index >= 0) trashEntries.splice(index, 1);
|
||||||
|
return target;
|
||||||
|
}),
|
||||||
openExternal: vi.fn(async (relativePath: string) => {
|
openExternal: vi.fn(async (relativePath: string) => {
|
||||||
const path = normalizePath(relativePath);
|
const path = normalizePath(relativePath);
|
||||||
if (!files.has(path)) throw new Error(`not-found: ${path}`);
|
if (!files.has(path)) throw new Error(`not-found: ${path}`);
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,13 @@ export interface MovePathOptions {
|
||||||
overwrite?: boolean;
|
overwrite?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface RestoreTrashOptions {
|
||||||
|
/** Restore to another vault-relative path instead of the original path. */
|
||||||
|
targetPath?: string;
|
||||||
|
/** Replace an existing target path. Hosts reject conflicts by default. */
|
||||||
|
overwrite?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface TrashResult {
|
export interface TrashResult {
|
||||||
originalPath: string;
|
originalPath: string;
|
||||||
trashPath: string;
|
trashPath: string;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue