feat: complete MDX migration, stabilize routing and lead capture
Former-commit-id: ab5cc38c97e5f73d6e821465b90d199fb6e6edc9
This commit is contained in:
Generated
Vendored
-108
@@ -1,108 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const refs = {
|
||||
exit: [],
|
||||
beforeExit: []
|
||||
}
|
||||
const functions = {
|
||||
exit: onExit,
|
||||
beforeExit: onBeforeExit
|
||||
}
|
||||
|
||||
let registry
|
||||
|
||||
function ensureRegistry () {
|
||||
if (registry === undefined) {
|
||||
registry = new FinalizationRegistry(clear)
|
||||
}
|
||||
}
|
||||
|
||||
function install (event) {
|
||||
if (refs[event].length > 0) {
|
||||
return
|
||||
}
|
||||
|
||||
process.on(event, functions[event])
|
||||
}
|
||||
|
||||
function uninstall (event) {
|
||||
if (refs[event].length > 0) {
|
||||
return
|
||||
}
|
||||
process.removeListener(event, functions[event])
|
||||
if (refs.exit.length === 0 && refs.beforeExit.length === 0) {
|
||||
registry = undefined
|
||||
}
|
||||
}
|
||||
|
||||
function onExit () {
|
||||
callRefs('exit')
|
||||
}
|
||||
|
||||
function onBeforeExit () {
|
||||
callRefs('beforeExit')
|
||||
}
|
||||
|
||||
function callRefs (event) {
|
||||
for (const ref of refs[event]) {
|
||||
const obj = ref.deref()
|
||||
const fn = ref.fn
|
||||
|
||||
// This should always happen, however GC is
|
||||
// undeterministic so it might not happen.
|
||||
/* istanbul ignore else */
|
||||
if (obj !== undefined) {
|
||||
fn(obj, event)
|
||||
}
|
||||
}
|
||||
refs[event] = []
|
||||
}
|
||||
|
||||
function clear (ref) {
|
||||
for (const event of ['exit', 'beforeExit']) {
|
||||
const index = refs[event].indexOf(ref)
|
||||
refs[event].splice(index, index + 1)
|
||||
uninstall(event)
|
||||
}
|
||||
}
|
||||
|
||||
function _register (event, obj, fn) {
|
||||
if (obj === undefined) {
|
||||
throw new Error('the object can\'t be undefined')
|
||||
}
|
||||
install(event)
|
||||
const ref = new WeakRef(obj)
|
||||
ref.fn = fn
|
||||
|
||||
ensureRegistry()
|
||||
registry.register(obj, ref)
|
||||
refs[event].push(ref)
|
||||
}
|
||||
|
||||
function register (obj, fn) {
|
||||
_register('exit', obj, fn)
|
||||
}
|
||||
|
||||
function registerBeforeExit (obj, fn) {
|
||||
_register('beforeExit', obj, fn)
|
||||
}
|
||||
|
||||
function unregister (obj) {
|
||||
if (registry === undefined) {
|
||||
return
|
||||
}
|
||||
registry.unregister(obj)
|
||||
for (const event of ['exit', 'beforeExit']) {
|
||||
refs[event] = refs[event].filter((ref) => {
|
||||
const _obj = ref.deref()
|
||||
return _obj && _obj !== obj
|
||||
})
|
||||
uninstall(event)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
register,
|
||||
registerBeforeExit,
|
||||
unregister
|
||||
}
|
||||
Generated
Vendored
-37
@@ -1,37 +0,0 @@
|
||||
{
|
||||
"name": "on-exit-leak-free",
|
||||
"version": "2.1.2",
|
||||
"description": "Execute a function on exit without leaking memory, allowing all objects to be garbage collected",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "standard | snazzy && tap test/*.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/mcollina/on-exit-or-gc.git"
|
||||
},
|
||||
"keywords": [
|
||||
"weak",
|
||||
"reference",
|
||||
"finalization",
|
||||
"registry",
|
||||
"process",
|
||||
"exit",
|
||||
"garbage",
|
||||
"collector"
|
||||
],
|
||||
"author": "Matteo Collina <hello@matteocollina.com>",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/mcollina/on-exit-or-gc/issues"
|
||||
},
|
||||
"homepage": "https://github.com/mcollina/on-exit-or-gc#readme",
|
||||
"devDependencies": {
|
||||
"snazzy": "^9.0.0",
|
||||
"standard": "^17.0.0",
|
||||
"tap": "^16.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user