feat: expose plugin data storage bridge
This commit is contained in:
parent
874b7c7ffb
commit
7363313f1e
|
|
@ -232,6 +232,31 @@ export function createPluginAPI(pluginId) {
|
|||
}
|
||||
},
|
||||
|
||||
storage: {
|
||||
data: {
|
||||
read: function(name) {
|
||||
assertActive('storage.data.read(' + name + ')');
|
||||
if (!name) {
|
||||
throw new Error('storage.data.read requires a name');
|
||||
}
|
||||
return callBackend(pluginId, 'storage.data.read(' + name + ')', function() {
|
||||
return App.ReadPluginDataJSON(pluginId, name);
|
||||
}).then(function(data) {
|
||||
return data || {};
|
||||
});
|
||||
},
|
||||
write: function(name, data) {
|
||||
assertActive('storage.data.write(' + name + ')');
|
||||
if (!name) {
|
||||
throw new Error('storage.data.write requires a name');
|
||||
}
|
||||
return callBackendErrorString(pluginId, 'storage.data.write(' + name + ')', function() {
|
||||
return App.WritePluginDataJSON(pluginId, name, data || {});
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
files: {
|
||||
list: function(relativeDir) {
|
||||
assertActive('files.list');
|
||||
|
|
|
|||
|
|
@ -216,6 +216,7 @@
|
|||
var pluginSettings = {
|
||||
'verstak.platform-test': { savedText: 'initial value' }
|
||||
};
|
||||
var pluginData = {};
|
||||
var vaultFiles = makeDefaultVaultFiles();
|
||||
var externalOpens = [];
|
||||
var trashEntries = [];
|
||||
|
|
@ -1120,8 +1121,15 @@
|
|||
},
|
||||
ReadPluginSetting: function () { return Promise.resolve(null); },
|
||||
WritePluginSetting: function () { return Promise.resolve(null); },
|
||||
ReadPluginDataJSON: function () { return Promise.resolve({}); },
|
||||
WritePluginDataJSON: function () { return Promise.resolve(null); },
|
||||
ReadPluginDataJSON: function (pluginId, name) {
|
||||
var data = (pluginData[pluginId] && pluginData[pluginId][name]) || {};
|
||||
return Promise.resolve([Object.assign({}, data), '']);
|
||||
},
|
||||
WritePluginDataJSON: function (pluginId, name, data) {
|
||||
pluginData[pluginId] = pluginData[pluginId] || {};
|
||||
pluginData[pluginId][name] = Object.assign({}, data || {});
|
||||
return Promise.resolve('');
|
||||
},
|
||||
OpenWorkbenchResource: function (pluginId, request) {
|
||||
return openWorkbenchResource(pluginId, request || {}, '');
|
||||
},
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ import fs from 'node:fs';
|
|||
import path from 'node:path';
|
||||
import { pathToFileURL } from 'node:url';
|
||||
|
||||
const pluginData = {};
|
||||
|
||||
globalThis.window = {
|
||||
__VERSTAK_PLUGIN_REGISTRY__: {},
|
||||
__VERSTAK_EVENT_HANDLERS__: {},
|
||||
|
|
@ -27,6 +29,15 @@ globalThis.window = {
|
|||
commandId,
|
||||
args,
|
||||
}, '']),
|
||||
ReadPluginDataJSON: (pluginId, name) => Promise.resolve([
|
||||
Object.assign({}, (pluginData[pluginId] && pluginData[pluginId][name]) || {}),
|
||||
'',
|
||||
]),
|
||||
WritePluginDataJSON: (pluginId, name, data) => {
|
||||
pluginData[pluginId] = pluginData[pluginId] || {};
|
||||
pluginData[pluginId][name] = Object.assign({}, data || {});
|
||||
return Promise.resolve('');
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -67,4 +78,14 @@ if (result.status !== 'handled' || result.result.handledPath !== 'Project/Docs/r
|
|||
throw new Error(`unexpected executeFor result: ${JSON.stringify(result)}`);
|
||||
}
|
||||
|
||||
if (!api.storage || !api.storage.data || typeof api.storage.data.read !== 'function' || typeof api.storage.data.write !== 'function') {
|
||||
throw new Error('api.storage.data read/write is missing');
|
||||
}
|
||||
|
||||
await api.storage.data.write('search-index', { version: 1, workspaceRootPath: 'Project' });
|
||||
const stored = await api.storage.data.read('search-index');
|
||||
if (stored.version !== 1 || stored.workspaceRootPath !== 'Project') {
|
||||
throw new Error(`unexpected storage data: ${JSON.stringify(stored)}`);
|
||||
}
|
||||
|
||||
console.log('plugin api contributions smoke passed');
|
||||
|
|
|
|||
Loading…
Reference in New Issue