@toolsplus/nx-forge 2.1.0 → 2.3.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 (86) hide show
  1. package/README.md +36 -34
  2. package/executors.json +5 -0
  3. package/migrations.json +16 -0
  4. package/package.json +5 -1
  5. package/src/executors/build/executor.js +1 -1
  6. package/src/executors/build/executor.js.map +1 -1
  7. package/src/executors/build/lib/compile-webpack.js +3 -2
  8. package/src/executors/build/lib/compile-webpack.js.map +1 -1
  9. package/src/executors/build/lib/copy-forge-app-assets.js.map +1 -1
  10. package/src/executors/build/lib/generate-package-json.js.map +1 -1
  11. package/src/executors/build/lib/normalize-options.js.map +1 -1
  12. package/src/executors/build/lib/patch-manifest-yml.js +3 -6
  13. package/src/executors/build/lib/patch-manifest-yml.js.map +1 -1
  14. package/src/executors/build/lib/process-custom-ui-dependencies.js +5 -8
  15. package/src/executors/build/lib/process-custom-ui-dependencies.js.map +1 -1
  16. package/src/executors/build/schema.json +1 -3
  17. package/src/executors/deploy/executor.js.map +1 -1
  18. package/src/executors/deploy/schema.json +2 -8
  19. package/src/executors/install/executor.d.ts +4 -0
  20. package/src/executors/install/executor.js +30 -0
  21. package/src/executors/install/executor.js.map +1 -0
  22. package/src/executors/install/schema.d.ts +10 -0
  23. package/src/executors/install/schema.json +54 -0
  24. package/src/executors/register/executor.js +1 -1
  25. package/src/executors/register/executor.js.map +1 -1
  26. package/src/executors/register/lib/normalize-options.js.map +1 -1
  27. package/src/executors/register/lib/patch-manifest-yml.js +4 -9
  28. package/src/executors/register/lib/patch-manifest-yml.js.map +1 -1
  29. package/src/executors/register/schema.json +2 -5
  30. package/src/executors/tunnel/executor.js.map +1 -1
  31. package/src/executors/tunnel/lib/extract-custom-ui-projects.js +3 -7
  32. package/src/executors/tunnel/lib/extract-custom-ui-projects.js.map +1 -1
  33. package/src/executors/tunnel/lib/run-tunnel.js.map +1 -1
  34. package/src/executors/tunnel/lib/wait-until-server-is-listening.js.map +1 -1
  35. package/src/executors/tunnel/schema.json +1 -3
  36. package/src/generators/application/files/README.md +2 -8
  37. package/src/generators/application/generator.js +4 -2
  38. package/src/generators/application/generator.js.map +1 -1
  39. package/src/generators/application/lib/add-project.js +3 -0
  40. package/src/generators/application/lib/add-project.js.map +1 -1
  41. package/src/generators/application/lib/create-files.js.map +1 -1
  42. package/src/generators/application/lib/get-build-config.js.map +1 -1
  43. package/src/generators/application/lib/get-deploy-config.js.map +1 -1
  44. package/src/generators/application/lib/get-install-config.d.ts +3 -0
  45. package/src/generators/application/lib/get-install-config.js +14 -0
  46. package/src/generators/application/lib/get-install-config.js.map +1 -0
  47. package/src/generators/application/lib/get-register-config.js.map +1 -1
  48. package/src/generators/application/lib/get-serve-config.js.map +1 -1
  49. package/src/generators/application/lib/index.js.map +1 -1
  50. package/src/generators/application/lib/normalize-options.js +6 -4
  51. package/src/generators/application/lib/normalize-options.js.map +1 -1
  52. package/src/generators/application/schema.d.ts +3 -1
  53. package/src/generators/application/schema.json +3 -11
  54. package/src/generators/init/generator.js +15 -3
  55. package/src/generators/init/generator.js.map +1 -1
  56. package/src/generators/init/lib/add-dependencies.js.map +1 -1
  57. package/src/generators/init/lib/index.js.map +1 -1
  58. package/src/generators/init/lib/normalize-options.js.map +1 -1
  59. package/src/generators/init/schema.d.ts +1 -1
  60. package/src/generators/init/schema.json +1 -4
  61. package/src/graph/forge-project-graph.d.ts +2 -0
  62. package/src/graph/forge-project-graph.js +68 -0
  63. package/src/graph/forge-project-graph.js.map +1 -0
  64. package/src/index.d.ts +3 -0
  65. package/src/index.js +7 -0
  66. package/src/index.js.map +1 -1
  67. package/src/migrations/update-2-3-0/add-nx-forge-plugin.d.ts +2 -0
  68. package/src/migrations/update-2-3-0/add-nx-forge-plugin.js +14 -0
  69. package/src/migrations/update-2-3-0/add-nx-forge-plugin.js.map +1 -0
  70. package/src/migrations/update-2-3-0/remove-implicit-custom-ui-dependencies.d.ts +2 -0
  71. package/src/migrations/update-2-3-0/remove-implicit-custom-ui-dependencies.js +31 -0
  72. package/src/migrations/update-2-3-0/remove-implicit-custom-ui-dependencies.js.map +1 -0
  73. package/src/migrations/update-2-3-0/utils/manifest.d.ts +4 -0
  74. package/src/migrations/update-2-3-0/utils/manifest.js +23 -0
  75. package/src/migrations/update-2-3-0/utils/manifest.js.map +1 -0
  76. package/src/migrations/update-2-3-0/utils/yml.d.ts +20 -0
  77. package/src/migrations/update-2-3-0/utils/yml.js +36 -0
  78. package/src/migrations/update-2-3-0/utils/yml.js.map +1 -0
  79. package/src/utils/forge/async-commands.js.map +1 -1
  80. package/src/utils/forge/manifest-yml.d.ts +15 -0
  81. package/src/utils/forge/manifest-yml.js +56 -0
  82. package/src/utils/forge/manifest-yml.js.map +1 -0
  83. package/src/utils/versions.js.map +1 -1
  84. package/src/utils/forge/load-manifest-yml.d.ts +0 -2
  85. package/src/utils/forge/load-manifest-yml.js +0 -32
  86. package/src/utils/forge/load-manifest-yml.js.map +0 -1
@@ -0,0 +1,20 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { ManifestSchema } from '@forge/manifest';
3
+ import { DumpOptions, LoadOptions } from 'js-yaml';
4
+ /**
5
+ * Reads a yaml file and parses YAML.
6
+ *
7
+ * @param tree - file system tree
8
+ * @param path - file path
9
+ * @param options - Optional YAML load options
10
+ */
11
+ export declare const readYaml: (tree: Tree, path: string, options?: LoadOptions) => ManifestSchema;
12
+ /**
13
+ * Writes a YAML value to the file system tree
14
+
15
+ * @param tree File system tree
16
+ * @param path Path of YAML file in the Tree
17
+ * @param value Serializable value to write
18
+ * @param options Optional YAML serialize options
19
+ */
20
+ export declare const writeYaml: <T extends object = object>(tree: Tree, path: string, value: T, options?: DumpOptions) => void;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeYaml = exports.readYaml = void 0;
4
+ const js_yaml_1 = require("js-yaml");
5
+ /**
6
+ * Reads a yaml file and parses YAML.
7
+ *
8
+ * @param tree - file system tree
9
+ * @param path - file path
10
+ * @param options - Optional YAML load options
11
+ */
12
+ const readYaml = (tree, path, options) => {
13
+ if (!tree.exists(path)) {
14
+ throw new Error(`Cannot find ${path}`);
15
+ }
16
+ try {
17
+ return (0, js_yaml_1.load)(tree.read(path, 'utf-8'), options);
18
+ }
19
+ catch (e) {
20
+ throw new Error(`Cannot parse ${path}: ${e.message}`);
21
+ }
22
+ };
23
+ exports.readYaml = readYaml;
24
+ /**
25
+ * Writes a YAML value to the file system tree
26
+
27
+ * @param tree File system tree
28
+ * @param path Path of YAML file in the Tree
29
+ * @param value Serializable value to write
30
+ * @param options Optional YAML serialize options
31
+ */
32
+ const writeYaml = (tree, path, value, options) => {
33
+ tree.write(path, (0, js_yaml_1.dump)(value, options || {}));
34
+ };
35
+ exports.writeYaml = writeYaml;
36
+ //# sourceMappingURL=yml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yml.js","sourceRoot":"","sources":["../../../../../../../packages/nx-forge/src/migrations/update-2-3-0/utils/yml.ts"],"names":[],"mappings":";;;AAEA,qCAA+D;AAE/D;;;;;;GAMG;AACI,MAAM,QAAQ,GAAG,CACtB,IAAU,EACV,IAAY,EACZ,OAAqB,EACL,EAAE;IAClB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;KACxC;IACD,IAAI;QACF,OAAO,IAAA,cAAI,EAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAmB,CAAC;KAClE;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KACvD;AACH,CAAC,CAAC;AAbW,QAAA,QAAQ,YAanB;AAEF;;;;;;;GAOG;AACI,MAAM,SAAS,GAAG,CACvB,IAAU,EACV,IAAY,EACZ,KAAQ,EACR,OAAqB,EACf,EAAE;IACR,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAA,cAAI,EAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAPW,QAAA,SAAS,aAOpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"async-commands.js","sourceRoot":"","sources":["../../../../../../packages/forge/src/utils/forge/async-commands.ts"],"names":[],"mappings":";;;AAAA,iDAAsC;AACtC,uCAAsD;AAEtD;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,CAClC,IAAc,EACd,OAAkD,EAAE,EACrC,EAAE;IACjB,MAAM,GAAG,GAAG,IAAA,iCAAwB,GAAE,CAAC;IACvC,MAAM,UAAU,GAAG,IAAA,qBAAK,EAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE;QACrD,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG,kCAAO,OAAO,CAAC,GAAG,GAAK,IAAI,CAAC,GAAG,CAAE;QACpC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;KACvD,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,IAAI,IAAI,KAAK,CAAC,EAAE;gBACd,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;iBAAM;gBACL,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC,CAAC;aACpD;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAtBW,QAAA,oBAAoB,wBAsB/B"}
1
+ {"version":3,"file":"async-commands.js","sourceRoot":"","sources":["../../../../../../packages/nx-forge/src/utils/forge/async-commands.ts"],"names":[],"mappings":";;;AAAA,iDAAsC;AACtC,uCAAsD;AAEtD;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,CAClC,IAAc,EACd,OAAkD,EAAE,EACrC,EAAE;IACjB,MAAM,GAAG,GAAG,IAAA,iCAAwB,GAAE,CAAC;IACvC,MAAM,UAAU,GAAG,IAAA,qBAAK,EAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE;QACrD,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG,kCAAO,OAAO,CAAC,GAAG,GAAK,IAAI,CAAC,GAAG,CAAE;QACpC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;KACvD,CAAC,CAAC;IACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvC,IAAI,IAAI,KAAK,CAAC,EAAE;gBACd,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;iBAAM;gBACL,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC,CAAC;aACpD;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YACtC,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAtBW,QAAA,oBAAoB,wBAsB/B"}
@@ -0,0 +1,15 @@
1
+ import { ManifestSchema } from '@forge/manifest';
2
+ export declare function readManifestYml(path: string): Promise<ManifestSchema>;
3
+ /**
4
+ * Writes the given manifest file to the specified file path.
5
+ * @param path File path where to write the file to (incl. manifest.yml).
6
+ * @param value Manifest contents to write.
7
+ */
8
+ export declare const writeManifestYml: (path: string, value: ManifestSchema) => void;
9
+ /**
10
+ * Extracts the Custom UI project names from the given manifest.
11
+ *
12
+ * @param manifest Forge manifest to scan for Custom UI projects.
13
+ * @returns List of project names representing Custom UI projects.
14
+ */
15
+ export declare const extractCustomUIProjectNames: (manifest: ManifestSchema) => string[];
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractCustomUIProjectNames = exports.writeManifestYml = exports.readManifestYml = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const manifest_1 = require("@forge/manifest");
6
+ const FULL_SCHEMA = require("@forge/manifest/out/schema/manifest-schema.json");
7
+ const js_yaml_1 = require("js-yaml");
8
+ const fs_1 = require("fs");
9
+ class ManifestYmlValidator extends manifest_1.AbstractValidationProcessor {
10
+ constructor() {
11
+ super([
12
+ new manifest_1.FileValidator(),
13
+ new manifest_1.YamlValidator(),
14
+ new manifest_1.SchemaValidator(FULL_SCHEMA),
15
+ ]);
16
+ }
17
+ }
18
+ function readManifestYml(path) {
19
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
20
+ const { manifestObject, success: isManifestParseSuccess, errors, } = yield new ManifestYmlValidator().process(path);
21
+ if (!isManifestParseSuccess ||
22
+ !manifestObject ||
23
+ !manifestObject.typedContent) {
24
+ throw new Error(`Failed to parse manifest.yml (${path}): ${(errors || [])
25
+ .map((e) => e.message)
26
+ .join('\n')}`);
27
+ }
28
+ const manifestSchema = manifestObject.typedContent;
29
+ if (!manifestSchema) {
30
+ throw new Error('Manifest parse result did not return any content.');
31
+ }
32
+ return manifestSchema;
33
+ });
34
+ }
35
+ exports.readManifestYml = readManifestYml;
36
+ /**
37
+ * Writes the given manifest file to the specified file path.
38
+ * @param path File path where to write the file to (incl. manifest.yml).
39
+ * @param value Manifest contents to write.
40
+ */
41
+ const writeManifestYml = (path, value) => {
42
+ const content = (0, js_yaml_1.dump)(value, {});
43
+ (0, fs_1.writeFileSync)(path, content, { encoding: 'utf8' });
44
+ };
45
+ exports.writeManifestYml = writeManifestYml;
46
+ /**
47
+ * Extracts the Custom UI project names from the given manifest.
48
+ *
49
+ * @param manifest Forge manifest to scan for Custom UI projects.
50
+ * @returns List of project names representing Custom UI projects.
51
+ */
52
+ const extractCustomUIProjectNames = (manifest) => {
53
+ return (manifest.resources || []).map((r) => r.path);
54
+ };
55
+ exports.extractCustomUIProjectNames = extractCustomUIProjectNames;
56
+ //# sourceMappingURL=manifest-yml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-yml.js","sourceRoot":"","sources":["../../../../../../packages/nx-forge/src/utils/forge/manifest-yml.ts"],"names":[],"mappings":";;;;AAAA,8CAMyB;AACzB,+EAA+E;AAC/E,qCAA+B;AAC/B,2BAAmC;AAEnC,MAAM,oBAAqB,SAAQ,sCAA2C;IAC5E;QACE,KAAK,CAAC;YACJ,IAAI,wBAAa,EAAE;YACnB,IAAI,wBAAa,EAAE;YACnB,IAAI,0BAAe,CAAC,WAAW,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;CACF;AACD,SAAsB,eAAe,CAAC,IAAY;;QAChD,MAAM,EACJ,cAAc,EACd,OAAO,EAAE,sBAAsB,EAC/B,MAAM,GACP,GAAG,MAAM,IAAI,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEnD,IACE,CAAC,sBAAsB;YACvB,CAAC,cAAc;YACf,CAAC,cAAc,CAAC,YAAY,EAC5B;YACA,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;iBACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBACrB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;SACH;QAED,MAAM,cAAc,GAAmB,cAAc,CAAC,YAAY,CAAC;QAEnE,IAAI,CAAC,cAAc,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;SACtE;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;CAAA;AA1BD,0CA0BC;AAED;;;;GAIG;AACI,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,KAAqB,EAAQ,EAAE;IAC5E,MAAM,OAAO,GAAG,IAAA,cAAI,EAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChC,IAAA,kBAAa,EAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAHW,QAAA,gBAAgB,oBAG3B;AAEF;;;;;GAKG;AACI,MAAM,2BAA2B,GAAG,CACzC,QAAwB,EACd,EAAE;IACZ,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC,CAAC;AAJW,QAAA,2BAA2B,+BAItC"}
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/forge/src/utils/versions.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,GAAG,CAAC;AAEpB,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,oBAAoB,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-forge/src/utils/versions.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,GAAG,CAAC;AAEpB,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,oBAAoB,GAAG,QAAQ,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ManifestSchema } from '@forge/manifest';
2
- export declare function loadManifestYml(manifestPath: string): Promise<ManifestSchema>;
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.loadManifestYml = void 0;
4
- const tslib_1 = require("tslib");
5
- const manifest_1 = require("@forge/manifest");
6
- const FULL_SCHEMA = require("@forge/manifest/out/schema/manifest-schema.json");
7
- function loadManifestYml(manifestPath) {
8
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
9
- const { manifestObject, success: isManifestParseSuccess, errors, } = yield new ManifestYmlValidator().process(manifestPath);
10
- if (!isManifestParseSuccess) {
11
- throw new Error(`Failed to parse manifest.yml (${manifestPath}): ${errors
12
- .map((e) => e.message)
13
- .join('\n')}`);
14
- }
15
- const manifestSchema = manifestObject.typedContent;
16
- if (!manifestSchema) {
17
- throw new Error('Manifest parse result did not return any content.');
18
- }
19
- return manifestSchema;
20
- });
21
- }
22
- exports.loadManifestYml = loadManifestYml;
23
- class ManifestYmlValidator extends manifest_1.AbstractValidationProcessor {
24
- constructor() {
25
- super([
26
- new manifest_1.FileValidator(),
27
- new manifest_1.YamlValidator(),
28
- new manifest_1.SchemaValidator(FULL_SCHEMA),
29
- ]);
30
- }
31
- }
32
- //# sourceMappingURL=load-manifest-yml.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-manifest-yml.js","sourceRoot":"","sources":["../../../../../../packages/forge/src/utils/forge/load-manifest-yml.ts"],"names":[],"mappings":";;;;AAAA,8CAMyB;AACzB,+EAA+E;AAE/E,SAAsB,eAAe,CACnC,YAAoB;;QAEpB,MAAM,EACJ,cAAc,EACd,OAAO,EAAE,sBAAsB,EAC/B,MAAM,GACP,GAAG,MAAM,IAAI,oBAAoB,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAE3D,IAAI,CAAC,sBAAsB,EAAE;YAC3B,MAAM,IAAI,KAAK,CACb,iCAAiC,YAAY,MAAM,MAAM;iBACtD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;iBACrB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;SACH;QAED,MAAM,cAAc,GAAmB,cAAc,CAAC,YAAY,CAAC;QAEnE,IAAI,CAAC,cAAc,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;SACtE;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;CAAA;AAxBD,0CAwBC;AAED,MAAM,oBAAqB,SAAQ,sCAA2C;IAC5E;QACE,KAAK,CAAC;YACJ,IAAI,wBAAa,EAAE;YACnB,IAAI,wBAAa,EAAE;YACnB,IAAI,0BAAe,CAAC,WAAW,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;CACF"}