commit 066f95386363ff33eb05801e1351d3bd2db6e629 Author: Krishna Acondy Date: Tue Jul 7 19:53:35 2020 +0100 feat(*): recreate package with new name diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..c8cbd70 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,27 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: SASjs Build + +on: + push: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [12.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run package:lib + env: + CI: true diff --git a/.github/workflows/npmpublish.yml b/.github/workflows/npmpublish.yml new file mode 100644 index 0000000..687fc5a --- /dev/null +++ b/.github/workflows/npmpublish.yml @@ -0,0 +1,25 @@ +# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created +# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages + +name: SASjs Build and Publish + +on: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install Dependencies + run: npm ci + - name: Build Project + run: npm run build + - name: Semantic Release + uses: cycjimmy/semantic-release-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dd87e2d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +build diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7cd6756 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,209 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + +# [1.9.0](https://github.com/macropeople/sasjs/compare/v1.8.0...v1.9.0) (2020-03-05) + + +### Bug Fixes + +* special chars regex, csv function improvements ([5c8e3fe](https://github.com/macropeople/sasjs/commit/5c8e3fe)) +* splitting tests in different files ([95e1d8b](https://github.com/macropeople/sasjs/commit/95e1d8b)) +* switching crlfs to lfs in values ([277cf3f](https://github.com/macropeople/sasjs/commit/277cf3f)) + + +### Features + +* fixing tests to fit adapter behaviour ([6146189](https://github.com/macropeople/sasjs/commit/6146189)) + + + + +# [1.8.0](https://github.com/macropeople/sasjs/compare/v1.7.2...v1.8.0) (2020-03-03) + + +### Bug Fixes + +* parsing error from response ([ff5fa1b](https://github.com/macropeople/sasjs/commit/ff5fa1b)) + + +### Features + +* update SASjs configuration after initializaton ([ee1255c](https://github.com/macropeople/sasjs/commit/ee1255c)) + + + + +## [1.7.2](https://github.com/macropeople/sasjs/compare/v1.7.1...v1.7.2) (2020-03-02) + + + + +## [1.7.1](https://github.com/macropeople/sasjs/compare/v1.7.0...v1.7.1) (2020-03-02) + + +### Bug Fixes + +* header data types, empty numerics ([c95c9fc](https://github.com/macropeople/sasjs/commit/c95c9fc)) + + + + +# [1.7.0](https://github.com/macropeople/sasjs/compare/v1.6.5...v1.7.0) (2020-03-01) + + +### Bug Fixes + +* adapter upgrade ([7c221dc](https://github.com/macropeople/sasjs/commit/7c221dc)) +* failing test ([12b29b0](https://github.com/macropeople/sasjs/commit/12b29b0)) +* retry on redirect only with SAS9 ([69d08e5](https://github.com/macropeople/sasjs/commit/69d08e5)) +* test rewrite ([aeb636b](https://github.com/macropeople/sasjs/commit/aeb636b)) + + +### Features + +* tests for sasjs, also bumping cypress version and setting cypress tsconfig to ES6 (we'll be using cypress browsers) ([e8193c1](https://github.com/macropeople/sasjs/commit/e8193c1)) +* tests for sasjs, also bumping cypress version and setting cypress tsconfig to ES6 (we'll be using cypress browsers) ([a197344](https://github.com/macropeople/sasjs/commit/a197344)) + + + + +## [1.6.5](https://github.com/macropeople/sasjs/compare/v1.6.4...v1.6.5) (2020-03-01) + + + + +## [1.6.4](https://github.com/macropeople/sasjs/compare/v1.6.3...v1.6.4) (2020-03-01) + + + + +## [1.6.3](https://github.com/macropeople/sasjs/compare/v1.6.2...v1.6.3) (2020-02-26) + + +### Bug Fixes + +* always check session before trying to log in ([6f256ac](https://github.com/macropeople/sasjs/commit/6f256ac)) + + + + +## [1.6.2](https://github.com/macropeople/sasjs/compare/v1.6.1...v1.6.2) (2020-02-26) + + +### Bug Fixes + +* SAS9 response fix ([4917d38](https://github.com/macropeople/sasjs/commit/4917d38)) + + + + +## [1.6.1](https://github.com/macropeople/sasjs/compare/v1.6.0...v1.6.1) (2020-02-23) + + + + +# [1.6.0](https://github.com/macropeople/sasjs/compare/v1.5.4...v1.6.0) (2020-02-23) + + +### Features + +* adding sasjs JS file in dist folder ([a4d7e87](https://github.com/macropeople/sasjs/commit/a4d7e87)) + + + + +## [1.5.4](https://github.com/macropeople/sasjs/compare/v1.5.3...v1.5.4) (2020-02-22) + + +### Bug Fixes + +* splice log only if there is a log in Viya ([d72a987](https://github.com/macropeople/sasjs/commit/d72a987)) + + + + +## [1.5.3](https://github.com/macropeople/sasjs/compare/v1.5.2...v1.5.3) (2020-02-22) + + +### Bug Fixes + +* capturing and parsing program code in Viya, plus replacement of console logs with console errors ([f4d6ac7](https://github.com/macropeople/sasjs/commit/f4d6ac7)) + + + + +## [1.5.2](https://github.com/macropeople/sasjs/compare/v1.5.1...v1.5.2) (2020-02-22) + + + + +## [1.5.1](https://github.com/macropeople/sasjs/compare/v1.5.0...v1.5.1) (2020-02-21) + + +### Bug Fixes + +* parse code only when log is available ([92fadff](https://github.com/macropeople/sasjs/commit/92fadff)) + + + + +# [1.5.0](https://github.com/macropeople/sasjs/compare/v1.4.2...v1.5.0) (2020-02-21) + + +### Bug Fixes + +* fetch login form data if not available ([d7e7b2f](https://github.com/macropeople/sasjs/commit/d7e7b2f)) +* revert unnecessary change ([34ed2a0](https://github.com/macropeople/sasjs/commit/34ed2a0)) + + +### Features + +* add checkSession API ([dc170fe](https://github.com/macropeople/sasjs/commit/dc170fe)) + + + + +## [1.4.2](https://github.com/macropeople/sasjs/compare/v1.4.0...v1.4.2) (2020-02-20) + + +### Bug Fixes + +* premature assignment of loginLink ([0c8a967](https://github.com/macropeople/sasjs/commit/0c8a967)) + + + + +# [1.4.0](https://github.com/macropeople/sasjs/compare/v1.3.0...v1.4.0) (2020-02-20) + + +### Bug Fixes + +* putting param export in right place ([6372ea2](https://github.com/macropeople/sasjs/commit/6372ea2)) + + +### Features + +* switching from file based upload to params for Viya. Fixes [#13](https://github.com/macropeople/sasjs/issues/13) ([2aeba78](https://github.com/macropeople/sasjs/commit/2aeba78)) + + + + +# 1.3.0 (2020-02-17) + + +### Bug Fixes + +* closes #issue6 ([efe1510](https://github.com/macropeople/sasjs/commit/efe1510)), closes [#issue6](https://github.com/macropeople/sasjs/issues/issue6) +* add setter for debug state ([10945a6](https://github.com/macropeople/sasjs/commit/10945a6)) +* config renaming ([f8ace78](https://github.com/macropeople/sasjs/commit/f8ace78)) + + +### Features + +* adding MIT license ([ef19e2a](https://github.com/macropeople/sasjs/commit/ef19e2a)) +* add parsing of source and generated code from response ([892122a](https://github.com/macropeople/sasjs/commit/892122a)) +* add support for SAS9 responses ([96c31c8](https://github.com/macropeople/sasjs/commit/96c31c8)) +* code of conduct ([cf31ce6](https://github.com/macropeople/sasjs/commit/cf31ce6)) +* initial commit ([6957dac](https://github.com/macropeople/sasjs/commit/6957dac)) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..c93e457 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at support@macropeople.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..64c9592 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,80 @@ +# Contributing + +Contributions to SASjs are very welcome! When making a PR, test cases should be included. To help in unit testing, be sure to run the following when making changes: + +``` +# the following creates a tarball in the build folder of SASjs +npm run-script package:lib + +# now go to your app and run: +npm install ../sasjs/build/ +``` + +Tests are run using cypress. Before running tests, you need to define the following backend services: + +# SAS 9 +``` + +filename mc url "https://raw.githubusercontent.com/macropeople/macrocore/master/mc_all.sas?_=1"; +%inc mc; +filename ft15f001 temp; +parmcards4; + %webout(OPEN) + %macro x(); + %do i=1 %to &_webin_file_count; %webout(OBJ,&&_webin_name&i) %end; + %mend; %x() + %webout(CLOSE) +;;;; +%mm_createwebservice(path=/Public/app/common,name=sendObj) +parmcards4; + %webout(OPEN) + %macro x(); + %do i=1 %to &_webin_file_count; %webout(ARR,&&_webin_name&i) %end; + %mend; %x() + %webout(CLOSE) +;;;; +%mm_createwebservice(path=/Public/app/common,name=sendArr) +``` + +# Viya +``` +filename mc url "https://raw.githubusercontent.com/macropeople/macrocore/master/mc_all.sas"; +%inc mc; + +filename ft15f001 temp; +parmcards4; + %webout(OPEN) + %global sasjs_tables; + %let sasjs_tables=&sasjs_tables; + %put &=sasjs_tables; + %let sasjs_tables=&sasjs_tables; + %macro x(); + %global sasjs_tables; + %do i=1 %to %sysfunc(countw(&sasjs_tables)); + %let table=%scan(&sasjs_tables,&i); + %webout(OBJ,&table) + %end; + %mend; + %x() + %webout(CLOSE) +;;;; +%mv_createwebservice(path=/Public/app/common,name=sendObj) +filename ft15f001 temp; +parmcards4; + %webout(OPEN) + %global sasjs_tables; + %let sasjs_tables=&sasjs_tables; + %put &=sasjs_tables; + %macro x(); + %do i=1 %to %sysfunc(countw(&sasjs_tables)); + %let table=%scan(&sasjs_tables,&i); + %webout(ARR,&table) + %end; + %mend; + %x() + %webout(CLOSE) +;;;; +%mv_createwebservice(path=/Public/app/common,name=sendArr) +``` + +The above services will return anything you send. To run the tests simply launch `npm run cypress`. \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6765f8e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Macro People + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9eb44d4 --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +[![](https://data.jsdelivr.com/v1/package/npm/sasjs/badge)](https://www.jsdelivr.com/package/npm/sasjs) + +# SASjs + +SASjs is a open-source framework for building Web Apps on SASĀ® platforms. You can use as much or as little of it as you like. This repository contains the JS adapter, the part that handles the to/from SAS communication on the client side. There are 3 ways to install it: + +1 - `npm install sasjs` - for use in a node project + +2 - [Download](https://cdn.jsdelivr.net/npm/sasjs/index.js) and use a copy of the latest JS file + +3 - Reference directly from the CDN - in which case click [here](https://www.jsdelivr.com/package/npm/sasjs?tab=collection) and select "SRI" to get the script tag with the integrity hash. + +If you are short on time and just need to build an app quickly, then check out [this video](https://vimeo.com/393161794) and the [react-seed-app](https://github.com/macropeople/react-seed-app) which provides some boilerplate. + +For more information on building web apps with SAS, check out [sasjs.io](https://sasjs.io) + + +## None of this makes sense. How do I build an app with it? + +Ok ok. Deploy this [example.html](https://github.com/macropeople/sasjs/blob/master/example.html) file to your web server, and update `servertype` to `SAS9` or `SASVIYA` depending on your backend. + +The backend part can be deployed as follows: + +``` +%let appLoc=/Public/app/readme; /* Metadata or Viya Folder location as per SASjs config */ +/* compile macros (can also be downloaded & compiled seperately) */ +filename mc url "https://raw.githubusercontent.com/macropeople/macrocore/master/mc_all.sas"; +%inc mc; +filename ft15f001 temp; +parmcards4; + %webout(FETCH) /* receive all data as SAS datasets */ + proc sql; + create table areas as select make,mean(invoice) as avprice + from sashelp.cars + where type in (select type from work.fromjs) + group by 1; + %webout(OPEN) + %webout(OBJ,areas) + %webout(CLOSE) +;;;; +%mp_createwebservice(path=&appLoc/common,name=getdata) +``` + +You now have a simple web app with a backend service! + +# More resources + +For more information specific to this adapter you can check out this [user guide](https://sasjs.io/sasjs/sasjs-adapter/) or the [technical](http://adapter.sasjs.io/) documentation. + +For more information on building web apps in general, check out these [resources](https://sasjs.io/training/resources/) or contact the [author](https://www.linkedin.com/in/allanbowe/) directly. \ No newline at end of file diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000..292b9ae --- /dev/null +++ b/cypress.json @@ -0,0 +1,13 @@ +{ + "defaultCommandTimeout": 10000, + "chromeWebSecurity": false, + "screenshotOnRunFailure": false, + "env": { + "serverUrl": "", + "appLoc": "/Public/app", + "serverType": "SAS9", + "debug": false, + "username": "", + "password": "" + } +} diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 0000000..8cf9617 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +adapter.sasjs.io \ No newline at end of file diff --git a/docs/assets/css/main.css b/docs/assets/css/main.css new file mode 100644 index 0000000..9d6f1ab --- /dev/null +++ b/docs/assets/css/main.css @@ -0,0 +1 @@ +/*! normalize.css v1.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-family:sans-serif}button,input,select,textarea{font-family:sans-serif}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4,.tsd-index-panel h3{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:1em 40px}dfn{font-style:italic}hr{box-sizing:content-box;height:0}mark{background:#ff0;color:#000}p,pre{margin:1em 0}code,kbd,pre,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:80%}sub{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;top:-0.5em}sub{bottom:-0.25em}dl,menu,ol,ul{margin:1em 0}dd{margin:0 0 0 40px}menu,ol,ul{padding:0 0 0 40px}nav ul,nav ol{list-style:none;list-style-image:none}img{border:0;-ms-interpolation-mode:bicubic}svg:not(:root){overflow:hidden}figure,form{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0;white-space:normal;*margin-left:-7px}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button]{-webkit-appearance:button;cursor:pointer;*overflow:visible}input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;*overflow:visible}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;*height:13px;*width:13px}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}.hljs{display:inline-block;padding:.5em;background:#fff;color:#000}.hljs-comment,.hljs-annotation,.hljs-template_comment,.diff .hljs-header,.hljs-chunk,.apache .hljs-cbracket{color:green}.hljs-keyword,.hljs-id,.hljs-built_in,.css .smalltalk .hljs-class,.hljs-winutils,.bash .hljs-variable,.tex .hljs-command,.hljs-request,.hljs-status,.nginx .hljs-title{color:blue}.xml .hljs-tag{color:blue}.xml .hljs-tag .hljs-value{color:blue}.hljs-string,.hljs-title,.hljs-parent,.hljs-tag .hljs-value,.hljs-rules .hljs-value{color:#a31515}.ruby .hljs-symbol{color:#a31515}.ruby .hljs-symbol .hljs-string{color:#a31515}.hljs-template_tag,.django .hljs-variable,.hljs-addition,.hljs-flow,.hljs-stream,.apache .hljs-tag,.hljs-date,.tex .hljs-formula,.coffeescript .hljs-attribute{color:#a31515}.ruby .hljs-string,.hljs-decorator,.hljs-filter .hljs-argument,.hljs-localvars,.hljs-array,.hljs-attr_selector,.hljs-pseudo,.hljs-pi,.hljs-doctype,.hljs-deletion,.hljs-envvar,.hljs-shebang,.hljs-preprocessor,.hljs-pragma,.userType,.apache .hljs-sqbracket,.nginx .hljs-built_in,.tex .hljs-special,.hljs-prompt{color:#2b91af}.hljs-phpdoc,.hljs-javadoc,.hljs-xmlDocTag{color:gray}.vhdl .hljs-typename{font-weight:bold}.vhdl .hljs-string{color:#666}.vhdl .hljs-literal{color:#a31515}.vhdl .hljs-attribute{color:#00b0e8}.xml .hljs-attribute{color:red}ul.tsd-descriptions>li>:first-child,.tsd-panel>:first-child,.col>:first-child,.col-11>:first-child,.col-10>:first-child,.col-9>:first-child,.col-8>:first-child,.col-7>:first-child,.col-6>:first-child,.col-5>:first-child,.col-4>:first-child,.col-3>:first-child,.col-2>:first-child,.col-1>:first-child,ul.tsd-descriptions>li>:first-child>:first-child,.tsd-panel>:first-child>:first-child,.col>:first-child>:first-child,.col-11>:first-child>:first-child,.col-10>:first-child>:first-child,.col-9>:first-child>:first-child,.col-8>:first-child>:first-child,.col-7>:first-child>:first-child,.col-6>:first-child>:first-child,.col-5>:first-child>:first-child,.col-4>:first-child>:first-child,.col-3>:first-child>:first-child,.col-2>:first-child>:first-child,.col-1>:first-child>:first-child,ul.tsd-descriptions>li>:first-child>:first-child>:first-child,.tsd-panel>:first-child>:first-child>:first-child,.col>:first-child>:first-child>:first-child,.col-11>:first-child>:first-child>:first-child,.col-10>:first-child>:first-child>:first-child,.col-9>:first-child>:first-child>:first-child,.col-8>:first-child>:first-child>:first-child,.col-7>:first-child>:first-child>:first-child,.col-6>:first-child>:first-child>:first-child,.col-5>:first-child>:first-child>:first-child,.col-4>:first-child>:first-child>:first-child,.col-3>:first-child>:first-child>:first-child,.col-2>:first-child>:first-child>:first-child,.col-1>:first-child>:first-child>:first-child{margin-top:0}ul.tsd-descriptions>li>:last-child,.tsd-panel>:last-child,.col>:last-child,.col-11>:last-child,.col-10>:last-child,.col-9>:last-child,.col-8>:last-child,.col-7>:last-child,.col-6>:last-child,.col-5>:last-child,.col-4>:last-child,.col-3>:last-child,.col-2>:last-child,.col-1>:last-child,ul.tsd-descriptions>li>:last-child>:last-child,.tsd-panel>:last-child>:last-child,.col>:last-child>:last-child,.col-11>:last-child>:last-child,.col-10>:last-child>:last-child,.col-9>:last-child>:last-child,.col-8>:last-child>:last-child,.col-7>:last-child>:last-child,.col-6>:last-child>:last-child,.col-5>:last-child>:last-child,.col-4>:last-child>:last-child,.col-3>:last-child>:last-child,.col-2>:last-child>:last-child,.col-1>:last-child>:last-child,ul.tsd-descriptions>li>:last-child>:last-child>:last-child,.tsd-panel>:last-child>:last-child>:last-child,.col>:last-child>:last-child>:last-child,.col-11>:last-child>:last-child>:last-child,.col-10>:last-child>:last-child>:last-child,.col-9>:last-child>:last-child>:last-child,.col-8>:last-child>:last-child>:last-child,.col-7>:last-child>:last-child>:last-child,.col-6>:last-child>:last-child>:last-child,.col-5>:last-child>:last-child>:last-child,.col-4>:last-child>:last-child>:last-child,.col-3>:last-child>:last-child>:last-child,.col-2>:last-child>:last-child>:last-child,.col-1>:last-child>:last-child>:last-child{margin-bottom:0}.container{max-width:1200px;margin:0 auto;padding:0 40px}@media(max-width: 640px){.container{padding:0 20px}}.container-main{padding-bottom:200px}.row{position:relative;margin:0 -10px}.row:after{visibility:hidden;display:block;content:"";clear:both;height:0}.col,.col-11,.col-10,.col-9,.col-8,.col-7,.col-6,.col-5,.col-4,.col-3,.col-2,.col-1{box-sizing:border-box;float:left;padding:0 10px}.col-1{width:8.3333333333%}.offset-1{margin-left:8.3333333333%}.col-2{width:16.6666666667%}.offset-2{margin-left:16.6666666667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.3333333333%}.offset-4{margin-left:33.3333333333%}.col-5{width:41.6666666667%}.offset-5{margin-left:41.6666666667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.3333333333%}.offset-7{margin-left:58.3333333333%}.col-8{width:66.6666666667%}.offset-8{margin-left:66.6666666667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.3333333333%}.offset-10{margin-left:83.3333333333%}.col-11{width:91.6666666667%}.offset-11{margin-left:91.6666666667%}@media(min-width: 1300px){.col-1{width:100px}.offset-1{margin-left:100px}.col-2{width:200px}.offset-2{margin-left:200px}.col-3{width:300px}.offset-3{margin-left:300px}.col-4{width:400px}.offset-4{margin-left:400px}.col-5{width:500px}.offset-5{margin-left:500px}.col-6{width:600px}.offset-6{margin-left:600px}.col-7{width:700px}.offset-7{margin-left:700px}.col-8{width:800px}.offset-8{margin-left:800px}.col-9{width:900px}.offset-9{margin-left:900px}.col-10{width:1000px}.offset-10{margin-left:1000px}.col-11{width:1100px}.offset-11{margin-left:1100px}}.tsd-kind-icon{display:block;position:relative;padding-left:20px;text-indent:-20px}.tsd-kind-icon:before{content:"";display:inline-block;vertical-align:middle;width:17px;height:17px;margin:0 3px 2px 0;background-image:url(../images/icons.png)}@media(-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5),(min-resolution: 144dpi){.tsd-kind-icon:before{background-image:url(../images/icons@2x.png);background-size:238px 204px}}.tsd-signature.tsd-kind-icon:before{background-position:0 -153px}.tsd-kind-object-literal>.tsd-kind-icon:before{background-position:0px -17px}.tsd-kind-object-literal.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -17px}.tsd-kind-object-literal.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -17px}.tsd-kind-class>.tsd-kind-icon:before{background-position:0px -34px}.tsd-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -34px}.tsd-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -34px}.tsd-kind-class.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:0px -51px}.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -51px}.tsd-kind-class.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -51px}.tsd-kind-interface>.tsd-kind-icon:before{background-position:0px -68px}.tsd-kind-interface.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -68px}.tsd-kind-interface.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -68px}.tsd-kind-interface.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:0px -85px}.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -85px}.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -85px}.tsd-kind-module>.tsd-kind-icon:before{background-position:0px -102px}.tsd-kind-module.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -102px}.tsd-kind-module.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -102px}.tsd-kind-external-module>.tsd-kind-icon:before{background-position:0px -102px}.tsd-kind-external-module.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -102px}.tsd-kind-external-module.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -102px}.tsd-kind-enum>.tsd-kind-icon:before{background-position:0px -119px}.tsd-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -119px}.tsd-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -119px}.tsd-kind-enum-member>.tsd-kind-icon:before{background-position:0px -136px}.tsd-kind-enum-member.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -136px}.tsd-kind-enum-member.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -136px}.tsd-kind-signature>.tsd-kind-icon:before{background-position:0px -153px}.tsd-kind-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -153px}.tsd-kind-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -153px}.tsd-kind-type-alias>.tsd-kind-icon:before{background-position:0px -170px}.tsd-kind-type-alias.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -170px}.tsd-kind-type-alias.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -170px}.tsd-kind-type-alias.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:0px -187px}.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-17px -187px}.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-34px -187px}.tsd-kind-variable>.tsd-kind-icon:before{background-position:-136px -0px}.tsd-kind-variable.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -0px}.tsd-kind-variable.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-variable.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -0px}.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-variable.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -0px}.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -0px}.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-variable.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -0px}.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -0px}.tsd-kind-property>.tsd-kind-icon:before{background-position:-136px -0px}.tsd-kind-property.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -0px}.tsd-kind-property.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-property.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -0px}.tsd-kind-property.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-property.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -0px}.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -0px}.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -0px}.tsd-kind-property.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -0px}.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -0px}.tsd-kind-get-signature>.tsd-kind-icon:before{background-position:-136px -17px}.tsd-kind-get-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -17px}.tsd-kind-get-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -17px}.tsd-kind-get-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -17px}.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -17px}.tsd-kind-get-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -17px}.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -17px}.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -17px}.tsd-kind-get-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -17px}.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -17px}.tsd-kind-set-signature>.tsd-kind-icon:before{background-position:-136px -34px}.tsd-kind-set-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -34px}.tsd-kind-set-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -34px}.tsd-kind-set-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -34px}.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -34px}.tsd-kind-set-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -34px}.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -34px}.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -34px}.tsd-kind-set-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -34px}.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -34px}.tsd-kind-accessor>.tsd-kind-icon:before{background-position:-136px -51px}.tsd-kind-accessor.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -51px}.tsd-kind-accessor.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -51px}.tsd-kind-accessor.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -51px}.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -51px}.tsd-kind-accessor.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -51px}.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -51px}.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -51px}.tsd-kind-accessor.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -51px}.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -51px}.tsd-kind-function>.tsd-kind-icon:before{background-position:-136px -68px}.tsd-kind-function.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -68px}.tsd-kind-function.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-function.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -68px}.tsd-kind-function.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-function.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -68px}.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -68px}.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-function.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -68px}.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -68px}.tsd-kind-method>.tsd-kind-icon:before{background-position:-136px -68px}.tsd-kind-method.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -68px}.tsd-kind-method.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-method.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -68px}.tsd-kind-method.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-method.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -68px}.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -68px}.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-method.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -68px}.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -68px}.tsd-kind-call-signature>.tsd-kind-icon:before{background-position:-136px -68px}.tsd-kind-call-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -68px}.tsd-kind-call-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-call-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -68px}.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-call-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -68px}.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -68px}.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -68px}.tsd-kind-call-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -68px}.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -68px}.tsd-kind-function.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:-136px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -85px}.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -85px}.tsd-kind-method.tsd-has-type-parameter>.tsd-kind-icon:before{background-position:-136px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -85px}.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -85px}.tsd-kind-constructor>.tsd-kind-icon:before{background-position:-136px -102px}.tsd-kind-constructor.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -102px}.tsd-kind-constructor.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -102px}.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -102px}.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -102px}.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -102px}.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -102px}.tsd-kind-constructor-signature>.tsd-kind-icon:before{background-position:-136px -102px}.tsd-kind-constructor-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -102px}.tsd-kind-constructor-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -102px}.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -102px}.tsd-kind-index-signature>.tsd-kind-icon:before{background-position:-136px -119px}.tsd-kind-index-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -119px}.tsd-kind-index-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -119px}.tsd-kind-index-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -119px}.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -119px}.tsd-kind-index-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -119px}.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -119px}.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -119px}.tsd-kind-index-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -119px}.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -119px}.tsd-kind-event>.tsd-kind-icon:before{background-position:-136px -136px}.tsd-kind-event.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -136px}.tsd-kind-event.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -136px}.tsd-kind-event.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -136px}.tsd-kind-event.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -136px}.tsd-kind-event.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -136px}.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -136px}.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -136px}.tsd-kind-event.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -136px}.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -136px}.tsd-is-static>.tsd-kind-icon:before{background-position:-136px -153px}.tsd-is-static.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -153px}.tsd-is-static.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -153px}.tsd-is-static.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -153px}.tsd-is-static.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -153px}.tsd-is-static.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -153px}.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -153px}.tsd-is-static.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -153px}.tsd-is-static.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -153px}.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -153px}.tsd-is-static.tsd-kind-function>.tsd-kind-icon:before{background-position:-136px -170px}.tsd-is-static.tsd-kind-function.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -170px}.tsd-is-static.tsd-kind-function.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -170px}.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -170px}.tsd-is-static.tsd-kind-method>.tsd-kind-icon:before{background-position:-136px -170px}.tsd-is-static.tsd-kind-method.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -170px}.tsd-is-static.tsd-kind-method.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -170px}.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -170px}.tsd-is-static.tsd-kind-call-signature>.tsd-kind-icon:before{background-position:-136px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -170px}.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -170px}.tsd-is-static.tsd-kind-event>.tsd-kind-icon:before{background-position:-136px -187px}.tsd-is-static.tsd-kind-event.tsd-is-protected>.tsd-kind-icon:before{background-position:-153px -187px}.tsd-is-static.tsd-kind-event.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class>.tsd-kind-icon:before{background-position:-51px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited>.tsd-kind-icon:before{background-position:-68px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected>.tsd-kind-icon:before{background-position:-85px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited>.tsd-kind-icon:before{background-position:-102px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum>.tsd-kind-icon:before{background-position:-170px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected>.tsd-kind-icon:before{background-position:-187px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private>.tsd-kind-icon:before{background-position:-119px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface>.tsd-kind-icon:before{background-position:-204px -187px}.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited>.tsd-kind-icon:before{background-position:-221px -187px}.no-transition{transition:none !important}@keyframes fade-in{from{opacity:0}to{opacity:1}}@keyframes fade-out{from{opacity:1;visibility:visible}to{opacity:0}}@keyframes fade-in-delayed{0%{opacity:0}33%{opacity:0}100%{opacity:1}}@keyframes fade-out-delayed{0%{opacity:1;visibility:visible}66%{opacity:0}100%{opacity:0}}@keyframes shift-to-left{from{transform:translate(0, 0)}to{transform:translate(-25%, 0)}}@keyframes unshift-to-left{from{transform:translate(-25%, 0)}to{transform:translate(0, 0)}}@keyframes pop-in-from-right{from{transform:translate(100%, 0)}to{transform:translate(0, 0)}}@keyframes pop-out-to-right{from{transform:translate(0, 0);visibility:visible}to{transform:translate(100%, 0)}}body{background:#fdfdfd;font-family:"Segoe UI",sans-serif;font-size:16px;color:#222}a{color:#00796b;text-decoration:none}a:hover{text-decoration:underline}code,pre{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:.2em;margin:0;font-size:14px;background-color:rgba(0,0,0,.04)}pre{padding:10px}pre code{padding:0;font-size:100%;background-color:transparent}.tsd-typography{line-height:2em}.tsd-typography ul{list-style:square;padding:0 0 0 20px;margin:0}.tsd-typography h4,.tsd-typography .tsd-index-panel h3,.tsd-index-panel .tsd-typography h3,.tsd-typography h5,.tsd-typography h6{font-size:1em;margin:0}.tsd-typography h5,.tsd-typography h6{font-weight:normal}.tsd-typography p,.tsd-typography ul,.tsd-typography ol{margin:1em 0}@media(min-width: 901px)and (max-width: 1024px){html.default .col-content{width:72%}html.default .col-menu{width:28%}html.default .tsd-navigation{padding-left:10px}}@media(max-width: 900px){html.default .col-content{float:none;width:100%}html.default .col-menu{position:fixed !important;overflow:auto;-webkit-overflow-scrolling:touch;overflow-scrolling:touch;z-index:1024;top:0 !important;bottom:0 !important;left:auto !important;right:0 !important;width:100%;padding:20px 20px 0 0;max-width:450px;visibility:hidden;background-color:#fff;transform:translate(100%, 0)}html.default .col-menu>*:last-child{padding-bottom:20px}html.default .overlay{content:"";display:block;position:fixed;z-index:1023;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.75);visibility:hidden}html.default.to-has-menu .overlay{animation:fade-in .4s}html.default.to-has-menu header,html.default.to-has-menu footer,html.default.to-has-menu .col-content{animation:shift-to-left .4s}html.default.to-has-menu .col-menu{animation:pop-in-from-right .4s}html.default.from-has-menu .overlay{animation:fade-out .4s}html.default.from-has-menu header,html.default.from-has-menu footer,html.default.from-has-menu .col-content{animation:unshift-to-left .4s}html.default.from-has-menu .col-menu{animation:pop-out-to-right .4s}html.default.has-menu body{overflow:hidden}html.default.has-menu .overlay{visibility:visible}html.default.has-menu header,html.default.has-menu footer,html.default.has-menu .col-content{transform:translate(-25%, 0)}html.default.has-menu .col-menu{visibility:visible;transform:translate(0, 0)}}.tsd-page-title{padding:70px 0 20px 0;margin:0 0 40px 0;background:#fff;box-shadow:0 0 5px rgba(0,0,0,.35)}.tsd-page-title h1{margin:0}.tsd-breadcrumb{margin:0;padding:0;color:gray}.tsd-breadcrumb a{color:gray;text-decoration:none}.tsd-breadcrumb a:hover{text-decoration:underline}.tsd-breadcrumb li{display:inline}.tsd-breadcrumb li:after{content:" / "}html.minimal .container{margin:0}html.minimal .container-main{padding-top:50px;padding-bottom:0}html.minimal .content-wrap{padding-left:300px}html.minimal .tsd-navigation{position:fixed !important;overflow:auto;-webkit-overflow-scrolling:touch;overflow-scrolling:touch;box-sizing:border-box;z-index:1;left:0;top:40px;bottom:0;width:300px;padding:20px;margin:0}html.minimal .tsd-member .tsd-member{margin-left:0}html.minimal .tsd-page-toolbar{position:fixed;z-index:2}html.minimal #tsd-filter .tsd-filter-group{right:0;transform:none}html.minimal footer{background-color:transparent}html.minimal footer .container{padding:0}html.minimal .tsd-generator{padding:0}@media(max-width: 900px){html.minimal .tsd-navigation{display:none}html.minimal .content-wrap{padding-left:0}}dl.tsd-comment-tags{overflow:hidden}dl.tsd-comment-tags dt{float:left;padding:1px 5px;margin:0 10px 0 0;border-radius:4px;border:1px solid gray;color:gray;font-size:.8em;font-weight:normal}dl.tsd-comment-tags dd{margin:0 0 10px 0}dl.tsd-comment-tags dd:before,dl.tsd-comment-tags dd:after{display:table;content:" "}dl.tsd-comment-tags dd pre,dl.tsd-comment-tags dd:after{clear:both}dl.tsd-comment-tags p{margin:0}.tsd-panel.tsd-comment .lead{font-size:1.1em;line-height:2em;margin-bottom:2em}.tsd-panel.tsd-comment .lead:last-child{margin-bottom:0}.toggle-protected .tsd-is-private{display:none}.toggle-public .tsd-is-private,.toggle-public .tsd-is-protected,.toggle-public .tsd-is-private-protected{display:none}.toggle-inherited .tsd-is-inherited{display:none}.toggle-only-exported .tsd-is-not-exported{display:none}.toggle-externals .tsd-is-external{display:none}#tsd-filter{position:relative;display:inline-block;height:40px;vertical-align:bottom}.no-filter #tsd-filter{display:none}#tsd-filter .tsd-filter-group{display:inline-block;height:40px;vertical-align:bottom;white-space:nowrap}#tsd-filter input{display:none}@media(max-width: 900px){#tsd-filter .tsd-filter-group{display:block;position:absolute;top:40px;right:20px;height:auto;background-color:#fff;visibility:hidden;transform:translate(50%, 0);box-shadow:0 0 4px rgba(0,0,0,.25)}.has-options #tsd-filter .tsd-filter-group{visibility:visible}.to-has-options #tsd-filter .tsd-filter-group{animation:fade-in .2s}.from-has-options #tsd-filter .tsd-filter-group{animation:fade-out .2s}#tsd-filter label,#tsd-filter .tsd-select{display:block;padding-right:20px}}footer{border-top:1px solid #eee;background-color:#fff}footer.with-border-bottom{border-bottom:1px solid #eee}footer .tsd-legend-group{font-size:0}footer .tsd-legend{display:inline-block;width:25%;padding:0;font-size:16px;list-style:none;line-height:2em;vertical-align:top}@media(max-width: 900px){footer .tsd-legend{width:50%}}.tsd-hierarchy{list-style:square;padding:0 0 0 20px;margin:0}.tsd-hierarchy .target{font-weight:bold}.tsd-index-panel .tsd-index-content{margin-bottom:-30px !important}.tsd-index-panel .tsd-index-section{margin-bottom:30px !important}.tsd-index-panel h3{margin:0 -20px 10px -20px;padding:0 20px 10px 20px;border-bottom:1px solid #eee}.tsd-index-panel ul.tsd-index-list{padding:0;list-style:none;line-height:2em;font-size:13px}.tsd-index-panel ul.tsd-index-list li{-webkit-column-break-inside:avoid;-moz-column-break-inside:avoid;-ms-column-break-inside:avoid;-o-column-break-inside:avoid;column-break-inside:avoid;-webkit-page-break-inside:avoid;-moz-page-break-inside:avoid;-ms-page-break-inside:avoid;-o-page-break-inside:avoid;page-break-inside:avoid}.tsd-index-panel a,.tsd-index-panel .tsd-parent-kind-module a{color:#00796b}.tsd-index-panel .tsd-parent-kind-interface a{color:#00796b}.tsd-index-panel .tsd-parent-kind-enum a{color:#00796b}.tsd-index-panel .tsd-parent-kind-class a{color:#00796b}.tsd-index-panel .tsd-kind-module a{color:#00796b}.tsd-index-panel .tsd-kind-interface a{color:#00796b}.tsd-index-panel .tsd-kind-enum a{color:#00796b}.tsd-index-panel .tsd-kind-class a{color:#00796b}.tsd-index-panel .tsd-is-private a{color:gray}@media screen and (max-width: 900px){ul.tsd-index-list{overflow:auto}.container-main .offset-3{width:0px}}.tsd-flag{display:inline-block;padding:1px 5px;border-radius:4px;color:#fff;background-color:gray;text-indent:0;font-size:14px;font-weight:normal}.tsd-anchor{position:absolute;top:-100px}.tsd-member{position:relative}.tsd-member .tsd-anchor+h3{margin-top:0;margin-bottom:0;border-bottom:none}.tsd-navigation{padding:0 0 0 0;height:calc(100vh - 260px);overflow-y:auto}.tsd-navigation a{display:block;padding-top:2px;padding-bottom:2px;border-left:2px solid transparent;color:#222;text-decoration:none;transition:border-left-color .1s;font-size:13px;word-break:break-word;margin-left:1em}.tsd-navigation a:hover{color:blue}.tsd-navigation ul{margin:0;padding:0;list-style:none}.tsd-navigation li{padding:0}.tsd-navigation div{font-size:13px}.tsd-navigation.primary{padding-bottom:40px}.tsd-navigation.primary a,.tsd-navigation.primary div{display:block;height:29px;line-height:29px;box-sizing:border-box;font-size:14px;padding:0}.tsd-navigation.primary a.selected{font-weight:bold}.tsd-navigation.primary ul li a{padding-left:5px}.tsd-navigation.primary ul li li a{padding-left:25px}.tsd-navigation.primary ul li li li a{padding-left:45px}.tsd-navigation.primary ul li li li li a{padding-left:65px}.tsd-navigation.primary ul li li li li li a{padding-left:85px}.tsd-navigation.primary ul li li li li li li a{padding-left:105px}.tsd-navigation.primary>ul{border-bottom:1px solid #eee}.tsd-navigation.primary li{border-top:1px solid #eee}.tsd-navigation.primary li.current>a{font-weight:bold}.tsd-navigation.primary li.label span{display:block;padding:20px 0 6px 5px;color:gray}.tsd-navigation.primary li.globals+li>span,.tsd-navigation.primary li.globals+li>a{padding-top:20px}.tsd-navigation.secondary ul{transition:opacity .2s}.tsd-navigation.secondary ul li a{padding-left:25px}.tsd-navigation.secondary ul li li a{padding-left:45px}.tsd-navigation.secondary ul li li li a{padding-left:65px}.tsd-navigation.secondary ul li li li li a{padding-left:85px}.tsd-navigation.secondary ul li li li li li a{padding-left:105px}.tsd-navigation.secondary ul li li li li li li a{padding-left:125px}.tsd-navigation.secondary ul.current a{border-left-color:#eee}.tsd-navigation.secondary li.focus>a,.tsd-navigation.secondary ul.current li.focus>a{border-left-color:#000}.tsd-navigation.secondary li.current{margin-top:20px;margin-bottom:20px;border-left-color:#eee}.tsd-navigation.secondary li.current>a{font-weight:bold}@media(min-width: 901px){.menu-sticky-wrap{position:static}.no-csspositionsticky .menu-sticky-wrap.sticky{position:fixed}.no-csspositionsticky .menu-sticky-wrap.sticky-current{position:fixed}.no-csspositionsticky .menu-sticky-wrap.sticky-current ul.before-current,.no-csspositionsticky .menu-sticky-wrap.sticky-current ul.after-current{opacity:0}.no-csspositionsticky .menu-sticky-wrap.sticky-bottom{position:absolute;top:auto !important;left:auto !important;bottom:0;right:0}.csspositionsticky .menu-sticky-wrap.sticky{position:-webkit-sticky;position:sticky}.csspositionsticky .menu-sticky-wrap.sticky-current{position:-webkit-sticky;position:sticky}}.col-menu{position:fixed;top:120px}.secondary-menu{margin-left:calc(83% - 50px);overflow-y:auto}@media(min-width: 1300px){.secondary-menu{margin-left:1000px}}.root>ul>.tsd-parent-kind-class{margin-left:16px}.root>ul>.tsd-kind-constructor:before{content:"Constructors";font-size:13px;margin-left:24px}.root>ul>.tsd-kind-constructor~.tsd-kind-constructor::before{content:none}.root>ul>.tsd-kind-property:before{content:"Properties";font-size:13px;margin-left:24px}.root>ul>.tsd-kind-property~.tsd-kind-property::before{content:none}.root>ul>.tsd-kind-get-signature:before{content:"Accessors";font-size:13px;margin-left:24px}.root>ul>.tsd-kind-get-signature~.tsd-kind-get-signature::before{content:none}.root>ul>.tsd-kind-method:before{content:"Methods";font-size:13px;margin-left:24px}.root>ul>.tsd-kind-method~.tsd-kind-method::before{content:none}.root.tsd-kind-class:before{content:"Classes";font-size:13px}.root.tsd-kind-class~.tsd-kind-class::before{content:none}.root.tsd-kind-interface:before{content:"Interfaces";font-size:13px}.root.tsd-kind-interface~.tsd-kind-interface::before{content:none}.root.tsd-kind-type-alias:before{content:"Types";font-size:13px}.root.tsd-kind-type-alias~.tsd-kind-type-alias::before{content:none}.root.tsd-kind-function:before{content:"Functions";font-size:13px}.root.tsd-kind-function~.tsd-kind-function::before{content:none}.tsd-panel{margin:20px 0;padding:20px;background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.25)}.tsd-panel:empty{display:none}.tsd-panel>h1,.tsd-panel>h2,.tsd-panel>h3{margin:1.5em -20px 10px -20px;padding:0 20px 10px 20px;border-bottom:1px solid #eee}.tsd-panel>h1.tsd-before-signature,.tsd-panel>h2.tsd-before-signature,.tsd-panel>h3.tsd-before-signature{margin-bottom:0;border-bottom:0}.tsd-panel table{display:block;width:100%;overflow:auto;margin-top:10px;word-break:normal;word-break:keep-all}.tsd-panel table th{font-weight:bold}.tsd-panel table th,.tsd-panel table td{padding:6px 13px;border:1px solid #ddd}.tsd-panel table tr{background-color:#fff;border-top:1px solid #ccc}.tsd-panel table tr:nth-child(2n){background-color:#f8f8f8}.tsd-panel-group{margin:60px 0}.tsd-panel-group>h1,.tsd-panel-group>h2,.tsd-panel-group>h3{padding-left:20px;padding-right:20px}#tsd-search{transition:background-color .2s}#tsd-search .title{position:relative;z-index:2}#tsd-search .field{position:absolute;left:0;top:0;right:40px;height:40px}#tsd-search .field input{box-sizing:border-box;position:relative;top:-50px;z-index:1;width:100%;padding:0 10px;opacity:0;outline:0;border:0;background:transparent;color:#222}#tsd-search .field label{position:absolute;overflow:hidden;right:-40px}#tsd-search .field input,#tsd-search .title{transition:opacity .2s}#tsd-search .results{position:absolute;visibility:hidden;top:40px;width:100%;margin:0;padding:0;list-style:none;box-shadow:0 0 4px rgba(0,0,0,.25)}#tsd-search .results li{padding:0 10px;background-color:#fdfdfd}#tsd-search .results li:nth-child(even){background-color:#fff}#tsd-search .results li.state{display:none}#tsd-search .results li.current,#tsd-search .results li:hover{background-color:#eee}#tsd-search .results a{display:block}#tsd-search .results a:before{top:10px}#tsd-search .results span.parent{color:gray;font-weight:normal}#tsd-search.has-focus{background-color:#eee}#tsd-search.has-focus .field input{top:0;opacity:1}#tsd-search.has-focus .title{z-index:0;opacity:0}#tsd-search.has-focus .results{visibility:visible}#tsd-search.loading .results li.state.loading{display:block}#tsd-search.failure .results li.state.failure{display:block}.low-priority a,.low-priority span{color:#999 !important;font-size:10pt}.tsd-signature{margin:0 0 1em 0;padding:10px;border:1px solid #eee;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:14px}.tsd-signature.tsd-kind-icon{padding-left:30px}.tsd-signature.tsd-kind-icon:before{top:10px;left:10px}.tsd-panel>.tsd-signature{margin-left:-20px;margin-right:-20px;border-width:1px 0}.tsd-panel>.tsd-signature.tsd-kind-icon{padding-left:40px}.tsd-panel>.tsd-signature.tsd-kind-icon:before{left:20px}.tsd-signature-symbol{color:gray;font-weight:normal}.tsd-signature-type{font-style:italic;font-weight:normal}.tsd-signatures{padding:0;margin:0 0 1em 0;border:1px solid #eee}.tsd-signatures .tsd-signature{margin:0;border-width:1px 0 0 0;transition:background-color .1s}.tsd-signatures .tsd-signature:first-child{border-top-width:0}.tsd-signatures .tsd-signature.current{background-color:#eee}.tsd-signatures.active>.tsd-signature{cursor:pointer}.tsd-panel>.tsd-signatures{margin-left:-20px;margin-right:-20px;border-width:1px 0}.tsd-panel>.tsd-signatures .tsd-signature.tsd-kind-icon{padding-left:40px}.tsd-panel>.tsd-signatures .tsd-signature.tsd-kind-icon:before{left:20px}.tsd-panel>a.anchor+.tsd-signatures{border-top-width:0;margin-top:-20px}ul.tsd-descriptions{position:relative;overflow:hidden;transition:height .3s;padding:0;list-style:none}ul.tsd-descriptions.active>.tsd-description{display:none}ul.tsd-descriptions.active>.tsd-description.current{display:block}ul.tsd-descriptions.active>.tsd-description.fade-in{animation:fade-in-delayed .3s}ul.tsd-descriptions.active>.tsd-description.fade-out{animation:fade-out-delayed .3s;position:absolute;display:block;top:0;left:0;right:0;opacity:0;visibility:hidden}ul.tsd-descriptions h4,ul.tsd-descriptions .tsd-index-panel h3,.tsd-index-panel ul.tsd-descriptions h3{font-size:16px;margin:1em 0 .5em 0}ul.tsd-parameters,ul.tsd-type-parameters{list-style:square;margin:0;padding-left:20px}ul.tsd-parameters>li.tsd-parameter-siganture,ul.tsd-type-parameters>li.tsd-parameter-siganture{list-style:none;margin-left:-20px}ul.tsd-parameters h5,ul.tsd-type-parameters h5{font-size:16px;margin:1em 0 .5em 0}ul.tsd-parameters .tsd-comment,ul.tsd-type-parameters .tsd-comment{margin-top:-0.5em}.tsd-sources{font-size:14px;color:gray;margin:0 0 1em 0}.tsd-sources a{color:gray;text-decoration:underline}.tsd-sources ul,.tsd-sources p{margin:0 !important}.tsd-sources ul{list-style:none;padding:0}.tsd-page-toolbar{position:absolute;z-index:1;top:0;left:0;width:100%;height:40px;color:#333;background:#fff;border-bottom:1px solid #eee}.tsd-page-toolbar a{color:#333;text-decoration:none}.tsd-page-toolbar a.title{font-weight:bold}.tsd-page-toolbar a.title:hover{text-decoration:underline}.tsd-page-toolbar .table-wrap{display:table;width:100%;height:40px}.tsd-page-toolbar .table-cell{display:table-cell;position:relative;white-space:nowrap;line-height:40px}.tsd-page-toolbar .table-cell:first-child{width:100%}.tsd-select .tsd-select-list li:before,.tsd-select .tsd-select-label:before,.tsd-widget:before{content:"";display:inline-block;width:40px;height:40px;margin:0 -8px 0 0;background-image:url(../images/widgets.png);background-repeat:no-repeat;text-indent:-1024px;vertical-align:bottom}@media(-webkit-min-device-pixel-ratio: 1.5),(min-device-pixel-ratio: 1.5),(min-resolution: 144dpi){.tsd-select .tsd-select-list li:before,.tsd-select .tsd-select-label:before,.tsd-widget:before{background-image:url(../images/widgets@2x.png);background-size:320px 40px}}.tsd-widget{display:inline-block;overflow:hidden;opacity:.6;height:40px;transition:opacity .1s,background-color .2s;vertical-align:bottom;cursor:pointer}.tsd-widget:hover{opacity:.8}.tsd-widget.active{opacity:1;background-color:#eee}.tsd-widget.no-caption{width:40px}.tsd-widget.no-caption:before{margin:0}.tsd-widget.search:before{background-position:0 0}.tsd-widget.menu:before{background-position:-40px 0}.tsd-widget.options:before{background-position:-80px 0}.tsd-widget.options,.tsd-widget.menu{display:none}@media(max-width: 900px){.tsd-widget.options,.tsd-widget.menu{display:inline-block}}input[type=checkbox]+.tsd-widget:before{background-position:-120px 0}input[type=checkbox]:checked+.tsd-widget:before{background-position:-160px 0}.tsd-select{position:relative;display:inline-block;height:40px;transition:opacity .1s,background-color .2s;vertical-align:bottom;cursor:pointer}.tsd-select .tsd-select-label{opacity:.6;transition:opacity .2s}.tsd-select .tsd-select-label:before{background-position:-240px 0}.tsd-select.active .tsd-select-label{opacity:.8}.tsd-select.active .tsd-select-list{visibility:visible;opacity:1;transition-delay:0s}.tsd-select .tsd-select-list{position:absolute;visibility:hidden;top:40px;left:0;margin:0;padding:0;opacity:0;list-style:none;box-shadow:0 0 4px rgba(0,0,0,.25);transition:visibility 0s .2s,opacity .2s}.tsd-select .tsd-select-list li{padding:0 20px 0 0;background-color:#fdfdfd}.tsd-select .tsd-select-list li:before{background-position:40px 0}.tsd-select .tsd-select-list li:nth-child(even){background-color:#fff}.tsd-select .tsd-select-list li:hover{background-color:#eee}.tsd-select .tsd-select-list li.selected:before{background-position:-200px 0}@media(max-width: 900px){.tsd-select .tsd-select-list{top:0;left:auto;right:100%;margin-right:-5px}.tsd-select .tsd-select-label:before{background-position:-280px 0}}@media screen and (max-width: 900px){.tsd-page-toolbar{overflow:auto}.tsd-widget.search.no-caption{right:-80px}#tsd-widgets{padding-left:40px}}img{max-width:100%} diff --git a/docs/assets/css/main.css.map b/docs/assets/css/main.css.map new file mode 100644 index 0000000..0bcbf38 --- /dev/null +++ b/docs/assets/css/main.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../../third_party/src/default/assets/css/vendors/_normalize.sass","../../../../third_party/src/default/assets/css/vendors/_highlight.js.sass","../../../../third_party/src/default/assets/css/setup/_mixins.sass","../../../../third_party/src/default/assets/css/setup/_grid.sass","../../../../third_party/src/default/assets/css/setup/_icons.scss","../../../../third_party/src/default/assets/css/setup/_animations.sass","../../../../third_party/src/default/assets/css/setup/_typography.sass","../../../../third_party/src/default/assets/css/_constants.sass","../../../../third_party/src/default/assets/css/layouts/_default.sass","../../../../third_party/src/default/assets/css/layouts/_minimal.sass","../../../../third_party/src/default/assets/css/elements/_comment.sass","../../../../third_party/src/default/assets/css/elements/_filter.sass","../../../../third_party/src/default/assets/css/elements/_footer.sass","../../../../third_party/src/default/assets/css/elements/_hierarchy.sass","../../../../third_party/src/default/assets/css/elements/_index.sass","../../../../third_party/src/default/assets/css/elements/_member.sass","../../../../third_party/src/default/assets/css/elements/_navigation.sass","../../../../third_party/src/default/assets/css/elements/_panel.sass","../../../../third_party/src/default/assets/css/elements/_search.sass","../../../../third_party/src/default/assets/css/elements/_signatures.sass","../../../../third_party/src/default/assets/css/elements/_sources.sass","../../../../third_party/src/default/assets/css/elements/_toolbar.sass","../../../../third_party/src/default/assets/css/elements/_images.sass"],"names":[],"mappings":"AAAA,4DASA,sFACI,cAKJ,mBACI,qBACA,gBACA,QAMJ,sBACI,aACA,SAMJ,SACI,aAYJ,KACI,eAEA,0BAEA,8BAEA,uBAMJ,6BACI,uBAKJ,KACI,SAUA,QACI,oBACJ,iBACI,UAcR,GACI,cACA,eAEJ,GACI,gBACA,eAEJ,GACI,iBACA,aAEJ,uBACI,cACA,gBAEJ,GACI,gBACA,gBAEJ,GACI,gBACA,gBAKJ,YACI,yBAKJ,SACI,iBAEJ,WACI,gBAKJ,IACI,kBAMJ,GACI,4BACA,uBACA,SAKJ,KACI,gBACA,WAKJ,MACI,aAKJ,kBACI,4BACA,qCACA,cAKJ,IACI,gBACA,qBACA,qBAKJ,EACI,YACA,iBACI,WACA,aAQR,MACI,cAKJ,IACI,cACA,cACA,kBACA,wBAEJ,IACI,cACA,cACA,kBACA,wBACA,WAEJ,IACI,eASJ,cACI,aAEJ,GACI,kBAKJ,WACI,mBAMA,cACI,gBACA,sBAUR,IACI,SAEA,+BAMJ,eACI,gBASJ,YACI,SAYJ,SACI,wBACA,aACA,2BAOJ,OACI,SAEA,UACA,mBAEA,kBASJ,6BACI,eAEA,SAEA,wBAEA,uBAOJ,aACI,mBAQJ,cACI,oBAWJ,+BACI,0BAEA,eAEA,kBAIA,qCACI,0BAEA,eAEA,kBAMR,sCACI,eASA,uCACI,sBAEA,UAEA,aAEA,YAEJ,mBACI,6BAEA,4BACA,+BAEA,uBACA,+FACI,wBAcZ,iDACI,SACA,UAMJ,SACI,cAEA,mBAUJ,MACI,yBACA,iBCnaJ,MACI,qBACA,aACA,gBACA,WAEJ,4GACI,YAEJ,uKACI,WAEJ,eACI,WACA,2BACI,WAER,oFACI,cAEJ,mBACI,cACA,gCACI,cAER,+JACI,cAEJ,qTACI,cAEJ,2CACI,WAGA,qBACI,iBACJ,mBACI,WACJ,oBACI,cACJ,sBACI,cAER,qBACI,UC5BA,s6CAGI,aAEJ,k1CAGI,gBCCR,WACI,iBACA,cACA,eAhCA,yBACI,WAkCA,gBAER,gBACI,qBAEJ,KAEI,kBACA,eDpCA,WACI,kBACA,cACA,WACA,WACA,SCiCR,oFAEI,sBACA,WACA,eAGA,OAEI,oBAEJ,UACI,0BALJ,OAEI,qBAEJ,UACI,2BALJ,OAEI,UAEJ,UACI,gBALJ,OAEI,qBAEJ,UACI,2BALJ,OAEI,qBAEJ,UACI,2BALJ,OAEI,UAEJ,UACI,gBALJ,OAEI,qBAEJ,UACI,2BALJ,OAEI,qBAEJ,UACI,2BALJ,OAEI,UAEJ,UACI,gBALJ,QAEI,qBAEJ,WACI,2BALJ,QAEI,qBAEJ,WACI,2BAER,0BAEQ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,OACI,YAEJ,UACI,kBAJJ,QACI,aAEJ,WACI,mBAJJ,QACI,aAEJ,WACI,oBCnCZ,eACI,cACA,kBACA,kBACA,kBAEA,sBACI,WACA,qBACA,sBACA,WACA,YACA,mBACA,0CF5BJ,mGACI,sBE8BI,6CACA,6BAKZ,oCACI,6BA0BQ,+CACI,8BAGJ,gEACI,gCAGJ,8DACI,gCATJ,sCACI,8BAGJ,uDACI,gCAGJ,qDACI,gCATJ,6DACI,8BAGJ,8EACI,gCAGJ,4EACI,gCATJ,0CACI,8BAGJ,2DACI,gCAGJ,yDACI,gCATJ,iEACI,8BAGJ,kFACI,gCAGJ,gFACI,gCATJ,uCACI,+BAGJ,wDACI,iCAGJ,sDACI,iCATJ,gDACI,+BAGJ,iEACI,iCAGJ,+DACI,iCATJ,qCACI,+BAGJ,sDACI,iCAGJ,oDACI,iCATJ,4CACI,+BAGJ,6DACI,iCAGJ,2DACI,iCATJ,0CACI,+BAGJ,2DACI,iCAGJ,yDACI,iCATJ,2CACI,+BAGJ,4DACI,iCAGJ,0DACI,iCATJ,kEACI,+BAGJ,mFACI,iCAGJ,iFACI,iCAiBJ,yCACI,gCAGJ,0DACI,gCAGJ,wDACI,gCAIA,+DACI,+BAGJ,gFACI,+BAGJ,gFACI,+BAGJ,iGACI,gCAGJ,8EACI,gCAKJ,8DACI,gCAGJ,+EACI,gCAGJ,6EACI,gCAKJ,mEACI,gCAGJ,oFACI,gCAtDR,yCACI,gCAGJ,0DACI,gCAGJ,wDACI,gCAIA,+DACI,+BAGJ,gFACI,+BAGJ,gFACI,+BAGJ,iGACI,gCAGJ,8EACI,gCAKJ,8DACI,gCAGJ,+EACI,gCAGJ,6EACI,gCAKJ,mEACI,gCAGJ,oFACI,gCAtDR,8CACI,iCAGJ,+DACI,iCAGJ,6DACI,iCAIA,oEACI,gCAGJ,qFACI,gCAGJ,qFACI,gCAGJ,sGACI,iCAGJ,mFACI,iCAKJ,mEACI,iCAGJ,oFACI,iCAGJ,kFACI,iCAKJ,wEACI,iCAGJ,yFACI,iCAtDR,8CACI,iCAGJ,+DACI,iCAGJ,6DACI,iCAIA,oEACI,gCAGJ,qFACI,gCAGJ,qFACI,gCAGJ,sGACI,iCAGJ,mFACI,iCAKJ,mEACI,iCAGJ,oFACI,iCAGJ,kFACI,iCAKJ,wEACI,iCAGJ,yFACI,iCAtDR,yCACI,iCAGJ,0DACI,iCAGJ,wDACI,iCAIA,+DACI,gCAGJ,gFACI,gCAGJ,gFACI,gCAGJ,iGACI,iCAGJ,8EACI,iCAKJ,8DACI,iCAGJ,+EACI,iCAGJ,6EACI,iCAKJ,mEACI,iCAGJ,oFACI,iCAtDR,yCACI,iCAGJ,0DACI,iCAGJ,wDACI,iCAIA,+DACI,gCAGJ,gFACI,gCAGJ,gFACI,gCAGJ,iGACI,iCAGJ,8EACI,iCAKJ,8DACI,iCAGJ,+EACI,iCAGJ,6EACI,iCAKJ,mEACI,iCAGJ,oFACI,iCAtDR,uCACI,iCAGJ,wDACI,iCAGJ,sDACI,iCAIA,6DACI,gCAGJ,8EACI,gCAGJ,8EACI,gCAGJ,+FACI,iCAGJ,4EACI,iCAKJ,4DACI,iCAGJ,6EACI,iCAGJ,2EACI,iCAKJ,iEACI,iCAGJ,kFACI,iCAtDR,+CACI,iCAGJ,gEACI,iCAGJ,8DACI,iCAIA,qEACI,gCAGJ,sFACI,gCAGJ,sFACI,gCAGJ,uGACI,iCAGJ,oFACI,iCAKJ,oEACI,iCAGJ,qFACI,iCAGJ,mFACI,iCAKJ,yEACI,iCAGJ,0FACI,iCAtDR,gEACI,iCAGJ,iFACI,iCAGJ,+EACI,iCAIA,sFACI,gCAGJ,uGACI,gCAGJ,uGACI,gCAGJ,wHACI,iCAGJ,qGACI,iCAKJ,qFACI,iCAGJ,sGACI,iCAGJ,oGACI,iCAKJ,0FACI,iCAGJ,2GACI,iCAtDR,8DACI,iCAGJ,+EACI,iCAGJ,6EACI,iCAIA,oFACI,gCAGJ,qGACI,gCAGJ,qGACI,gCAGJ,sHACI,iCAGJ,mGACI,iCAKJ,mFACI,iCAGJ,oGACI,iCAGJ,kGACI,iCAKJ,wFACI,iCAGJ,yGACI,iCAtDR,4CACI,kCAGJ,6DACI,kCAGJ,2DACI,kCAIA,kEACI,iCAGJ,mFACI,iCAGJ,mFACI,iCAGJ,oGACI,kCAGJ,iFACI,kCAKJ,iEACI,kCAGJ,kFACI,kCAGJ,gFACI,kCAKJ,sEACI,kCAGJ,uFACI,kCAtDR,sDACI,kCAGJ,uEACI,kCAGJ,qEACI,kCAIA,4EACI,iCAGJ,6FACI,iCAGJ,6FACI,iCAGJ,8GACI,kCAGJ,2FACI,kCAKJ,2EACI,kCAGJ,4FACI,kCAGJ,0FACI,kCAKJ,gFACI,kCAGJ,iGACI,kCAtDR,gDACI,kCAGJ,iEACI,kCAGJ,+DACI,kCAIA,sEACI,iCAGJ,uFACI,iCAGJ,uFACI,iCAGJ,wGACI,kCAGJ,qFACI,kCAKJ,qEACI,kCAGJ,sFACI,kCAGJ,oFACI,kCAKJ,0EACI,kCAGJ,2FACI,kCAtDR,sCACI,kCAGJ,uDACI,kCAGJ,qDACI,kCAIA,4DACI,iCAGJ,6EACI,iCAGJ,6EACI,iCAGJ,8FACI,kCAGJ,2EACI,kCAKJ,2DACI,kCAGJ,4EACI,kCAGJ,0EACI,kCAKJ,gEACI,kCAGJ,iFACI,kCAtDR,qCACI,kCAGJ,sDACI,kCAGJ,oDACI,kCAIA,2DACI,iCAGJ,4EACI,iCAGJ,4EACI,iCAGJ,6FACI,kCAGJ,0EACI,kCAKJ,0DACI,kCAGJ,2EACI,kCAGJ,yEACI,kCAKJ,+DACI,kCAGJ,gFACI,kCAtDR,uDACI,kCAGJ,wEACI,kCAGJ,sEACI,kCAIA,6EACI,iCAGJ,8FACI,iCAGJ,8FACI,iCAGJ,+GACI,kCAGJ,4FACI,kCAKJ,4EACI,kCAGJ,6FACI,kCAGJ,2FACI,kCAKJ,iFACI,kCAGJ,kGACI,kCAtDR,qDACI,kCAGJ,sEACI,kCAGJ,oEACI,kCAIA,2EACI,iCAGJ,4FACI,iCAGJ,4FACI,iCAGJ,6GACI,kCAGJ,0FACI,kCAKJ,0EACI,kCAGJ,2FACI,kCAGJ,yFACI,kCAKJ,+EACI,kCAGJ,gGACI,kCAtDR,6DACI,kCAGJ,8EACI,kCAGJ,4EACI,kCAIA,mFACI,iCAGJ,oGACI,iCAGJ,oGACI,iCAGJ,qHACI,kCAGJ,kGACI,kCAKJ,kFACI,kCAGJ,mGACI,kCAGJ,iGACI,kCAKJ,uFACI,kCAGJ,wGACI,kCAtDR,oDACI,kCAGJ,qEACI,kCAGJ,mEACI,kCAIA,0EACI,iCAGJ,2FACI,iCAGJ,2FACI,iCAGJ,4GACI,kCAGJ,yFACI,kCAKJ,yEACI,kCAGJ,0FACI,kCAGJ,wFACI,kCAKJ,8EACI,kCAGJ,+FACI,kCChKpB,eACI,2BAEJ,mBACI,KACI,UACJ,GACI,WAER,oBACI,KACI,UACA,mBACJ,GACI,WAER,2BACI,GACI,UACJ,IACI,UACJ,KACI,WAER,4BACI,GACI,UACA,mBACJ,IACI,UACJ,KACI,WAER,yBACI,KACI,0BACJ,GACI,8BAER,2BACI,KACI,6BACJ,GACI,2BAER,6BACI,KACI,6BACJ,GACI,2BAER,4BACI,KACI,0BACA,mBACJ,GACI,8BCxDR,KACI,WCYe,QDXf,kCACA,UCEQ,KDDR,MCUS,KDRb,EACI,MCSS,QDRT,qBAEA,QACI,0BAER,SACI,YCXe,8CDYf,aACA,SACA,UCXa,KDYb,iBCUoB,gBDRxB,IACI,aAEA,SACI,UACA,eACA,6BAER,gBACI,YCrBU,IDuBV,mBACI,kBACA,mBACA,SAEJ,iIACI,cACA,SAEJ,sCACI,mBAEJ,wDACI,aHjCJ,gDKTI,0BACI,UAEJ,uBACI,UAEJ,6BACI,mBLYR,yBKTI,0BACI,WACA,WAEJ,uBACI,0BACA,cACA,iCACA,yBACA,aACA,iBACA,oBACA,qBACA,mBACA,WACA,sBACA,gBACA,kBACA,iBDRE,KCSF,6BAEA,oCACI,oBAER,sBACI,WACA,cACA,eACA,aACA,MACA,OACA,QACA,SACA,iCACA,kBAGA,kCACI,sBAEJ,sGAGI,4BAEJ,mCACI,gCAGJ,oCACI,uBAEJ,4GAGI,8BAEJ,qCACI,+BAGJ,2BACI,gBAEJ,+BACI,mBAEJ,6FAGI,6BAEJ,gCACI,mBACA,2BAEhB,gBACI,sBACA,kBACA,WDrEU,KCsEV,mCAEA,mBACI,SAER,gBACI,SACA,UACA,MDrFe,KCuFf,kBACI,MDxFW,KCyFX,qBAEA,wBACI,0BAER,mBACI,eAEA,yBACI,cChHR,wBACI,SAEJ,6BACI,iBACA,iBAEJ,2BACI,mBAEJ,6BACI,0BACA,cACA,iCACA,yBACA,sBACA,UACA,OACA,SACA,SACA,YACA,aACA,SAEJ,qCACI,cAEJ,+BACI,eACA,UAEJ,2CACI,QACA,eAEJ,oBACI,6BAEA,+BACI,UAER,4BACI,UNtBJ,yBMyBI,6BACI,aACJ,2BACI,gBCtCZ,oBACI,gBAEA,uBACI,WACA,gBACA,kBACA,kBACA,sBACA,MHKY,KGJZ,eACA,mBAEJ,uBACI,kBAEA,2DACI,cACA,YACJ,wDACI,WAER,sBACI,SAYR,6BACI,gBACA,YHxCU,IGyCV,kBAEA,wCACI,gBClDR,kCACI,aAEJ,yGAGI,aAEJ,oCACI,aAEJ,2CACI,aAEJ,mCACI,aAKJ,YACI,kBACA,qBACA,OJaa,KIZb,sBAEA,uBACI,aAEJ,8BACI,qBACA,OJKS,KIJT,sBACA,mBAEJ,kBACI,aRjBJ,yBQoBI,8BACI,cACA,kBACA,IJNK,KIOL,WACA,YACA,iBJzBE,KI0BF,kBACA,4BACA,mCAEA,2CACI,mBAEJ,8CACI,sBAEJ,gDACI,uBAER,0CAEI,cACA,oBChEZ,OACI,0BACA,iBLoBU,KKlBV,0BACI,6BAEJ,yBACI,YAEJ,mBACI,qBACA,UACA,UACA,ULTI,KKUJ,gBACA,YLRM,IKSN,mBTIJ,yBACI,mBSFI,WCHZ,eACI,kBACA,mBACA,SAEA,uBACI,qDCCA,+BAEJ,oCACI,8BAEJ,oBAEI,0BACA,yBACA,6BAEJ,mCACI,UACA,gBACA,YP9BM,IO+BN,eAEA,sCZxCJ,4BYyCQ,MZxCR,yBYwCQ,MZvCR,wBYuCQ,MZtCR,uBYsCQ,MZrCR,oBYqCQ,MZzCR,0BY0CQ,MZzCR,uBYyCQ,MZxCR,sBYwCQ,MZvCR,qBYuCQ,MZtCR,kBYsCQ,MAER,8DAEI,MPjBG,QOmBP,8CACI,MPnBa,QOqBjB,yCACI,MPrBQ,QOuBZ,0CACI,MPvBS,QO0Bb,oCACI,MP9BG,QOgCP,uCACI,MPhCa,QOkCjB,kCACI,MPlCQ,QOoCZ,mCACI,MPpCS,QOsCb,mCACI,MPtCW,KOyCnB,qCACI,kBACI,cAEJ,0BACI,WChFR,UACI,qBACA,gBACA,kBACA,MRsBqB,KQrBrB,iBRoBgB,KQnBhB,cACA,URDa,KQEb,mBAEJ,YACI,kBACA,WAEJ,YACI,kBAEA,2BACI,aACA,gBACA,mBCNR,gBACI,gBAEA,2BACA,gBAEA,kBACI,cACA,gBACA,mBACA,kCACA,MTXK,KSYL,qBACA,iCACA,eACA,sBACA,gBAEA,wBACI,WAER,mBACI,SACA,UACA,gBAEJ,mBACI,UAEJ,oBACI,eAmBR,wBACI,oBAEA,sDACI,cACA,YACA,iBACA,sBACA,eACA,UAEJ,mCACI,iBApEA,gCACI,iBADJ,mCACI,kBADJ,sCACI,kBADJ,yCACI,kBADJ,4CACI,kBADJ,+CACI,mBAwER,2BACI,6BAEJ,2BACI,0BAEA,qCACI,iBAEJ,sCACI,cACA,uBACA,MTxEO,KS0EX,mFAEI,iBA+BR,6BAEI,uBA1HA,kCACI,kBADJ,qCACI,kBADJ,wCACI,kBADJ,2CACI,kBADJ,8CACI,mBADJ,iDACI,mBA2HJ,uCACI,kBT7GU,KS+GlB,qFAEI,kBTrHmB,KSuHvB,qCACI,gBACA,mBACA,kBTtHc,KSwHd,uCACI,iBbtHR,yBACI,kBa4HA,gBAGI,+CACI,eAEJ,uDACI,eAEA,iJAEI,UAER,sDACI,kBACA,oBACA,qBACA,SACA,QAGJ,4CACI,gBAEJ,oDACI,iBAEhB,UACI,eACA,UAEJ,gBACI,6BACA,gBAEJ,0BACI,gBACI,oBAKA,gCACI,iBAKA,sCACI,uBACA,eACA,iBACJ,6DACI,aAGJ,mCACI,qBACA,eACA,iBACJ,uDACI,aAGJ,wCACI,oBACA,eACA,iBACJ,iEACI,aAGJ,iCACI,kBACA,eACA,iBACJ,mDACI,aAGZ,4BACI,kBACA,eACJ,6CACI,aAGJ,gCACI,qBACA,eACJ,qDACI,aAGJ,iCACI,gBACA,eACJ,uDACI,aAGJ,+BACI,oBACA,eACJ,mDACI,aCxPR,WAEI,cACA,aACA,iBVUU,KUTV,mCAEA,iBACI,aAEJ,0CACI,8BACA,yBACA,6BAEA,yGACI,gBACA,gBAER,iBACI,cACA,WACA,cACA,gBACA,kBACA,oBAEA,oBACI,iBAEJ,wCACI,iBACA,sBAEJ,oBACI,sBACA,0BAEA,kCACI,yBAiBhB,iBACI,cAEA,4DACI,kBACA,mBCrER,YACI,gCAEA,mBACI,kBACA,UAEJ,mBACI,kBACA,OACA,MACA,WACA,YAEA,yBACI,sBACA,kBACA,UACA,UACA,WACA,eACA,UACA,UACA,SACA,uBACA,MXXC,KWaL,yBACI,kBACA,gBACA,YAER,4CAEI,uBAEJ,qBACI,kBACA,kBACA,SACA,WACA,SACA,UACA,gBACA,mCAEA,wBACI,eACA,iBXnCO,QWqCX,wCACI,iBX7BE,KW+BN,8BACI,aAEJ,8DAEI,iBXnCU,KWqCd,uBACI,cAEA,8BACI,SAER,iCACI,MXpDO,KWqDP,mBAER,sBACI,iBXhDc,KWkDd,mCACI,MACA,UAEJ,6BACI,UACA,UAEJ,+BACI,mBAER,8CACI,cAEJ,8CACI,cAGJ,mCACI,sBACA,eChFR,eACI,iBACA,aACA,sBACA,YZde,8CYef,UZZa,KYcb,6BACI,kBAEA,oCACI,SACA,UAER,0BACI,kBACA,mBACA,mBAEA,wCACI,kBAEA,+CACI,UAEhB,sBACI,MZxBe,KYyBf,mBAEJ,oBACI,kBACA,mBAYJ,gBACI,UACA,iBACA,sBAEA,+BACI,SACA,uBACA,gCAEA,2CACI,mBAEJ,uCACI,iBZ/CU,KYiDlB,sCACI,eAEJ,2BACI,kBACA,mBACA,mBAEA,wDACI,kBAEA,+DACI,UAEZ,oCACI,mBACA,iBAeR,oBACI,kBACA,gBACA,sBACA,UACA,gBAKA,4CACI,aAEA,oDACI,cAEJ,oDACI,8BAEJ,qDACI,+BACA,kBACA,cACA,MACA,OACA,QACA,UACA,kBAER,uGACI,UZhII,KYiIJ,oBAER,yCAEI,kBACA,SACA,kBAEA,+FACI,gBACA,kBAEJ,+CACI,UZ9II,KY+IJ,oBAEJ,mEACI,kBC9IR,aACI,UbJa,KaKb,MbIe,KaHf,iBAEA,eACI,WACA,0BAEJ,+BACI,oBAEJ,gBACI,gBACA,UCXR,kBACI,kBACA,UACA,MACA,OACA,WACA,OdoBa,KcnBb,MdkBiB,KcjBjB,WdgBY,KcfZ,6BAEA,oBACI,Mdaa,KcZb,qBAEA,0BACI,iBAEJ,gCACI,0BAER,8BACI,cACA,WACA,OdES,mCcCT,mBACA,kBACA,mBACA,YdJS,KcMT,0CACI,WAGR,+FACI,WACA,qBACA,WACA,YACA,kBACA,4CACA,4BACA,oBACA,sBnBzCJ,mGACI,+FmB2CI,+CACA,4BAEZ,YAEI,qBACA,gBACA,WACA,Od9Ba,Kc+Bb,4CACA,sBACA,eAEA,kBACI,WAEJ,mBACI,UACA,iBdvDc,KcyDlB,uBACI,WAEA,8BACI,SAER,0BACI,wBAEJ,wBACI,4BAEJ,2BACI,4BAEJ,qCAEI,alB5EJ,yBACI,qCkB8EI,sBAER,wCACI,6BAEJ,gDACI,6BAER,YACI,kBACA,qBACA,OdzEa,Kc0Eb,4CACA,sBACA,eAEA,8BAEI,WACA,uBAEA,qCACI,6BAGJ,qCACI,WAEJ,oCACI,mBACA,UACA,oBAER,6BACI,kBACA,kBACA,IdlGS,KcmGT,OACA,SACA,UACA,UACA,gBACA,mCACA,yCAEA,gCAEI,mBACA,iBdvIO,QcyIP,uCACI,2BAEJ,gDACI,iBdpIF,KcsIF,sCACI,iBdtIM,KcwIV,gDACI,6BlB3IZ,yBkB8II,6BACI,MACA,UACA,WACA,kBAEJ,qCACI,8BAEZ,qCAEI,kBACI,cAEJ,8BACI,YAEJ,aACI,mBCpLR,IACI","file":"main.css"} \ No newline at end of file diff --git a/docs/assets/images/icons.png b/docs/assets/images/icons.png new file mode 100644 index 0000000..3836d5f Binary files /dev/null and b/docs/assets/images/icons.png differ diff --git a/docs/assets/images/icons@2x.png b/docs/assets/images/icons@2x.png new file mode 100644 index 0000000..5a209e2 Binary files /dev/null and b/docs/assets/images/icons@2x.png differ diff --git a/docs/assets/images/widgets.png b/docs/assets/images/widgets.png new file mode 100644 index 0000000..c738053 Binary files /dev/null and b/docs/assets/images/widgets.png differ diff --git a/docs/assets/images/widgets@2x.png b/docs/assets/images/widgets@2x.png new file mode 100644 index 0000000..4bbbd57 Binary files /dev/null and b/docs/assets/images/widgets@2x.png differ diff --git a/docs/assets/js/main.js b/docs/assets/js/main.js new file mode 100644 index 0000000..542f72b --- /dev/null +++ b/docs/assets/js/main.js @@ -0,0 +1,5 @@ +function arrayToNest(array){for(var _a,_b,res={},i=array.length-1;i>=0;i--)i===array.length-1?(_a={},_a[array[i]]=array[i],res=_a):(_b={},_b[array[i]]=res,res=_b);return res}function mergeRecursive(obj1,obj2){for(var p in obj2)try{obj2[p].constructor===Object?(obj1[p].constructor!==Object&&(obj1[p]={Overview:obj1[p]}),obj1[p]=mergeRecursive(obj1[p],obj2[p])):obj1[p]=obj2[p]}catch(e){obj1[p]=obj2[p]}return obj1}function sanitizeModuleName(moduleName){return moduleName.toLowerCase().replace(/[^a-z0-9]/gi,"_")}function renderSimpleHTMLRecursive(obj,package,spacing){void 0===package&&(package=""),void 0===spacing&&(spacing=" ");for(var html="",shownPackages=[],_i=0,_a=Object.keys(obj);_i<_a.length;_i++){var key=_a[_i];if("object"==typeof obj[key])html+=renderSimpleHTMLRecursive(obj[key],package+"_"+key,spacing+" ");else{-1===shownPackages.indexOf(package)&&(html+="
"+package.replace(/_/g,"/")+"
",shownPackages.push(package));var href="";-1===window.location.href.indexOf("/modules/")&&(href="modules/"),(window.location.href.indexOf("/assets/")>-1||window.location.href.indexOf("/classes/")>-1||window.location.href.indexOf("/enums/")>-1||window.location.href.indexOf("/interfaces/")>-1)&&(href="../modules/"),window.location.href.indexOf("/modules/")>-1&&(href="../modules/"+href),href+=package?"Overview"===key?"_"+sanitizeModuleName(package.substr(1))+"_.html":"_"+sanitizeModuleName(package.substr(1))+"_"+sanitizeModuleName(key)+"_.html":"_"+sanitizeModuleName(key)+"_.html",html+=""+key+""}}return html}function renderHTMLRecursive(obj,package,spacing){void 0===package&&(package=""),void 0===spacing&&(spacing=" ");for(var html="",shownPackages=[],_i=0,_a=Object.keys(obj);_i<_a.length;_i++){var key=_a[_i];if("object"==typeof obj[key])html+=renderHTMLRecursive(obj[key],package+"_"+key,spacing+" ");else{-1===shownPackages.indexOf(package)&&(html+="
"+package.replace(/_/g,"/").substr(1)+"
",shownPackages.push(package));var href="";-1===obj[key].indexOf("/")&&(href="modules/"),(window.location.href.indexOf("/assets/")>-1||window.location.href.indexOf("/classes/")>-1||window.location.href.indexOf("/enums/")>-1||window.location.href.indexOf("/interfaces/")>-1||window.location.href.indexOf("/modules/")>-1)&&(href="../"+href);var pageName=href+obj[key],pageNamePath=pageName.replace("../","")+".html";window.location.href.indexOf(pageNamePath)>-1?html+='"+key+"":html+=""+key+""}}return html}!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function s(a){var b=a.length,c=n.type(a);return"function"!==c&&!n.isWindow(a)&&(!(1!==a.nodeType||!b)||("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a))}function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}function D(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),"string"==typeof(c=a.getAttribute(d))){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c)}catch(e){}M.set(a,b,c)}else c=void 0;return c}function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("')[0] : null; + + if (jsonUrl) { + fetch(this.sasjsConfig.serverUrl + jsonUrl) + .then((res) => res.text()) + .then((resText) => { + resolve(resText); + }); + } else { + reject("No debug info in response"); + } + }); + } + + private async getJobUri(sasJob: string) { + if (!this.sasViyaApiClient) return ""; + const jobMap: any = await this.sasViyaApiClient.getAppLocMap(); + let uri = ""; + + if (jobMap.size) { + const jobKey = sasJob.split("/")[0]; + const jobName = sasJob.split("/")[1]; + + const locJobs = jobMap.get(jobKey); + if (locJobs) { + const job = locJobs.find( + (el: any) => el.name === jobName && el.contentType === "jobDefinition" + ); + if (job) { + uri = job.uri; + } + } + } + return uri; + } + + private parseSAS9Response(response: string) { + let sas9Response = ""; + + if (response.includes(">>weboutBEGIN<<")) { + try { + sas9Response = response + .split(">>weboutBEGIN<<")[1] + .split(">>weboutEND<<")[0]; + } catch (e) { + sas9Response = ""; + console.error(e); + } + } + + return sas9Response; + } + + private parseSAS9ErrorResponse(response: string) { + const logLines = response.split("\n"); + const parsedLines: string[] = []; + let firstErrorLineIndex: number = -1; + + logLines.map((line: string, index: number) => { + if ( + line.toLowerCase().includes("error") && + !line.toLowerCase().includes("this request completed with errors.") && + firstErrorLineIndex === -1 + ) { + firstErrorLineIndex = index; + } + }); + + for (let i = firstErrorLineIndex - 10; i <= firstErrorLineIndex + 10; i++) { + parsedLines.push(logLines[i]); + } + + return parsedLines.join(", "); + } + + private parseLogFromResponse(response: any, program: string) { + if (this.sasjsConfig.serverType === ServerType.SAS9) { + this.appendSasjsRequest(response, program, null); + } else { + if (!this.sasjsConfig.debug) { + this.appendSasjsRequest(null, program, null); + } else { + this.appendSasjsRequest(response, program, null); + } + } + } + + private fetchLogFileContent(logLink: string) { + return new Promise((resolve, reject) => { + fetch(logLink, { + method: "GET", + }) + .then((response: any) => response.text()) + .then((response: any) => resolve(response)) + .catch((err: Error) => reject(err)); + }); + } + + private async appendSasjsRequest( + response: any, + program: string, + pgmData: any + ) { + let sourceCode = ""; + let generatedCode = ""; + let sasWork = null; + + if (response) { + sourceCode = parseSourceCode(response); + generatedCode = parseGeneratedCode(response); + sasWork = await this.parseSasWork(response); + } + + this.sasjsRequests.push({ + logFile: response, + serviceLink: program, + timestamp: new Date(), + sourceCode, + generatedCode, + SASWORK: sasWork, + }); + + if (this.sasjsRequests.length > 20) { + this.sasjsRequests.splice(0, 1); + } + } + + private async parseSasWork(response: any) { + if (this.sasjsConfig.debug) { + let jsonResponse; + + if (this.sasjsConfig.serverType === ServerType.SAS9) { + try { + jsonResponse = JSON.parse(this.parseSAS9Response(response)); + } catch (e) { + console.log(e); + } + } else { + await this.parseSASVIYADebugResponse(response).then( + (resText: any) => { + try { + jsonResponse = JSON.parse(resText); + } catch (e) { + console.log(e); + } + }, + (err: any) => { + console.log(err); + } + ); + } + + if (jsonResponse) { + return jsonResponse.WORK; + } + } + return null; + } + + public getSasRequests() { + const sortedRequests = this.sasjsRequests.sort(compareTimestamps); + return sortedRequests; + } + + private setupConfiguration() { + if ( + this.sasjsConfig.serverUrl === undefined || + this.sasjsConfig.serverUrl === "" + ) { + let url = `${location.protocol}//${location.hostname}`; + if (location.port) { + url = `${url}:${location.port}`; + } + this.sasjsConfig.serverUrl = url; + } + + if (this.sasjsConfig.serverUrl.slice(-1) === "/") { + this.sasjsConfig.serverUrl = this.sasjsConfig.serverUrl.slice(0, -1); + } + + this.jobsPath = + this.sasjsConfig.serverType === ServerType.SASViya + ? this.sasjsConfig.pathSASViya + : this.sasjsConfig.pathSAS9; + this.loginUrl = `${this.sasjsConfig.serverUrl}/SASLogon/login`; + this.logoutUrl = + this.sasjsConfig.serverType === ServerType.SAS9 + ? "/SASLogon/logout?" + : "/SASLogon/logout.do?"; + + if (this.sasjsConfig.serverType === ServerType.SASViya) { + if (this.sasViyaApiClient) + this.sasViyaApiClient!.setConfig( + this.sasjsConfig.serverUrl, + this.sasjsConfig.appLoc + ); + else + this.sasViyaApiClient = new SASViyaApiClient( + this.sasjsConfig.serverUrl, + this.sasjsConfig.appLoc + ); + } + if (this.sasjsConfig.serverType === ServerType.SAS9) { + if (this.sas9ApiClient) + this.sas9ApiClient!.setConfig(this.sasjsConfig.serverUrl); + else this.sas9ApiClient = new SAS9ApiClient(this.sasjsConfig.serverUrl); + } + } + + private setLoginUrl = (matches: RegExpExecArray) => { + let parsedURL = matches[1].replace(/\?.*/, ""); + if (parsedURL[0] === "/") { + parsedURL = parsedURL.substr(1); + + const tempLoginLink = this.sasjsConfig.serverUrl + ? `${this.sasjsConfig.serverUrl}/${parsedURL}` + : `${parsedURL}`; + + const loginUrl = tempLoginLink; + + this.loginUrl = + this.sasjsConfig.serverType === ServerType.SASViya + ? tempLoginLink + : loginUrl.replace(".do", ""); + } + }; + + private async getLoginForm() { + const pattern: RegExp = //; + const response = await fetch(this.loginUrl).then((r) => r.text()); + const matches = pattern.exec(response); + const formInputs: any = {}; + if (matches && matches.length) { + this.setLoginUrl(matches); + const inputs = response.match(/]*>/g); + if (inputs) { + inputs.forEach((inputStr: string) => { + const valueMatch = inputStr.match(/name="([^"]*)"\svalue="([^"]*)/); + if (valueMatch && valueMatch.length) { + formInputs[valueMatch[1]] = valueMatch[2]; + } + }); + } + } + return Object.keys(formInputs).length ? formInputs : null; + } + + private async createFoldersAndServices( + parentFolder: string, + membersJson: any[], + accessToken?: string, + sasApiClient?: SASViyaApiClient + ) { + await asyncForEach(membersJson, async (member: any) => { + switch (member.type) { + case "folder": + await this.createFolder( + member.name, + parentFolder, + undefined, + accessToken, + sasApiClient + ); + break; + case "service": + await this.createJobDefinition( + member.name, + member.code, + parentFolder, + undefined, + accessToken, + sasApiClient + ); + break; + default: + throw new Error(`Unidenitied member present in Json: ${member.name}`); + } + if (member.type === "folder" && member.members && member.members.length) + await this.createFoldersAndServices( + `${parentFolder}/${member.name}`, + member.members, + accessToken, + sasApiClient + ); + }); + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..39459c6 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,5 @@ +import SASjs from "./SASjs"; +export * from "./types"; +export * from "./SASViyaApiClient"; +export * from "./SAS9ApiClient"; +export default SASjs; diff --git a/src/types/Context.ts b/src/types/Context.ts new file mode 100644 index 0000000..c5ca093 --- /dev/null +++ b/src/types/Context.ts @@ -0,0 +1,6 @@ +export interface Context { + name: string; + id: string; + createdBy: string; + version: number; +} diff --git a/src/types/CsrfToken.ts b/src/types/CsrfToken.ts new file mode 100644 index 0000000..7161982 --- /dev/null +++ b/src/types/CsrfToken.ts @@ -0,0 +1,4 @@ +export interface CsrfToken { + headerName: string; + value: string; +} diff --git a/src/types/Folder.ts b/src/types/Folder.ts new file mode 100644 index 0000000..849dc7c --- /dev/null +++ b/src/types/Folder.ts @@ -0,0 +1,7 @@ +import { Link } from "./Link"; + +export interface Folder { + id: string; + uri: string; + links: Link[]; +} diff --git a/src/types/Job.ts b/src/types/Job.ts new file mode 100644 index 0000000..f6b93d9 --- /dev/null +++ b/src/types/Job.ts @@ -0,0 +1,11 @@ +import { Link } from "./Link"; +import { JobResult } from "./JobResult"; + +export interface Job { + id: string; + name: string; + uri: string; + createdBy: string; + links: Link[]; + results: JobResult; +} diff --git a/src/types/JobResult.ts b/src/types/JobResult.ts new file mode 100644 index 0000000..624ac08 --- /dev/null +++ b/src/types/JobResult.ts @@ -0,0 +1,3 @@ +export interface JobResult { + "_webout.json": string; +} diff --git a/src/types/Link.ts b/src/types/Link.ts new file mode 100644 index 0000000..7f8c5a3 --- /dev/null +++ b/src/types/Link.ts @@ -0,0 +1,7 @@ +export interface Link { + method: string; + rel: string; + href: string; + uri: string; + type: string; +} diff --git a/src/types/SASjsConfig.ts b/src/types/SASjsConfig.ts new file mode 100644 index 0000000..ee40745 --- /dev/null +++ b/src/types/SASjsConfig.ts @@ -0,0 +1,30 @@ +import { ServerType } from "./ServerType"; + +/** + * Specifies the configuration for the SASjs instance. + * + */ +export class SASjsConfig { + /** + * The location (including http protocol and port) of the SAS Server. + * Can be omitted, eg if serving directly from the SAS Web Server or being + * streamed. + */ + serverUrl: string = ""; + pathSAS9: string = ""; + pathSASViya: string = ""; + /** + * The appLoc is the parent folder under which the SAS services (STPs or Job + * Execution Services) are stored. + */ + appLoc: string = ""; + /** + * Can be SAS9 or SASVIYA + */ + serverType: ServerType | null = null; + /** + * Set to `true` to enable additional debugging. + */ + debug: boolean = true; + contextName: string = ""; +} diff --git a/src/types/SASjsRequest.ts b/src/types/SASjsRequest.ts new file mode 100644 index 0000000..941b5ec --- /dev/null +++ b/src/types/SASjsRequest.ts @@ -0,0 +1,12 @@ +/** + * Represents a SASjs request, its response and logs. + * + */ +export interface SASjsRequest { + serviceLink: string; + timestamp: Date; + sourceCode: string; + generatedCode: string; + logFile: string; + SASWORK: any; +} diff --git a/src/types/SASjsWaitingRequest.ts b/src/types/SASjsWaitingRequest.ts new file mode 100644 index 0000000..f3c289d --- /dev/null +++ b/src/types/SASjsWaitingRequest.ts @@ -0,0 +1,14 @@ +/** + * Represents requests that are queued, pending a signon event + * + */ +export interface SASjsWaitingRequest { + requestPromise: { + promise: any; + resolve: any; + reject: any; + }; + SASjob: string; + data: any; + params?: any; +} diff --git a/src/types/ServerType.ts b/src/types/ServerType.ts new file mode 100644 index 0000000..21fbc81 --- /dev/null +++ b/src/types/ServerType.ts @@ -0,0 +1,8 @@ +/** + * Server type - Viya or SAS9. + * + */ +export enum ServerType { + SASViya = "SASVIYA", + SAS9 = "SAS9", +} diff --git a/src/types/Session.ts b/src/types/Session.ts new file mode 100644 index 0000000..8734fdf --- /dev/null +++ b/src/types/Session.ts @@ -0,0 +1,3 @@ +export interface Session { + id: string; +} diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..ad95d88 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,10 @@ +export * from "./Context"; +export * from "./CsrfToken"; +export * from "./Folder"; +export * from "./Job"; +export * from "./Link"; +export * from "./SASjsConfig"; +export * from "./SASjsRequest"; +export * from "./SASjsWaitingRequest"; +export * from "./ServerType"; +export * from "./Session"; diff --git a/src/utils/asyncForEach.ts b/src/utils/asyncForEach.ts new file mode 100644 index 0000000..9d71542 --- /dev/null +++ b/src/utils/asyncForEach.ts @@ -0,0 +1,5 @@ +export async function asyncForEach(array: any[], callback: any) { + for (let index = 0; index < array.length; index++) { + await callback(array[index], index, array); + } +} diff --git a/src/utils/compareTimestamps.ts b/src/utils/compareTimestamps.ts new file mode 100644 index 0000000..b7a5800 --- /dev/null +++ b/src/utils/compareTimestamps.ts @@ -0,0 +1,9 @@ +import { SASjsRequest } from "../types/SASjsRequest"; + +/** + * Comparator for SASjs request timestamps + * + */ +export const compareTimestamps = (a: SASjsRequest, b: SASjsRequest) => { + return b.timestamp.getTime() - a.timestamp.getTime(); +}; diff --git a/src/utils/convertToCsv.ts b/src/utils/convertToCsv.ts new file mode 100644 index 0000000..bfe0e01 --- /dev/null +++ b/src/utils/convertToCsv.ts @@ -0,0 +1,133 @@ +/** + * Converts the given JSON object to a CSV string. + * @param data - the JSON object to convert. + */ +export const convertToCSV = (data: any) => { + const replacer = (key: any, value: any) => (value === null ? "" : value); + const headerFields = Object.keys(data[0]); + let csvTest; + let invalidString = false; + const headers = headerFields.map((field) => { + let firstFoundType: string | null = null; + let hasMixedTypes: boolean = false; + let rowNumError: number = -1; + + const longestValueForField = data + .map((row: any, index: number) => { + if (row[field] || row[field] === "") { + if (firstFoundType) { + let currentFieldType = + row[field] === "" || typeof row[field] === "string" + ? "chars" + : "number"; + + if (!hasMixedTypes) { + hasMixedTypes = currentFieldType !== firstFoundType; + rowNumError = hasMixedTypes ? index + 1 : -1; + } + } else { + if (row[field] === "") { + firstFoundType = "chars"; + } else { + firstFoundType = + typeof row[field] === "string" ? "chars" : "number"; + } + } + + let byteSize; + + if (typeof row[field] === "string") { + let doubleQuotesFound = row[field] + .split("") + .filter((char: any) => char === '"'); + + byteSize = getByteSize(row[field]); + + if (doubleQuotesFound.length > 0) { + byteSize += doubleQuotesFound.length; + } + } + + return byteSize; + } + }) + .sort((a: number, b: number) => b - a)[0]; + if (longestValueForField && longestValueForField > 32765) { + invalidString = true; + } + if (hasMixedTypes) { + console.error( + `Row (${rowNumError}), Column (${field}) has mixed types: ERROR` + ); + } + + return `${field}:${firstFoundType === "chars" ? "$" : ""}${ + longestValueForField + ? longestValueForField + : firstFoundType === "chars" + ? "1" + : "best" + }.`; + }); + + if (invalidString) { + return "ERROR: LARGE STRING LENGTH"; + } + csvTest = data.map((row: any) => { + const fields = Object.keys(row).map((fieldName, index) => { + let value; + let containsSpecialChar = false; + const currentCell = row[fieldName]; + + if (JSON.stringify(currentCell).search(/(\\t|\\n|\\r)/gm) > -1) { + value = currentCell.toString(); + containsSpecialChar = true; + } else { + value = JSON.stringify(currentCell, replacer); + } + + value = value.replace(/\\\\/gm, "\\"); + + if (containsSpecialChar) { + if (value.includes(",") || value.includes('"')) { + value = '"' + value + '"'; + } + } else { + if ( + !value.includes(",") && + value.includes('"') && + !value.includes('\\"') + ) { + value = value.substring(1, value.length - 1); + } + + value = value.replace(/\\"/gm, '""'); + } + + value = value.replace(/\r\n/gm, "\n"); + + if (value === "" && headers[index].includes("best")) { + value = "."; + } + + return value; + }); + return fields.join(","); + }); + + let finalCSV = + headers.join(",").replace(/,/g, " ") + "\r\n" + csvTest.join("\r\n"); + + return finalCSV; +}; + +const getByteSize = (str: string) => { + let byteSize = str.length; + for (let i = str.length - 1; i >= 0; i--) { + const code = str.charCodeAt(i); + if (code > 0x7f && code <= 0x7ff) byteSize++; + else if (code > 0x7ff && code <= 0xffff) byteSize += 2; + if (code >= 0xdc00 && code <= 0xdfff) i--; //trail surrogate + } + return byteSize; +}; diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..b107529 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,14 @@ +export * from "./asyncForEach"; +export * from "./compareTimestamps"; +export * from "./convertToCsv"; +export * from "./isAuthorizeFormRequired"; +export * from "./isLoginRequired"; +export * from "./isLoginSuccess"; +export * from "./makeRequest"; +export * from "./needsRetry"; +export * from "./parseAndSubmitAuthorizeForm"; +export * from "./parseGeneratedCode"; +export * from "./parseSourceCode"; +export * from "./parseSasViyaLog"; +export * from "./serialize"; +export * from "./splitChunks"; diff --git a/src/utils/isAuthorizeFormRequired.ts b/src/utils/isAuthorizeFormRequired.ts new file mode 100644 index 0000000..a1d5b38 --- /dev/null +++ b/src/utils/isAuthorizeFormRequired.ts @@ -0,0 +1,3 @@ +export const isAuthorizeFormRequired = (response: string): boolean => { + return //gm.test(response); +}; diff --git a/src/utils/isLoginRequired.ts b/src/utils/isLoginRequired.ts new file mode 100644 index 0000000..65448bc --- /dev/null +++ b/src/utils/isLoginRequired.ts @@ -0,0 +1,5 @@ +export const isLogInRequired = (response: string): boolean => { + const pattern: RegExp = //gm; + const matches = pattern.test(response); + return matches; +}; diff --git a/src/utils/isLoginSuccess.ts b/src/utils/isLoginSuccess.ts new file mode 100644 index 0000000..40d46d2 --- /dev/null +++ b/src/utils/isLoginSuccess.ts @@ -0,0 +1,2 @@ +export const isLogInSuccess = (response: string): boolean => + /You have signed in/gm.test(response); diff --git a/src/utils/makeRequest.ts b/src/utils/makeRequest.ts new file mode 100644 index 0000000..1d28c23 --- /dev/null +++ b/src/utils/makeRequest.ts @@ -0,0 +1,37 @@ +import { CsrfToken } from "../types"; + +export async function makeRequest( + url: string, + request: RequestInit, + callback: (value: CsrfToken) => any, + contentType: "text" | "json" = "json" +): Promise { + const responseTransform = + contentType === "json" + ? (res: Response) => res.json() + : (res: Response) => res.text(); + const result = await fetch(url, request).then((response) => { + if (!response.ok) { + if (response.status === 403) { + const tokenHeader = response.headers.get("X-CSRF-HEADER"); + + if (tokenHeader) { + const token = response.headers.get(tokenHeader); + callback({ + headerName: tokenHeader, + value: token || "", + }); + + const retryRequest = { + ...request, + headers: { ...request.headers, [tokenHeader]: token }, + }; + return fetch(url, retryRequest).then(responseTransform); + } + } + } else { + return responseTransform(response); + } + }); + return result; +} diff --git a/src/utils/needsRetry.ts b/src/utils/needsRetry.ts new file mode 100644 index 0000000..cb70c6c --- /dev/null +++ b/src/utils/needsRetry.ts @@ -0,0 +1,11 @@ +export const needsRetry = (responseText: string): boolean => { + return ( + (responseText.includes('"errorCode":403') && + responseText.includes("_csrf") && + responseText.includes("X-CSRF-TOKEN")) || + (responseText.includes('"status":403') && + responseText.includes('"error":"Forbidden"')) || + (responseText.includes('"status":449') && + responseText.includes("Authentication success, retry original request")) + ); +}; diff --git a/src/utils/parseAndSubmitAuthorizeForm.ts b/src/utils/parseAndSubmitAuthorizeForm.ts new file mode 100644 index 0000000..7a3bf96 --- /dev/null +++ b/src/utils/parseAndSubmitAuthorizeForm.ts @@ -0,0 +1,49 @@ +export const parseAndSubmitAuthorizeForm = async ( + response: string, + serverUrl: string +) => { + let authUrl: string | null = null; + const params: any = {}; + + const responseBody = response.split("")[1].split("")[0]; + const bodyElement = document.createElement("div"); + bodyElement.innerHTML = responseBody; + + const form = bodyElement.querySelector("#application_authorization"); + authUrl = form ? serverUrl + form.getAttribute("action") : null; + + const inputs: any = form?.querySelectorAll("input"); + + for (const input of inputs) { + if (input.name === "user_oauth_approval") { + input.value = "true"; + } + + params[input.name] = input.value; + } + + const formData = new FormData(); + + for (const key in params) { + if (params.hasOwnProperty(key)) { + formData.append(key, params[key]); + } + } + + return new Promise((resolve, reject) => { + if (authUrl) { + fetch(authUrl, { + method: "POST", + credentials: "include", + body: formData, + referrerPolicy: "same-origin", + }) + .then((res) => res.text()) + .then((res) => { + resolve(res); + }); + } else { + reject("Auth form url is null"); + } + }); +}; diff --git a/src/utils/parseGeneratedCode.ts b/src/utils/parseGeneratedCode.ts new file mode 100644 index 0000000..74acce8 --- /dev/null +++ b/src/utils/parseGeneratedCode.ts @@ -0,0 +1,7 @@ +export const parseGeneratedCode = (log: string) => { + const startsWith = "MPRINT"; + const isGeneratedCodeLine = (line: string) => + line.trim().startsWith(startsWith); + const logLines = log.split("\n").filter(isGeneratedCodeLine); + return logLines.join("\r\n"); +}; diff --git a/src/utils/parseSasViyaLog.ts b/src/utils/parseSasViyaLog.ts new file mode 100644 index 0000000..2a29d78 --- /dev/null +++ b/src/utils/parseSasViyaLog.ts @@ -0,0 +1,12 @@ +export const parseSasViyaLog = (logResponse: { items: any[] }) => { + let log; + try { + log = logResponse.items + ? logResponse.items.map((i) => i.line).join("\n") + : JSON.stringify(logResponse); + } catch (e) { + console.error("An error has occurred while parsing the log response", e); + log = logResponse; + } + return log; +}; diff --git a/src/utils/parseSourceCode.ts b/src/utils/parseSourceCode.ts new file mode 100644 index 0000000..d5b8ac6 --- /dev/null +++ b/src/utils/parseSourceCode.ts @@ -0,0 +1,6 @@ +export const parseSourceCode = (log: string): string => { + const isSourceCodeLine = (line: string) => + line.trim().substring(0, 10).trimStart().match(/^\d/); + const logLines = log.split("\n").filter(isSourceCodeLine); + return logLines.join("\r\n"); +}; diff --git a/src/utils/serialize.ts b/src/utils/serialize.ts new file mode 100644 index 0000000..4816a5a --- /dev/null +++ b/src/utils/serialize.ts @@ -0,0 +1,15 @@ +export const serialize = (obj: any) => { + const str: any[] = []; + for (const p in obj) { + if (obj.hasOwnProperty(p)) { + if (obj[p] instanceof Array) { + for (let i = 0, n = obj[p].length; i < n; i++) { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p][i])); + } + } else { + str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); + } + } + } + return str.join("&"); +}; diff --git a/src/utils/splitChunks.ts b/src/utils/splitChunks.ts new file mode 100644 index 0000000..fa43fbc --- /dev/null +++ b/src/utils/splitChunks.ts @@ -0,0 +1,12 @@ +export const splitChunks = (content: string) => { + const size = 16000; + + const numChunks = Math.ceil(content.length / size); + const chunks = new Array(numChunks); + + for (let i = 0, o = 0; i < numChunks; ++i, o += size) { + chunks[i] = content.substr(o, size); + } + + return chunks; +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e3dc154 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "lib": ["ES2018", "DOM", "ES2019.String"], + "target": "es5", + "module": "commonjs", + "declaration": true, + "outDir": "./build", + "strict": true, + "sourceMap": true + }, + "include": ["src"], + "exclude": ["node_modules", "**/*.spec.ts"] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..63a462d --- /dev/null +++ b/tslint.json @@ -0,0 +1,9 @@ +{ + "extends": ["tslint:recommended", "tslint-config-prettier"], + "rules": { + "no-string-literal": false, + "forin": false, + "no-console": false, + "max-classes-per-file": false + } +} diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..49a1857 --- /dev/null +++ b/typedoc.json @@ -0,0 +1,42 @@ +{ + "out": "docs", + "includeDeclarations": true, + "exclude": "**/*+(index|.spec|.e2e).ts", + "ignoreCompilerErrors": true, + "disableOutputCheck": true, + "excludeExternals": true, + "excludePrivate": true, + "excludeNotExported": true, + "theme": "./node_modules/typedoc-neo-theme/bin/default", + "outline": [ + { + "SAS Adapter": { + "SASjs": "modules/sasjs", + "SASjsConfig": "classes/sasjsconfig.sasjsconfig-1", + "ServerType": "enums/servertype.servertype-1", + "SASjsRequest": "interfaces/sasjsrequest.sasjsrequest-1", + "SASjsWaitingRequest": "interfaces/sasjswaitingrequest.sasjswaitingrequest-1" + }, + "SAS Viya API Client": "classes/sasviyaapiclient.sasviyaapiclient-1", + "SAS 9 API Client": "classes/sas9apiclient.sas9apiclient-1" + } + ], + "links": [ + { + "label": "SASjs on Github", + "url": "https://github.com/macropeople/sasjs" + }, + { + "label": "SASjs.io", + "url": "https://sasjs.io" + }, + { + "label": "SASjs CLI", + "url": "https://github.com/macropeople/sasjs-cli" + }, + { + "label": "React Seed App", + "url": "https://github.com/macropeople/react-seed-app" + } + ] +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..4765d95 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,49 @@ +const path = require("path"); +const webpack = require("webpack"); +const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); + +const browserConfig = { + entry: "./src/index.ts", + devtool: "inline-source-map", + mode: "development", + optimization: { + minimize: false, + }, + module: { + rules: [ + { + test: /\.ts?$/, + use: "ts-loader", + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: [".ts", ".js"], + }, + output: { + filename: "index.js", + path: path.resolve(__dirname, "build"), + libraryTarget: "umd", + library: "SASjs", + }, + plugins: [ + new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en/), + new webpack.SourceMapDevToolPlugin({ + filename: null, + exclude: [/node_modules/], + test: /\.ts($|\?)/i, + }), + ], +}; + +const nodeConfig = { + ...browserConfig, + target: "node", + output: { + ...browserConfig.output, + path: path.resolve(__dirname, "build", "node"), + }, +}; + +module.exports = [browserConfig, nodeConfig];