From b0a41b5591aac9a249faddf26ec071d1d1d488b3 Mon Sep 17 00:00:00 2001 From: 1lsang Date: Tue, 27 Feb 2024 10:42:18 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=96=20release=20v0.1.0=20beta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/client.js | 15 ++++++ build/client.js.map | 1 + build/command/index.js | 9 ++++ build/command/index.js.map | 1 + build/command/test.js | 95 ++++++++++++++++++++++++++++++++++++ build/command/test.js.map | 1 + build/get.js | 32 ++++++++++++ build/get.js.map | 1 + build/index.js | 17 +++++++ build/index.js.map | 1 + build/message.js | 13 +++++ build/message.js.map | 1 + build/types/index.js | 3 ++ build/types/index.js.map | 1 + build/utils/box.js | 12 +++++ build/utils/box.js.map | 1 + build/utils/format.js | 22 +++++++++ build/utils/format.js.map | 1 + build/utils/indent.js | 10 ++++ build/utils/indent.js.map | 1 + build/utils/index.js | 15 ++++++ build/utils/index.js.map | 1 + build/utils/length.js | 13 +++++ build/utils/length.js.map | 1 + build/utils/maxLength.js | 12 +++++ build/utils/maxLength.js.map | 1 + build/utils/print.js | 14 ++++++ build/utils/print.js.map | 1 + 28 files changed, 296 insertions(+) create mode 100644 build/client.js create mode 100644 build/client.js.map create mode 100644 build/command/index.js create mode 100644 build/command/index.js.map create mode 100644 build/command/test.js create mode 100644 build/command/test.js.map create mode 100644 build/get.js create mode 100644 build/get.js.map create mode 100755 build/index.js create mode 100644 build/index.js.map create mode 100644 build/message.js create mode 100644 build/message.js.map create mode 100644 build/types/index.js create mode 100644 build/types/index.js.map create mode 100644 build/utils/box.js create mode 100644 build/utils/box.js.map create mode 100644 build/utils/format.js create mode 100644 build/utils/format.js.map create mode 100644 build/utils/indent.js create mode 100644 build/utils/indent.js.map create mode 100644 build/utils/index.js create mode 100644 build/utils/index.js.map create mode 100644 build/utils/length.js create mode 100644 build/utils/length.js.map create mode 100644 build/utils/maxLength.js create mode 100644 build/utils/maxLength.js.map create mode 100644 build/utils/print.js create mode 100644 build/utils/print.js.map diff --git a/build/client.js b/build/client.js new file mode 100644 index 0000000..00a47cf --- /dev/null +++ b/build/client.js @@ -0,0 +1,15 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.client = void 0; +const axios_1 = __importDefault(require("axios")); +exports.client = axios_1.default.create({ + headers: { + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + }, + baseURL: 'https://www.acmicpc.net/problem/', + timeout: 2000, +}); +//# sourceMappingURL=client.js.map \ No newline at end of file diff --git a/build/client.js.map b/build/client.js.map new file mode 100644 index 0000000..380feff --- /dev/null +++ b/build/client.js.map @@ -0,0 +1 @@ +{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAEb,QAAA,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE;QACP,YAAY,EACV,qHAAqH;KACxH;IACD,OAAO,EAAE,kCAAkC;IAC3C,OAAO,EAAE,IAAI;CACd,CAAC,CAAC"} \ No newline at end of file diff --git a/build/command/index.js b/build/command/index.js new file mode 100644 index 0000000..84d3097 --- /dev/null +++ b/build/command/index.js @@ -0,0 +1,9 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.test = void 0; +var test_1 = require("./test"); +Object.defineProperty(exports, "test", { enumerable: true, get: function () { return __importDefault(test_1).default; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/command/index.js.map b/build/command/index.js.map new file mode 100644 index 0000000..0e12e01 --- /dev/null +++ b/build/command/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/command/index.ts"],"names":[],"mappings":";;;;;;AAAA,+BAAyC;AAAhC,6GAAA,OAAO,OAAQ"} \ No newline at end of file diff --git a/build/command/test.js b/build/command/test.js new file mode 100644 index 0000000..53b1cde --- /dev/null +++ b/build/command/test.js @@ -0,0 +1,95 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(require("fs")); +const get_1 = require("../get"); +const chalk_1 = __importDefault(require("chalk")); +const index_1 = require("../utils/index"); +function test(source, options) { + return __awaiter(this, void 0, void 0, function* () { + const problemNumber = options.problemNumber + ? options.problemNumber + : source.match(/\/([^/]+)\.[^.]+$/)[1]; + const code = fs_1.default.readFileSync(source).toString().trim(); + const { inputs, outputs } = yield (0, get_1.getProblemInfo)(problemNumber); + const result = []; + createTempFiles(inputs); + const originalLog = console.log; + const boxWidth = (0, index_1.maxLength)(...inputs, ...outputs); + for (let i = 0; i < inputs.length; i++) { + // 코드 실행 + console.log(`${chalk_1.default.blue('◌')} 테스트 ${i + 1}: 실행 중...`); + const ioMessage = [ + (0, index_1.indent)(index_1.format.ul('입력값'), 2), + (0, index_1.indent)((0, index_1.box)(inputs[i].trim(), boxWidth), 4), + (0, index_1.indent)(index_1.format.ul('기댓값'), 2), + (0, index_1.indent)((0, index_1.box)(outputs[i].trim(), boxWidth), 4), + (0, index_1.indent)(index_1.format.ul(`실행시간: 실행중...`), 2), + '\n', + ].join('\n'); + const cursorLines = ioMessage.split('\n').length + 2; + console.log(ioMessage); + const temp = []; + console.log = (...data) => temp.push(...data); + const newCode = code.replace('/dev/stdin', `./tmp/input${i}.txt`); + try { + console.time(`tc-${i}`); + (() => { + eval(newCode); + })(); + console.timeEnd(`tc-${i}`); + } + catch (e) { + console.log = originalLog; + console.log(`\x1B[${cursorLines}A\x1B[K`); + console.log(index_1.format.failure(`${chalk_1.default.bold(`테스트 ${i + 1}`)}: ${chalk_1.default.redBright('실행 중 오류가 발생했습니다.')}`)); + console.log(`\x1B[${cursorLines - 5}B\x1B[K${(0, index_1.indent)(index_1.format.ul(`오류 내용`), 2)}`); + console.log(chalk_1.default.red((0, index_1.indent)(String(e), 4))); + console.log(); + continue; + } + console.log = originalLog; + // 결과 출력 + const isCorrect = temp.slice(0, -3).join('\n').trim() === outputs[i]; + result.push(isCorrect); + console.log(`\x1B[${cursorLines}A\x1B[K`); + console.log(isCorrect + ? index_1.format.success(`${chalk_1.default.bold(`테스트 ${i + 1}`)}: ${chalk_1.default.green('실행한 결괏값이 기댓값과 같습니다.')}`) + : index_1.format.failure(`${chalk_1.default.bold(`테스트 ${i + 1}`)}: ${chalk_1.default.redBright('실행한 결괏값이 기댓값과 다릅니다.')}`)); + console.log(`\x1B[${cursorLines - 5}B\x1B[K${(0, index_1.indent)(index_1.format.ul(`실행시간: ${temp.at(-1)}`), 2)}`); + if (!isCorrect) { + console.log((0, index_1.indent)(index_1.format.ul('출력값'), 2)); + console.log((0, index_1.indent)((0, index_1.box)(temp.slice(0, -3).join('\n'), boxWidth), 4)); + } + console.log('\n'); + } + console.log(chalk_1.default.bold((result.every(Boolean) ? index_1.format.success : index_1.format.failure)(`테스트 결과 ${chalk_1.default.blue(result.length)}개 중 ${result.every(Boolean) ? chalk_1.default.blue(result.length) : chalk_1.default.red(result.filter(Boolean).length)}개 성공`)), '\n'); + removeTempFiles(); + }); +} +exports.default = test; +function createTempFiles(inputs) { + if (!fs_1.default.existsSync('tmp')) + fs_1.default.mkdirSync('tmp'); + inputs.forEach((input, index) => { + fs_1.default.writeFileSync(`./tmp/input${index}.txt`, input); + }); +} +function removeTempFiles() { + fs_1.default.rm('tmp', { recursive: true }, (err) => { + if (err) + throw err; + }); +} +//# sourceMappingURL=test.js.map \ No newline at end of file diff --git a/build/command/test.js.map b/build/command/test.js.map new file mode 100644 index 0000000..ea0cf56 --- /dev/null +++ b/build/command/test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/command/test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/build/get.js b/build/get.js new file mode 100644 index 0000000..b711c78 --- /dev/null +++ b/build/get.js @@ -0,0 +1,32 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getProblemInfo = void 0; +const cheerio_1 = require("cheerio"); +const client_1 = require("./client"); +function getProblemInfo(pn) { + return __awaiter(this, void 0, void 0, function* () { + const response = yield client_1.client.get(`/${pn}`); + if (response.status !== 200) + throw new Error('문제를 불러올 수 없습니다. 문제 번호를 확인해주세요.'); + const $ = (0, cheerio_1.load)(response.data); + const n = $('.sampledata').length; + const inputs = []; + const outputs = []; + for (let i = 1; i <= n / 2; i++) { + inputs.push($(`#sample-input-${i}`).text().toString().trim()); + outputs.push($(`#sample-output-${i}`).text().toString().trim()); + } + return { inputs, outputs }; + }); +} +exports.getProblemInfo = getProblemInfo; +//# sourceMappingURL=get.js.map \ No newline at end of file diff --git a/build/get.js.map b/build/get.js.map new file mode 100644 index 0000000..3480c8d --- /dev/null +++ b/build/get.js.map @@ -0,0 +1 @@ +{"version":3,"file":"get.js","sourceRoot":"","sources":["../src/get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA+B;AAC/B,qCAAkC;AAGlC,SAAsB,cAAc,CAAC,EAAiB;;QACpD,MAAM,QAAQ,GAAG,MAAM,eAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE5C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEpD,MAAM,CAAC,GAAG,IAAA,cAAI,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QAElC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CAAA;AAlBD,wCAkBC"} \ No newline at end of file diff --git a/build/index.js b/build/index.js new file mode 100755 index 0000000..e76e1b0 --- /dev/null +++ b/build/index.js @@ -0,0 +1,17 @@ +#! /usr/bin/env node +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const commander_1 = require("commander"); +const command_1 = require("./command"); +const program = new commander_1.Command(); +program + .name('boj.io') + .description('Baekjoon Online Judge 문제 풀이 검증 자동화 CLI') + .version('0.1.0'); +program + .description('주어진 테스트에 대해 코드를 실행하고 결과를 확인합니다.') + .argument('', '실행할 파일 경로') + .option('-pn, --problem-number ', '문제 번호') + .action(command_1.test); +program.parse(); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/index.js.map b/build/index.js.map new file mode 100644 index 0000000..d89f23a --- /dev/null +++ b/build/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,uCAAiC;AAEjC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,wCAAwC,CAAC;KACrD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,WAAW,CAAC,iCAAiC,CAAC;KAC9C,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;KACjC,MAAM,CAAC,gCAAgC,EAAE,OAAO,CAAC;KACjD,MAAM,CAAC,cAAI,CAAC,CAAC;AAEhB,OAAO,CAAC,KAAK,EAAE,CAAC"} \ No newline at end of file diff --git a/build/message.js b/build/message.js new file mode 100644 index 0000000..3572689 --- /dev/null +++ b/build/message.js @@ -0,0 +1,13 @@ +"use strict"; +class Message extends String { + constructor(message) { + this.message = super(message); + } + indent(width) { + return this.text + .split('\n') + .map((line) => ' '.repeat(width) + line) + .join('\n'); + } +} +//# sourceMappingURL=message.js.map \ No newline at end of file diff --git a/build/message.js.map b/build/message.js.map new file mode 100644 index 0000000..ef8e937 --- /dev/null +++ b/build/message.js.map @@ -0,0 +1 @@ +{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":";AAAA,MAAM,OAAQ,SAAQ,MAAM;IAE1B,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,IAAI;aACb,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;CACF"} \ No newline at end of file diff --git a/build/types/index.js b/build/types/index.js new file mode 100644 index 0000000..aa219d8 --- /dev/null +++ b/build/types/index.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/types/index.js.map b/build/types/index.js.map new file mode 100644 index 0000000..37b1eea --- /dev/null +++ b/build/types/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/build/utils/box.js b/build/utils/box.js new file mode 100644 index 0000000..69db905 --- /dev/null +++ b/build/utils/box.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function box(input, width) { + const maxLength = Math.max(...input.split('\n').map((line) => line.length), Math.max(width !== null && width !== void 0 ? width : 0, 24)); + const res = input + .split('\n') + .map((line) => '│ ' + line + ' '.repeat(maxLength - line.length) + ' │') + .join('\n'); + return `┌─${'─'.repeat(maxLength)}─┐\n${res}\n└─${'─'.repeat(maxLength)}─┘`; +} +exports.default = box; +//# sourceMappingURL=box.js.map \ No newline at end of file diff --git a/build/utils/box.js.map b/build/utils/box.js.map new file mode 100644 index 0000000..c5a11f8 --- /dev/null +++ b/build/utils/box.js.map @@ -0,0 +1 @@ +{"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/utils/box.ts"],"names":[],"mappings":";;AAAA,SAAwB,GAAG,CAAC,KAAa,EAAE,KAAc;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAC/C,IAAI,CAAC,GAAG,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,EAAE,EAAE,CAAC,CACzB,CAAC;IAEF,MAAM,GAAG,GAAG,KAAK;SACd,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;SACvE,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;AAC9E,CAAC;AAZD,sBAYC"} \ No newline at end of file diff --git a/build/utils/format.js b/build/utils/format.js new file mode 100644 index 0000000..40677a7 --- /dev/null +++ b/build/utils/format.js @@ -0,0 +1,22 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const chalk_1 = __importDefault(require("chalk")); +function success(message) { + return `${chalk_1.default.green('✔')} ${message}`; +} +function failure(message) { + return `${chalk_1.default.red('✖')} ${message}`; +} +function ul(message) { + return `• ${message}`; +} +const format = { + success, + failure, + ul, +}; +exports.default = format; +//# sourceMappingURL=format.js.map \ No newline at end of file diff --git a/build/utils/format.js.map b/build/utils/format.js.map new file mode 100644 index 0000000..486332d --- /dev/null +++ b/build/utils/format.js.map @@ -0,0 +1 @@ +{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAE1B,SAAS,OAAO,CAAC,OAAe;IAC9B,OAAO,GAAG,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,OAAO,CAAC,OAAe;IAC9B,OAAO,GAAG,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,EAAE,CAAC,OAAe;IACzB,OAAO,KAAK,OAAO,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,MAAM,GAAG;IACb,OAAO;IACP,OAAO;IACP,EAAE;CACH,CAAC;AAEF,kBAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/build/utils/indent.js b/build/utils/indent.js new file mode 100644 index 0000000..1cf86a3 --- /dev/null +++ b/build/utils/indent.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function indent(str, width) { + return str + .split('\n') + .map((line) => ' '.repeat(width) + line) + .join('\n'); +} +exports.default = indent; +//# sourceMappingURL=indent.js.map \ No newline at end of file diff --git a/build/utils/indent.js.map b/build/utils/indent.js.map new file mode 100644 index 0000000..9c01855 --- /dev/null +++ b/build/utils/indent.js.map @@ -0,0 +1 @@ +{"version":3,"file":"indent.js","sourceRoot":"","sources":["../../src/utils/indent.ts"],"names":[],"mappings":";;AAAA,SAAwB,MAAM,CAAC,GAAW,EAAE,KAAa;IACvD,OAAO,GAAG;SACP,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;SAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AALD,yBAKC"} \ No newline at end of file diff --git a/build/utils/index.js b/build/utils/index.js new file mode 100644 index 0000000..6ab9d33 --- /dev/null +++ b/build/utils/index.js @@ -0,0 +1,15 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.format = exports.maxLength = exports.indent = exports.box = void 0; +var box_1 = require("./box"); +Object.defineProperty(exports, "box", { enumerable: true, get: function () { return __importDefault(box_1).default; } }); +var indent_1 = require("./indent"); +Object.defineProperty(exports, "indent", { enumerable: true, get: function () { return __importDefault(indent_1).default; } }); +var maxLength_1 = require("./maxLength"); +Object.defineProperty(exports, "maxLength", { enumerable: true, get: function () { return __importDefault(maxLength_1).default; } }); +var format_1 = require("./format"); +Object.defineProperty(exports, "format", { enumerable: true, get: function () { return __importDefault(format_1).default; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/utils/index.js.map b/build/utils/index.js.map new file mode 100644 index 0000000..a97aaee --- /dev/null +++ b/build/utils/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;AAAA,6BAAuC;AAA9B,2GAAA,OAAO,OAAO;AACvB,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,mCAA6C;AAApC,iHAAA,OAAO,OAAU"} \ No newline at end of file diff --git a/build/utils/length.js b/build/utils/length.js new file mode 100644 index 0000000..76f266c --- /dev/null +++ b/build/utils/length.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.maxLength = void 0; +function maxLength(...strings) { + let length = 0; + strings.forEach((str) => str.split('\n').forEach((line) => { + if (line.length > length) + length = line.length; + })); + return length; +} +exports.maxLength = maxLength; +//# sourceMappingURL=length.js.map \ No newline at end of file diff --git a/build/utils/length.js.map b/build/utils/length.js.map new file mode 100644 index 0000000..e4fbc79 --- /dev/null +++ b/build/utils/length.js.map @@ -0,0 +1 @@ +{"version":3,"file":"length.js","sourceRoot":"","sources":["../../src/utils/length.ts"],"names":[],"mappings":";;;AAAA,SAAgB,SAAS,CAAC,GAAG,OAAiB;IAC5C,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;YAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,8BAUC"} \ No newline at end of file diff --git a/build/utils/maxLength.js b/build/utils/maxLength.js new file mode 100644 index 0000000..10bffc7 --- /dev/null +++ b/build/utils/maxLength.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +function maxLength(...strings) { + let length = 0; + strings.forEach((str) => str.split('\n').forEach((line) => { + if (line.length > length) + length = line.length; + })); + return length; +} +exports.default = maxLength; +//# sourceMappingURL=maxLength.js.map \ No newline at end of file diff --git a/build/utils/maxLength.js.map b/build/utils/maxLength.js.map new file mode 100644 index 0000000..3a45aa0 --- /dev/null +++ b/build/utils/maxLength.js.map @@ -0,0 +1 @@ +{"version":3,"file":"maxLength.js","sourceRoot":"","sources":["../../src/utils/maxLength.ts"],"names":[],"mappings":";;AAAA,SAAwB,SAAS,CAAC,GAAG,OAAiB;IACpD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;YAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAVD,4BAUC"} \ No newline at end of file diff --git a/build/utils/print.js b/build/utils/print.js new file mode 100644 index 0000000..728dc2b --- /dev/null +++ b/build/utils/print.js @@ -0,0 +1,14 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const chalk_1 = __importDefault(require("chalk")); +function result(message, isSuccess) { + const emoji = isSuccess ? chalk_1.default.green('✔') : chalk_1.default.red('✖'); + console.log(`${emoji} ${message.before || ''} ${isSuccess ? chalk_1.default.green(message.success) : chalk_1.default.red(message.failure)} ${message.after || ''}`); +} +exports.default = { + result, +}; +//# sourceMappingURL=print.js.map \ No newline at end of file diff --git a/build/utils/print.js.map b/build/utils/print.js.map new file mode 100644 index 0000000..63f32d3 --- /dev/null +++ b/build/utils/print.js.map @@ -0,0 +1 @@ +{"version":3,"file":"print.js","sourceRoot":"","sources":["../../src/utils/print.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAS1B,SAAS,MAAM,CAAC,OAAsB,EAAE,SAAkB;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CACnI,CAAC;AACJ,CAAC;AAED,kBAAe;IACb,MAAM;CACP,CAAC"} \ No newline at end of file