chore: convert callbacks-registry to ts (#18682)
* chore: convert callbacks-registry to ts * fix class import syntax * move cb reg specs to spec-main
This commit is contained in:
parent
441857c6e7
commit
3309005325
5 changed files with 17 additions and 20 deletions
|
@ -131,7 +131,7 @@ auto_filenames = {
|
||||||
"lib/renderer/api/ipc-renderer.js",
|
"lib/renderer/api/ipc-renderer.js",
|
||||||
"lib/renderer/api/remote.js",
|
"lib/renderer/api/remote.js",
|
||||||
"lib/renderer/api/web-frame.ts",
|
"lib/renderer/api/web-frame.ts",
|
||||||
"lib/renderer/callbacks-registry.js",
|
"lib/renderer/callbacks-registry.ts",
|
||||||
"lib/renderer/chrome-api.ts",
|
"lib/renderer/chrome-api.ts",
|
||||||
"lib/renderer/content-scripts-injector.ts",
|
"lib/renderer/content-scripts-injector.ts",
|
||||||
"lib/renderer/extensions/event.ts",
|
"lib/renderer/extensions/event.ts",
|
||||||
|
@ -291,7 +291,7 @@ auto_filenames = {
|
||||||
"lib/renderer/api/module-list.js",
|
"lib/renderer/api/module-list.js",
|
||||||
"lib/renderer/api/remote.js",
|
"lib/renderer/api/remote.js",
|
||||||
"lib/renderer/api/web-frame.ts",
|
"lib/renderer/api/web-frame.ts",
|
||||||
"lib/renderer/callbacks-registry.js",
|
"lib/renderer/callbacks-registry.ts",
|
||||||
"lib/renderer/chrome-api.ts",
|
"lib/renderer/chrome-api.ts",
|
||||||
"lib/renderer/content-scripts-injector.ts",
|
"lib/renderer/content-scripts-injector.ts",
|
||||||
"lib/renderer/extensions/event.ts",
|
"lib/renderer/extensions/event.ts",
|
||||||
|
@ -340,7 +340,7 @@ auto_filenames = {
|
||||||
"lib/renderer/api/module-list.js",
|
"lib/renderer/api/module-list.js",
|
||||||
"lib/renderer/api/remote.js",
|
"lib/renderer/api/remote.js",
|
||||||
"lib/renderer/api/web-frame.ts",
|
"lib/renderer/api/web-frame.ts",
|
||||||
"lib/renderer/callbacks-registry.js",
|
"lib/renderer/callbacks-registry.ts",
|
||||||
"lib/renderer/ipc-renderer-internal-utils.ts",
|
"lib/renderer/ipc-renderer-internal-utils.ts",
|
||||||
"lib/renderer/ipc-renderer-internal.ts",
|
"lib/renderer/ipc-renderer-internal.ts",
|
||||||
"lib/renderer/webpack-provider.ts",
|
"lib/renderer/webpack-provider.ts",
|
||||||
|
|
|
@ -4,7 +4,7 @@ const v8Util = process.electronBinding('v8_util')
|
||||||
const { isPromise } = require('electron')
|
const { isPromise } = require('electron')
|
||||||
const resolvePromise = Promise.resolve.bind(Promise)
|
const resolvePromise = Promise.resolve.bind(Promise)
|
||||||
|
|
||||||
const CallbacksRegistry = require('@electron/internal/renderer/callbacks-registry')
|
const { CallbacksRegistry } = require('@electron/internal/renderer/callbacks-registry')
|
||||||
const bufferUtils = require('@electron/internal/common/buffer-utils')
|
const bufferUtils = require('@electron/internal/common/buffer-utils')
|
||||||
const errorUtils = require('@electron/internal/common/error-utils')
|
const errorUtils = require('@electron/internal/common/error-utils')
|
||||||
const { ipcRendererInternal } = require('@electron/internal/renderer/ipc-renderer-internal')
|
const { ipcRendererInternal } = require('@electron/internal/renderer/ipc-renderer-internal')
|
||||||
|
|
|
@ -1,16 +1,12 @@
|
||||||
'use strict'
|
|
||||||
|
|
||||||
const v8Util = process.electronBinding('v8_util')
|
const v8Util = process.electronBinding('v8_util')
|
||||||
|
|
||||||
class CallbacksRegistry {
|
export class CallbacksRegistry {
|
||||||
constructor () {
|
private nextId: number = 0
|
||||||
this.nextId = 0
|
private callbacks: Record<number, Function> = {}
|
||||||
this.callbacks = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
add (callback) {
|
add (callback: Function) {
|
||||||
// The callback is already added.
|
// The callback is already added.
|
||||||
let id = v8Util.getHiddenValue(callback, 'callbackId')
|
let id = v8Util.getHiddenValue<number>(callback, 'callbackId')
|
||||||
if (id != null) return id
|
if (id != null) return id
|
||||||
|
|
||||||
id = this.nextId += 1
|
id = this.nextId += 1
|
||||||
|
@ -19,6 +15,7 @@ class CallbacksRegistry {
|
||||||
// so that release errors can be tracked down easily.
|
// so that release errors can be tracked down easily.
|
||||||
const regexp = /at (.*)/gi
|
const regexp = /at (.*)/gi
|
||||||
const stackString = (new Error()).stack
|
const stackString = (new Error()).stack
|
||||||
|
if (!stackString) return
|
||||||
|
|
||||||
let filenameAndLine
|
let filenameAndLine
|
||||||
let match
|
let match
|
||||||
|
@ -30,24 +27,25 @@ class CallbacksRegistry {
|
||||||
if (location.includes('electron/js2c')) continue
|
if (location.includes('electron/js2c')) continue
|
||||||
|
|
||||||
const ref = /([^/^)]*)\)?$/gi.exec(location)
|
const ref = /([^/^)]*)\)?$/gi.exec(location)
|
||||||
filenameAndLine = ref[1]
|
if (ref) filenameAndLine = ref![1]
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
this.callbacks[id] = callback
|
this.callbacks[id] = callback
|
||||||
v8Util.setHiddenValue(callback, 'callbackId', id)
|
v8Util.setHiddenValue(callback, 'callbackId', id)
|
||||||
v8Util.setHiddenValue(callback, 'location', filenameAndLine)
|
v8Util.setHiddenValue(callback, 'location', filenameAndLine)
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
get (id) {
|
get (id: number) {
|
||||||
return this.callbacks[id] || function () {}
|
return this.callbacks[id] || function () {}
|
||||||
}
|
}
|
||||||
|
|
||||||
apply (id, ...args) {
|
apply (id: number, ...args: any[]) {
|
||||||
return this.get(id).apply(global, ...args)
|
return this.get(id).apply(global, ...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
remove (id) {
|
remove (id: number) {
|
||||||
const callback = this.callbacks[id]
|
const callback = this.callbacks[id]
|
||||||
if (callback) {
|
if (callback) {
|
||||||
v8Util.deleteHiddenValue(callback, 'callbackId')
|
v8Util.deleteHiddenValue(callback, 'callbackId')
|
||||||
|
@ -55,5 +53,3 @@ class CallbacksRegistry {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = CallbacksRegistry
|
|
|
@ -4,7 +4,7 @@ const dirtyChai = require('dirty-chai')
|
||||||
const { expect } = chai
|
const { expect } = chai
|
||||||
chai.use(dirtyChai)
|
chai.use(dirtyChai)
|
||||||
|
|
||||||
const CallbacksRegistry = require('../lib/renderer/callbacks-registry')
|
const { CallbacksRegistry } = require('../lib/renderer/callbacks-registry')
|
||||||
|
|
||||||
describe('CallbacksRegistry module', () => {
|
describe('CallbacksRegistry module', () => {
|
||||||
let registry = null
|
let registry = null
|
1
typings/internal-ambient.d.ts
vendored
1
typings/internal-ambient.d.ts
vendored
|
@ -16,6 +16,7 @@ declare namespace NodeJS {
|
||||||
interface V8UtilBinding {
|
interface V8UtilBinding {
|
||||||
getHiddenValue<T>(obj: any, key: string): T;
|
getHiddenValue<T>(obj: any, key: string): T;
|
||||||
setHiddenValue<T>(obj: any, key: string, value: T): void;
|
setHiddenValue<T>(obj: any, key: string, value: T): void;
|
||||||
|
deleteHiddenValue(obj: any, key: string): void;
|
||||||
requestGarbageCollectionForTesting(): void;
|
requestGarbageCollectionForTesting(): void;
|
||||||
}
|
}
|
||||||
interface Process {
|
interface Process {
|
||||||
|
|
Loading…
Reference in a new issue