@cmflow/atlas 3.4.0-beta.21 → 3.4.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/atlas.mjs +539 -482
- package/dist/bin/atlas.mjs.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/{propertyExtractionService-8BjqpPFa.mjs → propertyExtractionService-BLat-Hsf.mjs} +45 -33
- package/dist/propertyExtractionService-BLat-Hsf.mjs.map +1 -0
- package/dist/{routeBackendTopologyService-CkOLUfcj.mjs → routeBackendTopologyService-CQyRyoSN.mjs} +52 -20
- package/dist/routeBackendTopologyService-CQyRyoSN.mjs.map +1 -0
- package/dist/rules/lodashGetRule.d.mts +1 -1
- package/dist/rules/mappingUtilityRule.d.mts +1 -1
- package/dist/rules/memberGetFieldRule.d.mts +1 -1
- package/dist/{types-Af0_VOnh.d.mts → types-D5fngFrb.d.mts} +3 -1
- package/dist/workers/routeBackendTopologyWorker.mjs +1 -1
- package/package.json +1 -1
- package/dist/propertyExtractionService-8BjqpPFa.mjs.map +0 -1
- package/dist/routeBackendTopologyService-CkOLUfcj.mjs.map +0 -1
|
@@ -53,6 +53,8 @@ interface UserConfig {
|
|
|
53
53
|
openapiTimeoutMs: number;
|
|
54
54
|
/** Default Directus base URL used by `push` when no CLI option or environment variable overrides it. */
|
|
55
55
|
directusUrl: string;
|
|
56
|
+
/** Default Directus token used by `push` when no CLI option or environment variable overrides it. */
|
|
57
|
+
directusToken: string;
|
|
56
58
|
/**
|
|
57
59
|
* Module aliases resolved while traversing static-analysis dependencies.
|
|
58
60
|
* Defaults are read from `compilerOptions.paths` in the repository tsconfig.
|
|
@@ -119,4 +121,4 @@ interface UserConfig {
|
|
|
119
121
|
}
|
|
120
122
|
//#endregion
|
|
121
123
|
export { defineExpressionRule as a, FieldExtractionRule as i, BackendSource as n, UserConfig as r, BackendProperty as t };
|
|
122
|
-
//# sourceMappingURL=types-
|
|
124
|
+
//# sourceMappingURL=types-D5fngFrb.d.mts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fileURLToPath as __atlasFileURLToPath } from "node:url";
|
|
2
2
|
const __filename = __atlasFileURLToPath(import.meta.url);
|
|
3
|
-
import { t as generateBackendTopologyArtifacts } from "../routeBackendTopologyService-
|
|
3
|
+
import { t as generateBackendTopologyArtifacts } from "../routeBackendTopologyService-CQyRyoSN.mjs";
|
|
4
4
|
import { parentPort, workerData } from "node:worker_threads";
|
|
5
5
|
|
|
6
6
|
//#region src/workers/routeBackendTopologyWorker.ts
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"propertyExtractionService-8BjqpPFa.mjs","names":[],"sources":["../src/services/http/httpClient.ts","../src/services/openapi/loadOpenApiDocument.ts","../src/services/openapi/schemaService.ts","../src/services/openapi/propertyExtractionService.ts"],"sourcesContent":["class HttpClient {\n async fetch(url: string, init: RequestInit & { onProgress: (content: string) => void }): Promise<string | unknown>;\n async fetch(url: string, init?: RequestInit): Promise<Response>;\n async fetch(url: string, init?: RequestInit & { onProgress?: (content: string) => void }): Promise<Response | string | unknown> {\n const headers = { accept: \"application/json\", ...init?.headers };\n\n const response = await fetch(url, {\n ...init,\n headers\n });\n\n if (!response.ok) {\n throw new Error(`Unable to fetch ${url}: ${response.status} ${response.statusText}`);\n }\n\n if (init?.onProgress) {\n const reader = response.body?.getReader();\n\n if (!reader) {\n return response.json() as unknown;\n }\n\n const decoder = new TextDecoder();\n let content = \"\";\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n content += decoder.decode(value, { stream: true });\n\n init.onProgress(content);\n }\n\n return content + decoder.decode();\n }\n\n return response;\n }\n\n async get<T>(url: string, init?: RequestInit): Promise<T> {\n const response = await this.fetch(url, init);\n return response.json() as Promise<T>;\n }\n}\n\nexport const httpClient = new HttpClient();\n","import { httpClient } from \"../http/httpClient\";\nimport { taskProgressService } from \"../tasks/taskProgressService\";\n\nexport type OpenApiDocument = {\n info?: { version?: string };\n paths?: Record<string, Record<string, any>>;\n components?: Record<string, any>;\n};\n\nexport async function loadOpenApiDocument(url: string, timeoutMs?: number): Promise<OpenApiDocument> {\n try {\n const content = await httpClient.fetch(url, {\n signal: timeoutMs ? AbortSignal.timeout(timeoutMs) : undefined,\n onProgress(content) {\n taskProgressService.log(`Downloading (${(content.length / 1_048_576).toFixed(1)} MB)`);\n }\n });\n\n if (!content || typeof content === \"object\") {\n return content as OpenApiDocument;\n }\n\n taskProgressService.log(\"Parsing document\");\n\n return JSON.parse(content as string) as OpenApiDocument;\n } catch (error) {\n if (error instanceof Error && (error.name === \"AbortError\" || error.name === \"TimeoutError\")) {\n throw new Error(`OpenAPI download timed out after ${timeoutMs}ms: ${url}`);\n }\n\n throw new Error(`Unable to fetch OpenAPI document from ${url}: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","import type { OpenApiDocument } from \"./loadOpenApiDocument\";\n\nexport function resolveOpenApiReference(value: any, swagger: OpenApiDocument): any {\n if (!value || typeof value !== \"object\" || typeof value.$ref !== \"string\" || !value.$ref.startsWith(\"#/\")) {\n return value;\n }\n let current: any = swagger;\n for (const segment of value.$ref\n .replace(\"#/\", \"\")\n .split(\"/\")\n .map((part: string) => part.replace(/~1/g, \"/\").replace(/~0/g, \"~\"))) {\n current = current?.[segment];\n if (current === undefined) {\n return value;\n }\n }\n return current;\n}\n","import type { BackendProperty, ExtractedApiProperty } from \"../../models/types\";\nimport type { OpenApiDocument } from \"./loadOpenApiDocument\";\nimport { resolveOpenApiReference } from \"./schemaService\";\n\ntype OpenApiLeafProperty = {\n path: string;\n description?: string;\n deprecated?: boolean;\n};\n\nfunction isSuccessStatusCode(statusCode: string): boolean {\n return /^\\d+$/.test(statusCode) && Number(statusCode) >= 200 && Number(statusCode) <= 299;\n}\n\nfunction selectPreferredSchema(content: any, swagger: OpenApiDocument): any {\n if (!content || typeof content !== \"object\") {\n return undefined;\n }\n\n if (content[\"application/json\"]?.schema) {\n return resolveOpenApiReference(content[\"application/json\"].schema, swagger);\n }\n\n const firstSchema = Object.values(content).find((entry: any) => entry?.schema) as any;\n return firstSchema ? resolveOpenApiReference(firstSchema.schema, swagger) : undefined;\n}\n\nfunction extractLeafProperties(schema: any, swagger: OpenApiDocument, currentPath = \"\"): OpenApiLeafProperty[] {\n const resolvedSchema = resolveOpenApiReference(schema, swagger);\n\n if (!resolvedSchema || typeof resolvedSchema !== \"object\") {\n return [];\n }\n\n if (Array.isArray(resolvedSchema.allOf)) {\n return resolvedSchema.allOf.flatMap((item: any) => extractLeafProperties(item, swagger, currentPath));\n }\n\n if (resolvedSchema.type === \"array\" || resolvedSchema.items) {\n const arrayPath = currentPath ? `${currentPath}[]` : \"[]\";\n return extractLeafProperties(resolvedSchema.items, swagger, arrayPath);\n }\n\n const properties = resolvedSchema.properties || {};\n if (!Object.keys(properties).length) {\n return currentPath\n ? [\n {\n path: currentPath,\n description: resolvedSchema.description,\n deprecated: resolvedSchema.deprecated\n }\n ]\n : [];\n }\n\n return Object.entries(properties).flatMap(([propertyName, propertySchema]: [string, any]) => {\n const nextPath = currentPath ? `${currentPath}.${propertyName}` : propertyName;\n return extractLeafProperties(propertySchema, swagger, nextPath);\n });\n}\n\nfunction mapInputType(inType?: string): ExtractedApiProperty[\"type\"] | null {\n if (inType === \"query\") {\n return \"QUERY\";\n }\n if (inType === \"path\") {\n return \"PATH\";\n }\n if (inType === \"header\") {\n return \"HEADER\";\n }\n return null;\n}\n\nexport function extractOpenApiInputProperties(operation: any, swagger: OpenApiDocument): ExtractedApiProperty[] {\n const map = new Map<string, ExtractedApiProperty>();\n const parameters = Array.isArray(operation.parameters) ? operation.parameters : [];\n\n for (const rawParameter of parameters) {\n const parameter = resolveOpenApiReference(rawParameter, swagger);\n const inputType = mapInputType(parameter?.in);\n if (!parameter || !inputType || !parameter.name) {\n continue;\n }\n\n const properties = extractLeafProperties(parameter.schema, swagger, parameter.name);\n const resolvedProperties = properties.length\n ? properties\n : [\n {\n path: parameter.name,\n description: parameter.description,\n deprecated: parameter.deprecated\n }\n ];\n\n for (const property of resolvedProperties) {\n map.set(`${inputType}:${property.path}`, {\n path: property.path,\n description: property.description || parameter.description,\n deprecated: property.deprecated ?? parameter.deprecated ?? false,\n type: inputType\n });\n }\n }\n\n const requestBody = resolveOpenApiReference(operation.requestBody, swagger);\n if (requestBody?.content) {\n const schema = selectPreferredSchema(requestBody.content, swagger);\n for (const property of extractLeafProperties(schema, swagger)) {\n map.set(`BODY:${property.path}`, {\n path: property.path,\n description: property.description || requestBody.description,\n deprecated: property.deprecated ?? false,\n type: \"BODY\"\n });\n }\n }\n\n return [...map.values()];\n}\n\nexport function extractOpenApiOutputProperties(operation: any, swagger: OpenApiDocument): ExtractedApiProperty[] {\n const map = new Map<string, ExtractedApiProperty>();\n const responses = operation?.responses || {};\n\n for (const [statusCode, rawResponse] of Object.entries(responses)) {\n if (!isSuccessStatusCode(statusCode)) {\n continue;\n }\n\n const response = resolveOpenApiReference(rawResponse, swagger);\n const schema = selectPreferredSchema(response?.content, swagger);\n for (const property of extractLeafProperties(schema, swagger)) {\n map.set(property.path, {\n path: property.path,\n description: property.description || response?.description,\n deprecated: property.deprecated ?? false,\n type: \"RESPONSE_BODY\"\n });\n }\n }\n\n return [...map.values()];\n}\n\nexport function extractOpenApiBackendProperties(swagger: OpenApiDocument): BackendProperty[] {\n const properties = new Map<string, BackendProperty>();\n for (const [route, pathItem] of Object.entries(swagger.paths || {})) {\n for (const [rawMethod, operation] of Object.entries(pathItem || {})) {\n if (!/^(get|post|put|patch|delete|head|options)$/i.test(rawMethod)) {\n continue;\n }\n const method = rawMethod.toUpperCase();\n for (const property of [\n ...extractOpenApiInputProperties(operation, swagger),\n ...extractOpenApiOutputProperties(operation, swagger)\n ]) {\n const key = `${method}:${route}:${property.path}`;\n if (!properties.has(key)) {\n properties.set(key, {\n route,\n method,\n field: property.path,\n description: property.description\n });\n }\n }\n }\n }\n return [...properties.values()];\n}\n"],"mappings":"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"}
|