@uipath/case-tool 1.205.0-preview.277 → 1.206.0-preview.279
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.
- package/dist/THIRD-PARTY-NOTICES.md +68 -7
- package/dist/applicationinsights-web-8m26566f.js +17209 -0
- package/dist/{authoring-kqh34zzm.js → authoring-vg90pqrn.js} +488 -213
- package/dist/bindings-v2-1da35xsc.js +27 -0
- package/dist/{browser-strategy-6atc7v8s.js → browser-strategy-627rrg7z.js} +6 -7
- package/dist/{business-rule-export-ey588rv7.js → business-rule-export-jv60r9jf.js} +3 -7
- package/dist/carry-forward-sfdnta6q.js +52 -0
- package/dist/{case-api-sme7esce.js → case-api-by95rf40.js} +38 -37
- package/dist/{case-bindings-service-cht20gqt.js → case-bindings-service-pp3c9g1e.js} +93 -45
- package/dist/{case-debug-solution-projects-zy1snze0.js → case-debug-solution-projects-zhnn53e5.js} +3 -7
- package/dist/{case-debug-studio-web-service-tp28gt75.js → case-debug-studio-web-service-fvj41xrq.js} +48 -45
- package/dist/{case-described-io-service-dx1f4nxe.js → case-described-io-service-tsm8r189.js} +33 -15
- package/dist/case-event-trigger-bindings-qbs8ywf5.js +17 -0
- package/dist/{case-format-service-6aew6tqc.js → case-format-service-3sab2297.js} +9 -10
- package/dist/{case-pack-service-pqq8wnfd.js → case-pack-service-txnv711n.js} +47 -42
- package/dist/case-schema-version-cw0h2nrv.js +18 -0
- package/dist/case-shape-reader-xaxmrd40.js +14 -0
- package/dist/{case-splice-service-s5gccctq.js → case-splice-service-6y35w83e.js} +139 -51
- package/dist/{case-validate-service-g5fpq7xa.js → case-validate-service-4zdx7d2w.js} +234 -170
- package/dist/connector-enrichment-service-mws6z0hw.js +56 -0
- package/dist/connector-library-1yw5r47w.js +99 -0
- package/dist/connector-lookup-service-0t7ydz3t.js +20 -0
- package/dist/connector-task-shape-bgywpbqc.js +13 -0
- package/dist/{de-WLW6KWOJ-2qnsqdtw.js → de-2BEKRUMY-x4dx0nn9.js} +190 -10
- package/dist/{de-UZI7FJDO-mwvc4cxe.js → de-AI7ML6JM-km47f8k4.js} +20 -5
- package/dist/debug-service-h4jxbn1r.js +56 -0
- package/dist/{embedded-file-reader-r66242ey.js → embedded-file-reader-0228j82a.js} +1 -4
- package/dist/en-LAVDF7IQ-yzy20n6d.js +254 -0
- package/dist/en-X6T4SP2Y-xm47mf18.js +2752 -0
- package/dist/{enrichment-service-hv7ff88p.js → enrichment-service-wpprec7k.js} +36 -37
- package/dist/{es-5THCNRFN-tqwyrdgy.js → es-7ZTQTGKN-11sj0yjx.js} +190 -10
- package/dist/{es-MX-5RELIXKI-9jhqtddc.js → es-MX-7KJZPEQN-1fq0a9jr.js} +20 -5
- package/dist/{es-MX-TWZBRAXK-gqd9swzw.js → es-MX-IHGRIEWH-g63p0gb4.js} +191 -11
- package/dist/{es-4UBUTCQA-m1ytpyx2.js → es-SPNKTD5Y-vw5cbgv5.js} +20 -5
- package/dist/filter-engine-dh9s90gb.js +10 -0
- package/dist/first-party-service-ahcc6xc6.js +8 -0
- package/dist/{fr-CERONSRC-edpxhbmb.js → fr-7ZDL4MVO-pd27vwh6.js} +191 -11
- package/dist/{fr-VBM5WRC2-63z7w4mh.js → fr-AXJGUT53-hdg3pmd4.js} +20 -5
- package/dist/index-21kns9qg.js +10 -0
- package/dist/{index-fyc0k5dd.js → index-5pzp2qeb.js} +5350 -3271
- package/dist/{index-5dxh9z60.js → index-a7y7etmy.js} +6 -5
- package/dist/{index-ekwtgx7y.js → index-ec115v05.js} +309 -287
- package/dist/{connector-task-spec-jpsjxnas.js → index-n4g6qvab.js} +320 -144
- package/dist/index-nj3axvya.js +159 -0
- package/dist/{index-h8cph72k.js → index-nzr4mx5p.js} +2 -22
- package/dist/index-pg9wmyrf.js +36 -0
- package/dist/index-sgpbvm8j.js +26 -0
- package/dist/index-t0sz0svn.js +35 -0
- package/dist/index-z2qk2qn6.js +24 -0
- package/dist/index.js +19 -25
- package/dist/index.umd.min-ttg1qc0x.js +7814 -0
- package/dist/{init-entry-points-hhpv3e3f.js → init-entry-points-pc128f7z.js} +22 -35
- package/dist/input-reader-9ym8mkbc.js +10 -0
- package/dist/{ja-43QL7CGO-c3q8gre9.js → ja-C7GZV6YP-hvtbngr5.js} +20 -5
- package/dist/{ja-U2MCNHGT-gz0ap1jk.js → ja-LGAM5HKR-sgrtjqjh.js} +190 -10
- package/dist/{jmespath-e4a59c8w.js → jmespath-wwym30dp.js} +1 -1
- package/dist/{js-yaml-87cdx6bm.js → js-yaml-a2bk27p6.js} +1 -3
- package/dist/known-types-gak9by1w.js +11 -0
- package/dist/{ko-XAUYQWDR-zp81gjp4.js → ko-7B4SUZB7-c8wr20sc.js} +190 -10
- package/dist/{ko-TLL6Z6CD-wrt3n8a9.js → ko-Q24HSSL4-5vn55pte.js} +20 -5
- package/dist/localSolutionDiscovery-48d1bnkj.js +15 -0
- package/dist/{migration-diagnosis-ns5cw4e3.js → migration-diagnosis-myqqgwj0.js} +1 -4
- package/dist/{node-strategy-v442hwgd.js → node-strategy-2mqzg36t.js} +15 -18
- package/dist/node-sync-service-tr5m22nb.js +56 -0
- package/dist/{out-target-wjgmna0r.js → out-target-eqsttq1k.js} +18 -22
- package/dist/{packager-tool-f8vwy92w.js → packager-tool-0te1tyhf.js} +186 -16
- package/dist/{packager-tool-ydyvtknp.js → packager-tool-0w4fsdzv.js} +44 -20
- package/dist/{packager-tool-8ftat1vn.js → packager-tool-17b466mr.js} +59158 -59666
- package/dist/packager-tool-1nfdj0zm.js +425 -0
- package/dist/packager-tool-1wgav5ma.js +139 -0
- package/dist/{packager-tool-scc247gk.js → packager-tool-32792w66.js} +66 -82
- package/dist/{packager-tool-nj4seavy.js → packager-tool-35c9npcy.js} +26 -7
- package/dist/{packager-tool-r0x3qh59.js → packager-tool-388vyja1.js} +185 -29
- package/dist/packager-tool-3m8482sw.js +78 -0
- package/dist/packager-tool-3r23qsca.js +4832 -0
- package/dist/packager-tool-4avchhz8.js +539 -0
- package/dist/{packager-tool-29br2cdx.js → packager-tool-4wn3b7qp.js} +252 -468
- package/dist/{packager-tool-jr8x285x.js → packager-tool-5jt5rc2g.js} +630 -689
- package/dist/{packager-tool-9kvkzc05.js → packager-tool-5w0gjcck.js} +4 -4
- package/dist/packager-tool-68648y3j.js +6 -0
- package/dist/{packager-tool-1yh8g550.js → packager-tool-6an893wm.js} +12 -3
- package/dist/{packager-tool-aagnvyba.js → packager-tool-76zhn5pa.js} +131 -432
- package/dist/packager-tool-7x1tmb8a.js +46 -0
- package/dist/{packager-tool-kyrm4e5m.js → packager-tool-9ar5829n.js} +781 -741
- package/dist/{packager-tool-4p11fvf4.js → packager-tool-b2q8m9pq.js} +10 -13
- package/dist/packager-tool-bg3tdpva.js +27 -0
- package/dist/packager-tool-bpkkg4z2.js +295 -0
- package/dist/{packager-tool-yn33pw57.js → packager-tool-dn9d4ywm.js} +246 -225
- package/dist/{packager-tool-kdhey8gz.js → packager-tool-e02jkmrq.js} +41 -29
- package/dist/{packager-tool-sq931c23.js → packager-tool-e1tx5mqg.js} +1 -1
- package/dist/packager-tool-gt3bsmfp.js +1302 -0
- package/dist/packager-tool-gy4yjqhf.js +178 -0
- package/dist/packager-tool-h2ar8xf8.js +222 -0
- package/dist/{packager-tool-v2kcgjbf.js → packager-tool-j6nfje7t.js} +5 -4
- package/dist/packager-tool-kz7zz79p.js +71 -0
- package/dist/{packager-tool-9e59z4d6.js → packager-tool-me8gd22q.js} +82 -83
- package/dist/packager-tool-mk9fmzdy.js +20 -0
- package/dist/{packager-tool-gdtpsdn7.js → packager-tool-mm1x18d6.js} +223 -28
- package/dist/{packager-tool-xm3gr7d4.js → packager-tool-nd312sma.js} +32 -15
- package/dist/{packager-tool-mqy97y5f.js → packager-tool-p5gs9xqy.js} +14 -14
- package/dist/{packager-tool-83v804p7.js → packager-tool-psmb758n.js} +3108 -2627
- package/dist/packager-tool-q26hncjr.js +13 -0
- package/dist/packager-tool-q9fnx278.js +77 -0
- package/dist/{packager-tool-ezds6t5e.js → packager-tool-s12s1dp6.js} +11 -11
- package/dist/packager-tool-scy94jyb.js +5424 -0
- package/dist/{packager-tool-yn7r7zq2.js → packager-tool-snesn0bt.js} +177 -96
- package/dist/{packager-tool-d8e2mrkq.js → packager-tool-tgehy324.js} +56 -56
- package/dist/{packager-tool-tqn0j6f9.js → packager-tool-v11fx4dk.js} +7 -7
- package/dist/{packager-tool-67vy1fz3.js → packager-tool-v6rkp2ay.js} +24 -92
- package/dist/{packager-tool-9sd483vs.js → packager-tool-vs7gqa4r.js} +15 -15
- package/dist/packager-tool-vyavrbym.js +488 -0
- package/dist/{packager-tool-b098y4a2.js → packager-tool-wbksf242.js} +97 -97
- package/dist/{packager-tool-g8nkdj5b.js → packager-tool-x1f8ypvs.js} +256 -486
- package/dist/{packager-tool-2sn7d8fd.js → packager-tool-x74mmjkw.js} +9 -13
- package/dist/{packager-tool-7hw344bt.js → packager-tool-xb16e3tz.js} +5 -5
- package/dist/{packager-tool-a17g0pj1.js → packager-tool-xd1wbvay.js} +10 -8
- package/dist/{packager-tool-1yfw674x.js → packager-tool-xehhk3c3.js} +10 -5
- package/dist/packager-tool-yh8mmj3p.js +123 -0
- package/dist/{packager-tool-hdxtgckw.js → packager-tool-z070caqq.js} +56 -12
- package/dist/{packager-tool-b250k6w4.js → packager-tool-z1fw9a8v.js} +41 -9
- package/dist/{packager-tool-0gctz400.js → packager-tool-z9fmqtm6.js} +4 -4
- package/dist/{packager-tool-mzf4gmph.js → packager-tool-zbx189j3.js} +11 -8
- package/dist/{packager-tool-zf8f9pmm.js → packager-tool-zrbnms9b.js} +3 -4
- package/dist/packager-tool.js +10 -11
- package/dist/prepare-uip-ad7mfs8t.js +92 -0
- package/dist/{project-artifacts-bgyyb0dm.js → project-artifacts-q0c0zghw.js} +2 -6
- package/dist/{pt-BR-USP2T7GD-pedn77m1.js → pt-BR-BIUJXIPU-2sqzhr8y.js} +20 -5
- package/dist/{pt-BR-GNQNAAZ2-xadharv4.js → pt-BR-PHLFHMXZ-n6de4s7z.js} +191 -11
- package/dist/{pt-RMIAKZB4-67enhx3m.js → pt-MHX6JGAX-xfgvdqwg.js} +20 -5
- package/dist/{pt-TO2DARY2-ftcce1bv.js → pt-N7ZTJT4W-d6c67xcn.js} +190 -10
- package/dist/{resolved-check-aqw7568y.js → resolved-check-dz8eqrf6.js} +2 -3
- package/dist/{resourcesSyncService-k9kw8d9b.js → resourcesSyncService-sgnkcvpt.js} +81 -141
- package/dist/{ro-GHOBYW2S-mhnqsgaa.js → ro-3RKJNGJZ-xqj14e3d.js} +20 -5
- package/dist/{ro-WUYJV6OW-a8d9qy1n.js → ro-FLNXVYJI-ytrwabg2.js} +190 -10
- package/dist/ru-GSCT4ARZ-c2cfq4h1.js +7 -0
- package/dist/ru-WBLQ5B2U-bf20yr5y.js +7 -0
- package/dist/{rule-group-members-zje7n3kf.js → rule-group-members-p0nv1rmj.js} +1 -3
- package/dist/rule-type-declaration-s2nxpcfy.js +77 -0
- package/dist/{sdd-convert-service-8jpew7vz.js → sdd-convert-service-ffbx00k6.js} +481 -504
- package/dist/{sdd-lookup-fe900sdb.js → sdd-lookup-sah7wj5j.js} +8 -9
- package/dist/{sdd-resolve-service-qdtmxw9b.js → sdd-resolve-service-6nt10vhq.js} +28 -20
- package/dist/{sdd-resolve-siblings-phvwaj6j.js → sdd-resolve-siblings-5q28qcw8.js} +11 -14
- package/dist/solution-auth-a1p22hq1.js +11 -0
- package/dist/solution-discovery-r1y550sz.js +33 -0
- package/dist/{strict-case-rules-4tjcaznr.js → strict-case-rules-045kbjvv.js} +16 -28
- package/dist/{strict-entry-points-g2pd4mf4.js → strict-entry-points-40ha9afz.js} +15 -14
- package/dist/strict-sdd-audit-bp7fq2tg.js +26 -0
- package/dist/{task-selector-8bjn35dv.js → task-selector-jt60hdbt.js} +1 -3
- package/dist/{task-type-declaration-7a8fqdvs.js → task-type-declaration-yhczvj05.js} +9 -9
- package/dist/tool.js +18 -24
- package/dist/{tr-M3F5A6AU-bb0tg39m.js → tr-7AIZZWZ6-pdzp9n0p.js} +190 -10
- package/dist/{tr-GDTLECMM-k5fhmq13.js → tr-PQLUUHPC-qsb7btxn.js} +20 -5
- package/dist/{trigger-enrichment-service-82kcr49v.js → trigger-enrichment-service-r4gmxvka.js} +53 -57
- package/dist/trigger-entry-point-id-751v48qd.js +14 -0
- package/dist/{zh-CN-C5G4PC7C-ds9gkptg.js → zh-CN-CN2ARPFS-e0p2qrxf.js} +190 -10
- package/dist/{zh-CN-I5D7WHBD-sr5h0a98.js → zh-CN-OHNTHZRI-b0hjkfqn.js} +20 -5
- package/dist/{zh-TW-62HZIG6O-787kdwex.js → zh-TW-7RUFEVFK-qd7myw31.js} +190 -10
- package/dist/{zh-TW-2AVLM723-288pkc1z.js → zh-TW-E4D3Y6ZR-tn3bmzz5.js} +20 -5
- package/package.json +2 -2
- package/dist/canvas-notes-86fxx1t8.js +0 -19
- package/dist/case-event-trigger-bindings-g9ftnm4x.js +0 -16
- package/dist/case-schema-version-h820ne16.js +0 -20
- package/dist/case-shape-reader-dsbraetf.js +0 -13
- package/dist/connector-enrichment-service-95bqb0tb.js +0 -65
- package/dist/connector-lookup-service-3qx1qwrx.js +0 -22
- package/dist/connector-task-shape-mpazkf7s.js +0 -14
- package/dist/debug-service-7q98j726.js +0 -59
- package/dist/en-EJCBA3LK-dtpdghgj.js +0 -146
- package/dist/en-M7GQYBV2-5nfmpnfz.js +0 -2018
- package/dist/filter-engine-7ep90g7f.js +0 -11
- package/dist/first-party-service-srxaftkn.js +0 -27
- package/dist/index-04w3bbe8.js +0 -666
- package/dist/index-kmp9fmhb.js +0 -25
- package/dist/index-m93xazb6.js +0 -282
- package/dist/index-n9qvnx4x.js +0 -29
- package/dist/index-ngs0a2he.js +0 -15
- package/dist/index-xq6ajhgq.js +0 -157
- package/dist/index.umd.min-fqefd9kn.js +0 -7814
- package/dist/input-reader-c7wz8ra2.js +0 -11
- package/dist/known-types-5b6yrsqn.js +0 -16
- package/dist/localSolutionDiscovery-yyx234ak.js +0 -13
- package/dist/node-sync-service-ewkg1pgk.js +0 -57
- package/dist/packager-tool-0fsh78kt.js +0 -5365
- package/dist/packager-tool-53w8skv5.js +0 -262
- package/dist/packager-tool-6z1hsm2h.js +0 -143
- package/dist/packager-tool-8y4pceec.js +0 -13189
- package/dist/packager-tool-93mdeqay.js +0 -18
- package/dist/packager-tool-9kf3fqtr.js +0 -23
- package/dist/packager-tool-bfgdz1zh.js +0 -73
- package/dist/packager-tool-e15kqpyh.js +0 -266
- package/dist/packager-tool-jysvpt8p.js +0 -11
- package/dist/packager-tool-pcvhcn2k.js +0 -2019
- package/dist/packager-tool-rk25wp3c.js +0 -28
- package/dist/packager-tool-sc961w0q.js +0 -16
- package/dist/packager-tool-wekqkmgn.js +0 -265
- package/dist/packager-tool-yc4kw997.js +0 -13
- package/dist/ru-GSCT4ARZ-1sa9wbr8.js +0 -10
- package/dist/ru-WBLQ5B2U-s4em88p0.js +0 -10
- package/dist/solution-auth-30yycqtv.js +0 -14
- package/dist/solution-discovery-e9mamp6w.js +0 -38
- package/dist/strict-sdd-audit-q7tb9yj7.js +0 -25
- package/dist/trigger-entry-point-id-yhqwnkx9.js +0 -15
- /package/dist/{packager-tool-5qp9xza1.js → packager-tool-1c30ttpm.js} +0 -0
- /package/dist/{packager-tool-mknccck5.js → packager-tool-1h7abxw6.js} +0 -0
- /package/dist/{packager-tool-9y1w2wds.js → packager-tool-fcektt1g.js} +0 -0
- /package/dist/{packager-tool-k6jbedyc.js → packager-tool-hcdnc420.js} +0 -0
- /package/dist/{packager-tool-7nxppa3d.js → packager-tool-jv5byaww.js} +0 -0
- /package/dist/{packager-tool-qa9gftnj.js → packager-tool-mxgybnmt.js} +0 -0
- /package/dist/{packager-tool-87y6xw3a.js → packager-tool-nfhtwa72.js} +0 -0
- /package/dist/{packager-tool-cv05dwac.js → packager-tool-p0rdmmvk.js} +0 -0
- /package/dist/{packager-tool-21qfsbxn.js → packager-tool-yaertxsw.js} +0 -0
|
@@ -1,63 +1,128 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
contextEntries,
|
|
5
|
-
contextEntry,
|
|
6
|
-
missingContextKeys,
|
|
7
|
-
readActivityTypeId
|
|
8
|
-
} from "./packager-tool-cv05dwac.js";
|
|
2
|
+
getFileSystem2
|
|
3
|
+
} from "./packager-tool-z070caqq.js";
|
|
9
4
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from "./packager-tool-
|
|
5
|
+
catchError2,
|
|
6
|
+
logger
|
|
7
|
+
} from "./packager-tool-psmb758n.js";
|
|
13
8
|
import {
|
|
9
|
+
stripJsonStringGuard
|
|
10
|
+
} from "./packager-tool-h2ar8xf8.js";
|
|
11
|
+
import {
|
|
12
|
+
EXTERNAL_TASK_TYPES,
|
|
14
13
|
CONTAINER_INPUT_TASK_TYPES,
|
|
15
14
|
HTTP_REQUEST_REPAIR,
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
CONNECTOR_CALL_TASK_TYPES,
|
|
16
|
+
serviceTypesFor,
|
|
17
|
+
isMappedExecution,
|
|
18
|
+
serviceTypeFor
|
|
19
|
+
} from "./packager-tool-7x1tmb8a.js";
|
|
18
20
|
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
} from "./packager-tool-87y6xw3a.js";
|
|
21
|
+
RESULT_OUTPUT_NAME,
|
|
22
|
+
RESULT_OUTPUT_SOURCE
|
|
23
|
+
} from "./packager-tool-0w4fsdzv.js";
|
|
23
24
|
import {
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
contextEntries,
|
|
26
|
+
contextEntry,
|
|
27
|
+
missingContextKeys,
|
|
28
|
+
readActivityTypeId,
|
|
29
|
+
ACTIVITY_TYPE_ID_PATH,
|
|
30
|
+
activityTypeIdMessage
|
|
31
|
+
} from "./packager-tool-p0rdmmvk.js";
|
|
26
32
|
import {
|
|
27
33
|
validateIntSvcNode
|
|
28
|
-
} from "./packager-tool-
|
|
34
|
+
} from "./packager-tool-4wn3b7qp.js";
|
|
35
|
+
import"./packager-tool-q26hncjr.js";
|
|
36
|
+
import"./packager-tool-dn9d4ywm.js";
|
|
29
37
|
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
parseCaseSchemaVersion,
|
|
34
|
-
resolveCaseSchemaVersion
|
|
35
|
-
} from "./packager-tool-mqy97y5f.js";
|
|
38
|
+
gateKey,
|
|
39
|
+
canonicalVariableType
|
|
40
|
+
} from "./packager-tool-hcdnc420.js";
|
|
36
41
|
import {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
} from "./packager-tool-nj4seavy.js";
|
|
42
|
+
MIN_SUPPORTED_MAJOR2,
|
|
43
|
+
resolveCaseSchemaVersion2,
|
|
44
|
+
parseCaseSchemaVersion2,
|
|
45
|
+
compareCaseSchemaVersions2,
|
|
46
|
+
isNewerCaseSchemaPatch2
|
|
47
|
+
} from "./packager-tool-p5gs9xqy.js";
|
|
44
48
|
import {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
import"./packager-tool-qa9gftnj.js";
|
|
50
|
-
import"./packager-tool-yc4kw997.js";
|
|
49
|
+
NAME_BOUND_TASK_TYPES,
|
|
50
|
+
RESOLVED_IDENTITY_KEYS,
|
|
51
|
+
BINDING_REFERENCE_PREFIX
|
|
52
|
+
} from "./packager-tool-nfhtwa72.js";
|
|
51
53
|
import {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
} from "./packager-tool-83v804p7.js";
|
|
54
|
+
readRegistryLedger
|
|
55
|
+
} from "./packager-tool-z1fw9a8v.js";
|
|
55
56
|
import {
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
VALID_TASK_ENTRY_RULE_TYPES,
|
|
58
|
+
VALID_STAGE_ENTRY_RULE_TYPES,
|
|
59
|
+
VALID_STAGE_COMPLETION_RULE_TYPES,
|
|
60
|
+
VALID_STAGE_EXIT_RULE_TYPES,
|
|
61
|
+
VALID_CASE_COMPLETION_RULE_TYPES,
|
|
62
|
+
VALID_CASE_EXIT_RULE_TYPES
|
|
63
|
+
} from "./packager-tool-35c9npcy.js";
|
|
58
64
|
import {
|
|
59
|
-
|
|
60
|
-
} from "./packager-tool-
|
|
65
|
+
loadCaseSchemaAsync
|
|
66
|
+
} from "./packager-tool-zrbnms9b.js";
|
|
67
|
+
import"./packager-tool-68648y3j.js";
|
|
68
|
+
|
|
69
|
+
// src/services/case-validators/business-rule-output-validator.ts
|
|
70
|
+
var asRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
|
|
71
|
+
var OUTPUT_READ = `=${RESULT_OUTPUT_NAME}`;
|
|
72
|
+
var knownDecisions = (outputs) => {
|
|
73
|
+
for (const entry of outputs) {
|
|
74
|
+
const row = asRecord(entry);
|
|
75
|
+
if (row?.source !== RESULT_OUTPUT_SOURCE)
|
|
76
|
+
continue;
|
|
77
|
+
const schema = asRecord(row.body ?? row._jsonSchema);
|
|
78
|
+
const properties = asRecord(schema?.properties);
|
|
79
|
+
if (properties) {
|
|
80
|
+
const names = Object.keys(properties);
|
|
81
|
+
if (names.length > 0)
|
|
82
|
+
return new Set(names);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return;
|
|
86
|
+
};
|
|
87
|
+
var correctedSource = (source) => {
|
|
88
|
+
if (source === OUTPUT_READ)
|
|
89
|
+
return RESULT_OUTPUT_SOURCE;
|
|
90
|
+
if (source.startsWith(`${OUTPUT_READ}.`)) {
|
|
91
|
+
return `=${source.slice(OUTPUT_READ.length + 1)}`;
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
};
|
|
95
|
+
var businessRuleOutputSourceValidator = {
|
|
96
|
+
id: "uipath-business-rule-output-source",
|
|
97
|
+
appliesTo: (task) => task.type === "business-rule",
|
|
98
|
+
validate: (task, ctx) => {
|
|
99
|
+
const data = asRecord(task.data);
|
|
100
|
+
const outputs = Array.isArray(data?.outputs) ? data.outputs : [];
|
|
101
|
+
const decisions = knownDecisions(outputs);
|
|
102
|
+
if (decisions === undefined || decisions.has(RESULT_OUTPUT_NAME)) {
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
const name = task.displayName ?? task.id ?? "task";
|
|
106
|
+
const issues = [];
|
|
107
|
+
for (const entry of outputs) {
|
|
108
|
+
const row = asRecord(entry);
|
|
109
|
+
const source = row?.source;
|
|
110
|
+
if (typeof source !== "string")
|
|
111
|
+
continue;
|
|
112
|
+
const fix = correctedSource(source);
|
|
113
|
+
if (fix === undefined)
|
|
114
|
+
continue;
|
|
115
|
+
const label = String(row?.name ?? row?.id ?? "?");
|
|
116
|
+
issues.push({
|
|
117
|
+
code: "CASE_MGMT_BUSINESS_RULE_OUTPUT_SOURCE",
|
|
118
|
+
path: `nodes[${ctx.stageId}].data.tasks[${task.id ?? "?"}].data.outputs[${label}].source`,
|
|
119
|
+
message: `Business rule task "${name}" output "${label}" reads "${source}", but the rule's result is keyed by decision and has no "${RESULT_OUTPUT_NAME}" field, so the variable stays empty. Use "${fix}" instead.`,
|
|
120
|
+
severity: "error"
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return issues;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
61
126
|
|
|
62
127
|
// src/services/case-validators/connector-activity-validator.ts
|
|
63
128
|
var ACTIVITY_CONTEXT_KEYS = ["metadata", "objectName"];
|
|
@@ -82,13 +147,9 @@ var connectorActivityValidator = {
|
|
|
82
147
|
};
|
|
83
148
|
|
|
84
149
|
// src/services/case-validators/connector-validator.ts
|
|
85
|
-
var CONNECTOR_TASK_TYPES = new Set([
|
|
86
|
-
"execute-connector-activity",
|
|
87
|
-
"wait-for-connector"
|
|
88
|
-
]);
|
|
89
150
|
var connectorTaskValidator = {
|
|
90
151
|
id: "uipath-connector",
|
|
91
|
-
appliesTo: (task) =>
|
|
152
|
+
appliesTo: (task) => CONNECTOR_CALL_TASK_TYPES.has(task.type ?? ""),
|
|
92
153
|
validate: (task, ctx) => {
|
|
93
154
|
const data = task.data;
|
|
94
155
|
if (!data)
|
|
@@ -218,8 +279,8 @@ function validateCeqlFilterShape(taskId, stageId, inputs, configurationStr) {
|
|
|
218
279
|
return issues;
|
|
219
280
|
}
|
|
220
281
|
function readSavedFilterTrees(configurationStr) {
|
|
221
|
-
const jsonStr = configurationStr
|
|
222
|
-
const [, parsed] =
|
|
282
|
+
const jsonStr = stripJsonStringGuard(configurationStr);
|
|
283
|
+
const [, parsed] = catchError2(() => JSON.parse(jsonStr));
|
|
223
284
|
if (!parsed)
|
|
224
285
|
return;
|
|
225
286
|
const ec = parsed.essentialConfiguration;
|
|
@@ -324,7 +385,7 @@ var timerTaskValidator = {
|
|
|
324
385
|
};
|
|
325
386
|
// src/services/case-validators/strict-task-validators.ts
|
|
326
387
|
var TRIGGER_TASK_TYPES = new Set(["wait-for-connector"]);
|
|
327
|
-
var
|
|
388
|
+
var asRecord2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
|
|
328
389
|
var asArray = (value) => Array.isArray(value) ? value : [];
|
|
329
390
|
var VARS_READS = [
|
|
330
391
|
/\bvars\.([A-Za-z_$][A-Za-z0-9_$]*)/g,
|
|
@@ -339,9 +400,27 @@ var readsIdentifier = (expression, name) => {
|
|
|
339
400
|
}
|
|
340
401
|
return false;
|
|
341
402
|
};
|
|
342
|
-
var taskData = (task) =>
|
|
403
|
+
var taskData = (task) => asRecord2(task.data);
|
|
343
404
|
var taskLabel = (task) => task.displayName ?? task.id ?? "task";
|
|
344
405
|
var taskPath = (stageId, task) => `nodes[${stageId}].data.tasks[${task.id ?? "?"}]`;
|
|
406
|
+
var serviceTypeMismatch = (task, stageId, context) => {
|
|
407
|
+
const executionValue = contextEntry(context, "executionType")?.value;
|
|
408
|
+
const executionType = typeof executionValue === "string" ? executionValue : undefined;
|
|
409
|
+
const expected = EXTERNAL_TASK_TYPES.has(task.type ?? "") && isMappedExecution(executionType) ? [serviceTypeFor(task.type ?? "", executionType)] : serviceTypesFor(task.type ?? "");
|
|
410
|
+
const rawServiceType = taskData(task)?.serviceType;
|
|
411
|
+
const serviceType = typeof rawServiceType === "string" ? rawServiceType : undefined;
|
|
412
|
+
if (expected.length === 0 || serviceType !== undefined && expected.includes(serviceType)) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
const declares = serviceType === undefined ? "declares no serviceType" : `declares serviceType "${serviceType}"`;
|
|
416
|
+
const allowed = expected.map((type) => `"${type}"`).join(" or ") + (expected.length === 1 && executionType !== undefined ? ` (its executionType is "${executionType}")` : "");
|
|
417
|
+
return {
|
|
418
|
+
code: "STRICT_CONNECTOR_SERVICE_TYPE",
|
|
419
|
+
path: `${taskPath(stageId, task)}.data.serviceType`,
|
|
420
|
+
severity: "error",
|
|
421
|
+
message: `Connector task "${taskLabel(task)}" ${declares}; a "${task.type}" task must declare ${allowed}.`
|
|
422
|
+
};
|
|
423
|
+
};
|
|
345
424
|
var strictConnectorContextValidator = {
|
|
346
425
|
id: "strict-connector-context",
|
|
347
426
|
appliesTo: (task) => CONTAINER_INPUT_TASK_TYPES.has(task.type ?? "") && Object.keys(taskData(task) ?? {}).length > 0,
|
|
@@ -369,26 +448,10 @@ var strictConnectorContextValidator = {
|
|
|
369
448
|
});
|
|
370
449
|
}
|
|
371
450
|
}
|
|
372
|
-
const
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
issues.push({
|
|
377
|
-
code: "STRICT_CONNECTOR_SERVICE_TYPE",
|
|
378
|
-
path: `${taskPath(ctx.stageId, task)}.data.serviceType`,
|
|
379
|
-
severity: "error",
|
|
380
|
-
message: `Connector task "${taskLabel(task)}" declares ` + `serviceType "${String(serviceType)}"; a ` + `"${task.type}" task must declare ` + `"${expectedServiceType}".`
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
} else if (expectedServiceType !== undefined) {
|
|
384
|
-
issues.push({
|
|
385
|
-
code: "STRICT_CONNECTOR_SERVICE_TYPE",
|
|
386
|
-
path: `${taskPath(ctx.stageId, task)}.data.serviceType`,
|
|
387
|
-
severity: "error",
|
|
388
|
-
message: `Connector task "${taskLabel(task)}" declares no ` + `serviceType; a "${task.type}" task must declare ` + `"${expectedServiceType}".`
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
const bodyInput = TRIGGER_TASK_TYPES.has(task.type ?? "") ? undefined : asArray(taskData(task)?.inputs).map((entry) => asRecord(entry)).find((entry) => entry?.name === "body");
|
|
451
|
+
const serviceTypeIssue = serviceTypeMismatch(task, ctx.stageId, context);
|
|
452
|
+
if (serviceTypeIssue !== undefined)
|
|
453
|
+
issues.push(serviceTypeIssue);
|
|
454
|
+
const bodyInput = TRIGGER_TASK_TYPES.has(task.type ?? "") ? undefined : asArray(taskData(task)?.inputs).map((entry) => asRecord2(entry)).find((entry) => entry?.name === "body");
|
|
392
455
|
if (bodyInput !== undefined && !bodyInput.target) {
|
|
393
456
|
issues.push({
|
|
394
457
|
code: "STRICT_CONNECTOR_BODY_TARGET",
|
|
@@ -449,12 +512,12 @@ var strictOutputShapeValidator = {
|
|
|
449
512
|
const base = `${taskPath(ctx.stageId, task)}.data.outputs`;
|
|
450
513
|
const writtenAt = new Map;
|
|
451
514
|
asArray(taskData(task)?.outputs).forEach((entry, index) => {
|
|
452
|
-
const name =
|
|
515
|
+
const name = asRecord2(entry)?.var;
|
|
453
516
|
if (typeof name === "string" && name !== "" && !writtenAt.has(name))
|
|
454
517
|
writtenAt.set(name, index);
|
|
455
518
|
});
|
|
456
519
|
asArray(taskData(task)?.outputs).forEach((entry, index) => {
|
|
457
|
-
const output =
|
|
520
|
+
const output = asRecord2(entry);
|
|
458
521
|
if (!output)
|
|
459
522
|
return;
|
|
460
523
|
const label = typeof output.name === "string" ? output.name : `#${index}`;
|
|
@@ -495,7 +558,7 @@ var strictInputReferenceValidator = {
|
|
|
495
558
|
const issues = [];
|
|
496
559
|
const base = `${taskPath(ctx.stageId, task)}.data.inputs`;
|
|
497
560
|
asArray(taskData(task)?.inputs).forEach((entry, index) => {
|
|
498
|
-
const input =
|
|
561
|
+
const input = asRecord2(entry);
|
|
499
562
|
if (!input)
|
|
500
563
|
return;
|
|
501
564
|
const label = typeof input.name === "string" ? input.name : `#${index}`;
|
|
@@ -579,7 +642,8 @@ var defaultTaskValidators = [
|
|
|
579
642
|
connectorActivityValidator,
|
|
580
643
|
timerTaskValidator,
|
|
581
644
|
taskElementIdValidator,
|
|
582
|
-
unconfiguredTaskValidator
|
|
645
|
+
unconfiguredTaskValidator,
|
|
646
|
+
businessRuleOutputSourceValidator
|
|
583
647
|
];
|
|
584
648
|
|
|
585
649
|
// src/services/registry-ledger-lookup.ts
|
|
@@ -594,10 +658,10 @@ var findRegistryLedger = async (fs, casePlanPath) => {
|
|
|
594
658
|
for (const candidate of candidates) {
|
|
595
659
|
if (!await fs.exists(candidate))
|
|
596
660
|
continue;
|
|
597
|
-
const [readError, text] = await
|
|
661
|
+
const [readError, text] = await catchError2(fs.readFile(candidate, "utf-8"));
|
|
598
662
|
if (readError || text === undefined || text === null)
|
|
599
663
|
continue;
|
|
600
|
-
const [parseError, document] = await
|
|
664
|
+
const [parseError, document] = await catchError2(Promise.resolve().then(() => JSON.parse(text)));
|
|
601
665
|
if (parseError) {
|
|
602
666
|
logger.warn(`Ignored ${candidate}: not JSON, so a placeholder it might justify still reports as unresolved work.`);
|
|
603
667
|
continue;
|
|
@@ -615,9 +679,9 @@ var findRegistryLedger = async (fs, casePlanPath) => {
|
|
|
615
679
|
|
|
616
680
|
// src/services/variable-type-findings.ts
|
|
617
681
|
var GROUPS = ["inputs", "outputs", "inputOutputs"];
|
|
618
|
-
var
|
|
682
|
+
var asRecord3 = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : undefined;
|
|
619
683
|
var variableTypeFindings = (parsed) => {
|
|
620
|
-
const variables =
|
|
684
|
+
const variables = asRecord3(parsed.variables);
|
|
621
685
|
if (variables === undefined)
|
|
622
686
|
return [];
|
|
623
687
|
const issues = [];
|
|
@@ -626,7 +690,7 @@ var variableTypeFindings = (parsed) => {
|
|
|
626
690
|
if (!Array.isArray(entries))
|
|
627
691
|
continue;
|
|
628
692
|
for (const [at, raw] of entries.entries()) {
|
|
629
|
-
const entry =
|
|
693
|
+
const entry = asRecord3(raw);
|
|
630
694
|
const type = entry?.type;
|
|
631
695
|
if (typeof type !== "string")
|
|
632
696
|
continue;
|
|
@@ -671,7 +735,7 @@ var SKELETON_V2_SKIPPED_CANVAS_CODES = new Set([
|
|
|
671
735
|
"CASE_MGMT_ROOT_CASE_CONDITION_RULE_SELECTED_TASK_MISSING",
|
|
672
736
|
"CASE_MGMT_ROOT_CASE_CONDITION_RULE_NO_REQUIRED_TASK"
|
|
673
737
|
]);
|
|
674
|
-
var isTaskScopedCanvasIssue = (
|
|
738
|
+
var isTaskScopedCanvasIssue = (issue) => SKELETON_V2_SKIPPED_CANVAS_CODES.has(issue.code) || issue.additionalErrorInfo?.taskId !== undefined;
|
|
675
739
|
function findLegacySpellings(parsed, profile) {
|
|
676
740
|
const issues = [];
|
|
677
741
|
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
@@ -748,7 +812,7 @@ var findXrefMarkers = (document) => {
|
|
|
748
812
|
return found;
|
|
749
813
|
};
|
|
750
814
|
var TASK_SLOTS = ["inputs", "outputs"];
|
|
751
|
-
var parsesAsJsonValue = (text) =>
|
|
815
|
+
var parsesAsJsonValue = (text) => catchError2(() => JSON.parse(text))[0] === undefined;
|
|
752
816
|
function* taskSlotEntries(nodes, slots = TASK_SLOTS) {
|
|
753
817
|
for (const node of nodes) {
|
|
754
818
|
const nodeId = typeof node.id === "string" ? node.id : "?";
|
|
@@ -759,9 +823,9 @@ function* taskSlotEntries(nodes, slots = TASK_SLOTS) {
|
|
|
759
823
|
if (taskRecord === undefined)
|
|
760
824
|
continue;
|
|
761
825
|
const taskId = typeof taskRecord.id === "string" ? taskRecord.id : "?";
|
|
762
|
-
const
|
|
826
|
+
const taskData = asRecordValue(taskRecord.data);
|
|
763
827
|
for (const slot of slots) {
|
|
764
|
-
for (const [index, value] of asArrayValue(
|
|
828
|
+
for (const [index, value] of asArrayValue(taskData?.[slot]).entries()) {
|
|
765
829
|
const entry = asRecordValue(value);
|
|
766
830
|
const name = typeof entry?.name === "string" ? entry.name : `#${index}`;
|
|
767
831
|
yield {
|
|
@@ -806,10 +870,6 @@ var findUnparseableJsonValues = (nodes) => {
|
|
|
806
870
|
}
|
|
807
871
|
return found;
|
|
808
872
|
};
|
|
809
|
-
var CONNECTOR_TASK_TYPES2 = new Set([
|
|
810
|
-
"execute-connector-activity",
|
|
811
|
-
"wait-for-connector"
|
|
812
|
-
]);
|
|
813
873
|
var CONNECTOR_INPUT_ENVELOPE = new Set([
|
|
814
874
|
"pathParameters",
|
|
815
875
|
"queryParameters",
|
|
@@ -839,7 +899,7 @@ var findConnectorInputDefects = (nodes) => {
|
|
|
839
899
|
"inputs"
|
|
840
900
|
])) {
|
|
841
901
|
const type = task.type;
|
|
842
|
-
if (typeof type !== "string" || !
|
|
902
|
+
if (typeof type !== "string" || !CONNECTOR_CALL_TASK_TYPES.has(type)) {
|
|
843
903
|
continue;
|
|
844
904
|
}
|
|
845
905
|
if (typeof input?.name !== "string" || input.name === "")
|
|
@@ -1186,9 +1246,9 @@ var collectReferenceableIds = (document) => {
|
|
|
1186
1246
|
for (const entry of asArrayValue(record[key])) {
|
|
1187
1247
|
const slot = asRecordValue(entry);
|
|
1188
1248
|
for (const attribute of ["id", "name", "var"]) {
|
|
1189
|
-
const
|
|
1190
|
-
if (typeof
|
|
1191
|
-
ids.add(
|
|
1249
|
+
const value = slot?.[attribute];
|
|
1250
|
+
if (typeof value === "string" && value !== "") {
|
|
1251
|
+
ids.add(value);
|
|
1192
1252
|
}
|
|
1193
1253
|
}
|
|
1194
1254
|
}
|
|
@@ -1275,13 +1335,13 @@ var findSchemaTypeMismatches = (parsed, migrationError) => {
|
|
|
1275
1335
|
const opens = migrationError.indexOf("[");
|
|
1276
1336
|
if (opens === -1)
|
|
1277
1337
|
return [];
|
|
1278
|
-
const [, frames] =
|
|
1338
|
+
const [, frames] = catchError2(() => JSON.parse(migrationError.slice(opens)));
|
|
1279
1339
|
const found = [];
|
|
1280
1340
|
for (const frame of asArrayValue(frames)) {
|
|
1281
|
-
const
|
|
1282
|
-
if (
|
|
1341
|
+
const issue = asRecordValue(frame);
|
|
1342
|
+
if (issue?.code !== "invalid_type")
|
|
1283
1343
|
continue;
|
|
1284
|
-
const segments = asArrayValue(
|
|
1344
|
+
const segments = asArrayValue(issue.path);
|
|
1285
1345
|
const field = segments.at(-1);
|
|
1286
1346
|
if (typeof field !== "string")
|
|
1287
1347
|
continue;
|
|
@@ -1305,8 +1365,8 @@ var findSchemaTypeMismatches = (parsed, migrationError) => {
|
|
|
1305
1365
|
parts.push(String(segment));
|
|
1306
1366
|
}
|
|
1307
1367
|
const withArticle = (noun) => /^[aeiou]/i.test(noun) ? `an ${noun}` : `a ${noun}`;
|
|
1308
|
-
const expected = withArticle(typeof
|
|
1309
|
-
const received = typeof
|
|
1368
|
+
const expected = withArticle(typeof issue.expected === "string" ? issue.expected : "another type");
|
|
1369
|
+
const received = typeof issue.message === "string" && issue.message.includes("received ") ? issue.message.slice(issue.message.indexOf("received ") + 9) : "something else";
|
|
1310
1370
|
const where = task !== undefined ? ` on task "${labelOf(task, "?")}"` : node !== undefined ? ` on "${labelOf(node, "?")}"` : "";
|
|
1311
1371
|
found.push({
|
|
1312
1372
|
path: parts.join("."),
|
|
@@ -1328,16 +1388,16 @@ var findConnectorTasksWithoutInputs = (nodes, bindings) => {
|
|
|
1328
1388
|
return found;
|
|
1329
1389
|
const record = asRecordValue(task);
|
|
1330
1390
|
const type = record?.type;
|
|
1331
|
-
const
|
|
1332
|
-
if (typeof type !== "string" || !CONTAINER_INPUT_TASK_TYPES.has(type) ||
|
|
1391
|
+
const taskData = asRecordValue(record?.data);
|
|
1392
|
+
if (typeof type !== "string" || !CONTAINER_INPUT_TASK_TYPES.has(type) || taskData === undefined) {
|
|
1333
1393
|
continue;
|
|
1334
1394
|
}
|
|
1335
|
-
const context =
|
|
1395
|
+
const context = taskData.context;
|
|
1336
1396
|
if (contextEntries(context).length === 0)
|
|
1337
1397
|
continue;
|
|
1338
1398
|
if (missingContextKeys(context, type === "wait-for-connector", bindings).length > 0)
|
|
1339
1399
|
continue;
|
|
1340
|
-
const inputs =
|
|
1400
|
+
const inputs = taskData.inputs;
|
|
1341
1401
|
if (inputs !== undefined && !Array.isArray(inputs))
|
|
1342
1402
|
continue;
|
|
1343
1403
|
if (Array.isArray(inputs) && inputs.length > 0)
|
|
@@ -1448,14 +1508,14 @@ var findLiteralResourceBindings = (nodes) => {
|
|
|
1448
1508
|
return found;
|
|
1449
1509
|
const record = asRecordValue(task);
|
|
1450
1510
|
const type = record?.type;
|
|
1451
|
-
const
|
|
1452
|
-
if (typeof type !== "string" || !NAME_BOUND_TASK_TYPES.has(type) ||
|
|
1511
|
+
const taskData = asRecordValue(record?.data);
|
|
1512
|
+
if (typeof type !== "string" || !NAME_BOUND_TASK_TYPES.has(type) || taskData === undefined) {
|
|
1453
1513
|
continue;
|
|
1454
1514
|
}
|
|
1455
|
-
if (RESOLVED_IDENTITY_KEYS.some((k) => (k in
|
|
1515
|
+
if (RESOLVED_IDENTITY_KEYS.some((k) => (k in taskData)))
|
|
1456
1516
|
continue;
|
|
1457
1517
|
const fields = ["name", "folderPath"].filter((field) => {
|
|
1458
|
-
const value =
|
|
1518
|
+
const value = taskData[field];
|
|
1459
1519
|
return typeof value === "string" && value !== "" && !value.startsWith(BINDING_REFERENCE_PREFIX);
|
|
1460
1520
|
});
|
|
1461
1521
|
if (fields.length === 0)
|
|
@@ -1581,13 +1641,13 @@ var findDuplicateOutputNames = (parsed) => {
|
|
|
1581
1641
|
if (found.length >= AUTHORING_MARKER_LIMIT)
|
|
1582
1642
|
return found;
|
|
1583
1643
|
const taskRecord = asRecordValue(task);
|
|
1584
|
-
const
|
|
1585
|
-
if (taskRecord === undefined ||
|
|
1644
|
+
const taskData = asRecordValue(taskRecord?.data);
|
|
1645
|
+
if (taskRecord === undefined || taskData === undefined) {
|
|
1586
1646
|
continue;
|
|
1587
1647
|
}
|
|
1588
1648
|
const label = labelOf(taskRecord, "?");
|
|
1589
1649
|
const seen = new Map;
|
|
1590
|
-
for (const output of asArrayValue(
|
|
1650
|
+
for (const output of asArrayValue(taskData.outputs)) {
|
|
1591
1651
|
const name = asRecordValue(output)?.name;
|
|
1592
1652
|
if (typeof name !== "string" || name === "")
|
|
1593
1653
|
continue;
|
|
@@ -1622,12 +1682,12 @@ var findDuplicateOutputIds = (parsed) => {
|
|
|
1622
1682
|
if (found.length >= AUTHORING_MARKER_LIMIT)
|
|
1623
1683
|
return found;
|
|
1624
1684
|
const taskRecord = asRecordValue(task);
|
|
1625
|
-
const
|
|
1626
|
-
if (taskRecord === undefined ||
|
|
1685
|
+
const taskData = asRecordValue(taskRecord?.data);
|
|
1686
|
+
if (taskRecord === undefined || taskData === undefined) {
|
|
1627
1687
|
continue;
|
|
1628
1688
|
}
|
|
1629
1689
|
const name = labelOf(taskRecord, "?");
|
|
1630
|
-
for (const output of asArrayValue(
|
|
1690
|
+
for (const output of asArrayValue(taskData.outputs)) {
|
|
1631
1691
|
const id = asRecordValue(output)?.id;
|
|
1632
1692
|
if (typeof id !== "string" || id === "")
|
|
1633
1693
|
continue;
|
|
@@ -1700,6 +1760,7 @@ var CONNECTOR_BINDING_ATTRIBUTES = new Set([
|
|
|
1700
1760
|
"connection"
|
|
1701
1761
|
]);
|
|
1702
1762
|
var CONNECTOR_BINDING_RESOURCES = new Set(["connection", "folder"]);
|
|
1763
|
+
var NAME_ONLY_BINDING_RESOURCES = new Set(["ixpdeployment"]);
|
|
1703
1764
|
var storedPickerFolderSlots = (parsed) => {
|
|
1704
1765
|
const slots = new Map;
|
|
1705
1766
|
const visit = (node) => {
|
|
@@ -1730,6 +1791,7 @@ var storedPickerFolderSlots = (parsed) => {
|
|
|
1730
1791
|
var findIncompleteBindingPairs = (parsed) => {
|
|
1731
1792
|
const pickerFolderSlots = storedPickerFolderSlots(parsed);
|
|
1732
1793
|
const attributes = new Map;
|
|
1794
|
+
const nameOnly = new Set;
|
|
1733
1795
|
for (const entry of asArrayValue(parsed.bindings)) {
|
|
1734
1796
|
const binding = asRecordValue(entry);
|
|
1735
1797
|
const key = binding?.resourceKey;
|
|
@@ -1749,6 +1811,8 @@ var findIncompleteBindingPairs = (parsed) => {
|
|
|
1749
1811
|
const seen = attributes.get(key) ?? new Set;
|
|
1750
1812
|
seen.add(attribute);
|
|
1751
1813
|
attributes.set(key, seen);
|
|
1814
|
+
if (typeof resource === "string" && NAME_ONLY_BINDING_RESOURCES.has(resource.toLowerCase()))
|
|
1815
|
+
nameOnly.add(key);
|
|
1752
1816
|
}
|
|
1753
1817
|
const found = [];
|
|
1754
1818
|
for (const [key, seen] of attributes) {
|
|
@@ -1756,7 +1820,7 @@ var findIncompleteBindingPairs = (parsed) => {
|
|
|
1756
1820
|
return found;
|
|
1757
1821
|
const hasName = seen.has("name");
|
|
1758
1822
|
const folderSlot = pickerFolderSlots.get(key.toLowerCase());
|
|
1759
|
-
const hasFolder = folderSlot === undefined ? seen.has("folderPath") : !folderSlot || seen.has("folderKey");
|
|
1823
|
+
const hasFolder = nameOnly.has(key) || (folderSlot === undefined ? seen.has("folderPath") : !folderSlot || seen.has("folderKey"));
|
|
1760
1824
|
if (hasName && hasFolder)
|
|
1761
1825
|
continue;
|
|
1762
1826
|
const folderAttribute = folderSlot === undefined ? "folderPath" : "folderKey";
|
|
@@ -1780,8 +1844,8 @@ var findRecipientShapeDefects = (nodes) => {
|
|
|
1780
1844
|
if (found.length >= AUTHORING_MARKER_LIMIT)
|
|
1781
1845
|
return found;
|
|
1782
1846
|
const record = asRecordValue(task);
|
|
1783
|
-
const
|
|
1784
|
-
const recipient =
|
|
1847
|
+
const taskData = asRecordValue(record?.data);
|
|
1848
|
+
const recipient = taskData?.recipient;
|
|
1785
1849
|
if (recipient === undefined || recipient === null)
|
|
1786
1850
|
continue;
|
|
1787
1851
|
if (asRecordValue(recipient) !== undefined)
|
|
@@ -1896,7 +1960,7 @@ class CaseValidateService {
|
|
|
1896
1960
|
fs;
|
|
1897
1961
|
taskValidators;
|
|
1898
1962
|
constructor(options = {}) {
|
|
1899
|
-
this.fs =
|
|
1963
|
+
this.fs = getFileSystem2();
|
|
1900
1964
|
this.taskValidators = [
|
|
1901
1965
|
...defaultTaskValidators,
|
|
1902
1966
|
...options.extraTaskValidators ?? []
|
|
@@ -1933,20 +1997,20 @@ class CaseValidateService {
|
|
|
1933
1997
|
message: `This ${slot === "inputs" ? "input" : "output"} value ` + `starts with the SDD's planning notation ("<-" or "->"), ` + "which describes where a value comes from rather than " + "being a value. Replace it with the expression it " + 'describes — an "=vars.<id>" reference, an "=bindings.<id>" ' + "reference, or a literal."
|
|
1934
1998
|
});
|
|
1935
1999
|
}
|
|
1936
|
-
for (const { path, name
|
|
2000
|
+
for (const { path, name } of taskContent ? findUnparseableJsonValues(nodes) : []) {
|
|
1937
2001
|
issues.push({
|
|
1938
2002
|
code: "CASE_MGMT_VALUE_JSON_INVALID",
|
|
1939
2003
|
path,
|
|
1940
2004
|
severity: "error",
|
|
1941
|
-
message: `Value of "${
|
|
2005
|
+
message: `Value of "${name}" opens with "{" or "[" but is not ` + "valid JSON, so the runtime cannot read it as the " + "structure it announces. A truncated copy, or a markdown " + "fence character (`) picked up with the value, is the " + "usual cause."
|
|
1942
2006
|
});
|
|
1943
2007
|
}
|
|
1944
|
-
for (const { path, name
|
|
2008
|
+
for (const { path, name, kind, target } of taskContent ? findConnectorInputDefects(nodes) : []) {
|
|
1945
2009
|
const CONNECTOR_INPUT_MESSAGES = {
|
|
1946
|
-
flattened: `Connector input "${
|
|
1947
|
-
stringified: `Connector input "${
|
|
1948
|
-
misplaced: `Connector input "${
|
|
1949
|
-
mistargeted: `Connector input "${
|
|
2010
|
+
flattened: `Connector input "${name}" is not one of the three containers an Integration Service activity declares (pathParameters, queryParameters, body). A field spliced in at the top level is not passed: put it inside the container's \`body\` object.`,
|
|
2011
|
+
stringified: `Connector input "${name}" carries its payload as JSON text in \`value\`. The container takes a \`body\` object, so a serialised string is passed through as a string and the activity receives no fields.`,
|
|
2012
|
+
misplaced: `Connector input "${name}" carries its fields in \`value\` and has no \`body\`. A json container is read from \`body\` — \`value\` holds a scalar, and only for a string-typed entry — so the activity runs with this container empty. Move the object into \`body\`.`,
|
|
2013
|
+
mistargeted: `Connector input "${name}" targets \`${target ?? ""}\`. Every reader keys on the input's \`name\`, and the three containers are emitted with \`target\` equal to it, so this fills \`${name}\` and leaves \`${target ?? ""}\` empty. Rename the entry to the container its fields belong to, or set \`target\` to match \`${name}\`.`
|
|
1950
2014
|
};
|
|
1951
2015
|
const CONNECTOR_INPUT_CODES = {
|
|
1952
2016
|
flattened: "CASE_MGMT_CONNECTOR_INPUT_FLATTENED",
|
|
@@ -1961,28 +2025,28 @@ class CaseValidateService {
|
|
|
1961
2025
|
message: CONNECTOR_INPUT_MESSAGES[kind]
|
|
1962
2026
|
});
|
|
1963
2027
|
}
|
|
1964
|
-
for (const { path, name
|
|
2028
|
+
for (const { path, name } of taskContent ? findReassignedOutputsWithoutOriginalVar(parsed) : []) {
|
|
1965
2029
|
issues.push({
|
|
1966
2030
|
code: "CASE_MGMT_OUTPUT_ORIGINAL_VAR_MISSING",
|
|
1967
2031
|
path,
|
|
1968
2032
|
severity: "error",
|
|
1969
|
-
message: `Output "${
|
|
2033
|
+
message: `Output "${name}" writes to a variable other than its ` + "own id but carries no `originalVar`. That field is how " + "the designer recognises a reassigned output: without " + "it the output reads as a plain one and goes down the " + "path that allocates a fresh variable by name, so the " + "plan the designer opens is not the one written here. " + "Set `originalVar` to this output's own id."
|
|
1970
2034
|
});
|
|
1971
2035
|
}
|
|
1972
|
-
for (const { path, name
|
|
2036
|
+
for (const { path, name } of taskContent ? findVarIdCaseMismatches(parsed) : []) {
|
|
1973
2037
|
issues.push({
|
|
1974
2038
|
code: "CASE_MGMT_OUTPUT_VAR_ID_CASE_MISMATCH",
|
|
1975
2039
|
path,
|
|
1976
2040
|
severity: "error",
|
|
1977
|
-
message: `Output "${
|
|
2041
|
+
message: `Output "${name}" has an id and a var that differ only ` + "by casing. A renamed output keeps its own id on " + "purpose, but nothing renames a value to the same word " + "in a different case — so this is one name typed two " + "ways, and the case variable it declares carries a " + "spelling no reference written from the id will match. " + "Make the two agree."
|
|
1978
2042
|
});
|
|
1979
2043
|
}
|
|
1980
|
-
for (const { path, name
|
|
2044
|
+
for (const { path, name, hasValue } of taskContent ? findMisplacedEnvelopeBodies(nodes) : []) {
|
|
1981
2045
|
issues.push({
|
|
1982
2046
|
code: "CASE_MGMT_INPUT_BODY_ON_PLAIN_TASK",
|
|
1983
2047
|
path,
|
|
1984
2048
|
severity: "error",
|
|
1985
|
-
message: `Input "${
|
|
2049
|
+
message: `Input "${name}" carries its fields in \`body\`, which ` + "only a connector input has. This task type reads " + `\`value\`, so ${hasValue ? "the fields under `body` are ignored and the task runs on `value` alone" : "nothing reaches the task for it at all"}. ` + "Move the object into `value` — as a native object, or " + "JSON text if that is what the task expects."
|
|
1986
2050
|
});
|
|
1987
2051
|
}
|
|
1988
2052
|
for (const { path, holder, dead } of slaContent ? findUnreachableSlaRules(parsed) : []) {
|
|
@@ -2059,20 +2123,20 @@ class CaseValidateService {
|
|
|
2059
2123
|
message: `"${value}" resolves through nothing. \`metadata\` is a ` + "namespace the runtime puts in scope inside a `=js:` " + "expression, not a path prefix that routes one — there " + "is no `=metadata.` prefix, so unlike `=vars.` or " + "`=bindings.` this reads no value and the plan still " + `validates. Write it as \`=js:${value.slice(1)}\`.`
|
|
2060
2124
|
});
|
|
2061
2125
|
}
|
|
2062
|
-
for (const { path, name
|
|
2126
|
+
for (const { path, name, fields } of taskContent ? findLiteralResourceBindings(nodes) : []) {
|
|
2063
2127
|
issues.push({
|
|
2064
2128
|
code: "CASE_MGMT_RESOURCE_TASK_LITERAL_BINDING",
|
|
2065
2129
|
path,
|
|
2066
2130
|
severity: "error",
|
|
2067
|
-
message: `Task "${
|
|
2131
|
+
message: `Task "${name}" names its resource with ` + `${fields.length === 1 ? "a literal" : "literals"}: ` + `${fields.join(" and ")}. A resource task's \`name\` and ` + `\`folderPath\` are \`${BINDING_REFERENCE_PREFIX}<id>\` ` + "references — the bindings array is what 'uip solution " + "resources refresh' resolves and what bindings_v2.json is " + "derived from, so a plain string names something the " + "solution never resolves and no binding exists for it. " + "Add the name/folderPath binding pair and point both " + "fields at it."
|
|
2068
2132
|
});
|
|
2069
2133
|
}
|
|
2070
|
-
for (const { path, name
|
|
2134
|
+
for (const { path, name, actual } of taskContent ? findRecipientShapeDefects(nodes) : []) {
|
|
2071
2135
|
issues.push({
|
|
2072
2136
|
code: "CASE_MGMT_ACTION_RECIPIENT_SHAPE",
|
|
2073
2137
|
path,
|
|
2074
2138
|
severity: "error",
|
|
2075
|
-
message: `Task "${
|
|
2139
|
+
message: `Task "${name}" writes \`recipient\` as ${actual}. The ` + 'shape is `{ "Type": <n>, "Value": "<who>" }` — a bare ' + "value carries no type, so the assignment resolves to " + "nobody and the task is created unassigned. Wrap it, " + "keeping the value."
|
|
2076
2140
|
});
|
|
2077
2141
|
}
|
|
2078
2142
|
for (const { path, value } of taskContent ? findUnresolvedConnectorResourceKeys(parsed) : []) {
|
|
@@ -2091,20 +2155,20 @@ class CaseValidateService {
|
|
|
2091
2155
|
message: `This context's \`resourceKey\` is "${value}", which is ` + `not the key of the connection \`${binding}\` that its ` + "own `connection` entry names. The runtime resolves the " + "connection through this key, so the connector never " + `fires. ${elsewhere === undefined ? "The usual cause is the objectName copied into it. Set it to that binding's resolved connection key." : `That key belongs to \`${elsewhere}\`, so the wrong field may be the \`connection\` entry: decide which connection this context is for, then make both name it. Setting the key from \`${binding}\` without checking repairs this into a plan that is consistently wrong.`}`
|
|
2092
2156
|
});
|
|
2093
2157
|
}
|
|
2094
|
-
for (const { path, name
|
|
2158
|
+
for (const { path, name, type } of taskContent ? findConnectorTasksWithoutInputs(nodes, parsed.bindings) : []) {
|
|
2095
2159
|
issues.push({
|
|
2096
2160
|
code: "CASE_MGMT_CONNECTOR_INPUTS_EMPTY",
|
|
2097
2161
|
path,
|
|
2098
2162
|
severity: "error",
|
|
2099
|
-
message: `Connector task "${
|
|
2163
|
+
message: `Connector task "${name}" has a spliced \`data.context\` ` + "but no inputs. The context comes from the case spec " + "response, so the spec was fetched and read; " + "`data.inputs` is the `CaseShape.Inputs` splice from that " + "same response, and an empty array means that splice was " + "skipped. Nothing else reports it — the shape is " + "internally consistent and every container check has " + "nothing to look at — while the activity runs with no " + "parameters at all. " + (type === "http-request" ? HTTP_REQUEST_REPAIR : "Splice `CaseShape.Inputs` from the case spec response.")
|
|
2100
2164
|
});
|
|
2101
2165
|
}
|
|
2102
|
-
for (const { path, name
|
|
2166
|
+
for (const { path, name, task } of taskContent ? findDuplicateOutputNames(parsed) : []) {
|
|
2103
2167
|
issues.push({
|
|
2104
2168
|
code: "CASE_MGMT_OUTPUT_NAME_DUPLICATE",
|
|
2105
2169
|
path,
|
|
2106
2170
|
severity: "error",
|
|
2107
|
-
message: `Task "${task}" has two outputs named "${
|
|
2171
|
+
message: `Task "${task}" has two outputs named "${name}". The ` + "parser keeps one row per name, so the other is dropped " + "and whatever it wrote is never written. A duplicate " + "`id` is reported separately and cannot see this one: " + "the dropped row often carries no id at all. Emit one " + "output for the value, carrying the id other tasks " + "reference it by."
|
|
2108
2172
|
});
|
|
2109
2173
|
}
|
|
2110
2174
|
for (const { path, id, first, second } of taskContent ? findDuplicateOutputIds(parsed) : []) {
|
|
@@ -2115,12 +2179,12 @@ class CaseValidateService {
|
|
|
2115
2179
|
message: `Output id "${id}" is used by two tasks (${first} and ` + `${second}). An output id is the write target, so the ` + "second write lands on the first task's variable and one " + "of the two values is gone. Give each output its own id."
|
|
2116
2180
|
});
|
|
2117
2181
|
}
|
|
2118
|
-
for (const { path, name
|
|
2182
|
+
for (const { path, name } of taskContent ? findOutputsWithoutId(parsed) : []) {
|
|
2119
2183
|
issues.push({
|
|
2120
2184
|
code: "CASE_MGMT_OUTPUT_ID_MISSING",
|
|
2121
2185
|
path,
|
|
2122
2186
|
severity: "error",
|
|
2123
|
-
message: `Output "${
|
|
2187
|
+
message: `Output "${name}" carries no id. The designer generates ` + "one for every output it writes, and without it nothing " + "can reference this output — every expression that reads " + "it resolves to nothing."
|
|
2124
2188
|
});
|
|
2125
2189
|
}
|
|
2126
2190
|
for (const { key, resource } of findBindingKeyMismatches(parsed)) {
|
|
@@ -2252,7 +2316,7 @@ Validating: ${absolutePath}
|
|
|
2252
2316
|
if (!content) {
|
|
2253
2317
|
throw new Error(`File is empty: ${absolutePath}`);
|
|
2254
2318
|
}
|
|
2255
|
-
const [parseError, parsed] =
|
|
2319
|
+
const [parseError, parsed] = catchError2(() => JSON.parse(content));
|
|
2256
2320
|
if (parseError) {
|
|
2257
2321
|
return {
|
|
2258
2322
|
success: false,
|
|
@@ -2273,7 +2337,7 @@ Validating: ${absolutePath}
|
|
|
2273
2337
|
const legacySpellings = findLegacySpellings(parsed, profile);
|
|
2274
2338
|
issues.push(...legacySpellings);
|
|
2275
2339
|
const { validateCaseCanvasJson, validateCaseDiskJsonSchema } = await loadCaseSchemaAsync();
|
|
2276
|
-
const [diskCallError, diskResultRaw] =
|
|
2340
|
+
const [diskCallError, diskResultRaw] = catchError2(() => validateCaseDiskJsonSchema(parsed));
|
|
2277
2341
|
if (diskCallError) {
|
|
2278
2342
|
issues.push({
|
|
2279
2343
|
code: "CASE_MGMT_DISK_SCHEMA_VALIDATION_FAILED",
|
|
@@ -2290,8 +2354,8 @@ Validating: ${absolutePath}
|
|
|
2290
2354
|
const diskResult = diskResultRaw;
|
|
2291
2355
|
const version = parsed?.version;
|
|
2292
2356
|
const versionMissing = (version === undefined || typeof version === "string" && version.trim() === "") && (diskResult.issues ?? []).some((i) => i.path === "version");
|
|
2293
|
-
for (const
|
|
2294
|
-
const path =
|
|
2357
|
+
for (const issue of diskResult.issues ?? []) {
|
|
2358
|
+
const path = issue.path && issue.path !== "" ? issue.path : "(root)";
|
|
2295
2359
|
if (versionIssues.length > 0 && path === "version")
|
|
2296
2360
|
continue;
|
|
2297
2361
|
if (versionMissing && path.includes("."))
|
|
@@ -2299,7 +2363,7 @@ Validating: ${absolutePath}
|
|
|
2299
2363
|
issues.push({
|
|
2300
2364
|
code: "CASE_MGMT_DISK_SCHEMA_INVALID",
|
|
2301
2365
|
path,
|
|
2302
|
-
message: versionMissing && path === "version" ? `${
|
|
2366
|
+
message: versionMissing && path === "version" ? `${issue.message}. The version is missing, so nested fields were not checked — set "version" to the version the case plan was written at.` : issue.message,
|
|
2303
2367
|
severity: "error"
|
|
2304
2368
|
});
|
|
2305
2369
|
}
|
|
@@ -2307,7 +2371,7 @@ Validating: ${absolutePath}
|
|
|
2307
2371
|
const {
|
|
2308
2372
|
describeMisplacedRuleGroupMember,
|
|
2309
2373
|
findMisplacedRuleGroupMembers
|
|
2310
|
-
} = await import("./rule-group-members-
|
|
2374
|
+
} = await import("./rule-group-members-p0nv1rmj.js");
|
|
2311
2375
|
const misplaced = findMisplacedRuleGroupMembers(parsed);
|
|
2312
2376
|
const ruleTypePaths = findRuleTypeKeys(parsed);
|
|
2313
2377
|
if (misplaced.length > 0 || ruleTypePaths.length > 0) {
|
|
@@ -2342,19 +2406,19 @@ Validating: ${absolutePath}
|
|
|
2342
2406
|
const {
|
|
2343
2407
|
diagnoseMigrationFailure,
|
|
2344
2408
|
migrationFailureMessage
|
|
2345
|
-
} = await import("./migration-diagnosis-
|
|
2409
|
+
} = await import("./migration-diagnosis-myqqgwj0.js");
|
|
2346
2410
|
const diagnosis = diagnoseMigrationFailure(parsed, diskResult.migrationError, validateCaseDiskJsonSchema);
|
|
2347
2411
|
issues.push({
|
|
2348
2412
|
code: "CASE_MGMT_MIGRATION_FAILED",
|
|
2349
2413
|
path: "(root)",
|
|
2350
|
-
message: migrationFailureMessage(diskResult.migrationError, diagnosis,
|
|
2414
|
+
message: migrationFailureMessage(diskResult.migrationError, diagnosis, parseCaseSchemaVersion2(parsed.version)?.major, legacySpellings.length),
|
|
2351
2415
|
severity: "error"
|
|
2352
2416
|
});
|
|
2353
2417
|
}
|
|
2354
2418
|
}
|
|
2355
2419
|
}
|
|
2356
2420
|
if (diskResult.valid && profile !== "skeleton") {
|
|
2357
|
-
const [canvasCallError, canvasResultRaw] =
|
|
2421
|
+
const [canvasCallError, canvasResultRaw] = catchError2(() => validateCaseCanvasJson(parsed));
|
|
2358
2422
|
if (canvasCallError) {
|
|
2359
2423
|
issues.push({
|
|
2360
2424
|
code: "CASE_MGMT_CANVAS_VALIDATION_FAILED",
|
|
@@ -2384,7 +2448,7 @@ Validating: ${absolutePath}
|
|
|
2384
2448
|
issues.push(...this.runSupplementalRules(parsed, profile));
|
|
2385
2449
|
}
|
|
2386
2450
|
if (diskResult.valid && profile === "strict") {
|
|
2387
|
-
const { runStrictCaseRules } = await import("./strict-case-rules-
|
|
2451
|
+
const { runStrictCaseRules } = await import("./strict-case-rules-045kbjvv.js");
|
|
2388
2452
|
issues.push(...runStrictCaseRules(parsed));
|
|
2389
2453
|
issues.push(...await this.checkBindingsSidecar(absolutePath, parsed));
|
|
2390
2454
|
issues.push(...await this.checkEntryPointsSidecar(absolutePath, parsed));
|
|
@@ -2392,7 +2456,7 @@ Validating: ${absolutePath}
|
|
|
2392
2456
|
const sddPath = this.fs.path.resolve(options.sddPath);
|
|
2393
2457
|
if (await this.fs.exists(sddPath)) {
|
|
2394
2458
|
const sddText = await this.fs.readFile(sddPath, "utf-8") ?? "";
|
|
2395
|
-
const { auditCaseplanAgainstSdd } = await import("./strict-sdd-audit-
|
|
2459
|
+
const { auditCaseplanAgainstSdd } = await import("./strict-sdd-audit-bp7fq2tg.js");
|
|
2396
2460
|
issues.push(...auditCaseplanAgainstSdd(parsed, sddText, this.fs.path.basename(sddPath), await findRegistryLedger(this.fs, absolutePath)));
|
|
2397
2461
|
} else {
|
|
2398
2462
|
issues.push({
|
|
@@ -2419,7 +2483,7 @@ Validating: ${absolutePath}
|
|
|
2419
2483
|
for (const candidate of candidates) {
|
|
2420
2484
|
if (!await this.fs.exists(candidate))
|
|
2421
2485
|
continue;
|
|
2422
|
-
const [readError, text] = await
|
|
2486
|
+
const [readError, text] = await catchError2(this.fs.readFile(candidate, "utf-8"));
|
|
2423
2487
|
const unreadable = (why) => [
|
|
2424
2488
|
{
|
|
2425
2489
|
code: "STRICT_ENTRY_POINT_SIDECAR_UNREADABLE",
|
|
@@ -2431,22 +2495,22 @@ Validating: ${absolutePath}
|
|
|
2431
2495
|
if (readError || text === undefined || text === null) {
|
|
2432
2496
|
return unreadable(readError === undefined ? "could not be found (it may have been removed while validating)" : `could not be read (${readError.message})`);
|
|
2433
2497
|
}
|
|
2434
|
-
const [parseError, document] = await
|
|
2498
|
+
const [parseError, document] = await catchError2(Promise.resolve().then(() => JSON.parse(text)));
|
|
2435
2499
|
if (parseError) {
|
|
2436
2500
|
return unreadable(`is not JSON (${parseError.message})`);
|
|
2437
2501
|
}
|
|
2438
|
-
const { checkEntryPoints } = await import("./strict-entry-points-
|
|
2502
|
+
const { checkEntryPoints } = await import("./strict-entry-points-40ha9afz.js");
|
|
2439
2503
|
return checkEntryPoints(document, parsed, this.fs.path.basename(candidate), this.fs.path.basename(casePlanPath));
|
|
2440
2504
|
}
|
|
2441
2505
|
return [];
|
|
2442
2506
|
}
|
|
2443
2507
|
async checkBindingsSidecar(casePlanPath, parsed) {
|
|
2444
|
-
const { compareCaseBindingsV2 } = await import("./case-bindings-service-
|
|
2445
|
-
const [error, comparison] = await
|
|
2508
|
+
const { compareCaseBindingsV2 } = await import("./case-bindings-service-pp3c9g1e.js");
|
|
2509
|
+
const [error, comparison] = await catchError2(compareCaseBindingsV2(casePlanPath, parsed));
|
|
2446
2510
|
if (error || comparison === undefined)
|
|
2447
2511
|
return [];
|
|
2448
2512
|
const remedy = `Run 'uip maestro case bindings sync ${this.fs.path.basename(casePlanPath)}' to regenerate it.`;
|
|
2449
|
-
const
|
|
2513
|
+
const issue = (message) => [
|
|
2450
2514
|
{
|
|
2451
2515
|
code: "STRICT_BINDINGS_SIDECAR_STALE",
|
|
2452
2516
|
path: this.fs.path.basename(comparison.path),
|
|
@@ -2458,11 +2522,11 @@ Validating: ${absolutePath}
|
|
|
2458
2522
|
case "match":
|
|
2459
2523
|
return [];
|
|
2460
2524
|
case "absent":
|
|
2461
|
-
return comparison.expectedCount === 0 ? [] :
|
|
2525
|
+
return comparison.expectedCount === 0 ? [] : issue(`No bindings_v2.json next to the case plan, but its bindings produce ${comparison.expectedCount} resource entr${comparison.expectedCount === 1 ? "y" : "ies"}. 'uip solution resources refresh' reads that file, so the solution will resolve none of them. ${remedy}`);
|
|
2462
2526
|
case "unreadable":
|
|
2463
|
-
return
|
|
2527
|
+
return issue(`bindings_v2.json could not be read as a bindings file. ${remedy}`);
|
|
2464
2528
|
case "entry-points-unreadable":
|
|
2465
|
-
return
|
|
2529
|
+
return issue(`${comparison.reason ?? `${comparison.path} could not be read`}. The trigger bindings in bindings_v2.json take their entry point ids from that file, so they cannot be checked. Fix or remove ${comparison.path}, then run \`uip maestro case bindings sync\`.`);
|
|
2466
2530
|
case "differs": {
|
|
2467
2531
|
const {
|
|
2468
2532
|
missing = [],
|
|
@@ -2474,7 +2538,7 @@ Validating: ${absolutePath}
|
|
|
2474
2538
|
changed.length > 0 && `wrong: ${changed.join(", ")}`,
|
|
2475
2539
|
extra.length > 0 && `unexpected: ${extra.join(", ")}`
|
|
2476
2540
|
].filter((part) => part !== false);
|
|
2477
|
-
return
|
|
2541
|
+
return issue(`bindings_v2.json disagrees with the case plan's bindings (${parts.join("; ")}). An entry the consumer cannot key is skipped without an error. ${remedy}`);
|
|
2478
2542
|
}
|
|
2479
2543
|
}
|
|
2480
2544
|
}
|
|
@@ -2486,8 +2550,8 @@ Validating: ${absolutePath}
|
|
|
2486
2550
|
if (declared === undefined || typeof declared === "string" && declared.trim() === "") {
|
|
2487
2551
|
return [];
|
|
2488
2552
|
}
|
|
2489
|
-
const latest = await
|
|
2490
|
-
const parts =
|
|
2553
|
+
const latest = await resolveCaseSchemaVersion2();
|
|
2554
|
+
const parts = parseCaseSchemaVersion2(declared);
|
|
2491
2555
|
if (parts === null) {
|
|
2492
2556
|
return [
|
|
2493
2557
|
{
|
|
@@ -2498,18 +2562,18 @@ Validating: ${absolutePath}
|
|
|
2498
2562
|
}
|
|
2499
2563
|
];
|
|
2500
2564
|
}
|
|
2501
|
-
if (parts.major <
|
|
2565
|
+
if (parts.major < MIN_SUPPORTED_MAJOR2) {
|
|
2502
2566
|
return [
|
|
2503
2567
|
{
|
|
2504
2568
|
code: "CASE_MGMT_INVALID_VERSION",
|
|
2505
2569
|
path: "version",
|
|
2506
|
-
message: `Schema version "${String(declared)}" predates V${
|
|
2570
|
+
message: `Schema version "${String(declared)}" predates V${MIN_SUPPORTED_MAJOR2} — this validator requires major version >= ${MIN_SUPPORTED_MAJOR2}, and the current schema is "${latest}".`,
|
|
2507
2571
|
severity: "error"
|
|
2508
2572
|
}
|
|
2509
2573
|
];
|
|
2510
2574
|
}
|
|
2511
|
-
const latestParts =
|
|
2512
|
-
if (latestParts !== null &&
|
|
2575
|
+
const latestParts = parseCaseSchemaVersion2(latest);
|
|
2576
|
+
if (latestParts !== null && compareCaseSchemaVersions2(parts, latestParts) > 0 && !isNewerCaseSchemaPatch2(parts, latestParts)) {
|
|
2513
2577
|
return [
|
|
2514
2578
|
{
|
|
2515
2579
|
code: "CASE_MGMT_VERSION_NEWER_THAN_SCHEMA",
|
|
@@ -2545,4 +2609,4 @@ export {
|
|
|
2545
2609
|
CaseValidateService
|
|
2546
2610
|
};
|
|
2547
2611
|
|
|
2548
|
-
//# debugId=
|
|
2612
|
+
//# debugId=9A8A859F3408925664756E2164756E21
|