onairos
Version:
The Onairos Library is a collection of functions that enable Applications to connect and communicate data with Onairos Identities via User Authorization. Integration for developers is seamless, simple and effective for all applications. LLM SDK capabiliti
179 lines (158 loc) • 5.75 kB
JavaScript
/**
* Onairos Vite Plugin for Laravel
*
* This plugin provides seamless integration of Onairos components
* within Laravel Vite applications, handling both development and
* production builds.
*/
import { resolve } from 'path';
export function onairosLaravelPlugin(options = {}) {
const defaultOptions = {
autoImport: true,
injectGlobals: true,
optimizeDeps: true,
enableHMR: true,
bladeSupport: true
};
const config = { ...defaultOptions, ...options };
return {
name: 'onairos-laravel',
config(viteConfig, { command }) {
// Optimize dependencies for faster dev server startup
if (config.optimizeDeps) {
viteConfig.optimizeDeps = viteConfig.optimizeDeps || {};
viteConfig.optimizeDeps.include = viteConfig.optimizeDeps.include || [];
viteConfig.optimizeDeps.include.push('onairos');
}
// Add alias for easier imports
viteConfig.resolve = viteConfig.resolve || {};
viteConfig.resolve.alias = viteConfig.resolve.alias || {};
viteConfig.resolve.alias['@onairos'] = resolve('node_modules/onairos');
// Configure for Laravel Blade support
if (config.bladeSupport && command === 'serve') {
viteConfig.server = viteConfig.server || {};
viteConfig.server.watch = viteConfig.server.watch || {};
viteConfig.server.watch.include = viteConfig.server.watch.include || [];
viteConfig.server.watch.include.push('resources/views/**/*.blade.php');
}
},
configureServer(server) {
if (config.enableHMR) {
// Add custom HMR handling for Onairos components
server.ws.on('onairos:reload', () => {
server.ws.send({
type: 'full-reload'
});
});
}
},
transformIndexHtml: {
enforce: 'pre',
transform(html, context) {
if (config.injectGlobals && context.server) {
// Inject Onairos initialization script for development
const initScript = `
<script type="module">
import { initializeOnairosForBlade } from '/node_modules/onairos/src/laravel/blade-helpers.js';
// Initialize Onairos for Laravel Blade templates
initializeOnairosForBlade({
testMode: true,
autoDetectMobile: true,
globalStyles: true
});
// Enable HMR for Onairos components
if (import.meta.hot) {
import.meta.hot.on('onairos:update', () => {
console.log('🔥 Onairos components updated');
window.location.reload();
});
}
</script>
`;
return html.replace('<head>', `<head>${initScript}`);
}
return html;
}
},
generateBundle(options, bundle) {
// Add Onairos assets to the build output
if (config.autoImport) {
// Create a separate chunk for Laravel integration
this.emitFile({
type: 'chunk',
id: 'onairos-laravel-integration',
fileName: 'onairos-laravel.js'
});
}
},
writeBundle(options, bundle) {
// Create Laravel-specific integration files
const laravelIntegrationCode = `
// Onairos Laravel Integration
import { initializeOnairosForBlade, createOnairosButton } from 'onairos/blade';
// Auto-initialize for production
document.addEventListener('DOMContentLoaded', () => {
initializeOnairosForBlade({
testMode: false,
autoDetectMobile: true,
globalStyles: true
});
});
// Export for manual usage
window.Onairos = {
init: initializeOnairosForBlade,
createButton: createOnairosButton
};
`;
// Write the integration file
this.emitFile({
type: 'asset',
fileName: 'onairos-laravel-integration.js',
source: laravelIntegrationCode
});
}
};
}
// Vue.js specific plugin for Laravel
export function onairosVuePlugin(options = {}) {
return {
name: 'onairos-vue-laravel',
config(viteConfig) {
// Add Vue-specific optimizations for Onairos
viteConfig.optimizeDeps = viteConfig.optimizeDeps || {};
viteConfig.optimizeDeps.include = viteConfig.optimizeDeps.include || [];
viteConfig.optimizeDeps.include.push('onairos', 'vue');
},
transform(code, id) {
// Auto-import Onairos in Vue components
if (id.endsWith('.vue') && options.autoImport) {
if (code.includes('OnairosButton') && !code.includes('import.*OnairosButton')) {
return `import { OnairosButton } from 'onairos';\n${code}`;
}
}
return null;
}
};
}
// React specific plugin for Laravel
export function onairosReactPlugin(options = {}) {
return {
name: 'onairos-react-laravel',
config(viteConfig) {
// Add React-specific optimizations for Onairos
viteConfig.optimizeDeps = viteConfig.optimizeDeps || {};
viteConfig.optimizeDeps.include = viteConfig.optimizeDeps.include || [];
viteConfig.optimizeDeps.include.push('onairos', 'react', 'react-dom');
},
transform(code, id) {
// Auto-import Onairos in React components
if ((id.endsWith('.jsx') || id.endsWith('.tsx')) && options.autoImport) {
if (code.includes('OnairosButton') && !code.includes('import.*OnairosButton')) {
return `import { OnairosButton } from 'onairos';\n${code}`;
}
}
return null;
}
};
}
export default onairosLaravelPlugin;