@ecwenze1/vue-datepicker
Version:
A clean datepicker made with VueJs
114 lines (100 loc) • 2.99 kB
JavaScript
/* istanbul ignore file */
export {
consoleWarn,
consoleError,
deprecate,
breaking,
removed,
};
function deprecate ({ original, replacement, vm }) {
consoleWarn(`[UPGRADE] '${original}' is deprecated, use '${replacement}' instead.`, vm);
}
function breaking ({ original, replacement, vm }) {
consoleError(`[BREAKING] '${original}' has been removed, use '${replacement}' instead.`, vm);
}
function removed ({ original, vm }) {
consoleWarn(`[REMOVED] '${original}' has been removed. You can safely omit it.`, vm);
}
// ----------------------
// Helpers
// ----------------------
function createMessage ({ message, vm }) {
if (vm) {
// Only show each message once per instance
vm.$_alreadyWarned = vm.$_alreadyWarned || [];
if (vm.$_alreadyWarned.includes(message)) return;
vm.$_alreadyWarned.push(message);
}
return `[VueDatePicker] ${message}` + (
vm ? generateComponentTrace(vm) : ''
);
}
function consoleWarn (message, vm) {
const newMessage = createMessage({ message, vm });
if (newMessage == null) return;
console.warn(newMessage);
}
function consoleError (message, vm) {
const newMessage = createMessage({ message, vm });
if (newMessage == null) return;
console.error(newMessage);
}
/**
* Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js
*/
const classifyRE = /(?:^|[-_])(\w)/g;
const classify = (str) => str
.replace(classifyRE, c => c.toUpperCase())
.replace(/[-_]/g, '');
function formatComponentName (vm, includeFile) {
if (vm.$root === vm) {
return '<Root>';
}
const options = typeof vm === 'function' && vm.cid != null
? vm.options
: vm._isVue
? vm.$options || vm.constructor.options
: vm || {};
let name = options.name || options._componentTag;
const file = options.__file;
if (!name && file) {
const match = file.match(/([^/\\]+)\.vue$/);
name = match && match[1];
}
return (
(name ? `<${classify(name)}>` : `<Anonymous>`) +
(file && includeFile !== false ? ` at ${file}` : '')
);
}
function generateComponentTrace (vm) {
if (vm._isVue && vm.$parent) {
const tree = [];
let currentRecursiveSequence = 0;
while (vm) {
if (tree.length > 0) {
const last = tree[tree.length - 1];
if (last.constructor === vm.constructor) {
currentRecursiveSequence++;
vm = vm.$parent;
continue;
} else if (currentRecursiveSequence > 0) {
tree[tree.length - 1] = [last, currentRecursiveSequence];
currentRecursiveSequence = 0;
}
}
tree.push(vm);
vm = vm.$parent;
}
return '\n\nfound in\n\n' + tree
.map((vm, i) => `${
i === 0 ? '---> ' : ' '.repeat(5 + i * 2)
}${
Array.isArray(vm)
? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
: formatComponentName(vm)
}`)
.join('\n');
} else {
return `\n\n(found in ${formatComponentName(vm)})`;
}
}