Skip to content
Snippets Groups Projects
Select Git revision
  • f57be8bcfbccb30d4049972b993b024a61b41597
  • master default protected
  • cleanup_fixtures
  • add-openvox
  • freebsd-14
  • remove-legacy-top-scope-syntax
  • rel430
  • tests
  • revert-363-augeas-module-cleanup
  • release-4.1.0
  • puppet8
  • relax-dependencies
  • rel400
  • mode
  • puppet7
  • release-3.1.0
  • freebsd13
  • freebsd11
  • stdlib
  • centos
  • fedora
  • v5.1.0
  • v5.0.0
  • v4.5.0
  • v4.4.0
  • v4.3.0
  • v4.2.1
  • v4.2.0
  • v4.1.0
  • v4.0.0
  • v3.1.0
  • v3.0.0
  • v2.0.0
  • 1.12.0
  • 1.11.0
  • 1.10.0
  • 1.9.0
  • 1.8.0
  • 1.7.0
  • 1.6.0
  • 1.5.0
41 results

postfix_satellite_spec.rb

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    index.js 5.64 KiB
    const path = require("path");
    
    /**
     * Simple object check.
     * @param item
     * @returns {boolean}
     */
    function isObject(item) {
        return (item && typeof item === 'object' && !Array.isArray(item));
    }
    
    
    /**
     * Permet de fusionner des objets JSON comprenant des sous-objets ou des tableaux
     * @param target
     * @param ...sources
     * @returns Object
     */
    function deepMerge(target, ...sources) {
        if (!sources.length) return target;
        const source = sources.shift();
    
        if (isObject(target) && isObject(source)) {
            for (const key in source) {
                if (isObject(source[key])) {
                    if (!target[key]) Object.assign(target, {[key]: {}});
                    deepMerge(target[key], source[key]);
                } else if (Array.isArray(target[key]) && Array.isArray(source[key])) {
                    for (const subKey in source[key]) {
                        const val = source[key][subKey];
                        if (-1 === target[key].indexOf(val)) {
                            target[key].push(val);
                        }
                    }
                } else {
                    Object.assign(target, {[key]: source[key]});
                }
            }
        }
    
        return deepMerge(target, ...sources);
    }
    
    
    /**
     * Retourne le répertoire racine d'UnicaenVue
     *
     * @returns String
     */
    function unicaenVueDir() {
        const path = require('path');
    
        // répertoire racine d'UnicaenVue', en partant du répertoire actuel, donc src/Server
        return path.resolve(__dirname, '../../');
    }
    
    
    /**
     * Retourne le répertoire racine de l'application.
     *
     * @returns String
     */
    function projectDir() {
        // répertoire racine de l'application
        // Attention : le script doit être lancé depuis le bon répertoire...
        return process.cwd();
    }
    
    
    /**
     * Retourne la liste des composants Vue dans un répertoire donné par nom de composant et fichiers en chemin absolu
     *
     * Exemple de retour pour les fichiers suivants (chemin absolu) :
     * - /var/www/html/prod/monAppli/components/MonComposant.vue
     * - /var/www/html/prod/monAppli/components/MonComposant2.vue
     * - /var/www/html/prod/monAppli/components/Autres/MonAutre3.vue
     *
     * findComponents('/var/www/html/prod/monAppli/components') => {
     *     MonComposant: /var/www/html/prod/monAppli/components/MonComposant.vue,
     *     MonComposant2: /var/www/html/prod/monAppli/components/MonComposant2.vue,
     *     AutresMonAutre3: /var/www/html/prod/monAppli/components/Autres/MonAutre3.vue
     * }
     *
     * @param string componentsDir
     * @returns {{}}
     */
    function findComponents(componentsDir) {
        const path = require("path");
        const FS = require("fs");
    
        let componentsFiles = [];
    
        function parseComponents(Directory) {
            FS.readdirSync(Directory).forEach(File => {
                const absolute = path.join(Directory, File);
                if (FS.statSync(absolute).isDirectory()) return parseComponents(absolute);
                else if (absolute.endsWith('.vue')) {
                    return componentsFiles.push(absolute.slice(componentsDir.length + 1, -4));
                }
            });
        }
    
        parseComponents(componentsDir);
    
    
        let components = {};
    
        for (const c in componentsFiles) {
            components[componentsFiles[c].replaceAll('/', '')] = path.resolve(componentsDir, componentsFiles[c]) + '.vue';
        }
    
        return components;
    }
    
    
    /**
     *
     * @param Object projectConfig
     * @returns {*}
     */
    function defineConfig(projectConfig) {
        const path = require('path');
        const vue = require('@vitejs/plugin-vue');
        const vite = require('vite');
        const liveReload = require('vite-plugin-live-reload');
        const Components = require('unplugin-vue-components/vite');
    
    
        const componentsDir = path.resolve(__dirname, '../../components');
        const components = findComponents(componentsDir);
        //const resolvers = require('unplugin-vue-components/resolvers');
    
    
        const root = projectConfig.root ? projectConfig.root : 'root';
    
        /** @see https://vitejs.dev/config/
         * Configuration par défaut de Vite.
         * Celle-ci pourra être surchargée par la configuration issue de l'application et fournie via projectConfig
         */
        const unicaenVueConfig = {
            plugins: [
                // Démarre Vue
                vue(),
    
                // hot-loading pour tous les CSS du répertoire public du projet en bonus
                liveReload.liveReload([path.resolve(projectDir(), 'public/**/*.css')]),
    
                vite.splitVendorChunkPlugin()
            ],
            root: root,
            build: {
                // output dir for production build
                outDir: path.resolve(__dirname, 'public/dist'),
                // On vide le répertoire avant de rebuilder
                emptyOutDir: true,
                // Publication du manifest oboigatoire
                manifest: true,
                // fichier de démarrage
                rollupOptions: {
                    input: path.resolve(projectDir(), root, 'main.js'),
                }
            },
            server: {
                // specs pour le serveur Node
                strictPort: true,
                port: 5133
            },
            resolve: {
                alias: {
                    vue: 'vue/dist/vue.esm-bundler.js',
                    '@': path.resolve(projectDir(), root)
                }
            },
            resolvers: [
                (componentName) => {
                    if (components[componentName] !== undefined) {
                        return components[componentName];
                    }
                },
            ],
        };
    
        const finalConfig = deepMerge(unicaenVueConfig, projectConfig);
    
        finalConfig.plugins.push(
            Components({resolvers: finalConfig.resolvers})
        );
    
        //console.log(finalConfig);
        return vite.defineConfig(finalConfig);
    }
    
    
    function start() {
    
    }
    
    
    module.exports = {
        defineConfig,
        projectDir,
        findComponents,
        unicaenVueDir,
        start
    };