Files
yaak-mountain-loop/src-tauri/plugins/importer-postman/index.mjs.map
Gregory Schier 33763b6d2f Fix plugins
2024-06-13 07:03:50 -07:00

1 line
13 KiB
Plaintext

{"version":3,"file":"index.mjs","sources":["../../../plugins/importer-postman/src/index.ts"],"sourcesContent":["import { Environment, Folder, HttpRequest, Model, Workspace } from '../../../src-web/lib/models';\n\nconst POSTMAN_2_1_0_SCHEMA = 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json';\nconst POSTMAN_2_0_0_SCHEMA = 'https://schema.getpostman.com/json/collection/v2.0.0/collection.json';\nconst VALID_SCHEMAS = [POSTMAN_2_0_0_SCHEMA, POSTMAN_2_1_0_SCHEMA];\n\ntype AtLeast<T, K extends keyof T> = Partial<T> & Pick<T, K>;\n\ninterface ExportResources {\n workspaces: AtLeast<Workspace, 'name' | 'id' | 'model'>[];\n environments: AtLeast<Environment, 'name' | 'id' | 'model' | 'workspaceId'>[];\n httpRequests: AtLeast<HttpRequest, 'name' | 'id' | 'model' | 'workspaceId'>[];\n folders: AtLeast<Folder, 'name' | 'id' | 'model' | 'workspaceId'>[];\n}\n\nexport function pluginHookImport(\n ctx: any,\n contents: string,\n): { resources: ExportResources } | undefined {\n console.log('CTX', ctx);\n const root = parseJSONToRecord(contents);\n if (root == null) return;\n\n const info = toRecord(root.info);\n const isValidSchema = VALID_SCHEMAS.includes(info.schema);\n if (!isValidSchema || !Array.isArray(root.item)) {\n return;\n }\n\n const globalAuth = importAuth(root.auth);\n\n const exportResources: ExportResources = {\n workspaces: [],\n environments: [],\n httpRequests: [],\n folders: [],\n };\n\n const workspace: ExportResources['workspaces'][0] = {\n model: 'workspace',\n id: generateId('workspace'),\n name: info.name || 'Postman Import',\n description: info.description || '',\n variables:\n root.variable?.map((v: any) => ({\n name: v.key,\n value: v.value,\n })) ?? [],\n };\n exportResources.workspaces.push(workspace);\n\n const importItem = (v: Record<string, any>, folderId: string | null = null) => {\n if (typeof v.name === 'string' && Array.isArray(v.item)) {\n const folder: ExportResources['folders'][0] = {\n model: 'folder',\n workspaceId: workspace.id,\n id: generateId('folder'),\n name: v.name,\n folderId,\n };\n exportResources.folders.push(folder);\n for (const child of v.item) {\n importItem(child, folder.id);\n }\n } else if (typeof v.name === 'string' && 'request' in v) {\n const r = toRecord(v.request);\n const bodyPatch = importBody(r.body);\n const requestAuthPath = importAuth(r.auth);\n const authPatch = requestAuthPath.authenticationType == null ? globalAuth : requestAuthPath;\n const request: ExportResources['httpRequests'][0] = {\n model: 'http_request',\n id: generateId('http_request'),\n workspaceId: workspace.id,\n folderId,\n name: v.name,\n method: r.method || 'GET',\n url: typeof r.url === 'string' ? r.url : toRecord(r.url).raw,\n body: bodyPatch.body,\n bodyType: bodyPatch.bodyType,\n authentication: authPatch.authentication,\n authenticationType: authPatch.authenticationType,\n headers: [\n ...bodyPatch.headers,\n ...authPatch.headers,\n ...toArray(r.header).map((h) => {\n return {\n name: h.key,\n value: h.value,\n enabled: !h.disabled,\n };\n }),\n ],\n };\n exportResources.httpRequests.push(request);\n } else {\n console.log('Unknown item', v, folderId);\n }\n };\n\n for (const item of root.item) {\n importItem(item);\n }\n\n return { resources: convertTemplateSyntax(exportResources) };\n}\n\nfunction importAuth(\n rawAuth: any,\n): Pick<HttpRequest, 'authentication' | 'authenticationType' | 'headers'> {\n const auth = toRecord(rawAuth);\n if ('basic' in auth) {\n return {\n headers: [],\n authenticationType: 'basic',\n authentication: {\n username: auth.basic.username || '',\n password: auth.basic.password || '',\n },\n };\n } else if ('bearer' in auth) {\n return {\n headers: [],\n authenticationType: 'bearer',\n authentication: {\n token: auth.bearer.token || '',\n },\n };\n } else {\n // TODO: support other auth types\n return { headers: [], authenticationType: null, authentication: {} };\n }\n}\n\nfunction importBody(rawBody: any): Pick<HttpRequest, 'body' | 'bodyType' | 'headers'> {\n const body = toRecord(rawBody);\n if ('graphql' in body) {\n return {\n headers: [\n {\n name: 'Content-Type',\n value: 'application/json',\n enabled: true,\n },\n ],\n bodyType: 'graphql',\n body: {\n text: JSON.stringify(\n { query: body.graphql.query, variables: parseJSONToRecord(body.graphql.variables) },\n null,\n 2,\n ),\n },\n };\n } else if ('urlencoded' in body) {\n return {\n headers: [\n {\n name: 'Content-Type',\n value: 'application/x-www-form-urlencoded',\n enabled: true,\n },\n ],\n bodyType: 'application/x-www-form-urlencoded',\n body: {\n form: toArray(body.urlencoded).map((f) => ({\n enabled: !f.disabled,\n name: f.key ?? '',\n value: f.value ?? '',\n })),\n },\n };\n } else if ('formdata' in body) {\n return {\n headers: [\n {\n name: 'Content-Type',\n value: 'multipart/form-data',\n enabled: true,\n },\n ],\n bodyType: 'multipart/form-data',\n body: {\n form: toArray(body.formdata).map((f) =>\n f.src != null\n ? {\n enabled: !f.disabled,\n contentType: f.contentType ?? null,\n name: f.key ?? '',\n file: f.src ?? '',\n }\n : {\n enabled: !f.disabled,\n name: f.key ?? '',\n value: f.value ?? '',\n },\n ),\n },\n };\n } else if ('raw' in body) {\n return {\n headers: [\n {\n name: 'Content-Type',\n value: body.options?.raw?.language === 'json' ? 'application/json' : '',\n enabled: true,\n },\n ],\n bodyType: body.options?.raw?.language === 'json' ? 'application/json' : 'other',\n body: {\n text: body.raw ?? '',\n },\n };\n } else {\n // TODO: support other body types\n return { headers: [], bodyType: null, body: {} };\n }\n}\n\nfunction parseJSONToRecord(jsonStr: string): Record<string, any> | null {\n try {\n return toRecord(JSON.parse(jsonStr));\n } catch (err) {}\n return null;\n}\n\nfunction toRecord(value: any): Record<string, any> {\n if (Object.prototype.toString.call(value) === '[object Object]') return value;\n else return {};\n}\n\nfunction toArray(value: any): any[] {\n if (Object.prototype.toString.call(value) === '[object Array]') return value;\n else return [];\n}\n\n/** Recursively render all nested object properties */\nfunction convertTemplateSyntax<T>(obj: T): T {\n if (typeof obj === 'string') {\n return obj.replace(/{{\\s*(_\\.)?([^}]+)\\s*}}/g, '${[$2]}') as T;\n } else if (Array.isArray(obj) && obj != null) {\n return obj.map(convertTemplateSyntax) as T;\n } else if (typeof obj === 'object' && obj != null) {\n return Object.fromEntries(\n Object.entries(obj).map(([k, v]) => [k, convertTemplateSyntax(v)]),\n ) as T;\n } else {\n return obj;\n }\n}\n\nconst idCount: Partial<Record<Model['model'], number>> = {};\n\nfunction generateId(model: Model['model']): string {\n idCount[model] = (idCount[model] ?? -1) + 1;\n return `GENERATE_ID::${model.toUpperCase()}_${idCount[model]}`;\n}\n"],"names":["POSTMAN_2_1_0_SCHEMA","POSTMAN_2_0_0_SCHEMA","VALID_SCHEMAS","pluginHookImport","ctx","contents","_a","root","parseJSONToRecord","info","toRecord","globalAuth","importAuth","exportResources","workspace","generateId","v","importItem","folderId","folder","child","r","bodyPatch","importBody","requestAuthPath","authPatch","request","toArray","h","item","convertTemplateSyntax","rawAuth","auth","rawBody","_b","_c","_d","body","f","jsonStr","value","obj","k","idCount","model"],"mappings":"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"}