You need to sign in or sign up before continuing.
Select Git revision
EntityServiceFactory.php
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
};