primevue-mirror/modules/nuxt-primevue/register.js

170 lines
5.9 KiB
JavaScript

import { addComponent, addImports } from '@nuxt/kit';
import { components } from './runtime/core/components';
import { composables } from './runtime/core/composables';
import { directives } from './runtime/core/directives';
import { Utils } from './utils';
function registerItems(items = [], options = {}, params) {
const included = Utils.object.getValue(options.include, params);
const excluded = Utils.object.getValue(options.exclude, params);
return items.filter((item) => {
const name = item?.name;
const matchedIn = included === '*' || included === undefined ? true : Utils.object.isNotEmpty(included) ? included.some((inc) => name?.toLowerCase() === inc.toLowerCase()) : false;
const matchedEx = excluded === '*' ? true : Utils.object.isNotEmpty(excluded) ? excluded.some((exc) => name?.toLowerCase() === exc.toLowerCase()) : false;
return matchedIn && !matchedEx;
});
}
function registerConfig(resolvePath, moduleOptions) {
const configs = [];
if (moduleOptions.unstyled === true) {
configs.push({
name: 'PrimeVueUnstyled',
as: 'PrimeVueUnstyled',
from: resolvePath({ name: 'PrimeVueUnstyled', as: 'PrimeVueUnstyled', from: `primevue/unstyled`, type: 'config' })
});
} else if (moduleOptions.unstyled === false) {
configs.push({
name: 'PrimeVueStyled',
as: 'PrimeVueStyled',
from: resolvePath({ name: 'PrimeVueStyled', as: 'PrimeVueStyled', from: `primevue/styled`, type: 'config' })
});
} else {
configs.push({ name: 'PrimeVue', as: 'PrimeVue', from: resolvePath({ name: 'PrimeVue', as: 'PrimeVue', from: `primevue/config`, type: 'config' }) });
}
return configs;
}
function registerComponents(resolvePath, options = {}) {
const items = registerItems(components, options, { components });
return items.map((item) => {
const _item = { ...item, name: item.name, as: item.name, from: `primevue/${item.name.toLowerCase()}` };
const name = Utils.object.getName(_item, options);
const from = resolvePath({ name, as: _item.as, from: _item.from, type: 'component' });
const opt = {
export: 'default',
name,
filePath: from,
global: true
};
addComponent(opt);
return {
..._item,
...opt
};
});
}
function registerDirectives(resolvePath, options = {}) {
const items = registerItems(directives, options, { directives });
return items.map((item) => {
const name = Utils.object.getName(item, options);
const opt = {
...item,
name,
from: resolvePath({ name, as: item.as, from: item.from, type: 'directive' })
};
return opt;
});
}
function registerComposables(resolvePath, options = {}) {
const items = registerItems(composables, options, { composables });
return items.map((item) => {
const name = Utils.object.getName(item, options);
const opt = {
...item,
name,
from: resolvePath({ name, as: item.as, from: item.from, type: 'composable' })
};
addImports(opt);
return opt;
});
}
function registerServices(resolvePath, registered) {
const services = new Set();
registered?.components?.forEach((component) => component?.use && services.add(component.use.as));
return [...services].map((service) => ({
name: service,
as: service,
from: resolvePath({ name: service, as: service, from: `primevue/${service.toLowerCase()}`, type: 'service' })
}));
}
function registerStyles(resolvePath, registered, moduleOptions) {
const styles = [
{
name: 'BaseStyle',
as: 'BaseStyle',
from: resolvePath({ name: 'BaseStyle', as: 'BaseStyle', from: 'primevue/base/style', type: 'style' })
}
];
if (!moduleOptions.unstyled) {
if (Utils.object.isNotEmpty(registered?.components)) {
styles.push({
name: 'BaseComponentStyle',
as: 'BaseComponentStyle',
from: resolvePath({ name: 'BaseComponentStyle', as: 'BaseComponentStyle', from: 'primevue/basecomponent/style', type: 'style' })
});
}
[registered.components, registered.directives]
.flat()
.reduce((acc, citem) => (acc.some((item) => item.as.toLowerCase() === citem.as.toLowerCase()) ? acc : [...acc, citem]), [])
.forEach((item) =>
styles.push({
name: `${item.as}Style`,
as: `${item.as}Style`,
from: resolvePath({ name: `${item.as}Style`, as: `${item.as}Style`, from: `primevue/${item.as.toLowerCase()}/style`, type: 'style' })
})
);
}
return styles;
}
function registerInjectStylesAsString(moduleOptions) {
return [Utils.object.createStyleAsString(moduleOptions.layerOrder ? `@layer ${moduleOptions.layerOrder}` : undefined, { name: 'layer-order' })];
}
export function register(moduleOptions) {
const resolvePath = (resolveOptions) => Utils.object.getPath(moduleOptions.resolvePath, resolveOptions);
const config = registerConfig(resolvePath, moduleOptions);
const components = registerComponents(resolvePath, moduleOptions.components);
const directives = registerDirectives(resolvePath, moduleOptions.directives);
const composables = registerComposables(resolvePath, moduleOptions.composables);
const registered = {
components,
directives,
composables
};
const services = registerServices(resolvePath, registered);
const styles = registerStyles(resolvePath, registered, moduleOptions);
const injectStylesAsString = registerInjectStylesAsString(moduleOptions);
return {
config,
...registered,
services,
styles,
injectStylesAsString
};
}