From a2ef50b2390bc636f0e3186a1c866b83c53c9e23 Mon Sep 17 00:00:00 2001 From: airscripts Date: Sat, 29 Jul 2023 20:29:12 +0200 Subject: [PATCH 01/19] chore: add repository in package.json --- package.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 51b1d4c..f733650 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "type": "module", "version": "1.1.6", "name": "analscript", + "author": "Airscript", "main": "analscript.js", "description": "A modern approach for writing anally fast stuff.", "scripts": { @@ -12,7 +13,10 @@ "bin": { "analscript": "cli.js" }, - "author": "Airscript", + "repository": { + "type": "git", + "url": "https://github.com/airscripts/analscript.git" + }, "license": "MIT", "devDependencies": { "@vitest/coverage-v8": "^0.33.0", @@ -22,5 +26,5 @@ "eslint-plugin-import": "^2.28.0", "prettier": "^3.0.0", "vitest": "^0.33.0" - } + } } From 40ad1ed0e60f0d5c7dbd8796eb5fc0ba877c545e Mon Sep 17 00:00:00 2001 From: airscripts Date: Sat, 29 Jul 2023 20:49:33 +0200 Subject: [PATCH 02/19] chore: add homepage, bugs, repository, keywords and funding sections in package.json --- package-lock.json | 18 ++++++++++++++++-- package.json | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86373e2..339e588 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,26 @@ { "name": "analscript", - "version": "1.1.5", + "version": "1.1.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "analscript", - "version": "1.1.5", + "version": "1.1.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/airscripts" + }, + { + "type": "ko-fi", + "url": "https://ko-fi.com/airscript" + }, + { + "type": "linktree", + "url": "https://linktr.ee/airscript" + } + ], "license": "MIT", "bin": { "analscript": "cli.js" diff --git a/package.json b/package.json index f733650..d4ad709 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,11 @@ "author": "Airscript", "main": "analscript.js", "description": "A modern approach for writing anally fast stuff.", + "keywords": ["analscript", "programming language", "esoteric", "cli", "anal"], + "homepage": "https://github.com/airscripts/analscript", + "bugs": { + "email": "support@airscript.it" + }, "scripts": { "test:std": "vitest", "test:ui": "vitest --ui", @@ -17,6 +22,20 @@ "type": "git", "url": "https://github.com/airscripts/analscript.git" }, + "funding": [ + { + "type" : "github", + "url" : "https://github.com/sponsors/airscripts" + }, + { + "type" : "ko-fi", + "url" : "https://ko-fi.com/airscript" + }, + { + "type": "linktree", + "url": "https://linktr.ee/airscript" + } + ], "license": "MIT", "devDependencies": { "@vitest/coverage-v8": "^0.33.0", From 4005ee3b475aa8c462d30894e33794510021ec71 Mon Sep 17 00:00:00 2001 From: Francesco Sardone Date: Sat, 29 Jul 2023 21:40:56 +0200 Subject: [PATCH 03/19] chore: update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cbb853..257b3e8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- Analscript is an esoteric programming language, that takes inspiration from the fallen Anal Lang and serves, the purpose to be a modern approach for writing anally fast stuff. + Analscript is a joke esoteric programming language, that takes inspiration from the fallen Anal Lang and serves, the purpose to be a modern approach for writing anally fast stuff.

From 5b9466f87128741f714a866825669eea726469f7 Mon Sep 17 00:00:00 2001 From: Francesco Sardone Date: Sat, 29 Jul 2023 22:09:54 +0200 Subject: [PATCH 04/19] chore: add resources section to README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 257b3e8..35b3aa2 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ ## Contents - [Installation](#installation) - [Usage](#usage) +- [Resources](#resources) - [Contributing](#contributing) - [Support](#support) - [License](#license) @@ -58,6 +59,9 @@ Arguments: As you can see, you can as of this latest version, have access to a variety of commands. Use them to write or read your anally marvelous softwares! +## Resources +- [Esolang Wiki Page](https://esolangs.org/wiki/Analscript): the official esolang wiki page. + ## Contributing Contributions and suggestions about how to improve this project are welcome! Just follow our [contributing guidelines](https://github.com/airscripts/analscript/blob/main/CONTRIBUTING.md). From 6b1fa12a2284eff7b9b2075f9155375fbff0a5b4 Mon Sep 17 00:00:00 2001 From: Francesco Sardone Date: Sat, 29 Jul 2023 22:12:50 +0200 Subject: [PATCH 05/19] chore: add anallang link into README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35b3aa2..e4d92f2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- Analscript is a joke esoteric programming language, that takes inspiration from the fallen Anal Lang and serves, the purpose to be a modern approach for writing anally fast stuff. + Analscript is a joke esoteric programming language, that takes inspiration from the fallen [AnalLang](https://esolangs.org/wiki/AnalLang) and serves, the purpose to be a modern approach for writing anally fast stuff.

From 857ffbe3b9eceedc0730978f140c4f8c94f6d664 Mon Sep 17 00:00:00 2001 From: airscripts Date: Sat, 29 Jul 2023 22:14:32 +0200 Subject: [PATCH 06/19] chore: fix broken link into README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e4d92f2..a99cedc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- Analscript is a joke esoteric programming language, that takes inspiration from the fallen [AnalLang](https://esolangs.org/wiki/AnalLang) and serves, the purpose to be a modern approach for writing anally fast stuff. + Analscript is a joke esoteric programming language, that takes inspiration from the fallen AnalLang and serves, the purpose to be a modern approach for writing anally fast stuff.

From 94aec57de9d43256a3b20991048063eeac1c85b2 Mon Sep 17 00:00:00 2001 From: airscripts Date: Sat, 29 Jul 2023 22:22:30 +0200 Subject: [PATCH 07/19] refactor: add missing quotes to anchor tag --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a99cedc..fc225bd 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- Analscript is a joke esoteric programming language, that takes inspiration from the fallen AnalLang and serves, the purpose to be a modern approach for writing anally fast stuff. + Analscript is a joke esoteric programming language, that takes inspiration from the fallen AnalLang and serves, the purpose to be a modern approach for writing anally fast stuff.

@@ -60,7 +60,8 @@ As you can see, you can as of this latest version, have access to a variety of c Use them to write or read your anally marvelous softwares! ## Resources -- [Esolang Wiki Page](https://esolangs.org/wiki/Analscript): the official esolang wiki page. +- [Esolang Wiki Page](https://esolangs.org/wiki/Analscript): the official Esolang Wiki page. +- [GitHub Page](https://ghio.airscript.it/analscript): the GitHub page for this repository. ## Contributing Contributions and suggestions about how to improve this project are welcome! From 64953e6da623aa9a4052288e79efb95021f1f3b1 Mon Sep 17 00:00:00 2001 From: airscripts Date: Sat, 29 Jul 2023 22:38:26 +0200 Subject: [PATCH 08/19] chore: add cover image --- assets/images/cover.png | Bin 0 -> 18661 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/images/cover.png diff --git a/assets/images/cover.png b/assets/images/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fda09737be615a88bf8336d1a7083a29afd4b9 GIT binary patch literal 18661 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 literal 0 HcmV?d00001 From 83a650c2f0c59599570e4e613af88cda7b712e19 Mon Sep 17 00:00:00 2001 From: Airscript Date: Sun, 30 Jul 2023 01:52:01 +0200 Subject: [PATCH 09/19] chore: update support section in README file --- README.md | 16 +++++++++++----- assets/images/github-sponsors.svg | 1 + assets/images/kofi.svg | 1 + assets/images/linktree.svg | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 assets/images/github-sponsors.svg create mode 100644 assets/images/kofi.svg create mode 100644 assets/images/linktree.svg diff --git a/README.md b/README.md index fc225bd..c34622c 100644 --- a/README.md +++ b/README.md @@ -68,12 +68,18 @@ Contributions and suggestions about how to improve this project are welcome! Just follow our [contributing guidelines](https://github.com/airscripts/analscript/blob/main/CONTRIBUTING.md). ## Support -If you want to support my work you can do it with the links below. - +If you want to support my work you can do it following me, leaving a star, sharing my projects or also with the links below. Choose what you find more suitable for you: -- [Support me on GitHub](https://github.com/sponsors/Airscripts) -- [Support me via ko-fi](https://ko-fi.com/airscript) -- [Support me via linktr.ee](https://linktr.ee/airscript) + + + GitHub Sponsors +  + + Kofi +  + + Linktree + *As of my personal preference, I'do go with GitHub Sponsors.* diff --git a/assets/images/github-sponsors.svg b/assets/images/github-sponsors.svg new file mode 100644 index 0000000..7743dcb --- /dev/null +++ b/assets/images/github-sponsors.svg @@ -0,0 +1 @@ +GitHub Sponsors \ No newline at end of file diff --git a/assets/images/kofi.svg b/assets/images/kofi.svg new file mode 100644 index 0000000..dae0275 --- /dev/null +++ b/assets/images/kofi.svg @@ -0,0 +1 @@ +Ko-fi \ No newline at end of file diff --git a/assets/images/linktree.svg b/assets/images/linktree.svg new file mode 100644 index 0000000..92d03f0 --- /dev/null +++ b/assets/images/linktree.svg @@ -0,0 +1 @@ +Linktree \ No newline at end of file From 6eb471b38b36085552c6a06f3d81aa556f7e5995 Mon Sep 17 00:00:00 2001 From: mateonunez Date: Sun, 30 Jul 2023 11:54:16 +0200 Subject: [PATCH 10/19] chore(stdlib): replace exit with throw Signed-off-by: mateonunez --- lib/stdlib.js | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/lib/stdlib.js b/lib/stdlib.js index 1a0e1c4..52d6035 100644 --- a/lib/stdlib.js +++ b/lib/stdlib.js @@ -6,13 +6,11 @@ import { ANAL_CHARACTERS } from './constants.js'; export function anallify(string) { if (!checker(string)) { - process.stderr.write(`${ERROR.notString}\n`); - return process.exit(1); + throw new Error(ERROR.notString); } if (!string) { - process.stderr.write(`${ERROR.missingArgument}\n`); - return process.exit(1); + throw new Error(ERROR.missingArgument); } let anal = ''; @@ -29,13 +27,11 @@ export function anallify(string) { export function stringify(anal) { if (!checker(anal)) { - process.stderr.write(`${ERROR.notString}\n`); - return process.exit(1); + throw new Error(ERROR.notString); } if (!anal) { - process.stderr.write(`${ERROR.missingArgument}\n`); - return process.exit(1); + throw new Error(ERROR.missingArgument); } let string = ''; @@ -56,8 +52,7 @@ export function run(file) { const contents = fs.readFileSync(file, { encoding: 'utf-8' }); return stringify(contents); } catch (error) { - process.stderr.write(`${ERROR.fileNotFound}\n`); - return process.exit(1); + throw new Error(ERROR.fileNotFound); } } @@ -72,7 +67,6 @@ export function compile(file) { fs.writeFileSync(`${filename}.anal`, anallify(contents), { encoding: 'utf-8' }); process.stdout.write(`${SUCCESS.compileSuccess}`); } catch (error) { - process.stderr.write(`${ERROR.fileNotFound}\n`); - process.exit(1); + throw new Error(ERROR.fileNotFound); } } From d7e2d0a5e9cc6fbaec97c4a92bbcfe0b15d4ea38 Mon Sep 17 00:00:00 2001 From: mateonunez Date: Sun, 30 Jul 2023 11:54:30 +0200 Subject: [PATCH 11/19] perf(cli): exit on error Signed-off-by: mateonunez --- cli.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cli.js b/cli.js index 67a9e2a..6006065 100644 --- a/cli.js +++ b/cli.js @@ -33,4 +33,9 @@ function cli() { process.stdout.write(`${output}\n`); } -cli(); +try { + cli(); +} catch (error) { + process.stderr.write(`${error.message}\n`); + process.exit(1); +} From 8c133f4c332772889001bc9e80fb7ef5f090cb16 Mon Sep 17 00:00:00 2001 From: mateonunez Date: Sun, 30 Jul 2023 11:54:44 +0200 Subject: [PATCH 12/19] test(stdlib): full coverage Signed-off-by: mateonunez --- tests/stdlib.test.js | 70 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/tests/stdlib.test.js b/tests/stdlib.test.js index b25089b..0bdd8d5 100644 --- a/tests/stdlib.test.js +++ b/tests/stdlib.test.js @@ -1,4 +1,4 @@ -import { test, expect } from 'vitest'; +import { test, expect, describe } from 'vitest'; import { ANALLIFY_INPUT, @@ -16,19 +16,69 @@ import { run, anallify, stringify, + compile, } from '../lib/stdlib.js'; +import { ERROR } from '../lib/dictionary.js'; -test('Encode string to anal', () => { - expect(anallify(ANALLIFY_INPUT)).toBe(ANALLIFY_CORRECT_OUTPUT); - expect(anallify(ANALLIFY_INPUT)).not.toBe(ANALLIFY_WRONG_OUTPUT); +describe('Anallify', () => { + test('Encode string to anal', () => { + expect(anallify(ANALLIFY_INPUT)).toBe(ANALLIFY_CORRECT_OUTPUT); + expect(anallify(ANALLIFY_INPUT)).not.toBe(ANALLIFY_WRONG_OUTPUT); + }); + + test('Throw error if argument is not a string', () => { + expect(() => anallify(1)).toThrowError(Error(ERROR.notString)); + }); + + test('Throw error if argument is missing', () => { + expect(() => anallify('')).toThrowError(Error(ERROR.missingArgument)); + }); }); -test('Decode anal to string', () => { - expect(stringify(STRINGIFY_INPUT)).toBe(STRINGIFY_CORRECT_OUTPUT); - expect(stringify(STRINGIFY_INPUT)).not.toBe(STRINGIFY_WRONG_OUTPUT); +describe('Stringify', () => { + test('Decode anal to string', () => { + expect(stringify(STRINGIFY_INPUT)).toBe(STRINGIFY_CORRECT_OUTPUT); + expect(stringify(STRINGIFY_INPUT)).not.toBe(STRINGIFY_WRONG_OUTPUT); + }); + + test('Decode with correct chars', () => { + const ANAL_CHARACTERS = 'anal'; + const charCodeA = STRINGIFY_INPUT.length; + const charCodeB = STRINGIFY_INPUT.length * 2; + + const anal = `${ANAL_CHARACTERS.repeat(charCodeA)} ${ANAL_CHARACTERS.repeat(charCodeB)}`; + const result = stringify(anal); + + expect(result).toBe(String.fromCharCode(charCodeA) + String.fromCharCode(charCodeB)); + }); + + test('Throw error if argument is not a string', () => { + expect(() => stringify(1)).toThrowError(Error(ERROR.notString)); + }); + + test('Throw error if argument is missing', () => { + expect(() => stringify('')).toThrowError(Error(ERROR.missingArgument)); + }); }); -test('Run .anal file', () => { - expect(run(ANAL_FILE_LOCATION)).toBe(RUN_CORRECT_OUTPUT); - expect(run(ANAL_FILE_LOCATION)).not.toBe(RUN_WRONG_OUTPUT); +describe('Run', () => { + test('Run .anal file', () => { + expect(run(ANAL_FILE_LOCATION)).toBe(RUN_CORRECT_OUTPUT); + expect(run(ANAL_FILE_LOCATION)).not.toBe(RUN_WRONG_OUTPUT); + }); + + test('Throw error if file is not found', () => { + expect(() => run('')).toThrowError(Error(ERROR.fileNotFound)); + }); +}); + +describe('Compile', () => { + test('Compile .anal file', () => { + expect(compile(ANAL_FILE_LOCATION)).toBe(RUN_CORRECT_OUTPUT); + expect(compile(ANAL_FILE_LOCATION)).not.toBe(RUN_WRONG_OUTPUT); + }); + + test('Throw error if file is not found', () => { + expect(() => run('')).toThrowError(Error(ERROR.fileNotFound)); + }); }); From eaea48124b24885b5f2d5e552b881c1349e91df5 Mon Sep 17 00:00:00 2001 From: mateonunez Date: Sun, 30 Jul 2023 12:26:46 +0200 Subject: [PATCH 13/19] chore(stdlib): remove useful compile test Signed-off-by: mateonunez --- tests/stdlib.test.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/tests/stdlib.test.js b/tests/stdlib.test.js index 0bdd8d5..343fdd7 100644 --- a/tests/stdlib.test.js +++ b/tests/stdlib.test.js @@ -1,4 +1,4 @@ -import { test, expect, describe } from 'vitest'; +import { test, expect, describe, is } from 'vitest'; import { ANALLIFY_INPUT, @@ -42,13 +42,13 @@ describe('Stringify', () => { }); test('Decode with correct chars', () => { - const ANAL_CHARACTERS = 'anal'; - const charCodeA = STRINGIFY_INPUT.length; - const charCodeB = STRINGIFY_INPUT.length * 2; + const ANAL_CHARACTERS = ''; + const charCodeA = ANAL_CHARACTERS.length; + const charCodeB = ANAL_CHARACTERS.length * 2; const anal = `${ANAL_CHARACTERS.repeat(charCodeA)} ${ANAL_CHARACTERS.repeat(charCodeB)}`; - const result = stringify(anal); + const result = stringify(anal); expect(result).toBe(String.fromCharCode(charCodeA) + String.fromCharCode(charCodeB)); }); @@ -73,12 +73,7 @@ describe('Run', () => { }); describe('Compile', () => { - test('Compile .anal file', () => { - expect(compile(ANAL_FILE_LOCATION)).toBe(RUN_CORRECT_OUTPUT); - expect(compile(ANAL_FILE_LOCATION)).not.toBe(RUN_WRONG_OUTPUT); - }); - test('Throw error if file is not found', () => { - expect(() => run('')).toThrowError(Error(ERROR.fileNotFound)); + expect(() => compile('')).toThrowError(Error(ERROR.fileNotFound)); }); }); From 059f3f3cfd06ef32e3388c306953312b5adabfc8 Mon Sep 17 00:00:00 2001 From: Airscript Date: Sun, 30 Jul 2023 15:25:39 +0200 Subject: [PATCH 14/19] test: add compile's functional test --- analscript.js | 2 +- cli.js | 10 ++---- lib/{stdlib.js => std.js} | 5 ++- lib/utils.js | 11 ++++++- tests/hello.anus | 1 + tests/seeds.js | 7 ++++ tests/{stdlib.test.js => std.test.js} | 46 ++++++++++++++++----------- 7 files changed, 52 insertions(+), 30 deletions(-) rename lib/{stdlib.js => std.js} (97%) create mode 100644 tests/hello.anus rename tests/{stdlib.test.js => std.test.js} (63%) diff --git a/analscript.js b/analscript.js index 3da3f4f..94001f5 100644 --- a/analscript.js +++ b/analscript.js @@ -1,4 +1,4 @@ -import { anallify, stringify } from './lib/stdlib.js'; +import { anallify, stringify } from './lib/std.js'; export { anallify, stringify }; export default { anallify, stringify }; diff --git a/cli.js b/cli.js index 6006065..bd4250a 100644 --- a/cli.js +++ b/cli.js @@ -1,12 +1,13 @@ #!/usr/bin/env node import help from './lib/help.js'; +import { graceful } from './lib/utils.js'; import { run, compile, anallify, stringify, -} from './lib/stdlib.js'; +} from './lib/std.js'; import { RUN, @@ -33,9 +34,4 @@ function cli() { process.stdout.write(`${output}\n`); } -try { - cli(); -} catch (error) { - process.stderr.write(`${error.message}\n`); - process.exit(1); -} +graceful(cli()); diff --git a/lib/stdlib.js b/lib/std.js similarity index 97% rename from lib/stdlib.js rename to lib/std.js index 52d6035..505049f 100644 --- a/lib/stdlib.js +++ b/lib/std.js @@ -1,6 +1,6 @@ import fs from 'node:fs'; -import checker from './utils.js'; +import { checker } from './utils.js'; import { ERROR, SUCCESS } from './dictionary.js'; import { ANAL_CHARACTERS } from './constants.js'; @@ -59,13 +59,12 @@ export function run(file) { export function compile(file) { try { const contents = fs.readFileSync(file, { encoding: 'utf-8' }); - let filename = file.split('.'); filename = filename.filter((element, index) => index < filename.length - 1); filename = filename.join('.'); - fs.writeFileSync(`${filename}.anal`, anallify(contents), { encoding: 'utf-8' }); process.stdout.write(`${SUCCESS.compileSuccess}`); + return true; } catch (error) { throw new Error(ERROR.fileNotFound); } diff --git a/lib/utils.js b/lib/utils.js index 526170d..ec47d2c 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -1,3 +1,12 @@ -export default function checker(input) { +export function checker(input) { return typeof input === 'string'; } + +export function graceful(fn) { + try { + fn(); + } catch (error) { + process.stderr.write(`${error.message}\n`); + process.exit(1); + } +} diff --git a/tests/hello.anus b/tests/hello.anus new file mode 100644 index 0000000..99f615c --- /dev/null +++ b/tests/hello.anus @@ -0,0 +1 @@ +Hello, Analscript! \ No newline at end of file diff --git a/tests/seeds.js b/tests/seeds.js index 2d3d790..182320f 100644 --- a/tests/seeds.js +++ b/tests/seeds.js @@ -1,3 +1,6 @@ +export const NUMERIC_INPUT = 1; +export const EMPTY_STRING_INPUT = ''; + export const STRINGIFY_CORRECT_OUTPUT = 'B'; export const STRINGIFY_WRONG_OUTPUT = '🍑🍆🍑🍆'; export const STRINGIFY_INPUT = '🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆'; @@ -9,3 +12,7 @@ export const ANALLIFY_CORRECT_OUTPUT = '🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 export const ANAL_FILE_LOCATION = 'tests/script.anal'; export const RUN_CORRECT_OUTPUT = 'Welcome to Analscript!'; export const RUN_WRONG_OUTPUT = 'Welcome to Jurassic Park!'; + +export const COMPILE_CORRECT_OUTPUT = true; +export const FILE_LOCATION = 'tests/hello.anus'; +export const COMPILED_FILE_LOCATION = 'tests/hello.anal'; diff --git a/tests/stdlib.test.js b/tests/std.test.js similarity index 63% rename from tests/stdlib.test.js rename to tests/std.test.js index 343fdd7..f45eb79 100644 --- a/tests/stdlib.test.js +++ b/tests/std.test.js @@ -1,13 +1,19 @@ -import { test, expect, describe, is } from 'vitest'; +import fs from 'node:fs'; +import { test, expect, describe } from 'vitest'; import { + FILE_LOCATION, + NUMERIC_INPUT, ANALLIFY_INPUT, STRINGIFY_INPUT, RUN_WRONG_OUTPUT, ANAL_FILE_LOCATION, + EMPTY_STRING_INPUT, RUN_CORRECT_OUTPUT, ANALLIFY_WRONG_OUTPUT, STRINGIFY_WRONG_OUTPUT, + COMPILE_CORRECT_OUTPUT, + COMPILED_FILE_LOCATION, ANALLIFY_CORRECT_OUTPUT, STRINGIFY_CORRECT_OUTPUT, } from './seeds.js'; @@ -17,7 +23,7 @@ import { anallify, stringify, compile, -} from '../lib/stdlib.js'; +} from '../lib/std.js'; import { ERROR } from '../lib/dictionary.js'; describe('Anallify', () => { @@ -31,7 +37,9 @@ describe('Anallify', () => { }); test('Throw error if argument is missing', () => { - expect(() => anallify('')).toThrowError(Error(ERROR.missingArgument)); + expect(() => anallify(EMPTY_STRING_INPUT)).toThrowError( + Error(ERROR.missingArgument), + ); }); }); @@ -41,23 +49,16 @@ describe('Stringify', () => { expect(stringify(STRINGIFY_INPUT)).not.toBe(STRINGIFY_WRONG_OUTPUT); }); - test('Decode with correct chars', () => { - const ANAL_CHARACTERS = ''; - const charCodeA = ANAL_CHARACTERS.length; - const charCodeB = ANAL_CHARACTERS.length * 2; - - const anal = `${ANAL_CHARACTERS.repeat(charCodeA)} ${ANAL_CHARACTERS.repeat(charCodeB)}`; - - const result = stringify(anal); - expect(result).toBe(String.fromCharCode(charCodeA) + String.fromCharCode(charCodeB)); - }); - test('Throw error if argument is not a string', () => { - expect(() => stringify(1)).toThrowError(Error(ERROR.notString)); + expect(() => stringify(NUMERIC_INPUT)).toThrowError( + Error(ERROR.notString), + ); }); test('Throw error if argument is missing', () => { - expect(() => stringify('')).toThrowError(Error(ERROR.missingArgument)); + expect(() => stringify(EMPTY_STRING_INPUT)).toThrowError( + Error(ERROR.missingArgument), + ); }); }); @@ -68,12 +69,21 @@ describe('Run', () => { }); test('Throw error if file is not found', () => { - expect(() => run('')).toThrowError(Error(ERROR.fileNotFound)); + expect(() => run(EMPTY_STRING_INPUT)).toThrowError( + Error(ERROR.fileNotFound), + ); }); }); describe('Compile', () => { + test('Compile file to .anal', () => { + expect(compile(FILE_LOCATION)).toBe(COMPILE_CORRECT_OUTPUT); + fs.rmSync(COMPILED_FILE_LOCATION); + }); + test('Throw error if file is not found', () => { - expect(() => compile('')).toThrowError(Error(ERROR.fileNotFound)); + expect(() => compile(EMPTY_STRING_INPUT)).toThrowError( + Error(ERROR.fileNotFound), + ); }); }); From f55449701aa2e05c96622da77423fcd59b7da184 Mon Sep 17 00:00:00 2001 From: Airscript Date: Sun, 30 Jul 2023 15:29:40 +0200 Subject: [PATCH 15/19] refactor: remove cli function invocation in graceful --- cli.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli.js b/cli.js index bd4250a..6f21ee8 100644 --- a/cli.js +++ b/cli.js @@ -34,4 +34,4 @@ function cli() { process.stdout.write(`${output}\n`); } -graceful(cli()); +graceful(cli); From 425542758e9ba4bf31e49800c2daf2672764f5a6 Mon Sep 17 00:00:00 2001 From: Airscript Date: Sun, 30 Jul 2023 15:43:45 +0200 Subject: [PATCH 16/19] test: add utils test suite --- tests/utils.test.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/utils.test.js diff --git a/tests/utils.test.js b/tests/utils.test.js new file mode 100644 index 0000000..0ee5511 --- /dev/null +++ b/tests/utils.test.js @@ -0,0 +1,16 @@ +import { + vi, + test, + expect, + describe, +} from 'vitest'; + +import { graceful } from '../lib/utils'; + +describe('Graceful', () => { + test('Execute graceful', () => { + const fn = vi.fn(); + graceful(fn); + expect(fn).toBeCalled(); + }); +}); From 5ffcabc2377ea6e461c35a475c2498b8c510eeba Mon Sep 17 00:00:00 2001 From: Airscript Date: Sun, 30 Jul 2023 16:09:18 +0200 Subject: [PATCH 17/19] test: add spy on process exit --- tests/utils.test.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/utils.test.js b/tests/utils.test.js index 0ee5511..7f3d514 100644 --- a/tests/utils.test.js +++ b/tests/utils.test.js @@ -5,7 +5,8 @@ import { describe, } from 'vitest'; -import { graceful } from '../lib/utils'; +import { graceful } from '../lib/utils.js'; +import { EMPTY_STRING_INPUT } from './seeds.js'; describe('Graceful', () => { test('Execute graceful', () => { @@ -13,4 +14,10 @@ describe('Graceful', () => { graceful(fn); expect(fn).toBeCalled(); }); + + test('Trigger graceful exit', () => { + const processExit = vi.spyOn(process, 'exit').mockImplementation(() => {}); + graceful(EMPTY_STRING_INPUT); + expect(processExit).toHaveBeenCalled(); + }); }); From 2ebcc802526b6542ffe0449397df64f731ac3084 Mon Sep 17 00:00:00 2001 From: Airscript Date: Sun, 30 Jul 2023 16:35:02 +0200 Subject: [PATCH 18/19] refactor: enforce code robustness --- hello.anal | 1 + hello.anus | 1 + lib/constants.js | 1 + lib/dictionary.js | 1 + lib/regexp.js | 4 ++++ lib/std.js | 34 +++++++++++++++++++++++----------- tests/seeds.js | 1 + tests/std.test.js | 7 +++++++ 8 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 hello.anal create mode 100644 hello.anus create mode 100644 lib/regexp.js diff --git a/hello.anal b/hello.anal new file mode 100644 index 0000000..366b911 --- /dev/null +++ b/hello.anal @@ -0,0 +1 @@ +🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 \ No newline at end of file diff --git a/hello.anus b/hello.anus new file mode 100644 index 0000000..5ab2f8a --- /dev/null +++ b/hello.anus @@ -0,0 +1 @@ +Hello \ No newline at end of file diff --git a/lib/constants.js b/lib/constants.js index 355cbb1..837e157 100644 --- a/lib/constants.js +++ b/lib/constants.js @@ -4,3 +4,4 @@ export const COMPILE = 'compile'; export const ANALLIFY = 'anallify'; export const STRINGIFY = 'stringify'; export const ANAL_CHARACTERS = '🍑🍆'; +export const GRAMMAR = `${ANAL_CHARACTERS} `; diff --git a/lib/dictionary.js b/lib/dictionary.js index cdb4cad..bf7a9ad 100644 --- a/lib/dictionary.js +++ b/lib/dictionary.js @@ -2,6 +2,7 @@ export const ERROR = { fileNotFound: 'File not found.', missingArgument: 'Missing argument.', notString: 'Only strings are accepted', + notAcceptedByGrammar: 'There are some characters not accepted by grammar.', }; export const SUCCESS = { diff --git a/lib/regexp.js b/lib/regexp.js new file mode 100644 index 0000000..214133b --- /dev/null +++ b/lib/regexp.js @@ -0,0 +1,4 @@ +import { ANAL_CHARACTERS, GRAMMAR } from './constants.js'; + +export const matcher = new RegExp(`^[${GRAMMAR}]+$`, 'u'); +export const sequence = new RegExp(`${ANAL_CHARACTERS}`, 'g'); diff --git a/lib/std.js b/lib/std.js index 505049f..ea9c6d4 100644 --- a/lib/std.js +++ b/lib/std.js @@ -3,6 +3,7 @@ import fs from 'node:fs'; import { checker } from './utils.js'; import { ERROR, SUCCESS } from './dictionary.js'; import { ANAL_CHARACTERS } from './constants.js'; +import { matcher, sequence } from './regexp.js'; export function anallify(string) { if (!checker(string)) { @@ -34,13 +35,16 @@ export function stringify(anal) { throw new Error(ERROR.missingArgument); } + if (!matcher.test(anal)) { + throw new Error(ERROR.notAcceptedByGrammar); + } + let string = ''; const fragments = anal.split(' '); - const rule = new RegExp(`${ANAL_CHARACTERS}`, 'g'); for (let index = 0; index < fragments.length; index += 1) { const fragment = fragments[index]; - const character = String.fromCharCode(((fragment.match(rule) || []).length)); + const character = String.fromCharCode(((fragment.match(sequence)).length)); string = string.concat(character); } @@ -48,24 +52,32 @@ export function stringify(anal) { } export function run(file) { + let contents = null; + try { - const contents = fs.readFileSync(file, { encoding: 'utf-8' }); - return stringify(contents); + contents = fs.readFileSync(file, { encoding: 'utf-8' }); } catch (error) { throw new Error(ERROR.fileNotFound); } + + return stringify(contents); } export function compile(file) { + let contents = null; + const fileOptions = { encoding: 'utf-8' }; + try { - const contents = fs.readFileSync(file, { encoding: 'utf-8' }); - let filename = file.split('.'); - filename = filename.filter((element, index) => index < filename.length - 1); - filename = filename.join('.'); - fs.writeFileSync(`${filename}.anal`, anallify(contents), { encoding: 'utf-8' }); - process.stdout.write(`${SUCCESS.compileSuccess}`); - return true; + contents = fs.readFileSync(file, fileOptions); } catch (error) { throw new Error(ERROR.fileNotFound); } + + let filename = file.split('.'); + filename = filename.filter((element, index) => index < filename.length - 1); + filename = filename.join('.'); + + fs.writeFileSync(`${filename}.anal`, anallify(contents), fileOptions); + process.stdout.write(`${SUCCESS.compileSuccess}`); + return true; } diff --git a/tests/seeds.js b/tests/seeds.js index 182320f..bae9e1a 100644 --- a/tests/seeds.js +++ b/tests/seeds.js @@ -1,5 +1,6 @@ export const NUMERIC_INPUT = 1; export const EMPTY_STRING_INPUT = ''; +export const NOT_ACCEPTED_INPUT = '🍑🍆 a'; export const STRINGIFY_CORRECT_OUTPUT = 'B'; export const STRINGIFY_WRONG_OUTPUT = '🍑🍆🍑🍆'; diff --git a/tests/std.test.js b/tests/std.test.js index f45eb79..b5ea901 100644 --- a/tests/std.test.js +++ b/tests/std.test.js @@ -9,6 +9,7 @@ import { RUN_WRONG_OUTPUT, ANAL_FILE_LOCATION, EMPTY_STRING_INPUT, + NOT_ACCEPTED_INPUT, RUN_CORRECT_OUTPUT, ANALLIFY_WRONG_OUTPUT, STRINGIFY_WRONG_OUTPUT, @@ -60,6 +61,12 @@ describe('Stringify', () => { Error(ERROR.missingArgument), ); }); + + test('Throw error if there are grammar-refused characters', () => { + expect(() => stringify(NOT_ACCEPTED_INPUT)).toThrowError( + Error(ERROR.notAcceptedByGrammar), + ); + }); }); describe('Run', () => { From 045e4a91a1d1e55b277398e771cc387038612ac6 Mon Sep 17 00:00:00 2001 From: Airscript Date: Sun, 30 Jul 2023 16:39:25 +0200 Subject: [PATCH 19/19] chore: change CHANGELOG for release 1.1.7 --- CHANGELOG.md | 11 +++++++++++ README.md | 2 +- VERSION | 2 +- hello.anal | 1 - hello.anus | 1 - lib/help.js | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 8 files changed, 17 insertions(+), 8 deletions(-) delete mode 100644 hello.anal delete mode 100644 hello.anus diff --git a/CHANGELOG.md b/CHANGELOG.md index aa9a6e2..258e96f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) with some edits, and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +# 1.1.7 + +## What's Changed +* test: full code coverage w/ @mateonunez +* refactor: enforce code robustness + +## New Contributors +* @mateonunez made their first contribution in https://github.com/airscripts/analscript/pull/13 + +**Full Changelog**: https://github.com/airscripts/analscript/compare/1.1.6...1.1.7 + # 1.1.6 ## What's Changed diff --git a/README.md b/README.md index c34622c..150966f 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ analscript help This command will show you something like this: ``` -Analscript Version 1.1.6 +Analscript Version 1.1.7 Copyright (c) 2023 by Airscript Usage: diff --git a/VERSION b/VERSION index ab67981..a5ba932 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.6 \ No newline at end of file +1.1.7 \ No newline at end of file diff --git a/hello.anal b/hello.anal deleted file mode 100644 index 366b911..0000000 --- a/hello.anal +++ /dev/null @@ -1 +0,0 @@ -🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆🍑🍆 \ No newline at end of file diff --git a/hello.anus b/hello.anus deleted file mode 100644 index 5ab2f8a..0000000 --- a/hello.anus +++ /dev/null @@ -1 +0,0 @@ -Hello \ No newline at end of file diff --git a/lib/help.js b/lib/help.js index f5b1bf4..41628c1 100644 --- a/lib/help.js +++ b/lib/help.js @@ -1,4 +1,4 @@ -const version = 'Analscript, version 1.1.6'; +const version = 'Analscript, version 1.1.7'; const copyright = '\nCopyright (c) 2023 by Airscript\n'; const usage = ` diff --git a/package-lock.json b/package-lock.json index 339e588..a0d88f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "analscript", - "version": "1.1.6", + "version": "1.1.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "analscript", - "version": "1.1.6", + "version": "1.1.7", "funding": [ { "type": "github", diff --git a/package.json b/package.json index d4ad709..237d63c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "type": "module", - "version": "1.1.6", + "version": "1.1.7", "name": "analscript", "author": "Airscript", "main": "analscript.js",