mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-18 15:33:52 +01:00
79 lines
2.5 KiB
JavaScript
79 lines
2.5 KiB
JavaScript
import { importEnvironment } from './importers/environment.js';
|
|
import { importRequest } from './importers/request.js';
|
|
import { importWorkspace } from './importers/workspace.js';
|
|
import {
|
|
isEnvironment,
|
|
isJSObject,
|
|
isRequest,
|
|
isRequestGroup,
|
|
isWorkspace,
|
|
} from './helpers/types.js';
|
|
import { parseVariables } from './helpers/variables.js';
|
|
import { importFolder } from './importers/folder.js';
|
|
|
|
export function pluginHookImport(contents) {
|
|
const parsed = JSON.parse(contents);
|
|
if (!isJSObject(parsed)) {
|
|
return;
|
|
}
|
|
|
|
const { _type, __export_format } = parsed;
|
|
if (_type !== 'export' || __export_format !== 4 || !Array.isArray(parsed.resources)) {
|
|
return;
|
|
}
|
|
|
|
const resources = {
|
|
workspaces: [],
|
|
requests: [],
|
|
environments: [],
|
|
folders: [],
|
|
};
|
|
|
|
// Import workspaces
|
|
const workspacesToImport = parsed.resources.filter(isWorkspace);
|
|
for (const workspaceToImport of workspacesToImport) {
|
|
console.log('IMPORTING WORKSPACE', workspaceToImport.name);
|
|
const baseEnvironment = parsed.resources.find(
|
|
(r) => isEnvironment(r) && r.parentId === workspaceToImport._id,
|
|
);
|
|
console.log('FOUND BASE ENV', baseEnvironment.name);
|
|
resources.workspaces.push(
|
|
importWorkspace(
|
|
workspaceToImport,
|
|
baseEnvironment ? parseVariables(baseEnvironment.data) : [],
|
|
),
|
|
);
|
|
console.log('IMPORTING ENVIRONMENTS', baseEnvironment.name);
|
|
const environmentsToImport = parsed.resources.filter(
|
|
(r) => isEnvironment(r) && r.parentId === baseEnvironment?._id,
|
|
);
|
|
console.log('FOUND', environmentsToImport.length, 'ENVIRONMENTS');
|
|
resources.environments.push(
|
|
...environmentsToImport.map((r) => importEnvironment(r, workspaceToImport._id)),
|
|
);
|
|
|
|
const nextFolder = (parentId) => {
|
|
const children = parsed.resources.filter((r) => r.parentId === parentId);
|
|
let sortPriority = 0;
|
|
for (const child of children) {
|
|
if (isRequestGroup(child)) {
|
|
resources.folders.push(importFolder(child, workspaceToImport._id));
|
|
nextFolder(child._id);
|
|
} else if (isRequest(child)) {
|
|
resources.requests.push(importRequest(child, workspaceToImport._id, sortPriority++));
|
|
}
|
|
}
|
|
};
|
|
|
|
// Import folders
|
|
nextFolder(workspaceToImport._id);
|
|
}
|
|
|
|
// Filter out any `null` values
|
|
resources.requests = resources.requests.filter(Boolean);
|
|
resources.environments = resources.environments.filter(Boolean);
|
|
resources.workspaces = resources.workspaces.filter(Boolean);
|
|
|
|
return resources;
|
|
}
|