From df5729d6ae3e678dffcfd1ab79479c19b6d05d3f Mon Sep 17 00:00:00 2001 From: yaoweiprc <6896642+yaoweiprc@users.noreply.github.com> Date: Mon, 12 Aug 2024 16:12:27 +0800 Subject: [PATCH] Import postman env in Insomnia project level [INS-4253] (#7821) * Suport for importing environment from postman in Insomnia project level * Update vitest snapshot * Update vitest snapshot * use ts enum * remove change in smoke test --- packages/insomnia/src/common/import.ts | 14 ++++++++++++++ .../importers/__snapshots__/index.test.ts.snap | 6 ++++++ .../src/utils/importers/importers/postman-env.ts | 12 +++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/insomnia/src/common/import.ts b/packages/insomnia/src/common/import.ts index ffb87e2668..7db490e9a4 100644 --- a/packages/insomnia/src/common/import.ts +++ b/packages/insomnia/src/common/import.ts @@ -17,6 +17,7 @@ import { } from '../models/websocket-request'; import { isWorkspace, type Workspace } from '../models/workspace'; import { convert, type InsomniaImporter } from '../utils/importers/convert'; +import { id as postmanEnvImporterId } from '../utils/importers/importers/postman-env'; import { invariant } from '../utils/invariant'; import { database as db } from './database'; import { generateId } from './misc'; @@ -159,6 +160,19 @@ export async function importResourcesToProject({ projectId }: { projectId: strin await importResourcesToNewWorkspace(projectId, postmanTopLevelFolder); return { resources }; } + // if the resource is postman environment, + if (ResourceCache.type.id === postmanEnvImporterId && resources.find(isEnvironment)) { + await Promise.all(resources.filter(isEnvironment).map(resource => + importResourcesToNewWorkspace(projectId, { + name: resource.name, + scope: 'environment', + // __BASE_ENVIRONMENT_ID__ is the default parentId for environment imported by postman env importer, we use it to indicate the new workspace id + _id: '__BASE_ENVIRONMENT_ID__', + } as Workspace) + )); + return { resources }; + } + // No workspace, so create one if (!resources.find(isWorkspace)) { await importResourcesToNewWorkspace(projectId); diff --git a/packages/insomnia/src/utils/importers/importers/__snapshots__/index.test.ts.snap b/packages/insomnia/src/utils/importers/importers/__snapshots__/index.test.ts.snap index b525a86f47..aef8634473 100644 --- a/packages/insomnia/src/utils/importers/importers/__snapshots__/index.test.ts.snap +++ b/packages/insomnia/src/utils/importers/importers/__snapshots__/index.test.ts.snap @@ -6002,6 +6002,9 @@ exports[`Fixtures > Import postman-env > basic-input.json 1`] = ` "data": { "foo": "production", }, + "meta": { + "postmanEnvScope": "environment", + }, "name": "Production Env", "parentId": "__BASE_ENVIRONMENT_ID__", }, @@ -6022,6 +6025,9 @@ exports[`Fixtures > Import postman-env > no-name-input.json 1`] = ` "data": { "foo-and-bar": "production-env", }, + "meta": { + "postmanEnvScope": "environment", + }, "name": "Postman Environment", "parentId": "__BASE_ENVIRONMENT_ID__", }, diff --git a/packages/insomnia/src/utils/importers/importers/postman-env.ts b/packages/insomnia/src/utils/importers/importers/postman-env.ts index a445b4ffc4..47830677c1 100644 --- a/packages/insomnia/src/utils/importers/importers/postman-env.ts +++ b/packages/insomnia/src/utils/importers/importers/postman-env.ts @@ -20,13 +20,20 @@ type Data = { [key in EnvVar['key']]: EnvVar['value']; }; +export enum POSTMAN_ENV_TYPE { + GLOBAL = 'globals', + ENVIRONMENT = 'environment', +}; + +const validPostmanEnvTypeList = Object.values(POSTMAN_ENV_TYPE) as string[]; + export const convert: Converter = rawData => { try { const { _postman_variable_scope, name, values } = JSON.parse( rawData, ) as Environment; - if (_postman_variable_scope !== 'environment') { + if (!validPostmanEnvTypeList.includes(_postman_variable_scope)) { return null; } @@ -44,6 +51,9 @@ export const convert: Converter = rawData => { [key]: value, }; }, {}), + meta: { + postmanEnvScope: _postman_variable_scope, + }, }, ]; } catch (error) {