Skip to content

Commit

Permalink
Merge pull request #39 from FaureWu/feat/yaochen-tracker
Browse files Browse the repository at this point in the history
feat(tracker): add tracker tool
  • Loading branch information
FaureWu authored Dec 16, 2019
2 parents 92443e7 + feab522 commit 2eaed1c
Show file tree
Hide file tree
Showing 12 changed files with 432 additions and 7 deletions.
26 changes: 26 additions & 0 deletions __tests__/traker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import Tracker from '../src/util/tracker';

const tracker = new Tracker();

function delay(time: number): Promise<void> {
// eslint-disable-next-line
return new Promise((resolve): NodeJS.Timeout => setTimeout(resolve, time));
}

async function asyncFunc1(): Promise<void> {
await delay(1000);
tracker.set('READY');
}

async function asyncFunc2(): Promise<boolean> {
await tracker.wait('READY');
return tracker.get('READY');
}

describe('Tracker Test', (): void => {
test('tracker success test', async (): Promise<void> => {
asyncFunc1();
const result = await asyncFunc2();
expect(result).toEqual(true);
});
});
70 changes: 69 additions & 1 deletion dist/zoro.es.js
Original file line number Diff line number Diff line change
Expand Up @@ -1678,6 +1678,74 @@ function createConnectComponent(store, zoro) {
};
}

var Tracker = /** @class */ (function () {
function Tracker() {
this.status = {};
this.events = {};
}
Tracker.prototype.on = function (name, resolve, reject) {
var events = this.events[name];
if (!(events instanceof Array)) {
events = [];
}
events.push({ resolve: resolve, reject: reject });
this.events[name] = events;
};
Tracker.prototype.trigger = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var resolve = _a.resolve;
if (typeof resolve !== 'function')
return;
resolve();
});
delete this.events[name];
}
};
Tracker.prototype.reject = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var reject = _a.reject;
if (typeof reject !== 'function')
return;
reject();
});
delete this.events[name];
}
};
Tracker.prototype.rejectAll = function () {
var _this = this;
Object.keys(this.events).forEach(function (name) { return _this.reject(name); });
};
Tracker.prototype.get = function (name) {
return !!this.status[name];
};
Tracker.prototype.set = function (name) {
this.status[name] = true;
this.trigger(name);
};
Tracker.prototype.unset = function (name) {
if (typeof name === 'string') {
delete this.status[name];
this.reject(name);
return;
}
this.status = {};
this.rejectAll();
};
Tracker.prototype.wait = function (name) {
var _this = this;
if (this.get(name))
;
return new Promise(function (resolve, reject) {
_this.on(name, resolve, reject);
});
};
return Tracker;
}());

var scope = {};
function connectComponent(mapStateToProps, mapDispatchToProps) {
assert(isObject(scope.zoro), 'connectComponent can be call after call app.start()');
Expand All @@ -1692,4 +1760,4 @@ function zoro(config) {
}

export default zoro;
export { connectComponent, dispatcher };
export { Tracker, connectComponent, dispatcher };
69 changes: 69 additions & 0 deletions dist/zoro.umd.js
Original file line number Diff line number Diff line change
Expand Up @@ -1684,6 +1684,74 @@
};
}

var Tracker = /** @class */ (function () {
function Tracker() {
this.status = {};
this.events = {};
}
Tracker.prototype.on = function (name, resolve, reject) {
var events = this.events[name];
if (!(events instanceof Array)) {
events = [];
}
events.push({ resolve: resolve, reject: reject });
this.events[name] = events;
};
Tracker.prototype.trigger = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var resolve = _a.resolve;
if (typeof resolve !== 'function')
return;
resolve();
});
delete this.events[name];
}
};
Tracker.prototype.reject = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var reject = _a.reject;
if (typeof reject !== 'function')
return;
reject();
});
delete this.events[name];
}
};
Tracker.prototype.rejectAll = function () {
var _this = this;
Object.keys(this.events).forEach(function (name) { return _this.reject(name); });
};
Tracker.prototype.get = function (name) {
return !!this.status[name];
};
Tracker.prototype.set = function (name) {
this.status[name] = true;
this.trigger(name);
};
Tracker.prototype.unset = function (name) {
if (typeof name === 'string') {
delete this.status[name];
this.reject(name);
return;
}
this.status = {};
this.rejectAll();
};
Tracker.prototype.wait = function (name) {
var _this = this;
if (this.get(name))
;
return new Promise(function (resolve, reject) {
_this.on(name, resolve, reject);
});
};
return Tracker;
}());

var scope = {};
function connectComponent(mapStateToProps, mapDispatchToProps) {
assert(isObject(scope.zoro), 'connectComponent can be call after call app.start()');
Expand All @@ -1697,6 +1765,7 @@
return new App(scope.zoro);
}

exports.Tracker = Tracker;
exports.connectComponent = connectComponent;
exports.default = zoro;
exports.dispatcher = dispatcher;
Expand Down
70 changes: 69 additions & 1 deletion dist/zoro.weapp-gen.js
Original file line number Diff line number Diff line change
Expand Up @@ -2245,6 +2245,74 @@ var App = /** @class */ (function () {
return App;
}());

var Tracker = /** @class */ (function () {
function Tracker() {
this.status = {};
this.events = {};
}
Tracker.prototype.on = function (name, resolve, reject) {
var events = this.events[name];
if (!(events instanceof Array)) {
events = [];
}
events.push({ resolve: resolve, reject: reject });
this.events[name] = events;
};
Tracker.prototype.trigger = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var resolve = _a.resolve;
if (typeof resolve !== 'function')
return;
resolve();
});
delete this.events[name];
}
};
Tracker.prototype.reject = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var reject = _a.reject;
if (typeof reject !== 'function')
return;
reject();
});
delete this.events[name];
}
};
Tracker.prototype.rejectAll = function () {
var _this = this;
Object.keys(this.events).forEach(function (name) { return _this.reject(name); });
};
Tracker.prototype.get = function (name) {
return !!this.status[name];
};
Tracker.prototype.set = function (name) {
this.status[name] = true;
this.trigger(name);
};
Tracker.prototype.unset = function (name) {
if (typeof name === 'string') {
delete this.status[name];
this.reject(name);
return;
}
this.status = {};
this.rejectAll();
};
Tracker.prototype.wait = function (name) {
var _this = this;
if (this.get(name))
;
return new Promise(function (resolve, reject) {
_this.on(name, resolve, reject);
});
};
return Tracker;
}());

function defaultMapToProps() {
return {};
}
Expand Down Expand Up @@ -2516,4 +2584,4 @@ function zoro(config) {
}

export default zoro;
export { connect, connectComponent, dispatcher, runtime$1 as regeneratorRuntime, setStore };
export { Tracker, connect, connectComponent, dispatcher, runtime$1 as regeneratorRuntime, setStore };
23 changes: 23 additions & 0 deletions dist/zoro.weapp.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,29 @@ export interface PluginEvents {
[eventName: string]: PluginEvent[];
}

export interface TrackerStatus {
[propName: string]: boolean;
}

export interface TrackerEvent {
resolve: Promise.resolve;
reject: Promise.reject;
}

export interface TrackerEvents {
[eventName: string]: TrackerEvent[];
}

export class Tracker {
public get(name: string): boolean;

public set(name: string): void;

public unset(name?: string): void;

public wait(name: string): Promise<void>;
}

export type SelectHandler = (state: any) => any;

export type Select = (handler?: SelectHandler) => any;
Expand Down
70 changes: 69 additions & 1 deletion dist/zoro.weapp.js
Original file line number Diff line number Diff line change
Expand Up @@ -1539,6 +1539,74 @@ var App = /** @class */ (function () {
return App;
}());

var Tracker = /** @class */ (function () {
function Tracker() {
this.status = {};
this.events = {};
}
Tracker.prototype.on = function (name, resolve, reject) {
var events = this.events[name];
if (!(events instanceof Array)) {
events = [];
}
events.push({ resolve: resolve, reject: reject });
this.events[name] = events;
};
Tracker.prototype.trigger = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var resolve = _a.resolve;
if (typeof resolve !== 'function')
return;
resolve();
});
delete this.events[name];
}
};
Tracker.prototype.reject = function (name) {
var callbacks = this.events[name];
if (callbacks instanceof Array) {
callbacks.forEach(function (_a) {
var reject = _a.reject;
if (typeof reject !== 'function')
return;
reject();
});
delete this.events[name];
}
};
Tracker.prototype.rejectAll = function () {
var _this = this;
Object.keys(this.events).forEach(function (name) { return _this.reject(name); });
};
Tracker.prototype.get = function (name) {
return !!this.status[name];
};
Tracker.prototype.set = function (name) {
this.status[name] = true;
this.trigger(name);
};
Tracker.prototype.unset = function (name) {
if (typeof name === 'string') {
delete this.status[name];
this.reject(name);
return;
}
this.status = {};
this.rejectAll();
};
Tracker.prototype.wait = function (name) {
var _this = this;
if (this.get(name))
;
return new Promise(function (resolve, reject) {
_this.on(name, resolve, reject);
});
};
return Tracker;
}());

function defaultMapToProps() {
return {};
}
Expand Down Expand Up @@ -1809,4 +1877,4 @@ function zoro(config) {
}

export default zoro;
export { connect, connectComponent, dispatcher, setStore };
export { Tracker, connect, connectComponent, dispatcher, setStore };
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@opcjs/zoro",
"version": "3.0.1",
"version": "3.0.2",
"description": "a redux framework, complete async await",
"main": "dist/zoro.umd.js",
"module": "dist/zoro.es.js",
Expand Down
Loading

0 comments on commit 2eaed1c

Please sign in to comment.