new license file version [CI SKIP]
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
import { Observable } from './Observable';
|
||||
import { Subscription } from './Subscription';
|
||||
|
||||
/**
|
||||
* Note: This will add Symbol.observable globally for all TypeScript users,
|
||||
* however, we are no longer polyfilling Symbol.observable
|
||||
*/
|
||||
declare global {
|
||||
interface SymbolConstructor {
|
||||
readonly observable: symbol;
|
||||
}
|
||||
}
|
||||
|
||||
/** OPERATOR INTERFACES */
|
||||
|
||||
export interface UnaryFunction<T, R> { (source: T): R; }
|
||||
|
||||
export interface OperatorFunction<T, R> extends UnaryFunction<Observable<T>, Observable<R>> {}
|
||||
|
||||
export type FactoryOrValue<T> = T | (() => T);
|
||||
|
||||
export interface MonoTypeOperatorFunction<T> extends OperatorFunction<T, T> {}
|
||||
|
||||
export interface Timestamp<T> {
|
||||
value: T;
|
||||
timestamp: number;
|
||||
}
|
||||
|
||||
export interface TimeInterval<T> {
|
||||
value: T;
|
||||
interval: number;
|
||||
}
|
||||
|
||||
/** SUBSCRIPTION INTERFACES */
|
||||
|
||||
export interface Unsubscribable {
|
||||
unsubscribe(): void;
|
||||
}
|
||||
|
||||
export type TeardownLogic = Unsubscribable | Function | void;
|
||||
|
||||
export interface SubscriptionLike extends Unsubscribable {
|
||||
unsubscribe(): void;
|
||||
readonly closed: boolean;
|
||||
}
|
||||
|
||||
export type SubscribableOrPromise<T> = Subscribable<T> | Subscribable<never> | PromiseLike<T> | InteropObservable<T>;
|
||||
|
||||
/** OBSERVABLE INTERFACES */
|
||||
|
||||
export interface Subscribable<T> {
|
||||
subscribe(observer?: PartialObserver<T>): Unsubscribable;
|
||||
/** @deprecated Use an observer instead of a complete callback */
|
||||
subscribe(next: null | undefined, error: null | undefined, complete: () => void): Unsubscribable;
|
||||
/** @deprecated Use an observer instead of an error callback */
|
||||
subscribe(next: null | undefined, error: (error: any) => void, complete?: () => void): Unsubscribable;
|
||||
/** @deprecated Use an observer instead of a complete callback */
|
||||
subscribe(next: (value: T) => void, error: null | undefined, complete: () => void): Unsubscribable;
|
||||
subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Unsubscribable;
|
||||
}
|
||||
|
||||
export type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T> | Iterable<T>;
|
||||
|
||||
/** @deprecated use {@link InteropObservable } */
|
||||
export type ObservableLike<T> = InteropObservable<T>;
|
||||
|
||||
export type InteropObservable<T> = { [Symbol.observable]: () => Subscribable<T>; };
|
||||
|
||||
/** OBSERVER INTERFACES */
|
||||
|
||||
export interface NextObserver<T> {
|
||||
closed?: boolean;
|
||||
next: (value: T) => void;
|
||||
error?: (err: any) => void;
|
||||
complete?: () => void;
|
||||
}
|
||||
|
||||
export interface ErrorObserver<T> {
|
||||
closed?: boolean;
|
||||
next?: (value: T) => void;
|
||||
error: (err: any) => void;
|
||||
complete?: () => void;
|
||||
}
|
||||
|
||||
export interface CompletionObserver<T> {
|
||||
closed?: boolean;
|
||||
next?: (value: T) => void;
|
||||
error?: (err: any) => void;
|
||||
complete: () => void;
|
||||
}
|
||||
|
||||
export type PartialObserver<T> = NextObserver<T> | ErrorObserver<T> | CompletionObserver<T>;
|
||||
|
||||
export interface Observer<T> {
|
||||
closed?: boolean;
|
||||
next: (value: T) => void;
|
||||
error: (err: any) => void;
|
||||
complete: () => void;
|
||||
}
|
||||
|
||||
/** SCHEDULER INTERFACES */
|
||||
|
||||
export interface SchedulerLike {
|
||||
now(): number;
|
||||
schedule<T>(work: (this: SchedulerAction<T>, state?: T) => void, delay?: number, state?: T): Subscription;
|
||||
}
|
||||
export interface SchedulerAction<T> extends Subscription {
|
||||
schedule(state?: T, delay?: number): Subscription;
|
||||
}
|
||||
|
||||
export type ObservedValueOf<O> = O extends ObservableInput<infer T> ? T : never;
|
||||
|
||||
export type ObservedValuesFromArray<X> = X extends Array<ObservableInput<infer T>> ? T : never;
|
||||
@@ -0,0 +1 @@
|
||||
{"name":"@types/cacheable-request","version":"6.0.3","files":{"LICENSE":{"checkedAt":1678887829872,"integrity":"sha512-HQaIQk9pwOcyKutyDk4o2a87WnotwYuLGYFW43emGm4FvIJFKPyg+OYaw5sTegKAKf+C5SKa1ACjzCLivbaHrQ==","mode":511,"size":1141},"README.md":{"checkedAt":1678887829865,"integrity":"sha512-JrUhU99wNljMP+aBNtkIgTLGQD/3bxiz70DDoNM5LQr6Rnk7mjxht5Y9KjelQYb5HRa9dGPtRWg4Czv+BiKyEg==","mode":511,"size":857},"index.d.ts":{"checkedAt":1678887829865,"integrity":"sha512-y+llDEjvgG1EttnshTtDoeFAK7ZrmhLXLlkIuPWbLOpvfN/wk8vHh7MR88RQFizmLN2rNdTLQTWAUIOB5BFZbQ==","mode":511,"size":6139},"package.json":{"checkedAt":1678887829865,"integrity":"sha512-mRK7pUep5tqNpL00B3f/Cw/lYzOeM35jyZCs5UhFRh3Np4E4evxC6xJO/ek1hTFre079EFwU2pL09D3Q891QFw==","mode":511,"size":1144}}}
|
||||
@@ -0,0 +1,4 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
require("rxjs-compat/add/observable/using");
|
||||
//# sourceMappingURL=using.js.map
|
||||
@@ -0,0 +1,350 @@
|
||||
|
||||
2.14.1 / 2018-02-07
|
||||
==================
|
||||
|
||||
* Fix typing of help function
|
||||
|
||||
2.14.0 / 2018-02-05
|
||||
==================
|
||||
|
||||
* only register the option:version event once
|
||||
* Fixes issue #727: Passing empty string for option on command is set to undefined
|
||||
* enable eqeqeq rule
|
||||
* resolves #754 add linter configuration to project
|
||||
* resolves #560 respect custom name for version option
|
||||
* document how to override the version flag
|
||||
* document using options per command
|
||||
|
||||
2.13.0 / 2018-01-09
|
||||
==================
|
||||
|
||||
* Do not print default for --no-
|
||||
* remove trailing spaces in command help
|
||||
* Update CI's Node.js to LTS and latest version
|
||||
* typedefs: Command and Option types added to commander namespace
|
||||
|
||||
2.12.2 / 2017-11-28
|
||||
==================
|
||||
|
||||
* fix: typings are not shipped
|
||||
|
||||
2.12.1 / 2017-11-23
|
||||
==================
|
||||
|
||||
* Move @types/node to dev dependency
|
||||
|
||||
2.12.0 / 2017-11-22
|
||||
==================
|
||||
|
||||
* add attributeName() method to Option objects
|
||||
* Documentation updated for options with --no prefix
|
||||
* typings: `outputHelp` takes a string as the first parameter
|
||||
* typings: use overloads
|
||||
* feat(typings): update to match js api
|
||||
* Print default value in option help
|
||||
* Fix translation error
|
||||
* Fail when using same command and alias (#491)
|
||||
* feat(typings): add help callback
|
||||
* fix bug when description is add after command with options (#662)
|
||||
* Format js code
|
||||
* Rename History.md to CHANGELOG.md (#668)
|
||||
* feat(typings): add typings to support TypeScript (#646)
|
||||
* use current node
|
||||
|
||||
2.11.0 / 2017-07-03
|
||||
==================
|
||||
|
||||
* Fix help section order and padding (#652)
|
||||
* feature: support for signals to subcommands (#632)
|
||||
* Fixed #37, --help should not display first (#447)
|
||||
* Fix translation errors. (#570)
|
||||
* Add package-lock.json
|
||||
* Remove engines
|
||||
* Upgrade package version
|
||||
* Prefix events to prevent conflicts between commands and options (#494)
|
||||
* Removing dependency on graceful-readlink
|
||||
* Support setting name in #name function and make it chainable
|
||||
* Add .vscode directory to .gitignore (Visual Studio Code metadata)
|
||||
* Updated link to ruby commander in readme files
|
||||
|
||||
2.10.0 / 2017-06-19
|
||||
==================
|
||||
|
||||
* Update .travis.yml. drop support for older node.js versions.
|
||||
* Fix require arguments in README.md
|
||||
* On SemVer you do not start from 0.0.1
|
||||
* Add missing semi colon in readme
|
||||
* Add save param to npm install
|
||||
* node v6 travis test
|
||||
* Update Readme_zh-CN.md
|
||||
* Allow literal '--' to be passed-through as an argument
|
||||
* Test subcommand alias help
|
||||
* link build badge to master branch
|
||||
* Support the alias of Git style sub-command
|
||||
* added keyword commander for better search result on npm
|
||||
* Fix Sub-Subcommands
|
||||
* test node.js stable
|
||||
* Fixes TypeError when a command has an option called `--description`
|
||||
* Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets.
|
||||
* Add chinese Readme file
|
||||
|
||||
2.9.0 / 2015-10-13
|
||||
==================
|
||||
|
||||
* Add option `isDefault` to set default subcommand #415 @Qix-
|
||||
* Add callback to allow filtering or post-processing of help text #434 @djulien
|
||||
* Fix `undefined` text in help information close #414 #416 @zhiyelee
|
||||
|
||||
2.8.1 / 2015-04-22
|
||||
==================
|
||||
|
||||
* Back out `support multiline description` Close #396 #397
|
||||
|
||||
2.8.0 / 2015-04-07
|
||||
==================
|
||||
|
||||
* Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee
|
||||
* Fix bug in Git-style sub-commands #372 @zhiyelee
|
||||
* Allow commands to be hidden from help #383 @tonylukasavage
|
||||
* When git-style sub-commands are in use, yet none are called, display help #382 @claylo
|
||||
* Add ability to specify arguments syntax for top-level command #258 @rrthomas
|
||||
* Support multiline descriptions #208 @zxqfox
|
||||
|
||||
2.7.1 / 2015-03-11
|
||||
==================
|
||||
|
||||
* Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367.
|
||||
|
||||
2.7.0 / 2015-03-09
|
||||
==================
|
||||
|
||||
* Fix git-style bug when installed globally. Close #335 #349 @zhiyelee
|
||||
* Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage
|
||||
* Add support for camelCase on `opts()`. Close #353 @nkzawa
|
||||
* Add node.js 0.12 and io.js to travis.yml
|
||||
* Allow RegEx options. #337 @palanik
|
||||
* Fixes exit code when sub-command failing. Close #260 #332 @pirelenito
|
||||
* git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee
|
||||
|
||||
2.6.0 / 2014-12-30
|
||||
==================
|
||||
|
||||
* added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee
|
||||
* Add application description to the help msg. Close #112 @dalssoft
|
||||
|
||||
2.5.1 / 2014-12-15
|
||||
==================
|
||||
|
||||
* fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee
|
||||
|
||||
2.5.0 / 2014-10-24
|
||||
==================
|
||||
|
||||
* add support for variadic arguments. Closes #277 @whitlockjc
|
||||
|
||||
2.4.0 / 2014-10-17
|
||||
==================
|
||||
|
||||
* fixed a bug on executing the coercion function of subcommands option. Closes #270
|
||||
* added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage
|
||||
* added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage
|
||||
* fixed a bug on subcommand name. Closes #248 @jonathandelgado
|
||||
* fixed function normalize doesn’t honor option terminator. Closes #216 @abbr
|
||||
|
||||
2.3.0 / 2014-07-16
|
||||
==================
|
||||
|
||||
* add command alias'. Closes PR #210
|
||||
* fix: Typos. Closes #99
|
||||
* fix: Unused fs module. Closes #217
|
||||
|
||||
2.2.0 / 2014-03-29
|
||||
==================
|
||||
|
||||
* add passing of previous option value
|
||||
* fix: support subcommands on windows. Closes #142
|
||||
* Now the defaultValue passed as the second argument of the coercion function.
|
||||
|
||||
2.1.0 / 2013-11-21
|
||||
==================
|
||||
|
||||
* add: allow cflag style option params, unit test, fixes #174
|
||||
|
||||
2.0.0 / 2013-07-18
|
||||
==================
|
||||
|
||||
* remove input methods (.prompt, .confirm, etc)
|
||||
|
||||
1.3.2 / 2013-07-18
|
||||
==================
|
||||
|
||||
* add support for sub-commands to co-exist with the original command
|
||||
|
||||
1.3.1 / 2013-07-18
|
||||
==================
|
||||
|
||||
* add quick .runningCommand hack so you can opt-out of other logic when running a sub command
|
||||
|
||||
1.3.0 / 2013-07-09
|
||||
==================
|
||||
|
||||
* add EACCES error handling
|
||||
* fix sub-command --help
|
||||
|
||||
1.2.0 / 2013-06-13
|
||||
==================
|
||||
|
||||
* allow "-" hyphen as an option argument
|
||||
* support for RegExp coercion
|
||||
|
||||
1.1.1 / 2012-11-20
|
||||
==================
|
||||
|
||||
* add more sub-command padding
|
||||
* fix .usage() when args are present. Closes #106
|
||||
|
||||
1.1.0 / 2012-11-16
|
||||
==================
|
||||
|
||||
* add git-style executable subcommand support. Closes #94
|
||||
|
||||
1.0.5 / 2012-10-09
|
||||
==================
|
||||
|
||||
* fix `--name` clobbering. Closes #92
|
||||
* fix examples/help. Closes #89
|
||||
|
||||
1.0.4 / 2012-09-03
|
||||
==================
|
||||
|
||||
* add `outputHelp()` method.
|
||||
|
||||
1.0.3 / 2012-08-30
|
||||
==================
|
||||
|
||||
* remove invalid .version() defaulting
|
||||
|
||||
1.0.2 / 2012-08-24
|
||||
==================
|
||||
|
||||
* add `--foo=bar` support [arv]
|
||||
* fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus]
|
||||
|
||||
1.0.1 / 2012-08-03
|
||||
==================
|
||||
|
||||
* fix issue #56
|
||||
* fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode())
|
||||
|
||||
1.0.0 / 2012-07-05
|
||||
==================
|
||||
|
||||
* add support for optional option descriptions
|
||||
* add defaulting of `.version()` to package.json's version
|
||||
|
||||
0.6.1 / 2012-06-01
|
||||
==================
|
||||
|
||||
* Added: append (yes or no) on confirmation
|
||||
* Added: allow node.js v0.7.x
|
||||
|
||||
0.6.0 / 2012-04-10
|
||||
==================
|
||||
|
||||
* Added `.prompt(obj, callback)` support. Closes #49
|
||||
* Added default support to .choose(). Closes #41
|
||||
* Fixed the choice example
|
||||
|
||||
0.5.1 / 2011-12-20
|
||||
==================
|
||||
|
||||
* Fixed `password()` for recent nodes. Closes #36
|
||||
|
||||
0.5.0 / 2011-12-04
|
||||
==================
|
||||
|
||||
* Added sub-command option support [itay]
|
||||
|
||||
0.4.3 / 2011-12-04
|
||||
==================
|
||||
|
||||
* Fixed custom help ordering. Closes #32
|
||||
|
||||
0.4.2 / 2011-11-24
|
||||
==================
|
||||
|
||||
* Added travis support
|
||||
* Fixed: line-buffered input automatically trimmed. Closes #31
|
||||
|
||||
0.4.1 / 2011-11-18
|
||||
==================
|
||||
|
||||
* Removed listening for "close" on --help
|
||||
|
||||
0.4.0 / 2011-11-15
|
||||
==================
|
||||
|
||||
* Added support for `--`. Closes #24
|
||||
|
||||
0.3.3 / 2011-11-14
|
||||
==================
|
||||
|
||||
* Fixed: wait for close event when writing help info [Jerry Hamlet]
|
||||
|
||||
0.3.2 / 2011-11-01
|
||||
==================
|
||||
|
||||
* Fixed long flag definitions with values [felixge]
|
||||
|
||||
0.3.1 / 2011-10-31
|
||||
==================
|
||||
|
||||
* Changed `--version` short flag to `-V` from `-v`
|
||||
* Changed `.version()` so it's configurable [felixge]
|
||||
|
||||
0.3.0 / 2011-10-31
|
||||
==================
|
||||
|
||||
* Added support for long flags only. Closes #18
|
||||
|
||||
0.2.1 / 2011-10-24
|
||||
==================
|
||||
|
||||
* "node": ">= 0.4.x < 0.7.0". Closes #20
|
||||
|
||||
0.2.0 / 2011-09-26
|
||||
==================
|
||||
|
||||
* Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs]
|
||||
|
||||
0.1.0 / 2011-08-24
|
||||
==================
|
||||
|
||||
* Added support for custom `--help` output
|
||||
|
||||
0.0.5 / 2011-08-18
|
||||
==================
|
||||
|
||||
* Changed: when the user enters nothing prompt for password again
|
||||
* Fixed issue with passwords beginning with numbers [NuckChorris]
|
||||
|
||||
0.0.4 / 2011-08-15
|
||||
==================
|
||||
|
||||
* Fixed `Commander#args`
|
||||
|
||||
0.0.3 / 2011-08-15
|
||||
==================
|
||||
|
||||
* Added default option value support
|
||||
|
||||
0.0.2 / 2011-08-15
|
||||
==================
|
||||
|
||||
* Added mask support to `Command#password(str[, mask], fn)`
|
||||
* Added `Command#password(str, fn)`
|
||||
|
||||
0.0.1 / 2010-01-03
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"1":"A B","2":"J E F G BC"},B:{"1":"C K L H M N O P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I u J E F G A B C K L H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB","2":"CC tB DC EC"},D:{"1":"0 1 2 3 4 5 6 7 8 9 A B C K L H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB FC","2":"I u J E F G"},E:{"1":"B C K L H 0B qB rB 1B LC MC 2B 3B 4B 5B sB 6B 7B 8B NC","2":"I GC zB","16":"u","388":"J E F G A HC IC JC KC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 B C H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d OC PC QC RC qB 9B SC rB","2":"G"},G:{"1":"bC cC dC eC fC gC hC iC jC kC lC mC 2B 3B 4B 5B sB 6B 7B 8B","16":"zB TC AC","388":"F UC VC WC XC YC ZC aC"},H:{"2":"nC"},I:{"1":"D tC","2":"tB I oC pC qC rC AC sC"},J:{"1":"A","2":"E"},K:{"1":"A B C e qB 9B rB"},L:{"1":"D"},M:{"1":"D"},N:{"132":"A B"},O:{"1":"uC"},P:{"1":"I vC wC xC yC zC 0B 0C 1C 2C 3C 4C sB 5C 6C 7C"},Q:{"1":"1B"},R:{"1":"8C"},S:{"1":"9C"}},B:1,C:"Pattern attribute for input fields"};
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"1":"A B","2":"J E F G BC"},B:{"1":"C K L H M N O P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t"},C:{"1":"4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB","2":"CC tB I u J E F G A B C K L H M DC EC","4":"0 1 2 3 N O v w x y z"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I u J E F G A B C K L H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB FC"},E:{"1":"u J E F G A B C K L H HC IC JC KC 0B qB rB 1B LC MC 2B 3B 4B 5B sB 6B 7B 8B NC","2":"I GC zB"},F:{"1":"0 1 2 3 4 5 6 7 8 9 H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d","2":"G B C OC PC QC RC qB 9B SC rB"},G:{"1":"F AC UC VC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC 2B 3B 4B 5B sB 6B 7B 8B","2":"zB TC"},H:{"2":"nC"},I:{"1":"tB I D pC qC rC AC sC tC","2":"oC"},J:{"1":"E A"},K:{"1":"e","2":"A B C qB 9B rB"},L:{"1":"D"},M:{"1":"D"},N:{"1":"A B"},O:{"1":"uC"},P:{"1":"I vC wC xC yC zC 0B 0C 1C 2C 3C 4C sB 5C 6C 7C"},Q:{"1":"1B"},R:{"1":"8C"},S:{"1":"9C"}},B:1,C:"sandbox attribute for iframes"};
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"pairs.js","sources":["../../src/internal/observable/pairs.ts"],"names":[],"mappings":";;AAAA,4CAA2C;AAG3C,gDAA+C;AAkD/C,SAAgB,KAAK,CAAI,GAAW,EAAE,SAAyB;IAC7D,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,IAAI,uBAAU,CAAc,UAAA,UAAU;YAC3C,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1D,IAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBAC3B,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAClC;aACF;YACD,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;KACJ;SAAM;QACL,OAAO,IAAI,uBAAU,CAAc,UAAA,UAAU;YAC3C,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAM,YAAY,GAAG,IAAI,2BAAY,EAAE,CAAC;YACxC,YAAY,CAAC,GAAG,CACd,SAAS,CAAC,QAAQ,CACf,QAAQ,EAAE,CAAC,EAAE,EAAE,IAAI,MAAA,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,YAAA,EAAE,YAAY,cAAA,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAtBD,sBAsBC;AAGD,SAAgB,QAAQ,CACI,KAAsH;IACxI,IAAA,iBAAI,EAAE,mBAAK,EAAE,6BAAU,EAAE,iCAAY,EAAE,eAAG,CAAW;IAC7D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QACtB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YACvB,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAA,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,YAAA,EAAE,YAAY,cAAA,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC,CAAC;SAC5F;aAAM;YACL,UAAU,CAAC,QAAQ,EAAE,CAAC;SACvB;KACF;AACH,CAAC;AAZD,4BAYC"}
|
||||
@@ -0,0 +1,43 @@
|
||||
const _ = require('lodash');
|
||||
const defaultConfig = require('../../config/release-it.json');
|
||||
const GitBase = require('./GitBase');
|
||||
|
||||
class GitRelease extends GitBase {
|
||||
static isEnabled(options) {
|
||||
return options.release;
|
||||
}
|
||||
|
||||
getInitialOptions(options, namespace) {
|
||||
const git = options.git || defaultConfig.git;
|
||||
const gitOptions = _.pick(git, ['tagName', 'pushRepo', 'changelog']);
|
||||
return _.defaults(options[namespace], gitOptions, { isUpdate: options.isUpdate });
|
||||
}
|
||||
|
||||
async init() {
|
||||
await super.init();
|
||||
}
|
||||
|
||||
get token() {
|
||||
const { tokenRef } = this.options;
|
||||
return _.get(process.env, tokenRef, null);
|
||||
}
|
||||
|
||||
async beforeRelease() {
|
||||
const { releaseNotes: script } = this.options;
|
||||
const { changelog } = this.config.getContext();
|
||||
const releaseNotes = script ? await this.exec(script) : changelog;
|
||||
this.setContext({ releaseNotes });
|
||||
if (releaseNotes !== changelog) {
|
||||
this.log.preview({ title: 'release notes', text: releaseNotes });
|
||||
}
|
||||
}
|
||||
|
||||
afterRelease() {
|
||||
const { isReleased, releaseUrl } = this.getContext();
|
||||
if (isReleased) {
|
||||
this.log.log(`🔗 ${releaseUrl}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = GitRelease;
|
||||
@@ -0,0 +1,35 @@
|
||||
let list = require('postcss').list
|
||||
|
||||
let Value = require('../value')
|
||||
|
||||
class CrossFade extends Value {
|
||||
replace (string, prefix) {
|
||||
return list
|
||||
.space(string)
|
||||
.map(value => {
|
||||
if (value.slice(0, +this.name.length + 1) !== this.name + '(') {
|
||||
return value
|
||||
}
|
||||
|
||||
let close = value.lastIndexOf(')')
|
||||
let after = value.slice(close + 1)
|
||||
let args = value.slice(this.name.length + 1, close)
|
||||
|
||||
if (prefix === '-webkit-') {
|
||||
let match = args.match(/\d*.?\d+%?/)
|
||||
if (match) {
|
||||
args = args.slice(match[0].length).trim()
|
||||
args += `, ${match[0]}`
|
||||
} else {
|
||||
args += ', 0.5'
|
||||
}
|
||||
}
|
||||
return prefix + this.name + '(' + args + ')' + after
|
||||
})
|
||||
.join(' ')
|
||||
}
|
||||
}
|
||||
|
||||
CrossFade.names = ['cross-fade']
|
||||
|
||||
module.exports = CrossFade
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"tap.js","sources":["../../../src/internal/operators/tap.ts"],"names":[],"mappings":"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"}
|
||||
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
function __export(m) {
|
||||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
||||
}
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
__export(require("rxjs-compat/operators/min"));
|
||||
//# sourceMappingURL=min.js.map
|
||||
@@ -0,0 +1 @@
|
||||
export * from 'rxjs-compat/operator/do';
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"2":"J E F G A B BC"},B:{"1":"P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t","2":"C K L H M","130":"N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 CC tB I u J E F G A B C K L H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB DC EC","578":"nB oB pB P Q R wB S T U"},D:{"1":"FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB FC","2":"0 1 2 3 4 5 6 7 8 9 I u J E F G A B C K L H M N O v w x y z AB BB CB DB EB"},E:{"2":"I u J E F G A B C K L H GC zB HC IC JC KC 0B qB rB 1B LC MC 2B 3B 4B 5B sB 6B 7B 8B NC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 G B C H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d OC PC QC RC qB 9B SC rB"},G:{"2":"F zB TC AC UC VC WC XC YC ZC aC bC cC","260":"dC eC fC gC hC iC jC kC lC mC 2B 3B 4B 5B sB 6B 7B 8B"},H:{"2":"nC"},I:{"1":"D","2":"tB I oC pC qC rC AC sC tC"},J:{"2":"E A"},K:{"1":"e","2":"A B C qB 9B rB"},L:{"1":"D"},M:{"1":"D"},N:{"2":"A B"},O:{"1":"uC"},P:{"1":"I vC wC xC yC zC 0B 0C 1C 2C 3C 4C sB 5C 6C 7C"},Q:{"1":"1B"},R:{"1":"8C"},S:{"2":"9C"}},B:5,C:"Add to home screen (A2HS)"};
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"1":"F G A B","4":"BC","132":"J E"},B:{"1":"C K L H M N O P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t"},C:{"1":"0 1 2 3 4 5 6 7 8 9 tB I u J E F G A B C K L H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB DC EC","36":"CC"},D:{"1":"0 1 2 3 4 5 6 7 8 9 I u J E F G A B C K L H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R S T U V W X Y Z a b c d f g h i j k l m n o p q r s D t xB yB FC"},E:{"1":"I u J E F G A B C K L H GC zB HC IC JC KC 0B qB rB 1B LC MC 2B 3B 4B 5B sB 6B 7B 8B NC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 G B C H M N O v w x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB e lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d OC PC QC RC qB 9B SC rB"},G:{"1":"F zB TC AC UC VC WC XC YC ZC aC bC cC dC eC fC gC hC iC jC kC lC mC 2B 3B 4B 5B sB 6B 7B 8B"},H:{"1":"nC"},I:{"1":"tB I D oC pC qC rC AC sC tC"},J:{"1":"E A"},K:{"1":"A B C e qB 9B rB"},L:{"1":"D"},M:{"1":"D"},N:{"1":"A B"},O:{"1":"uC"},P:{"1":"I vC wC xC yC zC 0B 0C 1C 2C 3C 4C sB 5C 6C 7C"},Q:{"1":"1B"},R:{"1":"8C"},S:{"1":"9C"}},B:2,C:"CSS inline-block"};
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.js","sources":["../src/internal-compatibility/index.ts"],"names":[],"mappings":"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"}
|
||||
@@ -0,0 +1,11 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var reduce_1 = require("./reduce");
|
||||
function max(comparer) {
|
||||
var max = (typeof comparer === 'function')
|
||||
? function (x, y) { return comparer(x, y) > 0 ? x : y; }
|
||||
: function (x, y) { return x > y ? x : y; };
|
||||
return reduce_1.reduce(max);
|
||||
}
|
||||
exports.max = max;
|
||||
//# sourceMappingURL=max.js.map
|
||||
@@ -0,0 +1 @@
|
||||
export * from 'rxjs-compat/util/noop';
|
||||
@@ -0,0 +1,2 @@
|
||||
import { Subscriber } from '../Subscriber';
|
||||
export declare const subscribeToIterable: <T>(iterable: Iterable<T>) => (subscriber: Subscriber<T>) => Subscriber<T>;
|
||||
@@ -0,0 +1,89 @@
|
||||
'use strict';
|
||||
const path = require('path');
|
||||
const locatePath = require('locate-path');
|
||||
const pathExists = require('path-exists');
|
||||
|
||||
const stop = Symbol('findUp.stop');
|
||||
|
||||
module.exports = async (name, options = {}) => {
|
||||
let directory = path.resolve(options.cwd || '');
|
||||
const {root} = path.parse(directory);
|
||||
const paths = [].concat(name);
|
||||
|
||||
const runMatcher = async locateOptions => {
|
||||
if (typeof name !== 'function') {
|
||||
return locatePath(paths, locateOptions);
|
||||
}
|
||||
|
||||
const foundPath = await name(locateOptions.cwd);
|
||||
if (typeof foundPath === 'string') {
|
||||
return locatePath([foundPath], locateOptions);
|
||||
}
|
||||
|
||||
return foundPath;
|
||||
};
|
||||
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
const foundPath = await runMatcher({...options, cwd: directory});
|
||||
|
||||
if (foundPath === stop) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (foundPath) {
|
||||
return path.resolve(directory, foundPath);
|
||||
}
|
||||
|
||||
if (directory === root) {
|
||||
return;
|
||||
}
|
||||
|
||||
directory = path.dirname(directory);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.sync = (name, options = {}) => {
|
||||
let directory = path.resolve(options.cwd || '');
|
||||
const {root} = path.parse(directory);
|
||||
const paths = [].concat(name);
|
||||
|
||||
const runMatcher = locateOptions => {
|
||||
if (typeof name !== 'function') {
|
||||
return locatePath.sync(paths, locateOptions);
|
||||
}
|
||||
|
||||
const foundPath = name(locateOptions.cwd);
|
||||
if (typeof foundPath === 'string') {
|
||||
return locatePath.sync([foundPath], locateOptions);
|
||||
}
|
||||
|
||||
return foundPath;
|
||||
};
|
||||
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
while (true) {
|
||||
const foundPath = runMatcher({...options, cwd: directory});
|
||||
|
||||
if (foundPath === stop) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (foundPath) {
|
||||
return path.resolve(directory, foundPath);
|
||||
}
|
||||
|
||||
if (directory === root) {
|
||||
return;
|
||||
}
|
||||
|
||||
directory = path.dirname(directory);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.exists = pathExists;
|
||||
|
||||
module.exports.sync.exists = pathExists.sync;
|
||||
|
||||
module.exports.stop = stop;
|
||||
@@ -0,0 +1,670 @@
|
||||
'use strict';
|
||||
const EventEmitter = require('events');
|
||||
const tls = require('tls');
|
||||
const http2 = require('http2');
|
||||
const QuickLRU = require('quick-lru');
|
||||
|
||||
const kCurrentStreamsCount = Symbol('currentStreamsCount');
|
||||
const kRequest = Symbol('request');
|
||||
const kOriginSet = Symbol('cachedOriginSet');
|
||||
const kGracefullyClosing = Symbol('gracefullyClosing');
|
||||
|
||||
const nameKeys = [
|
||||
// `http2.connect()` options
|
||||
'maxDeflateDynamicTableSize',
|
||||
'maxSessionMemory',
|
||||
'maxHeaderListPairs',
|
||||
'maxOutstandingPings',
|
||||
'maxReservedRemoteStreams',
|
||||
'maxSendHeaderBlockLength',
|
||||
'paddingStrategy',
|
||||
|
||||
// `tls.connect()` options
|
||||
'localAddress',
|
||||
'path',
|
||||
'rejectUnauthorized',
|
||||
'minDHSize',
|
||||
|
||||
// `tls.createSecureContext()` options
|
||||
'ca',
|
||||
'cert',
|
||||
'clientCertEngine',
|
||||
'ciphers',
|
||||
'key',
|
||||
'pfx',
|
||||
'servername',
|
||||
'minVersion',
|
||||
'maxVersion',
|
||||
'secureProtocol',
|
||||
'crl',
|
||||
'honorCipherOrder',
|
||||
'ecdhCurve',
|
||||
'dhparam',
|
||||
'secureOptions',
|
||||
'sessionIdContext'
|
||||
];
|
||||
|
||||
const getSortedIndex = (array, value, compare) => {
|
||||
let low = 0;
|
||||
let high = array.length;
|
||||
|
||||
while (low < high) {
|
||||
const mid = (low + high) >>> 1;
|
||||
|
||||
/* istanbul ignore next */
|
||||
if (compare(array[mid], value)) {
|
||||
// This never gets called because we use descending sort. Better to have this anyway.
|
||||
low = mid + 1;
|
||||
} else {
|
||||
high = mid;
|
||||
}
|
||||
}
|
||||
|
||||
return low;
|
||||
};
|
||||
|
||||
const compareSessions = (a, b) => {
|
||||
return a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
|
||||
};
|
||||
|
||||
// See https://tools.ietf.org/html/rfc8336
|
||||
const closeCoveredSessions = (where, session) => {
|
||||
// Clients SHOULD NOT emit new requests on any connection whose Origin
|
||||
// Set is a proper subset of another connection's Origin Set, and they
|
||||
// SHOULD close it once all outstanding requests are satisfied.
|
||||
for (const coveredSession of where) {
|
||||
if (
|
||||
// The set is a proper subset when its length is less than the other set.
|
||||
coveredSession[kOriginSet].length < session[kOriginSet].length &&
|
||||
|
||||
// And the other set includes all elements of the subset.
|
||||
coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
|
||||
|
||||
// Makes sure that the session can handle all requests from the covered session.
|
||||
coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
|
||||
) {
|
||||
// This allows pending requests to finish and prevents making new requests.
|
||||
gracefullyClose(coveredSession);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// This is basically inverted `closeCoveredSessions(...)`.
|
||||
const closeSessionIfCovered = (where, coveredSession) => {
|
||||
for (const session of where) {
|
||||
if (
|
||||
coveredSession[kOriginSet].length < session[kOriginSet].length &&
|
||||
coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
|
||||
coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
|
||||
) {
|
||||
gracefullyClose(coveredSession);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const getSessions = ({agent, isFree}) => {
|
||||
const result = {};
|
||||
|
||||
// eslint-disable-next-line guard-for-in
|
||||
for (const normalizedOptions in agent.sessions) {
|
||||
const sessions = agent.sessions[normalizedOptions];
|
||||
|
||||
const filtered = sessions.filter(session => {
|
||||
const result = session[Agent.kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
|
||||
|
||||
return isFree ? result : !result;
|
||||
});
|
||||
|
||||
if (filtered.length !== 0) {
|
||||
result[normalizedOptions] = filtered;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
const gracefullyClose = session => {
|
||||
session[kGracefullyClosing] = true;
|
||||
|
||||
if (session[kCurrentStreamsCount] === 0) {
|
||||
session.close();
|
||||
}
|
||||
};
|
||||
|
||||
class Agent extends EventEmitter {
|
||||
constructor({timeout = 60000, maxSessions = Infinity, maxFreeSessions = 10, maxCachedTlsSessions = 100} = {}) {
|
||||
super();
|
||||
|
||||
// A session is considered busy when its current streams count
|
||||
// is equal to or greater than the `maxConcurrentStreams` value.
|
||||
|
||||
// A session is considered free when its current streams count
|
||||
// is less than the `maxConcurrentStreams` value.
|
||||
|
||||
// SESSIONS[NORMALIZED_OPTIONS] = [];
|
||||
this.sessions = {};
|
||||
|
||||
// The queue for creating new sessions. It looks like this:
|
||||
// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION
|
||||
//
|
||||
// The entry function has `listeners`, `completed` and `destroyed` properties.
|
||||
// `listeners` is an array of objects containing `resolve` and `reject` functions.
|
||||
// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.
|
||||
// `destroyed` is a boolean. If it's set to true, the session will be destroyed if hasn't connected yet.
|
||||
this.queue = {};
|
||||
|
||||
// Each session will use this timeout value.
|
||||
this.timeout = timeout;
|
||||
|
||||
// Max sessions in total
|
||||
this.maxSessions = maxSessions;
|
||||
|
||||
// Max free sessions in total
|
||||
// TODO: decreasing `maxFreeSessions` should close some sessions
|
||||
this.maxFreeSessions = maxFreeSessions;
|
||||
|
||||
this._freeSessionsCount = 0;
|
||||
this._sessionsCount = 0;
|
||||
|
||||
// We don't support push streams by default.
|
||||
this.settings = {
|
||||
enablePush: false
|
||||
};
|
||||
|
||||
// Reusing TLS sessions increases performance.
|
||||
this.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions});
|
||||
}
|
||||
|
||||
static normalizeOrigin(url, servername) {
|
||||
if (typeof url === 'string') {
|
||||
url = new URL(url);
|
||||
}
|
||||
|
||||
if (servername && url.hostname !== servername) {
|
||||
url.hostname = servername;
|
||||
}
|
||||
|
||||
return url.origin;
|
||||
}
|
||||
|
||||
normalizeOptions(options) {
|
||||
let normalized = '';
|
||||
|
||||
if (options) {
|
||||
for (const key of nameKeys) {
|
||||
if (options[key]) {
|
||||
normalized += `:${options[key]}`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return normalized;
|
||||
}
|
||||
|
||||
_tryToCreateNewSession(normalizedOptions, normalizedOrigin) {
|
||||
if (!(normalizedOptions in this.queue) || !(normalizedOrigin in this.queue[normalizedOptions])) {
|
||||
return;
|
||||
}
|
||||
|
||||
const item = this.queue[normalizedOptions][normalizedOrigin];
|
||||
|
||||
// The entry function can be run only once.
|
||||
// BUG: The session may be never created when:
|
||||
// - the first condition is false AND
|
||||
// - this function is never called with the same arguments in the future.
|
||||
if (this._sessionsCount < this.maxSessions && !item.completed) {
|
||||
item.completed = true;
|
||||
|
||||
item();
|
||||
}
|
||||
}
|
||||
|
||||
getSession(origin, options, listeners) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (Array.isArray(listeners)) {
|
||||
listeners = [...listeners];
|
||||
|
||||
// Resolve the current promise ASAP, we're just moving the listeners.
|
||||
// They will be executed at a different time.
|
||||
resolve();
|
||||
} else {
|
||||
listeners = [{resolve, reject}];
|
||||
}
|
||||
|
||||
const normalizedOptions = this.normalizeOptions(options);
|
||||
const normalizedOrigin = Agent.normalizeOrigin(origin, options && options.servername);
|
||||
|
||||
if (normalizedOrigin === undefined) {
|
||||
for (const {reject} of listeners) {
|
||||
reject(new TypeError('The `origin` argument needs to be a string or an URL object'));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (normalizedOptions in this.sessions) {
|
||||
const sessions = this.sessions[normalizedOptions];
|
||||
|
||||
let maxConcurrentStreams = -1;
|
||||
let currentStreamsCount = -1;
|
||||
let optimalSession;
|
||||
|
||||
// We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal.
|
||||
// Additionally, we are looking for session which has biggest current pending streams count.
|
||||
for (const session of sessions) {
|
||||
const sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;
|
||||
|
||||
if (sessionMaxConcurrentStreams < maxConcurrentStreams) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (session[kOriginSet].includes(normalizedOrigin)) {
|
||||
const sessionCurrentStreamsCount = session[kCurrentStreamsCount];
|
||||
|
||||
if (
|
||||
sessionCurrentStreamsCount >= sessionMaxConcurrentStreams ||
|
||||
session[kGracefullyClosing] ||
|
||||
// Unfortunately the `close` event isn't called immediately,
|
||||
// so `session.destroyed` is `true`, but `session.closed` is `false`.
|
||||
session.destroyed
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// We only need set this once.
|
||||
if (!optimalSession) {
|
||||
maxConcurrentStreams = sessionMaxConcurrentStreams;
|
||||
}
|
||||
|
||||
// We're looking for the session which has biggest current pending stream count,
|
||||
// in order to minimalize the amount of active sessions.
|
||||
if (sessionCurrentStreamsCount > currentStreamsCount) {
|
||||
optimalSession = session;
|
||||
currentStreamsCount = sessionCurrentStreamsCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (optimalSession) {
|
||||
/* istanbul ignore next: safety check */
|
||||
if (listeners.length !== 1) {
|
||||
for (const {reject} of listeners) {
|
||||
const error = new Error(
|
||||
`Expected the length of listeners to be 1, got ${listeners.length}.\n` +
|
||||
'Please report this to https://github.com/szmarczak/http2-wrapper/'
|
||||
);
|
||||
|
||||
reject(error);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
listeners[0].resolve(optimalSession);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (normalizedOptions in this.queue) {
|
||||
if (normalizedOrigin in this.queue[normalizedOptions]) {
|
||||
// There's already an item in the queue, just attach ourselves to it.
|
||||
this.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);
|
||||
|
||||
// This shouldn't be executed here.
|
||||
// See the comment inside _tryToCreateNewSession.
|
||||
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
this.queue[normalizedOptions] = {};
|
||||
}
|
||||
|
||||
// The entry must be removed from the queue IMMEDIATELY when:
|
||||
// 1. the session connects successfully,
|
||||
// 2. an error occurs.
|
||||
const removeFromQueue = () => {
|
||||
// Our entry can be replaced. We cannot remove the new one.
|
||||
if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {
|
||||
delete this.queue[normalizedOptions][normalizedOrigin];
|
||||
|
||||
if (Object.keys(this.queue[normalizedOptions]).length === 0) {
|
||||
delete this.queue[normalizedOptions];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// The main logic is here
|
||||
const entry = () => {
|
||||
const name = `${normalizedOrigin}:${normalizedOptions}`;
|
||||
let receivedSettings = false;
|
||||
|
||||
try {
|
||||
const session = http2.connect(origin, {
|
||||
createConnection: this.createConnection,
|
||||
settings: this.settings,
|
||||
session: this.tlsSessionCache.get(name),
|
||||
...options
|
||||
});
|
||||
session[kCurrentStreamsCount] = 0;
|
||||
session[kGracefullyClosing] = false;
|
||||
|
||||
const isFree = () => session[kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
|
||||
let wasFree = true;
|
||||
|
||||
session.socket.once('session', tlsSession => {
|
||||
this.tlsSessionCache.set(name, tlsSession);
|
||||
});
|
||||
|
||||
session.once('error', error => {
|
||||
// Listeners are empty when the session successfully connected.
|
||||
for (const {reject} of listeners) {
|
||||
reject(error);
|
||||
}
|
||||
|
||||
// The connection got broken, purge the cache.
|
||||
this.tlsSessionCache.delete(name);
|
||||
});
|
||||
|
||||
session.setTimeout(this.timeout, () => {
|
||||
// Terminates all streams owned by this session.
|
||||
// TODO: Maybe the streams should have a "Session timed out" error?
|
||||
session.destroy();
|
||||
});
|
||||
|
||||
session.once('close', () => {
|
||||
if (receivedSettings) {
|
||||
// 1. If it wasn't free then no need to decrease because
|
||||
// it has been decreased already in session.request().
|
||||
// 2. `stream.once('close')` won't increment the count
|
||||
// because the session is already closed.
|
||||
if (wasFree) {
|
||||
this._freeSessionsCount--;
|
||||
}
|
||||
|
||||
this._sessionsCount--;
|
||||
|
||||
// This cannot be moved to the stream logic,
|
||||
// because there may be a session that hadn't made a single request.
|
||||
const where = this.sessions[normalizedOptions];
|
||||
where.splice(where.indexOf(session), 1);
|
||||
|
||||
if (where.length === 0) {
|
||||
delete this.sessions[normalizedOptions];
|
||||
}
|
||||
} else {
|
||||
// Broken connection
|
||||
const error = new Error('Session closed without receiving a SETTINGS frame');
|
||||
error.code = 'HTTP2WRAPPER_NOSETTINGS';
|
||||
|
||||
for (const {reject} of listeners) {
|
||||
reject(error);
|
||||
}
|
||||
|
||||
removeFromQueue();
|
||||
}
|
||||
|
||||
// There may be another session awaiting.
|
||||
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
|
||||
});
|
||||
|
||||
// Iterates over the queue and processes listeners.
|
||||
const processListeners = () => {
|
||||
if (!(normalizedOptions in this.queue) || !isFree()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const origin of session[kOriginSet]) {
|
||||
if (origin in this.queue[normalizedOptions]) {
|
||||
const {listeners} = this.queue[normalizedOptions][origin];
|
||||
|
||||
// Prevents session overloading.
|
||||
while (listeners.length !== 0 && isFree()) {
|
||||
// We assume `resolve(...)` calls `request(...)` *directly*,
|
||||
// otherwise the session will get overloaded.
|
||||
listeners.shift().resolve(session);
|
||||
}
|
||||
|
||||
const where = this.queue[normalizedOptions];
|
||||
if (where[origin].listeners.length === 0) {
|
||||
delete where[origin];
|
||||
|
||||
if (Object.keys(where).length === 0) {
|
||||
delete this.queue[normalizedOptions];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// We're no longer free, no point in continuing.
|
||||
if (!isFree()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.
|
||||
session.on('origin', () => {
|
||||
session[kOriginSet] = session.originSet;
|
||||
|
||||
if (!isFree()) {
|
||||
// The session is full.
|
||||
return;
|
||||
}
|
||||
|
||||
processListeners();
|
||||
|
||||
// Close covered sessions (if possible).
|
||||
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
||||
});
|
||||
|
||||
session.once('remoteSettings', () => {
|
||||
// Fix Node.js bug preventing the process from exiting
|
||||
session.ref();
|
||||
session.unref();
|
||||
|
||||
this._sessionsCount++;
|
||||
|
||||
// The Agent could have been destroyed already.
|
||||
if (entry.destroyed) {
|
||||
const error = new Error('Agent has been destroyed');
|
||||
|
||||
for (const listener of listeners) {
|
||||
listener.reject(error);
|
||||
}
|
||||
|
||||
session.destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
session[kOriginSet] = session.originSet;
|
||||
|
||||
{
|
||||
const where = this.sessions;
|
||||
|
||||
if (normalizedOptions in where) {
|
||||
const sessions = where[normalizedOptions];
|
||||
sessions.splice(getSortedIndex(sessions, session, compareSessions), 0, session);
|
||||
} else {
|
||||
where[normalizedOptions] = [session];
|
||||
}
|
||||
}
|
||||
|
||||
this._freeSessionsCount += 1;
|
||||
receivedSettings = true;
|
||||
|
||||
this.emit('session', session);
|
||||
|
||||
processListeners();
|
||||
removeFromQueue();
|
||||
|
||||
// TODO: Close last recently used (or least used?) session
|
||||
if (session[kCurrentStreamsCount] === 0 && this._freeSessionsCount > this.maxFreeSessions) {
|
||||
session.close();
|
||||
}
|
||||
|
||||
// Check if we haven't managed to execute all listeners.
|
||||
if (listeners.length !== 0) {
|
||||
// Request for a new session with predefined listeners.
|
||||
this.getSession(normalizedOrigin, options, listeners);
|
||||
listeners.length = 0;
|
||||
}
|
||||
|
||||
// `session.remoteSettings.maxConcurrentStreams` might get increased
|
||||
session.on('remoteSettings', () => {
|
||||
processListeners();
|
||||
|
||||
// In case the Origin Set changes
|
||||
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
||||
});
|
||||
});
|
||||
|
||||
// Shim `session.request()` in order to catch all streams
|
||||
session[kRequest] = session.request;
|
||||
session.request = (headers, streamOptions) => {
|
||||
if (session[kGracefullyClosing]) {
|
||||
throw new Error('The session is gracefully closing. No new streams are allowed.');
|
||||
}
|
||||
|
||||
const stream = session[kRequest](headers, streamOptions);
|
||||
|
||||
// The process won't exit until the session is closed or all requests are gone.
|
||||
session.ref();
|
||||
|
||||
++session[kCurrentStreamsCount];
|
||||
|
||||
if (session[kCurrentStreamsCount] === session.remoteSettings.maxConcurrentStreams) {
|
||||
this._freeSessionsCount--;
|
||||
}
|
||||
|
||||
stream.once('close', () => {
|
||||
wasFree = isFree();
|
||||
|
||||
--session[kCurrentStreamsCount];
|
||||
|
||||
if (!session.destroyed && !session.closed) {
|
||||
closeSessionIfCovered(this.sessions[normalizedOptions], session);
|
||||
|
||||
if (isFree() && !session.closed) {
|
||||
if (!wasFree) {
|
||||
this._freeSessionsCount++;
|
||||
|
||||
wasFree = true;
|
||||
}
|
||||
|
||||
const isEmpty = session[kCurrentStreamsCount] === 0;
|
||||
|
||||
if (isEmpty) {
|
||||
session.unref();
|
||||
}
|
||||
|
||||
if (
|
||||
isEmpty &&
|
||||
(
|
||||
this._freeSessionsCount > this.maxFreeSessions ||
|
||||
session[kGracefullyClosing]
|
||||
)
|
||||
) {
|
||||
session.close();
|
||||
} else {
|
||||
closeCoveredSessions(this.sessions[normalizedOptions], session);
|
||||
processListeners();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return stream;
|
||||
};
|
||||
} catch (error) {
|
||||
for (const listener of listeners) {
|
||||
listener.reject(error);
|
||||
}
|
||||
|
||||
removeFromQueue();
|
||||
}
|
||||
};
|
||||
|
||||
entry.listeners = listeners;
|
||||
entry.completed = false;
|
||||
entry.destroyed = false;
|
||||
|
||||
this.queue[normalizedOptions][normalizedOrigin] = entry;
|
||||
this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
|
||||
});
|
||||
}
|
||||
|
||||
request(origin, options, headers, streamOptions) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.getSession(origin, options, [{
|
||||
reject,
|
||||
resolve: session => {
|
||||
try {
|
||||
resolve(session.request(headers, streamOptions));
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
}
|
||||
}]);
|
||||
});
|
||||
}
|
||||
|
||||
createConnection(origin, options) {
|
||||
return Agent.connect(origin, options);
|
||||
}
|
||||
|
||||
static connect(origin, options) {
|
||||
options.ALPNProtocols = ['h2'];
|
||||
|
||||
const port = origin.port || 443;
|
||||
const host = origin.hostname || origin.host;
|
||||
|
||||
if (typeof options.servername === 'undefined') {
|
||||
options.servername = host;
|
||||
}
|
||||
|
||||
return tls.connect(port, host, options);
|
||||
}
|
||||
|
||||
closeFreeSessions() {
|
||||
for (const sessions of Object.values(this.sessions)) {
|
||||
for (const session of sessions) {
|
||||
if (session[kCurrentStreamsCount] === 0) {
|
||||
session.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
destroy(reason) {
|
||||
for (const sessions of Object.values(this.sessions)) {
|
||||
for (const session of sessions) {
|
||||
session.destroy(reason);
|
||||
}
|
||||
}
|
||||
|
||||
for (const entriesOfAuthority of Object.values(this.queue)) {
|
||||
for (const entry of Object.values(entriesOfAuthority)) {
|
||||
entry.destroyed = true;
|
||||
}
|
||||
}
|
||||
|
||||
// New requests should NOT attach to destroyed sessions
|
||||
this.queue = {};
|
||||
}
|
||||
|
||||
get freeSessions() {
|
||||
return getSessions({agent: this, isFree: true});
|
||||
}
|
||||
|
||||
get busySessions() {
|
||||
return getSessions({agent: this, isFree: false});
|
||||
}
|
||||
}
|
||||
|
||||
Agent.kCurrentStreamsCount = kCurrentStreamsCount;
|
||||
Agent.kGracefullyClosing = kGracefullyClosing;
|
||||
|
||||
module.exports = {
|
||||
Agent,
|
||||
globalAgent: new Agent()
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
"use strict";
|
||||
function __export(m) {
|
||||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
||||
}
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
__export(require("rxjs-compat/operator/timeout"));
|
||||
//# sourceMappingURL=timeout.js.map
|
||||
Reference in New Issue
Block a user