/* * (c) Copyright Ascensio System SIA 2010-2024 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ const path = require('path'); const _ = require('lodash'); const packageFile = require('./package.json'); module.exports = function (grunt) { let addons = grunt.option('addon') || []; if (!Array.isArray(addons)) { addons = [addons]; } addons.forEach((element, index, self) => (self[index] = path.join('..', element))); addons = addons.filter(element => grunt.file.isDir(element)); function _merge(target, ...sources) { if (!sources.length) { return target; } const source = sources.shift(); for (const key in source) { if (_.isObject(source[key])) { if (_.isArray(source[key])) { if (!_.isArray(target[key])) { target[key] = []; } target[key].push(...source[key]); } else { if (!target[key]) { Object.assign(target, {[key]: {}}); } _merge(target[key], source[key]); } } else { Object.assign(target, {[key]: source[key]}); } } } addons.forEach(element => { const _path = path.join(element, 'package.json'); if (grunt.file.exists(_path)) { _merge(packageFile, require(_path)); grunt.log.ok('addon '.green + element + ' is merged successfully'.green); } }); //grunt.file.write("package-test.json", JSON.stringify(packageFile, null, 4)); const checkDependencies = {}; for (const i of packageFile.npm) { checkDependencies[i] = { options: { install: true, continueAfterInstall: true, packageDir: i } }; } grunt.initConfig({ clean: packageFile.grunt.clean, mkdir: packageFile.grunt.mkdir, copy: packageFile.grunt.copy, comments: { js: { options: { singleline: true, multiline: true }, src: packageFile.postprocess.src } }, usebanner: { copyright: { options: { position: 'top', banner: '/*\n' + ' * Copyright (C) ' + process.env['PUBLISHER_NAME'] + ' 2012-<%= grunt.template.today("yyyy") %>. All rights reserved\n' + ' *\n' + ' * ' + process.env['PUBLISHER_URL'] + ' \n' + ' *\n' + ' * Version: ' + process.env['PRODUCT_VERSION'] + ' (build:' + process.env['BUILD_NUMBER'] + ')\n' + ' */\n', linebreak: false }, files: { src: packageFile.postprocess.src } } }, checkDependencies }); grunt.registerTask('build-develop', 'Build develop scripts', () => { grunt.initConfig({ copy: packageFile.grunt['develop-copy'] }); }); grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-mkdir'); grunt.loadNpmTasks('grunt-stripcomments'); grunt.loadNpmTasks('grunt-banner'); grunt.loadNpmTasks('grunt-check-dependencies'); grunt.registerTask('default', ['clean', 'mkdir', 'copy', 'comments', 'usebanner', 'checkDependencies']); grunt.registerTask('develop', ['build-develop', 'copy']); };