@primer/react
Version:
An implementation of GitHub's Primer Design System using React
80 lines (76 loc) • 1.64 kB
JavaScript
import { useRef, useCallback } from 'react';
const noop = () => {};
// eslint-disable-next-line import/no-mutable-exports
let deprecate = noop;
if (process.env.NODE_ENV !== "production") {
deprecate = ({
name,
message,
version
}) => {
Deprecations.deprecate({
name,
message,
version
});
};
}
// eslint-disable-next-line import/no-mutable-exports
let useDeprecation = null;
if (process.env.NODE_ENV !== "production") {
useDeprecation = ({
name,
message,
version
}) => {
const ref = useRef(false);
const logDeprecation = useCallback(() => {
if (!ref.current) {
ref.current = true;
deprecate({
name,
message,
version
});
}
}, [name, message, version]);
return logDeprecation;
};
} else {
useDeprecation = () => {
return noop;
};
}
class Deprecations {
static instance = null;
static get() {
if (!Deprecations.instance) {
Deprecations.instance = new Deprecations();
}
return Deprecations.instance;
}
constructor() {
this.deprecations = [];
}
static deprecate({
name,
message,
version
}) {
const msg = `WARNING! ${name} is deprecated and will be removed in version ${version}. ${message}`;
// eslint-disable-next-line no-console
console.warn(msg);
this.get().deprecations.push({
name,
message,
version
});
}
static getDeprecations() {
return this.get().deprecations;
}
static clearDeprecations() {
this.get().deprecations.length = 0;
}
}
export { Deprecations, deprecate, useDeprecation };