diff --git a/packages/api/src/controllers/archive.js b/packages/api/src/controllers/archive.js
index 92c31c0fd..a9147169a 100644
--- a/packages/api/src/controllers/archive.js
+++ b/packages/api/src/controllers/archive.js
@@ -5,6 +5,7 @@ const { archivedir, clearArchiveLinksCache, resolveArchiveFolder } = require('..
const socket = require('../utility/socket');
const { saveFreeTableData } = require('../utility/freeTableStorage');
const loadFilesRecursive = require('../utility/loadFilesRecursive');
+const getJslFileName = require('../utility/getJslFileName');
module.exports = {
folders_meta: true,
@@ -150,6 +151,15 @@ module.exports = {
return true;
},
+ saveJslData_meta: true,
+ async saveJslData({ folder, file, jslid }) {
+ const source = getJslFileName(jslid);
+ const target = path.join(resolveArchiveFolder(folder), `${file}.jsonl`);
+ await fs.copyFile(source, target);
+ socket.emitChanged(`archive-files-changed-${folder}`);
+ return true;
+ },
+
async getNewArchiveFolder({ database }) {
const isLink = database.endsWith(database);
const name = isLink ? database.slice(0, -5) : database;
diff --git a/packages/web/src/tabs/ProfilerTab.svelte b/packages/web/src/tabs/ProfilerTab.svelte
index 823b63c9a..2e1c8a4ee 100644
--- a/packages/web/src/tabs/ProfilerTab.svelte
+++ b/packages/web/src/tabs/ProfilerTab.svelte
@@ -20,6 +20,15 @@
testEnabled: () => getCurrentEditor()?.isProfiling(),
onClick: () => getCurrentEditor().stopProfiling(),
});
+
+ registerCommand({
+ id: 'profiler.save',
+ category: 'Profiler',
+ name: 'Save',
+ icon: 'icon save',
+ testEnabled: () => getCurrentEditor()?.saveEnabled(),
+ onClick: () => getCurrentEditor().save(),
+ });
@@ -111,5 +141,6 @@
+