chore(deps): bump libWrapper shim to 1.12.1
This commit is contained in:
parent
932ea073bb
commit
d62811da1c
1 changed files with 41 additions and 21 deletions
|
@ -1,11 +1,16 @@
|
||||||
// Copyright © 2021 fvtt-lib-wrapper Rui Pinheiro
|
|
||||||
// 2021 Johannes Loher
|
|
||||||
//
|
|
||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
// Copyright © 2021 fvtt-lib-wrapper Rui Pinheiro
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
// A shim for the libWrapper library
|
// A shim for the libWrapper library
|
||||||
export let libWrapper = undefined;
|
export let libWrapper = undefined;
|
||||||
|
|
||||||
|
export const VERSIONS = [1, 12, 1];
|
||||||
|
export const TGT_SPLIT_RE = new RegExp('([^.[]+|\\[(\'([^\'\\\\]|\\\\.)+?\'|"([^"\\\\]|\\\\.)+?")\\])', 'g');
|
||||||
|
export const TGT_CLEANUP_RE = new RegExp('(^\\[\'|\'\\]$|^\\["|"\\]$)', 'g');
|
||||||
|
|
||||||
|
// Main shim code
|
||||||
Hooks.once('init', () => {
|
Hooks.once('init', () => {
|
||||||
// Check if the real module is already loaded - if so, use it
|
// Check if the real module is already loaded - if so, use it
|
||||||
if (globalThis.libWrapper && !(globalThis.libWrapper.is_fallback ?? true)) {
|
if (globalThis.libWrapper && !(globalThis.libWrapper.is_fallback ?? true)) {
|
||||||
|
@ -19,14 +24,31 @@ Hooks.once('init', () => {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static register(package_id, target, fn, type = 'MIXED', { chain = undefined } = {}) {
|
static get WRAPPER() {
|
||||||
|
return 'WRAPPER';
|
||||||
|
}
|
||||||
|
static get MIXED() {
|
||||||
|
return 'MIXED';
|
||||||
|
}
|
||||||
|
static get OVERRIDE() {
|
||||||
|
return 'OVERRIDE';
|
||||||
|
}
|
||||||
|
|
||||||
|
static register(package_id, target, fn, type = 'MIXED', { chain = undefined, bind = [] } = {}) {
|
||||||
const is_setter = target.endsWith('#set');
|
const is_setter = target.endsWith('#set');
|
||||||
target = !is_setter ? target : target.slice(0, -4);
|
target = !is_setter ? target : target.slice(0, -4);
|
||||||
const split = target.split('.');
|
const split = target.match(TGT_SPLIT_RE).map((x) => x.replace(/\\(.)/g, '$1').replace(TGT_CLEANUP_RE, ''));
|
||||||
const fn_name = split.pop();
|
|
||||||
const root_nm = split.splice(0, 1)[0];
|
const root_nm = split.splice(0, 1)[0];
|
||||||
const _eval = eval; // The browser doesn't expose all global variables (e.g. 'Game') inside globalThis, but it does to an eval. We copy it to a variable to have it run in global scope.
|
|
||||||
const obj = split.reduce((x, y) => x[y], globalThis[root_nm] ?? _eval(root_nm));
|
let obj, fn_name;
|
||||||
|
if (split.length == 0) {
|
||||||
|
obj = globalThis;
|
||||||
|
fn_name = root_nm;
|
||||||
|
} else {
|
||||||
|
const _eval = eval;
|
||||||
|
fn_name = split.pop();
|
||||||
|
obj = split.reduce((x, y) => x[y], globalThis[root_nm] ?? _eval(root_nm));
|
||||||
|
}
|
||||||
|
|
||||||
let iObj = obj;
|
let iObj = obj;
|
||||||
let descriptor = null;
|
let descriptor = null;
|
||||||
|
@ -36,18 +58,19 @@ Hooks.once('init', () => {
|
||||||
iObj = Object.getPrototypeOf(iObj);
|
iObj = Object.getPrototypeOf(iObj);
|
||||||
}
|
}
|
||||||
if (!descriptor || descriptor?.configurable === false)
|
if (!descriptor || descriptor?.configurable === false)
|
||||||
throw `libWrapper Shim: '${target}' does not exist, could not be found, or has a non-configurable descriptor.`;
|
throw new Error(
|
||||||
|
`libWrapper Shim: '${target}' does not exist, could not be found, or has a non-configurable descriptor.`,
|
||||||
|
);
|
||||||
|
|
||||||
let original = null;
|
let original = null;
|
||||||
const wrapper =
|
const wrapper =
|
||||||
chain ?? type != 'OVERRIDE'
|
chain ?? (type.toUpperCase?.() != 'OVERRIDE' && type != 3)
|
||||||
? function () {
|
? function (...args) {
|
||||||
return fn.call(this, original.bind(this), ...arguments);
|
return fn.call(this, original.bind(this), ...bind, ...args);
|
||||||
}
|
}
|
||||||
: function () {
|
: function (...args) {
|
||||||
return fn.apply(this, arguments);
|
return fn.call(this, ...bind, ...args);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!is_setter) {
|
if (!is_setter) {
|
||||||
if (descriptor.value) {
|
if (descriptor.value) {
|
||||||
original = descriptor.value;
|
original = descriptor.value;
|
||||||
|
@ -57,7 +80,7 @@ Hooks.once('init', () => {
|
||||||
descriptor.get = wrapper;
|
descriptor.get = wrapper;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!descriptor.set) throw `libWrapper Shim: '${target}' does not have a setter`;
|
if (!descriptor.set) throw new Error(`libWrapper Shim: '${target}' does not have a setter`);
|
||||||
original = descriptor.set;
|
original = descriptor.set;
|
||||||
descriptor.set = wrapper;
|
descriptor.set = wrapper;
|
||||||
}
|
}
|
||||||
|
@ -68,11 +91,8 @@ Hooks.once('init', () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
//************** USER CUSTOMIZABLE:
|
//************** USER CUSTOMIZABLE:
|
||||||
// Whether to warn GM that the fallback is being used
|
// Set up the ready hook that shows the "libWrapper not installed" warning dialog. Remove if undesired.
|
||||||
const WARN_FALLBACK = true;
|
{
|
||||||
|
|
||||||
// Set up the ready hook that shows the "libWrapper not installed" warning dialog
|
|
||||||
if (WARN_FALLBACK) {
|
|
||||||
//************** USER CUSTOMIZABLE:
|
//************** USER CUSTOMIZABLE:
|
||||||
// Package ID & Package Title - by default attempts to auto-detect, but you might want to hardcode your package ID and title here to avoid potential auto-detect issues
|
// Package ID & Package Title - by default attempts to auto-detect, but you might want to hardcode your package ID and title here to avoid potential auto-detect issues
|
||||||
const [PACKAGE_ID, PACKAGE_TITLE] = (() => {
|
const [PACKAGE_ID, PACKAGE_TITLE] = (() => {
|
||||||
|
|
Loading…
Reference in a new issue