@techextensor/tab-core-utility 2.2.130 → 2.2.132

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/esm2022/index.mjs CHANGED
@@ -24,6 +24,7 @@ export * from './lib/tab-core-utility/app/helpers/common/dsq.helpers';
24
24
  export * from './lib/tab-core-utility/app/helpers/common/req-res.helpers';
25
25
  export * from './lib/tab-core-utility/app/helpers/common/where-clause.helpers';
26
26
  export * from './lib/tab-core-utility/app/helpers/common/template.helpers';
27
+ export * from './lib/tab-core-utility/app/helpers/common/meta-data.helpers';
27
28
  export * from './lib/tab-core-utility/app/helpers/screen/forms.helpers';
28
29
  export * from './lib/tab-core-utility/app/helpers/screen/grid-column-data.helpers';
29
30
  export * from './lib/tab-core-utility/app/helpers/screen/grid.helpers';
@@ -66,4 +67,4 @@ export * from './lib/tab-core-utility/core/util/auth.utils';
66
67
  export * from './lib/tab-core-utility/store/orginfo.store';
67
68
  // export * from './lib/tab-core-utility/store/schema.store'
68
69
  export * from './lib/tab-core-utility/store/auth.store';
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0I7QUFDbEIsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyx3REFBd0QsQ0FBQztBQUV2RSxhQUFhO0FBQ2IsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx1REFBdUQsQ0FBQztBQUV0RSxhQUFhO0FBQ2IsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGdEQUFnRCxDQUFDO0FBRS9ELGdCQUFnQjtBQUNoQixjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsdUVBQXVFLENBQUM7QUFDdEYsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLDJEQUEyRCxDQUFDO0FBQzFFLGNBQWMsZ0VBQWdFLENBQUM7QUFDL0UsY0FBYyw0REFBNEQsQ0FBQztBQUUzRSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsb0VBQW9FLENBQUM7QUFDbkYsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLGdFQUFnRSxDQUFDO0FBQy9FLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxzRkFBc0Y7QUFFdEYsbUJBQW1CO0FBQ25CLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLHNEQUFzRCxDQUFDO0FBRXJFLGVBQWU7QUFDZixjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLDZEQUE2RCxDQUFDO0FBRTVFLGNBQWM7QUFDZCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywrQ0FBK0MsQ0FBQztBQUU5RCxPQUFPO0FBQ1AsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyxpREFBaUQsQ0FBQztBQUVoRSxPQUFPO0FBQ1AsY0FBYyw2RUFBNkUsQ0FBQztBQUM1RixjQUFjLCtEQUErRCxDQUFDO0FBQzlFLGNBQWMsc0VBQXNFLENBQUM7QUFFckYsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHFEQUFxRCxDQUFDO0FBRXBFLGNBQWMsNkNBQTZDLENBQUM7QUFHNUQsUUFBUTtBQUVSLGNBQWMsNENBQTRDLENBQUE7QUFDMUQsNERBQTREO0FBQzVELGNBQWMseUNBQXlDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBcHAgLyBjb25zdGFudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NvbnN0YW50cy9hcGktY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NvbnN0YW50cy9jb21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY29uc3RhbnRzL2Vycm9yLW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NvbnN0YW50cy9zdG9yYWdlLWNvbnN0YW50cyc7XG5cbi8vIEFwcCAvIGNydWRcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLWdldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLWZvcm1pby5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLWluc2VydC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLWRlbGV0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLXVwZGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2NydWQvdGFiLXdvcmtmbG93LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY3J1ZC90YWItYmx1ZXByaW50LnNlcnZpY2UnO1xuXG4vLyBBcHAgLyBlbnVtXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9lbnVtcy9jb250cm9sbGVycy5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2VudW1zL2RzcS5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2VudW1zL3Blcm1pc3Npb24uZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9lbnVtcy9xdWVyeS5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2VudW1zL3dvcmtmbG93LmVudW0nO1xuXG4vLyBBcHAgLyBoZWxwZXJzXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL2NvbW1vbi9hcHAuaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL2NvbW1vbi91c2VyLXBlcnNvbmFsaXphdGlvbi5oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vZHNxLmhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vcmVxLXJlcy5oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvY29tbW9uL3doZXJlLWNsYXVzZS5oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvY29tbW9uL3RlbXBsYXRlLmhlbHBlcnMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL3NjcmVlbi9mb3Jtcy5oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvc2NyZWVuL2dyaWQtY29sdW1uLWRhdGEuaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL3NjcmVlbi9ncmlkLmhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9zY3JlZW4vbWVkaWEtdXBsb2FkLmhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9zY3JlZW4vcGx1Z2luLmhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9zY3JlZW4vc2NyZWVuLmhlbHBlcnMnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9zY3JlZW4vZnRwLW1lZGlhLXVwbG9hZC5oZWxwZXJzJztcblxuLy8gQXBwIC8gaW50ZXJmYWNlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaW50ZXJmYWNlcy9hdXRoLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9pbnRlcmZhY2VzL2NvbW1vbi1hcGkuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaW50ZXJmYWNlcy9vcmdJbmZvLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9pbnRlcmZhY2VzL3NjaGVtYS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaW50ZXJmYWNlcy9ncmlkLmludGVyZmFjZSc7XG5cbi8vIEFwcCAvIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvbW9kZWxzL2FwaS1xdWVyeS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9tb2RlbHMvYXBwLW9iamVjdC5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9tb2RlbHMvY29tbW9uLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL21vZGVscy9kYXRhLXNvdXJjZS1xdWVyaWVzLmNsYXNzJztcblxuLy8gQXBwIC8gdXRpbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL3V0aWxzL2ZpbHRlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL3V0aWxzL2Zvcm0tYnVpbGRlci51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL3V0aWxzL2pzb24udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC91dGlscy9vcGVyYXRvcnMudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC91dGlscy9yZXEtcmVzLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvdXRpbHMvdGFiLWFwcC51dGlsJztcblxuLy8gQXV0aFxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hdXRoL2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2F1dGgvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXV0aC9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2F1dGgvaWRiLXN0b3JhZ2Uuc2VydmljZSc7XG5cbi8vIENvcmVcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvY29yZS9lcnJvci1oYW5kbGVyL2Vycm9yLWhhbmRsZXItaW50ZXJjZXB0b3Iuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2NvcmUvZXJyb3ItaGFuZGxlci9lcnJvci1oYW5kbGVyLnN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvY29yZS9lcnJvci1oYW5kbGVyL21vZGVscy9lcnJvci1oYW5kbGVyLnN0YXRlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9jb3JlL2h0dHAtY2xpZW50L2FwaS11cmwudG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9jb3JlL2h0dHAtY2xpZW50L2FwaS5zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9jb3JlL3V0aWwvYXV0aC51dGlscyc7XG5cblxuLy8gc3RvcmVcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9zdG9yZS9vcmdpbmZvLnN0b3JlJ1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9zdG9yZS9zY2hlbWEuc3RvcmUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L3N0b3JlL2F1dGguc3RvcmUnXG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0I7QUFDbEIsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYyx3REFBd0QsQ0FBQztBQUV2RSxhQUFhO0FBQ2IsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx1REFBdUQsQ0FBQztBQUV0RSxhQUFhO0FBQ2IsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLGdEQUFnRCxDQUFDO0FBRS9ELGdCQUFnQjtBQUNoQixjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsdUVBQXVFLENBQUM7QUFDdEYsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLDJEQUEyRCxDQUFDO0FBQzFFLGNBQWMsZ0VBQWdFLENBQUM7QUFDL0UsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLDZEQUE2RCxDQUFDO0FBRTVFLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyxvRUFBb0UsQ0FBQztBQUNuRixjQUFjLHdEQUF3RCxDQUFDO0FBQ3ZFLGNBQWMsZ0VBQWdFLENBQUM7QUFDL0UsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLHNGQUFzRjtBQUV0RixtQkFBbUI7QUFDbkIsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLHdEQUF3RCxDQUFDO0FBQ3ZFLGNBQWMsc0RBQXNELENBQUM7QUFFckUsZUFBZTtBQUNmLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsNkRBQTZELENBQUM7QUFFNUUsY0FBYztBQUNkLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLCtDQUErQyxDQUFDO0FBRTlELE9BQU87QUFDUCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLGlEQUFpRCxDQUFDO0FBRWhFLE9BQU87QUFDUCxjQUFjLDZFQUE2RSxDQUFDO0FBQzVGLGNBQWMsK0RBQStELENBQUM7QUFDOUUsY0FBYyxzRUFBc0UsQ0FBQztBQUVyRixjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMscURBQXFELENBQUM7QUFFcEUsY0FBYyw2Q0FBNkMsQ0FBQztBQUc1RCxRQUFRO0FBRVIsY0FBYyw0Q0FBNEMsQ0FBQTtBQUMxRCw0REFBNEQ7QUFDNUQsY0FBYyx5Q0FBeUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFwcCAvIGNvbnN0YW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY29uc3RhbnRzL2FwaS1jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY29uc3RhbnRzL2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9jb25zdGFudHMvZXJyb3ItbWVzc2FnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY29uc3RhbnRzL3N0b3JhZ2UtY29uc3RhbnRzJztcblxuLy8gQXBwIC8gY3J1ZFxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY3J1ZC90YWItZ2V0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY3J1ZC90YWItZm9ybWlvLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY3J1ZC90YWItaW5zZXJ0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY3J1ZC90YWItZGVsZXRlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY3J1ZC90YWItdXBkYXRlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY3J1ZC90YWItd29ya2Zsb3cuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9jcnVkL3RhYi1ibHVlcHJpbnQuc2VydmljZSc7XG5cbi8vIEFwcCAvIGVudW1cbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2VudW1zL2NvbnRyb2xsZXJzLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvZW51bXMvZHNxLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvZW51bXMvcGVybWlzc2lvbi5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2VudW1zL3F1ZXJ5LmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvZW51bXMvd29ya2Zsb3cuZW51bSc7XG5cbi8vIEFwcCAvIGhlbHBlcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvY29tbW9uL2FwcC5oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvY29tbW9uL3VzZXItcGVyc29uYWxpemF0aW9uLmhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL2NvbW1vbi9kc3EuaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL2NvbW1vbi9yZXEtcmVzLmhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vd2hlcmUtY2xhdXNlLmhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vdGVtcGxhdGUuaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL2NvbW1vbi9tZXRhLWRhdGEuaGVscGVycyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvc2NyZWVuL2Zvcm1zLmhlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9zY3JlZW4vZ3JpZC1jb2x1bW4tZGF0YS5oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2hlbHBlcnMvc2NyZWVuL2dyaWQuaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL3NjcmVlbi9tZWRpYS11cGxvYWQuaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL3NjcmVlbi9wbHVnaW4uaGVscGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL3NjcmVlbi9zY3JlZW4uaGVscGVycyc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9oZWxwZXJzL3NjcmVlbi9mdHAtbWVkaWEtdXBsb2FkLmhlbHBlcnMnO1xuXG4vLyBBcHAgLyBpbnRlcmZhY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9pbnRlcmZhY2VzL2F1dGguaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2ludGVyZmFjZXMvY29tbW9uLWFwaS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaW50ZXJmYWNlcy91c2VyLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9pbnRlcmZhY2VzL29yZ0luZm8uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL2ludGVyZmFjZXMvc2NoZW1hLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9pbnRlcmZhY2VzL2dyaWQuaW50ZXJmYWNlJztcblxuLy8gQXBwIC8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9tb2RlbHMvYXBpLXF1ZXJ5LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL21vZGVscy9hcHAtb2JqZWN0LmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL21vZGVscy9jb21tb24uY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvbW9kZWxzL2RhdGEtc291cmNlLXF1ZXJpZXMuY2xhc3MnO1xuXG4vLyBBcHAgLyB1dGlsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvdXRpbHMvZmlsdGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvdXRpbHMvZm9ybS1idWlsZGVyLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvdXRpbHMvanNvbi51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL3V0aWxzL29wZXJhdG9ycy51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXBwL3V0aWxzL3JlcS1yZXMudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC91dGlscy90YWItYXBwLnV0aWwnO1xuXG4vLyBBdXRoXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2F1dGgvYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXV0aC9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9hdXRoL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvYXV0aC9pZGItc3RvcmFnZS5zZXJ2aWNlJztcblxuLy8gQ29yZVxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9jb3JlL2Vycm9yLWhhbmRsZXIvZXJyb3ItaGFuZGxlci1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvY29yZS9lcnJvci1oYW5kbGVyL2Vycm9yLWhhbmRsZXIuc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLWNvcmUtdXRpbGl0eS9jb3JlL2Vycm9yLWhhbmRsZXIvbW9kZWxzL2Vycm9yLWhhbmRsZXIuc3RhdGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2NvcmUvaHR0cC1jbGllbnQvYXBpLXVybC50b2tlbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2NvcmUvaHR0cC1jbGllbnQvYXBpLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L2NvcmUvdXRpbC9hdXRoLnV0aWxzJztcblxuXG4vLyBzdG9yZVxuXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L3N0b3JlL29yZ2luZm8uc3RvcmUnXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi90YWItY29yZS11dGlsaXR5L3N0b3JlL3NjaGVtYS5zdG9yZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYi1jb3JlLXV0aWxpdHkvc3RvcmUvYXV0aC5zdG9yZSdcbiJdfQ==
@@ -18,6 +18,7 @@ export const StorageConstants = {
18
18
  AppId: 'AppId',
19
19
  screenContext: 'screenContext',
20
20
  environmentMode: 'environmentMode',
21
+ environmentId: 'environmentId',
21
22
  tabAppObjectAccess: 'tabAppObjectAccess'
22
23
  };
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY29uc3RhbnRzL3N0b3JhZ2UtY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsR0FBRyxFQUFFLEtBQUs7SUFDVixRQUFRLEVBQUUsVUFBVTtJQUNwQixLQUFLLEVBQUUsT0FBTztJQUNkLFdBQVcsRUFBRSxhQUFhO0lBQzFCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLHVCQUF1QixFQUFFLHlCQUF5QjtJQUNsRCxLQUFLLEVBQUMsT0FBTztJQUNiLGFBQWEsRUFBQyxlQUFlO0lBQzdCLGVBQWUsRUFBQyxpQkFBaUI7SUFDakMsa0JBQWtCLEVBQUUsb0JBQW9CO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU3RvcmFnZUNvbnN0YW50cyA9IHtcclxuICB0YWJEYXRhOiAndGFiRGF0YScsXHJcbiAgZm9ybUpzb246ICdGb3JtSnNvbicsXHJcbiAgc2NoZW1hSlNPTjogJ3NjaGVtYUpTT04nLFxyXG4gIG9yZ0luZm86ICdvcmdJbmZvJyxcclxuICBhcHBsaWNhdGlvbkNvZGU6ICdhcHBsaWNhdGlvbkNvZGUnLFxyXG4gIFRBQjogJ1RBQicsXHJcbiAgdXNlckluZm86ICd1c2VySW5mbycsXHJcbiAgdG9rZW46ICd0b2tlbicsXHJcbiAgc3RhdGljVG9rZW46ICdzdGF0aWNUb2tlbicsXHJcbiAgc2NyZWVuSWQ6ICdzY3JlZW5JZCcsXHJcbiAgZWRpdFNjcmVlblF1ZXJ5UGFyYW06ICdlZGl0U2NyZWVuUXVlcnlQYXJhbScsXHJcbiAgbGF5b3V0U2NyZWVuSWQ6ICdsYXlvdXRTY3JlZW5JZCcsXHJcbiAgdGFiU2NyZWVuOiAndGFiU2NyZWVuJyxcclxuICBUZW5hbnRJZDogJ1RlbmFudElkJyxcclxuICBBdXRob3JpemF0aW9uOiAnQXV0aG9yaXphdGlvbicsXHJcbiAgdGFiVXNlclBlcnNvbmFsaXplZERhdGE6ICd0YWJVc2VyUGVyc29uYWxpemVkRGF0YScsXHJcbiAgQXBwSWQ6J0FwcElkJyxcclxuICBzY3JlZW5Db250ZXh0OidzY3JlZW5Db250ZXh0JyxcclxuICBlbnZpcm9ubWVudE1vZGU6J2Vudmlyb25tZW50TW9kZScsXHJcbiAgdGFiQXBwT2JqZWN0QWNjZXNzOiAndGFiQXBwT2JqZWN0QWNjZXNzJ1xyXG59O1xyXG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvY29uc3RhbnRzL3N0b3JhZ2UtY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsR0FBRyxFQUFFLEtBQUs7SUFDVixRQUFRLEVBQUUsVUFBVTtJQUNwQixLQUFLLEVBQUUsT0FBTztJQUNkLFdBQVcsRUFBRSxhQUFhO0lBQzFCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLHVCQUF1QixFQUFFLHlCQUF5QjtJQUNsRCxLQUFLLEVBQUMsT0FBTztJQUNiLGFBQWEsRUFBQyxlQUFlO0lBQzdCLGVBQWUsRUFBQyxpQkFBaUI7SUFDakMsYUFBYSxFQUFDLGVBQWU7SUFDN0Isa0JBQWtCLEVBQUUsb0JBQW9CO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgU3RvcmFnZUNvbnN0YW50cyA9IHtcclxuICB0YWJEYXRhOiAndGFiRGF0YScsXHJcbiAgZm9ybUpzb246ICdGb3JtSnNvbicsXHJcbiAgc2NoZW1hSlNPTjogJ3NjaGVtYUpTT04nLFxyXG4gIG9yZ0luZm86ICdvcmdJbmZvJyxcclxuICBhcHBsaWNhdGlvbkNvZGU6ICdhcHBsaWNhdGlvbkNvZGUnLFxyXG4gIFRBQjogJ1RBQicsXHJcbiAgdXNlckluZm86ICd1c2VySW5mbycsXHJcbiAgdG9rZW46ICd0b2tlbicsXHJcbiAgc3RhdGljVG9rZW46ICdzdGF0aWNUb2tlbicsXHJcbiAgc2NyZWVuSWQ6ICdzY3JlZW5JZCcsXHJcbiAgZWRpdFNjcmVlblF1ZXJ5UGFyYW06ICdlZGl0U2NyZWVuUXVlcnlQYXJhbScsXHJcbiAgbGF5b3V0U2NyZWVuSWQ6ICdsYXlvdXRTY3JlZW5JZCcsXHJcbiAgdGFiU2NyZWVuOiAndGFiU2NyZWVuJyxcclxuICBUZW5hbnRJZDogJ1RlbmFudElkJyxcclxuICBBdXRob3JpemF0aW9uOiAnQXV0aG9yaXphdGlvbicsXHJcbiAgdGFiVXNlclBlcnNvbmFsaXplZERhdGE6ICd0YWJVc2VyUGVyc29uYWxpemVkRGF0YScsXHJcbiAgQXBwSWQ6J0FwcElkJyxcclxuICBzY3JlZW5Db250ZXh0OidzY3JlZW5Db250ZXh0JyxcclxuICBlbnZpcm9ubWVudE1vZGU6J2Vudmlyb25tZW50TW9kZScsXHJcbiAgZW52aXJvbm1lbnRJZDonZW52aXJvbm1lbnRJZCcsXHJcbiAgdGFiQXBwT2JqZWN0QWNjZXNzOiAndGFiQXBwT2JqZWN0QWNjZXNzJ1xyXG59O1xyXG4iXX0=
@@ -0,0 +1,661 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { Injectable } from "@angular/core";
3
+ import { MetadataEntityType } from "../../interfaces/schema.interface";
4
+ import { Common } from "../../constants/common";
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * MetadataUtils - Utility service for retrieving and manipulating application metadata
8
+ *
9
+ * This service provides methods to extract, filter, and format different parts of the
10
+ * application metadata, including objects, fields, screens, menus, etc.
11
+ */
12
+ export class MetadataHelper {
13
+ // Helper method to consistently format results
14
+ formatResults(items, columns) {
15
+ if (!columns || columns.length === 0) {
16
+ return items;
17
+ }
18
+ return items.map(item => {
19
+ const result = {};
20
+ columns.forEach(col => {
21
+ result[col] = item[col];
22
+ });
23
+ return result;
24
+ });
25
+ }
26
+ /**
27
+ * Search across all metadata for a term
28
+ *
29
+ * @param searchTerm Term to search for
30
+ * @param entityTypes Optional types of entities to search (if not provided, searches all)
31
+ * @returns Search results grouped by entity type
32
+ *
33
+ * @example
34
+ * // Search across all metadata
35
+ * const results = metadataUtils.searchAcrossMetadata('Blueprint');
36
+ *
37
+ * // Search only in app objects and screens
38
+ * const results = metadataUtils.searchAcrossMetadata(
39
+ * 'Role',
40
+ * [MetadataEntityType.APP_OBJECTS, MetadataEntityType.APP_SCREENS]
41
+ * );
42
+ */
43
+ searchAcrossMetadata(searchTerm, entityTypes) {
44
+ try {
45
+ if (!searchTerm || searchTerm.trim() === '') {
46
+ return {};
47
+ }
48
+ const term = searchTerm.toLowerCase();
49
+ const results = {};
50
+ // If entityTypes not provided, search all entity types
51
+ const typesToSearch = entityTypes || Object.values(MetadataEntityType);
52
+ // Execute search for each entity type
53
+ if (typesToSearch.includes(MetadataEntityType.APP_OBJECTS)) {
54
+ results[MetadataEntityType.APP_OBJECTS] = this.searchAppObjects(term);
55
+ }
56
+ if (typesToSearch.includes(MetadataEntityType.APP_FIELDS)) {
57
+ results[MetadataEntityType.APP_FIELDS] = this.searchAppFields(term);
58
+ }
59
+ if (typesToSearch.includes(MetadataEntityType.DATA_SOURCE_QUERIES)) {
60
+ results[MetadataEntityType.DATA_SOURCE_QUERIES] = this.searchDataSourceQueries(term);
61
+ }
62
+ if (typesToSearch.includes(MetadataEntityType.APP_SCREENS)) {
63
+ results[MetadataEntityType.APP_SCREENS] = this.searchAppScreens(term);
64
+ }
65
+ if (typesToSearch.includes(MetadataEntityType.APP_MENUS)) {
66
+ results[MetadataEntityType.APP_MENUS] = this.searchAppMenus(term);
67
+ }
68
+ return results;
69
+ }
70
+ catch (error) {
71
+ console.error('Error in searchMetadata:', error);
72
+ return {};
73
+ }
74
+ }
75
+ /**
76
+ * Search for a term within App Objects
77
+ * @private
78
+ */
79
+ searchAppObjects(term) {
80
+ return this.getAppObjects(obj => this.containsTerm(obj.ObjectName, term) ||
81
+ this.containsTerm(obj.DisplayName, term) ||
82
+ this.containsTerm(obj.Description, term) ||
83
+ this.containsTerm(obj.SystemDBTableName, term));
84
+ }
85
+ /**
86
+ * Search for a term within App Fields
87
+ * @private
88
+ */
89
+ searchAppFields(term) {
90
+ return this.getAppFields(field => this.containsTerm(field.FieldName, term) ||
91
+ this.containsTerm(field.DisplayName, term) ||
92
+ this.containsTerm(field.Description, term) ||
93
+ this.containsTerm(field.SystemDBFieldName, term));
94
+ }
95
+ /**
96
+ * Search for a term within Data Source Queries
97
+ * @private
98
+ */
99
+ searchDataSourceQueries(term) {
100
+ return this.getDataSourceQueries(query => this.containsTerm(query.QueryName, term) ||
101
+ this.containsTerm(query.DisplayName, term));
102
+ }
103
+ /**
104
+ * Search for a term within App Screens
105
+ * @private
106
+ */
107
+ searchAppScreens(term) {
108
+ return this.getAppScreens(screen => this.containsTerm(screen.Name, term) ||
109
+ this.containsTerm(screen.Description, term));
110
+ }
111
+ /**
112
+ * Search for a term within App Menus
113
+ * @private
114
+ */
115
+ searchAppMenus(term) {
116
+ return this.getAppMenus(menu => this.containsTerm(menu.MenuName, term) ||
117
+ this.containsTerm(menu.DisplayName, term));
118
+ }
119
+ /**
120
+ * Helper method to check if a string contains a search term
121
+ * @private
122
+ */
123
+ containsTerm(value, term) {
124
+ return !!value && value.toLowerCase().includes(term);
125
+ }
126
+ /**
127
+ * Gets App Objects based on filter criteria
128
+ *
129
+ * @param filterFn Optional filter function to apply to app objects
130
+ * @param columns Optional columns to include in the result
131
+ * @returns Array of filtered app objects
132
+ *
133
+ * @example
134
+ * // Get all system app objects
135
+ * const systemObjects = metadataUtils.getAppObjects(obj => obj.IsSystem === true);
136
+ *
137
+ * // Get specific columns from non-deprecated objects
138
+ * const objects = metadataUtils.getAppObjects(
139
+ * obj => !obj.IsDeprecated,
140
+ * ['ID', 'DisplayName', 'ObjectName']
141
+ * );
142
+ */
143
+ getAppObjects(filterFn, columns) {
144
+ try {
145
+ let appObjects = Common.tabJson.AppObjects || [];
146
+ // Apply filter if provided
147
+ if (filterFn) {
148
+ appObjects = appObjects.filter(filterFn);
149
+ }
150
+ // Return all object data if no columns specified
151
+ return this.formatResults(appObjects, columns);
152
+ }
153
+ catch (error) {
154
+ console.error('Error in getAppObjects:', error);
155
+ return [];
156
+ }
157
+ }
158
+ /**
159
+ * Gets a specific App Object by ID or Name
160
+ *
161
+ * @param appObject ID or Name of the app object to retrieve
162
+ * @param columns Optional columns to include in the result
163
+ * @returns The app object with specified columns or null if not found
164
+ *
165
+ * @example
166
+ * // Get a specific app object with all properties
167
+ * const appObj = metadataUtils.getAppObjectDetails('b4887d4d-bb1e-4d52-a7e8-2f943d69e44c' or 'TABMD_SYSTEM');
168
+ *
169
+ * // Get specific columns from an app object
170
+ * const appObj = metadataUtils.getAppObjectDetails(
171
+ * 'b4887d4d-bb1e-4d52-a7e8-2f943d69e44c',
172
+ * ['ID', 'DisplayName', 'ObjectName']
173
+ * );
174
+ */
175
+ getAppObjectDetails(appObject, columns) {
176
+ try {
177
+ return this.getAppObjects(obj => obj.ID?.toLowerCase() === appObject?.toLowerCase() || obj.ObjectName === appObject, columns)?.[0] ?? null;
178
+ }
179
+ catch (error) {
180
+ console.error('Error in getAppObjectById:', error);
181
+ return null;
182
+ }
183
+ }
184
+ /**
185
+ * Gets all fields across all app objects with filter criteria
186
+ *
187
+ * @param filterFn Optional filter function to apply to fields
188
+ * @param columns Optional columns to include in the result
189
+ * @returns Array of filtered fields
190
+ *
191
+ * @example
192
+ * // Get all required fields across all objects
193
+ * const requiredFields = metadataUtils.getAppFields(field => field.IsRequired === true);
194
+ *
195
+ * // Get specific columns from searchable fields
196
+ * const fields = metadataUtils.getAppFields(
197
+ * field => field.IsSearchable === true,
198
+ * ['ID', 'DisplayName', 'FieldName']
199
+ * );
200
+ */
201
+ getAppFields(filterFn, columns) {
202
+ try {
203
+ // Get all fields from all app objects
204
+ const allFields = [];
205
+ Common.tabJson.AppObjects.forEach((obj) => {
206
+ allFields.push(...obj.Fields);
207
+ });
208
+ // Apply filter if provided
209
+ let filteredFields = allFields;
210
+ if (filterFn) {
211
+ filteredFields = allFields.filter(filterFn);
212
+ }
213
+ // Return all field data if no columns specified
214
+ return this.formatResults(filteredFields, columns);
215
+ }
216
+ catch (error) {
217
+ console.error('Error in getAppFields:', error);
218
+ return [];
219
+ }
220
+ }
221
+ /**
222
+ * Gets fields for a specific app object
223
+ *
224
+ * @param appObject ID or Name of the app object
225
+ * @param filterFn Optional filter function for fields
226
+ * @returns Array of fields for the specified object
227
+ *
228
+ * @example
229
+ * // Get all fields for an object
230
+ * const fields = metadataUtils.getAppFieldsByAppObject('b4887d4d-bb1e-4d52-a7e8-2f943d69e44c' or 'TABMD_SYSTEM');
231
+ *
232
+ * // Get only required fields
233
+ * const requiredFields = metadataUtils.getAppFieldsByAppObject(
234
+ * 'b4887d4d-bb1e-4d52-a7e8-2f943d69e44c',
235
+ * field => field.IsRequired === true
236
+ * );
237
+ */
238
+ getAppFieldsByAppObject(appObject, filterFn, columns) {
239
+ try {
240
+ const filteredAppObject = this.getAppObjectDetails(appObject);
241
+ if (!filteredAppObject) {
242
+ return [];
243
+ }
244
+ let fields = filteredAppObject.Fields || [];
245
+ // Apply filter if provided
246
+ if (filterFn) {
247
+ fields = fields.filter(filterFn);
248
+ }
249
+ return this.formatResults(fields, columns);
250
+ }
251
+ catch (error) {
252
+ console.error('Error in getAppFieldById:', error);
253
+ return [];
254
+ }
255
+ }
256
+ /**
257
+ * Gets lookup fields for a specific app object
258
+ *
259
+ * @param appObject ID or Name of the app object
260
+ * @param filterFn Optional filter function for lookup fields
261
+ * @param columns Optional columns to include in the result
262
+ * @returns Array of lookup fields for the specified object
263
+ *
264
+ * @example
265
+ * // Get all lookup fields for an object
266
+ * const lookupFields = metadataUtils.getLookupFieldsByAppObject('TABD_Blueprint_SLASchemes');
267
+ *
268
+ * // Get specific lookup fields
269
+ * const fields = metadataUtils.getLookupFieldsByAppObject(
270
+ * 'b4887d4d-bb1e-4d52-a7e8-2f943d69e44c',
271
+ * field => field.IsRequired === true
272
+ * );
273
+ */
274
+ getLookupFieldsByAppObject(appObject, filterFn, columns) {
275
+ try {
276
+ // Get fields for the specified object that are lookups
277
+ return this.getAppFieldsByAppObject(appObject, field => {
278
+ // Check if the field is a lookup type
279
+ const isLookup = field.LookUpDetails != null;
280
+ // Apply additional user filter if provided
281
+ return isLookup && (!filterFn || filterFn(field));
282
+ }, columns);
283
+ }
284
+ catch (error) {
285
+ console.error('Error in getAppObjectLookupFields:', error);
286
+ return [];
287
+ }
288
+ }
289
+ /**
290
+ * Gets data source queries with filter criteria
291
+ *
292
+ * @param filterFn Optional filter function to apply to queries
293
+ * @param columns Optional columns to include in the result
294
+ * @returns Array of filtered data source queries
295
+ *
296
+ * @example
297
+ * // Get all queries with a specific naming pattern
298
+ * const queries = metadataUtils.getDataSourceQueries(query => query.QueryName.includes('List'));
299
+ *
300
+ * // Get specific columns from all queries
301
+ * const queries = metadataUtils.getDataSourceQueries(
302
+ * undefined,
303
+ * ['ID', 'QueryName', 'DisplayName']
304
+ * );
305
+ */
306
+ getDataSourceQueries(filterFn, columns) {
307
+ try {
308
+ // Get all data source queries from all app objects
309
+ const allQueries = [];
310
+ Common.tabJson.AppObjects.forEach((obj) => {
311
+ if (obj.DataSourceQueries && obj.DataSourceQueries.length > 0) {
312
+ allQueries.push(...obj.DataSourceQueries);
313
+ }
314
+ });
315
+ // Apply filter if provided
316
+ let filteredQueries = allQueries;
317
+ if (filterFn) {
318
+ filteredQueries = allQueries.filter(filterFn);
319
+ }
320
+ return this.formatResults(filteredQueries, columns);
321
+ }
322
+ catch (error) {
323
+ console.error('Error in getDataSourceQueries:', error);
324
+ return [];
325
+ }
326
+ }
327
+ /**
328
+ * Gets data source queries for a specific app object
329
+ *
330
+ * @param appObject ID or Name of the app object
331
+ * @param filterFn Optional filter function for queries
332
+ * @param columns Optional columns to include in the result
333
+ * @returns Array of queries for the specified object
334
+ *
335
+ * @example
336
+ * // Get all queries for an object
337
+ * const queries = metadataUtils.getDataSourceQueriesByAppObject('b4887d4d-bb1e-4d52-a7e8-2f943d69e44c');
338
+ *
339
+ * // Get queries with specific pattern
340
+ * const filteredQueries = metadataUtils.getDataSourceQueriesByAppObject(
341
+ * 'TABD_Blueprint_SLASchemes',
342
+ * query => query.QueryName.includes('List')
343
+ * );
344
+ */
345
+ getDataSourceQueriesByAppObject(appObject, filterFn, columns) {
346
+ try {
347
+ const filteredAppObject = this.getAppObjectDetails(appObject);
348
+ if (!filteredAppObject || !filteredAppObject.DataSourceQueries) {
349
+ return [];
350
+ }
351
+ let queries = filteredAppObject.DataSourceQueries;
352
+ // Apply filter if provided
353
+ if (filterFn) {
354
+ queries = queries.filter(filterFn);
355
+ }
356
+ return this.formatResults(queries, columns);
357
+ }
358
+ catch (error) {
359
+ console.error('Error in getAppObjectQueries:', error);
360
+ return [];
361
+ }
362
+ }
363
+ /**
364
+ * Gets a specific Data Source Query by ID or Name
365
+ *
366
+ * @param query ID or Name of the data source query to retrieve
367
+ * @param columns Optional columns to include in the result
368
+ * @returns The data source query with specified columns or null if not found
369
+ *
370
+ * @example
371
+ * // Get a specific query with all properties
372
+ * const query = metadataUtils.getDataSourceQueryDetails('73e590d0-c4eb-464d-abf9-01943e30ae09');
373
+ *
374
+ * // Get specific columns from a query by name
375
+ * const query = metadataUtils.getDataSourceQueryDetails(
376
+ * 'Get_SLASchemes_List',
377
+ * ['ID', 'QueryName', 'DisplayName']
378
+ * );
379
+ */
380
+ getDataSourceQueryDetails(query, columns) {
381
+ try {
382
+ return this.getDataSourceQueries(q => q.ID?.toLowerCase() === query?.toLowerCase() || q.QueryName === query, columns)?.[0] ?? null;
383
+ }
384
+ catch (error) {
385
+ console.error('Error in getDataSourceQuery:', error);
386
+ return null;
387
+ }
388
+ }
389
+ /**
390
+ * Gets fields from a data source query
391
+ *
392
+ * @param query ID or Name of the data source query
393
+ * @param filterFn Optional filter function for query fields
394
+ * @param columns Optional columns to include in the result
395
+ * @returns Array of fields for the specified query with app field details
396
+ *
397
+ * @example
398
+ * // Get all fields for a query
399
+ * const queryFields = metadataUtils.getDataSourceQueryFields('73e590d0-c4eb-464d-abf9-01943e30ae09');
400
+ *
401
+ * // Get fields for a query by name
402
+ * const queryFields = metadataUtils.getDataSourceQueryFields('Get_SLASchemes_List');
403
+ *
404
+ * // Get fields with filter and specific columns
405
+ * const fields = metadataUtils.getDataSourceQueryFields(
406
+ * '73e590d0-c4eb-464d-abf9-01943e30ae09',
407
+ * field => field.FieldType === 1,
408
+ * ['ID', 'AppFieldID', 'FieldType']
409
+ * );
410
+ */
411
+ getFieldsByDSQ(query, filterFn, columns) {
412
+ try {
413
+ // Find the query using our existing method
414
+ const dsQuery = this.getDataSourceQueryDetails(query);
415
+ if (!dsQuery || !dsQuery.Fields?.length) {
416
+ return [];
417
+ }
418
+ // Get enhanced fields with app field details
419
+ let queryFields = this.enhanceQueryFieldsWithAppFields(dsQuery);
420
+ // Apply filter if provided
421
+ if (filterFn) {
422
+ queryFields = queryFields.filter(filterFn);
423
+ }
424
+ return this.formatResults(queryFields, columns);
425
+ }
426
+ catch (error) {
427
+ console.error('Error in getDataSourceQueryFields:', error);
428
+ return [];
429
+ }
430
+ }
431
+ /**
432
+ * Enhances query fields with their corresponding app field details
433
+ * @private
434
+ */
435
+ enhanceQueryFieldsWithAppFields(dsQuery) {
436
+ if (!dsQuery || !dsQuery.Fields?.length) {
437
+ return [];
438
+ }
439
+ // Find the parent app object
440
+ const parentAppObject = this.findParentAppObjectForQuery(dsQuery);
441
+ if (!parentAppObject) {
442
+ return dsQuery.Fields;
443
+ }
444
+ // Add app field details to each query field
445
+ return dsQuery.Fields.map((field) => {
446
+ const appField = this.findAppFieldById(parentAppObject, field.AppFieldID);
447
+ return {
448
+ ...field,
449
+ Field: appField || {}
450
+ };
451
+ });
452
+ }
453
+ /**
454
+ * Finds the parent app object that contains a specific data source query
455
+ * @private
456
+ */
457
+ findParentAppObjectForQuery(dsQuery) {
458
+ return this.getAppObjects(obj => obj.DataSourceQueries?.some((q) => q.ID?.toLowerCase() === dsQuery.ID?.toLowerCase() ||
459
+ q.QueryName === dsQuery.QueryName))[0];
460
+ }
461
+ /**
462
+ * Finds an app field by ID within a specific app object
463
+ * @private
464
+ */
465
+ findAppFieldById(appObject, fieldId) {
466
+ if (!appObject || !appObject.Fields?.length || !fieldId) {
467
+ return undefined;
468
+ }
469
+ return appObject.Fields.find((field) => field.ID?.toLowerCase() === fieldId?.toLowerCase());
470
+ }
471
+ /**
472
+ * Gets query parameters from a data source query
473
+ *
474
+ * @param query ID or Name of the data source query
475
+ * @param filterFn Optional filter function for query parameters
476
+ * @param columns Optional columns to include in the result
477
+ * @returns Array of parameters for the specified query
478
+ *
479
+ * @example
480
+ * // Get all parameters for a query
481
+ * const queryParams = metadataUtils.getParametersByDSQ('73e590d0-c4eb-464d-abf9-01943e30ae09');
482
+ *
483
+ * // Get all parameters for a query by name
484
+ * const queryParams = metadataUtils.getParametersByDSQ('Get_SLASchemes_List');
485
+ *
486
+ * // Get mandatory parameters only
487
+ * const mandatoryParams = metadataUtils.getParametersByDSQ(
488
+ * '73e590d0-c4eb-464d-abf9-01943e30ae09',
489
+ * param => param.IsMandatory === true
490
+ * );
491
+ */
492
+ getParametersByDSQ(query, filterFn, columns) {
493
+ try {
494
+ // Find the query using our existing method
495
+ const dsQuery = this.getDataSourceQueryDetails(query);
496
+ if (!dsQuery || !dsQuery.Parameters?.length) {
497
+ return [];
498
+ }
499
+ let queryParameters = dsQuery.Parameters || [];
500
+ // Apply filter if provided
501
+ if (filterFn) {
502
+ queryParameters = queryParameters.filter(filterFn);
503
+ }
504
+ return this.formatResults(queryParameters, columns);
505
+ }
506
+ catch (error) {
507
+ console.error('Error in getDataSourceQueryParameters:', error);
508
+ return [];
509
+ }
510
+ }
511
+ /**
512
+ * Gets App Screens with filter criteria
513
+ *
514
+ * @param filterFn Optional filter function to apply to app screens
515
+ * @param columns Optional columns to include in the result
516
+ * @returns Array of filtered app screens
517
+ *
518
+ * @example
519
+ * // Get all system screens
520
+ * const systemScreens = metadataUtils.getAppScreens(screen => screen.IsSystemRecord === true);
521
+ *
522
+ * // Get specific columns from all screens
523
+ * const screens = metadataUtils.getAppScreens(
524
+ * undefined,
525
+ * ['ID', 'Name', 'ScreenType']
526
+ * );
527
+ */
528
+ getAppScreens(filterFn, columns) {
529
+ try {
530
+ let appScreens = Common.tabJson.AppScreens || [];
531
+ // Apply filter if provided
532
+ if (filterFn) {
533
+ appScreens = appScreens.filter(filterFn);
534
+ }
535
+ return this.formatResults(appScreens, columns);
536
+ }
537
+ catch (error) {
538
+ console.error('Error in getAppScreens:', error);
539
+ return [];
540
+ }
541
+ }
542
+ /**
543
+ * Gets a specific App Screen by ID or Name
544
+ *
545
+ * @param screen ID or Name of the app screen to retrieve
546
+ * @param columns Optional columns to include in the result
547
+ * @returns The app screen with specified columns or null if not found
548
+ *
549
+ * @example
550
+ * // Get a specific screen with all properties
551
+ * const screen = metadataUtils.getAppScreen('a5cd639e-31ba-4d33-8800-005a5248dfb2');
552
+ *
553
+ * // Get specific columns from a screen by name
554
+ * const screen = metadataUtils.getAppScreen(
555
+ * 'New Detail Role/Permission Appoject acess wise',
556
+ * ['ID', 'Name', 'ScreenType']
557
+ * );
558
+ */
559
+ getAppScreen(screen, columns) {
560
+ try {
561
+ return this.getAppScreens(scr => scr.ID?.toLowerCase() === screen?.toLowerCase() || scr.Name === screen, columns)?.[0] ?? null;
562
+ }
563
+ catch (error) {
564
+ console.error('Error in getAppScreen:', error);
565
+ return null;
566
+ }
567
+ }
568
+ /**
569
+ * Gets App Menus with filter criteria
570
+ *
571
+ * @param filterFn Optional filter function to apply to app menus
572
+ * @param columns Optional columns to include in the result
573
+ * @returns Array of filtered app menus
574
+ *
575
+ * @example
576
+ * // Get all top-level menus
577
+ * const topMenus = metadataUtils.getAppMenus(menu => !menu.ParentID);
578
+ *
579
+ * // Get specific columns from all menus
580
+ * const menus = metadataUtils.getAppMenus(
581
+ * undefined,
582
+ * ['ID', 'MenuName', 'DisplayName', 'ScreenID']
583
+ * );
584
+ */
585
+ getAppMenus(filterFn, columns) {
586
+ try {
587
+ let appMenus = Common.tabJson.AppMenus || [];
588
+ // Apply filter if provided
589
+ if (filterFn) {
590
+ appMenus = appMenus.filter(filterFn);
591
+ }
592
+ return this.formatResults(appMenus, columns);
593
+ }
594
+ catch (error) {
595
+ console.error('Error in getAppMenus:', error);
596
+ return [];
597
+ }
598
+ }
599
+ /**
600
+ * Gets organization information with filter criteria
601
+ *
602
+ * @param filterFn Optional filter function to apply to organizations
603
+ * @param columns Optional columns to include in the result
604
+ * @returns Array of filtered organizations
605
+ *
606
+ * @example
607
+ * // Get all organizations
608
+ * const orgs = metadataUtils.getOrgs();
609
+ *
610
+ * // Get organizations with specific subdomain pattern
611
+ * const specificOrgs = metadataUtils.getOrgs(
612
+ * org => org.Subdomain?.includes('test')
613
+ * );
614
+ */
615
+ getOrgs(filterFn, columns) {
616
+ try {
617
+ let organizations = Common.tabJson.OrgInfos || [];
618
+ // Apply filter if provided
619
+ if (filterFn) {
620
+ organizations = organizations.filter(filterFn);
621
+ }
622
+ return this.formatResults(organizations, columns);
623
+ }
624
+ catch (error) {
625
+ console.error('Error in getOrganizations:', error);
626
+ return [];
627
+ }
628
+ }
629
+ /**
630
+ * Gets a specific organization by ID or Name
631
+ *
632
+ * @param organization ID or OrganizationName of the organization
633
+ * @param columns Optional columns to include in the result
634
+ * @returns The organization or null if not found
635
+ *
636
+ * @example
637
+ * // Get organization by ID
638
+ * const org = metadataUtils.getOrgInfoDetails('0ec3d0f1-b2ec-47b7-8305-b767d0e5ea63');
639
+ *
640
+ * // Get organization by name
641
+ * const org = metadataUtils.getOrgInfoDetails('SquadFocus');
642
+ */
643
+ getOrgInfoDetails(organization, columns) {
644
+ try {
645
+ return this.getOrgs(org => org.ID?.toLowerCase() === organization?.toLowerCase() ||
646
+ org.OrganizationName === organization ||
647
+ org.Subdomain === organization, columns)[0] || null;
648
+ }
649
+ catch (error) {
650
+ console.error('Error in getOrganization:', error);
651
+ return null;
652
+ }
653
+ }
654
+ static { this.ɵfac = function MetadataHelper_Factory(t) { return new (t || MetadataHelper)(); }; }
655
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MetadataHelper, factory: MetadataHelper.ɵfac, providedIn: 'root' }); }
656
+ }
657
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MetadataHelper, [{
658
+ type: Injectable,
659
+ args: [{ providedIn: 'root' }]
660
+ }], null, null); })();
661
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS1kYXRhLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL3NyYy9saWIvdGFiLWNvcmUtdXRpbGl0eS9hcHAvaGVscGVycy9jb21tb24vbWV0YS1kYXRhLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFXLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUloRDs7Ozs7S0FLSztBQUVMLE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLCtDQUErQztJQUN2QyxhQUFhLENBQUksS0FBVSxFQUFFLE9BQWtCO1FBQ25ELElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUksSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSSxvQkFBb0IsQ0FDdkIsVUFBa0IsRUFDbEIsV0FBa0M7UUFFbEMsSUFBSSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxF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LGdCQUFnQixLQUFLLFlBQVk7Z0JBQ3JDLEdBQUcsQ0FBQyxTQUFTLEtBQUssWUFBWSxFQUM5QixPQUFPLENBQ1YsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDOytFQXR1QlEsY0FBYzt1RUFBZCxjQUFjLFdBQWQsY0FBYyxtQkFERCxNQUFNOztpRkFDbkIsY0FBYztjQUQxQixVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBNZXRhZGF0YUVudGl0eVR5cGUsIE9yZ0luZm8gfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9zY2hlbWEuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBDb21tb24gfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL2NvbW1vblwiO1xuaW1wb3J0IHsgQXBwTWVudSwgQXBwT2JqZWN0LCBBcHBTY3JlZW4gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2FwcC1vYmplY3QuY2xhc3NcIjtcbmltcG9ydCB7IEFwcEZpZWxkcywgRGF0YVNvdXJjZVF1ZXJpZXMsIERhdGFTb3VyY2VRdWVyaWVzX0ZpZWxkcywgUGFyYW1ldGVycyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvZGF0YS1zb3VyY2UtcXVlcmllcy5jbGFzc1wiO1xuXG4vKipcbiAgICogTWV0YWRhdGFVdGlscyAtIFV0aWxpdHkgc2VydmljZSBmb3IgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGFwcGxpY2F0aW9uIG1ldGFkYXRhXG4gICAqIFxuICAgKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgbWV0aG9kcyB0byBleHRyYWN0LCBmaWx0ZXIsIGFuZCBmb3JtYXQgZGlmZmVyZW50IHBhcnRzIG9mIHRoZVxuICAgKiBhcHBsaWNhdGlvbiBtZXRhZGF0YSwgaW5jbHVkaW5nIG9iamVjdHMsIGZpZWxkcywgc2NyZWVucywgbWVudXMsIGV0Yy5cbiAgICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhSGVscGVyIHtcbiAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNvbnNpc3RlbnRseSBmb3JtYXQgcmVzdWx0c1xuICAgIHByaXZhdGUgZm9ybWF0UmVzdWx0czxUPihpdGVtczogVFtdLCBjb2x1bW5zPzogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgICAgIGlmICghY29sdW1ucyB8fCBjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHRbY29sXSA9IChpdGVtIGFzIGFueSlbY29sXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGFjcm9zcyBhbGwgbWV0YWRhdGEgZm9yIGEgdGVybVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzZWFyY2hUZXJtIFRlcm0gdG8gc2VhcmNoIGZvclxuICAgICAqIEBwYXJhbSBlbnRpdHlUeXBlcyBPcHRpb25hbCB0eXBlcyBvZiBlbnRpdGllcyB0byBzZWFyY2ggKGlmIG5vdCBwcm92aWRlZCwgc2VhcmNoZXMgYWxsKVxuICAgICAqIEByZXR1cm5zIFNlYXJjaCByZXN1bHRzIGdyb3VwZWQgYnkgZW50aXR5IHR5cGVcbiAgICAgKiBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNlYXJjaCBhY3Jvc3MgYWxsIG1ldGFkYXRhXG4gICAgICogY29uc3QgcmVzdWx0cyA9IG1ldGFkYXRhVXRpbHMuc2VhcmNoQWNyb3NzTWV0YWRhdGEoJ0JsdWVwcmludCcpO1xuICAgICAqIFxuICAgICAqIC8vIFNlYXJjaCBvbmx5IGluIGFwcCBvYmplY3RzIGFuZCBzY3JlZW5zXG4gICAgICogY29uc3QgcmVzdWx0cyA9IG1ldGFkYXRhVXRpbHMuc2VhcmNoQWNyb3NzTWV0YWRhdGEoXG4gICAgICogICAnUm9sZScsIFxuICAgICAqICAgW01ldGFkYXRhRW50aXR5VHlwZS5BUFBfT0JKRUNUUywgTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9TQ1JFRU5TXVxuICAgICAqICk7XG4gICAgICovXG4gICAgcHVibGljIHNlYXJjaEFjcm9zc01ldGFkYXRhKFxuICAgICAgICBzZWFyY2hUZXJtOiBzdHJpbmcsXG4gICAgICAgIGVudGl0eVR5cGVzPzogTWV0YWRhdGFFbnRpdHlUeXBlW11cbiAgICApOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFzZWFyY2hUZXJtIHx8IHNlYXJjaFRlcm0udHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVybSA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xuXG4gICAgICAgICAgICAvLyBJZiBlbnRpdHlUeXBlcyBub3QgcHJvdmlkZWQsIHNlYXJjaCBhbGwgZW50aXR5IHR5cGVzXG4gICAgICAgICAgICBjb25zdCB0eXBlc1RvU2VhcmNoID0gZW50aXR5VHlwZXMgfHwgT2JqZWN0LnZhbHVlcyhNZXRhZGF0YUVudGl0eVR5cGUpO1xuXG4gICAgICAgICAgICAvLyBFeGVjdXRlIHNlYXJjaCBmb3IgZWFjaCBlbnRpdHkgdHlwZVxuICAgICAgICAgICAgaWYgKHR5cGVzVG9TZWFyY2guaW5jbHVkZXMoTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9PQkpFQ1RTKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9PQkpFQ1RTXSA9IHRoaXMuc2VhcmNoQXBwT2JqZWN0cyh0ZXJtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVzVG9TZWFyY2guaW5jbHVkZXMoTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9GSUVMRFMpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1tNZXRhZGF0YUVudGl0eVR5cGUuQVBQX0ZJRUxEU10gPSB0aGlzLnNlYXJjaEFwcEZpZWxkcyh0ZXJtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVzVG9TZWFyY2guaW5jbHVkZXMoTWV0YWRhdGFFbnRpdHlUeXBlLkRBVEFfU09VUkNFX1FVRVJJRVMpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1tNZXRhZGF0YUVudGl0eVR5cGUuREFUQV9TT1VSQ0VfUVVFUklFU10gPSB0aGlzLnNlYXJjaERhdGFTb3VyY2VRdWVyaWVzKHRlcm0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZXNUb1NlYXJjaC5pbmNsdWRlcyhNZXRhZGF0YUVudGl0eVR5cGUuQVBQX1NDUkVFTlMpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1tNZXRhZGF0YUVudGl0eVR5cGUuQVBQX1NDUkVFTlNdID0gdGhpcy5zZWFyY2hBcHBTY3JlZW5zKHRlcm0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZXNUb1NlYXJjaC5pbmNsdWRlcyhNZXRhZGF0YUVudGl0eVR5cGUuQVBQX01FTlVTKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbTWV0YWRhdGFFbnRpdHlUeXBlLkFQUF9NRU5VU10gPSB0aGlzLnNlYXJjaEFwcE1lbnVzKHRlcm0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHNlYXJjaE1ldGFkYXRhOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgYSB0ZXJtIHdpdGhpbiBBcHAgT2JqZWN0c1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWFyY2hBcHBPYmplY3RzKHRlcm06IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwT2JqZWN0cyhvYmogPT5cbiAgICAgICAgICAgIHRoaXMuY29udGFpbnNUZXJtKG9iai5PYmplY3ROYW1lLCB0ZXJtKSB8fFxuICAgICAgICAgICAgdGhpcy5jb250YWluc1Rlcm0ob2JqLkRpc3BsYXlOYW1lLCB0ZXJtKSB8fFxuICAgICAgICAgICAgdGhpcy5jb250YWluc1Rlcm0ob2JqLkRlc2NyaXB0aW9uLCB0ZXJtKSB8fFxuICAgICAgICAgICAgdGhpcy5jb250YWluc1Rlcm0ob2JqLlN5c3RlbURCVGFibGVOYW1lLCB0ZXJtKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgYSB0ZXJtIHdpdGhpbiBBcHAgRmllbGRzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNlYXJjaEFwcEZpZWxkcyh0ZXJtOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcEZpZWxkcyhmaWVsZCA9PlxuICAgICAgICAgICAgdGhpcy5jb250YWluc1Rlcm0oZmllbGQuRmllbGROYW1lLCB0ZXJtKSB8fFxuICAgICAgICAgICAgdGhpcy5jb250YWluc1Rlcm0oZmllbGQuRGlzcGxheU5hbWUsIHRlcm0pIHx8XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5zVGVybShmaWVsZC5EZXNjcmlwdGlvbiwgdGVybSkgfHxcbiAgICAgICAgICAgIHRoaXMuY29udGFpbnNUZXJtKGZpZWxkLlN5c3RlbURCRmllbGROYW1lLCB0ZXJtKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgYSB0ZXJtIHdpdGhpbiBEYXRhIFNvdXJjZSBRdWVyaWVzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNlYXJjaERhdGFTb3VyY2VRdWVyaWVzKHRlcm06IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVNvdXJjZVF1ZXJpZXMocXVlcnkgPT5cbiAgICAgICAgICAgIHRoaXMuY29udGFpbnNUZXJtKHF1ZXJ5LlF1ZXJ5TmFtZSwgdGVybSkgfHxcbiAgICAgICAgICAgIHRoaXMuY29udGFpbnNUZXJtKHF1ZXJ5LkRpc3BsYXlOYW1lLCB0ZXJtKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgYSB0ZXJtIHdpdGhpbiBBcHAgU2NyZWVuc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWFyY2hBcHBTY3JlZW5zKHRlcm06IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwU2NyZWVucyhzY3JlZW4gPT5cbiAgICAgICAgICAgIHRoaXMuY29udGFpbnNUZXJtKHNjcmVlbi5OYW1lLCB0ZXJtKSB8fFxuICAgICAgICAgICAgdGhpcy5jb250YWluc1Rlcm0oc2NyZWVuLkRlc2NyaXB0aW9uLCB0ZXJtKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmb3IgYSB0ZXJtIHdpdGhpbiBBcHAgTWVudXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2VhcmNoQXBwTWVudXModGVybTogc3RyaW5nKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBNZW51cyhtZW51ID0+XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5zVGVybShtZW51Lk1lbnVOYW1lLCB0ZXJtKSB8fFxuICAgICAgICAgICAgdGhpcy5jb250YWluc1Rlcm0obWVudS5EaXNwbGF5TmFtZSwgdGVybSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGlmIGEgc3RyaW5nIGNvbnRhaW5zIGEgc2VhcmNoIHRlcm1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY29udGFpbnNUZXJtKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCB0ZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIEFwcCBPYmplY3RzIGJhc2VkIG9uIGZpbHRlciBjcml0ZXJpYVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBmaWx0ZXJGbiBPcHRpb25hbCBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gYXBwIG9iamVjdHNcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBPcHRpb25hbCBjb2x1bW5zIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3VsdFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGZpbHRlcmVkIGFwcCBvYmplY3RzXG4gICAgICogXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHZXQgYWxsIHN5c3RlbSBhcHAgb2JqZWN0c1xuICAgICAqIGNvbnN0IHN5c3RlbU9iamVjdHMgPSBtZXRhZGF0YVV0aWxzLmdldEFwcE9iamVjdHMob2JqID0+IG9iai5Jc1N5c3RlbSA9PT0gdHJ1ZSk7XG4gICAgICogXG4gICAgICogLy8gR2V0IHNwZWNpZmljIGNvbHVtbnMgZnJvbSBub24tZGVwcmVjYXRlZCBvYmplY3RzXG4gICAgICogY29uc3Qgb2JqZWN0cyA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwT2JqZWN0cyhcbiAgICAgKiAgIG9iaiA9PiAhb2JqLklzRGVwcmVjYXRlZCwgXG4gICAgICogICBbJ0lEJywgJ0Rpc3BsYXlOYW1lJywgJ09iamVjdE5hbWUnXVxuICAgICAqICk7XG4gICAgICovXG4gICAgcHVibGljIGdldEFwcE9iamVjdHMoZmlsdGVyRm4/OiAoKHZhbHVlOiBBcHBPYmplY3QpID0+IGJvb2xlYW4pLCBjb2x1bW5zPzogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYXBwT2JqZWN0cyA9IENvbW1vbi50YWJKc29uLkFwcE9iamVjdHMgfHwgW107XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBpZiBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKGZpbHRlckZuKSB7XG4gICAgICAgICAgICAgICAgYXBwT2JqZWN0cyA9IGFwcE9iamVjdHMuZmlsdGVyKGZpbHRlckZuKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAvLyBSZXR1cm4gYWxsIG9iamVjdCBkYXRhIGlmIG5vIGNvbHVtbnMgc3BlY2lmaWVkXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRSZXN1bHRzKGFwcE9iamVjdHMsIGNvbHVtbnMpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBnZXRBcHBPYmplY3RzOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzcGVjaWZpYyBBcHAgT2JqZWN0IGJ5IElEIG9yIE5hbWVcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gYXBwT2JqZWN0IElEIG9yIE5hbWUgb2YgdGhlIGFwcCBvYmplY3QgdG8gcmV0cmlldmVcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBPcHRpb25hbCBjb2x1bW5zIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3VsdFxuICAgICAqIEByZXR1cm5zIFRoZSBhcHAgb2JqZWN0IHdpdGggc3BlY2lmaWVkIGNvbHVtbnMgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKiBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEdldCBhIHNwZWNpZmljIGFwcCBvYmplY3Qgd2l0aCBhbGwgcHJvcGVydGllc1xuICAgICAqIGNvbnN0IGFwcE9iaiA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwT2JqZWN0RGV0YWlscygnYjQ4ODdkNGQtYmIxZS00ZDUyLWE3ZTgtMmY5NDNkNjllNDRjJyBvciAnVEFCTURfU1lTVEVNJyk7XG4gICAgICogXG4gICAgICogLy8gR2V0IHNwZWNpZmljIGNvbHVtbnMgZnJvbSBhbiBhcHAgb2JqZWN0XG4gICAgICogY29uc3QgYXBwT2JqID0gbWV0YWRhdGFVdGlscy5nZXRBcHBPYmplY3REZXRhaWxzKFxuICAgICAqICAgJ2I0ODg3ZDRkLWJiMWUtNGQ1Mi1hN2U4LTJmOTQzZDY5ZTQ0YycsIFxuICAgICAqICAgWydJRCcsICdEaXNwbGF5TmFtZScsICdPYmplY3ROYW1lJ11cbiAgICAgKiApO1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBcHBPYmplY3REZXRhaWxzKGFwcE9iamVjdDogc3RyaW5nLCBjb2x1bW5zPzogc3RyaW5nW10pOiBhbnkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwT2JqZWN0cyhvYmogPT4gb2JqLklEPy50b0xvd2VyQ2FzZSgpID09PSBhcHBPYmplY3Q/LnRvTG93ZXJDYXNlKCkgfHwgb2JqLk9iamVjdE5hbWUgPT09IGFwcE9iamVjdCwgY29sdW1ucyk/LlswXSA/PyBudWxsO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBnZXRBcHBPYmplY3RCeUlkOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgZmllbGRzIGFjcm9zcyBhbGwgYXBwIG9iamVjdHMgd2l0aCBmaWx0ZXIgY3JpdGVyaWFcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gZmlsdGVyRm4gT3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGZpZWxkc1xuICAgICAqIEBwYXJhbSBjb2x1bW5zIE9wdGlvbmFsIGNvbHVtbnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0XG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgZmlsdGVyZWQgZmllbGRzXG4gICAgICogXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHZXQgYWxsIHJlcXVpcmVkIGZpZWxkcyBhY3Jvc3MgYWxsIG9iamVjdHNcbiAgICAgKiBjb25zdCByZXF1aXJlZEZpZWxkcyA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwRmllbGRzKGZpZWxkID0+IGZpZWxkLklzUmVxdWlyZWQgPT09IHRydWUpO1xuICAgICAqIFxuICAgICAqIC8vIEdldCBzcGVjaWZpYyBjb2x1bW5zIGZyb20gc2VhcmNoYWJsZSBmaWVsZHNcbiAgICAgKiBjb25zdCBmaWVsZHMgPSBtZXRhZGF0YVV0aWxzLmdldEFwcEZpZWxkcyhcbiAgICAgKiAgIGZpZWxkID0+IGZpZWxkLklzU2VhcmNoYWJsZSA9PT0gdHJ1ZSwgXG4gICAgICogICBbJ0lEJywgJ0Rpc3BsYXlOYW1lJywgJ0ZpZWxkTmFtZSddXG4gICAgICogKTtcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXBwRmllbGRzKGZpbHRlckZuPzogKCh2YWx1ZTogQXBwRmllbGRzKSA9PiBib29sZWFuKSwgY29sdW1ucz86IHN0cmluZ1tdKTogYW55W10ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gR2V0IGFsbCBmaWVsZHMgZnJvbSBhbGwgYXBwIG9iamVjdHNcbiAgICAgICAgICAgIGNvbnN0IGFsbEZpZWxkczogQXBwRmllbGRzW10gPSBbXTtcbiAgICAgICAgICAgIENvbW1vbi50YWJKc29uLkFwcE9iamVjdHMuZm9yRWFjaCgob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBhbGxGaWVsZHMucHVzaCguLi5vYmouRmllbGRzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZEZpZWxkcyA9IGFsbEZpZWxkcztcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGbikge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkRmllbGRzID0gYWxsRmllbGRzLmZpbHRlcihmaWx0ZXJGbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJldHVybiBhbGwgZmllbGQgZGF0YSBpZiBubyBjb2x1bW5zIHNwZWNpZmllZFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0UmVzdWx0cyhmaWx0ZXJlZEZpZWxkcywgY29sdW1ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBnZXRBcHBGaWVsZHM6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWVsZHMgZm9yIGEgc3BlY2lmaWMgYXBwIG9iamVjdFxuICAgICAqIFxuICAgICAqIEBwYXJhbSBhcHBPYmplY3QgSUQgb3IgTmFtZSBvZiB0aGUgYXBwIG9iamVjdFxuICAgICAqIEBwYXJhbSBmaWx0ZXJGbiBPcHRpb25hbCBmaWx0ZXIgZnVuY3Rpb24gZm9yIGZpZWxkc1xuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGZpZWxkcyBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3RcbiAgICAgKiBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEdldCBhbGwgZmllbGRzIGZvciBhbiBvYmplY3RcbiAgICAgKiBjb25zdCBmaWVsZHMgPSBtZXRhZGF0YVV0aWxzLmdldEFwcEZpZWxkc0J5QXBwT2JqZWN0KCdiNDg4N2Q0ZC1iYjFlLTRkNTItYTdlOC0yZjk0M2Q2OWU0NGMnIG9yICdUQUJNRF9TWVNURU0nKTtcbiAgICAgKiBcbiAgICAgKiAvLyBHZXQgb25seSByZXF1aXJlZCBmaWVsZHNcbiAgICAgKiBjb25zdCByZXF1aXJlZEZpZWxkcyA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwRmllbGRzQnlBcHBPYmplY3QoXG4gICAgICogICAnYjQ4ODdkNGQtYmIxZS00ZDUyLWE3ZTgtMmY5NDNkNjllNDRjJyxcbiAgICAgKiAgIGZpZWxkID0+IGZpZWxkLklzUmVxdWlyZWQgPT09IHRydWVcbiAgICAgKiApO1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBcHBGaWVsZHNCeUFwcE9iamVjdChcbiAgICAgICAgYXBwT2JqZWN0OiBzdHJpbmcsXG4gICAgICAgIGZpbHRlckZuPzogKCh2YWx1ZTogQXBwRmllbGRzLCBpbmRleDogbnVtYmVyLCBhcnJheTogQXBwRmllbGRzW10pID0+IGJvb2xlYW4pLFxuICAgICAgICBjb2x1bW5zPzogc3RyaW5nW11cbiAgICApOiBhbnlbXSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFwcE9iamVjdDogYW55ID0gdGhpcy5nZXRBcHBPYmplY3REZXRhaWxzKGFwcE9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIWZpbHRlcmVkQXBwT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZmllbGRzID0gZmlsdGVyZWRBcHBPYmplY3QuRmllbGRzIHx8IFtdO1xuXG4gICAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGbikge1xuICAgICAgICAgICAgICAgIGZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoZmlsdGVyRm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRSZXN1bHRzKGZpZWxkcywgY29sdW1ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBnZXRBcHBGaWVsZEJ5SWQ6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBHZXRzIGxvb2t1cCBmaWVsZHMgZm9yIGEgc3BlY2lmaWMgYXBwIG9iamVjdFxuICAgICogXG4gICAgKiBAcGFyYW0gYXBwT2JqZWN0IElEIG9yIE5hbWUgb2YgdGhlIGFwcCBvYmplY3RcbiAgICAqIEBwYXJhbSBmaWx0ZXJGbiBPcHRpb25hbCBmaWx0ZXIgZnVuY3Rpb24gZm9yIGxvb2t1cCBmaWVsZHNcbiAgICAqIEBwYXJhbSBjb2x1bW5zIE9wdGlvbmFsIGNvbHVtbnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0XG4gICAgKiBAcmV0dXJucyBBcnJheSBvZiBsb29rdXAgZmllbGRzIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdFxuICAgICogXG4gICAgKiBAZXhhbXBsZVxuICAgICogLy8gR2V0IGFsbCBsb29rdXAgZmllbGRzIGZvciBhbiBvYmplY3RcbiAgICAqIGNvbnN0IGxvb2t1cEZpZWxkcyA9IG1ldGFkYXRhVXRpbHMuZ2V0TG9va3VwRmllbGRzQnlBcHBPYmplY3QoJ1RBQkRfQmx1ZXByaW50X1NMQVNjaGVtZXMnKTtcbiAgICAqIFxuICAgICogLy8gR2V0IHNwZWNpZmljIGxvb2t1cCBmaWVsZHNcbiAgICAqIGNvbnN0IGZpZWxkcyA9IG1ldGFkYXRhVXRpbHMuZ2V0TG9va3VwRmllbGRzQnlBcHBPYmplY3QoXG4gICAgKiAgICdiNDg4N2Q0ZC1iYjFlLTRkNTItYTdlOC0yZjk0M2Q2OWU0NGMnLFxuICAgICogICBmaWVsZCA9PiBmaWVsZC5Jc1JlcXVpcmVkID09PSB0cnVlXG4gICAgKiApO1xuICAgICovXG4gICAgcHVibGljIGdldExvb2t1cEZpZWxkc0J5QXBwT2JqZWN0KFxuICAgICAgICBhcHBPYmplY3Q6IHN0cmluZyxcbiAgICAgICAgZmlsdGVyRm4/OiAoKHZhbHVlOiBBcHBGaWVsZHMpID0+IGJvb2xlYW4pLFxuICAgICAgICBjb2x1bW5zPzogc3RyaW5nW11cbiAgICApOiBhbnlbXSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBHZXQgZmllbGRzIGZvciB0aGUgc3BlY2lmaWVkIG9iamVjdCB0aGF0IGFyZSBsb29rdXBzXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBGaWVsZHNCeUFwcE9iamVjdChcbiAgICAgICAgICAgICAgICBhcHBPYmplY3QsXG4gICAgICAgICAgICAgICAgZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmllbGQgaXMgYSBsb29rdXAgdHlwZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0xvb2t1cCA9IGZpZWxkLkxvb2tVcERldGFpbHMgIT0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSBhZGRpdGlvbmFsIHVzZXIgZmlsdGVyIGlmIHByb3ZpZGVkXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0xvb2t1cCAmJiAoIWZpbHRlckZuIHx8IGZpbHRlckZuKGZpZWxkKSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZ2V0QXBwT2JqZWN0TG9va3VwRmllbGRzOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgZGF0YSBzb3VyY2UgcXVlcmllcyB3aXRoIGZpbHRlciBjcml0ZXJpYVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBmaWx0ZXJGbiBPcHRpb25hbCBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gcXVlcmllc1xuICAgICAqIEBwYXJhbSBjb2x1bW5zIE9wdGlvbmFsIGNvbHVtbnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0XG4gICAgICogQHJldHVybnMgQXJyYXkgb2YgZmlsdGVyZWQgZGF0YSBzb3VyY2UgcXVlcmllc1xuICAgICAqIFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gR2V0IGFsbCBxdWVyaWVzIHdpdGggYSBzcGVjaWZpYyBuYW1pbmcgcGF0dGVyblxuICAgICAqIGNvbnN0IHF1ZXJpZXMgPSBtZXRhZGF0YVV0aWxzLmdldERhdGFTb3VyY2VRdWVyaWVzKHF1ZXJ5ID0+IHF1ZXJ5LlF1ZXJ5TmFtZS5pbmNsdWRlcygnTGlzdCcpKTtcbiAgICAgKiBcbiAgICAgKiAvLyBHZXQgc3BlY2lmaWMgY29sdW1ucyBmcm9tIGFsbCBxdWVyaWVzXG4gICAgICogY29uc3QgcXVlcmllcyA9IG1ldGFkYXRhVXRpbHMuZ2V0RGF0YVNvdXJjZVF1ZXJpZXMoXG4gICAgICogICB1bmRlZmluZWQsIFxuICAgICAqICAgWydJRCcsICdRdWVyeU5hbWUnLCAnRGlzcGxheU5hbWUnXVxuICAgICAqICk7XG4gICAgICovXG4gICAgcHVibGljIGdldERhdGFTb3VyY2VRdWVyaWVzKGZpbHRlckZuPzogKCh2YWx1ZTogRGF0YVNvdXJjZVF1ZXJpZXMpID0+IGJvb2xlYW4pLCBjb2x1bW5zPzogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBHZXQgYWxsIGRhdGEgc291cmNlIHF1ZXJpZXMgZnJvbSBhbGwgYXBwIG9iamVjdHNcbiAgICAgICAgICAgIGNvbnN0IGFsbFF1ZXJpZXM6IERhdGFTb3VyY2VRdWVyaWVzW10gPSBbXTtcbiAgICAgICAgICAgIENvbW1vbi50YWJKc29uLkFwcE9iamVjdHMuZm9yRWFjaCgob2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLkRhdGFTb3VyY2VRdWVyaWVzICYmIG9iai5EYXRhU291cmNlUXVlcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbFF1ZXJpZXMucHVzaCguLi5vYmouRGF0YVNvdXJjZVF1ZXJpZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICAgIGxldCBmaWx0ZXJlZFF1ZXJpZXMgPSBhbGxRdWVyaWVzO1xuICAgICAgICAgICAgaWYgKGZpbHRlckZuKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyZWRRdWVyaWVzID0gYWxsUXVlcmllcy5maWx0ZXIoZmlsdGVyRm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRSZXN1bHRzKGZpbHRlcmVkUXVlcmllcywgY29sdW1ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBnZXREYXRhU291cmNlUXVlcmllczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGRhdGEgc291cmNlIHF1ZXJpZXMgZm9yIGEgc3BlY2lmaWMgYXBwIG9iamVjdFxuICAgICAqIFxuICAgICAqIEBwYXJhbSBhcHBPYmplY3QgSUQgb3IgTmFtZSBvZiB0aGUgYXBwIG9iamVjdFxuICAgICAqIEBwYXJhbSBmaWx0ZXJGbiBPcHRpb25hbCBmaWx0ZXIgZnVuY3Rpb24gZm9yIHF1ZXJpZXNcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBPcHRpb25hbCBjb2x1bW5zIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3VsdFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHF1ZXJpZXMgZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0XG4gICAgICogXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHZXQgYWxsIHF1ZXJpZXMgZm9yIGFuIG9iamVjdFxuICAgICAqIGNvbnN0IHF1ZXJpZXMgPSBtZXRhZGF0YVV0aWxzLmdldERhdGFTb3VyY2VRdWVyaWVzQnlBcHBPYmplY3QoJ2I0ODg3ZDRkLWJiMWUtNGQ1Mi1hN2U4LTJmOTQzZDY5ZTQ0YycpO1xuICAgICAqIFxuICAgICAqIC8vIEdldCBxdWVyaWVzIHdpdGggc3BlY2lmaWMgcGF0dGVyblxuICAgICAqIGNvbnN0IGZpbHRlcmVkUXVlcmllcyA9IG1ldGFkYXRhVXRpbHMuZ2V0RGF0YVNvdXJjZVF1ZXJpZXNCeUFwcE9iamVjdChcbiAgICAgKiAgICdUQUJEX0JsdWVwcmludF9TTEFTY2hlbWVzJyxcbiAgICAgKiAgIHF1ZXJ5ID0+IHF1ZXJ5LlF1ZXJ5TmFtZS5pbmNsdWRlcygnTGlzdCcpXG4gICAgICogKTtcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGF0YVNvdXJjZVF1ZXJpZXNCeUFwcE9iamVjdChcbiAgICAgICAgYXBwT2JqZWN0OiBzdHJpbmcsXG4gICAgICAgIGZpbHRlckZuPzogKCh2YWx1ZTogRGF0YVNvdXJjZVF1ZXJpZXMpID0+IGJvb2xlYW4pLFxuICAgICAgICBjb2x1bW5zPzogc3RyaW5nW11cbiAgICApOiBhbnlbXSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFwcE9iamVjdDogYW55ID0gdGhpcy5nZXRBcHBPYmplY3REZXRhaWxzKGFwcE9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIWZpbHRlcmVkQXBwT2JqZWN0IHx8ICFmaWx0ZXJlZEFwcE9iamVjdC5EYXRhU291cmNlUXVlcmllcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHF1ZXJpZXMgPSBmaWx0ZXJlZEFwcE9iamVjdC5EYXRhU291cmNlUXVlcmllcztcblxuICAgICAgICAgICAgLy8gQXBwbHkgZmlsdGVyIGlmIHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAoZmlsdGVyRm4pIHtcbiAgICAgICAgICAgICAgICBxdWVyaWVzID0gcXVlcmllcy5maWx0ZXIoZmlsdGVyRm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRSZXN1bHRzKHF1ZXJpZXMsIGNvbHVtbnMpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZ2V0QXBwT2JqZWN0UXVlcmllczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgc3BlY2lmaWMgRGF0YSBTb3VyY2UgUXVlcnkgYnkgSUQgb3IgTmFtZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBxdWVyeSBJRCBvciBOYW1lIG9mIHRoZSBkYXRhIHNvdXJjZSBxdWVyeSB0byByZXRyaWV2ZVxuICAgICAqIEBwYXJhbSBjb2x1bW5zIE9wdGlvbmFsIGNvbHVtbnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0XG4gICAgICogQHJldHVybnMgVGhlIGRhdGEgc291cmNlIHF1ZXJ5IHdpdGggc3BlY2lmaWVkIGNvbHVtbnMgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKiBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEdldCBhIHNwZWNpZmljIHF1ZXJ5IHdpdGggYWxsIHByb3BlcnRpZXNcbiAgICAgKiBjb25zdCBxdWVyeSA9IG1ldGFkYXRhVXRpbHMuZ2V0RGF0YVNvdXJjZVF1ZXJ5RGV0YWlscygnNzNlNTkwZDAtYzRlYi00NjRkLWFiZjktMDE5NDNlMzBhZTA5Jyk7XG4gICAgICogXG4gICAgICogLy8gR2V0IHNwZWNpZmljIGNvbHVtbnMgZnJvbSBhIHF1ZXJ5IGJ5IG5hbWVcbiAgICAgKiBjb25zdCBxdWVyeSA9IG1ldGFkYXRhVXRpbHMuZ2V0RGF0YVNvdXJjZVF1ZXJ5RGV0YWlscyhcbiAgICAgKiAgICdHZXRfU0xBU2NoZW1lc19MaXN0JyxcbiAgICAgKiAgIFsnSUQnLCAnUXVlcnlOYW1lJywgJ0Rpc3BsYXlOYW1lJ11cbiAgICAgKiApO1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXREYXRhU291cmNlUXVlcnlEZXRhaWxzKHF1ZXJ5OiBzdHJpbmcsIGNvbHVtbnM/OiBzdHJpbmdbXSk6IGFueSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhU291cmNlUXVlcmllcyhxID0+XG4gICAgICAgICAgICAgICAgcS5JRD8udG9Mb3dlckNhc2UoKSA9PT0gcXVlcnk/LnRvTG93ZXJDYXNlKCkgfHwgcS5RdWVyeU5hbWUgPT09IHF1ZXJ5LFxuICAgICAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICk/LlswXSA/PyBudWxsO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZ2V0RGF0YVNvdXJjZVF1ZXJ5OicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWVsZHMgZnJvbSBhIGRhdGEgc291cmNlIHF1ZXJ5XG4gICAgICogXG4gICAgICogQHBhcmFtIHF1ZXJ5IElEIG9yIE5hbWUgb2YgdGhlIGRhdGEgc291cmNlIHF1ZXJ5XG4gICAgICogQHBhcmFtIGZpbHRlckZuIE9wdGlvbmFsIGZpbHRlciBmdW5jdGlvbiBmb3IgcXVlcnkgZmllbGRzXG4gICAgICogQHBhcmFtIGNvbHVtbnMgT3B0aW9uYWwgY29sdW1ucyB0byBpbmNsdWRlIGluIHRoZSByZXN1bHRcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBmaWVsZHMgZm9yIHRoZSBzcGVjaWZpZWQgcXVlcnkgd2l0aCBhcHAgZmllbGQgZGV0YWlsc1xuICAgICAqIFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gR2V0IGFsbCBmaWVsZHMgZm9yIGEgcXVlcnlcbiAgICAgKiBjb25zdCBxdWVyeUZpZWxkcyA9IG1ldGFkYXRhVXRpbHMuZ2V0RGF0YVNvdXJjZVF1ZXJ5RmllbGRzKCc3M2U1OTBkMC1jNGViLTQ2NGQtYWJmOS0wMTk0M2UzMGFlMDknKTtcbiAgICAgKiBcbiAgICAgKiAvLyBHZXQgZmllbGRzIGZvciBhIHF1ZXJ5IGJ5IG5hbWVcbiAgICAgKiBjb25zdCBxdWVyeUZpZWxkcyA9IG1ldGFkYXRhVXRpbHMuZ2V0RGF0YVNvdXJjZVF1ZXJ5RmllbGRzKCdHZXRfU0xBU2NoZW1lc19MaXN0Jyk7XG4gICAgICogXG4gICAgICogLy8gR2V0IGZpZWxkcyB3aXRoIGZpbHRlciBhbmQgc3BlY2lmaWMgY29sdW1uc1xuICAgICAqIGNvbnN0IGZpZWxkcyA9IG1ldGFkYXRhVXRpbHMuZ2V0RGF0YVNvdXJjZVF1ZXJ5RmllbGRzKFxuICAgICAqICAgJzczZTU5MGQwLWM0ZWItNDY0ZC1hYmY5LTAxOTQzZTMwYWUwOScsXG4gICAgICogICBmaWVsZCA9PiBmaWVsZC5GaWVsZFR5cGUgPT09IDEsXG4gICAgICogICBbJ0lEJywgJ0FwcEZpZWxkSUQnLCAnRmllbGRUeXBlJ11cbiAgICAgKiApO1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGaWVsZHNCeURTUShcbiAgICAgICAgcXVlcnk6IHN0cmluZyxcbiAgICAgICAgZmlsdGVyRm4/OiAoKHZhbHVlOiBEYXRhU291cmNlUXVlcmllc19GaWVsZHMpID0+IGJvb2xlYW4pLFxuICAgICAgICBjb2x1bW5zPzogc3RyaW5nW11cbiAgICApOiBhbnlbXSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBxdWVyeSB1c2luZyBvdXIgZXhpc3RpbmcgbWV0aG9kXG4gICAgICAgICAgICBjb25zdCBkc1F1ZXJ5ID0gdGhpcy5nZXREYXRhU291cmNlUXVlcnlEZXRhaWxzKHF1ZXJ5KTtcbiAgICAgICAgICAgIGlmICghZHNRdWVyeSB8fCAhZHNRdWVyeS5GaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IGVuaGFuY2VkIGZpZWxkcyB3aXRoIGFwcCBmaWVsZCBkZXRhaWxzXG4gICAgICAgICAgICBsZXQgcXVlcnlGaWVsZHMgPSB0aGlzLmVuaGFuY2VRdWVyeUZpZWxkc1dpdGhBcHBGaWVsZHMoZHNRdWVyeSk7XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBpZiBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKGZpbHRlckZuKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlGaWVsZHMgPSBxdWVyeUZpZWxkcy5maWx0ZXIoZmlsdGVyRm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRSZXN1bHRzKHF1ZXJ5RmllbGRzLCBjb2x1bW5zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGdldERhdGFTb3VyY2VRdWVyeUZpZWxkczonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmhhbmNlcyBxdWVyeSBmaWVsZHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIGFwcCBmaWVsZCBkZXRhaWxzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGVuaGFuY2VRdWVyeUZpZWxkc1dpdGhBcHBGaWVsZHMoZHNRdWVyeTogRGF0YVNvdXJjZVF1ZXJpZXMpOiBhbnlbXSB7XG4gICAgICAgIGlmICghZHNRdWVyeSB8fCAhZHNRdWVyeS5GaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluZCB0aGUgcGFyZW50IGFwcCBvYmplY3RcbiAgICAgICAgY29uc3QgcGFyZW50QXBwT2JqZWN0ID0gdGhpcy5maW5kUGFyZW50QXBwT2JqZWN0Rm9yUXVlcnkoZHNRdWVyeSk7XG4gICAgICAgIGlmICghcGFyZW50QXBwT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZHNRdWVyeS5GaWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgYXBwIGZpZWxkIGRldGFpbHMgdG8gZWFjaCBxdWVyeSBmaWVsZFxuICAgICAgICByZXR1cm4gZHNRdWVyeS5GaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcHBGaWVsZCA9IHRoaXMuZmluZEFwcEZpZWxkQnlJZChwYXJlbnRBcHBPYmplY3QsIGZpZWxkLkFwcEZpZWxkSUQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICAgICAgICBGaWVsZDogYXBwRmllbGQgfHwge31cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBwYXJlbnQgYXBwIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgc3BlY2lmaWMgZGF0YSBzb3VyY2UgcXVlcnlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZFBhcmVudEFwcE9iamVjdEZvclF1ZXJ5KGRzUXVlcnk6IERhdGFTb3VyY2VRdWVyaWVzKTogQXBwT2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwT2JqZWN0cyhvYmogPT5cbiAgICAgICAgICAgIG9iai5EYXRhU291cmNlUXVlcmllcz8uc29tZSgocTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHEuSUQ/LnRvTG93ZXJDYXNlKCkgPT09IGRzUXVlcnkuSUQ/LnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICBxLlF1ZXJ5TmFtZSA9PT0gZHNRdWVyeS5RdWVyeU5hbWVcbiAgICAgICAgICAgIClcbiAgICAgICAgKVswXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhbiBhcHAgZmllbGQgYnkgSUQgd2l0aGluIGEgc3BlY2lmaWMgYXBwIG9iamVjdFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kQXBwRmllbGRCeUlkKGFwcE9iamVjdDogQXBwT2JqZWN0LCBmaWVsZElkOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoIWFwcE9iamVjdCB8fCAhYXBwT2JqZWN0LkZpZWxkcz8ubGVuZ3RoIHx8ICFmaWVsZElkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFwcE9iamVjdC5GaWVsZHMuZmluZChcbiAgICAgICAgICAgIChmaWVsZDogYW55KSA9PiBmaWVsZC5JRD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGRJZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgcXVlcnkgcGFyYW1ldGVycyBmcm9tIGEgZGF0YSBzb3VyY2UgcXVlcnlcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gcXVlcnkgSUQgb3IgTmFtZSBvZiB0aGUgZGF0YSBzb3VyY2UgcXVlcnlcbiAgICAgKiBAcGFyYW0gZmlsdGVyRm4gT3B0aW9uYWwgZmlsdGVyIGZ1bmN0aW9uIGZvciBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIGNvbHVtbnMgT3B0aW9uYWwgY29sdW1ucyB0byBpbmNsdWRlIGluIHRoZSByZXN1bHRcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBwYXJhbWV0ZXJzIGZvciB0aGUgc3BlY2lmaWVkIHF1ZXJ5XG4gICAgICogXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHZXQgYWxsIHBhcmFtZXRlcnMgZm9yIGEgcXVlcnlcbiAgICAgKiBjb25zdCBxdWVyeVBhcmFtcyA9IG1ldGFkYXRhVXRpbHMuZ2V0UGFyYW1ldGVyc0J5RFNRKCc3M2U1OTBkMC1jNGViLTQ2NGQtYWJmOS0wMTk0M2UzMGFlMDknKTtcbiAgICAgKiBcbiAgICAgKiAvLyBHZXQgYWxsIHBhcmFtZXRlcnMgZm9yIGEgcXVlcnkgYnkgbmFtZVxuICAgICAqIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbWV0YWRhdGFVdGlscy5nZXRQYXJhbWV0ZXJzQnlEU1EoJ0dldF9TTEFTY2hlbWVzX0xpc3QnKTtcbiAgICAgKiBcbiAgICAgKiAvLyBHZXQgbWFuZGF0b3J5IHBhcmFtZXRlcnMgb25seVxuICAgICAqIGNvbnN0IG1hbmRhdG9yeVBhcmFtcyA9IG1ldGFkYXRhVXRpbHMuZ2V0UGFyYW1ldGVyc0J5RFNRKFxuICAgICAqICAgJzczZTU5MGQwLWM0ZWItNDY0ZC1hYmY5LTAxOTQzZTMwYWUwOScsXG4gICAgICogICBwYXJhbSA9PiBwYXJhbS5Jc01hbmRhdG9yeSA9PT0gdHJ1ZVxuICAgICAqICk7XG4gICAgICovXG4gICAgcHVibGljIGdldFBhcmFtZXRlcnNCeURTUShcbiAgICAgICAgcXVlcnk6IHN0cmluZyxcbiAgICAgICAgZmlsdGVyRm4/OiAoKHZhbHVlOiBQYXJhbWV0ZXJzKSA9PiBib29sZWFuKSxcbiAgICAgICAgY29sdW1ucz86IHN0cmluZ1tdXG4gICAgKTogYW55W10ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRmluZCB0aGUgcXVlcnkgdXNpbmcgb3VyIGV4aXN0aW5nIG1ldGhvZFxuICAgICAgICAgICAgY29uc3QgZHNRdWVyeSA9IHRoaXMuZ2V0RGF0YVNvdXJjZVF1ZXJ5RGV0YWlscyhxdWVyeSk7XG4gICAgICAgICAgICBpZiAoIWRzUXVlcnkgfHwgIWRzUXVlcnkuUGFyYW1ldGVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzW10gPSBkc1F1ZXJ5LlBhcmFtZXRlcnMgfHwgW107XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBpZiBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKGZpbHRlckZuKSB7XG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLmZpbHRlcihmaWx0ZXJGbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFJlc3VsdHMocXVlcnlQYXJhbWV0ZXJzLCBjb2x1bW5zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGdldERhdGFTb3VyY2VRdWVyeVBhcmFtZXRlcnM6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBHZXRzIEFwcCBTY3JlZW5zIHdpdGggZmlsdGVyIGNyaXRlcmlhXG4gICAgKiBcbiAgICAqIEBwYXJhbSBmaWx0ZXJGbiBPcHRpb25hbCBmaWx0ZXIgZnVuY3Rpb24gdG8gYXBwbHkgdG8gYXBwIHNjcmVlbnNcbiAgICAqIEBwYXJhbSBjb2x1bW5zIE9wdGlvbmFsIGNvbHVtbnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVzdWx0XG4gICAgKiBAcmV0dXJucyBBcnJheSBvZiBmaWx0ZXJlZCBhcHAgc2NyZWVuc1xuICAgICogXG4gICAgKiBAZXhhbXBsZVxuICAgICogLy8gR2V0IGFsbCBzeXN0ZW0gc2NyZWVuc1xuICAgICogY29uc3Qgc3lzdGVtU2NyZWVucyA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwU2NyZWVucyhzY3JlZW4gPT4gc2NyZWVuLklzU3lzdGVtUmVjb3JkID09PSB0cnVlKTtcbiAgICAqIFxuICAgICogLy8gR2V0IHNwZWNpZmljIGNvbHVtbnMgZnJvbSBhbGwgc2NyZWVuc1xuICAgICogY29uc3Qgc2NyZWVucyA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwU2NyZWVucyhcbiAgICAqICAgdW5kZWZpbmVkLCBcbiAgICAqICAgWydJRCcsICdOYW1lJywgJ1NjcmVlblR5cGUnXVxuICAgICogKTtcbiAgICAqL1xuICAgIHB1YmxpYyBnZXRBcHBTY3JlZW5zKGZpbHRlckZuPzogKCh2YWx1ZTogQXBwU2NyZWVuKSA9PiBib29sZWFuKSwgY29sdW1ucz86IHN0cmluZ1tdKTogYW55W10ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGFwcFNjcmVlbnMgPSBDb21tb24udGFiSnNvbi5BcHBTY3JlZW5zIHx8IFtdO1xuXG4gICAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGbikge1xuICAgICAgICAgICAgICAgIGFwcFNjcmVlbnMgPSBhcHBTY3JlZW5zLmZpbHRlcihmaWx0ZXJGbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFJlc3VsdHMoYXBwU2NyZWVucywgY29sdW1ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBnZXRBcHBTY3JlZW5zOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzcGVjaWZpYyBBcHAgU2NyZWVuIGJ5IElEIG9yIE5hbWVcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gc2NyZWVuIElEIG9yIE5hbWUgb2YgdGhlIGFwcCBzY3JlZW4gdG8gcmV0cmlldmVcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBPcHRpb25hbCBjb2x1bW5zIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3VsdFxuICAgICAqIEByZXR1cm5zIFRoZSBhcHAgc2NyZWVuIHdpdGggc3BlY2lmaWVkIGNvbHVtbnMgb3IgbnVsbCBpZiBub3QgZm91bmRcbiAgICAgKiBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEdldCBhIHNwZWNpZmljIHNjcmVlbiB3aXRoIGFsbCBwcm9wZXJ0aWVzXG4gICAgICogY29uc3Qgc2NyZWVuID0gbWV0YWRhdGFVdGlscy5nZXRBcHBTY3JlZW4oJ2E1Y2Q2MzllLTMxYmEtNGQzMy04ODAwLTAwNWE1MjQ4ZGZiMicpO1xuICAgICAqIFxuICAgICAqIC8vIEdldCBzcGVjaWZpYyBjb2x1bW5zIGZyb20gYSBzY3JlZW4gYnkgbmFtZVxuICAgICAqIGNvbnN0IHNjcmVlbiA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwU2NyZWVuKFxuICAgICAqICAgJ05ldyBEZXRhaWwgUm9sZS9QZXJtaXNzaW9uIEFwcG9qZWN0IGFjZXNzIHdpc2UnLFxuICAgICAqICAgWydJRCcsICdOYW1lJywgJ1NjcmVlblR5cGUnXVxuICAgICAqICk7XG4gICAgICovXG4gICAgcHVibGljIGdldEFwcFNjcmVlbihzY3JlZW46IHN0cmluZywgY29sdW1ucz86IHN0cmluZ1tdKTogYW55IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFwcFNjcmVlbnMoc2NyID0+XG4gICAgICAgICAgICAgICAgc2NyLklEPy50b0xvd2VyQ2FzZSgpID09PSBzY3JlZW4/LnRvTG93ZXJDYXNlKCkgfHwgc2NyLk5hbWUgPT09IHNjcmVlbixcbiAgICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICApPy5bMF0gPz8gbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGdldEFwcFNjcmVlbjonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgQXBwIE1lbnVzIHdpdGggZmlsdGVyIGNyaXRlcmlhXG4gICAgICogXG4gICAgICogQHBhcmFtIGZpbHRlckZuIE9wdGlvbmFsIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byBhcHAgbWVudXNcbiAgICAgKiBAcGFyYW0gY29sdW1ucyBPcHRpb25hbCBjb2x1bW5zIHRvIGluY2x1ZGUgaW4gdGhlIHJlc3VsdFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGZpbHRlcmVkIGFwcCBtZW51c1xuICAgICAqIFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gR2V0IGFsbCB0b3AtbGV2ZWwgbWVudXNcbiAgICAgKiBjb25zdCB0b3BNZW51cyA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwTWVudXMobWVudSA9PiAhbWVudS5QYXJlbnRJRCk7XG4gICAgICogXG4gICAgICogLy8gR2V0IHNwZWNpZmljIGNvbHVtbnMgZnJvbSBhbGwgbWVudXNcbiAgICAgKiBjb25zdCBtZW51cyA9IG1ldGFkYXRhVXRpbHMuZ2V0QXBwTWVudXMoXG4gICAgICogICB1bmRlZmluZWQsIFxuICAgICAqICAgWydJRCcsICdNZW51TmFtZScsICdEaXNwbGF5TmFtZScsICdTY3JlZW5JRCddXG4gICAgICogKTtcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXBwTWVudXMoZmlsdGVyRm4/OiAoKHZhbHVlOiBBcHBNZW51KSA9PiBib29sZWFuKSwgY29sdW1ucz86IHN0cmluZ1tdKTogYW55W10ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGFwcE1lbnVzID0gQ29tbW9uLnRhYkpzb24uQXBwTWVudXMgfHwgW107XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IGZpbHRlciBpZiBwcm92aWRlZFxuICAgICAgICAgICAgaWYgKGZpbHRlckZuKSB7XG4gICAgICAgICAgICAgICAgYXBwTWVudXMgPSBhcHBNZW51cy5maWx0ZXIoZmlsdGVyRm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRSZXN1bHRzKGFwcE1lbnVzLCBjb2x1bW5zKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGdldEFwcE1lbnVzOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIHdpdGggZmlsdGVyIGNyaXRlcmlhXG4gICAgICogXG4gICAgICogQHBhcmFtIGZpbHRlckZuIE9wdGlvbmFsIGZpbHRlciBmdW5jdGlvbiB0byBhcHBseSB0byBvcmdhbml6YXRpb25zXG4gICAgICogQHBhcmFtIGNvbHVtbnMgT3B0aW9uYWwgY29sdW1ucyB0byBpbmNsdWRlIGluIHRoZSByZXN1bHRcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiBmaWx0ZXJlZCBvcmdhbml6YXRpb25zXG4gICAgICogXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHZXQgYWxsIG9yZ2FuaXphdGlvbnNcbiAgICAgKiBjb25zdCBvcmdzID0gbWV0YWRhdGFVdGlscy5nZXRPcmdzKCk7XG4gICAgICogXG4gICAgICogLy8gR2V0IG9yZ2FuaXphdGlvbnMgd2l0aCBzcGVjaWZpYyBzdWJkb21haW4gcGF0dGVyblxuICAgICAqIGNvbnN0IHNwZWNpZmljT3JncyA9IG1ldGFkYXRhVXRpbHMuZ2V0T3JncyhcbiAgICAgKiAgIG9yZyA9PiBvcmcuU3ViZG9tYWluPy5pbmNsdWRlcygndGVzdCcpXG4gICAgICogKTtcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T3JncyhmaWx0ZXJGbj86ICgodmFsdWU6IE9yZ0luZm8pID0+IGJvb2xlYW4pLCBjb2x1bW5zPzogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgb3JnYW5pemF0aW9ucyA9IENvbW1vbi50YWJKc29uLk9yZ0luZm9zIHx8IFtdO1xuXG4gICAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmIChmaWx0ZXJGbikge1xuICAgICAgICAgICAgICAgIG9yZ2FuaXphdGlvbnMgPSBvcmdhbml6YXRpb25zLmZpbHRlcihmaWx0ZXJGbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFJlc3VsdHMob3JnYW5pemF0aW9ucywgY29sdW1ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBnZXRPcmdhbml6YXRpb25zOicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzcGVjaWZpYyBvcmdhbml6YXRpb24gYnkgSUQgb3IgTmFtZVxuICAgICAqIFxuICAgICAqIEBwYXJhbSBvcmdhbml6YXRpb24gSUQgb3IgT3JnYW5pemF0aW9uTmFtZSBvZiB0aGUgb3JnYW5pemF0aW9uXG4gICAgICogQHBhcmFtIGNvbHVtbnMgT3B0aW9uYWwgY29sdW1ucyB0byBpbmNsdWRlIGluIHRoZSByZXN1bHRcbiAgICAgKiBAcmV0dXJucyBUaGUgb3JnYW5pemF0aW9uIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAgICogXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBHZXQgb3JnYW5pemF0aW9uIGJ5IElEXG4gICAgICogY29uc3Qgb3JnID0gbWV0YWRhdGFVdGlscy5nZXRPcmdJbmZvRGV0YWlscygnMGVjM2QwZjEtYjJlYy00N2I3LTgzMDUtYjc2N2QwZTVlYTYzJyk7XG4gICAgICogXG4gICAgICogLy8gR2V0IG9yZ2FuaXphdGlvbiBieSBuYW1lXG4gICAgICogY29uc3Qgb3JnID0gbWV0YWRhdGFVdGlscy5nZXRPcmdJbmZvRGV0YWlscygnU3F1YWRGb2N1cycpO1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRPcmdJbmZvRGV0YWlscyhvcmdhbml6YXRpb246IHN0cmluZywgY29sdW1ucz86IHN0cmluZ1tdKTogYW55IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9yZ3Mob3JnID0+XG4gICAgICAgICAgICAgICAgb3JnLklEPy50b0xvd2VyQ2FzZSgpID09PSBvcmdhbml6YXRpb24/LnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICBvcmcuT3JnYW5pemF0aW9uTmFtZSA9PT0gb3JnYW5pemF0aW9uIHx8XG4gICAgICAgICAgICAgICAgb3JnLlN1YmRvbWFpbiA9PT0gb3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgIClbMF0gfHwgbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGdldE9yZ2FuaXphdGlvbjonLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
@@ -1,2 +1,9 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9pbnRlcmZhY2VzL3NjaGVtYS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hUmVzcG9uc2Uge1xuICBSZXF1ZXN0SWQ6IHN0cmluZ1xuICBJc1N1Y2Nlc3M6IGJvb2xlYW5cbiAgUmVzdWx0OiBzdHJpbmdcbiAgU3RhdHVzQ29kZTogc3RyaW5nXG4gIFJlY29yZEFmZmVjdHRlZDogbnVtYmVyXG4gIFRvdGFsUmVjb3JkczogbnVtYmVyXG4gIFRvdGFsRXhlY3V0aW9uVGltZTogbnVtYmVyXG4gIExvZzogYW55W11cbiAgRXJyb3JzOiBhbnlbXVxufSJdfQ==
1
+ export var MetadataEntityType;
2
+ (function (MetadataEntityType) {
3
+ MetadataEntityType["APP_OBJECTS"] = "AppObjects";
4
+ MetadataEntityType["APP_FIELDS"] = "AppFields";
5
+ MetadataEntityType["DATA_SOURCE_QUERIES"] = "DataSourceQueries";
6
+ MetadataEntityType["APP_SCREENS"] = "AppScreens";
7
+ MetadataEntityType["APP_MENUS"] = "AppMenus";
8
+ })(MetadataEntityType || (MetadataEntityType = {}));
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi90YWItY29yZS11dGlsaXR5L2FwcC9pbnRlcmZhY2VzL3NjaGVtYS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBLE1BQU0sQ0FBTixJQUFZLGtCQU1YO0FBTkQsV0FBWSxrQkFBa0I7SUFDNUIsZ0RBQTBCLENBQUE7SUFDMUIsOENBQXdCLENBQUE7SUFDeEIsK0RBQXlDLENBQUE7SUFDekMsZ0RBQTBCLENBQUE7SUFDMUIsNENBQXNCLENBQUE7QUFDeEIsQ0FBQyxFQU5XLGtCQUFrQixLQUFsQixrQkFBa0IsUUFNN0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNjaGVtYVJlc3BvbnNlIHtcbiAgUmVxdWVzdElkOiBzdHJpbmdcbiAgSXNTdWNjZXNzOiBib29sZWFuXG4gIFJlc3VsdDogc3RyaW5nXG4gIFN0YXR1c0NvZGU6IHN0cmluZ1xuICBSZWNvcmRBZmZlY3R0ZWQ6IG51bWJlclxuICBUb3RhbFJlY29yZHM6IG51bWJlclxuICBUb3RhbEV4ZWN1dGlvblRpbWU6IG51bWJlclxuICBMb2c6IGFueVtdXG4gIEVycm9yczogYW55W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdJbmZvIHtcbiAgSUQ6IHN0cmluZztcbiAgT3JnYW5pemF0aW9uTmFtZTogc3RyaW5nO1xuICBQcmltYXJ5Q29udGFjdDogYW55O1xuICBBZGRyZXNzOiBhbnk7XG4gIExvY2FsZVNldHRpbmdzOiBzdHJpbmcgfCBudWxsO1xuICBTdWJkb21haW46IHN0cmluZztcbiAgVGVuYW50Q29kZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGVudW0gTWV0YWRhdGFFbnRpdHlUeXBlIHtcbiAgQVBQX09CSkVDVFMgPSAnQXBwT2JqZWN0cycsXG4gIEFQUF9GSUVMRFMgPSAnQXBwRmllbGRzJyxcbiAgREFUQV9TT1VSQ0VfUVVFUklFUyA9ICdEYXRhU291cmNlUXVlcmllcycsXG4gIEFQUF9TQ1JFRU5TID0gJ0FwcFNjcmVlbnMnLFxuICBBUFBfTUVOVVMgPSAnQXBwTWVudXMnXG59Il19
package/index.d.ts CHANGED
@@ -20,6 +20,7 @@ export * from './lib/tab-core-utility/app/helpers/common/dsq.helpers';
20
20
  export * from './lib/tab-core-utility/app/helpers/common/req-res.helpers';
21
21
  export * from './lib/tab-core-utility/app/helpers/common/where-clause.helpers';
22
22
  export * from './lib/tab-core-utility/app/helpers/common/template.helpers';
23
+ export * from './lib/tab-core-utility/app/helpers/common/meta-data.helpers';
23
24
  export * from './lib/tab-core-utility/app/helpers/screen/forms.helpers';
24
25
  export * from './lib/tab-core-utility/app/helpers/screen/grid-column-data.helpers';
25
26
  export * from './lib/tab-core-utility/app/helpers/screen/grid.helpers';
@@ -18,5 +18,6 @@ export declare const StorageConstants: {
18
18
  AppId: string;
19
19
  screenContext: string;
20
20
  environmentMode: string;
21
+ environmentId: string;
21
22
  tabAppObjectAccess: string;
22
23
  };
@@ -0,0 +1,355 @@
1
+ import { MetadataEntityType, OrgInfo } from "../../interfaces/schema.interface";
2
+ import { AppMenu, AppObject, AppScreen } from "../../models/app-object.class";
3
+ import { AppFields, DataSourceQueries, DataSourceQueries_Fields, Parameters } from "../../models/data-source-queries.class";
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * MetadataUtils - Utility service for retrieving and manipulating application metadata
7
+ *
8
+ * This service provides methods to extract, filter, and format different parts of the
9
+ * application metadata, including objects, fields, screens, menus, etc.
10
+ */
11
+ export declare class MetadataHelper {
12
+ private formatResults;
13
+ /**
14
+ * Search across all metadata for a term
15
+ *
16
+ * @param searchTerm Term to search for
17
+ * @param entityTypes Optional types of entities to search (if not provided, searches all)
18
+ * @returns Search results grouped by entity type
19
+ *
20
+ * @example
21
+ * // Search across all metadata
22
+ * const results = metadataUtils.searchAcrossMetadata('Blueprint');
23
+ *
24
+ * // Search only in app objects and screens
25
+ * const results = metadataUtils.searchAcrossMetadata(
26
+ * 'Role',
27
+ * [MetadataEntityType.APP_OBJECTS, MetadataEntityType.APP_SCREENS]
28
+ * );
29
+ */
30
+ searchAcrossMetadata(searchTerm: string, entityTypes?: MetadataEntityType[]): Record<string, any[]>;
31
+ /**
32
+ * Search for a term within App Objects
33
+ * @private
34
+ */
35
+ private searchAppObjects;
36
+ /**
37
+ * Search for a term within App Fields
38
+ * @private
39
+ */
40
+ private searchAppFields;
41
+ /**
42
+ * Search for a term within Data Source Queries
43
+ * @private
44
+ */
45
+ private searchDataSourceQueries;
46
+ /**
47
+ * Search for a term within App Screens
48
+ * @private
49
+ */
50
+ private searchAppScreens;
51
+ /**
52
+ * Search for a term within App Menus
53
+ * @private
54
+ */
55
+ private searchAppMenus;
56
+ /**
57
+ * Helper method to check if a string contains a search term
58
+ * @private
59
+ */
60
+ private containsTerm;
61
+ /**
62
+ * Gets App Objects based on filter criteria
63
+ *
64
+ * @param filterFn Optional filter function to apply to app objects
65
+ * @param columns Optional columns to include in the result
66
+ * @returns Array of filtered app objects
67
+ *
68
+ * @example
69
+ * // Get all system app objects
70
+ * const systemObjects = metadataUtils.getAppObjects(obj => obj.IsSystem === true);
71
+ *
72
+ * // Get specific columns from non-deprecated objects
73
+ * const objects = metadataUtils.getAppObjects(
74
+ * obj => !obj.IsDeprecated,
75
+ * ['ID', 'DisplayName', 'ObjectName']
76
+ * );
77
+ */
78
+ getAppObjects(filterFn?: ((value: AppObject) => boolean), columns?: string[]): any[];
79
+ /**
80
+ * Gets a specific App Object by ID or Name
81
+ *
82
+ * @param appObject ID or Name of the app object to retrieve
83
+ * @param columns Optional columns to include in the result
84
+ * @returns The app object with specified columns or null if not found
85
+ *
86
+ * @example
87
+ * // Get a specific app object with all properties
88
+ * const appObj = metadataUtils.getAppObjectDetails('b4887d4d-bb1e-4d52-a7e8-2f943d69e44c' or 'TABMD_SYSTEM');
89
+ *
90
+ * // Get specific columns from an app object
91
+ * const appObj = metadataUtils.getAppObjectDetails(
92
+ * 'b4887d4d-bb1e-4d52-a7e8-2f943d69e44c',
93
+ * ['ID', 'DisplayName', 'ObjectName']
94
+ * );
95
+ */
96
+ getAppObjectDetails(appObject: string, columns?: string[]): any;
97
+ /**
98
+ * Gets all fields across all app objects with filter criteria
99
+ *
100
+ * @param filterFn Optional filter function to apply to fields
101
+ * @param columns Optional columns to include in the result
102
+ * @returns Array of filtered fields
103
+ *
104
+ * @example
105
+ * // Get all required fields across all objects
106
+ * const requiredFields = metadataUtils.getAppFields(field => field.IsRequired === true);
107
+ *
108
+ * // Get specific columns from searchable fields
109
+ * const fields = metadataUtils.getAppFields(
110
+ * field => field.IsSearchable === true,
111
+ * ['ID', 'DisplayName', 'FieldName']
112
+ * );
113
+ */
114
+ getAppFields(filterFn?: ((value: AppFields) => boolean), columns?: string[]): any[];
115
+ /**
116
+ * Gets fields for a specific app object
117
+ *
118
+ * @param appObject ID or Name of the app object
119
+ * @param filterFn Optional filter function for fields
120
+ * @returns Array of fields for the specified object
121
+ *
122
+ * @example
123
+ * // Get all fields for an object
124
+ * const fields = metadataUtils.getAppFieldsByAppObject('b4887d4d-bb1e-4d52-a7e8-2f943d69e44c' or 'TABMD_SYSTEM');
125
+ *
126
+ * // Get only required fields
127
+ * const requiredFields = metadataUtils.getAppFieldsByAppObject(
128
+ * 'b4887d4d-bb1e-4d52-a7e8-2f943d69e44c',
129
+ * field => field.IsRequired === true
130
+ * );
131
+ */
132
+ getAppFieldsByAppObject(appObject: string, filterFn?: ((value: AppFields, index: number, array: AppFields[]) => boolean), columns?: string[]): any[];
133
+ /**
134
+ * Gets lookup fields for a specific app object
135
+ *
136
+ * @param appObject ID or Name of the app object
137
+ * @param filterFn Optional filter function for lookup fields
138
+ * @param columns Optional columns to include in the result
139
+ * @returns Array of lookup fields for the specified object
140
+ *
141
+ * @example
142
+ * // Get all lookup fields for an object
143
+ * const lookupFields = metadataUtils.getLookupFieldsByAppObject('TABD_Blueprint_SLASchemes');
144
+ *
145
+ * // Get specific lookup fields
146
+ * const fields = metadataUtils.getLookupFieldsByAppObject(
147
+ * 'b4887d4d-bb1e-4d52-a7e8-2f943d69e44c',
148
+ * field => field.IsRequired === true
149
+ * );
150
+ */
151
+ getLookupFieldsByAppObject(appObject: string, filterFn?: ((value: AppFields) => boolean), columns?: string[]): any[];
152
+ /**
153
+ * Gets data source queries with filter criteria
154
+ *
155
+ * @param filterFn Optional filter function to apply to queries
156
+ * @param columns Optional columns to include in the result
157
+ * @returns Array of filtered data source queries
158
+ *
159
+ * @example
160
+ * // Get all queries with a specific naming pattern
161
+ * const queries = metadataUtils.getDataSourceQueries(query => query.QueryName.includes('List'));
162
+ *
163
+ * // Get specific columns from all queries
164
+ * const queries = metadataUtils.getDataSourceQueries(
165
+ * undefined,
166
+ * ['ID', 'QueryName', 'DisplayName']
167
+ * );
168
+ */
169
+ getDataSourceQueries(filterFn?: ((value: DataSourceQueries) => boolean), columns?: string[]): any[];
170
+ /**
171
+ * Gets data source queries for a specific app object
172
+ *
173
+ * @param appObject ID or Name of the app object
174
+ * @param filterFn Optional filter function for queries
175
+ * @param columns Optional columns to include in the result
176
+ * @returns Array of queries for the specified object
177
+ *
178
+ * @example
179
+ * // Get all queries for an object
180
+ * const queries = metadataUtils.getDataSourceQueriesByAppObject('b4887d4d-bb1e-4d52-a7e8-2f943d69e44c');
181
+ *
182
+ * // Get queries with specific pattern
183
+ * const filteredQueries = metadataUtils.getDataSourceQueriesByAppObject(
184
+ * 'TABD_Blueprint_SLASchemes',
185
+ * query => query.QueryName.includes('List')
186
+ * );
187
+ */
188
+ getDataSourceQueriesByAppObject(appObject: string, filterFn?: ((value: DataSourceQueries) => boolean), columns?: string[]): any[];
189
+ /**
190
+ * Gets a specific Data Source Query by ID or Name
191
+ *
192
+ * @param query ID or Name of the data source query to retrieve
193
+ * @param columns Optional columns to include in the result
194
+ * @returns The data source query with specified columns or null if not found
195
+ *
196
+ * @example
197
+ * // Get a specific query with all properties
198
+ * const query = metadataUtils.getDataSourceQueryDetails('73e590d0-c4eb-464d-abf9-01943e30ae09');
199
+ *
200
+ * // Get specific columns from a query by name
201
+ * const query = metadataUtils.getDataSourceQueryDetails(
202
+ * 'Get_SLASchemes_List',
203
+ * ['ID', 'QueryName', 'DisplayName']
204
+ * );
205
+ */
206
+ getDataSourceQueryDetails(query: string, columns?: string[]): any;
207
+ /**
208
+ * Gets fields from a data source query
209
+ *
210
+ * @param query ID or Name of the data source query
211
+ * @param filterFn Optional filter function for query fields
212
+ * @param columns Optional columns to include in the result
213
+ * @returns Array of fields for the specified query with app field details
214
+ *
215
+ * @example
216
+ * // Get all fields for a query
217
+ * const queryFields = metadataUtils.getDataSourceQueryFields('73e590d0-c4eb-464d-abf9-01943e30ae09');
218
+ *
219
+ * // Get fields for a query by name
220
+ * const queryFields = metadataUtils.getDataSourceQueryFields('Get_SLASchemes_List');
221
+ *
222
+ * // Get fields with filter and specific columns
223
+ * const fields = metadataUtils.getDataSourceQueryFields(
224
+ * '73e590d0-c4eb-464d-abf9-01943e30ae09',
225
+ * field => field.FieldType === 1,
226
+ * ['ID', 'AppFieldID', 'FieldType']
227
+ * );
228
+ */
229
+ getFieldsByDSQ(query: string, filterFn?: ((value: DataSourceQueries_Fields) => boolean), columns?: string[]): any[];
230
+ /**
231
+ * Enhances query fields with their corresponding app field details
232
+ * @private
233
+ */
234
+ private enhanceQueryFieldsWithAppFields;
235
+ /**
236
+ * Finds the parent app object that contains a specific data source query
237
+ * @private
238
+ */
239
+ private findParentAppObjectForQuery;
240
+ /**
241
+ * Finds an app field by ID within a specific app object
242
+ * @private
243
+ */
244
+ private findAppFieldById;
245
+ /**
246
+ * Gets query parameters from a data source query
247
+ *
248
+ * @param query ID or Name of the data source query
249
+ * @param filterFn Optional filter function for query parameters
250
+ * @param columns Optional columns to include in the result
251
+ * @returns Array of parameters for the specified query
252
+ *
253
+ * @example
254
+ * // Get all parameters for a query
255
+ * const queryParams = metadataUtils.getParametersByDSQ('73e590d0-c4eb-464d-abf9-01943e30ae09');
256
+ *
257
+ * // Get all parameters for a query by name
258
+ * const queryParams = metadataUtils.getParametersByDSQ('Get_SLASchemes_List');
259
+ *
260
+ * // Get mandatory parameters only
261
+ * const mandatoryParams = metadataUtils.getParametersByDSQ(
262
+ * '73e590d0-c4eb-464d-abf9-01943e30ae09',
263
+ * param => param.IsMandatory === true
264
+ * );
265
+ */
266
+ getParametersByDSQ(query: string, filterFn?: ((value: Parameters) => boolean), columns?: string[]): any[];
267
+ /**
268
+ * Gets App Screens with filter criteria
269
+ *
270
+ * @param filterFn Optional filter function to apply to app screens
271
+ * @param columns Optional columns to include in the result
272
+ * @returns Array of filtered app screens
273
+ *
274
+ * @example
275
+ * // Get all system screens
276
+ * const systemScreens = metadataUtils.getAppScreens(screen => screen.IsSystemRecord === true);
277
+ *
278
+ * // Get specific columns from all screens
279
+ * const screens = metadataUtils.getAppScreens(
280
+ * undefined,
281
+ * ['ID', 'Name', 'ScreenType']
282
+ * );
283
+ */
284
+ getAppScreens(filterFn?: ((value: AppScreen) => boolean), columns?: string[]): any[];
285
+ /**
286
+ * Gets a specific App Screen by ID or Name
287
+ *
288
+ * @param screen ID or Name of the app screen to retrieve
289
+ * @param columns Optional columns to include in the result
290
+ * @returns The app screen with specified columns or null if not found
291
+ *
292
+ * @example
293
+ * // Get a specific screen with all properties
294
+ * const screen = metadataUtils.getAppScreen('a5cd639e-31ba-4d33-8800-005a5248dfb2');
295
+ *
296
+ * // Get specific columns from a screen by name
297
+ * const screen = metadataUtils.getAppScreen(
298
+ * 'New Detail Role/Permission Appoject acess wise',
299
+ * ['ID', 'Name', 'ScreenType']
300
+ * );
301
+ */
302
+ getAppScreen(screen: string, columns?: string[]): any;
303
+ /**
304
+ * Gets App Menus with filter criteria
305
+ *
306
+ * @param filterFn Optional filter function to apply to app menus
307
+ * @param columns Optional columns to include in the result
308
+ * @returns Array of filtered app menus
309
+ *
310
+ * @example
311
+ * // Get all top-level menus
312
+ * const topMenus = metadataUtils.getAppMenus(menu => !menu.ParentID);
313
+ *
314
+ * // Get specific columns from all menus
315
+ * const menus = metadataUtils.getAppMenus(
316
+ * undefined,
317
+ * ['ID', 'MenuName', 'DisplayName', 'ScreenID']
318
+ * );
319
+ */
320
+ getAppMenus(filterFn?: ((value: AppMenu) => boolean), columns?: string[]): any[];
321
+ /**
322
+ * Gets organization information with filter criteria
323
+ *
324
+ * @param filterFn Optional filter function to apply to organizations
325
+ * @param columns Optional columns to include in the result
326
+ * @returns Array of filtered organizations
327
+ *
328
+ * @example
329
+ * // Get all organizations
330
+ * const orgs = metadataUtils.getOrgs();
331
+ *
332
+ * // Get organizations with specific subdomain pattern
333
+ * const specificOrgs = metadataUtils.getOrgs(
334
+ * org => org.Subdomain?.includes('test')
335
+ * );
336
+ */
337
+ getOrgs(filterFn?: ((value: OrgInfo) => boolean), columns?: string[]): any[];
338
+ /**
339
+ * Gets a specific organization by ID or Name
340
+ *
341
+ * @param organization ID or OrganizationName of the organization
342
+ * @param columns Optional columns to include in the result
343
+ * @returns The organization or null if not found
344
+ *
345
+ * @example
346
+ * // Get organization by ID
347
+ * const org = metadataUtils.getOrgInfoDetails('0ec3d0f1-b2ec-47b7-8305-b767d0e5ea63');
348
+ *
349
+ * // Get organization by name
350
+ * const org = metadataUtils.getOrgInfoDetails('SquadFocus');
351
+ */
352
+ getOrgInfoDetails(organization: string, columns?: string[]): any;
353
+ static ɵfac: i0.ɵɵFactoryDeclaration<MetadataHelper, never>;
354
+ static ɵprov: i0.ɵɵInjectableDeclaration<MetadataHelper>;
355
+ }
@@ -9,3 +9,19 @@ export interface SchemaResponse {
9
9
  Log: any[];
10
10
  Errors: any[];
11
11
  }
12
+ export interface OrgInfo {
13
+ ID: string;
14
+ OrganizationName: string;
15
+ PrimaryContact: any;
16
+ Address: any;
17
+ LocaleSettings: string | null;
18
+ Subdomain: string;
19
+ TenantCode: string | null;
20
+ }
21
+ export declare enum MetadataEntityType {
22
+ APP_OBJECTS = "AppObjects",
23
+ APP_FIELDS = "AppFields",
24
+ DATA_SOURCE_QUERIES = "DataSourceQueries",
25
+ APP_SCREENS = "AppScreens",
26
+ APP_MENUS = "AppMenus"
27
+ }
@@ -2,18 +2,18 @@ import { Observable } from "rxjs";
2
2
  import { LoginUserRequest } from "../app/interfaces/auth.interface";
3
3
  export declare const authStore: import("@angular/core").Type<{
4
4
  token: import("@angular/core").Signal<string>;
5
- name: import("@angular/core").Signal<string>;
6
5
  id: import("@angular/core").Signal<any>;
7
6
  email: import("@angular/core").Signal<string>;
7
+ name: import("@angular/core").Signal<string>;
8
8
  avatar: import("@angular/core").Signal<string>;
9
9
  status: import("@angular/core").Signal<string>;
10
10
  checkUserlogin: () => boolean;
11
11
  login: (API_URL: string, credentials: LoginUserRequest) => Observable<any>;
12
12
  } & import("@ngrx/signals").StateSignal<{
13
13
  token: string;
14
- name: string;
15
14
  id: any;
16
15
  email: string;
16
+ name: string;
17
17
  avatar: string;
18
18
  status: string;
19
19
  }>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@techextensor/tab-core-utility",
3
- "version": "2.2.130",
3
+ "version": "2.2.132",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0",