@paroicms/server 1.103.0 → 1.104.0

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 (129) hide show
  1. package/ddl/main.ddl.sql +1 -2
  2. package/dist/admin-backend/document/document.resolver.js +3 -2
  3. package/dist/admin-backend/document/document.resolver.js.map +1 -1
  4. package/dist/admin-backend/document/save-documents.queries.js +54 -11
  5. package/dist/admin-backend/document/save-documents.queries.js.map +1 -1
  6. package/dist/admin-backend/fields/fields.resolver.js +2 -2
  7. package/dist/admin-backend/fields/fields.resolver.js.map +1 -1
  8. package/dist/admin-backend/fields/load-fields.queries.d.ts +2 -2
  9. package/dist/admin-backend/fields/load-fields.queries.js +1 -1
  10. package/dist/admin-backend/fields/load-fields.queries.js.map +1 -1
  11. package/dist/admin-backend/lnode/lnode-wrap.resolver.js +5 -1
  12. package/dist/admin-backend/lnode/lnode-wrap.resolver.js.map +1 -1
  13. package/dist/admin-backend/lnode/lnode.queries.d.ts +2 -0
  14. package/dist/admin-backend/lnode/lnode.queries.js +27 -54
  15. package/dist/admin-backend/lnode/lnode.queries.js.map +1 -1
  16. package/dist/admin-backend/media/media-upload.controller.js +3 -9
  17. package/dist/admin-backend/media/media-upload.controller.js.map +1 -1
  18. package/dist/admin-backend/node/node-cte.queries.d.ts +25 -0
  19. package/dist/admin-backend/node/node-cte.queries.js +116 -0
  20. package/dist/admin-backend/node/node-cte.queries.js.map +1 -0
  21. package/dist/admin-backend/node/node.queries.d.ts +1 -3
  22. package/dist/admin-backend/node/node.queries.js +5 -19
  23. package/dist/admin-backend/node/node.queries.js.map +1 -1
  24. package/dist/admin-backend/node/node.resolver.js +2 -2
  25. package/dist/admin-backend/routing-cluster/cluster-management.d.ts +8 -0
  26. package/dist/admin-backend/routing-cluster/cluster-management.js +217 -0
  27. package/dist/admin-backend/routing-cluster/cluster-management.js.map +1 -0
  28. package/dist/admin-backend/routing-cluster/cluster-validation.d.ts +7 -0
  29. package/dist/admin-backend/routing-cluster/cluster-validation.js +48 -0
  30. package/dist/admin-backend/routing-cluster/cluster-validation.js.map +1 -0
  31. package/dist/admin-backend/routing-cluster/routing-cluster.queries.d.ts +3 -0
  32. package/dist/admin-backend/routing-cluster/routing-cluster.queries.js +34 -0
  33. package/dist/admin-backend/routing-cluster/routing-cluster.queries.js.map +1 -0
  34. package/dist/admin-backend/routing-cluster/routing-cluster.resolver.d.ts +3 -0
  35. package/dist/admin-backend/routing-cluster/routing-cluster.resolver.js +72 -0
  36. package/dist/admin-backend/routing-cluster/routing-cluster.resolver.js.map +1 -0
  37. package/dist/admin-backend/site-constants/site-constants.resolver.js +0 -5
  38. package/dist/admin-backend/site-constants/site-constants.resolver.js.map +1 -1
  39. package/dist/common/media-handles.helpers.d.ts +3 -3
  40. package/dist/common/media-handles.helpers.js +3 -3
  41. package/dist/common/media-handles.helpers.js.map +1 -1
  42. package/dist/common/medias/media-lib.js +1 -1
  43. package/dist/common/medias/media-lib.js.map +1 -1
  44. package/dist/connector/db-init/db-constants.d.ts +1 -1
  45. package/dist/connector/db-init/db-constants.js +1 -1
  46. package/dist/connector/db-init/ddl-migration.js +5 -0
  47. package/dist/connector/db-init/ddl-migration.js.map +1 -1
  48. package/dist/connector/db-init/init-node-queries.d.ts +2 -3
  49. package/dist/connector/db-init/init-node-queries.js +39 -32
  50. package/dist/connector/db-init/init-node-queries.js.map +1 -1
  51. package/dist/connector/db-init/load-routing-cluster.queries.d.ts +36 -0
  52. package/dist/connector/db-init/load-routing-cluster.queries.js +265 -0
  53. package/dist/connector/db-init/load-routing-cluster.queries.js.map +1 -0
  54. package/dist/connector/db-init/populate-routing-documents.d.ts +8 -3
  55. package/dist/connector/db-init/populate-routing-documents.js +45 -47
  56. package/dist/connector/db-init/populate-routing-documents.js.map +1 -1
  57. package/dist/connector/row-types.d.ts +0 -1
  58. package/dist/connector/site-schema/site-schema-factory.js +30 -3
  59. package/dist/connector/site-schema/site-schema-factory.js.map +1 -1
  60. package/dist/graphql/apollo-server-init.js +2 -0
  61. package/dist/graphql/apollo-server-init.js.map +1 -1
  62. package/dist/liquidjs-tools/liquidjs-drop.d.ts +5 -5
  63. package/dist/liquidjs-tools/liquidjs-drop.js +16 -4
  64. package/dist/liquidjs-tools/liquidjs-drop.js.map +1 -1
  65. package/dist/liquidjs-tools/liquidjs-utils.d.ts +0 -2
  66. package/dist/liquidjs-tools/liquidjs-utils.js +0 -7
  67. package/dist/liquidjs-tools/liquidjs-utils.js.map +1 -1
  68. package/dist/public-api/public-api-rendering.js +13 -0
  69. package/dist/public-api/public-api-rendering.js.map +1 -1
  70. package/dist/rendered-site/liquidjs-filters/head-tags-filter.d.ts +1 -1
  71. package/dist/rendered-site/liquidjs-filters/head-tags-filter.js +7 -3
  72. package/dist/rendered-site/liquidjs-filters/head-tags-filter.js.map +1 -1
  73. package/dist/rendered-site/liquidjs-filters/info-filter.js +4 -2
  74. package/dist/rendered-site/liquidjs-filters/info-filter.js.map +1 -1
  75. package/dist/rendered-site/liquidjs-filters/inject-menu-items-data.js +2 -1
  76. package/dist/rendered-site/liquidjs-filters/inject-menu-items-data.js.map +1 -1
  77. package/dist/rendered-site/page-route/make-url.d.ts +5 -2
  78. package/dist/rendered-site/page-route/make-url.js +48 -112
  79. package/dist/rendered-site/page-route/make-url.js.map +1 -1
  80. package/dist/rendered-site/page-route/page-route-parser.d.ts +10 -5
  81. package/dist/rendered-site/page-route/page-route-parser.js +288 -75
  82. package/dist/rendered-site/page-route/page-route-parser.js.map +1 -1
  83. package/dist/rendered-site/page-route/raw-document-payload.js +16 -25
  84. package/dist/rendered-site/page-route/raw-document-payload.js.map +1 -1
  85. package/dist/rendered-site/serve-document/serve-document.js.map +1 -1
  86. package/dist/rendering-payload/breadcrumb.queries.js +6 -2
  87. package/dist/rendering-payload/breadcrumb.queries.js.map +1 -1
  88. package/dist/rendering-payload/cluster-payloads.d.ts +7 -0
  89. package/dist/rendering-payload/cluster-payloads.js +50 -0
  90. package/dist/rendering-payload/cluster-payloads.js.map +1 -0
  91. package/dist/rendering-payload/create-doc-drop.d.ts +1 -1
  92. package/dist/rendering-payload/create-doc-drop.js +127 -120
  93. package/dist/rendering-payload/create-doc-drop.js.map +1 -1
  94. package/dist/rendering-payload/create-part-drop.js +1 -2
  95. package/dist/rendering-payload/create-part-drop.js.map +1 -1
  96. package/dist/rendering-payload/field-values.d.ts +1 -6
  97. package/dist/rendering-payload/field-values.js +2 -58
  98. package/dist/rendering-payload/field-values.js.map +1 -1
  99. package/dist/rendering-payload/get-siblings.queries.d.ts +3 -2
  100. package/dist/rendering-payload/get-siblings.queries.js +41 -26
  101. package/dist/rendering-payload/get-siblings.queries.js.map +1 -1
  102. package/dist/rendering-payload/make-public-payload.d.ts +1 -4
  103. package/dist/rendering-payload/make-public-payload.js +3 -0
  104. package/dist/rendering-payload/make-public-payload.js.map +1 -1
  105. package/dist/rendering-payload/rendering-payload.types.d.ts +21 -15
  106. package/dist/rendering-payload/site-payload.d.ts +2 -3
  107. package/dist/rendering-payload/site-payload.js +43 -37
  108. package/dist/rendering-payload/site-payload.js.map +1 -1
  109. package/dist/rendering-payload/translations.queries.js +1 -2
  110. package/dist/rendering-payload/translations.queries.js.map +1 -1
  111. package/dist/running-server/running-server-connector.js +4 -4
  112. package/dist/running-server/running-server-connector.js.map +1 -1
  113. package/dist/site-context/load-site-context.js +13 -6
  114. package/dist/site-context/load-site-context.js.map +1 -1
  115. package/dist/site-context/refresh-site-context.d.ts +1 -0
  116. package/dist/site-context/refresh-site-context.js +15 -0
  117. package/dist/site-context/refresh-site-context.js.map +1 -0
  118. package/dist/site-context/site-context.types.d.ts +3 -2
  119. package/dist/site-context/site-values-for-site-context.d.ts +1 -1
  120. package/dist/site-context/site-values-for-site-context.js.map +1 -1
  121. package/dist/tsconfig.tsbuildinfo +1 -1
  122. package/package.json +12 -10
  123. package/schema.graphql +27 -2
  124. package/dist/admin-backend/document/document.helper.d.ts +0 -2
  125. package/dist/admin-backend/document/document.helper.js +0 -6
  126. package/dist/admin-backend/document/document.helper.js.map +0 -1
  127. package/dist/connector/db-init/load-routing-documents.d.ts +0 -3
  128. package/dist/connector/db-init/load-routing-documents.js +0 -85
  129. package/dist/connector/db-init/load-routing-documents.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paroicms/server",
3
- "version": "1.103.0",
3
+ "version": "1.104.0",
4
4
  "description": "The ParoiCMS server",
5
5
  "keywords": [
6
6
  "cms",
@@ -28,6 +28,8 @@
28
28
  "clear": "rimraf dist/*",
29
29
  "test:watch": "vitest",
30
30
  "test": "vitest run",
31
+ "lint": "biome check src",
32
+ "lint:fix": "biome check src --write",
31
33
  "_pino-pretty": "pino-pretty -U false -x 'stats:25' -X 'stats:grey' -t 'yyyy-mm-dd HH:MM:ss.l' -i 'hostname,pid,fqdn' -o '{if fqdn}[{fqdn}] {end}{msg}'",
32
34
  "graphql:generate-types": "npm run _graphql:generate-types && npm run _patch-graphql-types",
33
35
  "_graphql:generate-types": "graphql-codegen --config scripts/codegen.ts",
@@ -36,15 +38,15 @@
36
38
  "dependencies": {
37
39
  "@apollo/server": "~4.12.2",
38
40
  "@as-integrations/express5": "~1.1.0",
39
- "@paroicms/admin-ui": "1.80.0",
40
- "@paroicms/internal-anywhere-lib": "1.33.0",
41
- "@paroicms/internal-server-lib": "1.20.0",
42
- "@paroicms/public-anywhere-lib": "0.34.0",
43
- "@paroicms/public-server-lib": "0.44.0",
44
- "@paroicms/script-lib": "0.2.0",
45
- "@paroicms/server-database-media-storage": "1.22.1",
46
- "@paroicms/server-image-cache-engine": "1.27.1",
47
- "@paroicms/server-text-cache-system": "1.19.1",
41
+ "@paroicms/admin-ui": "1.81.0",
42
+ "@paroicms/internal-anywhere-lib": "1.34.0",
43
+ "@paroicms/internal-server-lib": "1.20.1",
44
+ "@paroicms/public-anywhere-lib": "0.35.0",
45
+ "@paroicms/public-server-lib": "0.45.0",
46
+ "@paroicms/script-lib": "0.2.1",
47
+ "@paroicms/server-database-media-storage": "1.22.2",
48
+ "@paroicms/server-image-cache-engine": "1.27.2",
49
+ "@paroicms/server-text-cache-system": "1.19.2",
48
50
  "archiver": "~7.0.1",
49
51
  "arktype": "~2.1.20",
50
52
  "bcrypt": "~6.0.0",
package/schema.graphql CHANGED
@@ -56,7 +56,20 @@ type Query {
56
56
  publicSiteConstants: PublicSiteConstants!
57
57
  siteConstants: SiteConstants!
58
58
  plugins: [Plugin!]!
59
- routingIds: String!
59
+ """
60
+ A stringified `HomeRoutingCluster`
61
+ """
62
+ homeRoutingCluster: String!
63
+ """
64
+ An array of stringified `RoutingCluster` objects ordered from home cluster to target cluster
65
+ """
66
+ routingClusterAndParents(nodeId: ID!): [String!]!
67
+
68
+ # Routing Cluster Management
69
+ """
70
+ A stringified `RoutingCluster` object with annotations
71
+ """
72
+ annotatedCluster(rootNodeId: ID!): String!
60
73
 
61
74
  # Migration
62
75
  migrationInfo: MigrationInfo!
@@ -106,7 +119,7 @@ type Document {
106
119
  lNodeId: ID!
107
120
  slug: String
108
121
  title: String
109
- url: String!
122
+ url: String
110
123
  }
111
124
 
112
125
  type FieldValuesOfList {
@@ -236,6 +249,9 @@ type LNodeWrap {
236
249
  nodeId: ID!
237
250
  ready: Boolean!
238
251
  translatedInto: [String!]!
252
+ """
253
+ Ordered from home to target node
254
+ """
239
255
  breadcrumb: [BreadcrumbItem!]!
240
256
  document: Document
241
257
  """
@@ -245,6 +261,7 @@ type LNodeWrap {
245
261
  node: Node!
246
262
  parts: [PartOrPlaceholder!]
247
263
  translations: [LNodeTranslation!]!
264
+ parentLanguages: [String!]!
248
265
  }
249
266
 
250
267
  type SiteConstants {
@@ -326,6 +343,14 @@ type Mutation {
326
343
  # Backup
327
344
  initializeBackup: BackupInfo!
328
345
 
346
+ # Routing Cluster Management
347
+ """
348
+ requestJson parameter is a stringified `ClusterManagementRequest`
349
+ """
350
+ manageClusterRoutingDocuments(requestJson: String!): Boolean!
351
+ deleteCluster(rootLNodeId: String!): Boolean!
352
+ deleteNodeAndClusters(rootNodeId: String!): Boolean!
353
+
329
354
  # Migration
330
355
  runSiteSchemaMigrations: Boolean!
331
356
  }
@@ -1,2 +0,0 @@
1
- import type { ScSiteSchema } from "@paroicms/public-anywhere-lib";
2
- export declare function isAutoPublishDocument(siteSchema: ScSiteSchema, typeName: string): boolean | undefined;
@@ -1,6 +0,0 @@
1
- import { getDocumentTypeByName } from "@paroicms/internal-anywhere-lib";
2
- export function isAutoPublishDocument(siteSchema, typeName) {
3
- const documentType = getDocumentTypeByName(siteSchema, typeName);
4
- return documentType.documentKind === "regular" && documentType.autoPublish;
5
- }
6
- //# sourceMappingURL=document.helper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document.helper.js","sourceRoot":"","sources":["../../../src/admin-backend/document/document.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAGxE,MAAM,UAAU,qBAAqB,CAAC,UAAwB,EAAE,QAAgB;IAC9E,MAAM,YAAY,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO,YAAY,CAAC,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,WAAW,CAAC;AAC7E,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { ScSiteSchema, SiteIds } from "@paroicms/public-anywhere-lib";
2
- import type { Knex } from "knex";
3
- export declare function loadRoutingDocuments(cn: Knex, siteSchema: ScSiteSchema): Promise<SiteIds>;
@@ -1,85 +0,0 @@
1
- import { getRoutingDocumentTypeByName } from "@paroicms/internal-anywhere-lib";
2
- import { encodeLNodeId } from "@paroicms/public-anywhere-lib";
3
- import { type } from "arktype";
4
- export async function loadRoutingDocuments(cn, siteSchema) {
5
- const siteNodeId = await loadSiteNodeId(cn);
6
- if (siteNodeId === undefined)
7
- throw new Error("Missing siteNodeId");
8
- const { home: routingIds } = await loadChildRoutingIds(cn, siteSchema, siteNodeId, [
9
- siteSchema.nodeTypes.home,
10
- ]);
11
- return {
12
- siteNodeId,
13
- homeIds: routingIds,
14
- };
15
- }
16
- const LoadSiteNodeIdAT = type({
17
- id: "number",
18
- "+": "reject",
19
- }).pipe((r) => ({
20
- id: String(r.id),
21
- }));
22
- async function loadSiteNodeId(cn) {
23
- const rows = await cn("PaNode")
24
- .select("id")
25
- .where("depth", -1)
26
- .andWhere("typeName", "_site");
27
- if (rows.length === 0)
28
- return;
29
- if (rows.length !== 1)
30
- throw new Error(`it should not exist '${rows.length}' site nodes`);
31
- const [row] = rows;
32
- return LoadSiteNodeIdAT.assert(row).id;
33
- }
34
- const LoadChildRoutingIdsAT = type({
35
- nodeId: "number",
36
- language: "string",
37
- typeName: "string",
38
- "+": "reject",
39
- }).pipe((r) => ({
40
- nodeId: String(r.nodeId),
41
- language: r.language,
42
- typeName: r.typeName,
43
- }));
44
- async function loadChildRoutingIds(cn, siteSchema, parentNodeId, childTypes) {
45
- const rows = await cn("PaLNode as s")
46
- .select("s.nodeId", "s.language", "l.typeName")
47
- .innerJoin("PaNode as l", "l.id", "s.nodeId")
48
- .where("l.parentId", parentNodeId)
49
- .whereIn("l.typeName", childTypes.map((t) => t.typeName))
50
- .whereIn("s.language", siteSchema.languages);
51
- const formattedRows = rows.map((row) => LoadChildRoutingIdsAT.assert(row));
52
- const map = new Map();
53
- for (const row of formattedRows) {
54
- let ids = map.get(row.typeName);
55
- if (!ids) {
56
- ids = {
57
- nodeId: row.nodeId,
58
- typeName: row.typeName,
59
- lNodeIds: {},
60
- };
61
- map.set(row.typeName, ids);
62
- }
63
- ids.lNodeIds[row.language] = encodeLNodeId(row);
64
- }
65
- for (const childType of childTypes) {
66
- const ids = map.get(childType.typeName);
67
- if (!ids) {
68
- throw new Error(`missing document-type '${childType.typeName}' in the database, for parent '${parentNodeId}'`);
69
- }
70
- const languages = Object.keys(ids.lNodeIds);
71
- if (languages.length !== siteSchema.languages.length) {
72
- throw new Error(`missing lNode(s) for '${childType.typeName}' in the database, found languages '${languages.join(",")}'`);
73
- }
74
- const subTypes = routingChildrenOf(siteSchema, childType);
75
- if (subTypes.length > 0) {
76
- ids.children = await loadChildRoutingIds(cn, siteSchema, ids.nodeId, subTypes);
77
- }
78
- }
79
- return Object.fromEntries(map);
80
- }
81
- function routingChildrenOf(siteSchema, documentType) {
82
- const typeNames = documentType.routingChildren ?? [];
83
- return typeNames.map((typeName) => getRoutingDocumentTypeByName(siteSchema, typeName));
84
- }
85
- //# sourceMappingURL=load-routing-documents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-routing-documents.js","sourceRoot":"","sources":["../../../src/connector/db-init/load-routing-documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAS/E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAQ,EAAE,UAAwB;IAC3E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE;QACjF,UAAU,CAAC,SAAS,CAAC,IAAI;KAC1B,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,OAAO,EAAE,UAAU;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,CAAC;IAC5B,EAAE,EAAE,QAAQ;IACZ,GAAG,EAAE,QAAQ;CACd,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACd,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;CACjB,CAAC,CAAC,CAAC;AAEJ,KAAK,UAAU,cAAc,CAAC,EAAQ;IACpC,MAAM,IAAI,GAAU,MAAM,EAAE,CAAC,QAAQ,CAAC;SACnC,MAAM,CAAC,IAAI,CAAC;SACZ,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAClB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEjC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC;IAC1F,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACnB,OAAO,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,qBAAqB,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,QAAQ;CACd,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;IACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;CACrB,CAAC,CAAC,CAAC;AAEJ,KAAK,UAAU,mBAAmB,CAChC,EAAQ,EACR,UAAwB,EACxB,YAAoB,EACpB,UAAmC;IAEnC,MAAM,IAAI,GAAU,MAAM,EAAE,CAAC,cAAc,CAAC;SACzC,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;SAC9C,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC;SAC5C,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;SACjC,OAAO,CACN,YAAY,EACZ,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAClC;SACA,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAE/C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG;gBACJ,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,QAAQ,EAAE,EAAE;aACb,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,0BAA0B,SAAS,CAAC,QAAQ,kCAAkC,YAAY,GAAG,CAC9F,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,yBACE,SAAS,CAAC,QACZ,uCAAuC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAC9D,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC1D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,GAAG,CAAC,QAAQ,GAAG,MAAM,mBAAmB,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,iBAAiB,CACxB,UAAwB,EACxB,YAA4B;IAE5B,MAAM,SAAS,GAAG,YAAY,CAAC,eAAe,IAAI,EAAE,CAAC;IACrD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,4BAA4B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzF,CAAC"}