Skip to content
Snippets Groups Projects
Select Git revision
  • 1c8ebed546d00ee5e2858c0d2e66bc80ae9f5328
  • master default protected
  • alc-scindage-donnees-pj
  • b24
  • ll-workflow
  • FJ_LL_Tbl_Contrat
  • alc-docker-node
  • ll-apiplatform
  • php84
  • ll-rgpd
  • b23
  • alc-filtre-type-intervenant
  • ll-sans-mdb5
  • formules-ancienne-infra
  • ll-formules
  • alc-intervenant-dmep
  • ll-suppr-v_vol-s
  • b20
  • ll-postgresql
  • b23.0.1
  • b22
  • 24.8
  • 24.7
  • 24.6
  • 24.5
  • 24.4
  • 24.3
  • 24.2
  • 24.1
  • 24.0
  • 23.15
  • 24.0-beta19
  • 24.0-beta18
  • 24.0-beta17
  • 24.0-beta16
  • 24.0-beta15
  • 24.0-beta14
  • 24.0-beta13
  • 23.14
  • 24.0-beta12
  • 24.0-beta11
41 results

EntityServiceFactory.php

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
    };