Convert the more complicated CommonJS exports to ES6-style

This commit is contained in:
Travis Ralston 2019-12-19 17:57:50 -07:00
parent 344dac4fb9
commit 4aec432b30
14 changed files with 91 additions and 86 deletions

View file

@ -302,7 +302,7 @@ function _onAction(payload) {
switch (payload.action) { switch (payload.action) {
case 'place_call': case 'place_call':
{ {
if (module.exports.getAnyActiveCall()) { if (callHandler.getAnyActiveCall()) {
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Call Handler', 'Existing Call', ErrorDialog, { Modal.createTrackedDialog('Call Handler', 'Existing Call', ErrorDialog, {
title: _t('Existing Call'), title: _t('Existing Call'),
@ -355,7 +355,7 @@ function _onAction(payload) {
break; break;
case 'incoming_call': case 'incoming_call':
{ {
if (module.exports.getAnyActiveCall()) { if (callHandler.getAnyActiveCall()) {
// ignore multiple incoming calls. in future, we may want a line-1/line-2 setup. // ignore multiple incoming calls. in future, we may want a line-1/line-2 setup.
// we avoid rejecting with "busy" in case the user wants to answer it on a different device. // we avoid rejecting with "busy" in case the user wants to answer it on a different device.
// in future we could signal a "local busy" as a warning to the caller. // in future we could signal a "local busy" as a warning to the caller.
@ -523,7 +523,7 @@ if (!global.mxCallHandler) {
const callHandler = { const callHandler = {
getCallForRoom: function(roomId) { getCallForRoom: function(roomId) {
let call = module.exports.getCall(roomId); let call = callHandler.getCall(roomId);
if (call) return call; if (call) return call;
if (ConferenceHandler) { if (ConferenceHandler) {

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2016 OpenMarket Ltd Copyright 2016 OpenMarket Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -22,7 +23,7 @@ limitations under the License.
* @return {Object[]} An array of objects with the form: * @return {Object[]} An array of objects with the form:
* { key: $KEY, val: $VALUE, place: "add|del" } * { key: $KEY, val: $VALUE, place: "add|del" }
*/ */
module.exports.getKeyValueArrayDiffs = function(before, after) { export function getKeyValueArrayDiffs(before, after) {
const results = []; const results = [];
const delta = {}; const delta = {};
Object.keys(before).forEach(function(beforeKey) { Object.keys(before).forEach(function(beforeKey) {
@ -76,7 +77,7 @@ module.exports.getKeyValueArrayDiffs = function(before, after) {
}); });
return results; return results;
}; }
/** /**
* Shallow-compare two objects for equality: each key and value must be identical * Shallow-compare two objects for equality: each key and value must be identical
@ -84,7 +85,7 @@ module.exports.getKeyValueArrayDiffs = function(before, after) {
* @param {Object} objB Second object to compare against the first * @param {Object} objB Second object to compare against the first
* @return {boolean} whether the two objects have same key=values * @return {boolean} whether the two objects have same key=values
*/ */
module.exports.shallowEqual = function(objA, objB) { export function shallowEqual(objA, objB) {
if (objA === objB) { if (objA === objB) {
return true; return true;
} }
@ -109,4 +110,4 @@ module.exports.shallowEqual = function(objA, objB) {
} }
return true; return true;
}; }

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2015, 2016 OpenMarket Ltd Copyright 2015, 2016 OpenMarket Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -18,40 +19,43 @@ import MatrixClientPeg from './MatrixClientPeg';
import dis from './dispatcher'; import dis from './dispatcher';
import { EventStatus } from 'matrix-js-sdk'; import { EventStatus } from 'matrix-js-sdk';
module.exports = { export default class Resend {
resendUnsentEvents: function(room) { static resendUnsentEvents(room) {
room.getPendingEvents().filter(function(ev) { room.getPendingEvents().filter(function (ev) {
return ev.status === EventStatus.NOT_SENT; return ev.status === EventStatus.NOT_SENT;
}).forEach(function(event) { }).forEach(function (event) {
module.exports.resend(event); Resend.resend(event);
}); });
}, }
cancelUnsentEvents: function(room) {
room.getPendingEvents().filter(function(ev) { static cancelUnsentEvents(room) {
room.getPendingEvents().filter(function (ev) {
return ev.status === EventStatus.NOT_SENT; return ev.status === EventStatus.NOT_SENT;
}).forEach(function(event) { }).forEach(function (event) {
module.exports.removeFromQueue(event); Resend.removeFromQueue(event);
}); });
}, }
resend: function(event) {
static resend(event) {
const room = MatrixClientPeg.get().getRoom(event.getRoomId()); const room = MatrixClientPeg.get().getRoom(event.getRoomId());
MatrixClientPeg.get().resendEvent(event, room).then(function(res) { MatrixClientPeg.get().resendEvent(event, room).then(function (res) {
dis.dispatch({ dis.dispatch({
action: 'message_sent', action: 'message_sent',
event: event, event: event,
}); });
}, function(err) { }, function (err) {
// XXX: temporary logging to try to diagnose // XXX: temporary logging to try to diagnose
// https://github.com/vector-im/riot-web/issues/3148 // https://github.com/vector-im/riot-web/issues/3148
console.log('Resend got send failure: ' + err.name + '('+err+')'); console.log('Resend got send failure: ' + err.name + '(' + err + ')');
dis.dispatch({ dis.dispatch({
action: 'message_send_failed', action: 'message_send_failed',
event: event, event: event,
}); });
}); });
}, }
removeFromQueue: function(event) {
static removeFromQueue(event) {
MatrixClientPeg.get().cancelPendingEvent(event); MatrixClientPeg.get().cancelPendingEvent(event);
}, }
}; }

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2015, 2016 OpenMarket Ltd Copyright 2015, 2016 OpenMarket Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -28,10 +29,10 @@ import MatrixClientPeg from "./MatrixClientPeg";
const USER_PREFIX = "fs_"; const USER_PREFIX = "fs_";
const DOMAIN = "matrix.org"; const DOMAIN = "matrix.org";
function ConferenceCall(matrixClient, groupChatRoomId) { export function ConferenceCall(matrixClient, groupChatRoomId) {
this.client = matrixClient; this.client = matrixClient;
this.groupRoomId = groupChatRoomId; this.groupRoomId = groupChatRoomId;
this.confUserId = module.exports.getConferenceUserIdForRoom(this.groupRoomId); this.confUserId = getConferenceUserIdForRoom(this.groupRoomId);
} }
ConferenceCall.prototype.setup = function() { ConferenceCall.prototype.setup = function() {
@ -90,7 +91,7 @@ ConferenceCall.prototype._getConferenceUserRoom = function() {
* @param {string} userId The user ID to check. * @param {string} userId The user ID to check.
* @return {boolean} True if it is a conference bot. * @return {boolean} True if it is a conference bot.
*/ */
module.exports.isConferenceUser = function(userId) { export function isConferenceUser(userId) {
if (userId.indexOf("@" + USER_PREFIX) !== 0) { if (userId.indexOf("@" + USER_PREFIX) !== 0) {
return false; return false;
} }
@ -101,26 +102,26 @@ module.exports.isConferenceUser = function(userId) {
return /^!.+:.+/.test(decoded); return /^!.+:.+/.test(decoded);
} }
return false; return false;
}; }
module.exports.getConferenceUserIdForRoom = function(roomId) { export function getConferenceUserIdForRoom(roomId) {
// abuse browserify's core node Buffer support (strip padding ='s) // abuse browserify's core node Buffer support (strip padding ='s)
const base64RoomId = new Buffer(roomId).toString("base64").replace(/=/g, ""); const base64RoomId = new Buffer(roomId).toString("base64").replace(/=/g, "");
return "@" + USER_PREFIX + base64RoomId + ":" + DOMAIN; return "@" + USER_PREFIX + base64RoomId + ":" + DOMAIN;
}; }
module.exports.createNewMatrixCall = function(client, roomId) { export function createNewMatrixCall(client, roomId) {
const confCall = new ConferenceCall( const confCall = new ConferenceCall(
client, roomId, client, roomId,
); );
return confCall.setup(); return confCall.setup();
}; }
module.exports.getConferenceCallForRoom = function(roomId) { export function getConferenceCallForRoom(roomId) {
// search for a conference 1:1 call for this group chat room ID // search for a conference 1:1 call for this group chat room ID
const activeCall = CallHandler.getAnyActiveCall(); const activeCall = CallHandler.getAnyActiveCall();
if (activeCall && activeCall.confUserId) { if (activeCall && activeCall.confUserId) {
const thisRoomConfUserId = module.exports.getConferenceUserIdForRoom( const thisRoomConfUserId = getConferenceUserIdForRoom(
roomId, roomId,
); );
if (thisRoomConfUserId === activeCall.confUserId) { if (thisRoomConfUserId === activeCall.confUserId) {
@ -128,8 +129,7 @@ module.exports.getConferenceCallForRoom = function(roomId) {
} }
} }
return null; return null;
}; }
module.exports.ConferenceCall = ConferenceCall; // TODO: Document this.
export const slot = 'conference';
module.exports.slot = 'conference';

View file

@ -66,7 +66,7 @@ if (DEBUG) {
debuglog = console.log.bind(console); debuglog = console.log.bind(console);
} }
const RoomContext = PropTypes.shape({ export const RoomContext = PropTypes.shape({
canReact: PropTypes.bool.isRequired, canReact: PropTypes.bool.isRequired,
canReply: PropTypes.bool.isRequired, canReply: PropTypes.bool.isRequired,
room: PropTypes.instanceOf(Room), room: PropTypes.instanceOf(Room),
@ -2002,5 +2002,3 @@ export default createReactClass({
); );
}, },
}); });
module.exports.RoomContext = RoomContext;

View file

@ -75,7 +75,7 @@ for (const evType of ALL_RULE_TYPES) {
stateEventTileTypes[evType] = 'messages.TextualEvent'; stateEventTileTypes[evType] = 'messages.TextualEvent';
} }
function getHandlerTile(ev) { export function getHandlerTile(ev) {
const type = ev.getType(); const type = ev.getType();
// don't show verification requests we're not involved in, // don't show verification requests we're not involved in,
@ -879,7 +879,7 @@ function isMessageEvent(ev) {
return (messageTypes.includes(ev.getType())); return (messageTypes.includes(ev.getType()));
} }
module.exports.haveTileForEvent = function(e) { export function haveTileForEvent(e) {
// Only messages have a tile (black-rectangle) if redacted // Only messages have a tile (black-rectangle) if redacted
if (e.isRedacted() && !isMessageEvent(e)) return false; if (e.isRedacted() && !isMessageEvent(e)) return false;
@ -895,7 +895,7 @@ module.exports.haveTileForEvent = function(e) {
} else { } else {
return true; return true;
} }
}; }
function E2ePadlockUndecryptable(props) { function E2ePadlockUndecryptable(props) {
return ( return (
@ -964,5 +964,3 @@ class E2ePadlock extends React.Component {
); );
} }
} }
module.exports.getHandlerTile = getHandlerTile;

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2015, 2016 OpenMarket Ltd Copyright 2015, 2016 OpenMarket Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -16,14 +17,14 @@ limitations under the License.
import Skinner from './Skinner'; import Skinner from './Skinner';
module.exports.loadSkin = function(skinObject) { export function loadSkin(skinObject) {
Skinner.load(skinObject); Skinner.load(skinObject);
}; }
module.exports.resetSkin = function() { export function resetSkin() {
Skinner.reset(); Skinner.reset();
}; }
module.exports.getComponent = function(componentName) { export function getComponent(componentName) {
return Skinner.getComponent(componentName); return Skinner.getComponent(componentName);
}; }

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2018 New Vector Ltd Copyright 2018 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -18,7 +19,7 @@ const request = require('request-promise-native');
const cheerio = require('cheerio'); const cheerio = require('cheerio');
const url = require("url"); const url = require("url");
module.exports.approveConsent = async function(consentUrl) { export async function approveConsent(consentUrl) {
const body = await request.get(consentUrl); const body = await request.get(consentUrl);
const doc = cheerio.load(body); const doc = cheerio.load(body);
const v = doc("input[name=v]").val(); const v = doc("input[name=v]").val();
@ -27,4 +28,4 @@ module.exports.approveConsent = async function(consentUrl) {
const formAction = doc("form").attr("action"); const formAction = doc("form").attr("action");
const absAction = url.resolve(consentUrl, formAction); const absAction = url.resolve(consentUrl, formAction);
await request.post(absAction).form({v, u, h}); await request.post(absAction).form({v, u, h});
}; }

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2018 New Vector Ltd Copyright 2018 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -16,7 +17,7 @@ limitations under the License.
const assert = require('assert'); const assert = require('assert');
async function openMemberInfo(session, name) { export async function openMemberInfo(session, name) {
const membersAndNames = await getMembersInMemberlist(session); const membersAndNames = await getMembersInMemberlist(session);
const matchingLabel = membersAndNames.filter((m) => { const matchingLabel = membersAndNames.filter((m) => {
return m.displayName === name; return m.displayName === name;
@ -24,9 +25,7 @@ async function openMemberInfo(session, name) {
await matchingLabel.click(); await matchingLabel.click();
} }
module.exports.openMemberInfo = openMemberInfo; export async function verifyDeviceForUser(session, name, expectedDevice) {
module.exports.verifyDeviceForUser = async function(session, name, expectedDevice) {
session.log.step(`verifies e2e device for ${name}`); session.log.step(`verifies e2e device for ${name}`);
const membersAndNames = await getMembersInMemberlist(session); const membersAndNames = await getMembersInMemberlist(session);
const matchingLabel = membersAndNames.filter((m) => { const matchingLabel = membersAndNames.filter((m) => {
@ -59,9 +58,9 @@ module.exports.verifyDeviceForUser = async function(session, name, expectedDevic
const closeMemberInfo = await session.query(".mx_MemberInfo_cancel"); const closeMemberInfo = await session.query(".mx_MemberInfo_cancel");
await closeMemberInfo.click(); await closeMemberInfo.click();
session.log.done(); session.log.done();
}; }
async function getMembersInMemberlist(session) { export async function getMembersInMemberlist(session) {
const memberPanelButton = await session.query(".mx_RightPanel_membersButton"); const memberPanelButton = await session.query(".mx_RightPanel_membersButton");
try { try {
await session.query(".mx_RightPanel_headerButton_highlight", 500); await session.query(".mx_RightPanel_headerButton_highlight", 500);
@ -78,5 +77,3 @@ async function getMembersInMemberlist(session) {
return {label: el, displayName: await session.innerText(el)}; return {label: el, displayName: await session.innerText(el)};
})); }));
} }
module.exports.getMembersInMemberlist = getMembersInMemberlist;

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2018 New Vector Ltd Copyright 2018 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -28,7 +29,7 @@ async function openSettings(session, section) {
} }
} }
module.exports.enableLazyLoading = async function(session) { export async function enableLazyLoading(session) {
session.log.step(`enables lazy loading of members in the lab settings`); session.log.step(`enables lazy loading of members in the lab settings`);
const settingsButton = await session.query('.mx_BottomLeftMenu_settings'); const settingsButton = await session.query('.mx_BottomLeftMenu_settings');
await settingsButton.click(); await settingsButton.click();
@ -38,9 +39,9 @@ module.exports.enableLazyLoading = async function(session) {
const closeButton = await session.query(".mx_RoomHeader_cancelButton"); const closeButton = await session.query(".mx_RoomHeader_cancelButton");
await closeButton.click(); await closeButton.click();
session.log.done(); session.log.done();
}; }
module.exports.getE2EDeviceFromSettings = async function(session) { export async function getE2EDeviceFromSettings(session) {
session.log.step(`gets e2e device/key from settings`); session.log.step(`gets e2e device/key from settings`);
await openSettings(session, "security"); await openSettings(session, "security");
const deviceAndKey = await session.queryAll(".mx_SettingsTab_section .mx_SecurityUserSettingsTab_deviceInfo code"); const deviceAndKey = await session.queryAll(".mx_SettingsTab_section .mx_SecurityUserSettingsTab_deviceInfo code");
@ -51,4 +52,4 @@ module.exports.getE2EDeviceFromSettings = async function(session) {
await closeButton.click(); await closeButton.click();
session.log.done(); session.log.done();
return {id, key}; return {id, key};
}; }

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2018 New Vector Ltd Copyright 2018 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -16,7 +17,7 @@ limitations under the License.
const assert = require('assert'); const assert = require('assert');
module.exports.scrollToTimelineTop = async function(session) { export async function scrollToTimelineTop(session) {
session.log.step(`scrolls to the top of the timeline`); session.log.step(`scrolls to the top of the timeline`);
await session.page.evaluate(() => { await session.page.evaluate(() => {
return Promise.resolve().then(async () => { return Promise.resolve().then(async () => {
@ -40,9 +41,9 @@ module.exports.scrollToTimelineTop = async function(session) {
}); });
}); });
session.log.done(); session.log.done();
}; }
module.exports.receiveMessage = async function(session, expectedMessage) { export async function receiveMessage(session, expectedMessage) {
session.log.step(`receives message "${expectedMessage.body}" from ${expectedMessage.sender}`); session.log.step(`receives message "${expectedMessage.body}" from ${expectedMessage.sender}`);
// wait for a response to come in that contains the message // wait for a response to come in that contains the message
// crude, but effective // crude, but effective
@ -66,10 +67,10 @@ module.exports.receiveMessage = async function(session, expectedMessage) {
}); });
assertMessage(lastMessage, expectedMessage); assertMessage(lastMessage, expectedMessage);
session.log.done(); session.log.done();
}; }
module.exports.checkTimelineContains = async function(session, expectedMessages, sendersDescription) { export async function checkTimelineContains(session, expectedMessages, sendersDescription) {
session.log.step(`checks timeline contains ${expectedMessages.length} ` + session.log.step(`checks timeline contains ${expectedMessages.length} ` +
`given messages${sendersDescription ? ` from ${sendersDescription}`:""}`); `given messages${sendersDescription ? ` from ${sendersDescription}`:""}`);
const eventTiles = await getAllEventTiles(session); const eventTiles = await getAllEventTiles(session);
@ -101,7 +102,7 @@ module.exports.checkTimelineContains = async function(session, expectedMessages,
}); });
session.log.done(); session.log.done();
}; }
function assertMessage(foundMessage, expectedMessage) { function assertMessage(foundMessage, expectedMessage) {
assert(foundMessage, `message ${JSON.stringify(expectedMessage)} not found in timeline`); assert(foundMessage, `message ${JSON.stringify(expectedMessage)} not found in timeline`);

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2019 New Vector Ltd Copyright 2019 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -37,7 +38,7 @@ async function getSasCodes(session) {
return sasLabels; return sasLabels;
} }
module.exports.startSasVerifcation = async function(session, name) { export async function startSasVerifcation(session, name) {
await startVerification(session, name); await startVerification(session, name);
// expect "Verify device" dialog and click "Begin Verification" // expect "Verify device" dialog and click "Begin Verification"
await assertDialog(session, "Verify device"); await assertDialog(session, "Verify device");
@ -50,9 +51,9 @@ module.exports.startSasVerifcation = async function(session, name) {
// click "Got it" when verification is done // click "Got it" when verification is done
await acceptDialog(session); await acceptDialog(session);
return sasCodes; return sasCodes;
}; }
module.exports.acceptSasVerification = async function(session, name) { export async function acceptSasVerification(session, name) {
await assertDialog(session, "Incoming Verification Request"); await assertDialog(session, "Incoming Verification Request");
const opponentLabelElement = await session.query(".mx_IncomingSasDialog_opponentProfile h2"); const opponentLabelElement = await session.query(".mx_IncomingSasDialog_opponentProfile h2");
const opponentLabel = await session.innerText(opponentLabelElement); const opponentLabel = await session.innerText(opponentLabelElement);
@ -66,4 +67,4 @@ module.exports.acceptSasVerification = async function(session, name) {
// click "Got it" when verification is done // click "Got it" when verification is done
await acceptDialog(session); await acceptDialog(session);
return sasCodes; return sasCodes;
}; }

View file

@ -1,5 +1,6 @@
/* /*
Copyright 2018 New Vector Ltd Copyright 2018 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -14,14 +15,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
module.exports.range = function(start, amount, step = 1) { export function range(start, amount, step = 1) {
const r = []; const r = [];
for (let i = 0; i < amount; ++i) { for (let i = 0; i < amount; ++i) {
r.push(start + (i * step)); r.push(start + (i * step));
} }
return r; return r;
}; }
module.exports.delay = function(ms) { export function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms)); return new Promise((resolve) => setTimeout(resolve, ms));
}; }

View file

@ -1,5 +1,6 @@
/* /*
Copyright (c) 2008-2015 Pivotal Labs Copyright (c) 2008-2015 Pivotal Labs
Copyright 2019 The Matrix.org Foundation C.I.C.
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the
@ -411,10 +412,10 @@ j$.MockDate = function() {
return MockDate; return MockDate;
}(); }();
const clock = new j$.Clock(global, function() { return new j$.DelayedFunctionScheduler(); }, new j$.MockDate(global)); const _clock = new j$.Clock(global, function() { return new j$.DelayedFunctionScheduler(); }, new j$.MockDate(global));
module.exports.clock = function() { export function clock() {
return clock; return _clock;
}; }