timer function
This commit is contained in:
parent
f77b4a9bac
commit
0beb8b8633
70
dist/index.js
vendored
70
dist/index.js
vendored
@ -1406,7 +1406,7 @@ var doric = (function (exports) {
|
|||||||
const _setInterval = global$1.setInterval;
|
const _setInterval = global$1.setInterval;
|
||||||
const _clearTimeout = global$1.clearTimeout;
|
const _clearTimeout = global$1.clearTimeout;
|
||||||
const _clearInterval = global$1.clearInterval;
|
const _clearInterval = global$1.clearInterval;
|
||||||
global$1.setTimeout = function (handler, timeout, ...args) {
|
const doricSetTimeout = function (handler, timeout, ...args) {
|
||||||
if (global$1.nativeSetTimer === undefined) {
|
if (global$1.nativeSetTimer === undefined) {
|
||||||
return Reflect.apply(_setTimeout, undefined, arguments);
|
return Reflect.apply(_setTimeout, undefined, arguments);
|
||||||
}
|
}
|
||||||
@ -1421,7 +1421,7 @@ var doric = (function (exports) {
|
|||||||
nativeSetTimer(id, timeout || 0, false);
|
nativeSetTimer(id, timeout || 0, false);
|
||||||
return id;
|
return id;
|
||||||
};
|
};
|
||||||
global$1.setInterval = function (handler, timeout, ...args) {
|
const doricSetInterval = function (handler, timeout, ...args) {
|
||||||
if (global$1.nativeSetTimer === undefined) {
|
if (global$1.nativeSetTimer === undefined) {
|
||||||
return Reflect.apply(_setInterval, undefined, arguments);
|
return Reflect.apply(_setInterval, undefined, arguments);
|
||||||
}
|
}
|
||||||
@ -1435,20 +1435,44 @@ var doric = (function (exports) {
|
|||||||
nativeSetTimer(id, timeout || 0, true);
|
nativeSetTimer(id, timeout || 0, true);
|
||||||
return id;
|
return id;
|
||||||
};
|
};
|
||||||
global$1.clearTimeout = function (timerId) {
|
const doricClearTimeout = function (timerId) {
|
||||||
if (global$1.nativeClearTimer === undefined) {
|
if (global$1.nativeClearTimer === undefined) {
|
||||||
return Reflect.apply(_clearTimeout, undefined, arguments);
|
return Reflect.apply(_clearTimeout, undefined, arguments);
|
||||||
}
|
}
|
||||||
timerInfos.delete(timerId);
|
timerInfos.delete(timerId);
|
||||||
nativeClearTimer(timerId);
|
nativeClearTimer(timerId);
|
||||||
};
|
};
|
||||||
global$1.clearInterval = function (timerId) {
|
const doricClearInterval = function (timerId) {
|
||||||
if (global$1.nativeClearTimer === undefined) {
|
if (global$1.nativeClearTimer === undefined) {
|
||||||
return Reflect.apply(_clearInterval, undefined, arguments);
|
return Reflect.apply(_clearInterval, undefined, arguments);
|
||||||
}
|
}
|
||||||
timerInfos.delete(timerId);
|
timerInfos.delete(timerId);
|
||||||
nativeClearTimer(timerId);
|
nativeClearTimer(timerId);
|
||||||
};
|
};
|
||||||
|
if (!global$1.setTimeout) {
|
||||||
|
global$1.setTimeout = doricSetTimeout;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
global$1.doricSetTimeout = doricSetTimeout;
|
||||||
|
}
|
||||||
|
if (!global$1.setInterval) {
|
||||||
|
global$1.setInterval = doricSetInterval;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
global$1.doricSetInterval = doricSetInterval;
|
||||||
|
}
|
||||||
|
if (!global$1.clearTimeout) {
|
||||||
|
global$1.clearTimeout = doricClearTimeout;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
global$1.doricClearTimeout = doricClearTimeout;
|
||||||
|
}
|
||||||
|
if (!global$1.clearInterval) {
|
||||||
|
global$1.clearInterval = doricClearInterval;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
global$1.doricClearInterval = doricClearInterval;
|
||||||
|
}
|
||||||
function jsCallbackTimer(timerId) {
|
function jsCallbackTimer(timerId) {
|
||||||
const timerInfo = timerInfos.get(timerId);
|
const timerInfo = timerInfos.get(timerId);
|
||||||
if (timerInfo === undefined) {
|
if (timerInfo === undefined) {
|
||||||
@ -4209,6 +4233,11 @@ return __module.exports;
|
|||||||
function getScriptId() {
|
function getScriptId() {
|
||||||
return `script_${__scriptId__++}`;
|
return `script_${__scriptId__++}`;
|
||||||
}
|
}
|
||||||
|
const originSetTimeout = window.setTimeout;
|
||||||
|
const originClearTimeout = window.clearTimeout;
|
||||||
|
const originSetInterval = window.setInterval;
|
||||||
|
const originClearInterval = window.clearInterval;
|
||||||
|
const timers = new Map;
|
||||||
function injectGlobalObject(name, value) {
|
function injectGlobalObject(name, value) {
|
||||||
Reflect.set(window, name, value, window);
|
Reflect.set(window, name, value, window);
|
||||||
}
|
}
|
||||||
@ -4219,15 +4248,15 @@ return __module.exports;
|
|||||||
document.body.appendChild(scriptElement);
|
document.body.appendChild(scriptElement);
|
||||||
}
|
}
|
||||||
function packageModuleScript(name, content) {
|
function packageModuleScript(name, content) {
|
||||||
return `Reflect.apply(doric.jsRegisterModule,this,[${name},Reflect.apply(function(__module){(function(module,exports,require){
|
return `Reflect.apply(doric.jsRegisterModule,this,[${name},Reflect.apply(function(__module){(function(module,exports,require,setTimeout,setInterval,clearTimeout,clearInterval){
|
||||||
${content}
|
${content}
|
||||||
})(__module,__module.exports,doric.__require__);
|
})(__module,__module.exports,doric.__require__,doricSetTimeout,doricSetInterval,doricClearTimeout,doricClearInterval);
|
||||||
return __module.exports;},this,[{exports:{}}])])`;
|
return __module.exports;},this,[{exports:{}}])])`;
|
||||||
}
|
}
|
||||||
function packageCreateContext(contextId, content) {
|
function packageCreateContext(contextId, content) {
|
||||||
return `Reflect.apply(function(doric,context,Entry,require,exports){
|
return `Reflect.apply(function(doric,context,Entry,require,exports,setTimeout,setInterval,clearTimeout,clearInterval){
|
||||||
${content}
|
${content}
|
||||||
},doric.jsObtainContext("${contextId}"),[undefined,doric.jsObtainContext("${contextId}"),doric.jsObtainEntry("${contextId}"),doric.__require__,{}])`;
|
},doric.jsObtainContext("${contextId}"),[undefined,doric.jsObtainContext("${contextId}"),doric.jsObtainEntry("${contextId}"),doric.__require__,{},doricSetTimeout,doricSetInterval,doricClearTimeout,doricClearInterval])`;
|
||||||
}
|
}
|
||||||
function initDoric() {
|
function initDoric() {
|
||||||
injectGlobalObject("nativeEmpty", () => undefined);
|
injectGlobalObject("nativeEmpty", () => undefined);
|
||||||
@ -4292,6 +4321,31 @@ ${content}
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
injectGlobalObject('nativeSetTimer', (timerId, time, repeat) => {
|
||||||
|
if (repeat) {
|
||||||
|
const handleId = originSetInterval(() => {
|
||||||
|
sandbox.jsCallbackTimer(timerId);
|
||||||
|
}, time);
|
||||||
|
timers.set(timerId, { handleId, repeat });
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const handleId = originSetTimeout(() => {
|
||||||
|
sandbox.jsCallbackTimer(timerId);
|
||||||
|
}, time);
|
||||||
|
timers.set(timerId, { handleId, repeat });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
injectGlobalObject('nativeClearTimer', (timerId) => {
|
||||||
|
const timerInfo = timers.get(timerId);
|
||||||
|
if (timerInfo) {
|
||||||
|
if (timerInfo.repeat) {
|
||||||
|
originClearInterval(timerInfo.handleId);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
originClearTimeout(timerInfo.handleId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
function createContext(contextId, content) {
|
function createContext(contextId, content) {
|
||||||
loadJS(packageCreateContext(contextId, content));
|
loadJS(packageCreateContext(contextId, content));
|
||||||
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
@ -1,4 +1,4 @@
|
|||||||
import { jsCallResolve, jsCallReject } from 'doric/src/runtime/sandbox'
|
import { jsCallResolve, jsCallReject, jsCallbackTimer } from 'doric/src/runtime/sandbox'
|
||||||
import { acquireJSBundle, acquirePlugin } from './DoricRegistry'
|
import { acquireJSBundle, acquirePlugin } from './DoricRegistry'
|
||||||
import { getDoricContext } from './DoricContext'
|
import { getDoricContext } from './DoricContext'
|
||||||
import { DoricPlugin } from './DoricPlugin'
|
import { DoricPlugin } from './DoricPlugin'
|
||||||
@ -8,7 +8,12 @@ function getScriptId() {
|
|||||||
return `script_${__scriptId__++}`
|
return `script_${__scriptId__++}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const originSetTimeout = window.setTimeout
|
||||||
|
const originClearTimeout = window.clearTimeout
|
||||||
|
const originSetInterval = window.setInterval
|
||||||
|
const originClearInterval = window.clearInterval
|
||||||
|
|
||||||
|
const timers: Map<number, { handleId: number, repeat: boolean }> = new Map
|
||||||
|
|
||||||
export function injectGlobalObject(name: string, value: any) {
|
export function injectGlobalObject(name: string, value: any) {
|
||||||
Reflect.set(window, name, value, window)
|
Reflect.set(window, name, value, window)
|
||||||
@ -22,16 +27,16 @@ export function loadJS(script: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function packageModuleScript(name: string, content: string) {
|
function packageModuleScript(name: string, content: string) {
|
||||||
return `Reflect.apply(doric.jsRegisterModule,this,[${name},Reflect.apply(function(__module){(function(module,exports,require){
|
return `Reflect.apply(doric.jsRegisterModule,this,[${name},Reflect.apply(function(__module){(function(module,exports,require,setTimeout,setInterval,clearTimeout,clearInterval){
|
||||||
${content}
|
${content}
|
||||||
})(__module,__module.exports,doric.__require__);
|
})(__module,__module.exports,doric.__require__,doricSetTimeout,doricSetInterval,doricClearTimeout,doricClearInterval);
|
||||||
return __module.exports;},this,[{exports:{}}])])`
|
return __module.exports;},this,[{exports:{}}])])`
|
||||||
}
|
}
|
||||||
|
|
||||||
function packageCreateContext(contextId: string, content: string) {
|
function packageCreateContext(contextId: string, content: string) {
|
||||||
return `Reflect.apply(function(doric,context,Entry,require,exports){
|
return `Reflect.apply(function(doric,context,Entry,require,exports,setTimeout,setInterval,clearTimeout,clearInterval){
|
||||||
${content}
|
${content}
|
||||||
},doric.jsObtainContext("${contextId}"),[undefined,doric.jsObtainContext("${contextId}"),doric.jsObtainEntry("${contextId}"),doric.__require__,{}])`
|
},doric.jsObtainContext("${contextId}"),[undefined,doric.jsObtainContext("${contextId}"),doric.jsObtainEntry("${contextId}"),doric.__require__,{},doricSetTimeout,doricSetInterval,doricClearTimeout,doricClearInterval])`
|
||||||
}
|
}
|
||||||
|
|
||||||
function initDoric() {
|
function initDoric() {
|
||||||
@ -100,7 +105,31 @@ function initDoric() {
|
|||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
injectGlobalObject('nativeSetTimer', (timerId: number, time: number, repeat: boolean) => {
|
||||||
|
if (repeat) {
|
||||||
|
const handleId = originSetInterval(() => {
|
||||||
|
jsCallbackTimer(timerId)
|
||||||
|
}, time)
|
||||||
|
timers.set(timerId, { handleId, repeat })
|
||||||
|
} else {
|
||||||
|
const handleId = originSetTimeout(() => {
|
||||||
|
jsCallbackTimer(timerId)
|
||||||
|
}, time)
|
||||||
|
timers.set(timerId, { handleId, repeat })
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
injectGlobalObject('nativeClearTimer', (timerId: number) => {
|
||||||
|
const timerInfo = timers.get(timerId)
|
||||||
|
if (timerInfo) {
|
||||||
|
if (timerInfo.repeat) {
|
||||||
|
originClearInterval(timerInfo.handleId)
|
||||||
|
} else {
|
||||||
|
originClearTimeout(timerInfo.handleId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export function createContext(contextId: string, content: string) {
|
export function createContext(contextId: string, content: string) {
|
||||||
loadJS(packageCreateContext(contextId, content))
|
loadJS(packageCreateContext(contextId, content))
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user