@mnmtanish/singly 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.npmignore ADDED
@@ -0,0 +1,9 @@
1
+ node_modules
2
+ coverage
3
+
4
+ src
5
+ __tests__
6
+ __mocks__
7
+
8
+ changelog.md
9
+ tsconfig.json
@@ -0,0 +1,2 @@
1
+ export declare function singlify(fn: Function): Function;
2
+ export declare function singly(_target: any, _name: string, desc: any): void;
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (_) try {
17
+ if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [0, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ function singlify(fn) {
39
+ var running = false;
40
+ var pending = false;
41
+ return function () {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ return __generator(this, function (_a) {
44
+ switch (_a.label) {
45
+ case 0:
46
+ if (running) {
47
+ pending = true;
48
+ return [2 /*return*/];
49
+ }
50
+ running = true;
51
+ _a.label = 1;
52
+ case 1:
53
+ pending = false;
54
+ return [4 /*yield*/, fn()];
55
+ case 2:
56
+ _a.sent();
57
+ _a.label = 3;
58
+ case 3:
59
+ if (pending) return [3 /*break*/, 1];
60
+ _a.label = 4;
61
+ case 4:
62
+ running = false;
63
+ return [2 /*return*/];
64
+ }
65
+ });
66
+ });
67
+ };
68
+ }
69
+ exports.singlify = singlify;
70
+ function singly(_target, _name, desc) {
71
+ if (typeof desc.value !== 'function') {
72
+ throw new Error('@singly can only be used on methods');
73
+ }
74
+ if (desc.value.length > 0) {
75
+ throw new Error('@singly can only be applied on methods without any arguments');
76
+ }
77
+ desc.value = singlify(desc.value);
78
+ }
79
+ exports.singly = singly;
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAAyB,EAAY;IACnC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,CAAC;;;;;wBACL,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;4BACZ,OAAO,GAAG,IAAI,CAAC;4BACf,MAAM,gBAAC;wBACT,CAAC;wBACD,OAAO,GAAG,IAAI,CAAC;;;wBAEb,OAAO,GAAG,KAAK,CAAC;wBAChB,qBAAM,EAAE,EAAE,EAAA;;wBAAV,SAAU,CAAC;;;4BACJ,OAAO,CAAC;;;wBACjB,OAAO,GAAG,KAAK,CAAC;;;;;KACjB,CAAC;AACJ,CAAC;AAfD,4BAeC;AAED,gBAAuB,OAAY,EAAE,KAAa,EAAE,IAAS;IAC3D,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AARD,wBAQC"}
@@ -0,0 +1,4 @@
1
+ declare global {
2
+ const setTimeout: Function;
3
+ }
4
+ export {};
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ return new (P || (P = Promise))(function (resolve, reject) {
13
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
15
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
16
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
17
+ });
18
+ };
19
+ var __generator = (this && this.__generator) || function (thisArg, body) {
20
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
21
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
22
+ function verb(n) { return function (v) { return step([n, v]); }; }
23
+ function step(op) {
24
+ if (f) throw new TypeError("Generator is already executing.");
25
+ while (_) try {
26
+ if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
27
+ if (y = 0, t) op = [0, t.value];
28
+ switch (op[0]) {
29
+ case 0: case 1: t = op; break;
30
+ case 4: _.label++; return { value: op[1], done: false };
31
+ case 5: _.label++; y = op[1]; op = [0]; continue;
32
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
33
+ default:
34
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
35
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
36
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
37
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
38
+ if (t[2]) _.ops.pop();
39
+ _.trys.pop(); continue;
40
+ }
41
+ op = body.call(thisArg, _);
42
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
43
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
44
+ }
45
+ };
46
+ var _this = this;
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ var index_1 = require("./index");
49
+ function sleep(t) {
50
+ return new Promise(function (f) { return setTimeout(f, t); });
51
+ }
52
+ describe('singlify', function () {
53
+ function prepare() {
54
+ var resolve = function () { };
55
+ var promise = new Promise(function (_resolve) { return resolve = _resolve; });
56
+ var original = jest.fn(function () { return promise; });
57
+ var modified = index_1.singlify(original);
58
+ return { original: original, modified: modified, promise: promise, resolve: resolve };
59
+ }
60
+ it('should call the target when it was run for the first time', function () { return __awaiter(_this, void 0, void 0, function () {
61
+ var _a, original, modified;
62
+ return __generator(this, function (_b) {
63
+ _a = prepare(), original = _a.original, modified = _a.modified;
64
+ modified();
65
+ expect(original).toHaveBeenCalledTimes(1);
66
+ return [2 /*return*/];
67
+ });
68
+ }); });
69
+ it('should not call the target until the result promise resolves', function () { return __awaiter(_this, void 0, void 0, function () {
70
+ var _a, original, modified;
71
+ return __generator(this, function (_b) {
72
+ switch (_b.label) {
73
+ case 0:
74
+ _a = prepare(), original = _a.original, modified = _a.modified;
75
+ modified();
76
+ expect(original).toHaveBeenCalledTimes(1);
77
+ modified();
78
+ return [4 /*yield*/, sleep(10)];
79
+ case 1:
80
+ _b.sent();
81
+ expect(original).toHaveBeenCalledTimes(1);
82
+ return [2 /*return*/];
83
+ }
84
+ });
85
+ }); });
86
+ it('should call the target after the result promise resolves', function () { return __awaiter(_this, void 0, void 0, function () {
87
+ var _a, original, modified, resolve;
88
+ return __generator(this, function (_b) {
89
+ switch (_b.label) {
90
+ case 0:
91
+ _a = prepare(), original = _a.original, modified = _a.modified, resolve = _a.resolve;
92
+ modified();
93
+ expect(original).toHaveBeenCalledTimes(1);
94
+ resolve();
95
+ return [4 /*yield*/, sleep(10)];
96
+ case 1:
97
+ _b.sent();
98
+ modified();
99
+ expect(original).toHaveBeenCalledTimes(2);
100
+ return [2 /*return*/];
101
+ }
102
+ });
103
+ }); });
104
+ it('should call the target again if called before promise resolves', function () { return __awaiter(_this, void 0, void 0, function () {
105
+ var _a, original, modified, resolve;
106
+ return __generator(this, function (_b) {
107
+ switch (_b.label) {
108
+ case 0:
109
+ _a = prepare(), original = _a.original, modified = _a.modified, resolve = _a.resolve;
110
+ modified();
111
+ expect(original).toHaveBeenCalledTimes(1);
112
+ modified(); // called before resolve
113
+ resolve();
114
+ return [4 /*yield*/, sleep(10)];
115
+ case 1:
116
+ _b.sent();
117
+ expect(original).toHaveBeenCalledTimes(2);
118
+ return [2 /*return*/];
119
+ }
120
+ });
121
+ }); });
122
+ });
123
+ describe('singly', function () {
124
+ function prepare() {
125
+ var resolve = function () { };
126
+ var promise = new Promise(function (_resolve) { return resolve = _resolve; });
127
+ var original = jest.fn(function () { return promise; });
128
+ var Tester = (function () {
129
+ function Tester() {
130
+ }
131
+ Tester.prototype.test = function () {
132
+ original();
133
+ return promise;
134
+ };
135
+ __decorate([
136
+ index_1.singly,
137
+ __metadata("design:type", Function),
138
+ __metadata("design:paramtypes", []),
139
+ __metadata("design:returntype", void 0)
140
+ ], Tester.prototype, "test", null);
141
+ return Tester;
142
+ }());
143
+ var tester = new Tester();
144
+ var modified = function () { return tester.test(); };
145
+ return { original: original, modified: modified, promise: promise, resolve: resolve };
146
+ }
147
+ it('should call the target when it was run for the first time', function () { return __awaiter(_this, void 0, void 0, function () {
148
+ var _a, original, modified;
149
+ return __generator(this, function (_b) {
150
+ _a = prepare(), original = _a.original, modified = _a.modified;
151
+ modified();
152
+ expect(original).toHaveBeenCalledTimes(1);
153
+ return [2 /*return*/];
154
+ });
155
+ }); });
156
+ it('should not call the target until the result promise resolves', function () { return __awaiter(_this, void 0, void 0, function () {
157
+ var _a, original, modified;
158
+ return __generator(this, function (_b) {
159
+ switch (_b.label) {
160
+ case 0:
161
+ _a = prepare(), original = _a.original, modified = _a.modified;
162
+ modified();
163
+ expect(original).toHaveBeenCalledTimes(1);
164
+ modified();
165
+ return [4 /*yield*/, sleep(10)];
166
+ case 1:
167
+ _b.sent();
168
+ expect(original).toHaveBeenCalledTimes(1);
169
+ return [2 /*return*/];
170
+ }
171
+ });
172
+ }); });
173
+ it('should call the target after the result promise resolves', function () { return __awaiter(_this, void 0, void 0, function () {
174
+ var _a, original, modified, resolve;
175
+ return __generator(this, function (_b) {
176
+ switch (_b.label) {
177
+ case 0:
178
+ _a = prepare(), original = _a.original, modified = _a.modified, resolve = _a.resolve;
179
+ modified();
180
+ expect(original).toHaveBeenCalledTimes(1);
181
+ resolve();
182
+ return [4 /*yield*/, sleep(10)];
183
+ case 1:
184
+ _b.sent();
185
+ modified();
186
+ expect(original).toHaveBeenCalledTimes(2);
187
+ return [2 /*return*/];
188
+ }
189
+ });
190
+ }); });
191
+ it('should call the target again if called before promise resolves', function () { return __awaiter(_this, void 0, void 0, function () {
192
+ var _a, original, modified, resolve;
193
+ return __generator(this, function (_b) {
194
+ switch (_b.label) {
195
+ case 0:
196
+ _a = prepare(), original = _a.original, modified = _a.modified, resolve = _a.resolve;
197
+ modified();
198
+ expect(original).toHaveBeenCalledTimes(1);
199
+ modified(); // called before resolve
200
+ resolve();
201
+ return [4 /*yield*/, sleep(10)];
202
+ case 1:
203
+ _b.sent();
204
+ expect(original).toHaveBeenCalledTimes(2);
205
+ return [2 /*return*/];
206
+ }
207
+ });
208
+ }); });
209
+ });
210
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@mnmtanish/singly",
3
+ "version": "1.0.0",
4
+ "description": "Debounce a promise returning function based on promise completion",
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "clean": "rimraf coverage dist",
8
+ "build": "npm run clean && tsc",
9
+ "test": "jest --coverage --watch",
10
+ "lint": "prettier --print-width 120 --single-quote --trailing-comma es5 --write \"src/**/*.ts\"",
11
+ "prepublish": "npm run build"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/mnmtanish/singly.git"
16
+ },
17
+ "keywords": [],
18
+ "author": "Muhammed Thanish <mnmtanish@gmail.com> (http://thanish.me/)",
19
+ "license": "MIT",
20
+ "bugs": {
21
+ "url": "https://github.com/mnmtanish/singly/issues"
22
+ },
23
+ "homepage": "https://github.com/mnmtanish/singly#readme",
24
+ "devDependencies": {
25
+ "@types/jest": "^20.0.0",
26
+ "jest": "^20.0.0",
27
+ "prettier": "^1.5.3",
28
+ "rimraf": "^2.6.1",
29
+ "ts-jest": "^20.0.0",
30
+ "typescript": "^2.0.0"
31
+ },
32
+ "jest": {
33
+ "transform": {
34
+ ".ts": "<rootDir>/node_modules/ts-jest/preprocessor.js"
35
+ },
36
+ "testRegex": "\\.spec\\.ts$",
37
+ "moduleFileExtensions": [
38
+ "ts",
39
+ "js"
40
+ ],
41
+ "mapCoverage": true,
42
+ "collectCoverageFrom": [
43
+ "src/**/*.ts",
44
+ "!src/index.ts",
45
+ "!src/__test_utils.ts",
46
+ "!src/**/*.mock.ts",
47
+ "!src/**/*.d.ts"
48
+ ]
49
+ }
50
+ }
package/readme.md ADDED
@@ -0,0 +1,3 @@
1
+ # singly
2
+
3
+ > todo