| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements.  See the NOTICE file* distributed with this work for additional information* regarding copyright ownership.  The ASF licenses this file* to you under the Apache License, Version 2.0 (the* "License"); you may not use this file except in compliance* with the License.  You may obtain a copy of the License at**   http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing,* software distributed under the License is distributed on an* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY* KIND, either express or implied.  See the License for the* specific language governing permissions and limitations* under the License.*/const fs = require('fs');const preamble = require('./preamble');const pathTool = require('path');const {color} = require('zrender/build/helper');// In the `.headerignore`, each line is a pattern in RegExp.// all relative path (based on the echarts base directory) is tested.// The pattern should match the relative path completely.const excludesPath = pathTool.join(__dirname, '../.headerignore');const ecBasePath = pathTool.join(__dirname, '../');const isVerbose = process.argv[2] === '--verbose';// const lists = [//     '../src/**/*.js',//     '../build/*.js',//     '../benchmark/src/*.js',//     '../benchmark/src/gulpfile.js',//     '../extension-src/**/*.js',//     '../extension/**/*.js',//     '../map/js/**/*.js',//     '../test/build/**/*.js',//     '../test/node/**/*.js',//     '../test/ut/core/*.js',//     '../test/ut/spe/*.js',//     '../test/ut/ut.js',//     '../test/*.js',//     '../theme/*.js',//     '../theme/tool/**/*.js',//     '../echarts.all.js',//     '../echarts.blank.js',//     '../echarts.common.js',//     '../echarts.simple.js',//     '../index.js',//     '../index.common.js',//     '../index.simple.js'// ];function run() {    const updatedFiles = [];    const passFiles = [];    const pendingFiles = [];    eachFile(function (absolutePath, fileExt) {        const fileStr = fs.readFileSync(absolutePath, 'utf-8');        const existLicense = preamble.extractLicense(fileStr, fileExt);        if (existLicense) {            passFiles.push(absolutePath);            return;        }        // Conside binary files, only add for files with known ext.        if (!preamble.hasPreamble(fileExt)) {            pendingFiles.push(absolutePath);            return;        }        fs.writeFileSync(absolutePath, preamble.addPreamble(fileStr, fileExt), 'utf-8');        updatedFiles.push(absolutePath);    });    console.log('\n');    console.log('----------------------------');    console.log(' Files that exists license: ');    console.log('----------------------------');    if (passFiles.length) {        if (isVerbose) {            passFiles.forEach(function (path) {                console.log(color('fgGreen', 'dim')(path));            });        }        else {            console.log(color('fgGreen', 'dim')(passFiles.length + ' files. (use argument "--verbose" see details)'));        }    }    else {        console.log('Nothing.');    }    console.log('\n');    console.log('--------------------');    console.log(' License added for: ');    console.log('--------------------');    if (updatedFiles.length) {        updatedFiles.forEach(function (path) {            console.log(color('fgGreen', 'bright')(path));        });    }    else {        console.log('Nothing.');    }    console.log('\n');    console.log('----------------');    console.log(' Pending files: ');    console.log('----------------');    if (pendingFiles.length) {        pendingFiles.forEach(function (path) {            console.log(color('fgRed', 'dim')(path));        });    }    else {        console.log('Nothing.');    }    console.log('\nDone.');}function eachFile(visit) {    const excludePatterns = [];    const extReg = /\.([a-zA-Z0-9_-]+)$/;    prepareExcludePatterns();    travel('./');    function travel(relativePath) {        if (isExclude(relativePath)) {            return;        }        const absolutePath = pathTool.join(ecBasePath, relativePath);        const stat = fs.statSync(absolutePath);        if (stat.isFile()) {            visit(absolutePath, getExt(absolutePath));        }        else if (stat.isDirectory()) {            fs.readdirSync(relativePath).forEach(function (file) {                travel(pathTool.join(relativePath, file));            });        }    }    function prepareExcludePatterns() {        const content = fs.readFileSync(excludesPath, {encoding: 'utf-8'});        content.replace(/\r/g, '\n').split('\n').forEach(function (line) {            line = line.trim();            if (line && line.charAt(0) !== '#') {                excludePatterns.push(new RegExp(line));            }        });    }    function isExclude(relativePath) {        for (let i = 0; i < excludePatterns.length; i++) {            if (excludePatterns[i].test(relativePath)) {                return true;            }        }    }    function getExt(path) {        if (path) {            const mathResult = path.match(extReg);            return mathResult && mathResult[1];        }    }}run();
 |