@warlock.js/core 4.5.0 → 4.6.1

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 (203) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/esm/ai/src/agent/agent.mjs +126 -7
  3. package/esm/ai/src/agent/agent.mjs.map +1 -1
  4. package/esm/ai/src/agent/signature.mjs +57 -0
  5. package/esm/ai/src/agent/signature.mjs.map +1 -0
  6. package/esm/ai/src/agent/snapshot.mjs +101 -0
  7. package/esm/ai/src/agent/snapshot.mjs.map +1 -0
  8. package/esm/ai/src/ai.mjs +37 -1
  9. package/esm/ai/src/ai.mjs.map +1 -1
  10. package/esm/ai/src/errors/agent-drift-error.mjs +31 -0
  11. package/esm/ai/src/errors/agent-drift-error.mjs.map +1 -0
  12. package/esm/ai/src/errors/index.mjs +2 -0
  13. package/esm/ai/src/errors/planner-drift-error.mjs +33 -0
  14. package/esm/ai/src/errors/planner-drift-error.mjs.map +1 -0
  15. package/esm/ai/src/image/image-cost.mjs +55 -0
  16. package/esm/ai/src/image/image-cost.mjs.map +1 -0
  17. package/esm/ai/src/image/image.mjs +112 -0
  18. package/esm/ai/src/image/image.mjs.map +1 -0
  19. package/esm/ai/src/image/index.mjs +4 -0
  20. package/esm/ai/src/index.mjs +20 -0
  21. package/esm/ai/src/planner/planner-run.mjs +161 -6
  22. package/esm/ai/src/planner/planner-run.mjs.map +1 -1
  23. package/esm/ai/src/planner/planner.mjs +25 -1
  24. package/esm/ai/src/planner/planner.mjs.map +1 -1
  25. package/esm/ai/src/planner/snapshot.mjs +95 -0
  26. package/esm/ai/src/planner/snapshot.mjs.map +1 -0
  27. package/esm/ai/src/rag/hybrid/bm25.mjs +51 -0
  28. package/esm/ai/src/rag/hybrid/bm25.mjs.map +1 -0
  29. package/esm/ai/src/rag/hybrid/hybrid-rank.mjs +29 -0
  30. package/esm/ai/src/rag/hybrid/hybrid-rank.mjs.map +1 -0
  31. package/esm/ai/src/rag/hybrid/rrf.mjs +30 -0
  32. package/esm/ai/src/rag/hybrid/rrf.mjs.map +1 -0
  33. package/esm/ai/src/rag/index.mjs +11 -0
  34. package/esm/ai/src/rag/loaders/errors.mjs +25 -0
  35. package/esm/ai/src/rag/loaders/errors.mjs.map +1 -0
  36. package/esm/ai/src/rag/loaders/index.mjs +7 -0
  37. package/esm/ai/src/rag/loaders/load-html.mjs +138 -0
  38. package/esm/ai/src/rag/loaders/load-html.mjs.map +1 -0
  39. package/esm/ai/src/rag/loaders/load-pdf.mjs +150 -0
  40. package/esm/ai/src/rag/loaders/load-pdf.mjs.map +1 -0
  41. package/esm/ai/src/rag/loaders/load-text.mjs +60 -0
  42. package/esm/ai/src/rag/loaders/load-text.mjs.map +1 -0
  43. package/esm/ai/src/rag/loaders/load-web.mjs +89 -0
  44. package/esm/ai/src/rag/loaders/load-web.mjs.map +1 -0
  45. package/esm/ai/src/rag/store/pg-vector-store.mjs +328 -0
  46. package/esm/ai/src/rag/store/pg-vector-store.mjs.map +1 -0
  47. package/esm/ai/src/rag/transforms/multi-query.mjs +41 -0
  48. package/esm/ai/src/rag/transforms/multi-query.mjs.map +1 -0
  49. package/esm/ai/src/speech/index.mjs +3 -0
  50. package/esm/ai/src/speech/speech.mjs +122 -0
  51. package/esm/ai/src/speech/speech.mjs.map +1 -0
  52. package/esm/ai/src/supervisor/entries.mjs +2 -2
  53. package/esm/ai/src/supervisor/entries.mjs.map +1 -1
  54. package/esm/ai/src/transcribe/audio-input.mjs +84 -0
  55. package/esm/ai/src/transcribe/audio-input.mjs.map +1 -0
  56. package/esm/ai/src/transcribe/index.mjs +4 -0
  57. package/esm/ai/src/transcribe/transcribe.mjs +127 -0
  58. package/esm/ai/src/transcribe/transcribe.mjs.map +1 -0
  59. package/esm/ai-openai/src/image.mjs +5 -0
  60. package/esm/ai-openai/src/index.mjs +3 -0
  61. package/esm/ai-openai/src/sdk.mjs +3 -0
  62. package/esm/ai-openai/src/speech.mjs +5 -0
  63. package/esm/ai-openai/src/transcription.mjs +6 -0
  64. package/esm/ai-openai/src/utils/index.mjs +1 -0
  65. package/esm/ai-openai/src/utils/to-openai-messages.mjs +3 -0
  66. package/esm/bootstrap.d.mts.map +1 -1
  67. package/esm/bootstrap.mjs +3 -1
  68. package/esm/bootstrap.mjs.map +1 -1
  69. package/esm/cli/commands/doctor/checks/config.check.mjs +42 -0
  70. package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -0
  71. package/esm/cli/commands/doctor/checks/connectors.check.mjs +28 -0
  72. package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -0
  73. package/esm/cli/commands/doctor/checks/health.check.mjs +35 -0
  74. package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -0
  75. package/esm/cli/commands/doctor/checks/index.mjs +25 -0
  76. package/esm/cli/commands/doctor/checks/index.mjs.map +1 -0
  77. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +90 -0
  78. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -0
  79. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +69 -0
  80. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -0
  81. package/esm/cli/commands/doctor/checks/routes.check.mjs +30 -0
  82. package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -0
  83. package/esm/cli/commands/doctor/doctor-command.action.mjs +28 -0
  84. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -0
  85. package/esm/cli/commands/doctor/format-report.mjs +44 -0
  86. package/esm/cli/commands/doctor/format-report.mjs.map +1 -0
  87. package/esm/cli/commands/doctor/run-checks.mjs +50 -0
  88. package/esm/cli/commands/doctor/run-checks.mjs.map +1 -0
  89. package/esm/cli/commands/doctor.command.mjs +29 -0
  90. package/esm/cli/commands/doctor.command.mjs.map +1 -0
  91. package/esm/cli/commands/generate/templates/stubs.mjs +6 -8
  92. package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
  93. package/esm/cli/commands/routes/format-routes-table.mjs +129 -0
  94. package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -0
  95. package/esm/cli/commands/routes/route-row.mjs +92 -0
  96. package/esm/cli/commands/routes/route-row.mjs.map +1 -0
  97. package/esm/cli/commands/routes/routes-command.action.mjs +43 -0
  98. package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -0
  99. package/esm/cli/commands/routes.command.mjs +51 -0
  100. package/esm/cli/commands/routes.command.mjs.map +1 -0
  101. package/esm/cli/commands/seed.command.mjs +5 -0
  102. package/esm/cli/commands/seed.command.mjs.map +1 -1
  103. package/esm/cli/framework-cli-commands.mjs +4 -0
  104. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  105. package/esm/config/config-getter.mjs +5 -5
  106. package/esm/config/config-getter.mjs.map +1 -1
  107. package/esm/config/config-loader.mjs +2 -2
  108. package/esm/config/config-loader.mjs.map +1 -1
  109. package/esm/connectors/access-connector.mjs +2 -2
  110. package/esm/connectors/access-connector.mjs.map +1 -1
  111. package/esm/connectors/ai-connector.mjs +2 -2
  112. package/esm/connectors/ai-connector.mjs.map +1 -1
  113. package/esm/connectors/cache-connector.mjs +2 -2
  114. package/esm/connectors/cache-connector.mjs.map +1 -1
  115. package/esm/connectors/database-connector.mjs +2 -2
  116. package/esm/connectors/database-connector.mjs.map +1 -1
  117. package/esm/connectors/herald-connector.mjs +2 -2
  118. package/esm/connectors/herald-connector.mjs.map +1 -1
  119. package/esm/connectors/http-connector.d.mts.map +1 -1
  120. package/esm/connectors/http-connector.mjs +9 -7
  121. package/esm/connectors/http-connector.mjs.map +1 -1
  122. package/esm/connectors/logger-connector.mjs +2 -2
  123. package/esm/connectors/logger-connector.mjs.map +1 -1
  124. package/esm/connectors/mail-connector.mjs +2 -2
  125. package/esm/connectors/mail-connector.mjs.map +1 -1
  126. package/esm/connectors/notifications-connector.mjs +2 -2
  127. package/esm/connectors/notifications-connector.mjs.map +1 -1
  128. package/esm/connectors/socket-connector.mjs +3 -3
  129. package/esm/connectors/socket-connector.mjs.map +1 -1
  130. package/esm/database/index.d.mts +2 -1
  131. package/esm/database/index.mjs +1 -0
  132. package/esm/database/seed-command-action.mjs +44 -4
  133. package/esm/database/seed-command-action.mjs.map +1 -1
  134. package/esm/database/seeds/seed-records-table-migration.mjs +36 -0
  135. package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -0
  136. package/esm/database/seeds/seeder.d.mts +22 -5
  137. package/esm/database/seeds/seeder.d.mts.map +1 -1
  138. package/esm/database/seeds/seeder.errors.d.mts +22 -0
  139. package/esm/database/seeds/seeder.errors.d.mts.map +1 -0
  140. package/esm/database/seeds/seeder.errors.mjs +29 -0
  141. package/esm/database/seeds/seeder.errors.mjs.map +1 -0
  142. package/esm/database/seeds/seeder.mjs.map +1 -1
  143. package/esm/database/seeds/seeders.manager.mjs +90 -11
  144. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  145. package/esm/database/seeds/types.d.mts +117 -1
  146. package/esm/database/seeds/types.d.mts.map +1 -1
  147. package/esm/database/seeds/utils.mjs +6 -1
  148. package/esm/database/seeds/utils.mjs.map +1 -1
  149. package/esm/dev-server/module-loader.d.mts +12 -0
  150. package/esm/dev-server/module-loader.d.mts.map +1 -1
  151. package/esm/dev-server/module-loader.mjs +30 -2
  152. package/esm/dev-server/module-loader.mjs.map +1 -1
  153. package/esm/http/config.mjs +2 -2
  154. package/esm/http/config.mjs.map +1 -1
  155. package/esm/http/createHttpApplication.mjs +2 -2
  156. package/esm/http/createHttpApplication.mjs.map +1 -1
  157. package/esm/http/health.d.mts +14 -0
  158. package/esm/http/health.d.mts.map +1 -1
  159. package/esm/http/health.mjs +16 -0
  160. package/esm/http/health.mjs.map +1 -1
  161. package/esm/http/middleware/idempotency.middleware.mjs +5 -5
  162. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  163. package/esm/http/middleware/inject-request-context.mjs +2 -2
  164. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  165. package/esm/http/middleware/maintenance.middleware.mjs +4 -4
  166. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  167. package/esm/http/plugins.mjs +9 -9
  168. package/esm/http/plugins.mjs.map +1 -1
  169. package/esm/http/response.mjs +5 -5
  170. package/esm/http/response.mjs.map +1 -1
  171. package/esm/http/server.mjs +4 -4
  172. package/esm/http/server.mjs.map +1 -1
  173. package/esm/index.d.mts +4 -3
  174. package/esm/index.mjs +2 -1
  175. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +28 -1
  176. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  177. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +39 -0
  178. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
  179. package/esm/repositories/contracts/index.d.mts +1 -1
  180. package/esm/repositories/contracts/query-builder.contract.d.mts +87 -1
  181. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  182. package/esm/repositories/index.d.mts +1 -1
  183. package/esm/repositories/repository.manager.d.mts +99 -1
  184. package/esm/repositories/repository.manager.d.mts.map +1 -1
  185. package/esm/repositories/repository.manager.mjs +128 -0
  186. package/esm/repositories/repository.manager.mjs.map +1 -1
  187. package/esm/router/router.d.mts +9 -0
  188. package/esm/router/router.d.mts.map +1 -1
  189. package/esm/router/router.mjs +21 -1
  190. package/esm/router/router.mjs.map +1 -1
  191. package/esm/utils/paths.mjs +2 -2
  192. package/esm/utils/paths.mjs.map +1 -1
  193. package/esm/validation/validateAll.mjs +2 -2
  194. package/esm/validation/validateAll.mjs.map +1 -1
  195. package/llms-full.txt +427 -45
  196. package/llms.txt +4 -2
  197. package/package.json +9 -9
  198. package/skills/README.md +65 -0
  199. package/skills/health-checks/SKILL.md +13 -0
  200. package/skills/use-repository/SKILL.md +38 -1
  201. package/skills/warlock-doctor/SKILL.md +135 -0
  202. package/skills/warlock-routes/SKILL.md +91 -0
  203. package/skills/write-seeder/SKILL.md +143 -45
@@ -1,5 +1,5 @@
1
1
  import { v } from "@warlock.js/seal";
2
- import baseConfig from "@mongez/config";
2
+ import config from "@mongez/config";
3
3
  import { log } from "@warlock.js/logger";
4
4
  import { merge } from "@mongez/reinforcements";
5
5
 
@@ -40,7 +40,7 @@ async function validateAll(validation, request, response) {
40
40
  if (validation.validate) {
41
41
  const result = await validation.validate(request, response);
42
42
  if (result) {
43
- if (!response.statusCode) response.setStatusCode(baseConfig.get("validation.responseStatus", 400));
43
+ if (!response.statusCode) response.setStatusCode(config.get("validation.responseStatus", 400));
44
44
  log.info("validation", "failed", "Validation failed");
45
45
  return result;
46
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validateAll.mjs","names":["config"],"sources":["../../../../../../../@warlock.js/core/src/validation/validateAll.ts"],"sourcesContent":["import config from \"@mongez/config\";\nimport { merge } from \"@mongez/reinforcements\";\nimport { log } from \"@warlock.js/logger\";\nimport { v } from \"@warlock.js/seal\";\nimport type { Request, Response } from \"../http\";\nimport type { RequestHandlerValidation, Route } from \"../router\";\n\nfunction resolveDataToParse(validating: RequestHandlerValidation[\"validating\"], request: Request) {\n if (!validating || validating.length === 0) return request.allExceptParams();\n\n let data: any = {};\n\n for (const validatingType of validating) {\n if (validatingType === \"body\") {\n data = merge(data, request.body);\n }\n\n if (validatingType === \"query\") {\n data = merge(data, request.query);\n }\n\n if (validatingType === \"params\") {\n data = merge(data, request.params);\n }\n\n if (validatingType === \"headers\") {\n data = merge(data, request.headers);\n }\n }\n\n return data;\n}\n\n/**\n * Validate the request route\n */\nexport async function validateAll(\n validation: Route[\"handler\"][\"validation\"],\n request: Request,\n response: Response,\n) {\n if (!validation) return;\n\n log.info(\"validation\", \"started\", \"Start validating the request\");\n\n if (validation.schema) {\n log.info(\"validation\", \"schema\", \"Validating request schema\");\n try {\n const data = resolveDataToParse(validation.validating, request);\n const result = await v.validate(validation.schema, data);\n\n if (result.data && result.isValid) {\n request.setValidatedData(result.data);\n }\n\n if (!result.isValid) {\n log.warn(\"validation\", \"schema\", \"Schema Validation failed\");\n return response.failedSchema(result);\n }\n\n log.success(\"validation\", \"schema\", \"Schema Validation passed\");\n } catch (error) {\n log.warn(\"app.validation\", \"error\", error);\n throw error;\n }\n }\n\n if (validation.validate) {\n const result = await validation.validate(request, response);\n\n // if there is a result, it means it failed\n if (result) {\n // check if there is no response status code, then set it to config value or 400 as default\n if (!response.statusCode) {\n response.setStatusCode(config.get(\"validation.responseStatus\", 400));\n }\n\n log.info(\"validation\", \"failed\", \"Validation failed\");\n\n return result;\n }\n\n log.info(\"validation\", \"passed\", \"Validation passed\");\n }\n}\n"],"mappings":";;;;;;AAOA,SAAS,mBAAmB,YAAoD,SAAkB;CAChG,IAAI,CAAC,cAAc,WAAW,WAAW,GAAG,OAAO,QAAQ,gBAAgB;CAE3E,IAAI,OAAY,CAAC;CAEjB,KAAK,MAAM,kBAAkB,YAAY;EACvC,IAAI,mBAAmB,QACrB,OAAO,MAAM,MAAM,QAAQ,IAAI;EAGjC,IAAI,mBAAmB,SACrB,OAAO,MAAM,MAAM,QAAQ,KAAK;EAGlC,IAAI,mBAAmB,UACrB,OAAO,MAAM,MAAM,QAAQ,MAAM;EAGnC,IAAI,mBAAmB,WACrB,OAAO,MAAM,MAAM,QAAQ,OAAO;CAEtC;CAEA,OAAO;AACT;;;;AAKA,eAAsB,YACpB,YACA,SACA,UACA;CACA,IAAI,CAAC,YAAY;CAEjB,IAAI,KAAK,cAAc,WAAW,8BAA8B;CAEhE,IAAI,WAAW,QAAQ;EACrB,IAAI,KAAK,cAAc,UAAU,2BAA2B;EAC5D,IAAI;GACF,MAAM,OAAO,mBAAmB,WAAW,YAAY,OAAO;GAC9D,MAAM,SAAS,MAAM,EAAE,SAAS,WAAW,QAAQ,IAAI;GAEvD,IAAI,OAAO,QAAQ,OAAO,SACxB,QAAQ,iBAAiB,OAAO,IAAI;GAGtC,IAAI,CAAC,OAAO,SAAS;IACnB,IAAI,KAAK,cAAc,UAAU,0BAA0B;IAC3D,OAAO,SAAS,aAAa,MAAM;GACrC;GAEA,IAAI,QAAQ,cAAc,UAAU,0BAA0B;EAChE,SAAS,OAAO;GACd,IAAI,KAAK,kBAAkB,SAAS,KAAK;GACzC,MAAM;EACR;CACF;CAEA,IAAI,WAAW,UAAU;EACvB,MAAM,SAAS,MAAM,WAAW,SAAS,SAAS,QAAQ;EAG1D,IAAI,QAAQ;GAEV,IAAI,CAAC,SAAS,YACZ,SAAS,cAAcA,WAAO,IAAI,6BAA6B,GAAG,CAAC;GAGrE,IAAI,KAAK,cAAc,UAAU,mBAAmB;GAEpD,OAAO;EACT;EAEA,IAAI,KAAK,cAAc,UAAU,mBAAmB;CACtD;AACF"}
1
+ {"version":3,"file":"validateAll.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/validation/validateAll.ts"],"sourcesContent":["import config from \"@mongez/config\";\nimport { merge } from \"@mongez/reinforcements\";\nimport { log } from \"@warlock.js/logger\";\nimport { v } from \"@warlock.js/seal\";\nimport type { Request, Response } from \"../http\";\nimport type { RequestHandlerValidation, Route } from \"../router\";\n\nfunction resolveDataToParse(validating: RequestHandlerValidation[\"validating\"], request: Request) {\n if (!validating || validating.length === 0) return request.allExceptParams();\n\n let data: any = {};\n\n for (const validatingType of validating) {\n if (validatingType === \"body\") {\n data = merge(data, request.body);\n }\n\n if (validatingType === \"query\") {\n data = merge(data, request.query);\n }\n\n if (validatingType === \"params\") {\n data = merge(data, request.params);\n }\n\n if (validatingType === \"headers\") {\n data = merge(data, request.headers);\n }\n }\n\n return data;\n}\n\n/**\n * Validate the request route\n */\nexport async function validateAll(\n validation: Route[\"handler\"][\"validation\"],\n request: Request,\n response: Response,\n) {\n if (!validation) return;\n\n log.info(\"validation\", \"started\", \"Start validating the request\");\n\n if (validation.schema) {\n log.info(\"validation\", \"schema\", \"Validating request schema\");\n try {\n const data = resolveDataToParse(validation.validating, request);\n const result = await v.validate(validation.schema, data);\n\n if (result.data && result.isValid) {\n request.setValidatedData(result.data);\n }\n\n if (!result.isValid) {\n log.warn(\"validation\", \"schema\", \"Schema Validation failed\");\n return response.failedSchema(result);\n }\n\n log.success(\"validation\", \"schema\", \"Schema Validation passed\");\n } catch (error) {\n log.warn(\"app.validation\", \"error\", error);\n throw error;\n }\n }\n\n if (validation.validate) {\n const result = await validation.validate(request, response);\n\n // if there is a result, it means it failed\n if (result) {\n // check if there is no response status code, then set it to config value or 400 as default\n if (!response.statusCode) {\n response.setStatusCode(config.get(\"validation.responseStatus\", 400));\n }\n\n log.info(\"validation\", \"failed\", \"Validation failed\");\n\n return result;\n }\n\n log.info(\"validation\", \"passed\", \"Validation passed\");\n }\n}\n"],"mappings":";;;;;;AAOA,SAAS,mBAAmB,YAAoD,SAAkB;CAChG,IAAI,CAAC,cAAc,WAAW,WAAW,GAAG,OAAO,QAAQ,gBAAgB;CAE3E,IAAI,OAAY,CAAC;CAEjB,KAAK,MAAM,kBAAkB,YAAY;EACvC,IAAI,mBAAmB,QACrB,OAAO,MAAM,MAAM,QAAQ,IAAI;EAGjC,IAAI,mBAAmB,SACrB,OAAO,MAAM,MAAM,QAAQ,KAAK;EAGlC,IAAI,mBAAmB,UACrB,OAAO,MAAM,MAAM,QAAQ,MAAM;EAGnC,IAAI,mBAAmB,WACrB,OAAO,MAAM,MAAM,QAAQ,OAAO;CAEtC;CAEA,OAAO;AACT;;;;AAKA,eAAsB,YACpB,YACA,SACA,UACA;CACA,IAAI,CAAC,YAAY;CAEjB,IAAI,KAAK,cAAc,WAAW,8BAA8B;CAEhE,IAAI,WAAW,QAAQ;EACrB,IAAI,KAAK,cAAc,UAAU,2BAA2B;EAC5D,IAAI;GACF,MAAM,OAAO,mBAAmB,WAAW,YAAY,OAAO;GAC9D,MAAM,SAAS,MAAM,EAAE,SAAS,WAAW,QAAQ,IAAI;GAEvD,IAAI,OAAO,QAAQ,OAAO,SACxB,QAAQ,iBAAiB,OAAO,IAAI;GAGtC,IAAI,CAAC,OAAO,SAAS;IACnB,IAAI,KAAK,cAAc,UAAU,0BAA0B;IAC3D,OAAO,SAAS,aAAa,MAAM;GACrC;GAEA,IAAI,QAAQ,cAAc,UAAU,0BAA0B;EAChE,SAAS,OAAO;GACd,IAAI,KAAK,kBAAkB,SAAS,KAAK;GACzC,MAAM;EACR;CACF;CAEA,IAAI,WAAW,UAAU;EACvB,MAAM,SAAS,MAAM,WAAW,SAAS,SAAS,QAAQ;EAG1D,IAAI,QAAQ;GAEV,IAAI,CAAC,SAAS,YACZ,SAAS,cAAc,OAAO,IAAI,6BAA6B,GAAG,CAAC;GAGrE,IAAI,KAAK,cAAc,UAAU,mBAAmB;GAEpD,OAAO;EACT;EAEA,IAAI,KAAK,cAAc,UAAU,mBAAmB;CACtD;AACF"}