UNPKG

@juzi/wechaty

Version:

Wechaty is a RPA SDK for Chatbot Makers.

163 lines 5.8 kB
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /** * Wechaty Chatbot SDK - https://github.com/wechaty/wechaty * * @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and * Wechaty Contributors <https://github.com/wechaty>. * * Licensed 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_1 = require("fs"); const stream_1 = require("stream"); const util_1 = require("util"); const glob_1 = __importDefault(require("glob")); const LICENSE = `/** * Wechaty Chatbot SDK - https://github.com/wechaty/wechaty * * @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and * Wechaty Contributors <https://github.com/wechaty>. * * Licensed 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. * */`; class LicenseTransformer extends stream_1.Transform { lineBuf = ''; lineNum = 0; updating = false; updated = false; // constructor (options?: TransformOptions) { // super(options) // } _transform(chunk, _ /* encoding: string */, done) { if (this.updated) { this.push(chunk); } else { const updatedChunk = this.updateChunk(chunk); this.push(updatedChunk); } done(); } updateChunk(chunk) { const buffer = this.lineBuf + chunk.toString(); this.lineBuf = ''; if (!buffer) { console.error('no data'); return ''; } const updatedLineList = []; buffer .split(/\n/) .forEach(line => { if (this.lineNum === 0 && line.startsWith('#!')) { updatedLineList.push(line); } else if (this.updated) { updatedLineList.push(line); } else if (this.updating) { if (/\*\//.test(line)) { updatedLineList.push(line.replace(/.*\*\//, LICENSE)); this.updating = false; this.updated = true; } else { // drop the old comments } } else { // not updating and not updated. searching... if (!line) { updatedLineList.push(line); } else if (/\s*\/\*\*/.test(line)) { // comment start if (/\*\//.test(line)) { // comment end at the same line with start updatedLineList.push(line.replace(/\/\*\*.*\*\//, LICENSE)); this.updated = true; } else { this.updating = true; } } else { // not a comment. INSERT here updatedLineList.push(LICENSE); updatedLineList.push(line); this.updated = true; } } this.lineBuf = line; this.lineNum++; }); return updatedLineList.join('\n'); } _flush(done) { if (this.lineBuf) { this.push(this.lineBuf); this.lineBuf = ''; } done(); } } async function updateLicense(file) { const tmpFile = file + `.${process.pid}.tmp`; const readStream = (0, fs_1.createReadStream)(file); const writeStream = (0, fs_1.createWriteStream)(tmpFile); const tranStream = new LicenseTransformer(); console.info(`Updating LICENSE for file ${file}...`); await new Promise((resolve, reject) => { readStream .pipe(tranStream) .pipe(writeStream) .on('close', resolve) .on('error', reject); }); // await promisify(unlinkCallback) await fs_1.promises.unlink(file); // await promisify(linkCallback)(tmpFile, file) await fs_1.promises.link(tmpFile, file); // await promisify(unlinkCallback)(tmpFile) await fs_1.promises.unlink(tmpFile); } async function glob(pattern) { return (0, util_1.promisify)(glob_1.default)(pattern); } async function main() { const pattern = '{bin/**/*.ts,examples/**/*.{js,ts},scripts/**/*.{ts,js},src/**/*.{ts,js},tests/**/*.ts}'; // const pattern = 't.ts' const srcFileList = await glob(pattern); const promiseList = srcFileList.map(updateLicense); await Promise.all(promiseList); return 0; } main() .then(process.exit) .catch(e => { console.error(e); process.exit(1); }); //# sourceMappingURL=update-license.js.map