├── README.md ├── test └── index.test.js ├── .gitignore ├── package.json ├── Makefile ├── .jscsrc ├── .eslintrc └── LICENSE /README.md: -------------------------------------------------------------------------------- 1 | # qiro-js -------------------------------------------------------------------------------- /test/index.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle/ 2 | build/ 3 | node_modules/ 4 | coverage/ 5 | .idea 6 | *.iml 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "qiro-js", 3 | "version": "1.0.0", 4 | "description": "qiro javascript client", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "make test" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/qiro/qiro-js.git" 12 | }, 13 | "keywords": [ 14 | "qiro", 15 | "loadbalancer" 16 | ], 17 | "author": "Yunong Xiao", 18 | "license": "Apache-2.0", 19 | "bugs": { 20 | "url": "https://github.com/qiro/qiro-js/issues" 21 | }, 22 | "homepage": "https://github.com/qiro/qiro-js#readme", 23 | "dependencies": {}, 24 | "devDependencies": { 25 | "eslint": "^2.2.0", 26 | "jscs": "^2.11.0", 27 | "mocha": "^2.4.5" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Makefile: basic Makefile for template API service 3 | # 4 | # This Makefile is a template for new repos. It contains only repo-specific 5 | # logic and uses included makefiles to supply common targets (javascriptlint, 6 | # jsstyle, restdown, etc.), which are used by other repos as well. You may well 7 | # need to rewrite most of this file, but you shouldn't need to touch the 8 | # included makefiles. 9 | # 10 | # If you find yourself adding support for new targets that could be useful for 11 | # other projects too, you should add these to the original versions of the 12 | # included Makefiles (in eng.git) so that other teams can use them too. 13 | # 14 | 15 | # 16 | # Tools 17 | # 18 | TOP := $(shell pwd) 19 | NODE_MODULES := $(TOP)/node_modules 20 | NODE_BIN := $(NODE_MODULES)/.bin 21 | ESLINT = $(NODE_BIN)/eslint 22 | JSCS = $(NODE_BIN)/jscs 23 | MOCHA = $(NODE_BIN)/mocha 24 | IMOCHA = $(NODE_BIN)/_mocha 25 | ISTANBUL = $(NODE_BIN)/istanbul 26 | NPM := npm 27 | PRIMER = $(NODE_MODULES)/nf-primer/bin/primer.js 28 | 29 | # 30 | # Files 31 | # 32 | #JS_FILES := $(wildcard $(TOP)/*.js $(TOP)/lib/**/*.js $(TOP)/test/**/*.js) 33 | LIB_DIR := lib 34 | TEST_DIR := test 35 | TEST_FILES := $(TEST_DIR)/index.js 36 | JS_FILES := $(shell find $(LIB_DIR) $(TEST_DIR) -name '*.js') 37 | PRIMER_SCRIPTS := $(TOP)/edge/**/*.groovy 38 | SHRINKWRAP := npm-shrinkwrap.json 39 | 40 | CLEAN_FILES += node_modules $(SHRINKWRAP) 41 | 42 | # 43 | # Repo-specific targets 44 | # 45 | .PHONY: all 46 | all: node_modules lint style cover 47 | 48 | .PHONY: lint 49 | lint: node_modules $(ESLINT) $(JS_FILES) 50 | $(ESLINT) $(JS_FILES) 51 | 52 | .PHONY: style 53 | style: node_modules $(JSCS) $(JS_FILES) 54 | $(JSCS) $(JS_FILES) 55 | 56 | .PHONY: cover 57 | cover: node_modules $(ISTANBUL) $(IMOCHA) 58 | @rm -rf ./coverage 59 | $(ISTANBUL) cover --report html $(IMOCHA) -- $(TEST_FILES) 60 | 61 | node_modules: package.json 62 | $(NPM) install -d 63 | @touch node_modules 64 | 65 | .PHONY: test 66 | test: node_modules $(MOCHA) 67 | $(MOCHA) $(TEST_FILES) 68 | 69 | .PHONY: check 70 | check: lint style cover 71 | 72 | .PHONY: distclean 73 | distclean: 74 | @rm -rf ./node_modules 75 | 76 | .PHONY: primer 77 | primer: node_modules $(PRIMER) $(PRIMER_SCRIPTS) 78 | $(PRIMER) publish 79 | 80 | 81 | # 82 | # Debug -- print out a a variable via `make print-FOO` 83 | # 84 | print-% : ; @echo $* = $($*) 85 | 86 | -------------------------------------------------------------------------------- /.jscsrc: -------------------------------------------------------------------------------- 1 | { 2 | // setup 3 | "fileExtensions": [ ".js" ], 4 | "excludeFiles": [ "./node_modules/**", 5 | "./bin", 6 | "./deps", 7 | "./docs", 8 | "./examples", 9 | "./coverage" 10 | ], 11 | 12 | // general rules 13 | "safeContextKeyword": [ "self" ], 14 | "validateParameterSeparator": ", ", 15 | "validateQuoteMarks": { 16 | "escape": true, 17 | "mark": "'" 18 | }, 19 | 20 | // alignment rules 21 | "maximumLineLength": { 22 | "value": 80, 23 | "allowComments": false, 24 | "allowUrlComments": true, 25 | "allowRegex": false 26 | }, 27 | "validateIndentation": 4, 28 | 29 | // newline on EOF 30 | "requireLineFeedAtFileEnd": true, 31 | 32 | // disallow rules 33 | "disallowImplicitTypeConversion": [ 34 | "numeric", 35 | "boolean", 36 | "binary", 37 | "string" 38 | ], 39 | "disallowAnonymousFunctions": false, 40 | "disallowMixedSpacesAndTabs": true, 41 | "disallowMultipleVarDecl": "exceptUndefined", 42 | "disallowNewlineBeforeBlockStatements": true, 43 | "disallowQuotedKeysInObjects": true, 44 | "disallowSpaceAfterPrefixUnaryOperators": true, 45 | "disallowSpaceBeforePostfixUnaryOperators": true, 46 | "disallowSpacesInCallExpression": true, 47 | "disallowTrailingComma": true, 48 | "disallowTrailingWhitespace": true, 49 | "disallowYodaConditions": true, 50 | 51 | // require rules 52 | "requireBlocksOnNewline": true, 53 | // TODO: come back to this rule after we normalize code base 54 | // "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties", 55 | "requireCapitalizedConstructors": true, 56 | "requireCurlyBraces": [ 57 | "if", 58 | "else", 59 | "for", 60 | "while", 61 | "do", 62 | "try", 63 | "catch" 64 | ], 65 | "requireDotNotation": true, 66 | "requireLineBreakAfterVariableAssignment": true, 67 | "requirePaddingNewLinesAfterUseStrict": true, 68 | "requirePaddingNewLinesBeforeExport": true, 69 | "requirePaddingNewlinesBeforeKeywords": [ 70 | "do", 71 | "for", 72 | "switch", 73 | "try", 74 | "while" 75 | ], 76 | "requireSemicolons": true, 77 | "requireSpaceAfterBinaryOperators": true, 78 | "requireSpaceAfterKeywords": [ 79 | "if", 80 | "else", 81 | "for", 82 | "while", 83 | "do", 84 | "try", 85 | "catch" 86 | ], 87 | "requireSpaceBeforeBinaryOperators": true, 88 | "requireSpaceBeforeBlockStatements": true, 89 | "requireSpaceBeforeKeywords": [ 90 | "else", 91 | "while", 92 | "catch" 93 | ], 94 | "requireSpaceBetweenArguments": true, 95 | "requireSpacesInConditionalExpression": true, 96 | "requireSpacesInForStatement": true, 97 | "requireSpacesInFunction": { 98 | "beforeOpeningCurlyBrace": true 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": false, 4 | "node": true, 5 | "es6": false 6 | }, 7 | "rules": { 8 | // possible errors 9 | "no-cond-assign": [ 2 ], 10 | "no-console": [ 0 ], 11 | "no-constant-condition": [ 2 ], 12 | "no-control-regex": [ 2 ], 13 | "no-debugger": [ 2 ], 14 | "no-dupe-args": [ 2 ], 15 | "no-dupe-keys": [ 2 ], 16 | "no-duplicate-case": [ 2 ], 17 | "no-empty": [ 2 ], 18 | "no-empty-character-class": [ 2 ], 19 | "no-ex-assign": [ 2 ], 20 | "no-extra-boolean-cast": [ 2 ], 21 | "no-extra-semi": [ 2 ], 22 | "no-func-assign": [ 2 ], 23 | // this is for variable hoisting, not necessary if we use block scoped declarations 24 | // "no-inner-declarations": [ 2, "both" ], 25 | "no-invalid-regexp": [ 2 ], 26 | "no-irregular-whitespace": [ 2 ], 27 | "no-negated-in-lhs": [ 2 ], 28 | "no-reserved-keys": [ 0 ], 29 | "no-regex-spaces": [ 2 ], 30 | "no-sparse-arrays": [ 2 ], 31 | "no-unreachable": [ 2 ], 32 | "use-isnan": [ 2 ], 33 | "valid-jsdoc": [ 2, { 34 | "requireReturnDescription": false, 35 | "prefer": { 36 | "return": "returns" 37 | } 38 | }], 39 | "valid-typeof": [ 2 ], 40 | 41 | // best practices 42 | "block-scoped-var": [ 2 ], 43 | "consistent-return": [ 2 ], 44 | "curly": [ 0 ], // in jscs 45 | "default-case": [ 2 ], 46 | "dot-notation": [ 2, { "allowKeywords": true } ], 47 | "eqeqeq": [ 2 ], 48 | "guard-for-in": [ 2 ], 49 | "no-alert": [ 2 ], 50 | "no-caller": [ 2 ], 51 | "no-div-regex": [ 2 ], 52 | "no-eq-null": [ 2 ], 53 | "no-eval": [ 2 ], 54 | "no-extend-native": [ 2 ], 55 | "no-extra-bind": [ 2 ], 56 | "no-fallthrough": [ 2 ], 57 | "no-floating-decimal": [ 2 ], 58 | "no-implied-eval": [ 2 ], 59 | "no-iterator": [ 2 ], 60 | "no-labels": [ 2 ], 61 | "no-lone-blocks": [ 2 ], 62 | "no-loop-func": [ 0 ], 63 | "no-multi-spaces": [ 0 ], 64 | "no-multi-str": [ 0 ], 65 | "no-native-reassign": [ 2 ], 66 | "no-new": [ 0 ], 67 | "no-new-func": [ 2 ], 68 | "no-new-wrappers": [ 2 ], 69 | "no-octal": [ 2 ], 70 | "no-octal-escape": [ 2 ], 71 | "no-param-reassign": [ 0 ], 72 | "no-proto": [ 2 ], 73 | "no-process-env": [ 0 ], 74 | "no-redeclare": [ 2 ], 75 | "no-return-assign": [ 2 ], 76 | "no-script-url": [ 2 ], 77 | "no-self-compare": [ 2 ], 78 | "no-sequences": [ 2 ], 79 | "no-throw-literal": [ 2 ], 80 | "no-unused-expressions": [ 2 ], 81 | 82 | "no-warning-comments": [ 1 ], 83 | "no-with": [ 2 ], 84 | "radix": [ 2 ], 85 | "wrap-iife": [ 2 ], 86 | "yoda": [ 0 ], 87 | 88 | // strict mode 89 | "strict": [ 2, "global" ], 90 | 91 | // variables 92 | "no-catch-shadow": [ 2 ], 93 | "no-delete-var": [ 2 ], 94 | "no-shadow": [ 2 ], 95 | "no-shadow-restricted-names": [ 2 ], 96 | "no-undef": [ 2 ], 97 | "no-undef-init": [ 2 ], 98 | "no-undefined": [ 0 ], 99 | "no-unused-vars": [ 2, { "vars": "all", "args": "none" } ], 100 | "no-use-before-define": [ 2, "nofunc" ], 101 | 102 | // node.js 103 | "handle-callback-err": [ 2, "^.*(e|E)rr" ], 104 | "no-mixed-requires": [ 2 ], 105 | "no-new-require": [ 2 ], 106 | "no-path-concat": [ 0 ], 107 | "no-process-exit": [ 0 ], 108 | 109 | // stylistic. 110 | // we use JSCS, set most to off because they're on by default. 111 | // turn the few on that aren't handled by JSCS today. 112 | "camelcase": [ 0 ], 113 | "comma-dangle": [ 0 ], 114 | "key-spacing": [ 0 ], 115 | "new-cap": [ 0 ], 116 | "no-lonely-if": [ 0 ], 117 | "no-multi-str": [ 0 ], 118 | "no-underscore-dangle": [ 0 ], 119 | "quotes": [ 0 ], 120 | "semi": [ 0 ], 121 | "space-infix-ops": [ 0 ], 122 | "space-return-throw-case": [ 0 ], 123 | "space-unary-ops": [ 0 ], 124 | 125 | "no-array-constructor": [ 2 ], 126 | "no-nested-ternary": [ 2 ], 127 | "no-new-object": [ 2 ] 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | --------------------------------------------------------------------------------