@happyvertical/smrt-core 0.38.2 → 0.38.3

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 (128) hide show
  1. package/AGENTS.md +11 -2
  2. package/dist/change-feed.d.ts +19 -10
  3. package/dist/change-feed.d.ts.map +1 -1
  4. package/dist/change-feed.js +43 -13
  5. package/dist/change-feed.js.map +1 -1
  6. package/dist/change-signals.d.ts +83 -0
  7. package/dist/change-signals.d.ts.map +1 -0
  8. package/dist/change-signals.js +272 -0
  9. package/dist/change-signals.js.map +1 -0
  10. package/dist/collection-cache.d.ts +21 -0
  11. package/dist/collection-cache.d.ts.map +1 -1
  12. package/dist/collection-cache.js +0 -0
  13. package/dist/collection-cache.js.map +1 -1
  14. package/dist/config.d.ts +1 -1
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/decorators/index.d.ts +8 -0
  18. package/dist/decorators/index.d.ts.map +1 -1
  19. package/dist/decorators/index.js.map +1 -1
  20. package/dist/errors.js +2 -1
  21. package/dist/errors.js.map +1 -1
  22. package/dist/generators/changes-route.d.ts +15 -27
  23. package/dist/generators/changes-route.d.ts.map +1 -1
  24. package/dist/generators/changes-route.js +17 -7
  25. package/dist/generators/changes-route.js.map +1 -1
  26. package/dist/generators/cli.d.ts +3 -0
  27. package/dist/generators/cli.d.ts.map +1 -1
  28. package/dist/generators/cli.js +7 -4
  29. package/dist/generators/cli.js.map +1 -1
  30. package/dist/generators/conditional-get.d.ts +17 -6
  31. package/dist/generators/conditional-get.d.ts.map +1 -1
  32. package/dist/generators/conditional-get.js +19 -13
  33. package/dist/generators/conditional-get.js.map +1 -1
  34. package/dist/generators/events-route.d.ts +72 -0
  35. package/dist/generators/events-route.d.ts.map +1 -0
  36. package/dist/generators/events-route.js +234 -0
  37. package/dist/generators/events-route.js.map +1 -0
  38. package/dist/generators/index.d.ts +1 -0
  39. package/dist/generators/index.d.ts.map +1 -1
  40. package/dist/generators/index.js +2 -1
  41. package/dist/generators/mcp-runtime-template.d.ts.map +1 -1
  42. package/dist/generators/mcp-runtime-template.js +11 -5
  43. package/dist/generators/mcp-runtime-template.js.map +1 -1
  44. package/dist/generators/mcp.d.ts +3 -0
  45. package/dist/generators/mcp.d.ts.map +1 -1
  46. package/dist/generators/mcp.js +18 -9
  47. package/dist/generators/mcp.js.map +1 -1
  48. package/dist/generators/rest.d.ts +7 -1
  49. package/dist/generators/rest.d.ts.map +1 -1
  50. package/dist/generators/rest.js +77 -13
  51. package/dist/generators/rest.js.map +1 -1
  52. package/dist/generators.js +2 -1
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -1
  56. package/dist/manifest/generator.js.map +1 -1
  57. package/dist/manifest/manifest-loader.js.map +1 -1
  58. package/dist/manifest/static-manifest.d.ts.map +1 -1
  59. package/dist/manifest/static-manifest.js +7 -3
  60. package/dist/manifest/static-manifest.js.map +1 -1
  61. package/dist/manifest/store.js +1 -1
  62. package/dist/manifest/store.js.map +1 -1
  63. package/dist/manifest/test-manifest-stub.d.ts.map +1 -1
  64. package/dist/manifest/test-manifest-stub.js +1050 -124
  65. package/dist/manifest/test-manifest-stub.js.map +1 -1
  66. package/dist/manifest.json +9 -3
  67. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts +1 -0
  68. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts.map +1 -1
  69. package/dist/mcp-advisor/types.d.ts +3 -0
  70. package/dist/mcp-advisor/types.d.ts.map +1 -1
  71. package/dist/migrations/tracker.js +5 -4
  72. package/dist/migrations/tracker.js.map +1 -1
  73. package/dist/migrations/types.d.ts +1 -1
  74. package/dist/migrations/types.d.ts.map +1 -1
  75. package/dist/object.d.ts +17 -8
  76. package/dist/object.d.ts.map +1 -1
  77. package/dist/object.js +42 -26
  78. package/dist/object.js.map +1 -1
  79. package/dist/registry/class-registration.d.ts.map +1 -1
  80. package/dist/registry/class-registration.js +12 -0
  81. package/dist/registry/class-registration.js.map +1 -1
  82. package/dist/registry/shared-state.d.ts +2 -1
  83. package/dist/registry/shared-state.d.ts.map +1 -1
  84. package/dist/registry/shared-state.js.map +1 -1
  85. package/dist/registry/types.d.ts.map +1 -1
  86. package/dist/registry.d.ts.map +1 -1
  87. package/dist/registry.js +1 -1
  88. package/dist/registry.js.map +1 -1
  89. package/dist/runtime/client.d.ts.map +1 -1
  90. package/dist/runtime/client.js.map +1 -1
  91. package/dist/scanner/manifest-generator.js.map +1 -1
  92. package/dist/scanner/types.d.ts +7 -0
  93. package/dist/scanner/types.d.ts.map +1 -1
  94. package/dist/schema/ddl/base-strategy.js +1 -1
  95. package/dist/schema/ddl/base-strategy.js.map +1 -1
  96. package/dist/scripts/migrate-datetime-to-timestamp.ts +1 -1
  97. package/dist/signals/sanitizer.d.ts.map +1 -1
  98. package/dist/signals/sanitizer.js.map +1 -1
  99. package/dist/smrt-knowledge.json +8 -8
  100. package/dist/testing/index.d.ts +1 -0
  101. package/dist/testing/index.d.ts.map +1 -1
  102. package/dist/testing/index.js +2 -1
  103. package/dist/testing/notifications-stub.d.ts +24 -0
  104. package/dist/testing/notifications-stub.d.ts.map +1 -0
  105. package/dist/testing/notifications-stub.js +62 -0
  106. package/dist/testing/notifications-stub.js.map +1 -0
  107. package/dist/testing.js +2 -1
  108. package/dist/tools/tool-generator.js +1 -1
  109. package/dist/tools/tool-generator.js.map +1 -1
  110. package/dist/vite-plugin/changes-route.d.ts +14 -0
  111. package/dist/vite-plugin/changes-route.d.ts.map +1 -1
  112. package/dist/vite-plugin/changes-route.js +2 -2
  113. package/dist/vite-plugin/changes-route.js.map +1 -1
  114. package/dist/vite-plugin/events-route.d.ts +9 -0
  115. package/dist/vite-plugin/events-route.d.ts.map +1 -0
  116. package/dist/vite-plugin/events-route.js +155 -0
  117. package/dist/vite-plugin/events-route.js.map +1 -0
  118. package/dist/vite-plugin/index.d.ts +8 -0
  119. package/dist/vite-plugin/index.d.ts.map +1 -1
  120. package/dist/vite-plugin/index.js +8 -2
  121. package/dist/vite-plugin/index.js.map +1 -1
  122. package/dist/vite-plugin/sveltekit-generator.d.ts +8 -0
  123. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -1
  124. package/dist/vite-plugin/sveltekit-generator.js +193 -31
  125. package/dist/vite-plugin/sveltekit-generator.js.map +1 -1
  126. package/dist/vite-plugin/web-collections.js +1 -1
  127. package/dist/vite-plugin/web-collections.js.map +1 -1
  128. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,OAAO,GAAE,iBAAsB;IAS3C;;OAEG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC;IAyDnB;;OAEG;IACG,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC;IAenB;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1D;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3D;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAExE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,OAAO,GAAE,iBAAsB;IAS3C;;OAEG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC;IAyDnB;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAe3E;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1D;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzD;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3D;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAExE"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":[],"sources":["../../src/runtime/client.ts"],"sourcesContent":["/**\n * Runtime client implementation for SMRT auto-generated services\n */\n\nimport type { SmrtClientOptions } from './types';\n\nexport class SmrtClient {\n private options: Required<SmrtClientOptions>;\n\n constructor(options: SmrtClientOptions = {}) {\n this.options = {\n baseUrl: 'http://localhost:3000',\n basePath: '/api/v1',\n fetch: globalThis.fetch,\n ...options,\n } as Required<SmrtClientOptions>;\n }\n\n /**\n * Make an authenticated request\n */\n async request(\n method: string,\n path: string,\n data?: unknown,\n ): Promise<unknown> {\n const url = `${this.options.baseUrl}${this.options.basePath}${path}`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add authentication headers\n if (this.options.auth) {\n switch (this.options.auth.type) {\n case 'bearer':\n if (this.options.auth.token) {\n headers.Authorization = `Bearer ${this.options.auth.token}`;\n }\n break;\n case 'basic':\n if (this.options.auth.username && this.options.auth.password) {\n const credentials = btoa(\n `${this.options.auth.username}:${this.options.auth.password}`,\n );\n headers.Authorization = `Basic ${credentials}`;\n }\n break;\n }\n }\n\n const requestOptions: RequestInit = {\n method,\n headers,\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n requestOptions.body = JSON.stringify(data);\n }\n\n const response = await this.options.fetch(url, requestOptions);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Handle empty responses\n if (\n response.status === 204 ||\n response.headers.get('content-length') === '0'\n ) {\n return null;\n }\n\n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json')) {\n return response.json();\n }\n\n return response.text();\n }\n\n /**\n * GET request\n */\n async get(\n path: string,\n params?: Record<string, unknown>,\n ): Promise<unknown> {\n let url = path;\n if (params && Object.keys(params).length > 0) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n url += `?${searchParams.toString()}`;\n }\n\n return this.request('GET', url);\n }\n\n /**\n * POST request\n */\n async post(path: string, data?: unknown): Promise<unknown> {\n return this.request('POST', path, data);\n }\n\n /**\n * PUT request\n */\n async put(path: string, data?: unknown): Promise<unknown> {\n return this.request('PUT', path, data);\n }\n\n /**\n * PATCH request\n */\n async patch(path: string, data?: unknown): Promise<unknown> {\n return this.request('PATCH', path, data);\n }\n\n /**\n * DELETE request\n */\n async delete(path: string): Promise<unknown> {\n return this.request('DELETE', path);\n }\n}\n\n/**\n * Create a new SMRT client instance\n */\nexport function createSmrtClient(options?: SmrtClientOptions): SmrtClient {\n return new SmrtClient(options);\n}\n"],"mappings":";AAMA,IAAa,aAAb,MAAwB;CACtB;CAEA,YAAY,UAA6B,CAAC,GAAG;EAC3C,KAAK,UAAU;GACb,SAAS;GACT,UAAU;GACV,OAAO,WAAW;GAClB,GAAG;EACL;CACF;;;;CAKA,MAAM,QACJ,QACA,MACA,MACkB;EAClB,MAAM,MAAM,GAAG,KAAK,QAAQ,UAAU,KAAK,QAAQ,WAAW;EAE9D,MAAM,UAAkC,EACtC,gBAAgB,mBAClB;EAGA,IAAI,KAAK,QAAQ,MACf,QAAQ,KAAK,QAAQ,KAAK,MAA1B;GACE,KAAK;IACH,IAAI,KAAK,QAAQ,KAAK,OACpB,QAAQ,gBAAgB,UAAU,KAAK,QAAQ,KAAK;IAEtD;GACF,KAAK;IACH,IAAI,KAAK,QAAQ,KAAK,YAAY,KAAK,QAAQ,KAAK,UAIlD,QAAQ,gBAAgB,SAHJ,KAClB,GAAG,KAAK,QAAQ,KAAK,SAAS,GAAG,KAAK,QAAQ,KAAK,UAEpB;IAEnC;EACJ;EAGF,MAAM,iBAA8B;GAClC;GACA;EACF;EAEA,IAAI,SAAS,WAAW,UAAU,WAAW,SAAS,WAAW,UAC/D,eAAe,OAAO,KAAK,UAAU,IAAI;EAG3C,MAAM,WAAW,MAAM,KAAK,QAAQ,MAAM,KAAK,cAAc;EAE7D,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,YAAY;EAInE,IACE,SAAS,WAAW,OACpB,SAAS,QAAQ,IAAI,gBAAgB,MAAM,KAE3C,OAAO;EAIT,KADoB,SAAS,QAAQ,IAAI,cAAc,KAAK,GAAA,CAC5C,SAAS,kBAAkB,GACzC,OAAO,SAAS,KAAK;EAGvB,OAAO,SAAS,KAAK;CACvB;;;;CAKA,MAAM,IACJ,MACA,QACkB;EAClB,IAAI,MAAM;EACV,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG;GAC5C,MAAM,eAAe,IAAI,gBAAgB;GACzC,OAAO,QAAQ,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;IAC/C,IAAI,UAAU,KAAA,KAAa,UAAU,MACnC,aAAa,OAAO,KAAK,OAAO,KAAK,CAAC;GAE1C,CAAC;GACD,OAAO,IAAI,aAAa,SAAS;EACnC;EAEA,OAAO,KAAK,QAAQ,OAAO,GAAG;CAChC;;;;CAKA,MAAM,KAAK,MAAc,MAAkC;EACzD,OAAO,KAAK,QAAQ,QAAQ,MAAM,IAAI;CACxC;;;;CAKA,MAAM,IAAI,MAAc,MAAkC;EACxD,OAAO,KAAK,QAAQ,OAAO,MAAM,IAAI;CACvC;;;;CAKA,MAAM,MAAM,MAAc,MAAkC;EAC1D,OAAO,KAAK,QAAQ,SAAS,MAAM,IAAI;CACzC;;;;CAKA,MAAM,OAAO,MAAgC;EAC3C,OAAO,KAAK,QAAQ,UAAU,IAAI;CACpC;AACF;;;;AAKA,SAAgB,iBAAiB,SAAyC;CACxE,OAAO,IAAI,WAAW,OAAO;AAC/B"}
1
+ {"version":3,"file":"client.js","names":[],"sources":["../../src/runtime/client.ts"],"sourcesContent":["/**\n * Runtime client implementation for SMRT auto-generated services\n */\n\nimport type { SmrtClientOptions } from './types';\n\nexport class SmrtClient {\n private options: Required<SmrtClientOptions>;\n\n constructor(options: SmrtClientOptions = {}) {\n this.options = {\n baseUrl: 'http://localhost:3000',\n basePath: '/api/v1',\n fetch: globalThis.fetch,\n ...options,\n } as Required<SmrtClientOptions>;\n }\n\n /**\n * Make an authenticated request\n */\n async request(\n method: string,\n path: string,\n data?: unknown,\n ): Promise<unknown> {\n const url = `${this.options.baseUrl}${this.options.basePath}${path}`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add authentication headers\n if (this.options.auth) {\n switch (this.options.auth.type) {\n case 'bearer':\n if (this.options.auth.token) {\n headers.Authorization = `Bearer ${this.options.auth.token}`;\n }\n break;\n case 'basic':\n if (this.options.auth.username && this.options.auth.password) {\n const credentials = btoa(\n `${this.options.auth.username}:${this.options.auth.password}`,\n );\n headers.Authorization = `Basic ${credentials}`;\n }\n break;\n }\n }\n\n const requestOptions: RequestInit = {\n method,\n headers,\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n requestOptions.body = JSON.stringify(data);\n }\n\n const response = await this.options.fetch(url, requestOptions);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Handle empty responses\n if (\n response.status === 204 ||\n response.headers.get('content-length') === '0'\n ) {\n return null;\n }\n\n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json')) {\n return response.json();\n }\n\n return response.text();\n }\n\n /**\n * GET request\n */\n async get(path: string, params?: Record<string, unknown>): Promise<unknown> {\n let url = path;\n if (params && Object.keys(params).length > 0) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n url += `?${searchParams.toString()}`;\n }\n\n return this.request('GET', url);\n }\n\n /**\n * POST request\n */\n async post(path: string, data?: unknown): Promise<unknown> {\n return this.request('POST', path, data);\n }\n\n /**\n * PUT request\n */\n async put(path: string, data?: unknown): Promise<unknown> {\n return this.request('PUT', path, data);\n }\n\n /**\n * PATCH request\n */\n async patch(path: string, data?: unknown): Promise<unknown> {\n return this.request('PATCH', path, data);\n }\n\n /**\n * DELETE request\n */\n async delete(path: string): Promise<unknown> {\n return this.request('DELETE', path);\n }\n}\n\n/**\n * Create a new SMRT client instance\n */\nexport function createSmrtClient(options?: SmrtClientOptions): SmrtClient {\n return new SmrtClient(options);\n}\n"],"mappings":";AAMA,IAAa,aAAb,MAAwB;CACtB;CAEA,YAAY,UAA6B,CAAC,GAAG;EAC3C,KAAK,UAAU;GACb,SAAS;GACT,UAAU;GACV,OAAO,WAAW;GAClB,GAAG;EACL;CACF;;;;CAKA,MAAM,QACJ,QACA,MACA,MACkB;EAClB,MAAM,MAAM,GAAG,KAAK,QAAQ,UAAU,KAAK,QAAQ,WAAW;EAE9D,MAAM,UAAkC,EACtC,gBAAgB,mBAClB;EAGA,IAAI,KAAK,QAAQ,MACf,QAAQ,KAAK,QAAQ,KAAK,MAA1B;GACE,KAAK;IACH,IAAI,KAAK,QAAQ,KAAK,OACpB,QAAQ,gBAAgB,UAAU,KAAK,QAAQ,KAAK;IAEtD;GACF,KAAK;IACH,IAAI,KAAK,QAAQ,KAAK,YAAY,KAAK,QAAQ,KAAK,UAIlD,QAAQ,gBAAgB,SAHJ,KAClB,GAAG,KAAK,QAAQ,KAAK,SAAS,GAAG,KAAK,QAAQ,KAAK,UAEpB;IAEnC;EACJ;EAGF,MAAM,iBAA8B;GAClC;GACA;EACF;EAEA,IAAI,SAAS,WAAW,UAAU,WAAW,SAAS,WAAW,UAC/D,eAAe,OAAO,KAAK,UAAU,IAAI;EAG3C,MAAM,WAAW,MAAM,KAAK,QAAQ,MAAM,KAAK,cAAc;EAE7D,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,MAAM,QAAQ,SAAS,OAAO,IAAI,SAAS,YAAY;EAInE,IACE,SAAS,WAAW,OACpB,SAAS,QAAQ,IAAI,gBAAgB,MAAM,KAE3C,OAAO;EAIT,KADoB,SAAS,QAAQ,IAAI,cAAc,KAAK,GAAA,CAC5C,SAAS,kBAAkB,GACzC,OAAO,SAAS,KAAK;EAGvB,OAAO,SAAS,KAAK;CACvB;;;;CAKA,MAAM,IAAI,MAAc,QAAoD;EAC1E,IAAI,MAAM;EACV,IAAI,UAAU,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,GAAG;GAC5C,MAAM,eAAe,IAAI,gBAAgB;GACzC,OAAO,QAAQ,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;IAC/C,IAAI,UAAU,KAAA,KAAa,UAAU,MACnC,aAAa,OAAO,KAAK,OAAO,KAAK,CAAC;GAE1C,CAAC;GACD,OAAO,IAAI,aAAa,SAAS;EACnC;EAEA,OAAO,KAAK,QAAQ,OAAO,GAAG;CAChC;;;;CAKA,MAAM,KAAK,MAAc,MAAkC;EACzD,OAAO,KAAK,QAAQ,QAAQ,MAAM,IAAI;CACxC;;;;CAKA,MAAM,IAAI,MAAc,MAAkC;EACxD,OAAO,KAAK,QAAQ,OAAO,MAAM,IAAI;CACvC;;;;CAKA,MAAM,MAAM,MAAc,MAAkC;EAC1D,OAAO,KAAK,QAAQ,SAAS,MAAM,IAAI;CACzC;;;;CAKA,MAAM,OAAO,MAAgC;EAC3C,OAAO,KAAK,QAAQ,UAAU,IAAI;CACpC;AACF;;;;AAKA,SAAgB,iBAAiB,SAAyC;CACxE,OAAO,IAAI,WAAW,OAAO;AAC/B"}