mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-21 08:59:07 +01:00
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import type { Environment, PluginDefinition } from '@yaakapp/api';
|
|
|
|
export const plugin: PluginDefinition = {
|
|
importer: {
|
|
name: 'Yaak',
|
|
description: 'Yaak official format',
|
|
onImport(_ctx, args) {
|
|
return migrateImport(args.text);
|
|
},
|
|
},
|
|
};
|
|
|
|
export function migrateImport(contents: string) {
|
|
let parsed;
|
|
try {
|
|
parsed = JSON.parse(contents);
|
|
} catch {
|
|
return undefined;
|
|
}
|
|
|
|
if (!isJSObject(parsed)) {
|
|
return undefined;
|
|
}
|
|
|
|
const isYaakExport = 'yaakSchema' in parsed;
|
|
if (!isYaakExport) {
|
|
return;
|
|
}
|
|
|
|
// Migrate v1 to v2 -- changes requests to httpRequests
|
|
if ('requests' in parsed.resources) {
|
|
parsed.resources.httpRequests = parsed.resources.requests;
|
|
delete parsed.resources['requests'];
|
|
}
|
|
|
|
// Migrate v2 to v3
|
|
for (const workspace of parsed.resources.workspaces ?? []) {
|
|
if ('variables' in workspace) {
|
|
// Create the base environment
|
|
const baseEnvironment: Partial<Environment> = {
|
|
id: `GENERATE_ID::base_env_${workspace['id']}`,
|
|
name: 'Global Variables',
|
|
variables: workspace.variables,
|
|
workspaceId: workspace.id,
|
|
};
|
|
parsed.resources.environments = parsed.resources.environments ?? [];
|
|
parsed.resources.environments.push(baseEnvironment);
|
|
|
|
// Delete variables key from the workspace
|
|
delete workspace.variables;
|
|
|
|
// Add environmentId to relevant environments
|
|
for (const environment of parsed.resources.environments) {
|
|
if (environment.workspaceId === workspace.id && environment.id !== baseEnvironment.id) {
|
|
environment.environmentId = baseEnvironment.id;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Migrate v3 to v4
|
|
for (const environment of parsed.resources.environments ?? []) {
|
|
if ('environmentId' in environment) {
|
|
environment.base = environment.environmentId == null;
|
|
delete environment.environmentId;
|
|
}
|
|
}
|
|
|
|
return { resources: parsed.resources }; // Should already be in the correct format
|
|
}
|
|
|
|
function isJSObject(obj: unknown) {
|
|
return Object.prototype.toString.call(obj) === '[object Object]';
|
|
}
|