every-plugin 0.4.14 → 0.4.15

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.
Files changed (85) hide show
  1. package/dist/build/rspack/index.cjs +3 -3
  2. package/dist/build/rspack/index.cjs.map +1 -0
  3. package/dist/build/rspack/index.d.cts +1 -1
  4. package/dist/build/rspack/index.d.cts.map +1 -0
  5. package/dist/build/rspack/index.d.mts +1 -1
  6. package/dist/build/rspack/index.d.mts.map +1 -0
  7. package/dist/build/rspack/index.mjs +3 -3
  8. package/dist/build/rspack/index.mjs.map +1 -0
  9. package/dist/errors-9sNpYLv5.d.mts +1 -1
  10. package/dist/errors-9sNpYLv5.d.mts.map +1 -0
  11. package/dist/errors-CVnoPl9v.cjs +1 -1
  12. package/dist/errors-CVnoPl9v.cjs.map +1 -0
  13. package/dist/errors-D7keKf7a.mjs +1 -1
  14. package/dist/errors-D7keKf7a.mjs.map +1 -0
  15. package/dist/errors-DKPPPYYT.d.cts +1 -1
  16. package/dist/errors-DKPPPYYT.d.cts.map +1 -0
  17. package/dist/fetch-8DauUFDh.mjs +335 -0
  18. package/dist/fetch-8DauUFDh.mjs.map +1 -0
  19. package/dist/fetch-CrBvwsZ4.cjs +336 -0
  20. package/dist/fetch-CrBvwsZ4.cjs.map +1 -0
  21. package/dist/index-Coz54d1B.d.mts +387 -0
  22. package/dist/index-Coz54d1B.d.mts.map +1 -0
  23. package/dist/index-G63gBZIY.d.cts +386 -0
  24. package/dist/index-G63gBZIY.d.cts.map +1 -0
  25. package/dist/index.cjs +2 -2
  26. package/dist/index.cjs.map +1 -0
  27. package/dist/index.d.cts +1 -1
  28. package/dist/index.d.mts +1 -1
  29. package/dist/index.mjs +2 -2
  30. package/dist/index.mjs.map +1 -0
  31. package/dist/normalize-BW7kk8Lk.d.cts +1 -1
  32. package/dist/normalize-BW7kk8Lk.d.cts.map +1 -0
  33. package/dist/normalize-D4Qh0wVk.cjs +1 -1
  34. package/dist/normalize-D4Qh0wVk.cjs.map +1 -0
  35. package/dist/normalize-D7nae0Hn.mjs +1 -1
  36. package/dist/normalize-D7nae0Hn.mjs.map +1 -0
  37. package/dist/normalize-eB_j86fm.d.mts +1 -1
  38. package/dist/normalize-eB_j86fm.d.mts.map +1 -0
  39. package/dist/package-BoyftHDo.mjs +1 -1
  40. package/dist/package-BoyftHDo.mjs.map +1 -0
  41. package/dist/package-CgNIVjVe.cjs +1 -1
  42. package/dist/package-CgNIVjVe.cjs.map +1 -0
  43. package/dist/plugins-C6MGKdD-.mjs +790 -0
  44. package/dist/plugins-C6MGKdD-.mjs.map +1 -0
  45. package/dist/plugins-DNaNtkG7.cjs +791 -0
  46. package/dist/plugins-DNaNtkG7.cjs.map +1 -0
  47. package/dist/runtime/index.cjs +1 -1
  48. package/dist/runtime/index.d.cts +1 -1
  49. package/dist/runtime/index.d.mts +1 -1
  50. package/dist/runtime/index.mjs +1 -1
  51. package/dist/runtime-60AkNpI0.mjs +476 -0
  52. package/dist/runtime-60AkNpI0.mjs.map +1 -0
  53. package/dist/runtime-BcksCIA1.cjs +541 -0
  54. package/dist/runtime-BcksCIA1.cjs.map +1 -0
  55. package/dist/standard-CkH8zNkx.mjs +584 -0
  56. package/dist/standard-CkH8zNkx.mjs.map +1 -0
  57. package/dist/standard-v75BC6Z5.cjs +685 -0
  58. package/dist/standard-v75BC6Z5.cjs.map +1 -0
  59. package/dist/testing/index.cjs +2 -2
  60. package/dist/testing/index.cjs.map +1 -0
  61. package/dist/testing/index.d.cts +2 -2
  62. package/dist/testing/index.d.cts.map +1 -0
  63. package/dist/testing/index.d.mts +2 -2
  64. package/dist/testing/index.d.mts.map +1 -0
  65. package/dist/testing/index.mjs +2 -2
  66. package/dist/testing/index.mjs.map +1 -0
  67. package/dist/zod-A7Pti5IV.d.cts +1 -1
  68. package/dist/zod-A7Pti5IV.d.cts.map +1 -0
  69. package/dist/zod-BVo51kgJ.mjs +1 -1
  70. package/dist/zod-BVo51kgJ.mjs.map +1 -0
  71. package/dist/zod-DYghWCz1.cjs +1 -1
  72. package/dist/zod-DYghWCz1.cjs.map +1 -0
  73. package/dist/zod-Zw8dlP3j.d.mts +1 -1
  74. package/dist/zod-Zw8dlP3j.d.mts.map +1 -0
  75. package/package.json +1 -1
  76. package/dist/fetch-CGzn1Uf7.cjs +0 -336
  77. package/dist/fetch-ycs0raYN.mjs +0 -335
  78. package/dist/index-DM9S53Bx.d.cts +0 -382
  79. package/dist/index-DrOou1Hc.d.mts +0 -383
  80. package/dist/plugins-Cmsm3gW1.cjs +0 -791
  81. package/dist/plugins-hpi2GlaX.mjs +0 -790
  82. package/dist/runtime-BYrdNAff.cjs +0 -524
  83. package/dist/runtime-BzkHRj0E.mjs +0 -459
  84. package/dist/standard-0wBehDUp.cjs +0 -685
  85. package/dist/standard-CYaRay89.mjs +0 -584
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins-DNaNtkG7.cjs","names":["isObject","value","stringifyJSON","standardizeHTTPPath","findDeepMatches","StandardOpenAPIJsonSerializer","toArray","clone","#resolveCommonSchemas","toHttpPath","#request","#successResponse","#errorResponse","getDynamicParams","isORPCErrorStatus","fallbackORPCErrorStatus","fallbackORPCErrorMessage","stringifyJSON","once","value"],"sources":["../../../node_modules/.bun/@orpc+interop@1.10.4/node_modules/@orpc/interop/dist/json-schema-typed/index.mjs","../../../node_modules/.bun/@orpc+openapi@1.10.4+64f0629d09b745d9/node_modules/@orpc/openapi/dist/shared/openapi.DrTcell5.mjs","../../../node_modules/.bun/@orpc+openapi@1.10.4+64f0629d09b745d9/node_modules/@orpc/openapi/dist/plugins/index.mjs"],"sourcesContent":["/// <reference types=\"./draft-2020-12.ts\" />\n// @generated\n// deno-fmt-ignore-file\n// deno-lint-ignore-file\n// This code was bundled using `deno bundle` and it's not recommended to edit it manually\n\nconst draft = \"2020-12\";\nconst $schema = \"https://json-schema.org/draft/2020-12/schema\";\nvar ContentEncoding;\n(function(ContentEncoding1) {\n ContentEncoding1[\"7bit\"] = \"7bit\";\n ContentEncoding1[\"8bit\"] = \"8bit\";\n ContentEncoding1[\"Base64\"] = \"base64\";\n ContentEncoding1[\"Binary\"] = \"binary\";\n ContentEncoding1[\"IETFToken\"] = \"ietf-token\";\n ContentEncoding1[\"QuotedPrintable\"] = \"quoted-printable\";\n ContentEncoding1[\"XToken\"] = \"x-token\";\n})(ContentEncoding || (ContentEncoding = {}));\nvar Format;\n(function(Format1) {\n Format1[\"Date\"] = \"date\";\n Format1[\"DateTime\"] = \"date-time\";\n Format1[\"Duration\"] = \"duration\";\n Format1[\"Email\"] = \"email\";\n Format1[\"Hostname\"] = \"hostname\";\n Format1[\"IDNEmail\"] = \"idn-email\";\n Format1[\"IDNHostname\"] = \"idn-hostname\";\n Format1[\"IPv4\"] = \"ipv4\";\n Format1[\"IPv6\"] = \"ipv6\";\n Format1[\"IRI\"] = \"iri\";\n Format1[\"IRIReference\"] = \"iri-reference\";\n Format1[\"JSONPointer\"] = \"json-pointer\";\n Format1[\"JSONPointerURIFragment\"] = \"json-pointer-uri-fragment\";\n Format1[\"RegEx\"] = \"regex\";\n Format1[\"RelativeJSONPointer\"] = \"relative-json-pointer\";\n Format1[\"Time\"] = \"time\";\n Format1[\"URI\"] = \"uri\";\n Format1[\"URIReference\"] = \"uri-reference\";\n Format1[\"URITemplate\"] = \"uri-template\";\n Format1[\"UUID\"] = \"uuid\";\n})(Format || (Format = {}));\nvar TypeName;\n(function(TypeName1) {\n TypeName1[\"Array\"] = \"array\";\n TypeName1[\"Boolean\"] = \"boolean\";\n TypeName1[\"Integer\"] = \"integer\";\n TypeName1[\"Null\"] = \"null\";\n TypeName1[\"Number\"] = \"number\";\n TypeName1[\"Object\"] = \"object\";\n TypeName1[\"String\"] = \"string\";\n})(TypeName || (TypeName = {}));\nconst keywords = [\n \"$anchor\",\n \"$comment\",\n \"$defs\",\n \"$dynamicAnchor\",\n \"$dynamicRef\",\n \"$id\",\n \"$ref\",\n \"$schema\",\n \"$vocabulary\",\n \"additionalItems\",\n \"additionalProperties\",\n \"allOf\",\n \"anyOf\",\n \"const\",\n \"contains\",\n \"contentEncoding\",\n \"contentMediaType\",\n \"contentSchema\",\n \"default\",\n \"definitions\",\n \"dependencies\",\n \"dependentRequired\",\n \"dependentSchemas\",\n \"deprecated\",\n \"description\",\n \"else\",\n \"enum\",\n \"examples\",\n \"exclusiveMaximum\",\n \"exclusiveMinimum\",\n \"format\",\n \"if\",\n \"items\",\n \"maxContains\",\n \"maximum\",\n \"maxItems\",\n \"maxLength\",\n \"maxProperties\",\n \"minContains\",\n \"minimum\",\n \"minItems\",\n \"minLength\",\n \"minProperties\",\n \"multipleOf\",\n \"not\",\n \"oneOf\",\n \"pattern\",\n \"patternProperties\",\n \"prefixItems\",\n \"properties\",\n \"propertyNames\",\n \"readOnly\",\n \"required\",\n \"then\",\n \"title\",\n \"type\",\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n \"uniqueItems\",\n \"writeOnly\", \n];\n\nexport { $schema, ContentEncoding, Format, TypeName, draft, keywords };\n","import { isORPCErrorStatus, fallbackORPCErrorStatus, fallbackORPCErrorMessage } from '@orpc/client';\nimport { toHttpPath } from '@orpc/client/standard';\nimport { fallbackContractConfig, getEventIteratorSchemaDetails } from '@orpc/contract';\nimport { standardizeHTTPPath, StandardOpenAPIJsonSerializer, getDynamicParams } from '@orpc/openapi-client/standard';\nimport { isProcedure, resolveContractProcedures } from '@orpc/server';\nimport { isObject, stringifyJSON, findDeepMatches, toArray, clone, value } from '@orpc/shared';\nimport { TypeName } from '@orpc/interop/json-schema-typed/draft-2020-12';\n\nconst OPERATION_EXTENDER_SYMBOL = Symbol(\"ORPC_OPERATION_EXTENDER\");\nfunction customOpenAPIOperation(o, extend) {\n return new Proxy(o, {\n get(target, prop, receiver) {\n if (prop === OPERATION_EXTENDER_SYMBOL) {\n return extend;\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction getCustomOpenAPIOperation(o) {\n return o[OPERATION_EXTENDER_SYMBOL];\n}\nfunction applyCustomOpenAPIOperation(operation, contract) {\n const operationCustoms = [];\n for (const errorItem of Object.values(contract[\"~orpc\"].errorMap)) {\n const maybeExtender = errorItem ? getCustomOpenAPIOperation(errorItem) : void 0;\n if (maybeExtender) {\n operationCustoms.push(maybeExtender);\n }\n }\n if (isProcedure(contract)) {\n for (const middleware of contract[\"~orpc\"].middlewares) {\n const maybeExtender = getCustomOpenAPIOperation(middleware);\n if (maybeExtender) {\n operationCustoms.push(maybeExtender);\n }\n }\n }\n let currentOperation = operation;\n for (const custom of operationCustoms) {\n if (typeof custom === \"function\") {\n currentOperation = custom(currentOperation, contract);\n } else {\n currentOperation = {\n ...currentOperation,\n ...custom\n };\n }\n }\n return currentOperation;\n}\n\nconst LOGIC_KEYWORDS = [\n \"$dynamicRef\",\n \"$ref\",\n \"additionalItems\",\n \"additionalProperties\",\n \"allOf\",\n \"anyOf\",\n \"const\",\n \"contains\",\n \"contentEncoding\",\n \"contentMediaType\",\n \"contentSchema\",\n \"dependencies\",\n \"dependentRequired\",\n \"dependentSchemas\",\n \"else\",\n \"enum\",\n \"exclusiveMaximum\",\n \"exclusiveMinimum\",\n \"format\",\n \"if\",\n \"items\",\n \"maxContains\",\n \"maximum\",\n \"maxItems\",\n \"maxLength\",\n \"maxProperties\",\n \"minContains\",\n \"minimum\",\n \"minItems\",\n \"minLength\",\n \"minProperties\",\n \"multipleOf\",\n \"not\",\n \"oneOf\",\n \"pattern\",\n \"patternProperties\",\n \"prefixItems\",\n \"properties\",\n \"propertyNames\",\n \"required\",\n \"then\",\n \"type\",\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n \"uniqueItems\"\n];\n\nfunction isFileSchema(schema) {\n return isObject(schema) && schema.type === \"string\" && typeof schema.contentMediaType === \"string\";\n}\nfunction isObjectSchema(schema) {\n return isObject(schema) && schema.type === \"object\";\n}\nfunction isAnySchema(schema) {\n if (schema === true) {\n return true;\n }\n if (Object.keys(schema).every((k) => !LOGIC_KEYWORDS.includes(k))) {\n return true;\n }\n return false;\n}\nfunction separateObjectSchema(schema, separatedProperties) {\n if (Object.keys(schema).some(\n (k) => ![\"type\", \"properties\", \"required\", \"additionalProperties\"].includes(k) && LOGIC_KEYWORDS.includes(k) && schema[k] !== void 0\n )) {\n return [{ type: \"object\" }, schema];\n }\n const matched = { ...schema };\n const rest = { ...schema };\n matched.properties = separatedProperties.reduce((acc, key) => {\n const keySchema = schema.properties?.[key] ?? schema.additionalProperties;\n if (keySchema !== void 0) {\n acc[key] = keySchema;\n }\n return acc;\n }, {});\n matched.required = schema.required?.filter((key) => separatedProperties.includes(key));\n matched.examples = schema.examples?.map((example) => {\n if (!isObject(example)) {\n return example;\n }\n return Object.entries(example).reduce((acc, [key, value]) => {\n if (separatedProperties.includes(key)) {\n acc[key] = value;\n }\n return acc;\n }, {});\n });\n rest.properties = schema.properties && Object.entries(schema.properties).filter(([key]) => !separatedProperties.includes(key)).reduce((acc, [key, value]) => {\n acc[key] = value;\n return acc;\n }, {});\n rest.required = schema.required?.filter((key) => !separatedProperties.includes(key));\n rest.examples = schema.examples?.map((example) => {\n if (!isObject(example)) {\n return example;\n }\n return Object.entries(example).reduce((acc, [key, value]) => {\n if (!separatedProperties.includes(key)) {\n acc[key] = value;\n }\n return acc;\n }, {});\n });\n return [matched, rest];\n}\nfunction filterSchemaBranches(schema, check, matches = []) {\n if (check(schema)) {\n matches.push(schema);\n return [matches, void 0];\n }\n if (isObject(schema)) {\n for (const keyword of [\"anyOf\", \"oneOf\"]) {\n if (schema[keyword] && Object.keys(schema).every(\n (k) => k === keyword || !LOGIC_KEYWORDS.includes(k)\n )) {\n const rest = schema[keyword].map((s) => filterSchemaBranches(s, check, matches)[1]).filter((v) => !!v);\n if (rest.length === 1 && typeof rest[0] === \"object\") {\n return [matches, { ...schema, [keyword]: void 0, ...rest[0] }];\n }\n return [matches, { ...schema, [keyword]: rest }];\n }\n }\n }\n return [matches, schema];\n}\nfunction applySchemaOptionality(required, schema) {\n if (required) {\n return schema;\n }\n return {\n anyOf: [\n schema,\n { not: {} }\n ]\n };\n}\nfunction expandUnionSchema(schema) {\n if (typeof schema === \"object\") {\n for (const keyword of [\"anyOf\", \"oneOf\"]) {\n if (schema[keyword] && Object.keys(schema).every(\n (k) => k === keyword || !LOGIC_KEYWORDS.includes(k)\n )) {\n return schema[keyword].flatMap((s) => expandUnionSchema(s));\n }\n }\n }\n return [schema];\n}\nfunction expandArrayableSchema(schema) {\n const schemas = expandUnionSchema(schema);\n if (schemas.length !== 2) {\n return void 0;\n }\n const arraySchema = schemas.find(\n (s) => typeof s === \"object\" && s.type === \"array\" && Object.keys(s).filter((k) => LOGIC_KEYWORDS.includes(k)).every((k) => k === \"type\" || k === \"items\")\n );\n if (arraySchema === void 0) {\n return void 0;\n }\n const items1 = arraySchema.items;\n const items2 = schemas.find((s) => s !== arraySchema);\n if (stringifyJSON(items1) !== stringifyJSON(items2)) {\n return void 0;\n }\n return [items2, arraySchema];\n}\nconst PRIMITIVE_SCHEMA_TYPES = /* @__PURE__ */ new Set([\n TypeName.String,\n TypeName.Number,\n TypeName.Integer,\n TypeName.Boolean,\n TypeName.Null\n]);\nfunction isPrimitiveSchema(schema) {\n return expandUnionSchema(schema).every((s) => {\n if (typeof s === \"boolean\") {\n return false;\n }\n if (typeof s.type === \"string\" && PRIMITIVE_SCHEMA_TYPES.has(s.type)) {\n return true;\n }\n if (s.const !== void 0) {\n return true;\n }\n return false;\n });\n}\n\nfunction toOpenAPIPath(path) {\n return standardizeHTTPPath(path).replace(/\\/\\{\\+([^}]+)\\}/g, \"/{$1}\");\n}\nfunction toOpenAPIMethod(method) {\n return method.toLocaleLowerCase();\n}\nfunction toOpenAPIContent(schema) {\n const content = {};\n const [matches, restSchema] = filterSchemaBranches(schema, isFileSchema);\n for (const file of matches) {\n content[file.contentMediaType] = {\n schema: toOpenAPISchema(file)\n };\n }\n if (restSchema !== void 0) {\n content[\"application/json\"] = {\n schema: toOpenAPISchema(restSchema)\n };\n const isStillHasFileSchema = findDeepMatches((v) => isObject(v) && isFileSchema(v), restSchema).values.length > 0;\n if (isStillHasFileSchema) {\n content[\"multipart/form-data\"] = {\n schema: toOpenAPISchema(restSchema)\n };\n }\n }\n return content;\n}\nfunction toOpenAPIEventIteratorContent([yieldsRequired, yieldsSchema], [returnsRequired, returnsSchema]) {\n return {\n \"text/event-stream\": {\n schema: toOpenAPISchema({\n oneOf: [\n {\n type: \"object\",\n properties: {\n event: { const: \"message\" },\n data: yieldsSchema,\n id: { type: \"string\" },\n retry: { type: \"number\" }\n },\n required: yieldsRequired ? [\"event\", \"data\"] : [\"event\"]\n },\n {\n type: \"object\",\n properties: {\n event: { const: \"done\" },\n data: returnsSchema,\n id: { type: \"string\" },\n retry: { type: \"number\" }\n },\n required: returnsRequired ? [\"event\", \"data\"] : [\"event\"]\n },\n {\n type: \"object\",\n properties: {\n event: { const: \"error\" },\n data: {},\n id: { type: \"string\" },\n retry: { type: \"number\" }\n },\n required: [\"event\"]\n }\n ]\n })\n }\n };\n}\nfunction toOpenAPIParameters(schema, parameterIn) {\n const parameters = [];\n for (const key in schema.properties) {\n const keySchema = schema.properties[key];\n let isDeepObjectStyle = true;\n if (parameterIn !== \"query\") {\n isDeepObjectStyle = false;\n } else if (isPrimitiveSchema(keySchema)) {\n isDeepObjectStyle = false;\n } else {\n const [item] = expandArrayableSchema(keySchema) ?? [];\n if (item !== void 0 && isPrimitiveSchema(item)) {\n isDeepObjectStyle = false;\n }\n }\n parameters.push({\n name: key,\n in: parameterIn,\n required: schema.required?.includes(key),\n schema: toOpenAPISchema(keySchema),\n style: isDeepObjectStyle ? \"deepObject\" : void 0,\n explode: isDeepObjectStyle ? true : void 0,\n allowEmptyValue: parameterIn === \"query\" ? true : void 0,\n allowReserved: parameterIn === \"query\" ? true : void 0\n });\n }\n return parameters;\n}\nfunction checkParamsSchema(schema, params) {\n const properties = Object.keys(schema.properties ?? {});\n const required = schema.required ?? [];\n if (properties.length !== params.length || properties.some((v) => !params.includes(v))) {\n return false;\n }\n if (required.length !== params.length || required.some((v) => !params.includes(v))) {\n return false;\n }\n return true;\n}\nfunction toOpenAPISchema(schema) {\n return schema === true ? {} : schema === false ? { not: {} } : schema;\n}\nconst OPENAPI_JSON_SCHEMA_REF_PREFIX = \"#/components/schemas/\";\nfunction resolveOpenAPIJsonSchemaRef(doc, schema) {\n if (typeof schema !== \"object\" || !schema.$ref?.startsWith(OPENAPI_JSON_SCHEMA_REF_PREFIX)) {\n return schema;\n }\n const name = schema.$ref.slice(OPENAPI_JSON_SCHEMA_REF_PREFIX.length);\n const resolved = doc.components?.schemas?.[name];\n return resolved ?? schema;\n}\n\nclass CompositeSchemaConverter {\n converters;\n constructor(converters) {\n this.converters = converters;\n }\n async convert(schema, options) {\n for (const converter of this.converters) {\n if (await converter.condition(schema, options)) {\n return converter.convert(schema, options);\n }\n }\n return [false, {}];\n }\n}\n\nclass OpenAPIGeneratorError extends Error {\n}\nclass OpenAPIGenerator {\n serializer;\n converter;\n constructor(options = {}) {\n this.serializer = new StandardOpenAPIJsonSerializer(options);\n this.converter = new CompositeSchemaConverter(toArray(options.schemaConverters));\n }\n /**\n * Generates OpenAPI specifications from oRPC routers/contracts.\n *\n * @see {@link https://orpc.unnoq.com/docs/openapi/openapi-specification OpenAPI Specification Docs}\n */\n async generate(router, { customErrorResponseBodySchema, commonSchemas, filter: baseFilter, exclude, ...baseDoc } = {}) {\n const filter = baseFilter ?? (({ contract, path }) => {\n return !(exclude?.(contract, path) ?? false);\n });\n const doc = {\n ...clone(baseDoc),\n info: baseDoc.info ?? { title: \"API Reference\", version: \"0.0.0\" },\n openapi: \"3.1.1\"\n };\n const { baseSchemaConvertOptions, undefinedErrorJsonSchema } = await this.#resolveCommonSchemas(doc, commonSchemas);\n const contracts = [];\n await resolveContractProcedures({ path: [], router }, (traverseOptions) => {\n if (!value(filter, traverseOptions)) {\n return;\n }\n contracts.push(traverseOptions);\n });\n const errors = [];\n for (const { contract, path } of contracts) {\n const stringPath = path.join(\".\");\n try {\n const def = contract[\"~orpc\"];\n const method = toOpenAPIMethod(fallbackContractConfig(\"defaultMethod\", def.route.method));\n const httpPath = toOpenAPIPath(def.route.path ?? toHttpPath(path));\n let operationObjectRef;\n if (def.route.spec !== void 0 && typeof def.route.spec !== \"function\") {\n operationObjectRef = def.route.spec;\n } else {\n operationObjectRef = {\n operationId: def.route.operationId ?? stringPath,\n summary: def.route.summary,\n description: def.route.description,\n deprecated: def.route.deprecated,\n tags: def.route.tags?.map((tag) => tag)\n };\n await this.#request(doc, operationObjectRef, def, baseSchemaConvertOptions);\n await this.#successResponse(doc, operationObjectRef, def, baseSchemaConvertOptions);\n await this.#errorResponse(operationObjectRef, def, baseSchemaConvertOptions, undefinedErrorJsonSchema, customErrorResponseBodySchema);\n }\n if (typeof def.route.spec === \"function\") {\n operationObjectRef = def.route.spec(operationObjectRef);\n }\n doc.paths ??= {};\n doc.paths[httpPath] ??= {};\n doc.paths[httpPath][method] = applyCustomOpenAPIOperation(operationObjectRef, contract);\n } catch (e) {\n if (!(e instanceof OpenAPIGeneratorError)) {\n throw e;\n }\n errors.push(\n `[OpenAPIGenerator] Error occurred while generating OpenAPI for procedure at path: ${stringPath}\n${e.message}`\n );\n }\n }\n if (errors.length) {\n throw new OpenAPIGeneratorError(\n `Some error occurred during OpenAPI generation:\n\n${errors.join(\"\\n\\n\")}`\n );\n }\n return this.serializer.serialize(doc)[0];\n }\n async #resolveCommonSchemas(doc, commonSchemas) {\n let undefinedErrorJsonSchema = {\n type: \"object\",\n properties: {\n defined: { const: false },\n code: { type: \"string\" },\n status: { type: \"number\" },\n message: { type: \"string\" },\n data: {}\n },\n required: [\"defined\", \"code\", \"status\", \"message\"]\n };\n const baseSchemaConvertOptions = {};\n if (commonSchemas) {\n baseSchemaConvertOptions.components = [];\n for (const key in commonSchemas) {\n const options = commonSchemas[key];\n if (options.schema === void 0) {\n continue;\n }\n const { schema, strategy = \"input\" } = options;\n const [required, json] = await this.converter.convert(schema, { strategy });\n const allowedStrategies = [strategy];\n if (strategy === \"input\") {\n const [outputRequired, outputJson] = await this.converter.convert(schema, { strategy: \"output\" });\n if (outputRequired === required && stringifyJSON(outputJson) === stringifyJSON(json)) {\n allowedStrategies.push(\"output\");\n }\n } else if (strategy === \"output\") {\n const [inputRequired, inputJson] = await this.converter.convert(schema, { strategy: \"input\" });\n if (inputRequired === required && stringifyJSON(inputJson) === stringifyJSON(json)) {\n allowedStrategies.push(\"input\");\n }\n }\n baseSchemaConvertOptions.components.push({\n schema,\n required,\n ref: `#/components/schemas/${key}`,\n allowedStrategies\n });\n }\n doc.components ??= {};\n doc.components.schemas ??= {};\n for (const key in commonSchemas) {\n const options = commonSchemas[key];\n if (options.schema === void 0) {\n if (options.error === \"UndefinedError\") {\n doc.components.schemas[key] = toOpenAPISchema(undefinedErrorJsonSchema);\n undefinedErrorJsonSchema = { $ref: `#/components/schemas/${key}` };\n }\n continue;\n }\n const { schema, strategy = \"input\" } = options;\n const [, json] = await this.converter.convert(\n schema,\n {\n ...baseSchemaConvertOptions,\n strategy,\n minStructureDepthForRef: 1\n // not allow use $ref for root schemas\n }\n );\n doc.components.schemas[key] = toOpenAPISchema(json);\n }\n }\n return { baseSchemaConvertOptions, undefinedErrorJsonSchema };\n }\n async #request(doc, ref, def, baseSchemaConvertOptions) {\n const method = fallbackContractConfig(\"defaultMethod\", def.route.method);\n const details = getEventIteratorSchemaDetails(def.inputSchema);\n if (details) {\n ref.requestBody = {\n required: true,\n content: toOpenAPIEventIteratorContent(\n await this.converter.convert(details.yields, { ...baseSchemaConvertOptions, strategy: \"input\" }),\n await this.converter.convert(details.returns, { ...baseSchemaConvertOptions, strategy: \"input\" })\n )\n };\n return;\n }\n const dynamicParams = getDynamicParams(def.route.path)?.map((v) => v.name);\n const inputStructure = fallbackContractConfig(\"defaultInputStructure\", def.route.inputStructure);\n let [required, schema] = await this.converter.convert(\n def.inputSchema,\n {\n ...baseSchemaConvertOptions,\n strategy: \"input\",\n minStructureDepthForRef: dynamicParams?.length || inputStructure === \"detailed\" ? 1 : 0\n }\n );\n if (isAnySchema(schema) && !dynamicParams?.length) {\n return;\n }\n if (inputStructure === \"compact\") {\n if (dynamicParams?.length) {\n const error2 = new OpenAPIGeneratorError(\n 'When input structure is \"compact\", and path has dynamic params, input schema must be an object with all dynamic params as required.'\n );\n if (!isObjectSchema(schema)) {\n throw error2;\n }\n const [paramsSchema, rest] = separateObjectSchema(schema, dynamicParams);\n schema = rest;\n required = rest.required ? rest.required.length !== 0 : false;\n if (!checkParamsSchema(paramsSchema, dynamicParams)) {\n throw error2;\n }\n ref.parameters ??= [];\n ref.parameters.push(...toOpenAPIParameters(paramsSchema, \"path\"));\n }\n if (method === \"GET\") {\n const resolvedSchema = resolveOpenAPIJsonSchemaRef(doc, schema);\n if (!isObjectSchema(resolvedSchema)) {\n throw new OpenAPIGeneratorError(\n 'When method is \"GET\", input schema must satisfy: object | any | unknown'\n );\n }\n ref.parameters ??= [];\n ref.parameters.push(...toOpenAPIParameters(resolvedSchema, \"query\"));\n } else {\n ref.requestBody = {\n required,\n content: toOpenAPIContent(schema)\n };\n }\n return;\n }\n const error = new OpenAPIGeneratorError(\n 'When input structure is \"detailed\", input schema must satisfy: { params?: Record<string, unknown>, query?: Record<string, unknown>, headers?: Record<string, unknown>, body?: unknown }'\n );\n if (!isObjectSchema(schema)) {\n throw error;\n }\n const resolvedParamSchema = schema.properties?.params !== void 0 ? resolveOpenAPIJsonSchemaRef(doc, schema.properties.params) : void 0;\n if (dynamicParams?.length && (resolvedParamSchema === void 0 || !isObjectSchema(resolvedParamSchema) || !checkParamsSchema(resolvedParamSchema, dynamicParams))) {\n throw new OpenAPIGeneratorError(\n 'When input structure is \"detailed\" and path has dynamic params, the \"params\" schema must be an object with all dynamic params as required.'\n );\n }\n for (const from of [\"params\", \"query\", \"headers\"]) {\n const fromSchema = schema.properties?.[from];\n if (fromSchema !== void 0) {\n const resolvedSchema = resolveOpenAPIJsonSchemaRef(doc, fromSchema);\n if (!isObjectSchema(resolvedSchema)) {\n throw error;\n }\n const parameterIn = from === \"params\" ? \"path\" : from === \"headers\" ? \"header\" : \"query\";\n ref.parameters ??= [];\n ref.parameters.push(...toOpenAPIParameters(resolvedSchema, parameterIn));\n }\n }\n if (schema.properties?.body !== void 0) {\n ref.requestBody = {\n required: schema.required?.includes(\"body\"),\n content: toOpenAPIContent(schema.properties.body)\n };\n }\n }\n async #successResponse(doc, ref, def, baseSchemaConvertOptions) {\n const outputSchema = def.outputSchema;\n const status = fallbackContractConfig(\"defaultSuccessStatus\", def.route.successStatus);\n const description = fallbackContractConfig(\"defaultSuccessDescription\", def.route?.successDescription);\n const eventIteratorSchemaDetails = getEventIteratorSchemaDetails(outputSchema);\n const outputStructure = fallbackContractConfig(\"defaultOutputStructure\", def.route.outputStructure);\n if (eventIteratorSchemaDetails) {\n ref.responses ??= {};\n ref.responses[status] = {\n description,\n content: toOpenAPIEventIteratorContent(\n await this.converter.convert(eventIteratorSchemaDetails.yields, { ...baseSchemaConvertOptions, strategy: \"output\" }),\n await this.converter.convert(eventIteratorSchemaDetails.returns, { ...baseSchemaConvertOptions, strategy: \"output\" })\n )\n };\n return;\n }\n const [required, json] = await this.converter.convert(\n outputSchema,\n {\n ...baseSchemaConvertOptions,\n strategy: \"output\",\n minStructureDepthForRef: outputStructure === \"detailed\" ? 1 : 0\n }\n );\n if (outputStructure === \"compact\") {\n ref.responses ??= {};\n ref.responses[status] = {\n description\n };\n ref.responses[status].content = toOpenAPIContent(applySchemaOptionality(required, json));\n return;\n }\n const handledStatuses = /* @__PURE__ */ new Set();\n for (const item of expandUnionSchema(json)) {\n const error = new OpenAPIGeneratorError(`\n When output structure is \"detailed\", output schema must satisfy:\n { \n status?: number, // must be a literal number and in the range of 200-399\n headers?: Record<string, unknown>, \n body?: unknown \n }\n \n But got: ${stringifyJSON(item)}\n `);\n if (!isObjectSchema(item)) {\n throw error;\n }\n let schemaStatus;\n let schemaDescription;\n if (item.properties?.status !== void 0) {\n const statusSchema = resolveOpenAPIJsonSchemaRef(doc, item.properties.status);\n if (typeof statusSchema !== \"object\" || statusSchema.const === void 0 || typeof statusSchema.const !== \"number\" || !Number.isInteger(statusSchema.const) || isORPCErrorStatus(statusSchema.const)) {\n throw error;\n }\n schemaStatus = statusSchema.const;\n schemaDescription = statusSchema.description;\n }\n const itemStatus = schemaStatus ?? status;\n const itemDescription = schemaDescription ?? description;\n if (handledStatuses.has(itemStatus)) {\n throw new OpenAPIGeneratorError(`\n When output structure is \"detailed\", each success status must be unique.\n But got status: ${itemStatus} used more than once.\n `);\n }\n handledStatuses.add(itemStatus);\n ref.responses ??= {};\n ref.responses[itemStatus] = {\n description: itemDescription\n };\n if (item.properties?.headers !== void 0) {\n const headersSchema = resolveOpenAPIJsonSchemaRef(doc, item.properties.headers);\n if (!isObjectSchema(headersSchema)) {\n throw error;\n }\n for (const key in headersSchema.properties) {\n const headerSchema = headersSchema.properties[key];\n if (headerSchema !== void 0) {\n ref.responses[itemStatus].headers ??= {};\n ref.responses[itemStatus].headers[key] = {\n schema: toOpenAPISchema(headerSchema),\n required: item.required?.includes(\"headers\") && headersSchema.required?.includes(key)\n };\n }\n }\n }\n if (item.properties?.body !== void 0) {\n ref.responses[itemStatus].content = toOpenAPIContent(\n applySchemaOptionality(item.required?.includes(\"body\") ?? false, item.properties.body)\n );\n }\n }\n }\n async #errorResponse(ref, def, baseSchemaConvertOptions, undefinedErrorSchema, customErrorResponseBodySchema) {\n const errorMap = def.errorMap;\n const errorResponsesByStatus = {};\n for (const code in errorMap) {\n const config = errorMap[code];\n if (!config) {\n continue;\n }\n const status = fallbackORPCErrorStatus(code, config.status);\n const defaultMessage = fallbackORPCErrorMessage(code, config.message);\n errorResponsesByStatus[status] ??= { status, definedErrorDefinitions: [], errorSchemaVariants: [] };\n const [dataRequired, dataSchema] = await this.converter.convert(config.data, { ...baseSchemaConvertOptions, strategy: \"output\" });\n errorResponsesByStatus[status].definedErrorDefinitions.push([code, defaultMessage, dataRequired, dataSchema]);\n errorResponsesByStatus[status].errorSchemaVariants.push({\n type: \"object\",\n properties: {\n defined: { const: true },\n code: { const: code },\n status: { const: status },\n message: { type: \"string\", default: defaultMessage },\n data: dataSchema\n },\n required: dataRequired ? [\"defined\", \"code\", \"status\", \"message\", \"data\"] : [\"defined\", \"code\", \"status\", \"message\"]\n });\n }\n ref.responses ??= {};\n for (const statusString in errorResponsesByStatus) {\n const errorResponse = errorResponsesByStatus[statusString];\n const customBodySchema = value(customErrorResponseBodySchema, errorResponse.definedErrorDefinitions, errorResponse.status);\n ref.responses[statusString] = {\n description: statusString,\n content: toOpenAPIContent(customBodySchema ?? {\n oneOf: [\n ...errorResponse.errorSchemaVariants,\n undefinedErrorSchema\n ]\n })\n };\n }\n }\n}\n\nexport { CompositeSchemaConverter as C, LOGIC_KEYWORDS as L, OpenAPIGenerator as O, applyCustomOpenAPIOperation as a, toOpenAPIMethod as b, customOpenAPIOperation as c, toOpenAPIContent as d, toOpenAPIEventIteratorContent as e, toOpenAPIParameters as f, getCustomOpenAPIOperation as g, checkParamsSchema as h, toOpenAPISchema as i, isFileSchema as j, isObjectSchema as k, isAnySchema as l, filterSchemaBranches as m, applySchemaOptionality as n, expandUnionSchema as o, expandArrayableSchema as p, isPrimitiveSchema as q, resolveOpenAPIJsonSchemaRef as r, separateObjectSchema as s, toOpenAPIPath as t };\n","import { stringifyJSON, once, value } from '@orpc/shared';\nimport { O as OpenAPIGenerator } from '../shared/openapi.DrTcell5.mjs';\nimport '@orpc/client';\nimport '@orpc/client/standard';\nimport '@orpc/contract';\nimport '@orpc/openapi-client/standard';\nimport '@orpc/server';\nimport '@orpc/interop/json-schema-typed/draft-2020-12';\n\nclass OpenAPIReferencePlugin {\n generator;\n specGenerateOptions;\n specPath;\n docsPath;\n docsTitle;\n docsHead;\n docsProvider;\n docsScriptUrl;\n docsCssUrl;\n docsConfig;\n renderDocsHtml;\n constructor(options = {}) {\n this.specGenerateOptions = options.specGenerateOptions;\n this.docsPath = options.docsPath ?? \"/\";\n this.docsTitle = options.docsTitle ?? \"API Reference\";\n this.docsConfig = options.docsConfig ?? void 0;\n this.docsProvider = options.docsProvider ?? \"scalar\";\n this.docsScriptUrl = options.docsScriptUrl ?? (this.docsProvider === \"swagger\" ? \"https://unpkg.com/swagger-ui-dist/swagger-ui-bundle.js\" : \"https://cdn.jsdelivr.net/npm/@scalar/api-reference\");\n this.docsCssUrl = options.docsCssUrl ?? (this.docsProvider === \"swagger\" ? \"https://unpkg.com/swagger-ui-dist/swagger-ui.css\" : void 0);\n this.docsHead = options.docsHead ?? \"\";\n this.specPath = options.specPath ?? \"/spec.json\";\n this.generator = new OpenAPIGenerator(options);\n const esc = (s) => s.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n this.renderDocsHtml = options.renderDocsHtml ?? ((specUrl, title, head, scriptUrl, config, spec, docsProvider, cssUrl) => {\n let body;\n if (docsProvider === \"swagger\") {\n const swaggerConfig = {\n dom_id: \"#app\",\n spec,\n deepLinking: true,\n presets: [\n \"SwaggerUIBundle.presets.apis\",\n \"SwaggerUIBundle.presets.standalone\"\n ],\n plugins: [\n \"SwaggerUIBundle.plugins.DownloadUrl\"\n ],\n ...config\n };\n body = `\n <body>\n <div id=\"app\"></div>\n\n <script src=\"${esc(scriptUrl)}\"><\\/script>\n\n <script>\n window.onload = () => {\n window.ui = SwaggerUIBundle(${stringifyJSON(swaggerConfig).replace(/\"(SwaggerUIBundle\\.[^\"]+)\"/g, \"$1\")})\n }\n <\\/script>\n </body>\n `;\n } else {\n const scalarConfig = {\n content: stringifyJSON(spec),\n ...config\n };\n body = `\n <body>\n <div id=\"app\" data-config=\"${esc(stringifyJSON(scalarConfig))}\"></div>\n\n <script src=\"${esc(scriptUrl)}\"><\\/script>\n\n <script>\n Scalar.createApiReference('#app', JSON.parse(document.getElementById('app').dataset.config))\n <\\/script>\n </body>\n `;\n }\n return `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${esc(title)}</title>\n ${cssUrl ? `<link rel=\"stylesheet\" type=\"text/css\" href=\"${esc(cssUrl)}\" />` : \"\"}\n ${head}\n </head>\n ${body}\n </html>\n `;\n });\n }\n init(options, router) {\n options.interceptors ??= [];\n options.interceptors.push(async (options2) => {\n const res = await options2.next();\n if (res.matched || options2.request.method !== \"GET\") {\n return res;\n }\n const prefix = options2.prefix ?? \"\";\n const requestPathname = options2.request.url.pathname.replace(/\\/$/, \"\") || \"/\";\n const docsUrl = new URL(`${prefix}${this.docsPath}`.replace(/\\/$/, \"\"), options2.request.url.origin);\n const specUrl = new URL(`${prefix}${this.specPath}`.replace(/\\/$/, \"\"), options2.request.url.origin);\n const generateSpec = once(async () => {\n return await this.generator.generate(router, {\n servers: [{ url: new URL(prefix, options2.request.url.origin).toString() }],\n ...await value(this.specGenerateOptions, options2)\n });\n });\n if (requestPathname === specUrl.pathname) {\n const spec = await generateSpec();\n return {\n matched: true,\n response: {\n status: 200,\n headers: {},\n body: new File([stringifyJSON(spec)], \"spec.json\", { type: \"application/json\" })\n }\n };\n }\n if (requestPathname === docsUrl.pathname) {\n const html = this.renderDocsHtml(\n specUrl.toString(),\n await value(this.docsTitle, options2),\n await value(this.docsHead, options2),\n await value(this.docsScriptUrl, options2),\n await value(this.docsConfig, options2),\n await generateSpec(),\n this.docsProvider,\n await value(this.docsCssUrl, options2)\n );\n return {\n matched: true,\n response: {\n status: 200,\n headers: {},\n body: new File([html], \"api-reference.html\", { type: \"text/html\" })\n }\n };\n }\n return res;\n });\n }\n}\n\nexport { OpenAPIReferencePlugin };\n"],"x_google_ignoreList":[0,1,2],"mappings":";;;;;;AAQA,IAAI;CACH,SAAS,kBAAkB;AACxB,kBAAiB,UAAU;AAC3B,kBAAiB,UAAU;AAC3B,kBAAiB,YAAY;AAC7B,kBAAiB,YAAY;AAC7B,kBAAiB,eAAe;AAChC,kBAAiB,qBAAqB;AACtC,kBAAiB,YAAY;GAC9B,oBAAoB,kBAAkB,EAAE,EAAE;AAC7C,IAAI;CACH,SAAS,SAAS;AACf,SAAQ,UAAU;AAClB,SAAQ,cAAc;AACtB,SAAQ,cAAc;AACtB,SAAQ,WAAW;AACnB,SAAQ,cAAc;AACtB,SAAQ,cAAc;AACtB,SAAQ,iBAAiB;AACzB,SAAQ,UAAU;AAClB,SAAQ,UAAU;AAClB,SAAQ,SAAS;AACjB,SAAQ,kBAAkB;AAC1B,SAAQ,iBAAiB;AACzB,SAAQ,4BAA4B;AACpC,SAAQ,WAAW;AACnB,SAAQ,yBAAyB;AACjC,SAAQ,UAAU;AAClB,SAAQ,SAAS;AACjB,SAAQ,kBAAkB;AAC1B,SAAQ,iBAAiB;AACzB,SAAQ,UAAU;GACnB,WAAW,SAAS,EAAE,EAAE;AAC3B,IAAI;CACH,SAAS,WAAW;AACjB,WAAU,WAAW;AACrB,WAAU,aAAa;AACvB,WAAU,aAAa;AACvB,WAAU,UAAU;AACpB,WAAU,YAAY;AACtB,WAAU,YAAY;AACtB,WAAU,YAAY;GACvB,aAAa,WAAW,EAAE,EAAE;;;;AC1C/B,MAAM,4BAA4B,OAAO,0BAA0B;AAWnE,SAAS,0BAA0B,GAAG;AACpC,QAAO,EAAE;;AAEX,SAAS,4BAA4B,WAAW,UAAU;CACxD,MAAM,mBAAmB,EAAE;AAC3B,MAAK,MAAM,aAAa,OAAO,OAAO,SAAS,SAAS,SAAS,EAAE;EACjE,MAAM,gBAAgB,YAAY,0BAA0B,UAAU,GAAG,KAAK;AAC9E,MAAI,cACF,kBAAiB,KAAK,cAAc;;AAGxC,oCAAgB,SAAS,CACvB,MAAK,MAAM,cAAc,SAAS,SAAS,aAAa;EACtD,MAAM,gBAAgB,0BAA0B,WAAW;AAC3D,MAAI,cACF,kBAAiB,KAAK,cAAc;;CAI1C,IAAI,mBAAmB;AACvB,MAAK,MAAM,UAAU,iBACnB,KAAI,OAAO,WAAW,WACpB,oBAAmB,OAAO,kBAAkB,SAAS;KAErD,oBAAmB;EACjB,GAAG;EACH,GAAG;EACJ;AAGL,QAAO;;AAGT,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,aAAa,QAAQ;AAC5B,QAAOA,0BAAS,OAAO,IAAI,OAAO,SAAS,YAAY,OAAO,OAAO,qBAAqB;;AAE5F,SAAS,eAAe,QAAQ;AAC9B,QAAOA,0BAAS,OAAO,IAAI,OAAO,SAAS;;AAE7C,SAAS,YAAY,QAAQ;AAC3B,KAAI,WAAW,KACb,QAAO;AAET,KAAI,OAAO,KAAK,OAAO,CAAC,OAAO,MAAM,CAAC,eAAe,SAAS,EAAE,CAAC,CAC/D,QAAO;AAET,QAAO;;AAET,SAAS,qBAAqB,QAAQ,qBAAqB;AACzD,KAAI,OAAO,KAAK,OAAO,CAAC,MACrB,MAAM,CAAC;EAAC;EAAQ;EAAc;EAAY;EAAuB,CAAC,SAAS,EAAE,IAAI,eAAe,SAAS,EAAE,IAAI,OAAO,OAAO,KAAK,EACpI,CACC,QAAO,CAAC,EAAE,MAAM,UAAU,EAAE,OAAO;CAErC,MAAM,UAAU,EAAE,GAAG,QAAQ;CAC7B,MAAM,OAAO,EAAE,GAAG,QAAQ;AAC1B,SAAQ,aAAa,oBAAoB,QAAQ,KAAK,QAAQ;EAC5D,MAAM,YAAY,OAAO,aAAa,QAAQ,OAAO;AACrD,MAAI,cAAc,KAAK,EACrB,KAAI,OAAO;AAEb,SAAO;IACN,EAAE,CAAC;AACN,SAAQ,WAAW,OAAO,UAAU,QAAQ,QAAQ,oBAAoB,SAAS,IAAI,CAAC;AACtF,SAAQ,WAAW,OAAO,UAAU,KAAK,YAAY;AACnD,MAAI,CAACA,0BAAS,QAAQ,CACpB,QAAO;AAET,SAAO,OAAO,QAAQ,QAAQ,CAAC,QAAQ,KAAK,CAAC,KAAKC,aAAW;AAC3D,OAAI,oBAAoB,SAAS,IAAI,CACnC,KAAI,OAAOA;AAEb,UAAO;KACN,EAAE,CAAC;GACN;AACF,MAAK,aAAa,OAAO,cAAc,OAAO,QAAQ,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,oBAAoB,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,KAAKA,aAAW;AAC3J,MAAI,OAAOA;AACX,SAAO;IACN,EAAE,CAAC;AACN,MAAK,WAAW,OAAO,UAAU,QAAQ,QAAQ,CAAC,oBAAoB,SAAS,IAAI,CAAC;AACpF,MAAK,WAAW,OAAO,UAAU,KAAK,YAAY;AAChD,MAAI,CAACD,0BAAS,QAAQ,CACpB,QAAO;AAET,SAAO,OAAO,QAAQ,QAAQ,CAAC,QAAQ,KAAK,CAAC,KAAKC,aAAW;AAC3D,OAAI,CAAC,oBAAoB,SAAS,IAAI,CACpC,KAAI,OAAOA;AAEb,UAAO;KACN,EAAE,CAAC;GACN;AACF,QAAO,CAAC,SAAS,KAAK;;AAExB,SAAS,qBAAqB,QAAQ,OAAO,UAAU,EAAE,EAAE;AACzD,KAAI,MAAM,OAAO,EAAE;AACjB,UAAQ,KAAK,OAAO;AACpB,SAAO,CAAC,SAAS,KAAK,EAAE;;AAE1B,KAAID,0BAAS,OAAO,EAClB;OAAK,MAAM,WAAW,CAAC,SAAS,QAAQ,CACtC,KAAI,OAAO,YAAY,OAAO,KAAK,OAAO,CAAC,OACxC,MAAM,MAAM,WAAW,CAAC,eAAe,SAAS,EAAE,CACpD,EAAE;GACD,MAAM,OAAO,OAAO,SAAS,KAAK,MAAM,qBAAqB,GAAG,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE;AACtG,OAAI,KAAK,WAAW,KAAK,OAAO,KAAK,OAAO,SAC1C,QAAO,CAAC,SAAS;IAAE,GAAG;KAAS,UAAU,KAAK;IAAG,GAAG,KAAK;IAAI,CAAC;AAEhE,UAAO,CAAC,SAAS;IAAE,GAAG;KAAS,UAAU;IAAM,CAAC;;;AAItD,QAAO,CAAC,SAAS,OAAO;;AAE1B,SAAS,uBAAuB,UAAU,QAAQ;AAChD,KAAI,SACF,QAAO;AAET,QAAO,EACL,OAAO,CACL,QACA,EAAE,KAAK,EAAE,EAAE,CACZ,EACF;;AAEH,SAAS,kBAAkB,QAAQ;AACjC,KAAI,OAAO,WAAW,UACpB;OAAK,MAAM,WAAW,CAAC,SAAS,QAAQ,CACtC,KAAI,OAAO,YAAY,OAAO,KAAK,OAAO,CAAC,OACxC,MAAM,MAAM,WAAW,CAAC,eAAe,SAAS,EAAE,CACpD,CACC,QAAO,OAAO,SAAS,SAAS,MAAM,kBAAkB,EAAE,CAAC;;AAIjE,QAAO,CAAC,OAAO;;AAEjB,SAAS,sBAAsB,QAAQ;CACrC,MAAM,UAAU,kBAAkB,OAAO;AACzC,KAAI,QAAQ,WAAW,EACrB;CAEF,MAAM,cAAc,QAAQ,MACzB,MAAM,OAAO,MAAM,YAAY,EAAE,SAAS,WAAW,OAAO,KAAK,EAAE,CAAC,QAAQ,MAAM,eAAe,SAAS,EAAE,CAAC,CAAC,OAAO,MAAM,MAAM,UAAU,MAAM,QAAQ,CAC3J;AACD,KAAI,gBAAgB,KAAK,EACvB;CAEF,MAAM,SAAS,YAAY;CAC3B,MAAM,SAAS,QAAQ,MAAM,MAAM,MAAM,YAAY;AACrD,KAAIE,+BAAc,OAAO,KAAKA,+BAAc,OAAO,CACjD;AAEF,QAAO,CAAC,QAAQ,YAAY;;AAE9B,MAAM,yCAAyC,IAAI,IAAI;CACrD,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACV,CAAC;AACF,SAAS,kBAAkB,QAAQ;AACjC,QAAO,kBAAkB,OAAO,CAAC,OAAO,MAAM;AAC5C,MAAI,OAAO,MAAM,UACf,QAAO;AAET,MAAI,OAAO,EAAE,SAAS,YAAY,uBAAuB,IAAI,EAAE,KAAK,CAClE,QAAO;AAET,MAAI,EAAE,UAAU,KAAK,EACnB,QAAO;AAET,SAAO;GACP;;AAGJ,SAAS,cAAc,MAAM;AAC3B,QAAOC,qCAAoB,KAAK,CAAC,QAAQ,oBAAoB,QAAQ;;AAEvE,SAAS,gBAAgB,QAAQ;AAC/B,QAAO,OAAO,mBAAmB;;AAEnC,SAAS,iBAAiB,QAAQ;CAChC,MAAM,UAAU,EAAE;CAClB,MAAM,CAAC,SAAS,cAAc,qBAAqB,QAAQ,aAAa;AACxE,MAAK,MAAM,QAAQ,QACjB,SAAQ,KAAK,oBAAoB,EAC/B,QAAQ,gBAAgB,KAAK,EAC9B;AAEH,KAAI,eAAe,KAAK,GAAG;AACzB,UAAQ,sBAAsB,EAC5B,QAAQ,gBAAgB,WAAW,EACpC;AAED,MAD6BC,kCAAiB,MAAMJ,0BAAS,EAAE,IAAI,aAAa,EAAE,EAAE,WAAW,CAAC,OAAO,SAAS,EAE9G,SAAQ,yBAAyB,EAC/B,QAAQ,gBAAgB,WAAW,EACpC;;AAGL,QAAO;;AAET,SAAS,8BAA8B,CAAC,gBAAgB,eAAe,CAAC,iBAAiB,gBAAgB;AACvG,QAAO,EACL,qBAAqB,EACnB,QAAQ,gBAAgB,EACtB,OAAO;EACL;GACE,MAAM;GACN,YAAY;IACV,OAAO,EAAE,OAAO,WAAW;IAC3B,MAAM;IACN,IAAI,EAAE,MAAM,UAAU;IACtB,OAAO,EAAE,MAAM,UAAU;IAC1B;GACD,UAAU,iBAAiB,CAAC,SAAS,OAAO,GAAG,CAAC,QAAQ;GACzD;EACD;GACE,MAAM;GACN,YAAY;IACV,OAAO,EAAE,OAAO,QAAQ;IACxB,MAAM;IACN,IAAI,EAAE,MAAM,UAAU;IACtB,OAAO,EAAE,MAAM,UAAU;IAC1B;GACD,UAAU,kBAAkB,CAAC,SAAS,OAAO,GAAG,CAAC,QAAQ;GAC1D;EACD;GACE,MAAM;GACN,YAAY;IACV,OAAO,EAAE,OAAO,SAAS;IACzB,MAAM,EAAE;IACR,IAAI,EAAE,MAAM,UAAU;IACtB,OAAO,EAAE,MAAM,UAAU;IAC1B;GACD,UAAU,CAAC,QAAQ;GACpB;EACF,EACF,CAAC,EACH,EACF;;AAEH,SAAS,oBAAoB,QAAQ,aAAa;CAChD,MAAM,aAAa,EAAE;AACrB,MAAK,MAAM,OAAO,OAAO,YAAY;EACnC,MAAM,YAAY,OAAO,WAAW;EACpC,IAAI,oBAAoB;AACxB,MAAI,gBAAgB,QAClB,qBAAoB;WACX,kBAAkB,UAAU,CACrC,qBAAoB;OACf;GACL,MAAM,CAAC,QAAQ,sBAAsB,UAAU,IAAI,EAAE;AACrD,OAAI,SAAS,KAAK,KAAK,kBAAkB,KAAK,CAC5C,qBAAoB;;AAGxB,aAAW,KAAK;GACd,MAAM;GACN,IAAI;GACJ,UAAU,OAAO,UAAU,SAAS,IAAI;GACxC,QAAQ,gBAAgB,UAAU;GAClC,OAAO,oBAAoB,eAAe,KAAK;GAC/C,SAAS,oBAAoB,OAAO,KAAK;GACzC,iBAAiB,gBAAgB,UAAU,OAAO,KAAK;GACvD,eAAe,gBAAgB,UAAU,OAAO,KAAK;GACtD,CAAC;;AAEJ,QAAO;;AAET,SAAS,kBAAkB,QAAQ,QAAQ;CACzC,MAAM,aAAa,OAAO,KAAK,OAAO,cAAc,EAAE,CAAC;CACvD,MAAM,WAAW,OAAO,YAAY,EAAE;AACtC,KAAI,WAAW,WAAW,OAAO,UAAU,WAAW,MAAM,MAAM,CAAC,OAAO,SAAS,EAAE,CAAC,CACpF,QAAO;AAET,KAAI,SAAS,WAAW,OAAO,UAAU,SAAS,MAAM,MAAM,CAAC,OAAO,SAAS,EAAE,CAAC,CAChF,QAAO;AAET,QAAO;;AAET,SAAS,gBAAgB,QAAQ;AAC/B,QAAO,WAAW,OAAO,EAAE,GAAG,WAAW,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG;;AAEjE,MAAM,iCAAiC;AACvC,SAAS,4BAA4B,KAAK,QAAQ;AAChD,KAAI,OAAO,WAAW,YAAY,CAAC,OAAO,MAAM,WAAW,+BAA+B,CACxF,QAAO;CAET,MAAM,OAAO,OAAO,KAAK,MAAM,GAAsC;AAErE,QADiB,IAAI,YAAY,UAAU,SACxB;;AAGrB,IAAM,2BAAN,MAA+B;CAC7B;CACA,YAAY,YAAY;AACtB,OAAK,aAAa;;CAEpB,MAAM,QAAQ,QAAQ,SAAS;AAC7B,OAAK,MAAM,aAAa,KAAK,WAC3B,KAAI,MAAM,UAAU,UAAU,QAAQ,QAAQ,CAC5C,QAAO,UAAU,QAAQ,QAAQ,QAAQ;AAG7C,SAAO,CAAC,OAAO,EAAE,CAAC;;;AAItB,IAAM,wBAAN,cAAoC,MAAM;AAE1C,IAAM,mBAAN,MAAuB;CACrB;CACA;CACA,YAAY,UAAU,EAAE,EAAE;AACxB,OAAK,aAAa,IAAIK,+CAA8B,QAAQ;AAC5D,OAAK,YAAY,IAAI,yBAAyBC,yBAAQ,QAAQ,iBAAiB,CAAC;;;;;;;CAOlF,MAAM,SAAS,QAAQ,EAAE,+BAA+B,eAAe,QAAQ,YAAY,QAAS,GAAG,YAAY,EAAE,EAAE;EACrH,MAAM,SAAS,gBAAgB,EAAE,UAAU,WAAW;AACpD,UAAO,EAAE,UAAU,UAAU,KAAK,IAAI;;EAExC,MAAM,MAAM;GACV,GAAGC,uBAAM,QAAQ;GACjB,MAAM,QAAQ,QAAQ;IAAE,OAAO;IAAiB,SAAS;IAAS;GAClE,SAAS;GACV;EACD,MAAM,EAAE,0BAA0B,6BAA6B,MAAM,MAAKC,qBAAsB,KAAK,cAAc;EACnH,MAAM,YAAY,EAAE;AACpB,qDAAgC;GAAE,MAAM,EAAE;GAAE;GAAQ,GAAG,oBAAoB;AACzE,OAAI,CAACP,uBAAM,QAAQ,gBAAgB,CACjC;AAEF,aAAU,KAAK,gBAAgB;IAC/B;EACF,MAAM,SAAS,EAAE;AACjB,OAAK,MAAM,EAAE,UAAU,UAAU,WAAW;GAC1C,MAAM,aAAa,KAAK,KAAK,IAAI;AACjC,OAAI;IACF,MAAM,MAAM,SAAS;IACrB,MAAM,SAAS,4DAAuC,iBAAiB,IAAI,MAAM,OAAO,CAAC;IACzF,MAAM,WAAW,cAAc,IAAI,MAAM,QAAQQ,4BAAW,KAAK,CAAC;IAClE,IAAI;AACJ,QAAI,IAAI,MAAM,SAAS,KAAK,KAAK,OAAO,IAAI,MAAM,SAAS,WACzD,sBAAqB,IAAI,MAAM;SAC1B;AACL,0BAAqB;MACnB,aAAa,IAAI,MAAM,eAAe;MACtC,SAAS,IAAI,MAAM;MACnB,aAAa,IAAI,MAAM;MACvB,YAAY,IAAI,MAAM;MACtB,MAAM,IAAI,MAAM,MAAM,KAAK,QAAQ,IAAI;MACxC;AACD,WAAM,MAAKC,QAAS,KAAK,oBAAoB,KAAK,yBAAyB;AAC3E,WAAM,MAAKC,gBAAiB,KAAK,oBAAoB,KAAK,yBAAyB;AACnF,WAAM,MAAKC,cAAe,oBAAoB,KAAK,0BAA0B,0BAA0B,8BAA8B;;AAEvI,QAAI,OAAO,IAAI,MAAM,SAAS,WAC5B,sBAAqB,IAAI,MAAM,KAAK,mBAAmB;AAEzD,QAAI,UAAU,EAAE;AAChB,QAAI,MAAM,cAAc,EAAE;AAC1B,QAAI,MAAM,UAAU,UAAU,4BAA4B,oBAAoB,SAAS;YAChF,GAAG;AACV,QAAI,EAAE,aAAa,uBACjB,OAAM;AAER,WAAO,KACL,qFAAqF,WAAW;EACxG,EAAE,UACK;;;AAGL,MAAI,OAAO,OACT,OAAM,IAAI,sBACR;;EAEN,OAAO,KAAK,OAAO,GACd;AAEH,SAAO,KAAK,WAAW,UAAU,IAAI,CAAC;;CAExC,OAAMJ,qBAAsB,KAAK,eAAe;EAC9C,IAAI,2BAA2B;GAC7B,MAAM;GACN,YAAY;IACV,SAAS,EAAE,OAAO,OAAO;IACzB,MAAM,EAAE,MAAM,UAAU;IACxB,QAAQ,EAAE,MAAM,UAAU;IAC1B,SAAS,EAAE,MAAM,UAAU;IAC3B,MAAM,EAAE;IACT;GACD,UAAU;IAAC;IAAW;IAAQ;IAAU;IAAU;GACnD;EACD,MAAM,2BAA2B,EAAE;AACnC,MAAI,eAAe;AACjB,4BAAyB,aAAa,EAAE;AACxC,QAAK,MAAM,OAAO,eAAe;IAC/B,MAAM,UAAU,cAAc;AAC9B,QAAI,QAAQ,WAAW,KAAK,EAC1B;IAEF,MAAM,EAAE,QAAQ,WAAW,YAAY;IACvC,MAAM,CAAC,UAAU,QAAQ,MAAM,KAAK,UAAU,QAAQ,QAAQ,EAAE,UAAU,CAAC;IAC3E,MAAM,oBAAoB,CAAC,SAAS;AACpC,QAAI,aAAa,SAAS;KACxB,MAAM,CAAC,gBAAgB,cAAc,MAAM,KAAK,UAAU,QAAQ,QAAQ,EAAE,UAAU,UAAU,CAAC;AACjG,SAAI,mBAAmB,YAAYN,+BAAc,WAAW,KAAKA,+BAAc,KAAK,CAClF,mBAAkB,KAAK,SAAS;eAEzB,aAAa,UAAU;KAChC,MAAM,CAAC,eAAe,aAAa,MAAM,KAAK,UAAU,QAAQ,QAAQ,EAAE,UAAU,SAAS,CAAC;AAC9F,SAAI,kBAAkB,YAAYA,+BAAc,UAAU,KAAKA,+BAAc,KAAK,CAChF,mBAAkB,KAAK,QAAQ;;AAGnC,6BAAyB,WAAW,KAAK;KACvC;KACA;KACA,KAAK,wBAAwB;KAC7B;KACD,CAAC;;AAEJ,OAAI,eAAe,EAAE;AACrB,OAAI,WAAW,YAAY,EAAE;AAC7B,QAAK,MAAM,OAAO,eAAe;IAC/B,MAAM,UAAU,cAAc;AAC9B,QAAI,QAAQ,WAAW,KAAK,GAAG;AAC7B,SAAI,QAAQ,UAAU,kBAAkB;AACtC,UAAI,WAAW,QAAQ,OAAO,gBAAgB,yBAAyB;AACvE,iCAA2B,EAAE,MAAM,wBAAwB,OAAO;;AAEpE;;IAEF,MAAM,EAAE,QAAQ,WAAW,YAAY;IACvC,MAAM,GAAG,QAAQ,MAAM,KAAK,UAAU,QACpC,QACA;KACE,GAAG;KACH;KACA,yBAAyB;KAE1B,CACF;AACD,QAAI,WAAW,QAAQ,OAAO,gBAAgB,KAAK;;;AAGvD,SAAO;GAAE;GAA0B;GAA0B;;CAE/D,OAAMQ,QAAS,KAAK,KAAK,KAAK,0BAA0B;EACtD,MAAM,qDAAgC,iBAAiB,IAAI,MAAM,OAAO;EACxE,MAAM,6DAAwC,IAAI,YAAY;AAC9D,MAAI,SAAS;AACX,OAAI,cAAc;IAChB,UAAU;IACV,SAAS,8BACP,MAAM,KAAK,UAAU,QAAQ,QAAQ,QAAQ;KAAE,GAAG;KAA0B,UAAU;KAAS,CAAC,EAChG,MAAM,KAAK,UAAU,QAAQ,QAAQ,SAAS;KAAE,GAAG;KAA0B,UAAU;KAAS,CAAC,CAClG;IACF;AACD;;EAEF,MAAM,gBAAgBG,kCAAiB,IAAI,MAAM,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK;EAC1E,MAAM,6DAAwC,yBAAyB,IAAI,MAAM,eAAe;EAChG,IAAI,CAAC,UAAU,UAAU,MAAM,KAAK,UAAU,QAC5C,IAAI,aACJ;GACE,GAAG;GACH,UAAU;GACV,yBAAyB,eAAe,UAAU,mBAAmB,aAAa,IAAI;GACvF,CACF;AACD,MAAI,YAAY,OAAO,IAAI,CAAC,eAAe,OACzC;AAEF,MAAI,mBAAmB,WAAW;AAChC,OAAI,eAAe,QAAQ;IACzB,MAAM,SAAS,IAAI,sBACjB,wIACD;AACD,QAAI,CAAC,eAAe,OAAO,CACzB,OAAM;IAER,MAAM,CAAC,cAAc,QAAQ,qBAAqB,QAAQ,cAAc;AACxE,aAAS;AACT,eAAW,KAAK,WAAW,KAAK,SAAS,WAAW,IAAI;AACxD,QAAI,CAAC,kBAAkB,cAAc,cAAc,CACjD,OAAM;AAER,QAAI,eAAe,EAAE;AACrB,QAAI,WAAW,KAAK,GAAG,oBAAoB,cAAc,OAAO,CAAC;;AAEnE,OAAI,WAAW,OAAO;IACpB,MAAM,iBAAiB,4BAA4B,KAAK,OAAO;AAC/D,QAAI,CAAC,eAAe,eAAe,CACjC,OAAM,IAAI,sBACR,4EACD;AAEH,QAAI,eAAe,EAAE;AACrB,QAAI,WAAW,KAAK,GAAG,oBAAoB,gBAAgB,QAAQ,CAAC;SAEpE,KAAI,cAAc;IAChB;IACA,SAAS,iBAAiB,OAAO;IAClC;AAEH;;EAEF,MAAM,QAAQ,IAAI,sBAChB,4LACD;AACD,MAAI,CAAC,eAAe,OAAO,CACzB,OAAM;EAER,MAAM,sBAAsB,OAAO,YAAY,WAAW,KAAK,IAAI,4BAA4B,KAAK,OAAO,WAAW,OAAO,GAAG,KAAK;AACrI,MAAI,eAAe,WAAW,wBAAwB,KAAK,KAAK,CAAC,eAAe,oBAAoB,IAAI,CAAC,kBAAkB,qBAAqB,cAAc,EAC5J,OAAM,IAAI,sBACR,iJACD;AAEH,OAAK,MAAM,QAAQ;GAAC;GAAU;GAAS;GAAU,EAAE;GACjD,MAAM,aAAa,OAAO,aAAa;AACvC,OAAI,eAAe,KAAK,GAAG;IACzB,MAAM,iBAAiB,4BAA4B,KAAK,WAAW;AACnE,QAAI,CAAC,eAAe,eAAe,CACjC,OAAM;IAER,MAAM,cAAc,SAAS,WAAW,SAAS,SAAS,YAAY,WAAW;AACjF,QAAI,eAAe,EAAE;AACrB,QAAI,WAAW,KAAK,GAAG,oBAAoB,gBAAgB,YAAY,CAAC;;;AAG5E,MAAI,OAAO,YAAY,SAAS,KAAK,EACnC,KAAI,cAAc;GAChB,UAAU,OAAO,UAAU,SAAS,OAAO;GAC3C,SAAS,iBAAiB,OAAO,WAAW,KAAK;GAClD;;CAGL,OAAMF,gBAAiB,KAAK,KAAK,KAAK,0BAA0B;EAC9D,MAAM,eAAe,IAAI;EACzB,MAAM,qDAAgC,wBAAwB,IAAI,MAAM,cAAc;EACtF,MAAM,0DAAqC,6BAA6B,IAAI,OAAO,mBAAmB;EACtG,MAAM,gFAA2D,aAAa;EAC9E,MAAM,8DAAyC,0BAA0B,IAAI,MAAM,gBAAgB;AACnG,MAAI,4BAA4B;AAC9B,OAAI,cAAc,EAAE;AACpB,OAAI,UAAU,UAAU;IACtB;IACA,SAAS,8BACP,MAAM,KAAK,UAAU,QAAQ,2BAA2B,QAAQ;KAAE,GAAG;KAA0B,UAAU;KAAU,CAAC,EACpH,MAAM,KAAK,UAAU,QAAQ,2BAA2B,SAAS;KAAE,GAAG;KAA0B,UAAU;KAAU,CAAC,CACtH;IACF;AACD;;EAEF,MAAM,CAAC,UAAU,QAAQ,MAAM,KAAK,UAAU,QAC5C,cACA;GACE,GAAG;GACH,UAAU;GACV,yBAAyB,oBAAoB,aAAa,IAAI;GAC/D,CACF;AACD,MAAI,oBAAoB,WAAW;AACjC,OAAI,cAAc,EAAE;AACpB,OAAI,UAAU,UAAU,EACtB,aACD;AACD,OAAI,UAAU,QAAQ,UAAU,iBAAiB,uBAAuB,UAAU,KAAK,CAAC;AACxF;;EAEF,MAAM,kCAAkC,IAAI,KAAK;AACjD,OAAK,MAAM,QAAQ,kBAAkB,KAAK,EAAE;GAC1C,MAAM,QAAQ,IAAI,sBAAsB;;;;;;;;mBAQ3BT,+BAAc,KAAK,CAAC;QAC/B;AACF,OAAI,CAAC,eAAe,KAAK,CACvB,OAAM;GAER,IAAI;GACJ,IAAI;AACJ,OAAI,KAAK,YAAY,WAAW,KAAK,GAAG;IACtC,MAAM,eAAe,4BAA4B,KAAK,KAAK,WAAW,OAAO;AAC7E,QAAI,OAAO,iBAAiB,YAAY,aAAa,UAAU,KAAK,KAAK,OAAO,aAAa,UAAU,YAAY,CAAC,OAAO,UAAU,aAAa,MAAM,IAAIY,mCAAkB,aAAa,MAAM,CAC/L,OAAM;AAER,mBAAe,aAAa;AAC5B,wBAAoB,aAAa;;GAEnC,MAAM,aAAa,gBAAgB;GACnC,MAAM,kBAAkB,qBAAqB;AAC7C,OAAI,gBAAgB,IAAI,WAAW,CACjC,OAAM,IAAI,sBAAsB;;4BAEZ,WAAW;UAC7B;AAEJ,mBAAgB,IAAI,WAAW;AAC/B,OAAI,cAAc,EAAE;AACpB,OAAI,UAAU,cAAc,EAC1B,aAAa,iBACd;AACD,OAAI,KAAK,YAAY,YAAY,KAAK,GAAG;IACvC,MAAM,gBAAgB,4BAA4B,KAAK,KAAK,WAAW,QAAQ;AAC/E,QAAI,CAAC,eAAe,cAAc,CAChC,OAAM;AAER,SAAK,MAAM,OAAO,cAAc,YAAY;KAC1C,MAAM,eAAe,cAAc,WAAW;AAC9C,SAAI,iBAAiB,KAAK,GAAG;AAC3B,UAAI,UAAU,YAAY,YAAY,EAAE;AACxC,UAAI,UAAU,YAAY,QAAQ,OAAO;OACvC,QAAQ,gBAAgB,aAAa;OACrC,UAAU,KAAK,UAAU,SAAS,UAAU,IAAI,cAAc,UAAU,SAAS,IAAI;OACtF;;;;AAIP,OAAI,KAAK,YAAY,SAAS,KAAK,EACjC,KAAI,UAAU,YAAY,UAAU,iBAClC,uBAAuB,KAAK,UAAU,SAAS,OAAO,IAAI,OAAO,KAAK,WAAW,KAAK,CACvF;;;CAIP,OAAMF,cAAe,KAAK,KAAK,0BAA0B,sBAAsB,+BAA+B;EAC5G,MAAM,WAAW,IAAI;EACrB,MAAM,yBAAyB,EAAE;AACjC,OAAK,MAAM,QAAQ,UAAU;GAC3B,MAAM,SAAS,SAAS;AACxB,OAAI,CAAC,OACH;GAEF,MAAM,SAASG,yCAAwB,MAAM,OAAO,OAAO;GAC3D,MAAM,iBAAiBC,0CAAyB,MAAM,OAAO,QAAQ;AACrE,0BAAuB,YAAY;IAAE;IAAQ,yBAAyB,EAAE;IAAE,qBAAqB,EAAE;IAAE;GACnG,MAAM,CAAC,cAAc,cAAc,MAAM,KAAK,UAAU,QAAQ,OAAO,MAAM;IAAE,GAAG;IAA0B,UAAU;IAAU,CAAC;AACjI,0BAAuB,QAAQ,wBAAwB,KAAK;IAAC;IAAM;IAAgB;IAAc;IAAW,CAAC;AAC7G,0BAAuB,QAAQ,oBAAoB,KAAK;IACtD,MAAM;IACN,YAAY;KACV,SAAS,EAAE,OAAO,MAAM;KACxB,MAAM,EAAE,OAAO,MAAM;KACrB,QAAQ,EAAE,OAAO,QAAQ;KACzB,SAAS;MAAE,MAAM;MAAU,SAAS;MAAgB;KACpD,MAAM;KACP;IACD,UAAU,eAAe;KAAC;KAAW;KAAQ;KAAU;KAAW;KAAO,GAAG;KAAC;KAAW;KAAQ;KAAU;KAAU;IACrH,CAAC;;AAEJ,MAAI,cAAc,EAAE;AACpB,OAAK,MAAM,gBAAgB,wBAAwB;GACjD,MAAM,gBAAgB,uBAAuB;GAC7C,MAAM,mBAAmBf,uBAAM,+BAA+B,cAAc,yBAAyB,cAAc,OAAO;AAC1H,OAAI,UAAU,gBAAgB;IAC5B,aAAa;IACb,SAAS,iBAAiB,oBAAoB,EAC5C,OAAO,CACL,GAAG,cAAc,qBACjB,qBACD,EACF,CAAC;IACH;;;;;;;AC/tBP,IAAM,yBAAN,MAA6B;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,UAAU,EAAE,EAAE;AACxB,OAAK,sBAAsB,QAAQ;AACnC,OAAK,WAAW,QAAQ,YAAY;AACpC,OAAK,YAAY,QAAQ,aAAa;AACtC,OAAK,aAAa,QAAQ,cAAc,KAAK;AAC7C,OAAK,eAAe,QAAQ,gBAAgB;AAC5C,OAAK,gBAAgB,QAAQ,kBAAkB,KAAK,iBAAiB,YAAY,2DAA2D;AAC5I,OAAK,aAAa,QAAQ,eAAe,KAAK,iBAAiB,YAAY,qDAAqD,KAAK;AACrI,OAAK,WAAW,QAAQ,YAAY;AACpC,OAAK,WAAW,QAAQ,YAAY;AACpC,OAAK,YAAY,IAAI,iBAAiB,QAAQ;EAC9C,MAAM,OAAO,MAAM,EAAE,QAAQ,MAAM,QAAQ,CAAC,QAAQ,MAAM,SAAS,CAAC,QAAQ,MAAM,OAAO,CAAC,QAAQ,MAAM,OAAO;AAC/G,OAAK,iBAAiB,QAAQ,oBAAoB,SAAS,OAAO,MAAM,WAAW,QAAQ,MAAM,cAAc,WAAW;GACxH,IAAI;AACJ,OAAI,iBAAiB,WAAW;IAC9B,MAAM,gBAAgB;KACpB,QAAQ;KACR;KACA,aAAa;KACb,SAAS,CACP,gCACA,qCACD;KACD,SAAS,CACP,sCACD;KACD,GAAG;KACJ;AACD,WAAO;;;;yBAIU,IAAI,UAAU,CAAC;;;;4CAIIgB,+BAAc,cAAc,CAAC,QAAQ,+BAA+B,KAAK,CAAC;;;;;SAU9G,QAAO;;uCAEwB,IAAIA,+BANd;IACnB,SAASA,+BAAc,KAAK;IAC5B,GAAG;IACJ,CAG6D,CAAC,CAAC;;yBAE/C,IAAI,UAAU,CAAC;;;;;;;AAQlC,UAAO;;;;;;qBAMQ,IAAI,MAAM,CAAC;cAClB,SAAS,gDAAgD,IAAI,OAAO,CAAC,QAAQ,GAAG;cAChF,KAAK;;YAEP,KAAK;;;;;CAKf,KAAK,SAAS,QAAQ;AACpB,UAAQ,iBAAiB,EAAE;AAC3B,UAAQ,aAAa,KAAK,OAAO,aAAa;GAC5C,MAAM,MAAM,MAAM,SAAS,MAAM;AACjC,OAAI,IAAI,WAAW,SAAS,QAAQ,WAAW,MAC7C,QAAO;GAET,MAAM,SAAS,SAAS,UAAU;GAClC,MAAM,kBAAkB,SAAS,QAAQ,IAAI,SAAS,QAAQ,OAAO,GAAG,IAAI;GAC5E,MAAM,UAAU,IAAI,IAAI,GAAG,SAAS,KAAK,WAAW,QAAQ,OAAO,GAAG,EAAE,SAAS,QAAQ,IAAI,OAAO;GACpG,MAAM,UAAU,IAAI,IAAI,GAAG,SAAS,KAAK,WAAW,QAAQ,OAAO,GAAG,EAAE,SAAS,QAAQ,IAAI,OAAO;GACpG,MAAM,eAAeC,sBAAK,YAAY;AACpC,WAAO,MAAM,KAAK,UAAU,SAAS,QAAQ;KAC3C,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,QAAQ,SAAS,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;KAC3E,GAAG,MAAMC,uBAAM,KAAK,qBAAqB,SAAS;KACnD,CAAC;KACF;AACF,OAAI,oBAAoB,QAAQ,UAAU;IACxC,MAAM,OAAO,MAAM,cAAc;AACjC,WAAO;KACL,SAAS;KACT,UAAU;MACR,QAAQ;MACR,SAAS,EAAE;MACX,MAAM,IAAI,KAAK,CAACF,+BAAc,KAAK,CAAC,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;MACjF;KACF;;AAEH,OAAI,oBAAoB,QAAQ,UAAU;IACxC,MAAM,OAAO,KAAK,eAChB,QAAQ,UAAU,EAClB,MAAME,uBAAM,KAAK,WAAW,SAAS,EACrC,MAAMA,uBAAM,KAAK,UAAU,SAAS,EACpC,MAAMA,uBAAM,KAAK,eAAe,SAAS,EACzC,MAAMA,uBAAM,KAAK,YAAY,SAAS,EACtC,MAAM,cAAc,EACpB,KAAK,cACL,MAAMA,uBAAM,KAAK,YAAY,SAAS,CACvC;AACD,WAAO;KACL,SAAS;KACT,UAAU;MACR,QAAQ;MACR,SAAS,EAAE;MACX,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;MACpE;KACF;;AAEH,UAAO;IACP"}
@@ -1,4 +1,4 @@
1
- const require_runtime = require('../runtime-BYrdNAff.cjs');
1
+ const require_runtime = require('../runtime-BcksCIA1.cjs');
2
2
  require('../normalize-D4Qh0wVk.cjs');
3
3
  require('../package-CgNIVjVe.cjs');
4
4
 
@@ -1,5 +1,5 @@
1
1
  import "../zod-A7Pti5IV.cjs";
2
2
  import "../errors-DKPPPYYT.cjs";
3
- import { n as createPluginRuntime, t as PluginRuntime } from "../index-DM9S53Bx.cjs";
3
+ import { n as createPluginRuntime, t as PluginRuntime } from "../index-G63gBZIY.cjs";
4
4
  import "../normalize-BW7kk8Lk.cjs";
5
5
  export { PluginRuntime, createPluginRuntime };
@@ -1,5 +1,5 @@
1
1
  import "../zod-Zw8dlP3j.mjs";
2
2
  import "../errors-9sNpYLv5.mjs";
3
- import { n as createPluginRuntime, t as PluginRuntime } from "../index-DrOou1Hc.mjs";
3
+ import { n as createPluginRuntime, t as PluginRuntime } from "../index-Coz54d1B.mjs";
4
4
  import "../normalize-eB_j86fm.mjs";
5
5
  export { PluginRuntime, createPluginRuntime };
@@ -1,4 +1,4 @@
1
- import { n as createPluginRuntime, t as PluginRuntime } from "../runtime-BzkHRj0E.mjs";
1
+ import { n as createPluginRuntime, t as PluginRuntime } from "../runtime-60AkNpI0.mjs";
2
2
  import "../normalize-D7nae0Hn.mjs";
3
3
  import "../package-BoyftHDo.mjs";
4
4
 
@@ -0,0 +1,476 @@
1
+ import { i as __toESM } from "./chunk-QQAxy9l9.mjs";
2
+ import { t as getNormalizedRemoteName } from "./normalize-D7nae0Hn.mjs";
3
+ import { t as require_package } from "./package-BoyftHDo.mjs";
4
+ import { Cause, Context, Data, Effect, Exit, Hash, Layer, ManagedRuntime, Option, Ref, Scope } from "effect";
5
+ import { z } from "zod";
6
+ import { createRouterClient } from "@orpc/server";
7
+ import { ORPCError } from "@orpc/contract";
8
+ import { betterFetch } from "@better-fetch/fetch";
9
+ import { createInstance, getInstance } from "@module-federation/enhanced/runtime";
10
+ import { setGlobalFederationInstance } from "@module-federation/runtime-core";
11
+
12
+ //#region src/runtime/errors.ts
13
+ var PluginRuntimeError = class extends Data.TaggedError("PluginRuntimeError") {};
14
+ var ModuleFederationError = class extends Data.TaggedError("ModuleFederationError") {};
15
+ var ValidationError = class extends Data.TaggedError("ValidationError") {};
16
+ const isRetryableORPCCode = (code) => {
17
+ switch (code) {
18
+ case "TOO_MANY_REQUESTS":
19
+ case "SERVICE_UNAVAILABLE":
20
+ case "BAD_GATEWAY":
21
+ case "GATEWAY_TIMEOUT":
22
+ case "TIMEOUT": return true;
23
+ default: return false;
24
+ }
25
+ };
26
+ const wrapORPCError = (orpcError, pluginId, procedureName, operation) => {
27
+ return new PluginRuntimeError({
28
+ pluginId,
29
+ operation,
30
+ procedureName,
31
+ retryable: isRetryableORPCCode(orpcError.code),
32
+ cause: orpcError
33
+ });
34
+ };
35
+ const toPluginRuntimeError = (error, pluginId, procedureName, operation, defaultRetryable = false) => {
36
+ if (error instanceof ORPCError) return wrapORPCError(error, pluginId, procedureName, operation);
37
+ if (error instanceof PluginRuntimeError) return error;
38
+ return new PluginRuntimeError({
39
+ pluginId,
40
+ operation,
41
+ procedureName,
42
+ retryable: defaultRetryable,
43
+ cause: error instanceof Error ? error : new Error(String(error))
44
+ });
45
+ };
46
+
47
+ //#endregion
48
+ //#region src/runtime/services/module-federation.service.ts
49
+ var import_package = /* @__PURE__ */ __toESM(require_package(), 1);
50
+ const createModuleFederationInstance = Effect.cached(Effect.sync(() => {
51
+ try {
52
+ let instance = getInstance();
53
+ if (!instance) {
54
+ instance = createInstance({
55
+ name: "host",
56
+ remotes: [],
57
+ shared: {
58
+ "every-plugin": {
59
+ version: import_package.default.version,
60
+ shareConfig: {
61
+ singleton: true,
62
+ requiredVersion: `^${import_package.default.version}`,
63
+ eager: true,
64
+ strictVersion: false
65
+ }
66
+ },
67
+ effect: {
68
+ version: import_package.default.dependencies.effect,
69
+ shareConfig: {
70
+ singleton: true,
71
+ requiredVersion: "^3.18.0",
72
+ eager: true,
73
+ strictVersion: false
74
+ }
75
+ },
76
+ zod: {
77
+ version: import_package.default.dependencies.zod,
78
+ shareConfig: {
79
+ singleton: true,
80
+ requiredVersion: "^4.1.0",
81
+ eager: true,
82
+ strictVersion: false
83
+ }
84
+ },
85
+ "@orpc/contract": {
86
+ version: import_package.default.dependencies["@orpc/contract"],
87
+ shareConfig: {
88
+ singleton: true,
89
+ requiredVersion: "^1.8.0",
90
+ eager: true,
91
+ strictVersion: false
92
+ }
93
+ },
94
+ "@orpc/server": {
95
+ version: import_package.default.dependencies["@orpc/server"],
96
+ shareConfig: {
97
+ singleton: true,
98
+ requiredVersion: "^1.8.0",
99
+ eager: true,
100
+ strictVersion: false
101
+ }
102
+ }
103
+ }
104
+ });
105
+ setGlobalFederationInstance(instance);
106
+ }
107
+ return instance;
108
+ } catch (error) {
109
+ throw new Error(`Failed to initialize Module Federation: ${error}`);
110
+ }
111
+ }));
112
+ var ModuleFederationService = class extends Effect.Service()("ModuleFederationService", { effect: Effect.gen(function* () {
113
+ const mf = yield* Effect.flatten(createModuleFederationInstance);
114
+ return {
115
+ registerRemote: (pluginId, url) => Effect.gen(function* () {
116
+ console.log(`[MF] Registering ${pluginId}`);
117
+ const manifestUrl = url.endsWith("/") ? `${url}mf-manifest.json` : `${url}/mf-manifest.json`;
118
+ const { error: manifestError } = yield* Effect.tryPromise({
119
+ try: () => betterFetch(manifestUrl, { method: "HEAD" }),
120
+ catch: (error) => error
121
+ });
122
+ let entryUrl;
123
+ let isManifestMode = false;
124
+ if (!manifestError) {
125
+ entryUrl = manifestUrl;
126
+ isManifestMode = true;
127
+ console.log(`[MF] Using MF 2.0 manifest mode for ${pluginId}`);
128
+ } else {
129
+ console.log(`[MF] ⚠️ Manifest not found, falling back to MF 1.5 mode for ${pluginId}`);
130
+ entryUrl = url;
131
+ isManifestMode = false;
132
+ }
133
+ const remoteName = isManifestMode ? pluginId : getNormalizedRemoteName(pluginId);
134
+ yield* Effect.try({
135
+ try: () => mf.registerRemotes([{
136
+ name: remoteName,
137
+ entry: entryUrl,
138
+ ...isManifestMode && { alias: pluginId }
139
+ }]),
140
+ catch: (error) => new ModuleFederationError({
141
+ pluginId,
142
+ remoteUrl: url,
143
+ cause: error instanceof Error ? error : new Error(String(error))
144
+ })
145
+ });
146
+ console.log(`[MF] ✅ Registered ${pluginId} (${isManifestMode ? "MF 2.0" : "MF 1.5"})`);
147
+ }),
148
+ loadRemoteConstructor: (pluginId, url) => Effect.gen(function* () {
149
+ const remoteName = getNormalizedRemoteName(pluginId);
150
+ console.log(`[MF] Loading remote ${remoteName}`);
151
+ const modulePath = `${remoteName}/plugin`;
152
+ return yield* Effect.tryPromise({
153
+ try: async () => {
154
+ const container = await mf.loadRemote(modulePath);
155
+ if (!container) throw new Error(`No container returned for ${modulePath}`);
156
+ const Constructor = typeof container === "function" ? container : container.default ? container.default : Object.values(container).find((exp) => typeof exp === "function" && exp.prototype?.constructor === exp);
157
+ if (!Constructor || typeof Constructor !== "function") {
158
+ const containerInfo = typeof container === "object" ? `Available exports: ${Object.keys(container).join(", ")}` : `Container type: ${typeof container}`;
159
+ throw new Error(`No valid plugin constructor found for '${pluginId}'.\nSupported patterns:\n - export const YourPlugin = createPlugin({...})\n - export default createPlugin({...})\n${containerInfo}`);
160
+ }
161
+ if (!Constructor.binding) {
162
+ const containerInfo = typeof container === "object" ? `Found exports: ${Object.keys(container).join(", ")}` : `Container type: ${typeof container}`;
163
+ throw new Error(`Invalid plugin constructor for '${pluginId}'. The exported value must be created with createPlugin(). Found a function but it's missing the required 'binding' property.\n${containerInfo}`);
164
+ }
165
+ console.log(`[MF] ✅ Loaded constructor for ${pluginId}`);
166
+ return Constructor;
167
+ },
168
+ catch: (error) => new ModuleFederationError({
169
+ pluginId,
170
+ remoteUrl: url,
171
+ cause: error instanceof Error ? error : new Error(String(error))
172
+ })
173
+ });
174
+ })
175
+ };
176
+ }) }) {};
177
+
178
+ //#endregion
179
+ //#region src/runtime/services/plugin-lifecycle.service.ts
180
+ var PluginLifecycleService = class extends Effect.Service()("PluginLifecycleService", { effect: Effect.gen(function* () {
181
+ const activePlugins = yield* Ref.make(/* @__PURE__ */ new Set());
182
+ return {
183
+ register: (plugin) => Ref.update(activePlugins, (plugins) => new Set(plugins).add(plugin)),
184
+ unregister: (plugin) => Ref.update(activePlugins, (plugins) => {
185
+ const newSet = new Set(plugins);
186
+ newSet.delete(plugin);
187
+ return newSet;
188
+ }),
189
+ shutdown: (plugin) => Effect.gen(function* () {
190
+ yield* Ref.update(activePlugins, (plugins) => {
191
+ const newSet = new Set(plugins);
192
+ newSet.delete(plugin);
193
+ return newSet;
194
+ });
195
+ yield* plugin.plugin.shutdown().pipe(Effect.mapError((error) => toPluginRuntimeError(error, plugin.plugin.id, void 0, "shutdown-plugin", false)));
196
+ }),
197
+ cleanup: () => Effect.gen(function* () {
198
+ const plugins = yield* Ref.get(activePlugins);
199
+ yield* Effect.forEach(plugins, (plugin) => plugin.plugin.shutdown().pipe(Effect.mapError((error) => toPluginRuntimeError(error, plugin.plugin.id, void 0, "cleanup-shutdown", false)), Effect.catchAll((error) => Effect.logError(`Failed to shutdown plugin ${plugin.plugin.id} during cleanup`, error, { pluginId: plugin.plugin.id }))), { concurrency: "unbounded" });
200
+ yield* Ref.set(activePlugins, /* @__PURE__ */ new Set());
201
+ }).pipe(Effect.catchAll(() => Effect.void))
202
+ };
203
+ }) }) {};
204
+
205
+ //#endregion
206
+ //#region src/runtime/validation.ts
207
+ const validate = (schema, data, pluginId, stage) => Effect.gen(function* () {
208
+ const result = schema.safeParse(data);
209
+ if (result.success) return result.data;
210
+ return yield* Effect.fail(new ValidationError({
211
+ pluginId,
212
+ stage,
213
+ zodError: result.error
214
+ }));
215
+ });
216
+
217
+ //#endregion
218
+ //#region src/runtime/services/secrets.service.ts
219
+ const configSchema = z.object({ secrets: z.record(z.string(), z.unknown()) }).loose();
220
+ var SecretsConfigTag = class extends Context.Tag("SecretsConfig")() {};
221
+ var SecretsService = class extends Effect.Service()("SecretsService", { effect: Effect.gen(function* () {
222
+ const secrets = yield* SecretsConfigTag;
223
+ const hydrateValue = (value) => {
224
+ if (typeof value === "string") {
225
+ let result = value;
226
+ for (const [key, secretValue] of Object.entries(secrets)) {
227
+ const pattern = new RegExp(`{{${key}}}`, "g");
228
+ result = result.replace(pattern, String(secretValue));
229
+ }
230
+ return result;
231
+ }
232
+ if (Array.isArray(value)) return value.map(hydrateValue);
233
+ if (value && typeof value === "object") {
234
+ if (value.constructor === Object || value.constructor === void 0) {
235
+ const hydrated$1 = {};
236
+ for (const [key, val] of Object.entries(value)) hydrated$1[key] = hydrateValue(val);
237
+ return hydrated$1;
238
+ }
239
+ const hydrated = Object.create(Object.getPrototypeOf(value));
240
+ for (const [key, val] of Object.entries(value)) hydrated[key] = hydrateValue(val);
241
+ return hydrated;
242
+ }
243
+ return value;
244
+ };
245
+ return { hydrateSecrets: (config) => Effect.gen(function* () {
246
+ const parseResult = configSchema.parse(config);
247
+ try {
248
+ return hydrateValue(parseResult);
249
+ } catch (error) {
250
+ return yield* Effect.fail(new PluginRuntimeError({
251
+ operation: "hydrate-secrets",
252
+ cause: error instanceof Error ? error : new Error(String(error)),
253
+ retryable: false
254
+ }));
255
+ }
256
+ }) };
257
+ }) }) {};
258
+
259
+ //#endregion
260
+ //#region src/runtime/services/plugin-loader.service.ts
261
+ var PluginRegistryTag = class extends Context.Tag("PluginRegistry")() {};
262
+ var RegistryService = class extends Effect.Service()("RegistryService", { effect: Effect.gen(function* () {
263
+ const registry = yield* PluginRegistryTag;
264
+ return { get: (pluginId) => Effect.fromNullable(registry[pluginId]).pipe(Effect.mapError(() => new PluginRuntimeError({
265
+ pluginId,
266
+ operation: "validate-plugin-id",
267
+ cause: /* @__PURE__ */ new Error(`Plugin ${pluginId} not found in registry`),
268
+ retryable: false
269
+ }))) };
270
+ }) }) {};
271
+ var PluginLoaderService = class extends Effect.Service()("PluginLoaderService", { effect: Effect.gen(function* () {
272
+ const moduleFederationService = yield* ModuleFederationService;
273
+ const secretsService = yield* SecretsService;
274
+ const registryService = yield* RegistryService;
275
+ const resolveUrl = (baseUrl, version) => version && version !== "latest" ? baseUrl.replace("@latest", `@${version}`) : baseUrl;
276
+ const getMetadata = (pluginId) => registryService.get(pluginId);
277
+ return {
278
+ loadPlugin: (pluginId) => Effect.gen(function* () {
279
+ const metadata = yield* getMetadata(pluginId);
280
+ const url = resolveUrl(metadata.remoteUrl);
281
+ yield* moduleFederationService.registerRemote(pluginId, url).pipe(Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "register-remote", true)));
282
+ yield* Effect.logDebug("Loading plugin", {
283
+ pluginId,
284
+ url
285
+ });
286
+ return {
287
+ ctor: yield* moduleFederationService.loadRemoteConstructor(pluginId, url).pipe(Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "load-remote", false))),
288
+ metadata
289
+ };
290
+ }),
291
+ instantiatePlugin: (pluginId, loadedPlugin) => Effect.gen(function* () {
292
+ const instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "instantiate-plugin", false)));
293
+ instance.id = pluginId;
294
+ return {
295
+ plugin: instance,
296
+ metadata: loadedPlugin.metadata
297
+ };
298
+ }),
299
+ initializePlugin: (pluginInstance, config) => Effect.gen(function* () {
300
+ const { plugin } = pluginInstance;
301
+ const validatedVariables = yield* validate(plugin.configSchema.variables, config.variables, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
302
+ pluginId: plugin.id,
303
+ operation: "validate-config",
304
+ cause: validationError.zodError,
305
+ retryable: false
306
+ })));
307
+ const validatedSecrets = yield* validate(plugin.configSchema.secrets, config.secrets, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
308
+ pluginId: plugin.id,
309
+ operation: "validate-secrets",
310
+ cause: validationError.zodError,
311
+ retryable: false
312
+ })));
313
+ const hydratedConfig = yield* secretsService.hydrateSecrets({
314
+ variables: validatedVariables,
315
+ secrets: validatedSecrets
316
+ });
317
+ const _variables = yield* validate(plugin.configSchema.variables, hydratedConfig.variables, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
318
+ pluginId: plugin.id,
319
+ operation: "validate-hydrated-config",
320
+ cause: validationError.zodError,
321
+ retryable: false
322
+ })));
323
+ const scope = yield* Scope.make();
324
+ const context = yield* plugin.initialize({
325
+ variables: _variables,
326
+ secrets: hydratedConfig.secrets
327
+ }).pipe(Effect.provideService(Scope.Scope, scope), Effect.mapError((error) => toPluginRuntimeError(error, plugin.id, void 0, "initialize-plugin", false)));
328
+ return {
329
+ plugin,
330
+ metadata: pluginInstance.metadata,
331
+ config: {
332
+ variables: _variables,
333
+ secrets: hydratedConfig.secrets
334
+ },
335
+ context,
336
+ scope
337
+ };
338
+ })
339
+ };
340
+ }) }) {};
341
+
342
+ //#endregion
343
+ //#region src/runtime/services/plugin.service.ts
344
+ var PluginService = class PluginService extends Effect.Service()("PluginService", { scoped: Effect.gen(function* () {
345
+ const loader = yield* PluginLoaderService;
346
+ const lifecycle = yield* PluginLifecycleService;
347
+ return {
348
+ loadPlugin: loader.loadPlugin,
349
+ instantiatePlugin: loader.instantiatePlugin,
350
+ initializePlugin: loader.initializePlugin,
351
+ shutdownPlugin: (plugin) => Effect.gen(function* () {
352
+ yield* plugin.plugin.shutdown().pipe(Effect.catchAll(() => Effect.void));
353
+ yield* Scope.close(plugin.scope, Exit.succeed(void 0));
354
+ yield* lifecycle.unregister(plugin);
355
+ }),
356
+ cleanup: lifecycle.cleanup
357
+ };
358
+ }) }) {
359
+ static Live = (registry, secrets) => {
360
+ const contextLayer = Layer.mergeAll(Layer.succeed(PluginRegistryTag, registry), Layer.succeed(SecretsConfigTag, secrets));
361
+ const servicesLayer = Layer.mergeAll(ModuleFederationService.Default, SecretsService.Default, RegistryService.Default, PluginLifecycleService.Default).pipe(Layer.provide(contextLayer));
362
+ return PluginService.Default.pipe(Layer.provide(PluginLoaderService.Default), Layer.provide(servicesLayer));
363
+ };
364
+ };
365
+
366
+ //#endregion
367
+ //#region src/runtime/index.ts
368
+ var PluginRuntime = class {
369
+ pluginCache = /* @__PURE__ */ new Map();
370
+ constructor(runtime, registry) {
371
+ this.runtime = runtime;
372
+ this.registry = registry;
373
+ }
374
+ generateCacheKey(pluginId, config) {
375
+ return `${pluginId}:${Hash.structure(config).toString()}`;
376
+ }
377
+ validatePluginId(pluginId) {
378
+ if (!(pluginId in this.registry)) return Effect.fail(new PluginRuntimeError({
379
+ pluginId: String(pluginId),
380
+ operation: "validate-plugin-id",
381
+ cause: /* @__PURE__ */ new Error(`Plugin ID '${String(pluginId)}' not found in registry.`),
382
+ retryable: false
383
+ }));
384
+ return Effect.succeed(String(pluginId));
385
+ }
386
+ async runPromise(effect) {
387
+ const exit = await this.runtime.runPromiseExit(effect);
388
+ if (Exit.isFailure(exit)) {
389
+ const error = Cause.failureOption(exit.cause);
390
+ if (Option.isSome(error)) throw error.value;
391
+ throw Cause.squash(exit.cause);
392
+ }
393
+ return exit.value;
394
+ }
395
+ async usePlugin(pluginId, config) {
396
+ const cacheKey = this.generateCacheKey(pluginId, config);
397
+ let cachedPlugin = this.pluginCache.get(cacheKey);
398
+ if (!cachedPlugin) {
399
+ const operation = Effect.gen(this, function* () {
400
+ const pluginService = yield* PluginService;
401
+ const validatedId = yield* this.validatePluginId(pluginId);
402
+ const ctor = yield* pluginService.loadPlugin(validatedId);
403
+ const instance = yield* pluginService.instantiatePlugin(pluginId, ctor);
404
+ return yield* pluginService.initializePlugin(instance, config);
405
+ }).pipe(Effect.provide(this.runtime));
406
+ cachedPlugin = Effect.cached(operation).pipe(Effect.flatten);
407
+ this.pluginCache.set(cacheKey, cachedPlugin);
408
+ }
409
+ const initialized = await this.runPromise(cachedPlugin);
410
+ const router = initialized.plugin.createRouter(initialized.context);
411
+ return {
412
+ router,
413
+ client: createRouterClient(router),
414
+ metadata: initialized.metadata,
415
+ initialized
416
+ };
417
+ }
418
+ async loadPlugin(pluginId) {
419
+ const effect = Effect.gen(function* () {
420
+ return yield* (yield* PluginService).loadPlugin(pluginId);
421
+ });
422
+ return this.runPromise(effect);
423
+ }
424
+ async instantiatePlugin(pluginId, loadedPlugin) {
425
+ const effect = Effect.gen(function* () {
426
+ return yield* (yield* PluginService).instantiatePlugin(pluginId, loadedPlugin);
427
+ });
428
+ return this.runPromise(effect);
429
+ }
430
+ async initializePlugin(instance, config) {
431
+ const effect = Effect.gen(function* () {
432
+ return yield* (yield* PluginService).initializePlugin(instance, config);
433
+ });
434
+ return this.runPromise(effect);
435
+ }
436
+ async shutdown() {
437
+ const effect = Effect.gen(function* () {
438
+ yield* (yield* PluginService).cleanup();
439
+ });
440
+ return this.runPromise(effect);
441
+ }
442
+ async evictPlugin(pluginId, config) {
443
+ const cacheKey = this.generateCacheKey(pluginId, config);
444
+ const effect = Effect.gen(this, function* () {
445
+ const pluginService = yield* PluginService;
446
+ const cachedPlugin = this.pluginCache.get(cacheKey);
447
+ if (cachedPlugin) {
448
+ this.pluginCache.delete(cacheKey);
449
+ const pluginResult = yield* cachedPlugin.pipe(Effect.catchAll(() => Effect.succeed(null)));
450
+ if (pluginResult) yield* pluginService.shutdownPlugin(pluginResult).pipe(Effect.catchAll(() => Effect.void));
451
+ }
452
+ }).pipe(Effect.catchAll(() => Effect.void));
453
+ return this.runPromise(effect);
454
+ }
455
+ };
456
+ /**
457
+ * Normalizes a remote URL to ensure it points to remoteEntry.js
458
+ * If the URL doesn't end with a file extension, appends /remoteEntry.js
459
+ */
460
+ function normalizeRemoteUrl(url) {
461
+ if (url.endsWith(".js")) return url;
462
+ return `${url.endsWith("/") ? url.slice(0, -1) : url}/remoteEntry.js`;
463
+ }
464
+ function createPluginRuntime(config) {
465
+ const secrets = config.secrets || {};
466
+ const normalizedRegistry = Object.fromEntries(Object.entries(config.registry).map(([pluginId, entry]) => [pluginId, {
467
+ ...entry,
468
+ remoteUrl: normalizeRemoteUrl(entry.remoteUrl)
469
+ }]));
470
+ const layer = PluginService.Live(normalizedRegistry, secrets);
471
+ return new PluginRuntime(ManagedRuntime.make(layer), normalizedRegistry);
472
+ }
473
+
474
+ //#endregion
475
+ export { PluginRegistryTag as a, SecretsService as c, ModuleFederationError as d, PluginLoaderService as i, PluginLifecycleService as l, createPluginRuntime as n, RegistryService as o, PluginService as r, SecretsConfigTag as s, PluginRuntime as t, ModuleFederationService as u };
476
+ //# sourceMappingURL=runtime-60AkNpI0.mjs.map