@inkline/paper
Version:
Paper is a unified interface for defining components for Vue and React using a single code base.
35 lines (34 loc) • 961 B
JavaScript
export const defineComponent = (definition) => {
return (props) => {
const slot = (name = "default") => {
console.log(`slot(${name})`);
return [];
};
const hasSlot = (name = "default") => {
return slot(name).length > 0;
};
const emit = (eventName, ...args) => {
console.log(`emit(${event})`, ...args);
};
const provide = (identifier, value) => {
console.log(`provide(${identifier.toString()}, ${value})`);
return value;
};
const inject = (identifier, defaultValue) => {
console.log(`inject(${identifier.toString()}, ${defaultValue})`);
return defaultValue;
};
const setupContext = {
emit,
provide,
inject,
hasSlot
};
const state = definition.setup ? { ...props, ...definition.setup(props, setupContext) } : props;
const renderContext = {
slot,
hasSlot
};
return definition.render(state, renderContext);
};
};