diff --git a/package-lock.json b/package-lock.json
index 808fabb..01e7a94 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -979,6 +979,12 @@
"integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
"dev": true
},
+ "command-exists": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.6.tgz",
+ "integrity": "sha512-Qst/zUUNmS/z3WziPxyqjrcz09pm+2Knbs5mAZL4VAE0sSrNY1/w8+/YxeHcoBTsO6iojA6BW7eFf27Eg2MRuw==",
+ "dev": true
+ },
"commander": {
"version": "2.20.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
@@ -1090,6 +1096,12 @@
"which": "^1.2.9"
}
},
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
@@ -4125,6 +4137,12 @@
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
+ "p-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-debounce/-/p-debounce-1.0.0.tgz",
+ "integrity": "sha1-y38svu/YegnrqGHhErZ1J+Yh4v0=",
+ "dev": true
+ },
"p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
@@ -5520,6 +5538,22 @@
}
}
},
+ "temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "dev": true
+ },
+ "tempy": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.2.1.tgz",
+ "integrity": "sha512-LB83o9bfZGrntdqPuRdanIVCPReam9SOZKW0fOy5I9X3A854GGWi0tjCqoXEk84XIEYBc/x9Hq3EFop/H5wJaw==",
+ "dev": true,
+ "requires": {
+ "temp-dir": "^1.0.0",
+ "unique-string": "^1.0.0"
+ }
+ },
"test-exclude": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
@@ -5769,6 +5803,21 @@
"integrity": "sha1-uk99si2RU0oZKdkACdzhYety/T8=",
"dev": true
},
+ "typescript-language-server": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/typescript-language-server/-/typescript-language-server-0.3.8.tgz",
+ "integrity": "sha512-ohi+libVtaJ0F8asuXeqYlrPV84AkbcpWsp5kBeO6XnCrilwQS+elDrJ+jPu2tfVy3CIUpUbUYUmg4Bq3CA/XQ==",
+ "dev": true,
+ "requires": {
+ "command-exists": "1.2.6",
+ "commander": "^2.11.0",
+ "fs-extra": "^7.0.0",
+ "p-debounce": "^1.0.0",
+ "tempy": "^0.2.1",
+ "vscode-languageserver": "^4.4.0",
+ "vscode-uri": "^1.0.5"
+ }
+ },
"uglify-js": {
"version": "3.4.10",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
@@ -5869,6 +5918,15 @@
"integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
"dev": true
},
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -5970,6 +6028,44 @@
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
"dev": true
},
+ "vscode-jsonrpc": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz",
+ "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==",
+ "dev": true
+ },
+ "vscode-languageserver": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-4.4.2.tgz",
+ "integrity": "sha512-61y8Raevi9EigDgg9NelvT9cUAohiEbUl1LOwQQgOCAaNX62yKny/ddi0uC+FUTm4CzsjhBu+06R+vYgfCYReA==",
+ "dev": true,
+ "requires": {
+ "vscode-languageserver-protocol": "^3.10.3",
+ "vscode-uri": "^1.0.5"
+ }
+ },
+ "vscode-languageserver-protocol": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz",
+ "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==",
+ "dev": true,
+ "requires": {
+ "vscode-jsonrpc": "^4.0.0",
+ "vscode-languageserver-types": "3.14.0"
+ }
+ },
+ "vscode-languageserver-types": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz",
+ "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.8.tgz",
+ "integrity": "sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ==",
+ "dev": true
+ },
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
diff --git a/package.json b/package.json
index 1c4f26d..ba9a96e 100644
--- a/package.json
+++ b/package.json
@@ -52,6 +52,7 @@
"standard": "^12.0.1",
"ts-node": "^8.3.0",
"typescript": "^3.5.2",
+ "typescript-language-server": "^0.3.8",
"uglify-js": "^3.1.1"
},
"dependencies": {
diff --git a/src/index.ts b/src/index.ts
index 34d2dc5..baab018 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -13,7 +13,7 @@ class Hold extends MulticastSource implements Stream, Disposable, Sink<
private task?: ScheduledTask = undefined
run (sink: Sink, scheduler: Scheduler): Disposable {
- if (this._shouldScheduleFlush()) {
+ if (this._hasValue()) {
this._scheduleFlush(sink, scheduler)
}
@@ -59,13 +59,13 @@ class Hold extends MulticastSource implements Stream, Disposable, Sink<
return this.held !== undefined
}
- private _hasSinks (): boolean {
- return this.sinks.length > 0
- }
+ // private _hasSinks (): boolean {
+ // return this.sinks.length > 0
+ // }
- private _shouldScheduleFlush (): boolean {
- return this._hasValue() && this._hasSinks()
- }
+ // private _shouldScheduleFlush (): boolean {
+ // return this._hasValue() && this._hasSinks()
+ // }
private _scheduleFlush (sink: Sink, scheduler: Scheduler): void {
this.pendingSinks.push(sink)
diff --git a/test/index-test.ts b/test/index-test.ts
index 7e55e17..a48ef79 100644
--- a/test/index-test.ts
+++ b/test/index-test.ts
@@ -6,6 +6,7 @@ import { hold } from '../src'
import { Scheduler, Sink, Stream, Time } from '@most/types'
import {
at,
+ combineArray,
mergeArray,
merge,
join,
@@ -13,6 +14,7 @@ import {
periodic,
runEffects,
scan,
+ switchLatest,
take,
tap,
propagateEventTask
@@ -25,7 +27,12 @@ const collect = (stream: Stream, scheduler: Scheduler): Promise eventValues)
}
-const verifyHold = (f: (stream: Stream, scheduler: Scheduler) => Promise): Promise<[ReadonlyArray, A]> => {
+const verifyHold = (
+ f: (
+ stream: Stream,
+ scheduler: Scheduler
+ ) => Promise
+): Promise<[ReadonlyArray, A]> => {
const scheduler = newDefaultScheduler()
const s = hold(mergeArray([at(0, 0), at(10, 1), at(20, 2)]))
@@ -73,7 +80,7 @@ describe('hold', () => {
return asap(propagateEventTask('foo', sink), scheduler)
}
return {
- dispose () {}
+ dispose () {} // asap(propagateEndTask(sink), scheduler)
}
}
}
@@ -101,6 +108,31 @@ describe('hold', () => {
it('should emit two events with hold for two observers', () => {
return test(hold(new Source()), ['foo', 'foo'])
})
+
+ it('shall pass', () => {
+ const hos: Stream[]> = scan(
+ (acc: Stream[], _s: void) => acc.concat([
+ hold(new Source())
+ ]),
+ [],
+ take(2, periodic(3))
+ )
+
+ const flat: Stream = take(2, switchLatest(
+ map(
+ arr => combineArray(
+ (...a: string[]) => a.join(),
+ arr
+ ),
+ hos
+ )
+ ))
+
+ const scheduler = newDefaultScheduler()
+ return collect(flat, scheduler).then(
+ events => eq(['foo', 'foo,foo'], events)
+ )
+ })
})
it(`should not propagate held event during the same tick as run`, () => {