{"version":3,"sources":["webpack:///./Scripts/Studio/Core/DocumentBuilder.ts","webpack:///./Scripts/Studio/StatementVisitorBase.ts","webpack:///./Scripts/Studio/Controls/DBMapping/DBMappingHelper.ts","webpack:///./Scripts/Studio/TraverseStatement.ts","webpack:///./Scripts/Studio/Editors/ExpressionEditor/SwimlaneGroupOperand.ts","webpack:///./Scripts/Studio/StatementsFactory.ts","webpack:///./Scripts/Studio/StatementVisitor.ts"],"names":["filtersMap","_","once","filters","altosoft","model","insightMeta","getDocumentReferences","document","result","$type","typeName","addRange","this","getMappingReferences","dbMapping","template","push","process","visitor","accept","statement","map","metricOperands","mo","metric","_states","s","_record","filter","r","value","metrics","getAllSources","isInstanceOfType","forEach","source","sourceDocument","dataSource","getSourceStatements","st","rFunctionOperands","op","rFunction","function","fillReferences","documents","docsByReference","docsMap","keyBy","id","doc","references","ref","name","updateReferencesToInsightObjects","withItems","updateItemsFilter","items","get","statementPart","Error","visitMath","visitWhereIn","visitSqlFunction","visitField","visitConstant","visitNull","visitStoredConstant","visitOperator","visitQueryParameter","visitKnownVar","visitNewVar","visitMetric","visitIfThenElse","visitRFunction","visitDateDiffBusinessFunction","visitDateAddBusinessFunction","visitIsBusinessDateFunction","visitUserFilter","visitDashboardFilter","visitSpecialAggregationFunction","mathExpression","expressionElements","e","sqlFunction","argumentsStatements","whereInOperand","expression","values","field","constant","nullOperand","storedConstant","operator","queryParameter","knownVar","newVar","determinantStatement","condition","cases","c","whenStatement","thenStatement","defaultStatement","dateDiffFunction","dateAddFunction","isBusinessDateFunction","userFilter","specialAggreationFunction","dbMapperControlHelper","derivedFieldType","allSources","cascade","rootSources","joinedSources","_sources","FieldsMap","fm","alias","getSource","SourcesMap","_source","_fields","getSourceDocumentFields","union","derivedFields","f","FieldInfo","fi","getField","fieldId","allFields","_field","i","parameters","findMappedElement","dimensionId","links","link","targetItem","table","item","sourceField","derivedField","getItems","getParentSourceList","parent","getParentSourceInfo","sourceAlias","find","info","isRecordSource","dbMappingSource","isDBTableSource","isEmbededFileSource","statements","joinCondition","part","timeFilter","dataFilter","df","transformationExpression","convertTransformToSql","functionName","aggregationFunctions","countUnique","filterAggregationFunction","percentileFunction","medianFunction","keys","some","key","updateOrCreateAttr","attrCollection","attrName","attrValue","attr","a","getParentSource","sourceInfo","getRootSource","getRootDataSource","projectId","dataServiceProvider","rootSource","sourceDeferred","$","Deferred","loadDocument","studioDocumentTypes","record","done","resolve","fail","console","log","promise","removeSource","remove","flatMap","undefined","setDefaultTimeFilter","timeOperands","createMathExpression","length","fieldOperand","createOperator","greaterOrEqual","createCustomQueryParameter","and","lessThan","removeAllLinksForDimension","isExternalJoin","parentSource","isRecordOnRecord","isMetricSource","dbMappingSourceTable","changeTableAlias","oldAlias","newAlias","sources","Array","isArray","queryDescription","partDescriptions","groupId","changeSourceFieldId","oldFieldId","newFieldId","tableAlias","l","fieldDisplayName","displayName","sourceFieldMapping","getUsedFieldsFromSource","mappedFields","difference","fieldsInStatements","expr","collector","getFields","getTransformation","transformation","getAggregationForDimension","itemId","mapInfos","mappingInfo","getStatementAggregation","getAggregationForField","updateDescriptorAttributes","descriptor","attributes","attrs","storageSettings","toString","getSourceImage","referencesLoadedInSource","reference","getAllDerivedFields","mappingHasPossibleLossOfData","targetField","type","string","float","int","hasAggregation","sqlFunctions","aggFunctions","fn","functionType","aggregative","toUpper","functionsSet","Set","res","has","params","func","oldFun","call","Object","entries","swimlaneGroup","statementsFactory","elements","bool","isBoolean","useCaseUI","createConditionalOperand","create","createSpecialAggregationFunction","arguments","createCalendar","obj","calendar","createInsightReference","createDateDiffBusinessFunction","createDateAddBusinessFunction","createIsBusinessDateFunction","createProcessProperty","processProperty","doNotApplyTT","isFinished","violator","propertyId","applyTT","includes","createMetricOperand","metricId","metricName","parentMetric","documentReferenceTypes","slaveDocument","masterDocument","isChanged","merge","newGuid","createSqlFunction","createNullOperand","createRFunction","operand","createDocumentReference","dataArguments","arg","valueArguments","createOperand","createDirectExpression","directly","createConstant","context","createFieldOperand","createStoredConstant","parameterType","parameter","withField","createVariable","createKnownVariable","isNegative","conf","defaults","comparison","atLeast","filterBetweenOperand","pfdOperand","processFilterDefinition","mathExpressionTypes","sgRef","valueType","emptyFieldOperand","createSqlFunctionByName","queryParameterType","parameterOrWithField","operatorType","default","formattedValue","dateTime","Date","formatDate","invariantCultureDateTimeFormat","directValue","createCaseStatement","getMetricOperandName","metricsInStatementCollector","MetricsInStatementCollector","metricNames","metricOperand","formatMetricOperandName","setMetricOperandNames","prefix","index","_metricOperands","partsStack","pop","_parameters","_constants","_oldAlias","_newAlias","representation","_oldFieldId","_newFieldId","_tableAlias","fields"],"mappings":"oLAmBA,aACI,aAuFiB,KAAAA,WAAaC,EAAEC,MAAK,W,QACzBC,GAAuC,QAA3B,EAAc,QAAd,EAAAC,SAASC,aAAK,eAAEC,mBAAW,QAAI,IAAE,QACrD,OAAIH,EACO,YAAMA,GAEN,QAenB,OAzGW,YAAAI,sBAAP,SAA6BC,GACzB,IAAMC,EAAS,GACf,OAAQD,EAASE,OACb,KAAK,iBAAeC,SAGpB,KAAK,SAAOA,SAGZ,KAAK,mBAAiBA,SAClBF,EAAOG,SAASC,KAAKC,qBAAqBN,EAASO,YACnD,MACJ,KAAK,aAAWJ,SACZF,EAAOG,SAASC,KAAKC,qBAAqBN,EAASQ,SAASD,YAC5D,MACJ,KAAK,gBAAcJ,SACfF,EAAOQ,KAAKT,EAASU,SACrB,MACJ,KAAK,gBAAcP,SACf,IAAMQ,EAAU,IAAI,IACpBA,EAAQC,OAAOZ,EAASa,WACxBZ,EAAOG,SAASX,EAAEqB,IAAIH,EAAQI,gBAAgB,SAAAC,GAAM,OAAAA,EAAGC,WACvD,MACJ,KAAK,UAAQd,SACTF,EAAOG,SACHX,EAAEO,EAASkB,SACNJ,KAAI,SAACK,GAAW,OAAAA,EAAEC,WAClBC,QAAO,SAAAC,GAAK,OAAAA,KACZC,SAET,MACJ,KAAK,sBAAoBpB,SACrBF,EAAOG,SAASX,EAAEqB,IAAId,EAASwB,SAAS,SAACL,GAAW,OAAAA,EAAEF,WAG9D,OAAOhB,GAGH,YAAAK,qBAAR,SAA6BC,GACzB,IAAMN,EAAS,GAgBf,OAfA,IACKwB,cAAclB,GACdc,QAAO,SAAAF,GAAK,OAAC,6BAA2BO,iBAAiBP,MACzDQ,SAAQ,SAACC,GACN3B,EAAOQ,KAAKmB,EAAOC,gBACfD,EAAOE,YACP7B,EAAOQ,KAAKmB,EAAOE,YAGvB,IAAsBC,oBAAoBH,GAAQD,SAAQ,SAAAK,GACtD,IAAMrB,EAAU,IAAI,IACpBA,EAAQC,OAAOoB,EAAGnB,WAClBF,EAAQsB,kBAAkBN,SAAQ,SAAAO,GAAM,OAAAjC,EAAOQ,KAAKyB,EAAGC,UAAUC,mBAGtEnC,GAGJ,YAAAoC,eAAP,SAAsBC,EAAkBC,GAAxC,WACUC,EAAU/C,EAAEgD,MAA+BF,GAAiB,SAAC,GAC/D,OAD0E,YACzDG,MAErBjD,EAAE6C,GAAWX,SAAQ,SAAAgB,GACjB,IAAMC,EAAa,EAAK7C,sBAAsB4C,GAC9ClD,EAAEmD,GAAYjB,SAAQ,SAAAkB,GACdL,EAAQK,EAAIH,MACZG,EAAI7C,SAAWwC,EAAQK,EAAIH,IAAI1C,UAE/B6C,EAAI7C,WACJ6C,EAAIC,KAAOD,EAAI7C,SAAS8C,aAMjC,YAAAC,iCAAP,SAAwC/C,GAClB,sBAAY,iBAAgB,SAAQ,mBAAkB,gBAAe,gBACnFgD,CAAUhD,IACVK,KAAK4C,kBAAkBjD,EAASkD,OAEhC,aAAWxB,iBAAiB1B,IAC5BK,KAAK4C,kBAAkBjD,EAASQ,SAAS0C,QAazC,YAAAD,kBAAR,SAA0BC,G,YAChB1D,EAAaa,KAAKb,aACxB,GAAmB,OAAfA,E,IAGJ,IAAyB,kBAAA0D,GAAK,8BAAE,CAAnB,IAAA7B,EAAM,eACXA,IACAA,EAAOyB,KAAsC,QAA/B,EAAyB,QAAzB,EAAAtD,EAAW2D,IAAI9B,EAAOqB,WAAG,eAAEI,YAAI,QAAIzB,EAAOyB,O,mGAIxE,EA5GA,K,mDCnBA,yDAuBA,2BA+HA,OA9HW,YAAAlC,OAAP,SAAcwC,GACV,IAAKA,EACD,MAAM,IAAIC,MAAM,iCAEpB,IAAKD,EAAclD,MACf,MAAM,IAAImD,MAAM,yCAGpB,OAAQD,EAAclD,OAClB,KAAK,iBAAeC,SAChBE,KAAKiD,UAAUF,GACf,MACJ,KAAK,iBAAejD,SAChBE,KAAKkD,aAAaH,GAClB,MACJ,KAAK,qBAAmBjD,SACpBE,KAAKmD,iBAAiBJ,GACtB,MACJ,KAAK,eAAajD,SACdE,KAAKoD,WAAWL,GAChB,MACJ,KAAK,WAASjD,SACVE,KAAKqD,cAAcN,GACnB,MACJ,KAAK,cAAYjD,SACbE,KAAKsD,UAAUP,GACf,MACJ,KAAK,iBAAejD,SAChBE,KAAKuD,oBAAoBR,GACzB,MACJ,KAAK,WAASjD,SACVE,KAAKwD,cAAcT,GACnB,MACJ,KAAK,mBAAiBjD,SAClBE,KAAKyD,oBAAoBV,GACzB,MACJ,KAAK,gBAAcjD,SACfE,KAAK0D,cAAcX,GACnB,MACJ,KAAK,qBAAmBjD,SACpBE,KAAK2D,YAAYZ,GACjB,MACJ,KAAK,oBAAkBjD,SACnBE,KAAK4D,YAAYb,GACjB,MACJ,KAAK,qBAAmBjD,SACpBE,KAAK6D,gBAAgBd,GACrB,MACJ,KAAK,mBAAiBjD,SAClBE,KAAK8D,eAAef,GACpB,MACJ,KAAK,kCAAgCjD,SACjCE,KAAK+D,8BAA8BhB,GACnC,MACJ,KAAK,iCAA+BjD,SAChCE,KAAKgE,6BAA6BjB,GAClC,MACJ,KAAK,gCAA8BjD,SAC/BE,KAAKiE,4BAA4BlB,GACjC,MACJ,KAAK,oBAAkBjD,SACnBE,KAAKkE,gBAAgBnB,GACrB,MACJ,KAAK,yBAAuBjD,SACxBE,KAAKmE,qBAAqBpB,GAC1B,MACJ,KAAK,oCAAkCjD,SACnCE,KAAKoE,gCAAgCrB,KAKvC,YAAAE,UAAV,SAAoBoB,GAApB,WACIjF,EAAEiF,EAAeC,oBAAoBhD,SAAQ,SAAAiD,GAAK,SAAKhE,OAAOgE,OAGxD,YAAApB,iBAAV,SAA2BqB,GAA3B,WACIpF,EAAEoF,EAAYC,qBAAqBnD,SAAQ,SAAAiD,GAAK,SAAKhE,OAAOgE,OAGtD,YAAArB,aAAV,SAAuBwB,GAAvB,WACI1E,KAAKO,OAAOmE,EAAeC,YAC3BvF,EAAEsF,EAAeE,QAAQtD,SAAQ,SAAAiD,GAAK,SAAKhE,OAAOgE,OAG5C,YAAAnB,WAAV,SAAqByB,KAEX,YAAAxB,cAAV,SAAwByB,KAEd,YAAAxB,UAAV,SAAoByB,KAEV,YAAAxB,oBAAV,SAA8ByB,KAEpB,YAAAxB,cAAV,SAAwByB,KAEd,YAAAxB,oBAAV,SAA8ByB,KAEpB,YAAAxB,cAAV,SAAwByB,KAEd,YAAAxB,YAAV,SAAsByB,GAClBpF,KAAKO,OAAO6E,EAAOC,uBAGb,YAAAzB,YAAV,SAAsBhD,KAEZ,YAAAiD,gBAAV,SAA0ByB,GAA1B,WACIlG,EAAEkG,EAAUC,OAAOjE,SAAQ,SAAAkE,GACvBA,EAAEC,eAAiB,EAAKlF,OAAOiF,EAAEC,eACjCD,EAAEE,eAAiB,EAAKnF,OAAOiF,EAAEE,kBAErCJ,EAAUK,kBAAoB3F,KAAKO,OAAO+E,EAAUK,mBAG9C,YAAA7B,eAAV,SAAyBhC,KAEf,YAAAiC,8BAAV,SAAwC6B,KAE9B,YAAA5B,6BAAV,SAAuC6B,KAE7B,YAAA5B,4BAAV,SAAsC6B,KAE5B,YAAA5B,gBAAV,SAA0B6B,KAEhB,YAAA5B,qBAAV,SAA+B4B,KAErB,YAAA3B,gCAAV,SAA0C4B,KAC9C,EA/HA,K,oECSUC,E,qEAAV,SAAUA,GAGO,EAAAC,iBAAmB,eAsBhC,iBAGI,WAAYhG,GACR,IAAMiG,EAAaC,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,iBACzDtG,KAAKuG,SAAWnH,EAAE+G,GACb1F,KAAI,SAAAK,GAAK,WAAI0F,EAAU1F,MACvBsB,OAAM,SAAAqE,GAAM,OAAAA,EAAGlF,OAAOmF,SACtBxF,QAUb,OAPW,YAAAyF,UAAP,SAAiBD,GACb,OAAO1G,KAAKuG,SAASG,IAAU,MAG5B,YAAAP,WAAP,WACI,OAAO/G,EAAEwF,OAAO5E,KAAKuG,WAE7B,EAlBA,GAAa,EAAAK,WAAU,EAoBvB,iBAII,WAAYrF,GACRvB,KAAK6G,QAAUtF,EACfvB,KAAK8G,QAAU1H,EAAE2H,EAAwB/G,KAAK6G,UACzCG,MAAMhH,KAAK6G,QAAQI,eACnBxG,KAAI,SAAAyG,GAAK,WAAIC,EAAUD,MACvB9E,OAAM,SAAAgF,GAAM,OAAAA,EAAG/E,MACfnB,QAoBb,OAhBI,sBAAW,oBAAK,C,IAAhB,WACI,OAAOlB,KAAK6G,QAAQH,O,gCAIxB,sBAAW,qBAAM,C,IAAjB,WACI,OAAO1G,KAAK6G,S,gCAGT,YAAAQ,SAAP,SAAgBC,GACZ,OAAOtH,KAAK8G,QAAQQ,IAAY,MAG7B,YAAAC,UAAP,WACI,OAAOnI,EAAEwF,OAAO5E,KAAK8G,UAdzB,aADC,K,0BAMD,aADC,K,2BAYL,EA9BA,GAgCA,aAGI,WAAYjC,GACR7E,KAAKwH,OAAS3C,EAYtB,OARI,sBAAW,iBAAE,C,IAAb,WACI,OAAOyC,EAAQtH,KAAKwH,S,gCAIxB,sBAAW,6BAAc,C,IAAzB,WACI,OAAOxH,KAAKwH,SAAW,EAAAtB,kB,gCAN3B,aADC,K,uBAMD,aADC,K,mCAIL,EAhBA,GAoBA,SAAgBa,EAAwBxF,GACpC,OAAKA,EAAOC,eAAe7B,SAIpByG,EADc7E,EAAOC,eAAe7B,SAASkD,OAC9B,SAAA4E,GAClB,OAAIA,EAAE5H,QAAU,2BAAyBC,SAC9B2H,EAAEC,WAEF,MAEZ1G,QAAO,SAAAyG,GAAK,OAAAA,EAAE5H,QAAU,2BAAyBC,YATzC,GAmBf,SAAgB6H,EAAkBzH,EAAsB0H,GACpD,IAAMhI,EAAS,GAgCf,OA/BAwG,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,iBAAehF,SAAQ,SAAAC,GACzDnC,EAAEmC,EAAOsG,OACJ7G,QAAO,SAAA8G,GAAQ,OAAAA,EAAKC,aAAeH,KACnCtG,SAAQ,SAAAwG,GACL,IAAKvG,EAAOC,eAAe7B,SACvB,MAAM,IAAIqD,MAAM,+CAAiDzB,EAAOmF,OAG5E,IAAMsB,EAAQzG,EAAOC,eAAe7B,SACpCP,EAAE4I,EAAMnF,OACH7B,QAAO,SAAAiH,GAAQ,OAAAA,EAAK5F,KAAOyF,EAAKI,eAChC5G,SAAQ,SAAA2G,GACLrI,EAAOQ,KAAK,CACRyE,MAAOoD,EACPH,KAAMA,EACNE,MAAOA,EACPzG,OAAQA,OAGpBnC,EAAEmC,EAAO0F,eACJjG,QAAO,SAAAmH,GAAgB,OAAAA,EAAa1F,OAASqF,EAAKI,eAClD5G,SAAQ,SAAA6G,GACLvI,EAAOQ,KAAK,CACRyE,MAAOsD,EACPL,KAAMA,EACNE,MAAOA,EACPzG,OAAQA,aAKzB3B,EAQX,SAAgBwG,EAAWvD,EAAYuF,GACnC,IAAIxI,EAAc,GAKlB,OAJAR,EAAEkC,QAAQuB,GAAO,SAAAoF,GACbrI,EAAOQ,KAAK6H,GACZrI,EAASR,EAAE4H,MAAMpH,EAAQwG,EAAQgC,EAASH,GAAOG,OAE9CxI,EAGX,SAAgByI,EAAoBnI,GAIhC,OAAOkG,EAHkBhH,EAAEqB,IAAIP,EAAUmG,aAAa,SAAAvF,GAClD,MAAO,CAAEwH,OAAQ,KAAM/G,OAAQT,OAEF,SAAA2G,GAC7B,OAAArI,EAAEqB,IAAIgH,EAAElG,OAAO+E,eAAe,SAAAxF,GAC1B,MAAO,CAAEwH,OAAQb,EAAGlG,OAAQT,SAKxC,SAASyH,EAAoBrI,EAAsBsI,GAC/C,OAAOpJ,EAAEqJ,KAAKJ,EAAoBnI,IAAY,SAAAwI,GAAQ,OAAAA,EAAKnH,OAAOmF,QAAU8B,KAoIhF,SAAgBG,EAAeC,GAC3B,OAAOA,EAAgB/I,QAAU,iCAA+BC,SAOpE,SAAgB+I,EAAgBD,GAC5B,OAAOA,EAAgB/I,QAAU,sBAAoBC,SAGzD,SAAgBgJ,EAAoBF,GAChC,OAAOA,EAAgB/I,QAAU,6BAA2BC,SAmDhE,SAAgB4B,EAAoBH,GAChC,IAAMwH,EAAa,GA8BnB,OA7BMxH,EAAOyH,eACTD,EAAW3I,KAAK,CACZI,UAAWe,EAAOyH,cAClBC,KAAM,mBAGR1H,EAAO2H,YACTH,EAAW3I,KAAK,CACZI,UAAWe,EAAO2H,WAClBD,KAAM,gBAGR1H,EAAO4H,YACTJ,EAAW3I,KAAK,CACZI,UAAWe,EAAO4H,WAClBF,KAAM,gBAGdF,EAAWhJ,SACPX,EAAEmC,EAAO0F,eACJjG,QAAO,SAAAoI,GAAM,QAAEA,EAAGC,4BAClB5I,KAAI,SAAA2I,GACD,MAAO,CACH5I,UAAW4I,EAAGC,yBACdJ,KAAM,kBAAoBG,EAAG3G,KAAO,QAG3CvB,SAEF6H,EAGX,SAAgBzB,EAAQzC,GACpB,OAAOA,EAAMxC,IAAMwC,EAAMpC,KA+D7B,SAAS6G,EAAsBC,GAC3B,OAAQA,GACJ,IAAK,eACD,OAAO,IAAUC,qBAAqBC,YAC1C,QACI,OAAOF,GAInB,SAAgBG,EAA0BH,GAEtC,IADAA,EAAeD,EAAsBC,MAChB,IAAUI,oBAAsBJ,IAAiB,IAAUK,eAC5E,OAAOL,EAEX,IAAMC,EAAuB,IAAUA,qBAIvC,OAHepK,EAAEoK,GACZK,OACAC,MAAK,SAAAC,GAAO,OAAAP,EAAqBO,KAASR,KAC/BA,EAAe,KAgCnC,SAASS,EAAmBC,EAAmDC,EAAkBC,GAC7F,IAAIC,EAAwCH,EAAejJ,QAAO,SAAAqJ,GAAK,OAAAA,EAAE5H,OAASyH,KAAU,GAChF,MAARE,GACAH,EAAe7J,KAAMgK,EAAO,CAAE3H,KAAMyH,EAAUhJ,MAAOiJ,IAEzDC,EAAKlJ,MAAQiJ,EAkCjB,SAAgB/I,EAAclB,GAC1B,OAAOkG,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,iBAndjC,EAAAS,wBAAuB,EAqBvB,EAAAY,kBAAiB,EAyCjB,EAAAvB,QAAO,EASP,EAAAiC,oBAAmB,EAenB,EAAAiC,gBAAhB,SAAgCpK,EAAsBsI,GAClD,IAAM+B,EAAahC,EAAoBrI,EAAWsI,GAClD,OAAI+B,GAAcA,EAAWjC,OAClBiC,EAAWjC,OAAO/G,OAElB,MAIC,EAAAiJ,cAAhB,SAA8BtK,EAAsBsI,GAChD,IAAI+B,EAAahC,EAAoBrI,EAAWsI,GAChD,GAAI+B,EAAY,CACZ,KAAOA,EAAWjC,QACdiC,EAAaA,EAAWjC,OAE5B,OAAOiC,EAAWhJ,OAElB,OAAO,MAIC,EAAAkJ,kBAAhB,SAAgBA,EAAkBlJ,EAAQmJ,EAAWC,EAA0CzK,GAC3F,IAAI0K,EAAa1K,EAAUmG,YAAY,GACjCwE,EAAiBC,EAAEC,WAqBzB,OApBIpC,EAAepH,GACfoJ,EACKK,aAAaN,EAAWE,EAAWpJ,eAAea,GAAIuI,EAAWpJ,eAAeiB,KAAM,CAAC,IAAUwI,oBAAoBC,SACrHC,MAAK,SAAC7I,GAECqG,EADJiC,EAAatI,EAAIpC,UAAUmG,YAAY,IAEnCoE,EAAkBG,EAAYF,EAAWC,EAAqBrI,EAAIpC,WAAWiL,MAAK,SAAArK,GAC9E+J,EAAeO,QAAQtK,MAG3B+J,EAAeO,QAAQR,MAG9BS,MAAK,WACFC,QAAQC,IAAI,uDACZV,EAAeO,QAAQ,SAG/BP,EAAeO,QAAQ7J,GAEpBsJ,EAAeW,WAGV,EAAAnE,SAAhB,SAAyBnH,EAAsBsI,EAAqBlB,GAChE,IAAM/F,EAASnC,EAAEqJ,KACbrC,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,kBACtC,SAAAxF,GAAK,OAAAA,EAAE4F,QAAU8B,KAErB,IAAKjH,EACD,OAAO,KAGX,IAAM4G,EAAe/I,EAAEqJ,KAAKlH,EAAO0F,eAAe,SAAAC,GAAK,OAAAA,EAAEzE,OAAS6E,KAClE,GAAIa,EACA,MAAO,CAAE5G,OAAQA,EAAQsD,MAAOsD,GAGpC,IAAMtD,EAAQzF,EAAEqJ,KAAKlH,EAAOC,eAAe7B,SAASkD,OAAO,SAACqE,GAAW,OAAAA,EAAE7E,KAAOiF,KAChF,OAAIzC,EACO,CAAEtD,OAAQA,EAAQsD,MAAOA,GAEzB,MAIC,EAAA4G,aAAhB,SAA6BvL,EAAsBsI,GAC/C,IAAM+B,EAAahC,EAAoBrI,EAAWsI,GAClD,GAAI+B,EAAY,CACRA,EAAWjC,OACXiC,EAAWjC,OAAO/G,OAAO+E,cAAcoF,OAAOnB,EAAWhJ,QAEzDrB,EAAUmG,YAAYqF,OAAOnB,EAAWhJ,QAG5C,IAAM,EAAiB6E,EAAQ,CAACmE,EAAWhJ,SAAS,SAAAT,GAAK,OAAAA,EAAEwF,iBAAe7F,KAAI,SAAAK,GAAK,OAAAA,EAAE4F,SAUrF,OARAtH,EAAEgH,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,kBACnCqF,SAAQ,SAAA7K,GAAK,OAAAY,EAAoBZ,MACjCQ,SAAQ,SAAAR,GACL,EAAeQ,SAAQ,SAAAoF,GACH,IAAI,SAA4BkF,EAA8ClF,GACtFnG,OAAOO,EAAEN,kBAGtB,EAEP,OAAO,GAIC,EAAAqL,qBAAhB,SAAqCtK,EAA6BuK,GAC9D,IAAMzH,EAAiB,IAAkB0H,uBACzC,GAAMD,GAAgBA,EAAaE,OAAS,EAAG,CAC3C,IAAMC,EAAeH,EAAa,GAClCzH,EAAeC,mBAAqB,CAChC2H,EACA,IAAkBC,eAAe,KAAaC,gBAC9C,IAAkBC,2BAA2B,YAAY,GACzD,IAAkBF,eAAe,KAAaG,KAC9C,QAAkBJ,GAClB,IAAkBC,eAAe,KAAaI,UAC9C,IAAkBF,2BAA2B,UAAU,IAG/D7K,EAAO2H,WAAa7E,GAGR,EAAAkI,2BAAhB,SAA2CrM,EAAsB0H,GAC7DxB,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,iBAAehF,SAAQ,SAAAC,GACzDA,EAAOsG,MAAQzI,EAAE4B,OAAOO,EAAOsG,OAAO,SAAAC,GAAQ,OAAAA,EAAKC,aAAeH,SAI1D,EAAA4E,eAAhB,SAA+BjL,EAAQkL,GACnC,QAAKA,IAIE5D,EAAgBtH,IAAWsH,EAAgB4D,IAAiBlL,EAAOE,WAAWY,KAAOoK,EAAahL,WAAWY,KAGxG,EAAAqK,iBAAhB,SAAiCxM,GAC7B,OAAOd,EAAEgH,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,kBAAgBwD,MAAK,SAAAhJ,GAAK,OAAC+H,EAAgB/H,KAAOgI,EAAoBhI,OAGzG,EAAA6H,eAAc,EAId,EAAAgE,eAAhB,SAA+BC,GAC3B,OAAO,aAAWvL,iBAAiBuL,IAGvB,EAAA/D,gBAAe,EAIf,EAAAC,oBAAmB,EAInB,EAAA+D,iBAAhB,SAAiC3M,EAA8C4M,EAAkBC,GAK7F,IAAIC,EAJAF,IAAaC,IAKbE,MAAMC,QAAQhN,GACd8M,EAAU9M,GAEV8M,EAAU9M,EAAUmG,YAChBnG,EAAUiN,kBACV/N,EAAEkC,QAAQpB,EAAUiN,iBAAiBC,kBAAkB,SAAAnE,GAC/CA,EAAKoE,UAAYP,IACjB7D,EAAKoE,QAAUN,OAM/B3N,EAAEgH,EAAQ4G,GAAS,SAAAlM,GAAK,OAAAA,EAAEwF,kBACrBqF,SAAQ,SAAA7K,GAAK,OAAAY,EAAoBZ,MACjCQ,SAAQ,SAAAR,GACW,IAAI,IAAwBgM,EAAUC,GAC9CxM,OAAOO,EAAEN,gBAIb,EAAA8M,oBAAhB,SAAoCpN,EAAsBqN,EAAoBC,EAAoBC,GAC1FF,IAAeC,IAInBpO,EAAEgH,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,kBACnCtF,QAAO,SAAAF,GAAK,OAAAA,EAAE4F,QAAU+G,KACxB9B,SAAQ,SAAA7K,GAAK,OAAAA,EAAE+G,SACf7G,QAAO,SAAA0M,GAAK,OAAAA,EAAExF,cAAgBqF,KAC9BjM,SAAQ,SAAAoM,GACLA,EAAExF,YAAcsF,KAGxBpO,EAAEgH,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,kBACnCqF,SAAQ,SAAA7K,GAAK,OAAAY,EAAoBZ,MACjCQ,SAAQ,SAAAR,GACW,IAAI,IAA0ByM,EAAYC,EAAYC,GAC9DlN,OAAOO,EAAEN,gBAIb,EAAAkB,oBAAmB,EAkCnB,EAAA4F,QAAO,EAIP,EAAAqG,iBAAhB,SAAiC9I,GAC7B,OAAOA,EAAM+I,aAAe/I,EAAMxC,IAAMwC,EAAMpC,MAGlC,EAAAoL,mBAAhB,SAAmCtM,EAA6BsD,GAC5D,IAAMiD,EAAO1I,EAAEqJ,KAAKlH,EAAOsG,OAAO,SAAA6F,GAAK,OAAAA,EAAExF,cAAgBrD,KACzD,OAAOiD,GAAQA,EAAKC,YAGR,EAAA+F,wBAAhB,SAAwCvM,EAA6BrB,GACjE,IAAM+G,EAAgB7H,EAAEqB,IAAIc,EAAO0F,eAAe,SAAAmC,GAAM,OAAAA,EAAG3G,QAErDsL,EAAe3O,EAAEmC,EAAOsG,OACzBpH,KAAI,SAAAiN,GAAK,OAAAA,EAAExF,eACX8F,WAAW/G,GACX/F,QACC+M,EAAqB7O,EAAEgH,EAAQlG,EAAUmG,aAAa,SAAAvF,GAAK,OAAAA,EAAEwF,kBAC9DqF,SAAQ,SAAA7K,GAAK,OAAAY,EAAoBZ,MACjC6K,SAAQ,SAAAuC,GACL,IAAMC,EAAY,IAAI,IAEtB,OADAA,EAAU5N,OAAO2N,EAAK1N,WACf2N,EAAUC,eAEpBpN,QAAO,SAAAkG,GAAK,OAAAA,EAAEuG,aAAelM,EAAOmF,SACpCjG,KAAI,SAAAyG,GAAK,OAAAA,EAAEI,WACX0G,WAAW/G,GACX/F,QAEL,OAAO9B,EAAE4H,MAAM+G,EAAcE,IAGjB,EAAAI,kBAAhB,SAAkC9M,EAA6B+F,GAC3D,IAAMQ,EAAO1I,EAAEqJ,KAAKlH,EAAOsG,OAAO,SAAA6F,GAAK,OAAAA,EAAExF,cAAgBZ,KACzD,OAAOQ,GAAQA,EAAKwG,gBAKR,EAAAC,2BAAhB,SAA2CrO,EAAsBsO,GAC7D,IAAMC,EAAW9G,EAAkBzH,EAAWsO,GAC9C,OAAIC,GAAYA,EAASzC,OAAS,EAyCtC,SAAgC0C,GAC5B,IAAM7J,EAAQ6J,EAAY7J,MAEpByJ,EAAiBI,EAAY5G,KAAKwG,eACxC,GAAIA,EAAgB,CAEhB,OAAO5E,EADaJ,EAAsBgF,IAI9C,GAAIzJ,EAAMhF,QAAU,eAAaC,SAAU,CAEvC,OAAO4J,EA7Cf,SAAiClJ,GAC7B,GAAIA,EAAUX,QAAU,iBAAeC,UAAoD,IAAxCU,EAAU8D,mBAAmB0H,OAC5E,OAAO,KAEX,GACIxL,EAAU8D,mBAAmB,GAAGzE,QAAU,qBAAmBC,UAC7DU,EAAU8D,mBAAmB,GAAGzE,QAAU,oCAAkCC,SAE5E,OAAOU,EAAU8D,mBAAmB,GAAG7B,KAE3C,OAAO,KAkC0BkM,CAAwB9J,EAAMwE,2BAI/D,OAAO,KAtDIuF,CAAuBH,EAAS,IAEhC,MA0BC,EAAA/E,0BAAyB,EA+BzB,EAAAmF,2BAAhB,SAA2CC,EAAYnP,GAC9CmP,EAAWC,aACZD,EAAWC,WAAa,IAE5B,IAAMC,EAA2CF,EAAWC,WAE5D/E,EAAmBgF,EAAO,kBAAmBrP,EAASsP,iBAAiBC,YACvElF,EAAmBgF,EAAO,aAAc/I,EAAsByG,iBAAiB/M,EAASO,WAAa,gBAAkB,iBAW3G,EAAAiP,eAAhB,SAA+B5N,GAC3B,OAAQA,EAAO1B,OACX,KAAK,sBAAoBC,SACrB,MAAO,+BACX,KAAK,iCAA+BA,SAChC,MAAO,6BACX,KAAK,mCAAiCA,SAClC,MAAO,kCACX,KAAK,6BAA2BA,SAC5B,MAAO,4BACX,QACI,MAAO,+BAIH,EAAAsP,yBAAhB,SAAyC7N,GACrC,OAAKA,EAAOC,eAAe7B,SAMvBkJ,EAAgBtH,KAAYA,EAAOE,WAAW9B,SACvC,CACHsJ,KAAM,cACNoG,UAAW9N,EAAOE,YAGnB,KAXI,CACHwH,KAAM,SACNoG,UAAW9N,EAAOC,iBAYd,EAAAJ,cAAa,EAIb,EAAAkO,oBAAhB,SAAoCpP,GAChC,IAAMiG,EAAa/E,EAAclB,GACjC,OAAOd,EAAEuM,QAAQxF,GAAY,SAAA5E,GAAU,OAAAA,EAAO0F,kBAGlC,EAAAsI,6BAAhB,SACIrH,EACAsH,EACA1H,GAEA,IAAKA,EAAKwG,eACN,OAAQpG,EAAYuH,MAChB,KAAK,KAASC,OACV,OACIF,EAAYC,OAAS,KAASE,OAC9BH,EAAYC,OAAS,KAASG,KAC7BJ,EAAYC,OAAS,KAASC,QAAUF,EAAYxD,OAAS9D,EAAY8D,OAElF,KAAK,KAAS2D,MACV,OAAOH,EAAYC,OAAS,KAASG,IAIjD,OAAO,GAGK,EAAAC,eAAhB,SAA+BlL,EAA4BmL,QAAA,IAAAA,MAAwCvQ,SAASC,MAAMsQ,cAC9G,IAAMC,EAAeD,EAAa9O,QAAO,SAAAgP,GAAM,OAAAA,EAAGC,eAAiB,KAAaC,eAAazP,KAAI,SAAAuP,GAAM,OAAA5Q,EAAE+Q,QAAQH,EAAGvN,SAC9G2N,EAAe,IAAIC,IAAIN,GACzBO,GAAM,EASV,OARA,IAAI,IAAkB,CAClBnN,iBAAA,SAAiB6M,GACbM,EAAMA,GAAOF,EAAaG,IAAInR,EAAE+Q,QAAQH,EAAGvN,QAE/C2B,gCAAA,SAAgC4L,GAC5BM,GAAM,KAEX/P,OAAOoE,GACH2L,GA7lBf,CAAUrK,MAAqB,KAgmBhB,Q,qGCrmBf,cACI,WAA6BuK,G,QAA7B,EACI,cAAO,KADkB,EAAAA,S,eAEbzG,EAAK0G,GACb,IAAMC,EAAS,EAAK3G,GACpB,EAAKA,GAAO,SAAAvJ,GACRiQ,EAAKE,KAAK,EAAMnQ,GAChBkQ,EAAOC,KAAK,EAAMnQ,K,WAJ1B,IAA0B,MAAAoQ,OAAA,IAAAA,QAAOC,QAAQL,IAAO,+BAArC,6B,EAAI,KAAM,O,0GAgF7B,OAnFuC,iBAY5B,YAAAvN,UAAP,SAAiBoB,GACb,YAAMpB,UAAS,UAACoB,IAGb,YAAAlB,iBAAP,SAAwBqB,GACpB,YAAMrB,iBAAgB,UAACqB,IAGpB,YAAApB,WAAP,SAAkByB,GACd,YAAMzB,WAAU,UAACyB,IAGd,YAAAxB,cAAP,SAAqByB,GACjB,YAAMzB,cAAa,UAACyB,IAGjB,YAAAxB,UAAP,SAAiByB,GACb,YAAMzB,UAAS,UAACyB,IAGb,YAAAxB,oBAAP,SAA2ByB,GACvB,YAAMzB,oBAAmB,UAACyB,IAGvB,YAAAxB,cAAP,SAAqByB,GACjB,YAAMzB,cAAa,UAACyB,IAGjB,YAAAxB,oBAAP,SAA2ByB,GACvB,YAAMzB,oBAAmB,UAACyB,IAGvB,YAAAxB,cAAP,SAAqByB,GACjB,YAAMzB,cAAa,UAACyB,IAGjB,YAAAxB,YAAP,SAAmByB,GACf,YAAMzB,YAAW,UAACyB,IAGf,YAAAxB,YAAP,SAAmBhD,GACf,YAAMgD,YAAW,UAAChD,IAGf,YAAAkD,eAAP,SAAsBhC,GAClB,YAAMgC,eAAc,UAAChC,IAGlB,YAAAiC,8BAAP,SAAqC6B,GACjC,YAAM7B,8BAA6B,UAAC6B,IAGjC,YAAA5B,6BAAP,SAAoC6B,GAChC,YAAM7B,6BAA4B,UAAC6B,IAGhC,YAAA5B,4BAAP,SAAmC6B,GAC/B,YAAM7B,4BAA2B,UAAC6B,IAG/B,YAAA5B,gBAAP,SAAuB6B,GACnB,YAAM7B,gBAAe,UAAC6B,IAGnB,YAAA5B,qBAAP,SAA4B4B,GACxB,YAAM5B,qBAAoB,UAAC4B,IAGxB,YAAA3B,gCAAP,SAAuC4B,GACnC,YAAM5B,gCAA+B,UAAC4B,IAE9C,EAnFA,C,OAAuC,I,iCCzBvC,wCAGI,SAAmB8K,GAAA,KAAAA,kB,iCCLvB,gBAiDUC,EAjDV,+DAiDA,SAAUA,GAKN,SAAgBhF,EAAqB0D,EAAgCuB,GACjE,YADiC,IAAAvB,MAAiB,KAASwB,WAAM,IAAAD,MAAA,IAC1D,CACHnR,MAAO,iBAAeC,SACtBoR,UAAWzB,IAAS,KAASwB,KAC7B3M,mBAAoB0M,EACpBG,WAAW,GAuHnB,SAAgBC,IACZ,IAAMxR,EAAS,qBAAmByR,SAQlC,OAPAzR,EAAO2F,MAAQ,CACX,CACIE,cAAesG,IACfrG,cAAeqG,MAGvBnM,EAAO+F,iBAAmBoG,IACnBnM,EAGX,SAAgB0R,EAAiCb,GAC7C,OAAO,oCAAkCY,OAAO,CAC5CE,UAAWd,EAAKc,UAChB9M,oBAAqBrF,EAAEqB,IAAIgQ,EAAKc,WAAW,SAAAnS,GAAK,OAAA2M,OAChDtJ,KAAMgO,EAAKhO,OAInB,SAAgB+O,EAAeC,GAC3B,OAAO,kBAAgBJ,OAAO,CAC1BK,SAAU,IAAcC,uBAAuB,CAC3C9R,MAAO,iBAAeC,SACtBuC,GAAIoP,EAAIpP,GACRI,KAAMgP,EAAIhP,SAKtB,SAAgBmP,EAA+BnB,GAC3C,OAAO,kCAAgCY,OAAO,CAC1C5M,oBAAqBrF,EAAEqB,IAAIgQ,EAAKc,WAAW,SAAAnS,GAAK,OAAA2M,OAChDwF,UAAWd,EAAKc,UAChB9O,KAAMgO,EAAKhO,KACXgN,KAAMgB,EAAKhB,OAInB,SAAgBoC,EAA8BpB,GAC1C,OAAO,iCAA+BY,OAAO,CACzC5M,oBAAqBrF,EAAEqB,IAAIgQ,EAAKc,WAAW,SAAAnS,GAAK,OAAA2M,OAChDwF,UAAWd,EAAKc,UAChB9O,KAAMgO,EAAKhO,KACXgN,KAAMgB,EAAKhB,OAInB,SAAgBqC,EAA6BrB,GACzC,OAAO,gCAA8BY,OAAO,CACxC5M,oBAAqBrF,EAAEqB,IAAIgQ,EAAKc,WAAW,SAAAnS,GAAK,OAAA2M,OAChDwF,UAAWd,EAAKc,UAChB9O,KAAMgO,EAAKhO,KACXgN,KAAMgB,EAAKhB,OAInB,SAAgBsC,EAAsBC,GAClC,IAAMC,EAAe,CAAC,IAAU5R,QAAQ6R,WAAY,IAAU7R,QAAQ8R,UACtE,OAAO,yBAAuBd,OAAO,CACjCe,WAAYJ,EAAgB3P,GAC5BgQ,SAAUjT,EAAEkT,SAASL,EAAcD,EAAgB3P,MAI3D,SAAgBkQ,EAAoBd,EAAK9M,GACrC,IAAM6N,EAAWf,EAAI7Q,OAAOyB,GACtBoQ,EAAahB,EAAI7Q,OAAO6B,KAExB7B,EAAS,CACXf,MAAO4R,EAAIiB,aAAe,IAAUC,uBAAuBC,cAAgB,IAAUD,uBAAuB/R,OAC5GyB,GAAImQ,EACJ/P,KAAMgQ,EACNI,eAAgBpB,EAAIiB,aACd,CACIrQ,GAAIoP,EAAIiB,aAAarQ,GACrBI,KAAMgP,EAAIiB,aAAajQ,MAE3B,KACNqQ,WAAW,GAEf,OAAO1T,EAAE2T,MACL,oBAAkB1B,OAAO,CACrBhP,GAAI,IAAK2Q,UACTpS,OAAQA,IAEZ,CACI6B,KAAM,YAAqBkC,EAAY8N,KAkCnD,SAAgBQ,EAAkBxC,GAC9B,OAAO,qBAAmBY,OAAO,CAC7B5M,oBAAqBrF,EAAEqB,IAAIgQ,EAAKc,WAAW,SAAAnS,GAAK,OAAA2M,OAChDwF,UAAWd,EAAKc,UAChB9O,KAAMgO,EAAKhO,OA2DnB,SAAgByQ,IACZ,OAAO,cAAY7B,SAsBvB,SAAgB8B,EAAgBrR,GAC5B,IAAMsR,EAAU,mBAAiB/B,OAAO,CACpCtP,SAAU,IAAcsR,wBAAwBvR,KAIpD,OAFAsR,EAAQE,cAAgBlU,EAAEqB,IAAIqB,EAAUwR,eAAe,SAAAC,GAAO,OAAAxH,OAC9DqH,EAAQI,eAAiBpU,EAAEqB,IAAIqB,EAAU0R,gBAAgB,SAAAD,GAAO,OAAAxH,OACzDqH,EAjVK,EAAArH,qBAAoB,EASpB,EAAA0H,cAAhB,SAA8BhE,EAAMgC,EAAK9M,G,MACrC,OAAQ8K,GACJ,KAAK,qBAAmB3P,SACpB,OAAOiR,EAAkBkC,kBAAkBxB,GAE/C,KAAK,0BAAwB3R,SACzB,OAAOiR,EAAkB2C,uBAAuBjC,EAAIvQ,OAExD,KAAK,WAASpB,SACV,OAAO2R,EAAIkC,SACL5C,EAAkB2C,uBAAuBjC,EAAIvQ,OAC7C6P,EAAkB6C,eAAenC,EAAIhC,KAAMgC,EAAIvQ,MAAOuQ,EAAIkC,SAAUlC,EAAIoC,SAElF,KAAK,WAAS/T,SACV,OAAOiR,EAAkB7E,eAAeuF,GAE5C,KAAK,eAAa3R,SACd,OAAOiR,EAAkB+C,mBAAmBrC,EAAIhE,WAAYgE,EAAInK,QAASmK,EAAIhC,MAEjF,KAAK,iBAAe3P,SAChB,OAAOiR,EAAkBgD,qBAAqBtC,EAAIhC,KAAMgC,EAAIpP,GAAIoP,EAAIhP,MAExE,KAAK,mBAAiB3C,SAClB,OAAOiR,EAAkB3E,2BAA2BqF,EAAIuC,cAA4B,QAAb,EAAAvC,EAAIwC,iBAAS,QAAIxC,EAAIyC,WAEhG,KAAK,qBAAmBpU,SACpB,OAAOiR,EAAkBoD,eAAe1C,EAAIvQ,OAEhD,KAAK,gBAAcpB,SACf,OAAOiR,EAAkBqD,oBAAoB3C,EAAIvQ,OAErD,KAAK,oBAAkBpB,SACnB,OAAOyS,EAAoBd,EAAK9M,GAEpC,KAAK,oCAAkC7E,SACnC,OAAOwR,EAAiCG,GAE5C,KAAK,kCAAgC3R,SACjC,OAAO8R,EAA+BH,GAE1C,KAAK,iCAA+B3R,SAChC,OAAO+R,EAA8BJ,GAEzC,KAAK,gCAA8B3R,SAC/B,OAAOgS,EAA6BL,GAExC,KAAK,kBAAgB3R,SACjB,OAAO0R,EAAeC,GAE1B,KAAK,qBAAmB3R,SACpB,OAAOsR,IAEX,KAAK,iBAAetR,SAChB,IAAM4E,EAAiB,iBAAe2M,SAEtC,OADA3M,EAAe2P,aAAe5C,EAAI4C,WAC3B3P,EAEX,KAAK,cAAY5E,SACb,OAAOoT,IAEX,KAAK,yBAAuBpT,SACxB,OAAOiS,EAAsBN,GAEjC,KAAK,kCAAgC3R,SACjC,OAAO,kCAAgCuR,SAE3C,KAAK,oCAAkCvR,SACnC,OAAO,oCAAkCuR,SAE7C,KAAK,+BAA6BvR,SAC9B,OAAO,+BAA6BuR,SAExC,KAAK,kCAAgCvR,SACjC,OAAO,kCAAgCuR,SAE3C,KAAK,8CAA4CvR,SAC7C,IAAMwU,EAAOlV,EAAEmV,SAAS9C,EAAK,CAAE+C,WAAY,IAAkCC,UACvEC,EAAuB,8CAA4CrD,SAEzE,OADAqD,EAAqBF,WAAaF,EAAKE,WAChCE,EAEX,KAAK,kCAAgC5U,SACjC,IAAM6U,EAAa,kCAAgCtD,SAMnD,OALAsD,EAAWC,wBAA0B,IAAcvB,wBAAwB,CACvExT,MAAO,0BAAwBC,SAC/BuC,GAAIoP,EAAIpP,GACRI,KAAMgP,EAAIhP,OAEPkS,EAEX,KAAK,sCAAoC7U,SACrC,OAAO,sCAAoCuR,SAE/C,KAAK,IAAUwD,oBAAoB/D,cAC/B,IAAMgE,EAAQ,IAAczB,wBAAwB,CAChDxT,MAAO,gBAAcC,SACrBuC,GAAIoP,EAAIpP,GACRI,KAAMgP,EAAIhP,OAEd,OAAO,IAAI,IAAqBqS,GACpC,KAAK,mBAAiBhV,SAClB,OAAOqT,EAAgB1B,GAC3B,KAAK,oBAAkB3R,SACnB,OAAO,oBAAkBuR,OAAO,CAAErQ,OAAQ,IAAc2Q,uBAAuBF,KACnF,KAAK,yBAAuB3R,SACxB,OAAO,yBAAuBuR,SAClC,KAAK,uBAAqBvR,SACtB,OAAO,uBAAqBuR,OAAO,CAC/B5M,oBAAqB,CAAC,iBAAe4M,YAE7C,QACI,MAAM,IAAIrO,MAAM,0BAIZ,EAAAoO,yBAAwB,EAYxB,EAAAE,iCAAgC,EAQhC,EAAAE,eAAc,EAUd,EAAAI,+BAA8B,EAS9B,EAAAC,8BAA6B,EAS7B,EAAAC,6BAA4B,EAS5B,EAAAC,sBAAqB,EAQrB,EAAAQ,oBAAmB,EA2BnB,EAAA6B,oBAAhB,SAAoC3R,GAChC,OAAO,gBAAc4O,OAAO,CACxB5O,KAAMA,KAIE,EAAA0R,eAAhB,SAA+B1R,GAC3B,OAAO,qBAAmB4O,OAAO,CAC7B5O,KAAMA,EACN4C,qBAAsB0G,OAId,EAAA+H,mBAAhB,SAAmCrG,EAAYnG,EAASyN,GACpD,YADoD,IAAAA,MAAY,KAASrF,QAClE,eAAa2B,OAAO,CACvB/J,QAASA,EACTmG,WAAYA,KAIP,EAAAuH,kBAAoB,eAAa3D,OAAO,CACjD5D,WAAY,yCAGA,EAAAwH,wBAAhB,SAAwC1L,GAEpC,OAAO0J,EADM7T,EAAEqJ,KAAKlJ,SAASC,MAAMsQ,cAAc,SAAC5I,GAAW,OAAAA,EAAEzE,OAAS8G,OAI5D,EAAA0J,kBAAiB,EAUjB,EAAA7G,2BAAhB,SACI8I,EACAC,GAEA,IAAIlB,EAAWpP,EASf,OARAsQ,EAAuBA,WACnB/V,EAAE8R,UAAUiE,IACiB,IAAzBA,IACAtQ,EAAQ,EAAAmQ,mBAGZf,EAAY,IAAcZ,wBAAwB8B,EAAsB,YAAUrV,UAE/E,mBAAiBuR,OAAO,CAC3B6D,mBAAkB,EAClBjB,UAAWA,EACXpP,MAAK,KAIG,EAAAqH,eAAhB,SAA+BkJ,GAC3B,OAAO,WAAS/D,OAAO,CAAE+D,aAAY,KAGzB,EAAA1B,uBAAhB,SAAuC9O,GACnC,OAAO,0BAAwByM,OAAO,CAClCzM,OAAQA,KAIA,EAAAgP,eAAhB,SACInE,EACAvO,EACAyS,EACAE,QADA,IAAAF,OAAA,QACA,IAAAE,MAA2B,IAAgBwB,SAE3C,IAAIC,EAAyB,KAChB,MAATpU,IAEIoU,EADA7F,IAAS,KAAS8F,UAAYrU,aAAiBsU,KAC9B,IAAaC,WAAWvU,EAAO,IAAUwU,gCAEzCxU,EAAMgO,YAI/B,IAAMpK,EAAW,WAASuM,SAK1B,OAJAvM,EAASiQ,UAAYtF,EACrB3K,EAAS6Q,YAAcL,EACvBxQ,EAAS6O,SAAWA,EACpB7O,EAAS+O,QAAUA,EACZ/O,GAGK,EAAAoO,kBAAiB,EAKjB,EAAA0C,oBAAhB,WACI,IAAMpV,EAAYuL,IAIlB,OAHAvL,EAAU2Q,WAAY,EACtB3Q,EAAU8D,mBAAqB,CAACyM,EAAkBK,4BAE3C5Q,GAGK,EAAAuT,qBAAhB,SAAqCtE,EAAcpN,EAAYI,GAC3D,OAAO,iBAAe4O,OAAO,CACzBvM,SAAU,IAAcuO,wBAAwB,CAC5CxT,MAAO,mBAAiBC,SACxBuC,GAAIA,EACJI,KAAMA,OAKF,EAAA0Q,gBAAe,EAhVnC,CAAUpC,MAAiB,KAyVZ,Q,0ZCrYR,SAAS8E,EAAqBlR,EAAY8N,GAC7C,IAAMqD,EAA8B,IAAIC,EAExCD,EAA4BvV,OAAOoE,GAEnC,IAAMqR,EAAc5W,EAAEqB,IAAIqV,EAA4BpV,gBAAgB,SAAAuV,GAAiB,OAAAA,EAAcxT,QACrG,OAAO,iBAA2BgQ,EAAYuD,EAAaE,GAGxD,SAASC,EAAsBxR,GAClC,IAAMmR,EAA8B,IAAIC,EAExCD,EAA4BvV,OAAOoE,GAEnC,IAAMqR,EAAc,GACpB5W,EAAEkC,QAAQwU,EAA4BpV,gBAAgB,SAAAuV,GAClDA,EAAcxT,KAAO,iBAA2BwT,EAAcrV,OAAO6B,KAAMuT,EAAaE,GACxFF,EAAY5V,KAAK6V,EAAcxT,SAIhC,SAASyT,EAAwBE,EAAQC,GAC5C,OAAgB,GAATA,EAAaD,EAASA,EAAS,IAAMC,EAAQ,IAGxD,6E,OACY,EAAAC,gBAAyB,G,EAUrC,OAXiD,iBAI7C,sBAAW,6BAAc,C,IAAzB,WACI,OAAOtW,KAAKsW,iB,gCAGN,YAAA1S,YAAV,SAAsBhD,GAClBZ,KAAKsW,gBAAgBlW,KAAKQ,IAL9B,aADC,K,mCAQL,EAXA,CAAiD,KAajD,yE,OACW,EAAAgB,kBAAsF,GACrF,EAAA2U,WAAsC,G,EAelD,OAjBoD,iBAIzC,YAAAhW,OAAP,SAAcwC,GACV/C,KAAKuW,WAAWnW,KAAK2C,GACrB,YAAMxC,OAAM,UAACwC,GACb/C,KAAKuW,WAAWC,OAGV,YAAA1S,eAAV,SAAyBhC,GACrB,IAAMwG,EAAStI,KAAKuW,WAAWvW,KAAKuW,WAAWvK,OAAS,GACxDhM,KAAK4B,kBAAkBxB,KAAK,CACxB0B,UAAWA,EACXwG,OAAQA,KAGpB,EAjBA,CAAoD,KAmBpD,yE,OACY,EAAAmO,YAAkC,GAOlC,EAAAC,WAA+B,G,EAc3C,OAtBgE,iBAI5D,sBAAW,yBAAU,C,IAArB,WACI,OAAO1W,KAAKyW,a,gCAMhB,sBAAW,wBAAS,C,IAApB,WACI,OAAOzW,KAAK0W,Y,gCAGN,YAAAjT,oBAAV,SAA8BwQ,GAC1BjU,KAAKyW,YAAYrW,KAAK6T,IAGhB,YAAA1Q,oBAAV,SAA8ByB,GAC1BhF,KAAK0W,WAAWtW,KAAK4E,IAhBzB,aADC,K,+BAQD,aADC,K,8BAYL,EAtBA,CAAgE,KAwBhE,cAII,WAAY8H,EAAkBC,GAA9B,MACI,cAAO,K,OACP,EAAK4J,UAAY7J,EACjB,EAAK8J,UAAY7J,E,EASzB,OAhB6C,iBAU/B,YAAA3J,WAAV,SAAqByB,GACbA,EAAM4I,aAAezN,KAAK2W,YAC1B9R,EAAM4I,WAAazN,KAAK4W,UACxB/R,EAAMgS,eAAiBhS,EAAMpC,KAAOoC,EAAM4I,WAAa,IAAM5I,EAAMyC,UAG/E,EAhBA,CAA6C,KAkB7C,cAKI,WAAYiG,EAAoBC,EAAoBC,GAApD,MACI,cAAO,K,OACP,EAAKqJ,YAAcvJ,EACnB,EAAKwJ,YAAcvJ,EACnB,EAAKwJ,YAAcvJ,E,EAS3B,OAlB+C,iBAYjC,YAAArK,WAAV,SAAqByB,GACbA,EAAM4I,aAAezN,KAAKgX,aAAenS,EAAMyC,UAAYtH,KAAK8W,cAChEjS,EAAMyC,QAAUtH,KAAK+W,YACrBlS,EAAMpC,KAAOoC,EAAM4I,WAAa,IAAMzN,KAAK+W,cAGvD,EAlBA,CAA+C,KAoB/C,yE,OACY,EAAAE,OAAyB,G,EASrC,OAVgD,iBAGlC,YAAA7T,WAAV,SAAqByB,GACjB7E,KAAKiX,OAAO7W,KAAKyE,IAGd,YAAAuJ,UAAP,WACI,OAAOpO,KAAKiX,QAEpB,EAVA,CAAgD,KAYhD,cAII,WAAY3P,EAAiBZ,GAA7B,MACI,cAAO,K,OAEP,EAAKA,MAAQA,EACb,EAAKY,QAAUA,E,EAevB,OAvBiD,iBAWnC,YAAArE,UAAV,SAAoBoB,GAApB,WACIA,EAAeC,mBAAqBlF,EAAEiF,EAAeC,oBAChDtD,QAAO,SAAAuD,GACJ,OAAIA,EAAE1E,QAAU,eAAaC,YAGpByE,EAAEkJ,aAAe,EAAK/G,aAA2BkF,IAAjB,EAAKtE,SAAyB/C,EAAE+C,UAAY,EAAKA,aAE7FpG,QAEL,YAAM+B,UAAS,UAACoB,IAExB,EAvBA,CAAiD,O","file":"studio-admin-alertMessage-dataLoadManager-error-mtConsole-studio-themeManager-viewer.js","sourcesContent":["import { toMap } from '@Common/Helpers/CollectionUtils';\r\nimport {\r\n DBMapping,\r\n DBMappingEmbededDataSource,\r\n DerivedMetric,\r\n DimensionItem,\r\n MetricGroupDocument,\r\n MetricPool,\r\n Process,\r\n ProcessMetric,\r\n RecordDocument,\r\n RepositoryDocument,\r\n RModel,\r\n someOfTypes,\r\n TranslationTable\r\n} from '@InstanceFactory';\r\nimport dbMapperControlHelper from '@Studio/Controls/DBMapping/DBMappingHelper';\r\nimport { MetricsInStatementCollector, RFunctionsInStatementCollector } from '@Studio/StatementVisitor';\r\n\r\nexport class DocumentBuilder {\r\n constructor() {}\r\n\r\n public getDocumentReferences(document): any[] {\r\n const result = [];\r\n switch (document.$type) {\r\n case RecordDocument.typeName:\r\n result.addRange(this.getMappingReferences(document.dbMapping));\r\n break;\r\n case RModel.typeName:\r\n result.addRange(this.getMappingReferences(document.dbMapping));\r\n break;\r\n case TranslationTable.typeName:\r\n result.addRange(this.getMappingReferences(document.dbMapping));\r\n break;\r\n case MetricPool.typeName:\r\n result.addRange(this.getMappingReferences(document.template.dbMapping));\r\n break;\r\n case ProcessMetric.typeName:\r\n result.push(document.process);\r\n break;\r\n case DerivedMetric.typeName:\r\n const visitor = new MetricsInStatementCollector();\r\n visitor.accept(document.statement);\r\n result.addRange(_.map(visitor.metricOperands, mo => mo.metric));\r\n break;\r\n case Process.typeName:\r\n result.addRange(\r\n _(document._states)\r\n .map((s: any) => s._record)\r\n .filter(r => r)\r\n .value()\r\n );\r\n break;\r\n case MetricGroupDocument.typeName:\r\n result.addRange(_.map(document.metrics, (s: any) => s.metric));\r\n break;\r\n }\r\n return result;\r\n }\r\n\r\n private getMappingReferences(dbMapping: DBMapping): any[] {\r\n const result = [];\r\n dbMapperControlHelper\r\n .getAllSources(dbMapping)\r\n .filter(s => !DBMappingEmbededDataSource.isInstanceOfType(s))\r\n .forEach((source: any) => {\r\n result.push(source.sourceDocument);\r\n if (source.dataSource) {\r\n result.push(source.dataSource);\r\n }\r\n\r\n dbMapperControlHelper.getSourceStatements(source).forEach(st => {\r\n const visitor = new RFunctionsInStatementCollector();\r\n visitor.accept(st.statement);\r\n visitor.rFunctionOperands.forEach(op => result.push(op.rFunction.function));\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n public fillReferences(documents: any[], docsByReference: { document; reference }[]) {\r\n const docsMap = _.keyBy<{ document; reference }>(docsByReference, ({ reference }) => {\r\n return reference.id;\r\n });\r\n _(documents).forEach(doc => {\r\n const references = this.getDocumentReferences(doc);\r\n _(references).forEach(ref => {\r\n if (docsMap[ref.id]) {\r\n ref.document = docsMap[ref.id].document;\r\n }\r\n if (ref.document) {\r\n ref.name = ref.document.name;\r\n }\r\n });\r\n });\r\n }\r\n\r\n public updateReferencesToInsightObjects(document: RepositoryDocument): void {\r\n const withItems = someOfTypes(RecordDocument, RModel, TranslationTable, ProcessMetric, DerivedMetric);\r\n if (withItems(document)) {\r\n this.updateItemsFilter(document.items);\r\n }\r\n if (MetricPool.isInstanceOfType(document)) {\r\n this.updateItemsFilter(document.template.items);\r\n }\r\n }\r\n\r\n private readonly filtersMap = _.once(() => {\r\n const { filters } = altosoft.model?.insightMeta ?? {};\r\n if (filters) {\r\n return toMap(filters);\r\n } else {\r\n return null;\r\n }\r\n });\r\n\r\n private updateItemsFilter(items: DimensionItem[]): void {\r\n const filtersMap = this.filtersMap();\r\n if (filtersMap === null) {\r\n return;\r\n }\r\n for (const { filter } of items) {\r\n if (filter) {\r\n filter.name = filtersMap.get(filter.id)?.name ?? filter.name;\r\n }\r\n }\r\n }\r\n}\r\n","import {\r\n AnotherKPIOperand,\r\n ConditionalOperand,\r\n Constant,\r\n DashboardFilterOperand,\r\n DateAddBusinessFunctionOperand,\r\n DateDiffBusinessFunctionOperand,\r\n FieldOperand,\r\n IsBusinessDateFunctionOperand,\r\n KnownVariable,\r\n MathExpression,\r\n NewVariableOperand,\r\n NullOperand,\r\n Operator,\r\n ParameterOperand,\r\n RFunctionOperand,\r\n SpecialAggregationFunctionOperand,\r\n SQLFunctionOperand,\r\n StoredConstant,\r\n UserFilterOperand,\r\n WhereInOperand\r\n} from '@InstanceFactory';\r\n\r\nexport class StatementVisitorBase {\r\n public accept(statementPart): void {\r\n if (!statementPart) {\r\n throw new Error('statementPart cannot be empty');\r\n }\r\n if (!statementPart.$type) {\r\n throw new Error('statementPart must have defined $type');\r\n }\r\n\r\n switch (statementPart.$type) {\r\n case MathExpression.typeName:\r\n this.visitMath(statementPart);\r\n break;\r\n case WhereInOperand.typeName:\r\n this.visitWhereIn(statementPart);\r\n break;\r\n case SQLFunctionOperand.typeName:\r\n this.visitSqlFunction(statementPart);\r\n break;\r\n case FieldOperand.typeName:\r\n this.visitField(statementPart);\r\n break;\r\n case Constant.typeName:\r\n this.visitConstant(statementPart);\r\n break;\r\n case NullOperand.typeName:\r\n this.visitNull(statementPart);\r\n break;\r\n case StoredConstant.typeName:\r\n this.visitStoredConstant(statementPart);\r\n break;\r\n case Operator.typeName:\r\n this.visitOperator(statementPart);\r\n break;\r\n case ParameterOperand.typeName:\r\n this.visitQueryParameter(statementPart);\r\n break;\r\n case KnownVariable.typeName:\r\n this.visitKnownVar(statementPart);\r\n break;\r\n case NewVariableOperand.typeName:\r\n this.visitNewVar(statementPart);\r\n break;\r\n case AnotherKPIOperand.typeName:\r\n this.visitMetric(statementPart);\r\n break;\r\n case ConditionalOperand.typeName:\r\n this.visitIfThenElse(statementPart);\r\n break;\r\n case RFunctionOperand.typeName:\r\n this.visitRFunction(statementPart);\r\n break;\r\n case DateDiffBusinessFunctionOperand.typeName:\r\n this.visitDateDiffBusinessFunction(statementPart);\r\n break;\r\n case DateAddBusinessFunctionOperand.typeName:\r\n this.visitDateAddBusinessFunction(statementPart);\r\n break;\r\n case IsBusinessDateFunctionOperand.typeName:\r\n this.visitIsBusinessDateFunction(statementPart);\r\n break;\r\n case UserFilterOperand.typeName:\r\n this.visitUserFilter(statementPart);\r\n break;\r\n case DashboardFilterOperand.typeName:\r\n this.visitDashboardFilter(statementPart);\r\n break;\r\n case SpecialAggregationFunctionOperand.typeName:\r\n this.visitSpecialAggregationFunction(statementPart);\r\n break;\r\n }\r\n }\r\n\r\n protected visitMath(mathExpression: MathExpression): void {\r\n _(mathExpression.expressionElements).forEach(e => this.accept(e));\r\n }\r\n\r\n protected visitSqlFunction(sqlFunction: SQLFunctionOperand): void {\r\n _(sqlFunction.argumentsStatements).forEach(e => this.accept(e));\r\n }\r\n\r\n protected visitWhereIn(whereInOperand: WhereInOperand): void {\r\n this.accept(whereInOperand.expression);\r\n _(whereInOperand.values).forEach(e => this.accept(e));\r\n }\r\n\r\n protected visitField(field: FieldOperand): void {}\r\n\r\n protected visitConstant(constant: Constant): void {}\r\n\r\n protected visitNull(nullOperand: NullOperand): void {}\r\n\r\n protected visitStoredConstant(storedConstant: StoredConstant): void {}\r\n\r\n protected visitOperator(operator: Operator): void {}\r\n\r\n protected visitQueryParameter(queryParameter: ParameterOperand): void {}\r\n\r\n protected visitKnownVar(knownVar: KnownVariable): void {}\r\n\r\n protected visitNewVar(newVar: NewVariableOperand): void {\r\n this.accept(newVar.determinantStatement);\r\n }\r\n\r\n protected visitMetric(metric: AnotherKPIOperand): void {}\r\n\r\n protected visitIfThenElse(condition: { cases: any; defaultStatement: any }): void {\r\n _(condition.cases).forEach(c => {\r\n c.whenStatement && this.accept(c.whenStatement);\r\n c.thenStatement && this.accept(c.thenStatement);\r\n });\r\n condition.defaultStatement && this.accept(condition.defaultStatement);\r\n }\r\n\r\n protected visitRFunction(rFunction: RFunctionOperand): void {}\r\n\r\n protected visitDateDiffBusinessFunction(dateDiffFunction: DateDiffBusinessFunctionOperand): void {}\r\n\r\n protected visitDateAddBusinessFunction(dateAddFunction: DateAddBusinessFunctionOperand): void {}\r\n\r\n protected visitIsBusinessDateFunction(isBusinessDateFunction: IsBusinessDateFunctionOperand): void {}\r\n\r\n protected visitUserFilter(userFilter: UserFilterOperand): void {}\r\n\r\n protected visitDashboardFilter(userFilter: DashboardFilterOperand): void {}\r\n\r\n protected visitSpecialAggregationFunction(specialAggreationFunction: SpecialAggregationFunctionOperand): void {}\r\n}\r\n","import constants from '@Common/Core/Constant';\r\nimport { DataServiceProvider } from '@Common/Core/DataServiceProvider';\r\nimport { FunctionType, OperatorType, TypeKind } from '@Common/Enums/Enum';\r\nimport * as commonUtils from '@Common/Helpers/CommonUtils';\r\nimport {\r\n DataSourceWSComplexField,\r\n DBMapping,\r\n DBMappingDataSource,\r\n DBMappingEmbededDataSource,\r\n DBMappingSource,\r\n DBMappingSource_RecordDocument,\r\n DBMappingSource_TranslationTable,\r\n DBMappingSourceBase,\r\n DerivedField,\r\n MappingSourceLink,\r\n MathExpression,\r\n MetricPool,\r\n RecordDocument,\r\n SpecialAggregationFunctionOperand,\r\n SQLFunctionDefinition,\r\n SQLFunctionOperand\r\n} from '@InstanceFactory';\r\nimport statementsFactory from '@Studio/StatementsFactory';\r\nimport { TraverseStatement } from '@Studio/TraverseStatement';\r\nimport {\r\n FieldsInStatementCollector,\r\n RemoveFieldStatementVisitor,\r\n ReplaceAliasInStatement,\r\n ReplaceFieldIdInStatement\r\n} from './../../StatementVisitor';\r\nimport { enumerable } from '@Common/Core/CoreDecorator';\r\n\r\nnamespace dbMapperControlHelper {\r\n //#region Sources Map\r\n\r\n export const derivedFieldType = 'derivedField' as 'derivedField';\r\n\r\n export interface IFieldInfo {\r\n id: string;\r\n isDerivedField: boolean;\r\n }\r\n\r\n export interface IFieldsMap {\r\n alias: string;\r\n source: any;\r\n\r\n getField(fieldId: string): IFieldInfo;\r\n\r\n allFields(): IFieldInfo[];\r\n }\r\n\r\n export interface ISourcesMap {\r\n getSource(alias: string): IFieldsMap;\r\n\r\n allSources(): IFieldsMap[];\r\n }\r\n\r\n export class SourcesMap {\r\n private _sources: _.Dictionary;\r\n\r\n constructor(dbMapping: DBMapping) {\r\n const allSources = cascade(dbMapping.rootSources, s => s.joinedSources);\r\n this._sources = _(allSources)\r\n .map(s => new FieldsMap(s))\r\n .keyBy(fm => fm.source.alias)\r\n .value();\r\n }\r\n\r\n public getSource(alias: string): IFieldsMap {\r\n return this._sources[alias] || null;\r\n }\r\n\r\n public allSources(): IFieldsMap[] {\r\n return _.values(this._sources);\r\n }\r\n }\r\n\r\n class FieldsMap implements IFieldsMap {\r\n private _source: DBMappingSourceBase;\r\n private _fields: _.Dictionary;\r\n\r\n constructor(source: DBMappingSourceBase) {\r\n this._source = source;\r\n this._fields = _(getSourceDocumentFields(this._source))\r\n .union(this._source.derivedFields)\r\n .map(f => new FieldInfo(f))\r\n .keyBy(fi => fi.id)\r\n .value();\r\n }\r\n\r\n @enumerable\r\n public get alias(): string {\r\n return this._source.alias;\r\n }\r\n\r\n @enumerable\r\n public get source() {\r\n return this._source;\r\n }\r\n\r\n public getField(fieldId: string): IFieldInfo {\r\n return this._fields[fieldId] || null;\r\n }\r\n\r\n public allFields(): IFieldInfo[] {\r\n return _.values(this._fields);\r\n }\r\n }\r\n\r\n class FieldInfo implements IFieldInfo {\r\n private _field;\r\n\r\n constructor(field) {\r\n this._field = field;\r\n }\r\n\r\n @enumerable\r\n public get id(): string {\r\n return fieldId(this._field);\r\n }\r\n\r\n @enumerable\r\n public get isDerivedField(): boolean {\r\n return this._field === derivedFieldType;\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n export function getSourceDocumentFields(source: DBMappingSourceBase) {\r\n if (!source.sourceDocument.document) {\r\n return [];\r\n }\r\n const items: any[] = source.sourceDocument.document.items;\r\n return cascade(items, i => {\r\n if (i.$type === DataSourceWSComplexField.typeName) {\r\n return i.parameters;\r\n } else {\r\n return [];\r\n }\r\n }).filter(i => i.$type !== DataSourceWSComplexField.typeName);\r\n }\r\n\r\n export interface IItemIMappingInfo {\r\n field;\r\n link: MappingSourceLink;\r\n table;\r\n source;\r\n }\r\n\r\n export function findMappedElement(dbMapping: DBMapping, dimensionId: string): IItemIMappingInfo[] {\r\n const result = [];\r\n cascade(dbMapping.rootSources, s => s.joinedSources).forEach(source => {\r\n _(source.links)\r\n .filter(link => link.targetItem === dimensionId)\r\n .forEach(link => {\r\n if (!source.sourceDocument.document) {\r\n throw new Error('Reference document is not loaded for source ' + source.alias);\r\n }\r\n\r\n const table = source.sourceDocument.document;\r\n _(table.items)\r\n .filter(item => item.id === link.sourceField)\r\n .forEach(item => {\r\n result.push({\r\n field: item,\r\n link: link,\r\n table: table,\r\n source: source\r\n });\r\n });\r\n _(source.derivedFields)\r\n .filter(derivedField => derivedField.name === link.sourceField)\r\n .forEach(derivedField => {\r\n result.push({\r\n field: derivedField,\r\n link: link,\r\n table: table,\r\n source: source\r\n });\r\n });\r\n });\r\n });\r\n return result;\r\n }\r\n\r\n export interface IParentSourceInfo {\r\n parent: IParentSourceInfo;\r\n source;\r\n }\r\n\r\n export function cascade(items: T[], getItems: (item: T) => T[]): T[] {\r\n let result: T[] = [];\r\n _.forEach(items, item => {\r\n result.push(item);\r\n result = _.union(result, cascade(getItems(item), getItems));\r\n });\r\n return result;\r\n }\r\n\r\n export function getParentSourceList(dbMapping: DBMapping): IParentSourceInfo[] {\r\n const parentSourceList = _.map(dbMapping.rootSources, s => {\r\n return { parent: null, source: s };\r\n });\r\n return cascade(parentSourceList, i =>\r\n _.map(i.source.joinedSources, s => {\r\n return { parent: i, source: s };\r\n })\r\n );\r\n }\r\n\r\n function getParentSourceInfo(dbMapping: DBMapping, sourceAlias: string): IParentSourceInfo {\r\n return _.find(getParentSourceList(dbMapping), info => info.source.alias === sourceAlias);\r\n }\r\n\r\n export function getParentSource(dbMapping: DBMapping, sourceAlias: string): DBMappingSourceBase {\r\n const sourceInfo = getParentSourceInfo(dbMapping, sourceAlias);\r\n if (sourceInfo && sourceInfo.parent) {\r\n return sourceInfo.parent.source;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n export function getRootSource(dbMapping: DBMapping, sourceAlias: string): DBMappingSourceBase {\r\n let sourceInfo = getParentSourceInfo(dbMapping, sourceAlias);\r\n if (sourceInfo) {\r\n while (sourceInfo.parent) {\r\n sourceInfo = sourceInfo.parent;\r\n }\r\n return sourceInfo.source;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n export function getRootDataSource(source, projectId, dataServiceProvider: DataServiceProvider, dbMapping: DBMapping): any {\r\n let rootSource = dbMapping.rootSources[0];\r\n const sourceDeferred = $.Deferred();\r\n if (isRecordSource(source)) {\r\n dataServiceProvider\r\n .loadDocument(projectId, rootSource.sourceDocument.id, rootSource.sourceDocument.name, [constants.studioDocumentTypes.record])\r\n .done((doc: RecordDocument) => {\r\n rootSource = doc.dbMapping.rootSources[0];\r\n if (isRecordSource(rootSource)) {\r\n getRootDataSource(rootSource, projectId, dataServiceProvider, doc.dbMapping).done(s => {\r\n sourceDeferred.resolve(s);\r\n });\r\n } else {\r\n sourceDeferred.resolve(rootSource);\r\n }\r\n })\r\n .fail(() => {\r\n console.log('Can not load Data Source. Use default database type');\r\n sourceDeferred.resolve(null);\r\n });\r\n } else {\r\n sourceDeferred.resolve(source);\r\n }\r\n return sourceDeferred.promise();\r\n }\r\n\r\n export function getField(dbMapping: DBMapping, sourceAlias: string, fieldId: string): { source; field } {\r\n const source = _.find(\r\n cascade(dbMapping.rootSources, s => s.joinedSources),\r\n s => s.alias === sourceAlias\r\n );\r\n if (!source) {\r\n return null;\r\n }\r\n\r\n const derivedField = _.find(source.derivedFields, f => f.name === fieldId);\r\n if (derivedField) {\r\n return { source: source, field: derivedField };\r\n }\r\n\r\n const field = _.find(source.sourceDocument.document.items, (f: any) => f.id === fieldId);\r\n if (field) {\r\n return { source: source, field: field };\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n export function removeSource(dbMapping: DBMapping, sourceAlias: string): boolean {\r\n const sourceInfo = getParentSourceInfo(dbMapping, sourceAlias);\r\n if (sourceInfo) {\r\n if (sourceInfo.parent) {\r\n sourceInfo.parent.source.joinedSources.remove(sourceInfo.source);\r\n } else {\r\n dbMapping.rootSources.remove(sourceInfo.source);\r\n }\r\n\r\n const removedAliases = cascade([sourceInfo.source], s => s.joinedSources).map(s => s.alias);\r\n\r\n _(cascade(dbMapping.rootSources, s => s.joinedSources))\r\n .flatMap(s => getSourceStatements(s))\r\n .forEach(s => {\r\n removedAliases.forEach(alias => {\r\n const visitor = new RemoveFieldStatementVisitor(undefined /* remove all fields from source*/, alias);\r\n visitor.accept(s.statement);\r\n });\r\n });\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n export function setDefaultTimeFilter(source: DBMappingSourceBase, timeOperands: any[]) {\r\n const mathExpression = statementsFactory.createMathExpression();\r\n if (!!timeOperands && timeOperands.length > 0) {\r\n const fieldOperand = timeOperands[0];\r\n mathExpression.expressionElements = [\r\n fieldOperand,\r\n statementsFactory.createOperator(OperatorType.greaterOrEqual),\r\n statementsFactory.createCustomQueryParameter('FromDate', false),\r\n statementsFactory.createOperator(OperatorType.and),\r\n commonUtils.clone(fieldOperand),\r\n statementsFactory.createOperator(OperatorType.lessThan),\r\n statementsFactory.createCustomQueryParameter('ToDate', false)\r\n ];\r\n }\r\n source.timeFilter = mathExpression;\r\n }\r\n\r\n export function removeAllLinksForDimension(dbMapping: DBMapping, dimensionId: string) {\r\n cascade(dbMapping.rootSources, s => s.joinedSources).forEach(source => {\r\n source.links = _.filter(source.links, link => link.targetItem !== dimensionId);\r\n });\r\n }\r\n\r\n export function isExternalJoin(source, parentSource): boolean {\r\n if (!parentSource) {\r\n return false;\r\n }\r\n\r\n return isDBTableSource(source) && isDBTableSource(parentSource) && source.dataSource.id !== parentSource.dataSource.id;\r\n }\r\n\r\n export function isRecordOnRecord(dbMapping: DBMapping): boolean {\r\n return _(cascade(dbMapping.rootSources, s => s.joinedSources)).some(s => !isDBTableSource(s) && !isEmbededFileSource(s));\r\n }\r\n\r\n export function isRecordSource(dbMappingSource): dbMappingSource is DBMappingSource {\r\n return dbMappingSource.$type === DBMappingSource_RecordDocument.typeName;\r\n }\r\n\r\n export function isMetricSource(dbMappingSourceTable): dbMappingSourceTable is MetricPool {\r\n return MetricPool.isInstanceOfType(dbMappingSourceTable);\r\n }\r\n\r\n export function isDBTableSource(dbMappingSource): dbMappingSource is DBMappingDataSource {\r\n return dbMappingSource.$type === DBMappingDataSource.typeName;\r\n }\r\n\r\n export function isEmbededFileSource(dbMappingSource): dbMappingSource is DBMappingEmbededDataSource {\r\n return dbMappingSource.$type === DBMappingEmbededDataSource.typeName;\r\n }\r\n\r\n export function changeTableAlias(dbMapping: DBMapping | DBMappingSourceBase[], oldAlias: string, newAlias: string) {\r\n if (oldAlias === newAlias) {\r\n return;\r\n }\r\n\r\n let sources: DBMappingSourceBase[];\r\n if (Array.isArray(dbMapping)) {\r\n sources = dbMapping;\r\n } else {\r\n sources = dbMapping.rootSources;\r\n if (dbMapping.queryDescription) {\r\n _.forEach(dbMapping.queryDescription.partDescriptions, part => {\r\n if (part.groupId === oldAlias) {\r\n part.groupId = newAlias;\r\n }\r\n });\r\n }\r\n }\r\n\r\n _(cascade(sources, s => s.joinedSources))\r\n .flatMap(s => getSourceStatements(s))\r\n .forEach(s => {\r\n const visitor = new ReplaceAliasInStatement(oldAlias, newAlias);\r\n visitor.accept(s.statement);\r\n });\r\n }\r\n\r\n export function changeSourceFieldId(dbMapping: DBMapping, oldFieldId: string, newFieldId: string, tableAlias: string) {\r\n if (oldFieldId === newFieldId) {\r\n return;\r\n }\r\n\r\n _(cascade(dbMapping.rootSources, s => s.joinedSources))\r\n .filter(s => s.alias === tableAlias)\r\n .flatMap(s => s.links)\r\n .filter(l => l.sourceField === oldFieldId)\r\n .forEach(l => {\r\n l.sourceField = newFieldId;\r\n });\r\n\r\n _(cascade(dbMapping.rootSources, s => s.joinedSources))\r\n .flatMap(s => getSourceStatements(s))\r\n .forEach(s => {\r\n const visitor = new ReplaceFieldIdInStatement(oldFieldId, newFieldId, tableAlias);\r\n visitor.accept(s.statement);\r\n });\r\n }\r\n\r\n export function getSourceStatements(source): { statement: MathExpression; part: string }[] {\r\n const statements = [];\r\n if (!!source.joinCondition) {\r\n statements.push({\r\n statement: source.joinCondition,\r\n part: 'Join Condition'\r\n });\r\n }\r\n if (!!source.timeFilter) {\r\n statements.push({\r\n statement: source.timeFilter,\r\n part: 'Time Filter'\r\n });\r\n }\r\n if (!!source.dataFilter) {\r\n statements.push({\r\n statement: source.dataFilter,\r\n part: 'Data Filter'\r\n });\r\n }\r\n statements.addRange(\r\n _(source.derivedFields)\r\n .filter(df => !!df.transformationExpression)\r\n .map(df => {\r\n return {\r\n statement: df.transformationExpression,\r\n part: \"Derived field '\" + df.name + \"'\"\r\n };\r\n })\r\n .value()\r\n );\r\n return statements;\r\n }\r\n\r\n export function fieldId(field): string {\r\n return field.id || field.name;\r\n }\r\n\r\n export function fieldDisplayName(field): string {\r\n return field.displayName || field.id || field.name;\r\n }\r\n\r\n export function sourceFieldMapping(source: DBMappingSourceBase, field: string): string {\r\n const link = _.find(source.links, l => l.sourceField === field);\r\n return link && link.targetItem;\r\n }\r\n\r\n export function getUsedFieldsFromSource(source: DBMappingSourceBase, dbMapping: DBMapping): any[] {\r\n const derivedFields = _.map(source.derivedFields, df => df.name);\r\n\r\n const mappedFields = _(source.links)\r\n .map(l => l.sourceField)\r\n .difference(derivedFields)\r\n .value();\r\n const fieldsInStatements = _(cascade(dbMapping.rootSources, s => s.joinedSources))\r\n .flatMap(s => getSourceStatements(s))\r\n .flatMap(expr => {\r\n const collector = new FieldsInStatementCollector();\r\n collector.accept(expr.statement);\r\n return collector.getFields();\r\n })\r\n .filter(f => f.tableAlias === source.alias)\r\n .map(f => f.fieldId)\r\n .difference(derivedFields)\r\n .value();\r\n\r\n return _.union(mappedFields, fieldsInStatements);\r\n }\r\n\r\n export function getTransformation(source: DBMappingSourceBase, fieldId: string): string {\r\n const link = _.find(source.links, l => l.sourceField === fieldId);\r\n return link && link.transformation;\r\n }\r\n\r\n //#region Aggregations\r\n\r\n export function getAggregationForDimension(dbMapping: DBMapping, itemId): string {\r\n const mapInfos = findMappedElement(dbMapping, itemId);\r\n if (mapInfos && mapInfos.length > 0) {\r\n return getAggregationForField(mapInfos[0]);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n function getStatementAggregation(statement): string {\r\n if (statement.$type !== MathExpression.typeName || statement.expressionElements.length === 0) {\r\n return null;\r\n }\r\n if (\r\n statement.expressionElements[0].$type === SQLFunctionOperand.typeName ||\r\n statement.expressionElements[0].$type === SpecialAggregationFunctionOperand.typeName\r\n ) {\r\n return statement.expressionElements[0].name;\r\n }\r\n return null;\r\n }\r\n\r\n function convertTransformToSql(functionName: string): string {\r\n switch (functionName) {\r\n case 'COUNT UNIQUE':\r\n return constants.aggregationFunctions.countUnique;\r\n default:\r\n return functionName;\r\n }\r\n }\r\n\r\n export function filterAggregationFunction(functionName: string): string {\r\n functionName = convertTransformToSql(functionName);\r\n if (functionName === constants.percentileFunction || functionName === constants.medianFunction) {\r\n return functionName;\r\n }\r\n const aggregationFunctions = constants.aggregationFunctions;\r\n const isAggr = _(aggregationFunctions)\r\n .keys()\r\n .some(key => aggregationFunctions[key] === functionName);\r\n return isAggr ? functionName : null;\r\n }\r\n\r\n function getAggregationForField(mappingInfo: IItemIMappingInfo): string {\r\n const field = mappingInfo.field;\r\n //let fieldId = field.id || field.name;\r\n const transformation = mappingInfo.link.transformation;\r\n if (transformation) {\r\n const sqlFunction = convertTransformToSql(transformation);\r\n return filterAggregationFunction(sqlFunction);\r\n }\r\n\r\n if (field.$type === DerivedField.typeName) {\r\n const statementAggregation = getStatementAggregation(field.transformationExpression);\r\n return filterAggregationFunction(statementAggregation);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n //#endregion\r\n\r\n export function updateDescriptorAttributes(descriptor, document) {\r\n if (!descriptor.attributes) {\r\n descriptor.attributes = [];\r\n }\r\n const attrs: { name: string; value: string }[] = descriptor.attributes;\r\n\r\n updateOrCreateAttr(attrs, 'RecordVirtual', (!document.storageSettings).toString());\r\n updateOrCreateAttr(attrs, 'RecordType', dbMapperControlHelper.isRecordOnRecord(document.dbMapping) ? 'recordDerived' : 'recordDirect');\r\n }\r\n\r\n function updateOrCreateAttr(attrCollection: { name: string; value: string }[], attrName: string, attrValue: string) {\r\n let attr: { name: string; value: string } = attrCollection.filter(a => a.name === attrName)[0];\r\n if (attr == null) {\r\n attrCollection.push((attr = { name: attrName, value: attrValue }));\r\n }\r\n attr.value = attrValue;\r\n }\r\n\r\n export function getSourceImage(source): string {\r\n switch (source.$type) {\r\n case DBMappingDataSource.typeName:\r\n return 'Documents/database table.png';\r\n case DBMappingSource_RecordDocument.typeName:\r\n return 'Documents/record group.png';\r\n case DBMappingSource_TranslationTable.typeName:\r\n return 'Documents/translation table.png';\r\n case DBMappingEmbededDataSource.typeName:\r\n return 'Documents/file source.png';\r\n default:\r\n return 'Documents/basic metric.png';\r\n }\r\n }\r\n\r\n export function referencesLoadedInSource(source): { reference: any; part: string } {\r\n if (!source.sourceDocument.document) {\r\n return {\r\n part: 'Source',\r\n reference: source.sourceDocument\r\n };\r\n }\r\n if (isDBTableSource(source) && !source.dataSource.document) {\r\n return {\r\n part: 'Data source',\r\n reference: source.dataSource\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n export function getAllSources(dbMapping: DBMapping): DBMappingSourceBase[] {\r\n return cascade(dbMapping.rootSources, s => s.joinedSources);\r\n }\r\n\r\n export function getAllDerivedFields(dbMapping: DBMapping): DerivedField[] {\r\n const allSources = getAllSources(dbMapping);\r\n return _.flatMap(allSources, source => source.derivedFields);\r\n }\r\n\r\n export function mappingHasPossibleLossOfData(\r\n sourceField: { type: TypeKind; length: number },\r\n targetField: { type: TypeKind; length: number },\r\n link: MappingSourceLink\r\n ): boolean {\r\n if (!link.transformation) {\r\n switch (sourceField.type) {\r\n case TypeKind.string:\r\n return (\r\n targetField.type === TypeKind.float ||\r\n targetField.type === TypeKind.int ||\r\n (targetField.type === TypeKind.string && targetField.length < sourceField.length)\r\n );\r\n case TypeKind.float:\r\n return targetField.type === TypeKind.int;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n export function hasAggregation(expression: MathExpression, sqlFunctions: SQLFunctionDefinition[] = altosoft.model.sqlFunctions): boolean {\r\n const aggFunctions = sqlFunctions.filter(fn => fn.functionType === FunctionType.aggregative).map(fn => _.toUpper(fn.name));\r\n const functionsSet = new Set(aggFunctions);\r\n let res = false;\r\n new TraverseStatement({\r\n visitSqlFunction(fn: SQLFunctionOperand): void {\r\n res = res || functionsSet.has(_.toUpper(fn.name));\r\n },\r\n visitSpecialAggregationFunction(fn: SpecialAggregationFunctionOperand): void {\r\n res = true;\r\n }\r\n }).accept(expression);\r\n return res;\r\n }\r\n}\r\nexport default dbMapperControlHelper;\r\n","import {\r\n AnotherKPIOperand,\r\n BaseStatement,\r\n Constant,\r\n DashboardFilterOperand,\r\n DateAddBusinessFunctionOperand,\r\n DateDiffBusinessFunctionOperand,\r\n FieldOperand,\r\n IsBusinessDateFunctionOperand,\r\n KnownVariable,\r\n MathExpression,\r\n NewVariableOperand,\r\n NullOperand,\r\n Operator,\r\n ParameterOperand,\r\n RFunctionOperand,\r\n SpecialAggregationFunctionOperand,\r\n SQLFunctionOperand,\r\n StoredConstant,\r\n UserFilterOperand\r\n} from '@InstanceFactory';\r\nimport { StatementVisitorBase } from '@Studio/StatementVisitorBase';\r\n\r\nexport type AllVisitorFunction = {\r\n [TKey in keyof TraverseStatement]?: TraverseStatement[TKey] extends (arg: TStatement) => void ? TraverseStatement[TKey] : never;\r\n};\r\n\r\nexport class TraverseStatement extends StatementVisitorBase {\r\n constructor(private readonly params: AllVisitorFunction) {\r\n super();\r\n for (const [key, func] of Object.entries(params)) {\r\n const oldFun = this[key];\r\n this[key] = statement => {\r\n func.call(this, statement);\r\n oldFun.call(this, statement);\r\n };\r\n }\r\n }\r\n\r\n public visitMath(mathExpression: MathExpression): void {\r\n super.visitMath(mathExpression);\r\n }\r\n\r\n public visitSqlFunction(sqlFunction: SQLFunctionOperand): void {\r\n super.visitSqlFunction(sqlFunction);\r\n }\r\n\r\n public visitField(field: FieldOperand): void {\r\n super.visitField(field);\r\n }\r\n\r\n public visitConstant(constant: Constant): void {\r\n super.visitConstant(constant);\r\n }\r\n\r\n public visitNull(nullOperand: NullOperand): void {\r\n super.visitNull(nullOperand);\r\n }\r\n\r\n public visitStoredConstant(storedConstant: StoredConstant): void {\r\n super.visitStoredConstant(storedConstant);\r\n }\r\n\r\n public visitOperator(operator: Operator): void {\r\n super.visitOperator(operator);\r\n }\r\n\r\n public visitQueryParameter(queryParameter: ParameterOperand): void {\r\n super.visitQueryParameter(queryParameter);\r\n }\r\n\r\n public visitKnownVar(knownVar: KnownVariable): void {\r\n super.visitKnownVar(knownVar);\r\n }\r\n\r\n public visitNewVar(newVar: NewVariableOperand): void {\r\n super.visitNewVar(newVar);\r\n }\r\n\r\n public visitMetric(metric: AnotherKPIOperand): void {\r\n super.visitMetric(metric);\r\n }\r\n\r\n public visitRFunction(rFunction: RFunctionOperand): void {\r\n super.visitRFunction(rFunction);\r\n }\r\n\r\n public visitDateDiffBusinessFunction(dateDiffFunction: DateDiffBusinessFunctionOperand): void {\r\n super.visitDateDiffBusinessFunction(dateDiffFunction);\r\n }\r\n\r\n public visitDateAddBusinessFunction(dateAddFunction: DateAddBusinessFunctionOperand): void {\r\n super.visitDateAddBusinessFunction(dateAddFunction);\r\n }\r\n\r\n public visitIsBusinessDateFunction(isBusinessDateFunction: IsBusinessDateFunctionOperand): void {\r\n super.visitIsBusinessDateFunction(isBusinessDateFunction);\r\n }\r\n\r\n public visitUserFilter(userFilter: UserFilterOperand): void {\r\n super.visitUserFilter(userFilter);\r\n }\r\n\r\n public visitDashboardFilter(userFilter: DashboardFilterOperand): void {\r\n super.visitDashboardFilter(userFilter);\r\n }\r\n\r\n public visitSpecialAggregationFunction(specialAggreationFunction: SpecialAggregationFunctionOperand): void {\r\n super.visitSpecialAggregationFunction(specialAggreationFunction);\r\n }\r\n}\r\n","import { BaseExpressionElement, DocumentReference, SwimlaneGroup } from '@InstanceFactory';\r\n\r\nexport class SwimlaneGroupOperand implements BaseExpressionElement {\r\n $type?: string;\r\n\r\n constructor(public swimlaneGroup: DocumentReference) {}\r\n\r\n representation: string;\r\n}\r\n","import constants from '@Common/Core/Constant';\r\nimport enums, { ConstantContext, FilterTransitionBetweenComparison, OperatorType, TypeKind } from '@Common/Enums';\r\nimport documentUtils from '@Common/Helpers/DocumentUtils';\r\nimport {\r\n AnotherKPIOperand,\r\n BaseExpressionElement,\r\n CalendarObject,\r\n CalendarOperand,\r\n ConditionalOperand,\r\n Constant,\r\n ConstantDocument,\r\n DashboardFilterOperand,\r\n DateAddBusinessFunctionOperand,\r\n DateDiffBusinessFunctionOperand,\r\n DirectExpressionOperand,\r\n FieldOperand,\r\n InstanceFilterDefinitionOperand,\r\n InstanceFilterIsReopenedOperand,\r\n InstanceFilterMissingStepsOperand,\r\n InstanceFilterPatternOperand,\r\n InstanceFilterStepExistsOperand,\r\n InstanceFilterSwimlaneGroupsOperand,\r\n InstanceFilterTransitionBetweenStepsOperand,\r\n IsBusinessDateFunctionOperand,\r\n IsFilterEmptyOperand,\r\n KnownVariable,\r\n MathExpression,\r\n NewVariableOperand,\r\n NullOperand,\r\n Operator,\r\n Parameter,\r\n ParameterOperand,\r\n ProcessFilterDefinition,\r\n ProcessPropertyOperand,\r\n RFunction,\r\n RFunctionOperand,\r\n SpecialAggregationFunctionOperand,\r\n SQLFunctionOperand,\r\n StoredConstant,\r\n SwimlaneGroup,\r\n UserFilterOperand,\r\n WhereInOperand\r\n} from '@InstanceFactory';\r\nimport { SwimlaneGroupOperand } from '@Studio/Editors/ExpressionEditor/SwimlaneGroupOperand';\r\n\r\nimport { getMetricOperandName } from '@Studio/StatementVisitor';\r\nimport formatHelper from '@Common/Helpers/FormatHelper';\r\nimport Guid from '@Common/Core/Guid';\r\n\r\nnamespace statementsFactory {\r\n export interface NamedMetricOperand extends AnotherKPIOperand {\r\n name?: string;\r\n }\r\n\r\n export function createMathExpression(type: TypeKind = TypeKind.bool, elements: BaseExpressionElement[] = []): MathExpression {\r\n return {\r\n $type: MathExpression.typeName,\r\n isBoolean: type === TypeKind.bool,\r\n expressionElements: elements,\r\n useCaseUI: false\r\n };\r\n }\r\n\r\n export function createOperand(type, obj, expression?): any {\r\n switch (type) {\r\n case SQLFunctionOperand.typeName:\r\n return statementsFactory.createSqlFunction(obj);\r\n\r\n case DirectExpressionOperand.typeName:\r\n return statementsFactory.createDirectExpression(obj.value);\r\n\r\n case Constant.typeName:\r\n return obj.directly\r\n ? statementsFactory.createDirectExpression(obj.value)\r\n : statementsFactory.createConstant(obj.type, obj.value, obj.directly, obj.context);\r\n\r\n case Operator.typeName:\r\n return statementsFactory.createOperator(obj);\r\n\r\n case FieldOperand.typeName:\r\n return statementsFactory.createFieldOperand(obj.tableAlias, obj.fieldId, obj.type);\r\n\r\n case StoredConstant.typeName:\r\n return statementsFactory.createStoredConstant(obj.type, obj.id, obj.name);\r\n\r\n case ParameterOperand.typeName:\r\n return statementsFactory.createCustomQueryParameter(obj.parameterType, obj.parameter ?? obj.withField);\r\n\r\n case NewVariableOperand.typeName:\r\n return statementsFactory.createVariable(obj.value);\r\n\r\n case KnownVariable.typeName:\r\n return statementsFactory.createKnownVariable(obj.value);\r\n\r\n case AnotherKPIOperand.typeName:\r\n return createMetricOperand(obj, expression);\r\n\r\n case SpecialAggregationFunctionOperand.typeName:\r\n return createSpecialAggregationFunction(obj);\r\n\r\n case DateDiffBusinessFunctionOperand.typeName:\r\n return createDateDiffBusinessFunction(obj);\r\n\r\n case DateAddBusinessFunctionOperand.typeName:\r\n return createDateAddBusinessFunction(obj);\r\n\r\n case IsBusinessDateFunctionOperand.typeName:\r\n return createIsBusinessDateFunction(obj);\r\n\r\n case CalendarOperand.typeName:\r\n return createCalendar(obj);\r\n\r\n case ConditionalOperand.typeName:\r\n return createConditionalOperand();\r\n\r\n case WhereInOperand.typeName:\r\n const whereInOperand = WhereInOperand.create();\r\n whereInOperand.isNegative = !!obj.isNegative;\r\n return whereInOperand;\r\n\r\n case NullOperand.typeName:\r\n return createNullOperand();\r\n\r\n case ProcessPropertyOperand.typeName:\r\n return createProcessProperty(obj);\r\n\r\n case InstanceFilterIsReopenedOperand.typeName:\r\n return InstanceFilterIsReopenedOperand.create();\r\n\r\n case InstanceFilterMissingStepsOperand.typeName:\r\n return InstanceFilterMissingStepsOperand.create();\r\n\r\n case InstanceFilterPatternOperand.typeName:\r\n return InstanceFilterPatternOperand.create();\r\n\r\n case InstanceFilterStepExistsOperand.typeName:\r\n return InstanceFilterStepExistsOperand.create();\r\n\r\n case InstanceFilterTransitionBetweenStepsOperand.typeName:\r\n const conf = _.defaults(obj, { comparison: FilterTransitionBetweenComparison.atLeast });\r\n const filterBetweenOperand = InstanceFilterTransitionBetweenStepsOperand.create();\r\n filterBetweenOperand.comparison = conf.comparison;\r\n return filterBetweenOperand;\r\n\r\n case InstanceFilterDefinitionOperand.typeName:\r\n const pfdOperand = InstanceFilterDefinitionOperand.create();\r\n pfdOperand.processFilterDefinition = documentUtils.createDocumentReference({\r\n $type: ProcessFilterDefinition.typeName,\r\n id: obj.id,\r\n name: obj.name\r\n });\r\n return pfdOperand;\r\n\r\n case InstanceFilterSwimlaneGroupsOperand.typeName:\r\n return InstanceFilterSwimlaneGroupsOperand.create();\r\n\r\n case constants.mathExpressionTypes.swimlaneGroup:\r\n const sgRef = documentUtils.createDocumentReference({\r\n $type: SwimlaneGroup.typeName,\r\n id: obj.id,\r\n name: obj.name\r\n });\r\n return new SwimlaneGroupOperand(sgRef);\r\n case RFunctionOperand.typeName:\r\n return createRFunction(obj);\r\n case UserFilterOperand.typeName:\r\n return UserFilterOperand.create({ filter: documentUtils.createInsightReference(obj) });\r\n case DashboardFilterOperand.typeName:\r\n return DashboardFilterOperand.create();\r\n case IsFilterEmptyOperand.typeName:\r\n return IsFilterEmptyOperand.create({\r\n argumentsStatements: [MathExpression.create()]\r\n });\r\n default:\r\n throw new Error('Unknown operand type');\r\n }\r\n }\r\n\r\n export function createConditionalOperand(): ConditionalOperand {\r\n const result = ConditionalOperand.create();\r\n result.cases = [\r\n {\r\n whenStatement: createMathExpression(),\r\n thenStatement: createMathExpression()\r\n }\r\n ];\r\n result.defaultStatement = createMathExpression();\r\n return result;\r\n }\r\n\r\n export function createSpecialAggregationFunction(func): SpecialAggregationFunctionOperand {\r\n return SpecialAggregationFunctionOperand.create({\r\n arguments: func.arguments,\r\n argumentsStatements: _.map(func.arguments, _ => createMathExpression()),\r\n name: func.name\r\n });\r\n }\r\n\r\n export function createCalendar(obj): CalendarOperand {\r\n return CalendarOperand.create({\r\n calendar: documentUtils.createInsightReference({\r\n $type: CalendarObject.typeName,\r\n id: obj.id,\r\n name: obj.name\r\n } as CalendarObject)\r\n });\r\n }\r\n\r\n export function createDateDiffBusinessFunction(func): DateDiffBusinessFunctionOperand {\r\n return DateDiffBusinessFunctionOperand.create({\r\n argumentsStatements: _.map(func.arguments, _ => createMathExpression()),\r\n arguments: func.arguments,\r\n name: func.name,\r\n type: func.type\r\n });\r\n }\r\n\r\n export function createDateAddBusinessFunction(func): DateAddBusinessFunctionOperand {\r\n return DateAddBusinessFunctionOperand.create({\r\n argumentsStatements: _.map(func.arguments, _ => createMathExpression()),\r\n arguments: func.arguments,\r\n name: func.name,\r\n type: func.type\r\n });\r\n }\r\n\r\n export function createIsBusinessDateFunction(func): IsBusinessDateFunctionOperand {\r\n return IsBusinessDateFunctionOperand.create({\r\n argumentsStatements: _.map(func.arguments, _ => createMathExpression()),\r\n arguments: func.arguments,\r\n name: func.name,\r\n type: func.type\r\n });\r\n }\r\n\r\n export function createProcessProperty(processProperty: { id: string }): ProcessPropertyOperand {\r\n const doNotApplyTT = [constants.process.isFinished, constants.process.violator];\r\n return ProcessPropertyOperand.create({\r\n propertyId: processProperty.id,\r\n applyTT: !_.includes(doNotApplyTT, processProperty.id)\r\n });\r\n }\r\n\r\n export function createMetricOperand(obj, expression): NamedMetricOperand {\r\n const metricId = obj.metric.id;\r\n const metricName = obj.metric.name;\r\n\r\n const metric = {\r\n $type: obj.parentMetric ? constants.documentReferenceTypes.slaveDocument : constants.documentReferenceTypes.metric,\r\n id: metricId,\r\n name: metricName,\r\n masterDocument: obj.parentMetric\r\n ? {\r\n id: obj.parentMetric.id,\r\n name: obj.parentMetric.name\r\n }\r\n : null,\r\n isChanged: false\r\n };\r\n return _.merge(\r\n AnotherKPIOperand.create({\r\n id: Guid.newGuid(),\r\n metric: metric as any\r\n }),\r\n {\r\n name: getMetricOperandName(expression, metricName)\r\n }\r\n );\r\n }\r\n\r\n export function createKnownVariable(name): KnownVariable {\r\n return KnownVariable.create({\r\n name: name\r\n });\r\n }\r\n\r\n export function createVariable(name): NewVariableOperand {\r\n return NewVariableOperand.create({\r\n name: name,\r\n determinantStatement: createMathExpression()\r\n });\r\n }\r\n\r\n export function createFieldOperand(tableAlias, fieldId, valueType = TypeKind.string): FieldOperand {\r\n return FieldOperand.create({\r\n fieldId: fieldId,\r\n tableAlias: tableAlias\r\n });\r\n }\r\n\r\n export const emptyFieldOperand = FieldOperand.create({\r\n tableAlias: 'c02e6ddd-79cc-4726-bda1-9adad4741667'\r\n });\r\n\r\n export function createSqlFunctionByName(functionName: string): SQLFunctionOperand {\r\n const func = _.find(altosoft.model.sqlFunctions, (f: any) => f.name === functionName);\r\n return createSqlFunction(func);\r\n }\r\n\r\n export function createSqlFunction(func: { name: string; arguments: any[] }): SQLFunctionOperand {\r\n return SQLFunctionOperand.create({\r\n argumentsStatements: _.map(func.arguments, _ => createMathExpression()),\r\n arguments: func.arguments,\r\n name: func.name\r\n });\r\n }\r\n\r\n export function createCustomQueryParameter(queryParameterType: enums.CustomQueryParameter, withField: boolean): ParameterOperand;\r\n export function createCustomQueryParameter(queryParameterType: enums.CustomQueryParameter, parameter: { id; name }): ParameterOperand;\r\n export function createCustomQueryParameter(\r\n queryParameterType: enums.CustomQueryParameter,\r\n parameterOrWithField: { id; name } | boolean\r\n ): ParameterOperand {\r\n let parameter, field: FieldOperand;\r\n parameterOrWithField = parameterOrWithField ?? false;\r\n if (_.isBoolean(parameterOrWithField)) {\r\n if (parameterOrWithField === true) {\r\n field = emptyFieldOperand;\r\n }\r\n } else {\r\n parameter = documentUtils.createDocumentReference(parameterOrWithField, Parameter.typeName);\r\n }\r\n return ParameterOperand.create({\r\n queryParameterType,\r\n parameter: parameter,\r\n field\r\n });\r\n }\r\n\r\n export function createOperator(operatorType: OperatorType): Operator {\r\n return Operator.create({ operatorType });\r\n }\r\n\r\n export function createDirectExpression(values): DirectExpressionOperand {\r\n return DirectExpressionOperand.create({\r\n values: values\r\n });\r\n }\r\n\r\n export function createConstant(\r\n type: TypeKind,\r\n value: string | number | Date | boolean,\r\n directly: boolean = false,\r\n context: ConstantContext = ConstantContext.default\r\n ): Constant {\r\n let formattedValue: string = null;\r\n if (value != null) {\r\n if (type === TypeKind.dateTime && value instanceof Date) {\r\n formattedValue = formatHelper.formatDate(value, constants.invariantCultureDateTimeFormat);\r\n } else {\r\n formattedValue = value.toString();\r\n }\r\n }\r\n\r\n const constant = Constant.create();\r\n constant.valueType = type;\r\n constant.directValue = formattedValue;\r\n constant.directly = directly;\r\n constant.context = context;\r\n return constant;\r\n }\r\n\r\n export function createNullOperand(): NullOperand {\r\n return NullOperand.create();\r\n }\r\n\r\n // TODO: remove\r\n export function createCaseStatement(): MathExpression {\r\n const statement = createMathExpression();\r\n statement.useCaseUI = true;\r\n statement.expressionElements = [statementsFactory.createConditionalOperand()];\r\n\r\n return statement;\r\n }\r\n\r\n export function createStoredConstant(type: string, id: string, name: string): StoredConstant {\r\n return StoredConstant.create({\r\n constant: documentUtils.createDocumentReference({\r\n $type: ConstantDocument.typeName,\r\n id: id,\r\n name: name\r\n })\r\n });\r\n }\r\n\r\n export function createRFunction(rFunction: RFunction): RFunctionOperand {\r\n const operand = RFunctionOperand.create({\r\n function: documentUtils.createDocumentReference(rFunction)\r\n });\r\n operand.dataArguments = _.map(rFunction.dataArguments, arg => createMathExpression());\r\n operand.valueArguments = _.map(rFunction.valueArguments, arg => createMathExpression());\r\n return operand;\r\n }\r\n}\r\nexport default statementsFactory;\r\n","import * as commonUtils from '@Common/Helpers/CommonUtils';\r\nimport { BaseExpressionElement, FieldOperand, ParameterOperand, RFunctionOperand, StoredConstant } from '@InstanceFactory';\r\nimport { StatementVisitorBase } from '@Studio/StatementVisitorBase';\r\nimport { enumerable } from '@Common/Core/CoreDecorator';\r\n\r\nexport function getMetricOperandName(expression, metricName): string {\r\n const metricsInStatementCollector = new MetricsInStatementCollector();\r\n\r\n metricsInStatementCollector.accept(expression);\r\n\r\n const metricNames = _.map(metricsInStatementCollector.metricOperands, metricOperand => metricOperand.name);\r\n return commonUtils.getDefaultName(metricName, metricNames, formatMetricOperandName);\r\n}\r\n\r\nexport function setMetricOperandNames(expression): void {\r\n const metricsInStatementCollector = new MetricsInStatementCollector();\r\n\r\n metricsInStatementCollector.accept(expression);\r\n\r\n const metricNames = [];\r\n _.forEach(metricsInStatementCollector.metricOperands, metricOperand => {\r\n metricOperand.name = commonUtils.getDefaultName(metricOperand.metric.name, metricNames, formatMetricOperandName);\r\n metricNames.push(metricOperand.name);\r\n });\r\n}\r\n\r\nexport function formatMetricOperandName(prefix, index): any {\r\n return index == 0 ? prefix : prefix + '(' + index + ')';\r\n}\r\n\r\nexport class MetricsInStatementCollector extends StatementVisitorBase {\r\n private _metricOperands: any[] = [];\r\n\r\n @enumerable\r\n public get metricOperands(): any[] {\r\n return this._metricOperands;\r\n }\r\n\r\n protected visitMetric(metric): void {\r\n this._metricOperands.push(metric);\r\n }\r\n}\r\n\r\nexport class RFunctionsInStatementCollector extends StatementVisitorBase {\r\n public rFunctionOperands: { rFunction: RFunctionOperand; parent: BaseExpressionElement }[] = [];\r\n private partsStack: BaseExpressionElement[] = [];\r\n\r\n public accept(statementPart): void {\r\n this.partsStack.push(statementPart);\r\n super.accept(statementPart);\r\n this.partsStack.pop();\r\n }\r\n\r\n protected visitRFunction(rFunction: RFunctionOperand): void {\r\n const parent = this.partsStack[this.partsStack.length - 2];\r\n this.rFunctionOperands.push({\r\n rFunction: rFunction,\r\n parent: parent\r\n });\r\n }\r\n}\r\n\r\nexport class ParametersAndConstantsInStatementCollector extends StatementVisitorBase {\r\n private _parameters: ParameterOperand[] = [];\r\n\r\n @enumerable\r\n public get parameters(): ParameterOperand[] {\r\n return this._parameters;\r\n }\r\n\r\n private _constants: StoredConstant[] = [];\r\n\r\n @enumerable\r\n public get constants(): StoredConstant[] {\r\n return this._constants;\r\n }\r\n\r\n protected visitQueryParameter(parameter: ParameterOperand): void {\r\n this._parameters.push(parameter);\r\n }\r\n\r\n protected visitStoredConstant(storedConstant: StoredConstant): void {\r\n this._constants.push(storedConstant);\r\n }\r\n}\r\n\r\nexport class ReplaceAliasInStatement extends StatementVisitorBase {\r\n private _oldAlias: string;\r\n private _newAlias: string;\r\n\r\n constructor(oldAlias: string, newAlias: string) {\r\n super();\r\n this._oldAlias = oldAlias;\r\n this._newAlias = newAlias;\r\n }\r\n\r\n protected visitField(field): void {\r\n if (field.tableAlias === this._oldAlias) {\r\n field.tableAlias = this._newAlias;\r\n field.representation = field.name = field.tableAlias + '.' + field.fieldId;\r\n }\r\n }\r\n}\r\n\r\nexport class ReplaceFieldIdInStatement extends StatementVisitorBase {\r\n private _oldFieldId: string;\r\n private _newFieldId: string;\r\n private _tableAlias: string;\r\n\r\n constructor(oldFieldId: string, newFieldId: string, tableAlias: string) {\r\n super();\r\n this._oldFieldId = oldFieldId;\r\n this._newFieldId = newFieldId;\r\n this._tableAlias = tableAlias;\r\n }\r\n\r\n protected visitField(field): void {\r\n if (field.tableAlias === this._tableAlias && field.fieldId === this._oldFieldId) {\r\n field.fieldId = this._newFieldId;\r\n field.name = field.tableAlias + '.' + this._newFieldId;\r\n }\r\n }\r\n}\r\n\r\nexport class FieldsInStatementCollector extends StatementVisitorBase {\r\n private fields: FieldOperand[] = [];\r\n\r\n protected visitField(field): void {\r\n this.fields.push(field);\r\n }\r\n\r\n public getFields(): FieldOperand[] {\r\n return this.fields;\r\n }\r\n}\r\n\r\nexport class RemoveFieldStatementVisitor extends StatementVisitorBase {\r\n private alias: string;\r\n private fieldId: string;\r\n\r\n constructor(fieldId: string, alias: string) {\r\n super();\r\n\r\n this.alias = alias;\r\n this.fieldId = fieldId;\r\n }\r\n\r\n protected visitMath(mathExpression): void {\r\n mathExpression.expressionElements = _(mathExpression.expressionElements)\r\n .filter(e => {\r\n if (e.$type !== FieldOperand.typeName) {\r\n return true;\r\n }\r\n return !(e.tableAlias === this.alias && (this.fieldId === undefined || e.fieldId === this.fieldId));\r\n })\r\n .value();\r\n\r\n super.visitMath(mathExpression);\r\n }\r\n}\r\n"],"sourceRoot":""}