feat: move api-client as core's monorepo
Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
48
packages/api-client/utils/auto-bind.ts
Normal file
48
packages/api-client/utils/auto-bind.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
// @ts-nocheck
|
||||
// @copy: https://github.com/sindresorhus/auto-bind/blob/main/index.js
|
||||
|
||||
// Gets all non-builtin properties up the prototype chain.
|
||||
const getAllProperties = (object) => {
|
||||
const properties = new Set()
|
||||
|
||||
do {
|
||||
for (const key of Reflect.ownKeys(object)) {
|
||||
properties.add([object, key])
|
||||
}
|
||||
} while (
|
||||
(object = Reflect.getPrototypeOf(object)) &&
|
||||
object !== Object.prototype
|
||||
)
|
||||
|
||||
return properties
|
||||
}
|
||||
|
||||
export function autoBind(self, { include, exclude } = {}) {
|
||||
const filter = (key) => {
|
||||
const match = (pattern) =>
|
||||
typeof pattern === 'string' ? key === pattern : pattern.test(key)
|
||||
|
||||
if (include) {
|
||||
return include.some(match)
|
||||
}
|
||||
|
||||
if (exclude) {
|
||||
return !exclude.some(match)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
for (const [object, key] of getAllProperties(self.constructor.prototype)) {
|
||||
if (key === 'constructor' || !filter(key)) {
|
||||
continue
|
||||
}
|
||||
|
||||
const descriptor = Reflect.getOwnPropertyDescriptor(object, key)
|
||||
if (descriptor && typeof descriptor.value === 'function') {
|
||||
self[key] = self[key].bind(self)
|
||||
}
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
Reference in New Issue
Block a user