Merge main into proxy branch (formatting and docs)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Gregory Schier
2026-03-13 12:09:59 -07:00
parent 3c4035097a
commit 7314aedc71
712 changed files with 13408 additions and 13322 deletions

View File

@@ -1,23 +1,24 @@
/* oxlint-disable no-base-to-string */
import type {
Context,
Environment,
PartialImportResources,
PluginDefinition,
Workspace,
} from '@yaakapp/api';
import type { ImportPluginResponse } from '@yaakapp/api/lib/plugins/ImporterPlugin';
} from "@yaakapp/api";
import type { ImportPluginResponse } from "@yaakapp/api/lib/plugins/ImporterPlugin";
type AtLeast<T, K extends keyof T> = Partial<T> & Pick<T, K>;
interface ExportResources {
workspaces: AtLeast<Workspace, 'name' | 'id' | 'model'>[];
environments: AtLeast<Environment, 'name' | 'id' | 'model' | 'workspaceId'>[];
workspaces: AtLeast<Workspace, "name" | "id" | "model">[];
environments: AtLeast<Environment, "name" | "id" | "model" | "workspaceId">[];
}
export const plugin: PluginDefinition = {
importer: {
name: 'Postman Environment',
description: 'Import postman environment exports',
name: "Postman Environment",
description: "Import postman environment exports",
onImport(_ctx: Context, args: { text: string }) {
return convertPostmanEnvironment(args.text);
},
@@ -37,9 +38,9 @@ export function convertPostmanEnvironment(contents: string): ImportPluginRespons
type?: string;
}>(root.values);
const scope = root._postman_variable_scope;
const hasEnvMarkers = typeof scope === 'string';
const hasEnvMarkers = typeof scope === "string";
if (values.length === 0 || (!hasEnvMarkers && typeof root.name !== 'string')) {
if (values.length === 0 || (!hasEnvMarkers && typeof root.name !== "string")) {
// Not a Postman environment file, skip
return;
}
@@ -52,18 +53,18 @@ export function convertPostmanEnvironment(contents: string): ImportPluginRespons
const envVariables = values
.map((v) => ({
enabled: v.enabled ?? true,
name: String(v.key ?? ''),
name: String(v.key ?? ""),
value: String(v.value),
description: v.description ? String(v.description) : null,
}))
.filter((v) => v.name.length > 0);
const environment: ExportResources['environments'][0] = {
model: 'environment',
id: generateId('environment'),
name: root.name ? String(root.name) : 'Environment',
workspaceId: 'CURRENT_WORKSPACE',
parentModel: 'environment',
const environment: ExportResources["environments"][0] = {
model: "environment",
id: generateId("environment"),
name: root.name ? String(root.name) : "Environment",
workspaceId: "CURRENT_WORKSPACE",
parentModel: "environment",
parentId: null,
variables: envVariables,
};
@@ -84,27 +85,27 @@ function parseJSONToRecord<T>(jsonStr: string): Record<string, T> | null {
}
}
function toRecord<T>(value: Record<string, T> | unknown): Record<string, T> {
if (value && typeof value === 'object' && !Array.isArray(value)) {
function toRecord<T>(value: unknown): Record<string, T> {
if (value && typeof value === "object" && !Array.isArray(value)) {
return value as Record<string, T>;
}
return {} as Record<string, T>;
}
function toArray<T>(value: unknown): T[] {
if (Object.prototype.toString.call(value) === '[object Array]') return value as T[];
if (Object.prototype.toString.call(value) === "[object Array]") return value as T[];
return [] as T[];
}
/** Recursively render all nested object properties */
function convertTemplateSyntax<T>(obj: T): T {
if (typeof obj === 'string') {
if (typeof obj === "string") {
return obj.replace(/{{\s*(_\.)?([^}]*)\s*}}/g, (_m, _dot, expr) => `\${[${expr.trim()}]}`) as T;
}
if (Array.isArray(obj) && obj != null) {
return obj.map(convertTemplateSyntax) as T;
}
if (typeof obj === 'object' && obj != null) {
if (typeof obj === "object" && obj != null) {
return Object.fromEntries(
Object.entries(obj as Record<string, unknown>).map(([k, v]) => [k, convertTemplateSyntax(v)]),
) as T;
@@ -116,7 +117,7 @@ function deleteUndefinedAttrs<T>(obj: T): T {
if (Array.isArray(obj) && obj != null) {
return obj.map(deleteUndefinedAttrs) as T;
}
if (typeof obj === 'object' && obj != null) {
if (typeof obj === "object" && obj != null) {
return Object.fromEntries(
Object.entries(obj as Record<string, unknown>)
.filter(([, v]) => v !== undefined)
@@ -132,5 +133,3 @@ function generateId(model: string): string {
idCount[model] = (idCount[model] ?? -1) + 1;
return `GENERATE_ID::${model.toUpperCase()}_${idCount[model]}`;
}
export default plugin;