├── README.md ├── .gitignore ├── tsconfig.json ├── dist └── index.html ├── src ├── index.ts └── index.spec.ts ├── webpack.dev.js ├── karma.conf.js └── package.json /README.md: -------------------------------------------------------------------------------- 1 | # rxjs-typescript-starter -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vscode 3 | dist/index.js 4 | coverage -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "sourceMap": true 6 | } 7 | } -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { interval, of, queueScheduler, defer, timer, SchedulerLike } from 'rxjs'; 2 | import { delay, switchMap, tap, flatMap, map, repeat, delayWhen, concatMap, take } from 'rxjs/operators'; 3 | 4 | // v^v delay 5 | export const createSpecialInterval = (number: number, scheduler ?: SchedulerLike ) => { 6 | return interval(0, scheduler).pipe(concatMap(v => of(v).pipe(delay(v * 1000, scheduler))), take(number)); 7 | } 8 | 9 | createSpecialInterval(100).subscribe(v => { 10 | console.log(v); 11 | console.timeEnd('interval'); 12 | console.time('interval'); 13 | }); -------------------------------------------------------------------------------- /webpack.dev.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | mode: "development", 5 | devtool: "inline-source-map", 6 | devServer: { 7 | contentBase: path.join(__dirname, "dist"), 8 | port: 3000, 9 | open: true, 10 | compress: true 11 | }, 12 | entry: "./src/index.ts", 13 | output: { 14 | filename: "index.js" 15 | }, 16 | resolve: { 17 | extensions: [".ts", ".js", ".json"] 18 | }, 19 | module: { 20 | rules: [ 21 | // all files with a `.ts` or `.tsx` extension will be handled by `ts-loader` 22 | { test: /\.ts$/, loader: "ts-loader" } 23 | ] 24 | } 25 | }; -------------------------------------------------------------------------------- /src/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { createSpecialInterval } from "."; 2 | import { observeOn } from "rxjs/operators"; 3 | import { getTestScheduler, cold } from "jasmine-marbles"; 4 | 5 | describe('index test', () => { 6 | it('fake test', () => { 7 | expect(true).toBe(true); 8 | }); 9 | 10 | it('createSpecialInterval should create special interval', () => { 11 | const source = createSpecialInterval(3, getTestScheduler()); 12 | getTestScheduler().flush(); 13 | source.subscribe(v => { 14 | console.log(v); 15 | }) 16 | 17 | expect(source).toBeObservable(cold('a-b-(c|)', {a: 1, b: 2, c: 3})); 18 | }); 19 | }); -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Thu May 09 2019 16:01:27 GMT+0200 (Central European Summer Time) 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | basePath: './src/', 8 | frameworks: ["jasmine", "karma-typescript"], 9 | files: [ 10 | 'index.ts', 11 | './**/*.spec.ts' 12 | ], 13 | preprocessors: { "**/*.ts": "karma-typescript"}, 14 | reporters: ["progress", "karma-typescript"], 15 | port: 9876, 16 | colors: true, 17 | logLevel: config.LOG_INFO, 18 | autoWatch: false, 19 | browsers: ['ChromeHeadless'], 20 | singleRun: true, 21 | concurrency: Infinity 22 | }) 23 | } 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rxjs-typescript-starter", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "webpack-dev-server --config webpack.dev.js", 8 | "build": "webpack --config webpack.dev.js", 9 | "test": "karma start" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/javascriptru/rxjs-typescript-starter.git" 14 | }, 15 | "author": "", 16 | "license": "ISC", 17 | "bugs": { 18 | "url": "https://github.com/javascriptru/rxjs-typescript-starter/issues" 19 | }, 20 | "homepage": "https://github.com/javascriptru/rxjs-typescript-starter#readme", 21 | "dependencies": { 22 | "@types/karma": "3.0.2", 23 | "rxjs": "6.5.1" 24 | }, 25 | "devDependencies": { 26 | "@types/jasmine": "3.3.12", 27 | "@webpack-cli/init": "^0.2.2", 28 | "babel-plugin-syntax-dynamic-import": "6.18.0", 29 | "jasmine-marbles": "0.5.0", 30 | "karma": "4.1.0", 31 | "karma-chrome-launcher": "2.2.0", 32 | "karma-jasmine": "2.0.1", 33 | "karma-typescript": "4.0.0", 34 | "ts-loader": "5.4.5", 35 | "typescript": "3.4.5", 36 | "webpack": "4.30.0", 37 | "webpack-cli": "3.3.1", 38 | "webpack-dev-server": "3.3.1" 39 | } 40 | } 41 | --------------------------------------------------------------------------------