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: {
|
files: {
|
||||||
list: function(relativeDir) {
|
list: function(relativeDir) {
|
||||||
assertActive('files.list');
|
assertActive('files.list');
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,7 @@
|
||||||
var pluginSettings = {
|
var pluginSettings = {
|
||||||
'verstak.platform-test': { savedText: 'initial value' }
|
'verstak.platform-test': { savedText: 'initial value' }
|
||||||
};
|
};
|
||||||
|
var pluginData = {};
|
||||||
var vaultFiles = makeDefaultVaultFiles();
|
var vaultFiles = makeDefaultVaultFiles();
|
||||||
var externalOpens = [];
|
var externalOpens = [];
|
||||||
var trashEntries = [];
|
var trashEntries = [];
|
||||||
|
|
@ -1120,8 +1121,15 @@
|
||||||
},
|
},
|
||||||
ReadPluginSetting: function () { return Promise.resolve(null); },
|
ReadPluginSetting: function () { return Promise.resolve(null); },
|
||||||
WritePluginSetting: function () { return Promise.resolve(null); },
|
WritePluginSetting: function () { return Promise.resolve(null); },
|
||||||
ReadPluginDataJSON: function () { return Promise.resolve({}); },
|
ReadPluginDataJSON: function (pluginId, name) {
|
||||||
WritePluginDataJSON: function () { return Promise.resolve(null); },
|
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) {
|
OpenWorkbenchResource: function (pluginId, request) {
|
||||||
return openWorkbenchResource(pluginId, request || {}, '');
|
return openWorkbenchResource(pluginId, request || {}, '');
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
import { pathToFileURL } from 'node:url';
|
import { pathToFileURL } from 'node:url';
|
||||||
|
|
||||||
|
const pluginData = {};
|
||||||
|
|
||||||
globalThis.window = {
|
globalThis.window = {
|
||||||
__VERSTAK_PLUGIN_REGISTRY__: {},
|
__VERSTAK_PLUGIN_REGISTRY__: {},
|
||||||
__VERSTAK_EVENT_HANDLERS__: {},
|
__VERSTAK_EVENT_HANDLERS__: {},
|
||||||
|
|
@ -27,6 +29,15 @@ globalThis.window = {
|
||||||
commandId,
|
commandId,
|
||||||
args,
|
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)}`);
|
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');
|
console.log('plugin api contributions smoke passed');
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue