@provartesting/provardx-cli 1.5.3 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -37
- package/lib/commands/provar/automation/project/validate.js +5 -3
- package/lib/commands/provar/automation/project/validate.js.map +1 -1
- package/lib/mcp/docs/PROVAR_TEST_STEP_REFERENCE.md +18 -6
- package/lib/mcp/docs/VALIDATION_RULE_REGISTRY.md +225 -0
- package/lib/mcp/prompts/loopPrompts.js +2 -2
- package/lib/mcp/rules/comparisonTypeSets.d.ts +21 -0
- package/lib/mcp/rules/comparisonTypeSets.js +45 -0
- package/lib/mcp/rules/comparisonTypeSets.js.map +1 -0
- package/lib/mcp/rules/provar_best_practices_rules.json +119 -8
- package/lib/mcp/rules/provar_layer1_rules.json +151 -0
- package/lib/mcp/rules/provar_test_step_schema.json +3005 -0
- package/lib/mcp/server.d.ts +15 -0
- package/lib/mcp/server.js +64 -1
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tools/automationTools.js +31 -7
- package/lib/mcp/tools/automationTools.js.map +1 -1
- package/lib/mcp/tools/bestPracticesEngine.js +1069 -8
- package/lib/mcp/tools/bestPracticesEngine.js.map +1 -1
- package/lib/mcp/tools/hierarchyValidate.d.ts +2 -1
- package/lib/mcp/tools/hierarchyValidate.js +7 -1
- package/lib/mcp/tools/hierarchyValidate.js.map +1 -1
- package/lib/mcp/tools/projectValidateFromPath.js +1 -2
- package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
- package/lib/mcp/tools/qualityHubTools.js +1 -13
- package/lib/mcp/tools/qualityHubTools.js.map +1 -1
- package/lib/mcp/tools/sfSpawn.d.ts +23 -0
- package/lib/mcp/tools/sfSpawn.js +170 -15
- package/lib/mcp/tools/sfSpawn.js.map +1 -1
- package/lib/mcp/tools/spawnErrors.d.ts +13 -0
- package/lib/mcp/tools/spawnErrors.js +51 -0
- package/lib/mcp/tools/spawnErrors.js.map +1 -0
- package/lib/mcp/tools/testCaseGenerate.js +146 -12
- package/lib/mcp/tools/testCaseGenerate.js.map +1 -1
- package/lib/mcp/tools/testCaseValidate.d.ts +46 -0
- package/lib/mcp/tools/testCaseValidate.js +307 -41
- package/lib/mcp/tools/testCaseValidate.js.map +1 -1
- package/lib/mcp/tools/testPlanValidate.js +3 -2
- package/lib/mcp/tools/testPlanValidate.js.map +1 -1
- package/lib/mcp/tools/testSuiteValidate.js +3 -2
- package/lib/mcp/tools/testSuiteValidate.js.map +1 -1
- package/lib/mcp/utils/qualityThreshold.d.ts +8 -0
- package/lib/mcp/utils/qualityThreshold.js +42 -0
- package/lib/mcp/utils/qualityThreshold.js.map +1 -0
- package/lib/mcp/utils/testCaseId.d.ts +23 -0
- package/lib/mcp/utils/testCaseId.js +156 -0
- package/lib/mcp/utils/testCaseId.js.map +1 -0
- package/lib/services/projectValidation.js +2 -1
- package/lib/services/projectValidation.js.map +1 -1
- package/messages/sf.provar.automation.project.validate.md +1 -1
- package/messages/sf.provar.mcp.start.md +1 -0
- package/oclif.manifest.json +4 -4
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testCaseGenerate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseGenerate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjH,iFAAiF;AACjF,iFAAiF;AACjF,iDAAiD;AAEjD,MAAM,iBAAiB,GAA2B;IAChD,SAAS,EAAE,kDAAkD;IAC7D,UAAU,EAAE,mDAAmD;IAC/D,YAAY,EAAE,qDAAqD;IACnE,QAAQ,EAAE,iDAAiD;IAC3D,MAAM,EAAE,+CAA+C;IACvD,MAAM,EAAE,+CAA+C;IACvD,UAAU,EAAE,mDAAmD;IAC/D,SAAS,EAAE,kDAAkD;IAC7D,aAAa,EAAE,sDAAsD;IACrE,iBAAiB,EAAE,0DAA0D;IAC7E,WAAW,EAAE,0DAA0D;IACvE,aAAa,EAAE,4DAA4D;IAC3E,gBAAgB,EAAE,+DAA+D;IACjF,cAAc,EAAE,6DAA6D;IAC7E,gBAAgB,EAAE,+DAA+D;IACjF,gBAAgB,EAAE,+DAA+D;IACjF,SAAS,EAAE,mDAAmD;IAC9D,YAAY,EAAE,8CAA8C;IAC5D,SAAS,EAAE,mDAAmD;IAC9D,KAAK,EAAE,+CAA+C;IACtD,OAAO,EAAE,iDAAiD;IAC1D,QAAQ,EAAE,kDAAkD;IAC5D,+EAA+E;IAC/E,oBAAoB,EAAE,qEAAqE;IAC3F,kBAAkB,EAAE,mEAAmE;IACvF,iBAAiB,EAAE,kEAAkE;IACrF,kBAAkB,EAAE,mEAAmE;CACxF,CAAC;AAEF,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IACxD,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;CACrB,CAAC,CAAC;AAEH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC3C,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,sFAAsF;AACtF,2EAA2E;AAC3E,gFAAgF;AAChF,8EAA8E;AAC9E,0CAA0C;AAC1C,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,+DAA+D;AAC/D,MAAM,0BAA0B,GAAG,qDAAqD,CAAC;AAEzF,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,iBAAiB,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,0BAA0B,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,2BAA2B,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,mEAAmE;AACnE,8EAA8E;AAC9E,8EAA8E;AAC9E,wEAAwE;AACxE,+EAA+E;AAC/E,6EAA6E;AAE7E,iFAAiF;AAEjF,SAAS,iBAAiB,CAAC,KAAgC;IACzD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7D,IAAI,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,QAAQ,CAAC,IAAI,CACX,mFAAmF;YACjF,yFAAyF;YACzF,kFAAkF,CACrF,CAAC;IACJ,CAAC;IAED,IAAI,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,QAAQ,CAAC,IAAI,CACX,+GAA+G;YAC7G,uGAAuG;YACvG,uGAAuG,CAC1G,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CACxG,CAAC;IACF,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CACX,2EAA2E;YACzE,uGAAuG;YACvG,+FAA+F;YAC/F,sEAAsE,CACzE,CAAC;IACJ,CAAC;IAED,+FAA+F;IAC/F,IAAI,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,QAAQ,CAAC,IAAI,CACX,kGAAkG;YAChG,iGAAiG;YACjG,oDAAoD;YACpD,kGAAkG;YAClG,qDAAqD,CACxD,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,CACP,6FAA6F;QAC3F,uGAAuG;QACvG,oGAAoG;QACpG,gEAAgE;QAChE,kFAAkF;QAClF,2FAA2F;QAC3F,iEAAiE,CACpE;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACrD,UAAU,EAAE,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAClB,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,yHAAyH;QACvH,iFAAiF;QACjF,sEAAsE;QACtE,0HAA0H;QAC1H,4EAA4E;QAC5E,iFAAiF;QACjF,iHAAiH;QACjH,8EAA8E;QAC9E,iJAAiJ;QACjJ,qGAAqG;QACrG,6CAA6C;QAC7C,gIAAgI;QAChI,gEAAgE,CACnE;CACJ,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG;IACvB,iFAAiF;IACjF,gFAAgF;IAChF,4EAA4E;IAC5E,2EAA2E;IAC3E,6EAA6E;IAC7E,uFAAuF;IACvF,mLAAmL;IACnL,wTAAwT;IACxT,gFAAgF;IAChF,0HAA0H;IAC1H,8DAA8D;IAC9D,4OAA4O;IAC5O,4EAA4E;IAC5E,6FAA6F;IAC7F,sIAAsI;IACtI,4IAA4I;IAC5I,uHAAuH;QACrH,mHAAmH;QACnH,wFAAwF;IAC1F,6JAA6J;IAC7J,wHAAwH;IACxH,qLAAqL;IACrL,oHAAoH;IACpH,gGAAgG;IAChG,iFAAiF;IACjF,kHAAkH;IAClH,yFAAyF;IACzF,gGAAgG;IAChG,+EAA+E;QAC7E,4GAA4G;IAC9G,+HAA+H;QAC7H,yFAAyF;IAC3F,kHAAkH;IAClH,sGAAsG;IACtG,mHAAmH;IACnH,0FAA0F;QACxF,iJAAiJ;QACjJ,wGAAwG;QACxG,kIAAkI;QAClI,gIAAgI;IAClI,2FAA2F;QACzF,kGAAkG;QAClG,iHAAiH;QACjH,iEAAiE;IACnE,uIAAuI;QACrI,yFAAyF;QACzF,wGAAwG;IAC1G,iJAAiJ;IACjJ,yKAAyK;IACzK,oKAAoK;IACpK,2MAA2M;CAC5M,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEZ,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,MAAoB;IAC9E,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,yEAAyE;QACzE,2EAA2E;QAC3E,4EAA4E;QAC5E,yEAAyE;QACzE,qEAAqE;QACrE,qEAAqE;QACrE,KAAK,EAAE,6CAA6C;QACpD,WAAW,EAAE,IAAI,CACf,gBAAgB;QAChB,uEAAuE;QACvE,qEAAqE;QACrE,qEAAqE;QACrE,8CAA8C;QAC9C,sEAAsE;YACpE,sEAAsE;YACtE,iFAAiF,CACpF;QACD,WAAW,EAAE;YACX,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,uCAAuC,EAAE,wBAAwB,CAAC,CAAC;YAC5G,KAAK,EAAE,CAAC;iBACL,KAAK,CAAC,UAAU,CAAC;iBACjB,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CACP,IAAI,CACF,+FAA+F;gBAC7F,8FAA8F;gBAC9F,4GAA4G,EAC9G,qDAAqD,CACtD,CACF;YACH,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,IAAI,CACF,6DAA6D;gBAC3D,sEAAsE;gBACtE,oFAAoF;gBACpF,mEAAmE,EACrE,iFAAiF,CAClF,CACF;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,IAAI,CACF,8DAA8D,EAC9D,yCAAyC,CAC1C,CACF;YACH,SAAS,EAAE,CAAC;iBACT,OAAO,EAAE;iBACT,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,IAAI,CAAC,8CAA8C,EAAE,qCAAqC,CAAC,CAAC;YACxG,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,IAAI,CACF,gEAAgE,EAChE,0CAA0C,CAC3C,CACF;YACH,mBAAmB,EAAE,CAAC;iBACnB,OAAO,EAAE;iBACT,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CACP,IAAI,CACF,8DAA8D;gBAC5D,wEAAwE;gBACxE,+EAA+E,EACjF,yDAAyD,CAC1D,CACF;YACH,eAAe,EAAE,CAAC;iBACf,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,IAAI,CACF,4DAA4D,EAC5D,wDAAwD,CACzD,CACF;YACH,aAAa,EAAE,CAAC;iBACb,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;iBACvC,OAAO,CAAC,MAAM,CAAC;iBACf,QAAQ,CACP,IAAI,CACF,4GAA4G;gBAC1G,0CAA0C;gBAC1C,0GAA0G;gBAC1G,mGAAmG;gBACnG,iGAAiG;gBACjG,oGAAoG;gBACpG,6GAA6G;gBAC7G,uHAAuH;gBACvH,4EAA4E;gBAC5E,0HAA0H;gBAC1H,4GAA4G,EAC9G,+EAA+E,CAChF,CACF;SACJ;KACF,EACD,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE;YACtC,SAAS;YACT,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC,CAAC;QAEH,2EAA2E;QAC3E,4EAA4E;QAC5E,wEAAwE;QACxE,2CAA2C;QAC3C,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACpE,MAAM,GAAG,GAAG,SAAS,CACnB,gBAAgB,EAChB,4FAA4F;gBAC1F,yEAAyE;gBACzE,wEAAwE,EAC1E,SAAS,EACT,KAAK,EACL;gBACE,UAAU,EACR,wEAAwE;oBACxE,2EAA2E;oBAC3E,uFAAuF;oBACvF,oEAAoE;aACvE,CACF,CAAC;YACF,GAAG,CAAC,MAAM,EAAE,0CAA0C,EAAE;gBACtD,SAAS;gBACT,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAuB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACrG,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC/B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;gBAEjD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;oBAChD,MAAM,GAAG,GAAG,SAAS,CACnB,aAAa,EACb,wBAAwB,QAAQ,kCAAkC,EAClE,SAAS,CACV,CAAC;oBACF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5F,CAAC;gBAED,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBAChD,OAAO,GAAG,IAAI,CAAC;gBACf,GAAG,CAAC,MAAM,EAAE,sCAAsC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,KAAK,KAAK,CAAC;YAC1D,MAAM,UAAU,GAAG;gBACjB,SAAS;gBACT,WAAW,EAAE,UAAU;gBACvB,SAAS,EAAE,QAAQ;gBACnB,OAAO;gBACP,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;gBAC9B,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC;YAEF,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,cAAc,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC1E,MAAM,cAAc,GAAG;oBACrB,QAAQ,EAAE,cAAc,CAAC,QAAQ;oBACjC,cAAc,EAAE,cAAc,CAAC,cAAc;oBAC7C,aAAa,EAAE,cAAc,CAAC,aAAa;oBAC3C,WAAW,EAAE,cAAc,CAAC,WAAW;oBACvC,aAAa,EAAE,cAAc,CAAC,aAAa;oBAC3C,MAAM,EAAE,cAAc,CAAC,MAAM;iBAC9B,CAAC;gBACF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;oBAC7B,MAAM,SAAS,GAAG,SAAS,CACzB,kBAAkB,EAClB,qDAAqD,cAAc,CAAC,WAAW,qCAAqC,EACpH,SAAS,EACT,KAAK,EACL,EAAE,UAAU,EAAE,cAAc,EAAE,CAC/B,CAAC;oBACF,GAAG,CAAC,MAAM,EAAE,4CAA4C,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;oBACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClG,CAAC;gBACD,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;gBAC7D,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClE,iBAAiB,EAAE,MAAM;iBAC1B,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtE,iBAAiB,EAAE,UAAU;aAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAgC,CAAC;YAC/C,MAAM,SAAS,GAAG,SAAS,CACzB,KAAK,YAAY,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,gBAAgB,EAC9E,KAAK,CAAC,OAAO,EACb,SAAS,EACT,KAAK,CACN,CAAC;YACF,GAAG,CAAC,OAAO,EAAE,iCAAiC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;QAClG,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF,wFAAwF;AACxF,2FAA2F;AAC3F,EAAE;AACF,mBAAmB;AACnB,sGAAsG;AACtG,yCAAyC;AACzC,sGAAsG;AACtG,mFAAmF;AACnF,uEAAuE;AACvE,6DAA6D;AAC7D,6CAA6C;AAC7C,8EAA8E;AAC9E,wFAAwF;AACxF,qFAAqF;AACrF,kFAAkF;AAClF,wBAAwB;AACxB,EAAE;AACF,8FAA8F;AAC9F,0FAA0F;AAC1F,4CAA4C;AAC5C,MAAM,UAAU,yBAAyB;AACvC,6DAA6D;AAC7D,GAAW,EACX,GAAW,EACX,aAAsE;IAEtE,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,oEAAoE,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACtG,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACnD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACxD,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,yFAAyF;AACzF,SAAS,kBAAkB,CAAC,GAAW,EAAE,MAAc;IACrD,MAAM,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC;IACxB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,eAAe,CAAC;IAChC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7F,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;aACtB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,oBAAoB,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;aACzD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,YAAY,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzF,OAAO,GAAG,MAAM,6BAA6B,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,MAAM,UAAU,CAAC;AAChH,CAAC;AAED,oEAAoE;AACpE,6FAA6F;AAC7F,oFAAoF;AACpF,SAAS,kBAAkB,CAAC,GAAW,EAAE,GAAW,EAAE,MAAc,EAAE,aAAa,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE;IACrG,wEAAwE;IACxE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC;aAC7B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,oBAAoB,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC;aAC9D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,GAAG,MAAM,6BAA6B,YAAY,KAAK,MAAM,UAAU,CAAC;IACjF,CAAC;IACD,iFAAiF;IACjF,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,gFAAgF;QAChF,mFAAmF;QACnF,IAAI,GAAG,KAAK,QAAQ,IAAI,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,MAAM,gCAAgC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1E,CAAC;QACD,qFAAqF;QACrF,qFAAqF;QACrF,IAAI,GAAG,KAAK,SAAS,IAAI,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,MAAM,iCAAiC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,uFAAuF;IACvF,yFAAyF;IACzF,6FAA6F;IAC7F,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,GAAG,MAAM,oCAAoC,QAAQ,KAAK,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;AACnG,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkC,EAAE,UAAU,GAAG,QAAQ,EAAE,KAAK,GAAG,EAAE;IAC9F,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,OAAO;SACrB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;QACd,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,GAAG,UAAU,iBAAiB,aAAa,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,UAAU,aAAa,CAAC;IAC7G,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,KAAK,UAAU,gBAAgB,QAAQ,KAAK,UAAU,iBAAiB,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1G,CAAC;AAED,wFAAwF;AACxF,SAAS,iBAAiB,CAAC,UAAkC,EAAE,UAAkB;IAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,OAAO;SAC5B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,qBAAqB,aAAa,CAAC,IAAI,CAAC,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IAChG,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,CACL,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe;QACxB,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;QACjC,GAAG,CAAC,CAAC,CAAC,CAAC,+CAA+C;QACtD,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB;QACxB,eAAe;QACf,IAAI;QACJ,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB;QACzB,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY;QACnB,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe;QACtB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACvB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,IAA0E,EAC1E,UAAkB,EAClB,MAAc;IAEd,OAAO,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AAC3E,CAAC;AAED,yEAAyE;AACzE,+EAA+E;AAC/E,2EAA2E;AAC3E,oEAAoE;AACpE,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,SAAS,wBAAwB,CAC/B,IAA0E,EAC1E,UAAkB,EAClB,MAAc,EACd,WAAmB,EACnB,kBAAsC;IAEtC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,sFAAsF;IACtF,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtD,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;QAChD,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,kBAAkB,KAAK,SAAS,CAAC;IACpD,MAAM,IAAI,GAAG,GAAG,MAAM,kBAAkB,IAAI,YAAY,aAAa,CAAC,aAAa,CAAC,WAAW,aAAa,CAC1G,IAAI,CAAC,IAAI,CACV,iBAAiB,UAAU,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,GAAG,MAAM,YAAY,CAAC;IAEpC,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,CACL,GAAG,MAAM,kBAAkB,IAAI,YAAY,aAAa,CAAC,aAAa,CAAC,GAAG;YAC1E,UAAU,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,UAAU,KAAK,CACnE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,2EAA2E;QAC3E,0EAA0E;QAC1E,OAAO,GAAG,IAAI,GAAG,YAAY,YAAY,CAAC;IAC5C,CAAC;IAED,kEAAkE;IAClE,MAAM,YAAY,GAAG,UAAU,CAAC;IAChC,MAAM,gBAAgB,GAAG,UAAU,GAAG,IAAI,CAAC;IAC3C,MAAM,UAAU,GAAG,WAAW;QAC5B,CAAC,CAAC,GAAG,gBAAgB,YAAY,WAAW,KAAK,gBAAgB,UAAU;QAC3E,CAAC,CAAC,GAAG,gBAAgB,UAAU,CAAC;IAClC,MAAM,YAAY,GAChB,GAAG,UAAU,aAAa;QAC1B,GAAG,YAAY,uCAAuC,kBAAkB,MAAM;QAC9E,GAAG,UAAU,IAAI;QACjB,GAAG,YAAY,aAAa;QAC5B,GAAG,UAAU,YAAY,CAAC;IAE5B,2EAA2E;IAC3E,4EAA4E;IAC5E,2CAA2C;IAC3C,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,GAAG,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,YAAY,KAAK,KAAK,EAAE,CAAC;IACtF,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,YAAY,KAAK,KAAK,EAAE,CAAC;AAC9C,CAAC;AA+BD,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACxB,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,MAAqB,EAAE,kBAA2B;IACrF,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,OAAO,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,kBAAkB,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM;QAC7D,wEAAwE;QACxE,2BAA2B;QAC3B,IAAI,kBAAkB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,MAAM;QAC1D,MAAM,CAAC,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,GAAa,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,uEAAuE;YACvE,qEAAqE;YACrE,yEAAyE;YACzE,uEAAuE;YACvE,iCAAiC;YACjC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,yDAAyD;AACzD,SAAS,gBAAgB,CAAC,KAAiB,EAAE,MAAc,EAAE,OAAe;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,EAAE,GAAG,OAAO,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,EAAE,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,iDAAiD;QACxF,2EAA2E;QAC3E,0EAA0E;QAC1E,4CAA4C;QAC5C,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACtF,EAAE,GAAG,MAAM,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAKzB;IACC,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC;IAEnD,IAAI,SAAiB,CAAC;IACtB,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAEzE,IAAI,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAChC,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,YAAY,KAAK,eAAe,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,4EAA4E;QAC5E,yFAAyF;QACzF,2EAA2E;QAC3E,kDAAkD;QAClD,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC;IACpF,CAAC;SAAM,IAAI,YAAY,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC3F,0EAA0E;QAC1E,sEAAsE;QACtE,2EAA2E;QAC3E,uEAAuE;QACvE,4EAA4E;QAC5E,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxE,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC;gBACE;oBACE,MAAM,EAAE,cAAc;oBACtB,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,IAAI,cAAc,EAAE;iBAC3D;gBACD,GAAG,KAAK,CAAC,KAAK;aACf,CAAC;QACN,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC9C,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,oEAAoE;QACpE,qEAAqE;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7F,SAAS,GAAG,KAAK,IAAI,wCAAwC,CAAC;IAChE,CAAC;IAED,uGAAuG;IACvG,OAAO,CACL,0DAA0D;QAC1D,mBAAmB,YAAY,wBAAwB,UAAU,MAAM;QACvE,gBAAgB;QAChB,aAAa;QACb,SAAS;QACT,gBAAgB;QAChB,eAAe,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAkF,EAClF,SAAiB;IAEjB,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC;IACjC,MAAM,YAAY,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;IAClD,8FAA8F;IAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpG,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,UAAU,GACd,qBAAqB;QACrB,mDAAmD;QACnD,oBAAoB,YAAY,YAAY;QAC5C,qBAAqB;QACrB,wBAAwB,CAAC;IAC3B,OAAO,CACL,sBAAsB,WAAW,YAAY,YAAY,GAAG;QAC5D,oCAAoC,iBAAiB,CACnD,EAAE,MAAM,EAAE,SAAS,EAAE,EACrB,QAAQ,EACR,YAAY,CACb,CAAC,OAAO,EAAE,GAAG,UAAU,YAAY,CACrC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC"}
|
|
1
|
+
{"version":3,"file":"testCaseGenerate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseGenerate.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,3 +42,49 @@ export interface ValidateTestCaseOptions {
|
|
|
42
42
|
}
|
|
43
43
|
/** Pure function — exported for unit testing */
|
|
44
44
|
export declare function validateTestCase(xmlContent: string, testName?: string, options?: ValidateTestCaseOptions): TestCaseValidationResult;
|
|
45
|
+
/**
|
|
46
|
+
* The Layer-1 structural-validity rule catalog — the single source of truth for
|
|
47
|
+
* Layer-1 rule metadata (id / severity / applies_to / description) and the
|
|
48
|
+
* best-practice ownership mapping. Loaded from `provar_layer1_rules.json`
|
|
49
|
+
* (copied into `lib/mcp/rules/` at compile, same as the best-practices ruleset).
|
|
50
|
+
* The imperative DETECTION below is unchanged; centralizing only the metadata
|
|
51
|
+
* keeps the published Validation Rule Registry from drifting from the validator.
|
|
52
|
+
* The same JSON is read by `scripts/build-validation-rule-registry.cjs` (renders
|
|
53
|
+
* the registry rows) and guarded by `validationRuleRegistry.test.ts`.
|
|
54
|
+
*/
|
|
55
|
+
export interface Layer1RuleCatalogEntry {
|
|
56
|
+
id: string;
|
|
57
|
+
severity: 'ERROR' | 'WARNING';
|
|
58
|
+
applies_to: string;
|
|
59
|
+
description: string;
|
|
60
|
+
/** Layer-2 `critical` BP rule ids whose concept this Layer-1 check owns (suppressed from the bridge). */
|
|
61
|
+
owns_bp_rules?: string[];
|
|
62
|
+
}
|
|
63
|
+
export declare const LAYER1_RULE_CATALOG: readonly Layer1RuleCatalogEntry[];
|
|
64
|
+
/**
|
|
65
|
+
* PDX-509 — validity bridge.
|
|
66
|
+
*
|
|
67
|
+
* Best-practice violations carry a `critical|major|minor|info` severity, but
|
|
68
|
+
* historically that severity only moved `quality_score` and never gated
|
|
69
|
+
* `is_valid`. Per the canonical taxonomy, `critical` means "Provar will not
|
|
70
|
+
* load/render the test case" — exactly the class of defect that MUST flip
|
|
71
|
+
* validity. The bridge surfaces every un-suppressed `critical` BP violation as
|
|
72
|
+
* an ERROR issue so it gates `is_valid`.
|
|
73
|
+
*
|
|
74
|
+
* `major`/`minor`/`info` are intentionally NOT bridged — a major is a runtime
|
|
75
|
+
* ERROR that still loads, so it influences the quality score (and the
|
|
76
|
+
* `needs_improvement` verdict) without flipping `is_valid`.
|
|
77
|
+
*
|
|
78
|
+
* These BP rules cover concepts the hand-coded Layer-1 checks already OWN
|
|
79
|
+
* (root element, identifier, steps presence, testItemId integers, comparisonType
|
|
80
|
+
* enums). Layer-1 is authoritative for those: it fires only on the genuinely
|
|
81
|
+
* load-blocking condition (e.g. TC_020 fires on a MISSING <steps>, but an
|
|
82
|
+
* empty-but-present <steps> still loads — it just does nothing), whereas the
|
|
83
|
+
* ported BP rule is coarser (VALID-STEPS-001 also flags an empty <steps>, a
|
|
84
|
+
* "does nothing" design smell, not a load failure). So we never bridge these —
|
|
85
|
+
* Layer-1 already gates the load-blocking case, and the BP version still counts
|
|
86
|
+
* toward quality_score. The bridge's real value is the criticals Layer-1 does
|
|
87
|
+
* NOT check (unknown apiId, missing required control/connection args, invalid
|
|
88
|
+
* render value-class casing, NitroX connect args…).
|
|
89
|
+
*/
|
|
90
|
+
export declare const LAYER1_OWNED_BP_RULES: ReadonlySet<string>;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import fs from 'node:fs';
|
|
9
9
|
import path from 'node:path';
|
|
10
10
|
import { createHash } from 'node:crypto';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
11
12
|
import { z } from 'zod';
|
|
12
13
|
import { XMLParser } from 'fast-xml-parser';
|
|
13
14
|
import { assertPathAllowed, PathPolicyError } from '../security/pathPolicy.js';
|
|
@@ -16,13 +17,15 @@ import { log } from '../logging/logger.js';
|
|
|
16
17
|
import { resolveApiKey } from '../../services/auth/credentials.js';
|
|
17
18
|
import { qualityHubClient, getQualityHubBaseUrl, QualityHubAuthError, QualityHubRateLimitError, REQUEST_ACCESS_URL, } from '../../services/qualityHub/client.js';
|
|
18
19
|
import { applyDetailLevel } from '../utils/detailLevel.js';
|
|
20
|
+
import { resolveQualityThreshold } from '../utils/qualityThreshold.js';
|
|
19
21
|
import { calcCompletenessScore, calcNextAction } from '../utils/validationScore.js';
|
|
20
22
|
import { generateRunId, saveRun, hasAnyRun, loadBaselineViolations, computeDiff, computeContextHash, resolveValidationDir, } from '../utils/validationDiff.js';
|
|
21
23
|
import { resolveTestCasePlanMode } from '../utils/testCasePlanMode.js';
|
|
22
24
|
import { WARNING_CODES, formatWarning } from '../utils/warningCodes.js';
|
|
25
|
+
import { ASSERT_VALUES_COMPARISON_TYPES, UI_ASSERT_COMPARISON_TYPES, ASSERT_VALUES_COMPARISON_TYPE_SET, UI_ASSERT_COMPARISON_TYPE_SET, } from '../rules/comparisonTypeSets.js';
|
|
23
26
|
import { runBestPractices } from './bestPracticesEngine.js';
|
|
24
27
|
import { desc } from './descHelper.js';
|
|
25
|
-
import { UI_SCREEN_CONTAINER_API_IDS, UI_LOCATOR_BEARING_API_IDS } from './uiActionApiIds.js';
|
|
28
|
+
import { UI_ACTION_API_IDS, UI_SCREEN_CONTAINER_API_IDS, UI_LOCATOR_BEARING_API_IDS } from './uiActionApiIds.js';
|
|
26
29
|
const ONBOARDING_MESSAGE = 'Quality Hub validation unavailable — running local validation only (structural rules, no quality scoring).\n' +
|
|
27
30
|
'To enable Quality Hub (170 rules): run sf provar auth login\n' +
|
|
28
31
|
'For CI/CD: set the PROVAR_API_KEY environment variable.\n' +
|
|
@@ -35,6 +38,9 @@ const UNREACHABLE_WARNING = 'Quality Hub API unreachable. Running local validati
|
|
|
35
38
|
const TC_VALIDATE_SUMMARY_FIELDS = [
|
|
36
39
|
'requestId',
|
|
37
40
|
'is_valid',
|
|
41
|
+
'status',
|
|
42
|
+
'quality_threshold',
|
|
43
|
+
'meets_quality_threshold',
|
|
38
44
|
'validity_score',
|
|
39
45
|
'quality_score',
|
|
40
46
|
'validation_source',
|
|
@@ -46,6 +52,17 @@ const TC_VALIDATE_SUMMARY_FIELDS = [
|
|
|
46
52
|
function tcStorageDir() {
|
|
47
53
|
return resolveValidationDir('testcase');
|
|
48
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Combine the validity gate and the quality bar into one verdict.
|
|
57
|
+
* `invalid` when a critical defect blocks loading; otherwise `needs_improvement`
|
|
58
|
+
* when the score is below the (resolved) threshold; otherwise `valid`.
|
|
59
|
+
*/
|
|
60
|
+
function deriveQualityVerdict(isValid, qualityScore, qualityThresholdArg) {
|
|
61
|
+
const quality_threshold = resolveQualityThreshold(qualityThresholdArg);
|
|
62
|
+
const meets_quality_threshold = qualityScore >= quality_threshold;
|
|
63
|
+
const status = !isValid ? 'invalid' : meets_quality_threshold ? 'valid' : 'needs_improvement';
|
|
64
|
+
return { status, quality_threshold, meets_quality_threshold };
|
|
65
|
+
}
|
|
49
66
|
/** Resolve validation result from QualityHub API or fall back to local. */
|
|
50
67
|
async function resolveBaseResult(source, apiKey, requestId, planMode = 'unknown') {
|
|
51
68
|
if (!apiKey) {
|
|
@@ -101,7 +118,7 @@ function tcRunContext(filePath, xmlContent) {
|
|
|
101
118
|
export function registerTestCaseValidate(server, config) {
|
|
102
119
|
server.registerTool('provar_testcase_validate', {
|
|
103
120
|
title: 'Validate Test Case',
|
|
104
|
-
description: desc("Validate a Provar XML test case for structural correctness and quality. Checks XML declaration, root element, required attributes (guid UUID v4, testItemId integer), <steps> presence, and applies best-practice rules. When a Provar API key is configured (via sf provar auth login or PROVAR_API_KEY env var), calls the Quality Hub API for full 170-rule scoring. Falls back to local validation if no key is set or the API is unavailable. Returns validity_score (schema compliance), quality_score (best practices, 0–100), and validation_source indicating which ruleset was applied. Every response includes run_id — pass it as baseline_run_id in the next call to receive only new/resolved issues. Data-driven note (DATA-001): when file_path is supplied and the project's provardx-properties.json references the test case directly via top-level `testCase` / `testCases` rather than via a `.testinstance` inside a plan, the validator emits DATA-001 warning a <dataTable> declaration will resolve all variables to null in direct testCase-mode — wire the test into a plan via provar_testplan_add-instance to enable data-driven iteration. When structural errors are returned, consult the provar://docs/step-reference MCP resource for correct step attribute schemas.", 'Validate a Provar XML test case: structure, UUIDs, steps, quality scoring; run_id for baseline diff.'),
|
|
121
|
+
description: desc("Validate a Provar XML test case for structural correctness and quality. Checks XML declaration, root element, required attributes (guid UUID v4, testItemId integer), <steps> presence, and applies best-practice rules. When a Provar API key is configured (via sf provar auth login or PROVAR_API_KEY env var), calls the Quality Hub API for full 170-rule scoring. Falls back to local validation if no key is set or the API is unavailable. Returns validity_score (schema compliance), quality_score (best practices, 0–100), and validation_source indicating which ruleset was applied. Returns a tri-state status: 'invalid' (a critical defect — the test will not load in Provar, is_valid=false), 'needs_improvement' (loads but quality_score is below quality_threshold), or 'valid' (loads and clears the bar); meets_quality_threshold and the effective quality_threshold are also returned. Note: a critical best-practice violation (e.g. an unknown apiId) now gates is_valid the same way a structural error does — it surfaces in issues[] as an ERROR. major/minor/info best-practice violations affect quality_score (and the status verdict) only. Every response includes run_id — pass it as baseline_run_id in the next call to receive only new/resolved issues. Data-driven note (DATA-001): when file_path is supplied and the project's provardx-properties.json references the test case directly via top-level `testCase` / `testCases` rather than via a `.testinstance` inside a plan, the validator emits DATA-001 warning a <dataTable> declaration will resolve all variables to null in direct testCase-mode — wire the test into a plan via provar_testplan_add-instance to enable data-driven iteration. When structural errors are returned, consult the provar://docs/step-reference MCP resource for correct step attribute schemas.", 'Validate a Provar XML test case: structure, UUIDs, steps, quality scoring; run_id for baseline diff.'),
|
|
105
122
|
inputSchema: {
|
|
106
123
|
content: z
|
|
107
124
|
.string()
|
|
@@ -117,12 +134,18 @@ export function registerTestCaseValidate(server, config) {
|
|
|
117
134
|
.optional()
|
|
118
135
|
.default('standard')
|
|
119
136
|
.describe(desc('Response verbosity. "summary": is_valid, scores, and stop signal only. "standard"/"full": full issues list (default).', 'enum summary|standard|full, optional; default standard')),
|
|
137
|
+
quality_threshold: z
|
|
138
|
+
.number()
|
|
139
|
+
.min(0)
|
|
140
|
+
.max(100)
|
|
141
|
+
.optional()
|
|
142
|
+
.describe(desc('Minimum quality_score for status to be "valid" rather than "needs_improvement". Does NOT affect is_valid (only critical defects do). Precedence: this arg → PROVAR_MCP_QUALITY_THRESHOLD env → 90.', 'number 0–100, optional; default 90')),
|
|
120
143
|
baseline_run_id: z
|
|
121
144
|
.string()
|
|
122
145
|
.optional()
|
|
123
146
|
.describe(desc('run_id from a previous call. When provided, returns only issues that are new or resolved since that run: { added, resolved, unchanged_count, run_id }. If not found, returns error BASELINE_NOT_FOUND.', 'string, optional; prev run_id for diff response')),
|
|
124
147
|
},
|
|
125
|
-
}, async ({ content, xml, file_path, detail, baseline_run_id }) => {
|
|
148
|
+
}, async ({ content, xml, file_path, detail, baseline_run_id, quality_threshold }) => {
|
|
126
149
|
const requestId = makeRequestId();
|
|
127
150
|
log('info', 'provar_testcase_validate', { requestId, has_content: !!(content ?? xml), file_path });
|
|
128
151
|
try {
|
|
@@ -150,7 +173,13 @@ export function registerTestCaseValidate(server, config) {
|
|
|
150
173
|
const context = tcRunContext(file_path, source);
|
|
151
174
|
const contextHash = computeContextHash('tc', context);
|
|
152
175
|
const runId = generateRunId(context);
|
|
153
|
-
|
|
176
|
+
// A bridged critical appears twice — as the surfaced issue AND as its original
|
|
177
|
+
// BP violation — both carrying the same BP rule_id. Hand-coded issue rule_ids
|
|
178
|
+
// (TC_*, UI-*, COMPARISON-TYPE-001) never collide with BP rule_ids, so a BP
|
|
179
|
+
// rule_id appearing in issues[] can only mean it was bridged. Drop those from
|
|
180
|
+
// the BP list here so the baseline diff counts each finding once.
|
|
181
|
+
const issueRuleIds = new Set(baseResult.issues.map((i) => i.rule_id));
|
|
182
|
+
const bpViolations = (baseResult.best_practices_violations ?? []).filter((v) => !issueRuleIds.has(v.rule_id));
|
|
154
183
|
const currentViolations = [
|
|
155
184
|
...baseResult.issues,
|
|
156
185
|
...bpViolations,
|
|
@@ -192,12 +221,17 @@ export function registerTestCaseValidate(server, config) {
|
|
|
192
221
|
}
|
|
193
222
|
const completeness_score = calcCompletenessScore(baseResult.is_valid ? 1 : 0, 1);
|
|
194
223
|
const recommended_next_action = calcNextAction(completeness_score, hasBaseline, currentViolations.length);
|
|
224
|
+
// PDX-509 tri-state verdict. is_valid answers "will it load" (gated by
|
|
225
|
+
// criticals only); status layers the quality bar on top so an AI client
|
|
226
|
+
// gets an explicit "loads but fix before running" signal.
|
|
227
|
+
const verdict = deriveQualityVerdict(baseResult.is_valid, baseResult.quality_score, quality_threshold);
|
|
195
228
|
const result = {
|
|
196
229
|
requestId,
|
|
197
230
|
run_id: runId,
|
|
198
231
|
completeness_score,
|
|
199
232
|
recommended_next_action,
|
|
200
233
|
...baseResult,
|
|
234
|
+
...verdict,
|
|
201
235
|
};
|
|
202
236
|
const detailLevel = (detail ?? 'standard');
|
|
203
237
|
const finalResult = applyDetailLevel(result, detailLevel, TC_VALIDATE_SUMMARY_FIELDS);
|
|
@@ -236,22 +270,17 @@ export function validateTestCaseXml(filePath, config) {
|
|
|
236
270
|
}
|
|
237
271
|
/** TC_010/TC_011: validate testCase id and guid attributes. */
|
|
238
272
|
function checkTestCaseIdAndGuid(tcId, tcGuid, issues) {
|
|
239
|
-
|
|
273
|
+
// The testCase `id` is OPTIONAL — the guid is the unique identifier (real Provar
|
|
274
|
+
// projects routinely omit id). When an id IS present it must be a non-negative
|
|
275
|
+
// integer: test case ids are project-unique sequential numbers (corpus shows 0…N),
|
|
276
|
+
// NOT the literal "1". Only a present-but-non-numeric id (e.g. a UUID) is rejected.
|
|
277
|
+
if (tcId !== null && !/^\d+$/.test(tcId)) {
|
|
240
278
|
issues.push({
|
|
241
279
|
rule_id: 'TC_010',
|
|
242
280
|
severity: 'ERROR',
|
|
243
|
-
message:
|
|
281
|
+
message: `testCase id="${tcId}" is invalid — when present, the id must be a non-negative integer (test case ids are unique within a project, numbered sequentially). The guid is the cross-project unique identifier.`,
|
|
244
282
|
applies_to: 'testCase',
|
|
245
|
-
suggestion: '
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
else if (tcId !== '1') {
|
|
249
|
-
issues.push({
|
|
250
|
-
rule_id: 'TC_010',
|
|
251
|
-
severity: 'ERROR',
|
|
252
|
-
message: `testCase id="${tcId}" is invalid — Provar requires id="1" (integer literal).`,
|
|
253
|
-
applies_to: 'testCase',
|
|
254
|
-
suggestion: 'Set id="1" on the testCase element. The unique identifier is the guid attribute, not id.',
|
|
283
|
+
suggestion: 'Set id to a project-unique non-negative integer (typically the highest in use + 1), or omit the id attribute entirely and rely on the guid.',
|
|
255
284
|
});
|
|
256
285
|
}
|
|
257
286
|
if (!tcGuid) {
|
|
@@ -386,6 +415,11 @@ export function validateTestCase(xmlContent, testName, options = {}) {
|
|
|
386
415
|
for (const call of apiCalls) {
|
|
387
416
|
validateApiCall(call, issues);
|
|
388
417
|
}
|
|
418
|
+
// COMPARISON-TYPE-001: context-aware comparisonType enum check (load-blocking).
|
|
419
|
+
// Walks the whole test case so nested steps (e.g. a UiAssert inside a
|
|
420
|
+
// UiWithScreen substeps clause, or an AssertValues inside an If/ForEach) are
|
|
421
|
+
// covered too, not just top-level apiCalls.
|
|
422
|
+
validateComparisonTypes(tc, issues);
|
|
389
423
|
// VAR-REF-001 / VAR-REF-002: detect {VarName} tokens inside valueClass="string" elements.
|
|
390
424
|
// Provar does not interpolate {…} tokens in plain string values at runtime — they must use
|
|
391
425
|
// class="variable" (pure reference) or class="compound" (embedded in surrounding text).
|
|
@@ -516,6 +550,82 @@ function checkUiTarget(call, apiId, stepName, issues) {
|
|
|
516
550
|
});
|
|
517
551
|
}
|
|
518
552
|
}
|
|
553
|
+
// UI-INTERACTION-001 (PDX-506): a UI action step's `interaction` argument must
|
|
554
|
+
// use class="uiInteraction". A plain string runs green from the CLI but renders
|
|
555
|
+
// the Provar IDE Action widget blank. Mirrors checkUiTarget / UI-LOCATOR-001.
|
|
556
|
+
function checkUiInteraction(call, stepName, issues) {
|
|
557
|
+
const interactionArg = getArgList(call).find((a) => a['@_id'] === 'interaction');
|
|
558
|
+
if (!interactionArg)
|
|
559
|
+
return;
|
|
560
|
+
const interactionNode = interactionArg['value'];
|
|
561
|
+
if (interactionNode == null)
|
|
562
|
+
return;
|
|
563
|
+
const valClass = interactionNode['@_class'];
|
|
564
|
+
if (valClass !== 'uiInteraction') {
|
|
565
|
+
issues.push({
|
|
566
|
+
rule_id: 'UI-INTERACTION-001',
|
|
567
|
+
severity: 'ERROR',
|
|
568
|
+
message: `"${stepName}" interaction argument uses class="${valClass ?? '(missing)'}" — must be class="uiInteraction".`,
|
|
569
|
+
applies_to: 'apiCall',
|
|
570
|
+
suggestion: 'Emit the interaction as: <value class="uiInteraction" uri="ui:interaction?name=action"/>. ' +
|
|
571
|
+
'In provar_testcase_generate the "interaction" attribute is converted automatically.',
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
// Flat-form argument ids that the broken/CLI-only UiAssert shape carries at the
|
|
576
|
+
// top level. The IDE-renderable contract nests these inside a uiFieldAssertion.
|
|
577
|
+
const UI_ASSERT_FLAT_ARG_IDS = ['fieldLocator', 'attributeName', 'comparisonType', 'expectedValue'];
|
|
578
|
+
// UI-ASSERT-STRUCTURE-001 (PDX-507, local rule): a UiAssert field assertion must
|
|
579
|
+
// be nested inside fieldAssertions → uiFieldAssertion (with a bare
|
|
580
|
+
// <fieldLocator uri="…"/> element), not emitted as flat top-level arguments.
|
|
581
|
+
// The flat shape runs green from the CLI but renders the IDE Result Assertions
|
|
582
|
+
// tab blank. Confirmed against the real corpus (AllPOCProjects): 0 of 3,778
|
|
583
|
+
// UiAssert steps use a flat fieldLocator argument; ~99% use the nested form.
|
|
584
|
+
// (Named "-STRUCTURE-001" to match the local SETVALUES-STRUCTURE-001 convention
|
|
585
|
+
// and avoid colliding with the best-practice JSON rule UI-ASSERT-STRUCT-001.)
|
|
586
|
+
function checkUiAssertStructure(call, stepName, issues) {
|
|
587
|
+
const flatArg = getArgList(call).find((a) => UI_ASSERT_FLAT_ARG_IDS.includes(a['@_id'] ?? ''));
|
|
588
|
+
if (!flatArg)
|
|
589
|
+
return;
|
|
590
|
+
const offendingId = flatArg['@_id'] ?? '';
|
|
591
|
+
issues.push({
|
|
592
|
+
rule_id: 'UI-ASSERT-STRUCTURE-001',
|
|
593
|
+
severity: 'ERROR',
|
|
594
|
+
message: `UiAssert step "${stepName}" carries a flat "${offendingId}" argument — field assertions must be nested inside fieldAssertions/uiFieldAssertion or the Provar IDE Result Assertions tab renders blank.`,
|
|
595
|
+
applies_to: 'apiCall',
|
|
596
|
+
suggestion: 'Nest field assertions: <argument id="fieldAssertions"><value class="valueList" mutable="Mutable">' +
|
|
597
|
+
'<uiFieldAssertion resultName="Field"><fieldLocator uri="ui:locator?name=Field&binding=..."/>' +
|
|
598
|
+
'<attributeAssertions><uiAttributeAssertion attributeName="value" comparisonType="EqualTo"/></attributeAssertions>' +
|
|
599
|
+
'</uiFieldAssertion></value></argument> plus empty columnAssertions/pageAssertions. The fieldLocator is a bare ' +
|
|
600
|
+
'uri element, NOT class="uiLocator". In provar_testcase_generate pass fieldLocator/attributeName/comparisonType/' +
|
|
601
|
+
'expectedValue as flat attributes — the generator builds this structure automatically.',
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
// SETVALUES-STRUCTURE-001 (mirrors quality-hub-agents SETVALUES-STRUCTURE-001):
|
|
605
|
+
// SetValues values argument must use class="valueList" with <namedValues> children.
|
|
606
|
+
// A plain string value causes an immediate ClassCastException at runtime.
|
|
607
|
+
// Extracted to keep validateApiCallArgs within the complexity budget.
|
|
608
|
+
function checkSetValuesStructure(call, stepName, issues) {
|
|
609
|
+
const valuesArg = getArgList(call).find((a) => a['@_id'] === 'values');
|
|
610
|
+
if (!valuesArg)
|
|
611
|
+
return;
|
|
612
|
+
const valuesNode = valuesArg['value'];
|
|
613
|
+
if (valuesNode == null)
|
|
614
|
+
return;
|
|
615
|
+
const valClass = valuesNode['@_class'];
|
|
616
|
+
if (valClass !== 'valueList') {
|
|
617
|
+
issues.push({
|
|
618
|
+
rule_id: 'SETVALUES-STRUCTURE-001',
|
|
619
|
+
severity: 'ERROR',
|
|
620
|
+
message: `SetValues step "${stepName}" values argument uses class="${valClass ?? '(missing)'}" — must use class="valueList" with <namedValues> children.`,
|
|
621
|
+
applies_to: 'apiCall',
|
|
622
|
+
suggestion: 'Wrap variable assignments in: <value class="valueList" mutable="Mutable"><namedValues>' +
|
|
623
|
+
'<namedValue name="varName"><value class="value" valueClass="string">value</value></namedValue>' +
|
|
624
|
+
'</namedValues></value>. In provar_testcase_generate pass each variable as a flat key/value pair ' +
|
|
625
|
+
'in attributes — the generator builds the valueList structure automatically.',
|
|
626
|
+
});
|
|
627
|
+
}
|
|
628
|
+
}
|
|
519
629
|
function validateApiCallArgs(call, apiId, name, issues) {
|
|
520
630
|
const stepName = name ?? '(unnamed)';
|
|
521
631
|
// UI-TARGET-001 (mirrors quality-hub-agents UI-SCREEN-TARGET-001):
|
|
@@ -548,29 +658,18 @@ function validateApiCallArgs(call, apiId, name, issues) {
|
|
|
548
658
|
}
|
|
549
659
|
}
|
|
550
660
|
}
|
|
551
|
-
//
|
|
552
|
-
//
|
|
553
|
-
//
|
|
661
|
+
// UI-INTERACTION-001 (PDX-506) for any UI action; UI-ASSERT-STRUCTURE-001
|
|
662
|
+
// (PDX-507) additionally for UiAssert field-assertion structure. Both are
|
|
663
|
+
// local rules gated on the shared UI-action set and extracted to helpers to
|
|
664
|
+
// keep validateApiCallArgs within the complexity budget.
|
|
665
|
+
if (UI_ACTION_API_IDS.has(apiId)) {
|
|
666
|
+
checkUiInteraction(call, stepName, issues);
|
|
667
|
+
if (apiId.endsWith('UiAssert'))
|
|
668
|
+
checkUiAssertStructure(call, stepName, issues);
|
|
669
|
+
}
|
|
670
|
+
// SETVALUES-STRUCTURE-001: SetValues values argument must use class="valueList".
|
|
554
671
|
if (apiId.includes('SetValues') && !apiId.includes('AssertValues')) {
|
|
555
|
-
|
|
556
|
-
if (valuesArg) {
|
|
557
|
-
const valuesNode = valuesArg['value'];
|
|
558
|
-
if (valuesNode != null) {
|
|
559
|
-
const valClass = valuesNode['@_class'];
|
|
560
|
-
if (valClass !== 'valueList') {
|
|
561
|
-
issues.push({
|
|
562
|
-
rule_id: 'SETVALUES-STRUCTURE-001',
|
|
563
|
-
severity: 'ERROR',
|
|
564
|
-
message: `SetValues step "${stepName}" values argument uses class="${valClass ?? '(missing)'}" — must use class="valueList" with <namedValues> children.`,
|
|
565
|
-
applies_to: 'apiCall',
|
|
566
|
-
suggestion: 'Wrap variable assignments in: <value class="valueList" mutable="Mutable"><namedValues>' +
|
|
567
|
-
'<namedValue name="varName"><value class="value" valueClass="string">value</value></namedValue>' +
|
|
568
|
-
'</namedValues></value>. In provar_testcase_generate pass each variable as a flat key/value pair ' +
|
|
569
|
-
'in attributes — the generator builds the valueList structure automatically.',
|
|
570
|
-
});
|
|
571
|
-
}
|
|
572
|
-
}
|
|
573
|
-
}
|
|
672
|
+
checkSetValuesStructure(call, stepName, issues);
|
|
574
673
|
}
|
|
575
674
|
// ASSERT-001: AssertValues using UI namedValues format instead of variable format
|
|
576
675
|
if (apiId.includes('AssertValues')) {
|
|
@@ -586,13 +685,180 @@ function validateApiCallArgs(call, apiId, name, issues) {
|
|
|
586
685
|
}
|
|
587
686
|
}
|
|
588
687
|
}
|
|
688
|
+
/** Recursively collect every node stored under `key` anywhere in the tree. */
|
|
689
|
+
function collectNodesByKey(node, key, out) {
|
|
690
|
+
if (Array.isArray(node)) {
|
|
691
|
+
for (const item of node)
|
|
692
|
+
collectNodesByKey(item, key, out);
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
if (node === null || typeof node !== 'object')
|
|
696
|
+
return;
|
|
697
|
+
const obj = node;
|
|
698
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
699
|
+
if (k === key) {
|
|
700
|
+
if (Array.isArray(v)) {
|
|
701
|
+
for (const item of v)
|
|
702
|
+
if (item !== null && typeof item === 'object')
|
|
703
|
+
out.push(item);
|
|
704
|
+
}
|
|
705
|
+
else if (v !== null && typeof v === 'object') {
|
|
706
|
+
out.push(v);
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
collectNodesByKey(v, key, out);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
/** Extract the literal text of a parsed `<value>` node, or undefined if not a literal. */
|
|
713
|
+
function literalValueText(valueNode) {
|
|
714
|
+
if (valueNode == null)
|
|
715
|
+
return undefined;
|
|
716
|
+
// Only validate literal string values — skip variable / compound references,
|
|
717
|
+
// whose runtime value cannot be checked statically.
|
|
718
|
+
const valClass = valueNode['@_class'];
|
|
719
|
+
if (valClass !== undefined && valClass !== 'value')
|
|
720
|
+
return undefined;
|
|
721
|
+
const text = valueNode['#text'];
|
|
722
|
+
if (typeof text === 'string')
|
|
723
|
+
return text;
|
|
724
|
+
if (typeof text === 'number')
|
|
725
|
+
return String(text);
|
|
726
|
+
return undefined;
|
|
727
|
+
}
|
|
728
|
+
/**
|
|
729
|
+
* COMPARISON-TYPE-001 — context-aware `comparisonType` enum validation.
|
|
730
|
+
*
|
|
731
|
+
* `comparisonType` is a single Provar enum, but each step type accepts only a
|
|
732
|
+
* SUBSET. A value outside its step's subset is load-blocking (the test case
|
|
733
|
+
* fails to load with `IllegalArgumentException: No enum constant
|
|
734
|
+
* ...ComparisonType.<value>`), so this is emitted at ERROR tier — not as a
|
|
735
|
+
* best-practices quality warning — to mirror the runtime failure offline.
|
|
736
|
+
*/
|
|
737
|
+
function validateComparisonTypes(tc, issues) {
|
|
738
|
+
// AssertValues steps → the 16-value AssertValues subset.
|
|
739
|
+
const apiCalls = [];
|
|
740
|
+
collectNodesByKey(tc, 'apiCall', apiCalls);
|
|
741
|
+
for (const call of apiCalls) {
|
|
742
|
+
const apiId = call['@_apiId'];
|
|
743
|
+
if (!apiId || !apiId.includes('AssertValues'))
|
|
744
|
+
continue;
|
|
745
|
+
const cmpArg = getArgList(call).find((a) => a['@_id'] === 'comparisonType');
|
|
746
|
+
if (!cmpArg)
|
|
747
|
+
continue;
|
|
748
|
+
const cmp = literalValueText(cmpArg['value']);
|
|
749
|
+
if (cmp === undefined || cmp === '')
|
|
750
|
+
continue;
|
|
751
|
+
if (!ASSERT_VALUES_COMPARISON_TYPE_SET.has(cmp)) {
|
|
752
|
+
const stepName = call['@_name'] ?? '(unnamed)';
|
|
753
|
+
issues.push({
|
|
754
|
+
rule_id: 'COMPARISON-TYPE-001',
|
|
755
|
+
severity: 'ERROR',
|
|
756
|
+
message: `AssertValues step "${stepName}" uses comparisonType="${cmp}", which is not a valid AssertValues comparison — this is load-blocking (IllegalArgumentException: No enum constant com.provar.core.model.base.java.ComparisonType.${cmp}).`,
|
|
757
|
+
applies_to: 'apiCall',
|
|
758
|
+
suggestion: `Use one of the AssertValues comparison types: ${ASSERT_VALUES_COMPARISON_TYPES.join(', ')}.`,
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
// UI Assert attribute assertions → the narrower 6-value UI subset.
|
|
763
|
+
const uiAsserts = [];
|
|
764
|
+
collectNodesByKey(tc, 'uiAttributeAssertion', uiAsserts);
|
|
765
|
+
for (const node of uiAsserts) {
|
|
766
|
+
const cmp = node['@_comparisonType'];
|
|
767
|
+
if (cmp === undefined || cmp === '')
|
|
768
|
+
continue;
|
|
769
|
+
if (!UI_ASSERT_COMPARISON_TYPE_SET.has(cmp)) {
|
|
770
|
+
const attr = node['@_attributeName'] ?? '(unknown attribute)';
|
|
771
|
+
issues.push({
|
|
772
|
+
rule_id: 'COMPARISON-TYPE-001',
|
|
773
|
+
severity: 'ERROR',
|
|
774
|
+
message: `UI Assert attribute assertion (attributeName="${attr}") uses comparisonType="${cmp}", which is not valid for a UI Assert (uiAttributeAssertion) — this is load-blocking (IllegalArgumentException: No enum constant com.provar.core.model.base.java.ComparisonType.${cmp}).`,
|
|
775
|
+
applies_to: 'apiCall',
|
|
776
|
+
suggestion: `Use one of the UI Assert comparison types: ${UI_ASSERT_COMPARISON_TYPES.join(', ')}. The negation/relational operators (e.g. NotEqualTo) are valid only in AssertValues steps; to negate a UI comparison, invert the assertion logic.`,
|
|
777
|
+
});
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
export const LAYER1_RULE_CATALOG = (() => {
|
|
782
|
+
const catalogPath = path.join(path.dirname(fileURLToPath(import.meta.url)), '..', 'rules', 'provar_layer1_rules.json');
|
|
783
|
+
const parsed = JSON.parse(fs.readFileSync(catalogPath, 'utf-8'));
|
|
784
|
+
return parsed.rules;
|
|
785
|
+
})();
|
|
786
|
+
/**
|
|
787
|
+
* PDX-509 — validity bridge.
|
|
788
|
+
*
|
|
789
|
+
* Best-practice violations carry a `critical|major|minor|info` severity, but
|
|
790
|
+
* historically that severity only moved `quality_score` and never gated
|
|
791
|
+
* `is_valid`. Per the canonical taxonomy, `critical` means "Provar will not
|
|
792
|
+
* load/render the test case" — exactly the class of defect that MUST flip
|
|
793
|
+
* validity. The bridge surfaces every un-suppressed `critical` BP violation as
|
|
794
|
+
* an ERROR issue so it gates `is_valid`.
|
|
795
|
+
*
|
|
796
|
+
* `major`/`minor`/`info` are intentionally NOT bridged — a major is a runtime
|
|
797
|
+
* ERROR that still loads, so it influences the quality score (and the
|
|
798
|
+
* `needs_improvement` verdict) without flipping `is_valid`.
|
|
799
|
+
*
|
|
800
|
+
* These BP rules cover concepts the hand-coded Layer-1 checks already OWN
|
|
801
|
+
* (root element, identifier, steps presence, testItemId integers, comparisonType
|
|
802
|
+
* enums). Layer-1 is authoritative for those: it fires only on the genuinely
|
|
803
|
+
* load-blocking condition (e.g. TC_020 fires on a MISSING <steps>, but an
|
|
804
|
+
* empty-but-present <steps> still loads — it just does nothing), whereas the
|
|
805
|
+
* ported BP rule is coarser (VALID-STEPS-001 also flags an empty <steps>, a
|
|
806
|
+
* "does nothing" design smell, not a load failure). So we never bridge these —
|
|
807
|
+
* Layer-1 already gates the load-blocking case, and the BP version still counts
|
|
808
|
+
* toward quality_score. The bridge's real value is the criticals Layer-1 does
|
|
809
|
+
* NOT check (unknown apiId, missing required control/connection args, invalid
|
|
810
|
+
* render value-class casing, NitroX connect args…).
|
|
811
|
+
*/
|
|
812
|
+
// Derived from the catalog's `owns_bp_rules` — the single source shared with the
|
|
813
|
+
// registry generator. A Layer-2 `critical` listed here is NOT bridged into
|
|
814
|
+
// `is_valid` (the named Layer-1 check is authoritative; bridging would
|
|
815
|
+
// double-report). Ownership today: TC_003→SCHEMA-ROOT-001, TC_010→SCHEMA-ID-001,
|
|
816
|
+
// TC_011→VALID-GUID-001, TC_020→SCHEMA-STEPS-001/VALID-STEPS-001,
|
|
817
|
+
// TC_034→STEP-ITEMID-001, COMPARISON-TYPE-001→COMPARISON-TYPE-ENUM-001.
|
|
818
|
+
export const LAYER1_OWNED_BP_RULES = new Set(LAYER1_RULE_CATALOG.flatMap((rule) => rule.owns_bp_rules ?? []));
|
|
819
|
+
/** Map a Best-Practices `appliesTo` token to the issue `applies_to` vocabulary. */
|
|
820
|
+
const BP_APPLIES_TO_ISSUE = {
|
|
821
|
+
TestCase: 'testCase',
|
|
822
|
+
Step: 'apiCall',
|
|
823
|
+
Argument: 'argument',
|
|
824
|
+
Document: 'document',
|
|
825
|
+
};
|
|
826
|
+
/**
|
|
827
|
+
* Surface every un-suppressed `critical` best-practice violation as an ERROR
|
|
828
|
+
* issue so it gates `is_valid`. Mutates `issues` in place. The BP list itself is
|
|
829
|
+
* left untouched, so `quality_score` (and its Lambda parity) is unchanged — a
|
|
830
|
+
* bridged critical deliberately appears in BOTH `issues[]` (validity) and
|
|
831
|
+
* `best_practices_violations[]` (scoring).
|
|
832
|
+
*/
|
|
833
|
+
function bridgeCriticalViolations(bpViolations, issues) {
|
|
834
|
+
const present = new Set(issues.map((i) => i.rule_id));
|
|
835
|
+
for (const v of bpViolations) {
|
|
836
|
+
if (v.severity !== 'critical')
|
|
837
|
+
continue;
|
|
838
|
+
if (present.has(v.rule_id))
|
|
839
|
+
continue;
|
|
840
|
+
if (LAYER1_OWNED_BP_RULES.has(v.rule_id))
|
|
841
|
+
continue; // Layer-1 is authoritative for these
|
|
842
|
+
issues.push({
|
|
843
|
+
rule_id: v.rule_id,
|
|
844
|
+
severity: 'ERROR',
|
|
845
|
+
message: v.message,
|
|
846
|
+
applies_to: BP_APPLIES_TO_ISSUE[v.applies_to[0] ?? ''] ?? 'testCase',
|
|
847
|
+
suggestion: v.recommendation,
|
|
848
|
+
});
|
|
849
|
+
present.add(v.rule_id);
|
|
850
|
+
}
|
|
851
|
+
}
|
|
589
852
|
function finalize(issues, testCaseId, testCaseName, stepCount, xmlContent, testName) {
|
|
853
|
+
// Layer 2: quality score (best practices engine — same rules & formula as Quality Hub API)
|
|
854
|
+
const bp = runBestPractices(xmlContent, { testName });
|
|
855
|
+
// PDX-509: bridge critical BP violations into Layer-1 issues BEFORE counting,
|
|
856
|
+
// so a "won't load" best-practice defect flips is_valid like a structural one.
|
|
857
|
+
bridgeCriticalViolations(bp.violations, issues);
|
|
590
858
|
const errorCount = issues.filter((i) => i.severity === 'ERROR').length;
|
|
591
859
|
const warningCount = issues.filter((i) => i.severity === 'WARNING').length;
|
|
592
|
-
// Layer 1: validity score (schema compliance — existing rules)
|
|
860
|
+
// Layer 1: validity score (schema compliance — existing rules + bridged criticals)
|
|
593
861
|
const validity_score = Math.max(0, 100 - errorCount * 20);
|
|
594
|
-
// Layer 2: quality score (best practices engine — same rules & formula as Quality Hub API)
|
|
595
|
-
const bp = runBestPractices(xmlContent, { testName });
|
|
596
862
|
return {
|
|
597
863
|
is_valid: errorCount === 0,
|
|
598
864
|
validity_score,
|