├── .gitignore
├── cows
├── shrug.cow
├── tableflip.cow
├── template.cow
├── cthulhu-mini.cow
├── bunny.cow
├── owl.cow
├── shikato.cow
├── zen-noh-milk.cow
├── default.cow
├── hedgehog.cow
├── lollerskates.cow
├── hellokitty.cow
├── koala.cow
├── wood.cow
├── mailchimp.cow
├── minotaur.cow
├── bill-the-cat.cow
├── ebi_furai.cow
├── moose.cow
├── small.cow
├── roflcopter.cow
├── satanic.cow
├── mutilated.cow
├── banana.cow
├── pawn.cow
├── robot.cow
├── kilroy.cow
├── tortoise.cow
├── hiyoko.cow
├── kitten.cow
├── rook.cow
├── dolphin.cow
├── www.cow
├── tux.cow
├── world.cow
├── bishop.cow
├── cower.cow
├── goat2.cow
├── knight.cow
├── sheep.cow
├── vader-koala.cow
├── fat-cow.cow
├── luke-koala.cow
├── moofasa.cow
├── ymd_udon.cow
├── fat-banana.cow
├── yasuna_16.cow
├── robotfindskitten.cow
├── elephant2.cow
├── supermilker.cow
├── clippy.cow
├── queen.cow
├── sachiko.cow
├── squirrel.cow
├── goat.cow
├── vader.cow
├── kitty.cow
├── bong.cow
├── elephant.cow
├── ren.cow
├── fox.cow
├── bud-frogs.cow
├── elephant-in-snake.cow
├── king.cow
├── seahorse.cow
├── C3PO.cow
├── charlie.cow
├── whale.cow
├── telebears.cow
├── iwashi.cow
├── docker-whale.cow
├── lamb.cow
├── armadillo.cow
├── yasuna_12.cow
├── dalek.cow
├── stimpy.cow
├── yasuna_10.cow
├── cowfee.cow
├── ibm.cow
├── yasuna_13.cow
├── cat2.cow
├── bearface.cow
├── jellyfish.cow
├── kosh.cow
├── taxi.cow
├── happy-whale.cow
├── skeleton.cow
├── yasuna_09.cow
├── threader.cow
├── R2-D2.cow
├── ghost.cow
├── spidercow.cow
├── meow.cow
├── milk.cow
├── fence.cow
├── flaming-sheep.cow
├── lamb2.cow
├── sudowoodo.cow
├── chito.cow
├── cheese.cow
├── claw-arm.cow
├── yasuna_19.cow
├── moojira.cow
├── yasuna_11.cow
├── yasuna_20.cow
├── eyes.cow
├── cube.cow
├── mooghidjirah.cow
├── toaster.cow
├── hand.cow
├── nyan.cow
├── daemon.cow
├── yasuna_06.cow
├── beavis.zen.cow
├── yasuna_01.cow
├── lobster.cow
├── cat.cow
├── doge.cow
├── bees.cow
├── kiss.cow
├── yasuna_08.cow
├── radio.cow
├── yasuna_03.cow
├── box.cow
├── yasuna_05.cow
├── mech-and-cow.cow
├── pinball-machine.cow
├── snoopysleep.cow
├── yasuna_03a.cow
├── yasuna_07.cow
├── USA.cow
├── okazu.cow
├── snoopy.cow
├── biohazard.cow
├── wizard.cow
├── explosion.cow
├── psychiatrichelp.cow
├── atom.cow
├── yasuna_04.cow
├── cake.cow
├── yasuna_18.cow
├── fire.cow
├── hiya.cow
├── lightbulb.cow
├── stegosaurus.cow
├── yasuna_17.cow
├── yasuna_14.cow
├── personality-sphere.cow
├── octopus.cow
├── catfence.cow
├── psychiatrichelp2.cow
├── karl_marx.cow
├── surgery.cow
├── broken-heart.cow
├── aperture.cow
├── aperture-blank.cow
├── glados.cow
├── dragon.cow
├── hypno.cow
├── companion-cube.cow
├── renge.cow
├── yasuna_02.cow
├── ghostbusters.cow
├── maze-runner.cow
├── black-mesa.cow
├── turtle.cow
├── tweety-bird.cow
├── snoopyhouse.cow
├── homer.cow
├── threecubes.cow
├── tux-big.cow
├── mule.cow
├── atat.cow
├── dragon-and-cow.cow
├── turkey.cow
├── awesome-face.cow
├── seahorse-big.cow
├── squid.cow
├── chessmen.cow
├── periodic-table.cow
├── dalek-shooting.cow
├── smiling-octopus.cow
├── charizardvice.cow
├── ackbar.cow
├── cake-with-candles.cow
├── golden-eagle.cow
├── hippie.cow
├── mona-lisa.cow
├── pterodactyl.cow
└── weeping-angel.cow
├── .travis.yml
├── sample.html
├── rollup.config.js
├── test
├── faces.js
├── cli.js
├── cows.js
└── balloon.js
├── lib
├── faces.js
├── cows.js
├── replacer.js
└── balloon.js
├── LICENSE
├── package.json
├── cli.js
├── index.js
├── README.md
├── index.d.ts
└── browser.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .*
3 | !.gitignore
4 | !.travis.yml
5 | build
6 |
--------------------------------------------------------------------------------
/cows/shrug.cow:
--------------------------------------------------------------------------------
1 | $the_cow = <
9 | /_/ \\_\\
10 | EOC
11 |
--------------------------------------------------------------------------------
/cows/hiyoko.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## ひよ子
3 | ##
4 | $the_cow = <.'
8 | '-:_ ) / `' '=.
9 | ) > {_/, /~)
10 | snd |/ `^ .'
11 | EOC
12 |
--------------------------------------------------------------------------------
/cows/bishop.cow:
--------------------------------------------------------------------------------
1 | # Bishop (Chess piece)
2 | #
3 | # from http://www.chessvariants.org/d.pieces/ascii.html
4 | # by David Moeser
5 | #
6 | $the_cow = <_
10 | (\\) )
11 | \\__/
12 | (____)
13 | | |
14 | |__|
15 | /____\\
16 | (______)
17 | EOC
18 |
--------------------------------------------------------------------------------
/cows/cower.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## A cowering cow
3 | ##
4 | $the_cow = <
11 | \\__/
12 | (____)
13 | | |
14 | | |
15 | |__|
16 | /____\\
17 | (______)
18 | (________)
19 | EOC
20 |
--------------------------------------------------------------------------------
/cows/sachiko.cow:
--------------------------------------------------------------------------------
1 | #
2 | # プロデューサーさんは独特の変わったセンスをしてますね!
3 | #
4 | $the_cow = < $eye\\ _~
9 | `;'\\\\__-' \\_
10 | | ) _ \\ \\
11 | / / `` w w
12 | w w
13 | EOC
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/cows/vader.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## Cowth Vader, from geordan@csua.berkeley.edu
3 | ##
4 | $the_cow = < 、 _ ィ
14 | /  ̄ ヽ
15 | / | iヽ
16 | |\| |/|
17 | | ||/\/\/\/ | |
18 | EOC
19 |
--------------------------------------------------------------------------------
/cows/whale.cow:
--------------------------------------------------------------------------------
1 | # whale
2 | #
3 | # modified from https://www.reddit.com/r/pics/comments/25ji0n/man_face_to_face_with_whale/chi1kdy?context=3
4 | $the_cow = <>
12 | EOC
13 |
--------------------------------------------------------------------------------
/cows/iwashi.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## いわし
3 | ##
4 | ##
5 | $the_cow = <=G===' '.
8 | |======|
9 | |======|
10 | )--/]IIIIII]
11 | |_______|
12 | C O O O D
13 | C O O O D
14 | C O O O D
15 | C__O__O__O__D
16 | snd [_____________]
17 | EOC
18 |
--------------------------------------------------------------------------------
/cows/stimpy.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## Stimpy!
3 | ##
4 | $the_cow = <|:::::|<\/\//
18 | \ :::>TヌT<::: /
19 | Y : \W/ : Y
20 | EOC
21 |
--------------------------------------------------------------------------------
/cows/cowfee.cow:
--------------------------------------------------------------------------------
1 | $the_cow = <
2 |
3 |
4 |
5 | Cowsay
6 |
7 |
8 |
9 |
10 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/cows/cat2.cow:
--------------------------------------------------------------------------------
1 | #
2 | # Cat picture by Joan Stark
3 | # Transformed into cowfile by Myroslav Golub
4 | #
5 | $the_cow = < ____; ; |/\\><| ____ _<)
13 | {____/ \\_________________/ \\____}
14 | \\ '' / \\ '' /
15 | jgs '--' '--'
16 | EOC
17 |
--------------------------------------------------------------------------------
/cows/happy-whale.cow:
--------------------------------------------------------------------------------
1 | # happy whale
2 | #
3 | # modified from http://www.chris.com/ascii/index.php?art=animals/other%20(water)
4 | $the_cow = <-'-゚-'`゚u
22 | ーi-i~i-i~
23 | |.| |.|
24 | |-| |-|
25 | ヒコ ヒコ
26 | EOC
27 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import commonjs from '@rollup/plugin-commonjs';
2 | import {nodeResolve} from '@rollup/plugin-node-resolve';
3 | import {string} from 'rollup-plugin-string';
4 |
5 | export default {
6 | input: 'browser.js',
7 | plugins: [
8 | nodeResolve(),
9 | commonjs(),
10 | string({
11 | include: '**/*.cow',
12 | }),
13 | ],
14 | output: [
15 | { file: 'build/cowsay.umd.js', format: 'umd', name: 'cowsay' },
16 | { file: 'build/cowsay.es.js', format: 'es' },
17 | ],
18 | }
19 |
--------------------------------------------------------------------------------
/cows/threader.cow:
--------------------------------------------------------------------------------
1 | $the_cow = < {
5 | t.plan(2);
6 |
7 | const face = getFace({
8 | e: 'oo',
9 | T: ' ',
10 | });
11 | t.equal(face.eyes, 'oo');
12 | t.equal(face.tongue, ' ');
13 | });
14 |
15 | test('mode overrides provided values', (t) => {
16 | t.plan(2);
17 |
18 | const face = getFace({
19 | g: true,
20 | e: 'oo',
21 | T: 'O ',
22 | });
23 | t.equal(face.eyes, '$$');
24 | t.equal(face.tongue, ' ');
25 | });
26 |
--------------------------------------------------------------------------------
/cows/meow.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## A meowing tiger?
3 | ##
4 | $the_cow = <
21 | EOC
22 |
--------------------------------------------------------------------------------
/cows/fence.cow:
--------------------------------------------------------------------------------
1 | $the_cow = <z-一-z<:: :: :: :: :.
20 | V|\:/}ヘ/ `ー又ー' \/}ノ{/|:/
21 | ,z' ̄ ヘ /{ .ト、 / ̄ ヽ
22 | / /\./x 一 ミ./ \
23 | EOC
24 |
--------------------------------------------------------------------------------
/test/cli.js:
--------------------------------------------------------------------------------
1 | const test = require('tape');
2 | const execa = require('execa');
3 |
4 | test('say something', async (t) => {
5 | t.plan(1);
6 | const { stdout } = await execa.node('cli.js', ['say']);
7 | t.match(stdout, /< say >/);
8 | });
9 |
10 | test('think something', async (t) => {
11 | t.plan(1);
12 | const { stdout } = await execa.node('cli.js', ['--think', 'something']);
13 | t.match(stdout, /( something )/);
14 | });
15 |
16 | test('from stdin', async (t) => {
17 | t.plan(1);
18 | const { stdout } = await execa.node('cli.js', { input: 'echo' });
19 | t.match(stdout, /< echo >/);
20 | });
21 |
--------------------------------------------------------------------------------
/cows/moojira.cow:
--------------------------------------------------------------------------------
1 | $the_cow = < `ommmmm/
9 | smmmmms. -(__). .smmmmmo
10 | `+dmmmmd+``$tongue``+dmmmmd+
11 | -ymmmmmh/``+hmmmmmy-
12 | `/hmmmmmhhmmmmmh/`
13 | `/hmmmmmmmmh/`
14 | `/hmmmmmd/
15 | `oo.`/dmmmmdo`
16 | `ymmd+`VVmmmmmy`
17 | smmmmd- /mmmmms
18 | -mmmmm+ ommmmm-
19 | -ooooo` .ooooo.
20 | EOC
21 |
--------------------------------------------------------------------------------
/cows/yasuna_11.cow:
--------------------------------------------------------------------------------
1 | #
2 | # きゅーっ!
3 | #
4 |
5 | $the_cow = < く_, ̄┘/ \
15 | /⌒ ̄ ̄ ̄| ̄ ̄>--r-rュ<| /
16 | L_,vー─-| 、 } VYハ Y
17 |  ̄ ̄V |/∧ ヘ
18 | { |//∧ ヘ
19 | { \// ヘ
20 | { \
21 | } >
22 | EOC
23 |
--------------------------------------------------------------------------------
/cows/yasuna_20.cow:
--------------------------------------------------------------------------------
1 | #
2 | # yasuna_20.cow - もしかしたら新種かも!
3 | #
4 |
5 | $the_cow = <ィ |:| } ノ
21 | \/ ノ |:| }-く \
22 | / V \ \ \
23 | EOC
24 |
--------------------------------------------------------------------------------
/cows/eyes.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## Evil-looking eyes
3 | ##
4 | $the_cow = <> 5.4
3 | ##
4 | $the_cow = <:ニニニ:<VVV
18 | \ :v:〈|父 /:|:ハ┐
19 | ヾ{:「|/:|/ <:/:ノ\
20 | {:\|::/:/:{: :ヽ
21 | {: : : :`: /> : :>
22 | / : ゚ : : ゚ : Y: :/
23 | /: : : : : : : |ヽ/
24 | 〈: :゚: ハ : :゚: ∟コ
25 | /::---':::------く
26 | EOC
27 |
--------------------------------------------------------------------------------
/cows/beavis.zen.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## Beavis, with Zen philosophy removed.
3 | ##
4 | $the_cow = <、| |:|/|
20 | / V l
21 | 〈 〉
22 | 〈:`-:';`-´:〉
23 | .>-:ァ─--‐r-:ィ
24 | / / | |
25 | / / | |
26 | /-,/ |--|
27 | に7 |二|
28 | EOC
29 |
--------------------------------------------------------------------------------
/cows/lobster.cow:
--------------------------------------------------------------------------------
1 | # Lobster
2 | # lobster jgs 10/96
3 | # http://ascii.co.uk/art/lobster
4 | $the_cow = < cat.cow
7 | #
8 | $the_cow = <
12 | | .\\/|
13 | | .||
14 | | ||
15 | / \\ ||
16 | /,-.\\: ||
17 | /,, `\\ ||
18 | /, ', `\\||
19 | /, * ''/ |
20 | /, *,'/ |
21 | /, , / |
22 | / : , / .|
23 | /\\ : , / /||
24 | |\\ \\ .., / / ||
25 | |.\\ \\ . / / ||
26 | | \\ \\ / / ||
27 | | \\ / / |'
28 | |\\o '|o /
29 | ||\\o | /
30 | || \\ | /
31 | || \\|/
32 | |' ||
33 | ||
34 | ||
35 | |'
36 | EOC
37 |
--------------------------------------------------------------------------------
/cows/snoopysleep.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## picture from http://www.ascii-art.de/ascii/ab/beagle.txt
3 | ##
4 | $the_cow = <
18 | .SSt . . . . . _.()`'()`' .
19 | EOC
20 |
--------------------------------------------------------------------------------
/cows/atom.cow:
--------------------------------------------------------------------------------
1 | # atom
2 | # via http://pastebin.com/1AZwKrKp
3 | $the_cow = <
20 | /___ | >、 `''\ |
21 | /ニ}::\// \ | |
22 | {ニノ:: /''\ | `|r--ッ<|_/|
23 | /__ V }| 》=《 |
24 | \ \/`一ヘノ| { 6 } {
25 |  ̄ 「 ゞ= ' }
26 | ノ 〉
27 | EOC
28 |
--------------------------------------------------------------------------------
/cows/fire.cow:
--------------------------------------------------------------------------------
1 | # Fire
2 | # via http://pastebin.com/1AZwKrKp
3 | $the_cow = < < > .---.
8 | $thoughts | \\ \\ - ~ ~ - / / |
9 | _____ ..-~ ~-..-~
10 | | | \\~~~\\.' `./~~~/
11 | --------- \\__/ \\__/
12 | .' $eye \\ / / \\ "
13 | (_____, `._.' | } \\/~~~/
14 | `----. / } | / \\__/
15 | `-. | / | / `. ,~~|
16 | ~-.__| /_ - ~ ^| /- _ `..-‘ / \\ /\\
17 | | / | / ~-. `-/ _ \\/__\\
18 | |_____| |_____| ~ - . _ _ _ _ _>
19 | EOC
20 |
--------------------------------------------------------------------------------
/cows/yasuna_17.cow:
--------------------------------------------------------------------------------
1 | #
2 | # さっそく試してみよう 道具持ってないから作るしかないかな
3 | #
4 |
5 | $the_cow = <: :.
10 | /:: ::. :. ::. ::`:、
11 | `::. ::.ィ:.i::.、::.ヽ
12 | /' ./|..ト.}V.. .. ハ
13 | '.. .. ./L/|:| 一V::. ::1
14 | i::. ::/}/` V:| V Vト::. ::i
15 | |::. :/Y芋ミV!Y 芋ミ|::. .|
16 | ,::. ハ {::} V {::}}:r,:代
17 | /::. :} つノ つノ|:レ:}ゝ ヽ
18 | V::八 r一 ┐ ィ!::.:リ }
19 | {r \ハ:>- .一-'.s<:ハ}ヽ} __ノ ノ
20 | 弋二一 ヽ:{>}_ノ / ゝ、
21 | 。< 〈ハ〉 { `、
22 | / i `、. `、
23 | / フ^| ',゙、 `、
24 | く / | ', ゙、y ヽ
25 | tゝ_r r ', ><一'
26 | / ゞ_ '
27 | / 一 `
28 | EOC
29 |
--------------------------------------------------------------------------------
/test/cows.js:
--------------------------------------------------------------------------------
1 | const test = require('tape');
2 | const replacer = require('../lib/replacer');
3 |
4 | const cowFormat = `#Comment
5 | # just some other comment, it's going to be ignored anyway ...
6 | $the_cow = < {
29 | t.plan(1);
30 |
31 | const cow = replacer(cowFormat, {
32 | thoughts: '||',
33 | eyes: 'oo',
34 | tongue: 'U ',
35 | });
36 | t.equal(cow, expected);
37 | });
38 |
39 | test('plain text file', (t) => {
40 | t.plan(1);
41 |
42 | const cow = replacer(plainText, {
43 | thoughts: '||',
44 | eyes: 'oo',
45 | tongue: 'U ',
46 | });
47 | t.equal(cow, expected);
48 | });
49 |
--------------------------------------------------------------------------------
/cows/yasuna_14.cow:
--------------------------------------------------------------------------------
1 | #
2 | # くっ、くぅー!
3 | #
4 | $the_cow = <イ:|:/::ノ: :/ : {{ /ノ
29 | EOC
30 |
--------------------------------------------------------------------------------
/cows/personality-sphere.cow:
--------------------------------------------------------------------------------
1 | # Personality Sphere from Portal/Portal 2
2 | # via http://pastebin.com/1AZwKrKp
3 | $the_cow = < \\ _ -~ `. ^-` ^-_
19 | ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
20 | /.-~
21 | EOC
22 |
--------------------------------------------------------------------------------
/cows/hypno.cow:
--------------------------------------------------------------------------------
1 | $the_cow =<<"EOC"
2 | $thoughts
3 | ___ _--_
4 | / - / \\
5 | ( $eyes \\ ( $eyes )
6 | | $eyes _;\\-/| $eyes _|
7 | \\___/######\\___/\\
8 | /##############\\
9 | / ###### ## #|
10 | / ##@##@## |
11 | / ###### ## \\
12 | <______-------___\\ . //_
13 | | ____ | | //# \\__~__
14 | \\ $tongue \\ //### \\ \\
15 | | /\' ## ## ##\\ __--~--_
16 | \\_________- /\\ ) ^ ##|--########\\
17 | /--~-_\\________/_ | #@##|#######Y##|
18 | | \\ ` /| /O/ ( ### \') ##/######/###/
19 | \\ \\ | | -- | ### /LLLLL--###/
20 | \\_ \\/ | \\_ \\ ) /####_____--
21 | ___ / \\ / | _-####\\
22 | (___/ -\\_________/ / -- |#####@@@@@@\'_
23 | (__\\_ __,) (.___ ,/ /##### `@@
24 | | -\\\\- //-// @@ @@@@@.
25 | | | \\\\_ _// // @\' \'@@.
26 | (.) \\_) / / // @@@
27 | (_) (_\'
28 | EOC
29 |
--------------------------------------------------------------------------------
/cows/companion-cube.cow:
--------------------------------------------------------------------------------
1 | # Companion Cube from Portal
2 | # via http://pastebin.com/1AZwKrKp
3 | $the_cow = <> r -=≦{{/ /ニ=_
22 | \\ 人 | /ィ| /レ/__ ノニ-、
23 | \ \\|/ Xノ / / 入//⌒Yハ
24 | \\ /し |`---' // / \\ニニニノ|
25 | \/ / \\ --ア | | | _]|
26 | | / \\/\\/ | | |___|
27 | r勺 |_| | | | ||
28 | |`7 | | | | | |
29 | EOC
30 |
--------------------------------------------------------------------------------
/cows/yasuna_02.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## やすなちゃん
3 | ##
4 | ##
5 | $the_cow = <了、. v 〔:/|:/ レ'
21 | _ . -/: ,K:::>、/: :ト._
22 | |: :く_.:|/:〈 /: :}: /~ヽ
23 | r「「「h,>:|: <: |'::ソ::<¨.:n「「「!、
24 | ゝ__ノ /: : |::ヽ |::/: /: :.ヘ__ノ}
25 | |  ̄ |,': :/: : ヽ:' / : :.:|  ̄ |:}
26 | EOC
27 |
--------------------------------------------------------------------------------
/cows/ghostbusters.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## Ghostbusters!
3 | ##
4 | $the_cow = <
16 | ---___ XXX__/ XXXXXX \\__ /
17 | \\- --__/ ___/\\ XXXXXX / ___--/=
18 | \\-\\ ___/ XXXXXX '--- XXXXXX
19 | \\-\\/XXX\\ XXXXXX /XXXXX
20 | \\XXXXXXXXX \\ /XXXXX/
21 | \\XXXXXX > _/XXXXX/
22 | \\XXXXX--__/ __-- XXXX/
23 | -XXXXXXXX--------------- XXXXXX-
24 | \\XXXXXXXXXXXXXXXXXXXXXXXXXX/
25 | ""VXXXXXXXXXXXXXXXXXXV""
26 | EOC
27 |
--------------------------------------------------------------------------------
/cows/maze-runner.cow:
--------------------------------------------------------------------------------
1 | # maze-runner.cow
2 | #
3 | # a guy running through an ASCII maze
4 | # found at http://pip.readthedocs.org/en/user_builds/pip/rtd-builds/latest/installing/
5 | #
6 | $the_cow = <
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy of
7 | this software and associated documentation files (the "Software"), to deal in
8 | the Software without restriction, including without limitation the rights to
9 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
10 | of the Software, and to permit persons to whom the Software is furnished to do
11 | so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
23 |
24 | ====
25 |
26 | The original idea of cowsay come from [Tony Monroe](http://www.nog.net/~tony/) - [cowsay](https://github.com/schacon/cowsay)
27 |
--------------------------------------------------------------------------------
/cows/dragon-and-cow.cow:
--------------------------------------------------------------------------------
1 | ##
2 | ## A dragon smiting a cow, possible credit to kube@csua.berkeley.edu
3 | ##
4 | $the_cow = <____) >___ ^\\_\\_\\_\\_\\_\\_\\)
24 | ^^^//\\\\_^^//\\\\_^ ^(\\_\\_\\_\\)
25 | ^^^ ^^ ^^^ ^
26 | EOC
27 |
--------------------------------------------------------------------------------
/cows/awesome-face.cow:
--------------------------------------------------------------------------------
1 | # awesome face
2 | # via http://pastebin.com/1AZwKrKp
3 | $the_cow = <= 4"
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/cows/squid.cow:
--------------------------------------------------------------------------------
1 | #
2 | # これスプラトゥーン感あるね
3 | #
4 |
5 | $the_cow = < \\ /
16 | <>_ \\__/ \\____/ <>_
17 | __/"""\\ (\\) ) (____) (____) (\\) ) __/"""\\
18 | WWWWWW ]___ 0 } \\__/ | | | | \\__/ ]___ 0 } WWWWWW
19 | | | / } (____) | | |__| (____) / } | |
20 | | | /~ } | | |__| / \\ | | /~ } | |
21 | |__| \\____/ |__| /____\\ (______) |__| \\____/ |__|
22 | /____\\ /____\\ /____\\ (______) (________) /____\\ /____\\ /____\\
23 | (______) (______) (______) (________) /________\\ (______) (______) (______)
24 |
25 | __ __ __ __ __ __ __ __
26 | ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )
27 | || || || || || || || ||
28 | /__\\ /__\\ /__\\ /__\\ /__\\ /__\\ /__\\ /__\\
29 | (____) (____) (____) (____) (____) (____) (____) (____)
30 | EOC
31 |
--------------------------------------------------------------------------------
/test/balloon.js:
--------------------------------------------------------------------------------
1 | const test = require('tape');
2 | const balloon = require('../lib/balloon');
3 |
4 | test('single line - nowrap', (t) => {
5 | t.plan(2);
6 |
7 | t.equal(' _____\n< Hi! >\n -----', balloon.say('Hi!'));
8 | t.equal(' _____\n( Hi! )\n -----', balloon.think('Hi!'));
9 | });
10 |
11 | test('single line - wrap', (t) => {
12 | t.plan(2);
13 |
14 | t.equal(' _____\n< Yes >\n -----', balloon.say('Yes', 10));
15 | t.equal(' _____\n( Yes )\n -----', balloon.think('Yes', 10));
16 | });
17 |
18 | test('two lines - nowrap', (t) => {
19 | t.plan(2);
20 | t.equal([
21 | ' _____',
22 | '/ AB \\',
23 | '\\ CDE /',
24 | ' -----',
25 | ].join('\n'), balloon.say('AB\nCDE'));
26 | t.equal([
27 | ' _____',
28 | '( AB )',
29 | '( CDE )',
30 | ' -----',
31 | ].join('\n'), balloon.think('AB\nCDE'));
32 | });
33 |
34 | test('multiple lines - nowrap', (t) => {
35 | t.plan(2);
36 |
37 | t.equal([
38 | ' _________',
39 | '/ AB \\',
40 | '| CDE |',
41 | '\\ QWE RTY /',
42 | ' ---------',
43 | ].join('\n'), balloon.say('AB\nCDE\nQWE RTY'));
44 | t.equal([
45 | ' _________',
46 | '( AB )',
47 | '( CDE )',
48 | '( QWE RTY )',
49 | ' ---------',
50 | ].join('\n'), balloon.think('AB\nCDE\nQWE RTY'));
51 | });
52 |
53 | test('multiple lines - wrap to max lenght', (t) => {
54 | t.plan(2);
55 |
56 | t.equal([
57 | ' ______',
58 | '/ ONE \\',
59 | '| TWO |',
60 | '| THRE |',
61 | '\\ E /',
62 | ' ------',
63 | ].join('\n'), balloon.say('ONE\nTWO THREE', 4));
64 | t.equal([
65 | ' ______',
66 | '( ONE )',
67 | '( TWO )',
68 | '( THRE )',
69 | '( E )',
70 | ' ------',
71 | ].join('\n'), balloon.think('ONE\nTWO THREE', 4));
72 | });
73 |
--------------------------------------------------------------------------------
/cows/periodic-table.cow:
--------------------------------------------------------------------------------
1 | $the_cow = <----''. _ __ /
31 | .' /"' | "' '_
32 | /_|.-'\\ ,". '.'`__'-( \\
33 | / ,"'"\\,' `/ `-.|" m
34 | EOC
35 |
--------------------------------------------------------------------------------
/cows/ackbar.cow:
--------------------------------------------------------------------------------
1 | # Admiral Ackbar
2 | #
3 | # based on 'ack --bar' from http://beyondgrep.com/
4 | $the_cow = <-,------,,--------,----------\'
38 | ` `,;\' ~~~ ,\'\\######_/\'####### . \'
39 | \'\'~`\'\'\'\' - .\'/; - \' -Catalyst
40 | EOC
41 |
--------------------------------------------------------------------------------
/cli.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | const yargs = require('yargs')
3 | .usage(`
4 | Usage: $0 [-e eye_string] [-f cowfile] [-h] [-l] [-n] [-T tongue_string] [-W column] [-bdgpstwy] text
5 |
6 | If any command-line arguments are left over after all switches have been processed, they become the cow's message.
7 |
8 | If the program is invoked as cowthink then the cow will think its message instead of saying it.
9 | `)
10 | .options({
11 | e: {
12 | default: 'oo',
13 | },
14 | T: {
15 | default: ' ',
16 | },
17 | W: {
18 | default: 40,
19 | type: 'number',
20 | },
21 | f: {
22 | default: 'default',
23 | },
24 | think: {
25 | type: 'boolean',
26 | },
27 | })
28 | .describe({
29 | b: 'Mode: Borg',
30 | d: 'Mode: Dead',
31 | g: 'Mode: Greedy',
32 | p: 'Mode: Paranoia',
33 | s: 'Mode: Stoned',
34 | t: 'Mode: Tired',
35 | w: 'Mode: Wired',
36 | y: 'Mode: Youthful',
37 | e: "Select the appearance of the cow's eyes.",
38 | T:
39 | 'The tongue is configurable similarly to the eyes through -T and tongue_string.',
40 | h: 'Display this help message',
41 | n: 'If it is specified, the given message will not be word-wrapped.',
42 | W:
43 | 'Specifies roughly where the message should be wrapped. The default is equivalent to -W 40 i.e. wrap words at or before the 40th column.',
44 | f:
45 | "Specifies a cow picture file (''cowfile'') to use. It can be either a path to a cow file or the name of one of cows included in the package.",
46 | r: 'Select a random cow',
47 | l: 'List all cowfiles included in this package.',
48 | think: 'Think the message instead of saying it aloud.',
49 | })
50 | .boolean(['b', 'd', 'g', 'p', 's', 't', 'w', 'y', 'n', 'h', 'r', 'l'])
51 | .help()
52 | .alias('h', 'help');
53 |
54 | const argv = yargs.argv;
55 |
56 | if (argv.l) {
57 | listCows();
58 | } else if (argv._.length) {
59 | say();
60 | } else {
61 | require('get-stdin')().then((data) => {
62 | if (data) {
63 | argv._ = [require('strip-final-newline')(data)];
64 | say();
65 | } else {
66 | yargs.showHelp();
67 | }
68 | });
69 | }
70 |
71 | function say() {
72 | const module = require('./index');
73 | const think = /think$/.test(argv['$0']) || argv.think;
74 |
75 | console.log(think ? module.think(argv) : module.say(argv));
76 | }
77 |
78 | function listCows() {
79 | require('./index').list((err, list) => {
80 | if (err) throw new Error(err);
81 | console.log(list.join(' '));
82 | });
83 | }
84 |
--------------------------------------------------------------------------------
/lib/balloon.js:
--------------------------------------------------------------------------------
1 | var stringWidth = require("string-width");
2 |
3 | exports.say = function (text, wrap) {
4 | var delimiters = {
5 | first : ["/", "\\"],
6 | middle : ["|", "|"],
7 | last : ["\\", "/"],
8 | only : ["<", ">"]
9 | };
10 |
11 | return format(text, wrap, delimiters);
12 | }
13 |
14 | exports.think = function (text, wrap) {
15 | var delimiters = {
16 | first : ["(", ")"],
17 | middle : ["(", ")"],
18 | last : ["(", ")"],
19 | only : ["(", ")"]
20 | };
21 |
22 | return format(text, wrap, delimiters);
23 | }
24 |
25 | function format (text, wrap, delimiters) {
26 | var lines = split(text, wrap);
27 | var maxLength = max(lines);
28 |
29 | var balloon;
30 | if (lines.length === 1) {
31 | balloon = [
32 | " " + top(maxLength),
33 | delimiters.only[0] + " " + lines[0] + " " + delimiters.only[1],
34 | " " + bottom(maxLength)
35 | ];
36 | } else {
37 | balloon = [" " + top(maxLength)];
38 |
39 | for (var i = 0, len = lines.length; i < len; i += 1) {
40 | var delimiter;
41 |
42 | if (i === 0) {
43 | delimiter = delimiters.first;
44 | } else if (i === len - 1) {
45 | delimiter = delimiters.last;
46 | } else {
47 | delimiter = delimiters.middle;
48 | }
49 |
50 | balloon.push(delimiter[0] + " " + pad(lines[i], maxLength) + " " + delimiter[1]);
51 | }
52 |
53 | balloon.push(" " + bottom(maxLength));
54 | }
55 |
56 | return balloon.join("\n");
57 | }
58 |
59 | function split (text, wrap) {
60 | text = text.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, '').replace(/\t/g, ' ');
61 |
62 | var lines = [];
63 | if (!wrap) {
64 | lines = text.split("\n");
65 | } else {
66 | var start = 0;
67 | while (start < text.length) {
68 | var nextNewLine = text.indexOf("\n", start);
69 |
70 | var wrapAt = Math.min(start + wrap, nextNewLine === -1 ? text.length : nextNewLine);
71 |
72 | lines.push(text.substring(start, wrapAt));
73 | start = wrapAt;
74 |
75 | // Ignore next new line
76 | if (text.charAt(start) === "\n") {
77 | start += 1;
78 | }
79 | }
80 | }
81 |
82 | return lines;
83 | }
84 |
85 | function max (lines) {
86 | var max = 0;
87 | for (var i = 0, len = lines.length; i < len; i += 1) {
88 | if (stringWidth(lines[i]) > max) {
89 | max = stringWidth(lines[i]);
90 | }
91 | }
92 |
93 | return max;
94 | }
95 |
96 | function pad (text, length) {
97 | return text + (new Array(length - stringWidth(text) + 1)).join(" ");
98 | }
99 |
100 | function top (length) {
101 | return new Array(length + 3).join("_");
102 | }
103 |
104 | function bottom (length) {
105 | return new Array(length + 3).join("-");
106 | }
107 |
--------------------------------------------------------------------------------
/cows/golden-eagle.cow:
--------------------------------------------------------------------------------
1 | # Golden Eagle (Marquette University mascot)
2 | #
3 | $the_cow = <---'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ | | / )
15 | _ ////////////// |__| )\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ | |/ /
16 | / `. _ ////////.-' >\\ <-._.--.\\\\\\\\\\\\\\\\\\ _|__ /_
17 | ( \\ . .' ) /////// ( .- ( )() ( )_)\\\\\\\\\\\\\\ / __)-' )
18 | `- | |/ //// ( ) ( )|--'() ( ) \\\\\\\\\\\\\\\\ \\ `(.-')
19 | .---/ _() /// ( ) () | /() ( ) \\\\\\\\\\\\ > ._>-'
20 | ()+8 8 | | ( )( ) | /( ) ( ) \\ / \\/
21 | ()+8 8/-()__ / ( )( ) \\/ ( ) ( )\\ \\ /\\ /
22 | |8 8| `. | () ( ).--.( ) ( )-\\ \\ / |
23 | ()+||||-() (_/ _/ /| ()/ || \\ ) ()()\\ \\__/ /
24 | .-`|||| /\\\\ / / ()|/ \\ () \\ `. /| |
25 | (_ |||| .' _/-/ ()\\/||\\/() \\-. \\ /
26 | ||( \\_ .' ( )/ ( ) `--' ( ) > ) `. /
27 | .--|_|\\_ \\ .' .'( )_ ( )-.___.-( ) ( ) ""
28 | `.__)-.( /.'\\ .' ( )'_)-.______( ).-')'
29 | (___)| \\ .-' `--'`-._.---._.(_))-'
30 | (__)|| +-)' | /_.--.\\ |
31 | (__)||-' `._|`-' ) ) _|
32 | ||||| | `.`-'.'--' /
33 | ||||| .' | | .\\|
34 | ||||| .' _.-|_| \\
35 | ||||| / .'.-' \\\\ |
36 | |||||| .' / \\ \\
37 | ||||| / .' \\ \\
38 | ||||| .' / | |
39 | _|||||----./ .' \\ \\
40 | .-' ||||| `/ / \\ |
41 | .' ||||| ( / | |
42 | / ||||| | |\\ \\ |
43 | | .'|||||. | || | )
44 | \\ | |||||\\ | |/ | \\
45 | \\ | |||||| | | / |
46 | | `.||||' / | | \\
47 | | |||| | \\ | |
48 | / ||||| | |\\ / |
49 | / |||||_/ | \\ | \\
50 | / ------'| | | | |
51 | | |___.---| \\ | / |
52 | | / | | | \\
53 | | | \\/ | |
54 | | / | | |
55 | \\ | | | |
56 | `. / \\ | \\
57 | `--.___`-_ |_ | |
58 | .-.__.-''-,_ - | \\_'
59 | <`. '.-//|-/`` (_) _.-'
60 | `._-.____.-'.| / '//, ,\\.-'`` |--.
61 | `-.____.' |__/ '''\\ -'/ |
62 | `. _.// |
63 | `-.__.-'
64 |
65 | VK
66 | EOC
67 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | var balloon = require("./lib/balloon");
2 | var cows = require("./lib/cows");
3 | var faces = require("./lib/faces");
4 |
5 | /**
6 | * @param options
7 | * ## Face :
8 | * Either choose a mode (set the value as true) **_or_**
9 | * set your own defined eyes and tongue to `e` and `T`.
10 | * - ### `e` : eyes
11 | * - ### `T` : tongue
12 | *
13 | * ## Cow :
14 | * Either specify a cow name (e.g. "fox") **_or_**
15 | * set the value of `r` to true which selects a random cow.
16 | * - ### `r` : random selection
17 | * - ### `f` : cow name - from `cows` folder
18 | *
19 | * ## Modes :
20 | * Modes are just ready-to-use faces, here's their list:
21 | * - #### `b` : borg
22 | * - #### `d` : dead
23 | * - #### `g` : greedy
24 | * - #### `p` : paranoia
25 | * - #### `s` : stoned
26 | * - #### `t` : tired
27 | * - #### `w` : wired
28 | * - #### `y` : youthful
29 | *
30 | * @example
31 | * ```
32 | * // custom cow and face
33 | * cowsay.say({
34 | * text: 'Hello world!',
35 | * e: '^^', // eyes
36 | * T: 'U ', // tongue
37 | * f: 'USA' // name of the cow from `cows` folder
38 | * })
39 | *
40 | * // using a random cow
41 | * cowsay.say({
42 | * text: 'Hello world!',
43 | * e: 'xx', // eyes
44 | * r: true, // random mode - use a random cow.
45 | * })
46 | *
47 | * // using a mode
48 | * cowsay.say({
49 | * text: 'Hello world!',
50 | * y: true, // using y mode - youthful mode
51 | * })
52 | * ```
53 | *
54 | * @returns {string} compiled cow
55 | */
56 | exports.say = function (options) {
57 | return doIt(options, true);
58 | };
59 |
60 | /**
61 | * @param options
62 | * ## Face :
63 | * Either choose a mode (set the value as true) **_or_**
64 | * set your own defined eyes and tongue to `e` and `T`.
65 | * - ### `e` : eyes
66 | * - ### `T` : tongue
67 | *
68 | * ## Cow :
69 | * Either specify a cow name (e.g. "fox") **_or_**
70 | * set the value of `r` to true which selects a random cow.
71 | * - ### `r` : random selection
72 | * - ### `f` : cow name - from `cows` folder
73 | *
74 | * ## Modes :
75 | * Modes are just ready-to-use faces, here's their list:
76 | * - #### `b` : borg
77 | * - #### `d` : dead
78 | * - #### `g` : greedy
79 | * - #### `p` : paranoia
80 | * - #### `s` : stoned
81 | * - #### `t` : tired
82 | * - #### `w` : wired
83 | * - #### `y` : youthful
84 | *
85 | * @example
86 | * ```
87 | * // custom cow and face
88 | * cowsay.think({
89 | * text: 'Hello world!',
90 | * e: '^^', // eyes
91 | * T: 'U ', // tongue
92 | * f: 'USA' // name of the cow from `cows` folder
93 | * })
94 | *
95 | * // using a random cow
96 | * cowsay.think({
97 | * text: 'Hello world!',
98 | * e: 'xx', // eyes
99 | * r: true, // random mode - use a random cow.
100 | * })
101 | *
102 | * // using a mode
103 | * cowsay.think({
104 | * text: 'Hello world!',
105 | * y: true, // using y mode - youthful mode
106 | * })
107 | * ```
108 | *
109 | * @returns {string} compiled cow
110 | */
111 | exports.think = function (options) {
112 | return doIt(options, false);
113 | };
114 |
115 | /**
116 | * @example
117 | * ```
118 | * function get_cows(error, cow_names) {
119 | * if (error) {
120 | * console.log(error);
121 | * }
122 | * else if (cow_names) {
123 | * console.log(`Number of cows available: ${cow_names.length}`);
124 | * }
125 | * }
126 | *
127 | * cowsay.list(get_cows);
128 | * ```
129 | * @param callback
130 | * @returns {Promise} promise
131 | */
132 | exports.list = cows.list;
133 |
134 | function doIt (options, sayAloud) {
135 | var cowFile;
136 |
137 | if (options.r) {
138 | var cowsList = cows.listSync();
139 | cowFile = cowsList[Math.floor(Math.random() * cowsList.length)];
140 | } else {
141 | cowFile = options.f || "default";
142 | }
143 |
144 | var cow = cows.get(cowFile);
145 | var face = faces(options);
146 | face.thoughts = sayAloud ? "\\" : "o";
147 |
148 | var action = sayAloud ? "say" : "think";
149 | return balloon[action](options.text || options._.join(" "), options.n ? null : options.W) + "\n" + cow(face);
150 | }
151 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cowsay
2 |
3 | ````
4 | __________________
5 | < srsly dude, why? >
6 | ------------------
7 | \ ^__^
8 | \ (oo)\_______
9 | (__)\ )\/\
10 | ||----w |
11 | || ||
12 | ````
13 |
14 | cowsay is a configurable talking cow, originally written in Perl by [Tony Monroe](https://github.com/tnalpgge/rank-amateur-cowsay)
15 |
16 | This project is a translation in JavaScript of the original program and an attempt to bring the same silliness to node.js.
17 |
18 | ## Install
19 |
20 | npm install -g cowsay
21 |
22 | ## Usage
23 |
24 | cowsay JavaScript FTW!
25 |
26 | or
27 |
28 | cowthink node.js is cool
29 |
30 | It acts in the same way as the original cowsay, so consult `cowsay(1)` or run `cowsay -h`
31 |
32 | ````
33 | ________
34 | < indeed >
35 | --------
36 | \
37 | \
38 | .::!!!!!!!:.
39 | .!!!!!:. .:!!!!!!!!!!!!
40 | ~~~~!!!!!!. .:!!!!!!!!!UWWW$$$
41 | :$$NWX!!: .:!!!!!!XUWW$$$$$$$$$P
42 | $$$$$##WX!: .): void {
100 | if (error) {
101 | console.log(`Error getting cow names: ${error.message}`)
102 | }
103 | else if (cow_names) {
104 | console.log(`Number of cows available: ${cow_names.length}`);
105 | }
106 | }
107 |
108 | cowsay.list(get_cows);
109 | ```
110 |
111 | importing the `IOptions` interface directly:
112 | ```ts
113 | import { IOptions } from "cowsay" // optional
114 |
115 | let opts: IOptions = {
116 | text: "Hello from TypeScript!",
117 | e: '^^',
118 | r: true,
119 | };
120 |
121 | console.log(cowsay.say(opts));
122 | ```
123 |
124 |
125 | ## Pipe from standard input
126 |
127 | echo please repeat | cowsay
128 |
129 | ## Usage in the browser
130 |
131 | cowsay works in your browser too with rollup / webpack / browserify / you name it.
132 |
133 | ```js
134 | import { say } from 'cowsay';
135 |
136 | console.log(say({ text: 'grazing in the browser' }));
137 | ```
138 |
139 | You can customize the cow by importing the relevant one
140 |
141 | ```js
142 | import { think, SQUIRREL } from 'cowsay';
143 |
144 | console.log(think({
145 | text: 'grazing in the browser',
146 | cow: SQUIRREL,
147 | eyes: 'pp',
148 | tongue: ';;',
149 | }));
150 | ```
151 |
152 | All cows are included in the bundle, but you can use rollup / webpack tree-shake feature to reduce the final bundle size.
153 |
154 | ### Browser options
155 |
156 | ```js
157 | say({
158 | text: 'hello',
159 | cow: '', // Template for a cow, get inspiration from `./cows`
160 | eyes: 'oo', // Select the appearance of the cow's eyes, equivalent to cowsay -e
161 | tongue: 'L|', // The tongue is configurable similarly to the eyes through -T and tongue_string, equivalent to cowsay -T
162 | wrap: false, // If it is specified, the given message will not be word-wrapped. equivalent to cowsay -n
163 | wrapLength: 40, // Specifies roughly where the message should be wrapped. equivalent to cowsay -W
164 | mode: 'b', // One of "b", "d", "g", "p", "s", "t", "w", "y"
165 | });
166 | ```
167 |
--------------------------------------------------------------------------------
/index.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @property text : text
3 | *
4 | * @Cow
5 | * @property f : cow name
6 | * @property r : random selection
7 | *
8 | * @Face
9 | * @property T : Tongue
10 | * @property e : eyes
11 | *
12 | * @Modes
13 | * @property b : borg
14 | * @property d : dead
15 | * @property g : greedy
16 | * @property p : paranoia
17 | * @property s : stoned
18 | * @property t : tired
19 | * @property w : wired
20 | * @property y : youthful
21 | */
22 | export interface IOptions {
23 | text: string,
24 | // cow
25 | f?: string, // cow name
26 | r?: boolean, // random mode
27 | // face
28 | e?: string, // eyes
29 | T?: string, // tongue
30 | // modes
31 | b?: boolean, // borg
32 | d?: boolean, // dead
33 | g?: boolean, // greedy
34 | p?: boolean, // paranoia
35 | s?: boolean, // stoned
36 | t?: boolean, // tired
37 | w?: boolean, // wired
38 | y?: boolean, // youthful
39 | }
40 |
41 | type callback_type = (error: NodeJS.ErrnoException, cow_names: string[]) => void;
42 |
43 | /**
44 | * @param callback
45 | * @returns a list of cow names from the cows folder without the .cow extension.
46 | * @example
47 | * ```
48 | * function get_cows(error: NodeJS.ErrnoException, cow_names: Array): void {
49 | * if (error) {
50 | * console.log(`Error getting cow names: ${error.message}`);
51 | * }
52 | * else if (cow_names) {
53 | * console.log(`Number of cows available: ${cow_names.length}`);
54 | * }
55 | * }
56 | *
57 | * cowsay.list(get_cows);
58 | * ```
59 | */
60 | export function list(callback: callback_type): Promise;
61 |
62 | /**
63 | * @param options
64 | * ## Face :
65 | * Either choose a mode (set the value as true) **_or_**
66 | * set your own defined eyes and tongue to `e` and `T`.
67 | * - ### `e` : eyes
68 | * - ### `T` : tongue
69 | *
70 | * ## Cow :
71 | * Either specify a cow name (e.g. "fox") **_or_**
72 | * set the value of `r` to true which selects a random cow.
73 | * - ### `r` : random selection
74 | * - ### `f` : cow name - from `cows` folder
75 | *
76 | * ## Modes :
77 | * Modes are just ready-to-use faces, here's their list:
78 | * - #### `b` : borg
79 | * - #### `d` : dead
80 | * - #### `g` : greedy
81 | * - #### `p` : paranoia
82 | * - #### `s` : stoned
83 | * - #### `t` : tired
84 | * - #### `w` : wired
85 | * - #### `y` : youthful
86 | *
87 | * @example
88 | * ```
89 | * // custom cow and face
90 | * cowsay.say({
91 | * text: 'Hello world!',
92 | * e: '^^', // eyes
93 | * T: 'U ', // tongue
94 | * f: 'USA' // name of the cow from `cows` folder
95 | * })
96 | *
97 | * // using a random cow
98 | * cowsay.say({
99 | * text: 'Hello world!',
100 | * e: 'xx', // eyes
101 | * r: true, // random mode - use a random cow.
102 | * })
103 | *
104 | * // using a mode
105 | * cowsay.say({
106 | * text: 'Hello world!',
107 | * y: true, // using y mode - youthful mode
108 | * })
109 | * ```
110 | */
111 | export function say(options: IOptions): string;
112 |
113 | /**
114 | * @param options
115 | * ## Face :
116 | * Either choose a mode (set the value as true) **_or_**
117 | * set your own defined eyes and tongue to `e` and `T`.
118 | * - ### `e` : eyes
119 | * - ### `T` : tongue
120 | *
121 | * ## Cow :
122 | * Either specify a cow name (e.g. "fox") **_or_**
123 | * set the value of `r` to true which selects a random cow.
124 | * - ### `r` : random selection
125 | * - ### `f` : cow name - from `cows` folder
126 | *
127 | * ## Modes :
128 | * Modes are just ready-to-use faces, here's their list:
129 | * - #### `b` : borg
130 | * - #### `d` : dead
131 | * - #### `g` : greedy
132 | * - #### `p` : paranoia
133 | * - #### `s` : stoned
134 | * - #### `t` : tired
135 | * - #### `w` : youthful
136 | * - #### `y` : wired
137 | *
138 | * @example
139 | * ```
140 | * // custom cow and face
141 | * cowsay.think({
142 | * text: 'Hello world!',
143 | * e: '^^', // eyes
144 | * T: 'U ', // tongue
145 | * f: 'USA' // name of the cow from `cows` folder
146 | * })
147 | *
148 | * // using a random cow
149 | * cowsay.think({
150 | * text: 'Hello world!',
151 | * e: 'xx', // eyes
152 | * r: true, // random mode - use a random cow.
153 | * })
154 | *
155 | * // using a mode
156 | * cowsay.think({
157 | * text: 'Hello world!',
158 | * y: true, // using y mode - youthful mode
159 | * })
160 | * ```
161 | */
162 | export function think(options: IOptions): string;
163 |
--------------------------------------------------------------------------------
/cows/mona-lisa.cow:
--------------------------------------------------------------------------------
1 | # Mona Lisa
2 | #
3 | # from http://www.heartnsoul.com/ascii_art/mona_lisa_ascii.htm
4 | $the_cow = <'''''' !!!!!
33 | !!!!! ?\$\$\$\$\$\$\$\$\$\$\$\$??\$c`\$\$\$\$\$\$\$\$\$\$\$?>' `!!!!
34 | !!!!! `?\$\$\$\$\$\$I7?"" ,\$\$\$\$\$\$\$\$\$?>>' !!!!
35 | !!!!!. <\$\$\$\$\$\$c. ,d\$\$?\$\$\$\$\$F>>'' `!!!
36 | !!!!!! '' `!!!
37 | !!!!!! \$\$\$hccccccccc= cc\$\$\$\$\$\$\$>>' !!!
38 | !!!!! `?\$\$\$\$\$\$F"""" `"\$\$\$\$\$>>>'' `!!
39 | !!!!! "?\$\$\$\$\$cccccc\$\$\$\$??>>>>' !!
40 | !!!!> "\$\$\$\$\$\$\$\$\$\$\$\$\$F>>>>'' `!
41 | !!!!! "\$\$\$\$\$\$\$\$???>''' !
42 | !!!!!> `""""" `
43 | !!!!!!; . `
44 | !!!!!!! ?h.
45 | !!!!!!!! \$\$c,
46 | !!!!!!!!> ?\$\$\$h. .,c
47 | !!!!!!!!! \$\$\$\$\$\$\$\$\$hc,.,,cc\$\$\$\$\$
48 | !!!!!!!!! .,zcc\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$
49 | !!!!!!!!! .z\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$
50 | !!!!!!!!! ,d\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$ .
51 | !!!!!!!!! ,d\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$ !!
52 | !!!!!!!!! ,d\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$ ,!'
53 | !!!!!!!!> c\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$. !'
54 | !!!!!!'' ,d\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$> '
55 | !!!'' z\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$>
56 | !' ,\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$> ..
57 | z\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$' ;!!!!''`
58 | \$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$F ,;;!'`' .''
59 | <\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$> ,;'`' ,;
60 | `\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$F -' ,;!!'
61 | "?\$\$\$\$\$\$\$\$\$\$?\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$F . ""??\$\$\$?C3\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$"" ;!''' !!!
63 | ;!!!!;, `"''""????\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$\$"" ,;-'' ',!
64 | ;!!!!;,;, .. ' . ' '
66 | !!' ,;!!! ;'`!!!!!!!!;!!!!!; . >' .'' ;
67 | !!' ;!!'!';! !! !!!!!!!!!!!!! ' -'
68 | ;! ;>
75 | !' ; !! '
76 | ' ;! > ! '
77 |
78 | EOC
79 |
--------------------------------------------------------------------------------
/cows/pterodactyl.cow:
--------------------------------------------------------------------------------
1 | # pterodactyl.cow
2 | #
3 | # a pterodactyl with its mouth open
4 | #
5 | $the_cow = < /
26 | (==> /
27 | (=> /
28 | -_ //. /
29 | \\\\-_ // . /
30 | \\ \\_-_ // . /
31 | \\_ \\_--_ // . . . /
32 | \\_ \\_ -_ // /
33 | \\_ \\_ (O)-___ // /
34 | \\ _\\ __ --__ / /
35 | _/ \\ ----__--____ // /
36 | _/ _/ \\ ------- // /
37 | _/ __/ \\\\ \\\\ / /
38 | _/ _/ \\\\ \\\\ // /
39 | -__/ \\\\ \\\\\\ // /
40 | \\\\ \\\\\\\\\\\\\\\\\\// - /
41 | \\\\ _/ - /
42 | \\\\ - \\
43 | \\\\\\ - \\
44 | \\\\ - \\
45 | \\\\\\ \\--__
46 | | \\\\ \\__________
47 | | \\\\\\\\ ___ _________-\\\\
48 | | \\\\\\\\\\ \\--__/____
49 | | \\\\\\\\________---\\- ______-----
50 | | / \\-- \\_______
51 | | / \\-_________\\
52 | \\ / \\\\
53 | \\ ./
54 | \\ . /
55 | \\ . /
56 | \\ . //
57 | \\ /
58 | |__ /
59 | \\== /
60 | \\\\ \\
61 | \\\\ . \\
62 | \\\\ . . \\
63 | \\ .\\
64 | \\\\ \\
65 | \\ \\
66 | \\\\ \\
67 | \\\\ \\
68 | \\ \\--
69 | \\\\ \\
70 | \\\\ \\\\\\\\
71 | \\\\\\\\_________\\\\\\
72 | EOC
73 |
74 |
--------------------------------------------------------------------------------
/cows/weeping-angel.cow:
--------------------------------------------------------------------------------
1 | #
2 | # Weeping Angel
3 | #
4 | # Don't blink!
5 | #
6 | # based on design found at http://shirt.woot.com/derby/entry/73182/dont-blink
7 | # and http://infinitywave.deviantart.com/art/Don-t-Blink-tee-391963389
8 | #
9 | $the_cow = <I?+,-X:X.
32 | :,7.. , ...8X:XX. XX .X ... . .. .8XX:,-ZXX. .7IXXX . .+ODC8:\$II7:ZXX:
33 | .,=. ..?. ,8X\$XX= .XX.. ..+.. .-..%77.XXX.\$XX . . *IXXXX :78DX8D08DN7-XXX.
34 | .:.. *-...-XXXXX. .,XX.. 8,...O..VVVVV XX:XX . ZOX:XI . =ID0X0XODOX:+\$XX..
35 | .: .? . ,IX:X:X, .:X=. .\$ .N VV ....VVM+XX. .=ZOXXX. . IDO0X0X0D0X:0?XX?.
36 | , ... :IXXXXXX- .....O. 7- O...,I.Z.X.X:X, .7\$:\$\$.. .OCO0X\$%DCOXXD\$7X>.
37 | - ... ?.. =+X:X:XXDX:XX+ .. . . ., .I. .VVVVV XX\$.. :.\$XXX +DCXXX\$+%\$D8ZXXDXO+
38 | , .*... .%7...,,,%%0%XXXXXXXXXXO-D\$7J0\$: ..-:.. ...W,XXXXX,-IXX .:7XXXX .CD88DCW..\$DX:X:XX?%
39 | .,.-%,-. . ?7. .. ..+%8XX:X:XX:X:X:NO\$DX..,XXX.. . ..XXDXXI\$XX . .-O:XX -CDOI8XX*.*DX:X:X7=%
40 | .--.:\$.+ . .I% .:7XXXXXXXXXX . . .... ..*.-XDXX.. .-:XXX . .=78CD8XX+ +IXXX>..Z
41 | ?=:=?.+. .XX.. ...?8:XXXX-. . .:-Z+XX- ....... . .+,DXX. .7.,\$88DXX: .:OD%..%O.
42 | ?+IO--+ -XX. . .-7O. . .\$\$.. .7.M.\$XXX:... .++DZM. ..I\$ .\$8DX7.,.. .. IXX..
43 | +??D,\$\$ .X8. . .* . . .. ...*XX X,X:X-: ON?...,XIO .-O\$. .-. =O,. . OXXX-.
44 | .:?ID,Z7 .. ....:I-.. . ... .+.. :7 XXD. XX,:...+XXX-.,*.. .=\$?.. . .:O8.\$D7 .IXXX?
45 | ,+78:Z7 . ,*. ..*. ..... .....D . ?+. .:+. -X+.XX7.8XZ.*. ..+7XX, ..*+:. ... ,8:+.-D0..7XXX7.
46 | .,=\$8I88 ,7 :XD-. .... +.:,...--|.. .. 7% CXZ..XX,.*. ....+XX+. ..:. .\$O..DO, 8D+.-XXXX,
47 | :-\$X0XX ..,*. -DX,... 7... . .X...::::::-O... . .. .7XX... .,XX. 78-+:.. .OZ.-87 CD\$.7XXXX.
48 | .--7O0XI.. :-O:ZM8...-*O. -. :% .::-,,::..:,::::--*+I88XXXD....X:X:XX.7XXXXX: .8%7DO....-8O77DXXX,
49 | -=78XX. .**%XX . %7:..Z . 8. .:X7.::*,* :,,,::-:-*7\$DXX+.,.XXX?I+.7X:X:X.-X: .-%%8O . .8ODIDXXX,
50 | -=7IX8. .*87. ..\$O7-I\$.. -. .... .. ....:,:O:,::-: .7IDXX ..XX.. .:X:... XXXXX. ..=7+. .=0D7CXXX:
51 | .-+7IN.. . :..O\$7X, =. ..,. .. ... O..7.::. ?.XXX,. . .. .X:XZ08. . . ..\$D8%XXX:
52 | .-7II. .+%. :77:. .:.. . XD .- :... .:. . ..... .. .- ,X7...,X%.: . DO8XXX,
53 | ,I* , -?:..8XX. . ..... ... :XX...X .\$ , .?%: ,? ==7X7., . D..? . .XXXXX:%... ..%8DXX
54 | .. .. DOX .8XX..-..:==.: . . .X% .X .% .%. XXO DX.D?\$X? XX. . 7XI.XX.. :. .... ..-?,.
55 | ... .DXX..8XX .?8-Z\$?..*.* . X- .X..7 7\$..XXX.DX+XXXX, . . .XX. . . .XX... .*. .. ..
56 | .... :,:. IXX-.8XX .-XDXX- .++\$.. . X, .X.%,.+% .XXX.\$XIDDDD. .=. .. ...,8XO.. -XXXX .. *...., .....
57 | ,,\$. -:*. -DXO+8X\$ .,ZXD7, .:... .,X. .?.X- +-..XXX 7XOXXXXO. .. .NXXXXXXXXX 87%:XX.. -..I7\$:.,-.
58 | . .DX,.-I% ..\$XX8DXI *OI-.. .. .XX ..7X8.?, XXX.\$DX:XXID .XXXXXXX8.. .. .+XXXXX+ .., \$XX..:?..
59 | . .8X-.-%8...*DO\$XX7 ...... XX . XX .I.. XXD 7XX:XX?, ,.. .8D\$X:XXXXXX ... \$8X. ,I7.
60 | I8\$.-OXX..,\$D8XX... . -,,.... XX. ..X .?:. ZXO -XX:X\$,:... .... :XX:IXXXX ... %8X .\$X.
61 | .. -8D.-O8X...-\$CX+ ..D, -X7,-,. XX . 7. .I7 .7X\$ :X\$XX-.XXI . .:: ..X:XXXXXX.. ,. .%XX .CX:
62 | .. .CD.+OCX . .,. .-.XO. ?8I,IX. . :X7. ... 78..8X-.+X+XX, XXD. . .: ..*N= -XXXXXXD .:. .OXN .8XI
63 | . 78*COyX, .8*XX =8.... ..\$X..... . XXI XX .XX.XX..?XX..7. ?, .. ..?XXXXXXXX. ,:. ,OX* ,DX\$
64 | . .%D7CO7X\$ . .... X7XX .. XX . .. ..XX\$ X8 XX.XX...XXX%8 %- .. .=\$XX.. ,:. :ZX :DX%
65 | .... +XO8O7XD ...+. X8XX. .:X. .7- ,XX\$.D= .XX 8X DXX\$X: XD. .-,.*OX. =DX%
66 | .,. .XD8O\$XX ,,\$:. OXXX- .XX. .D?. .XXX:-8. +XX DX: XX7X\$ XX .=-IZXD +DX8 .
67 | ::. XXXXZX\$ .,\$D 7XDXI OX... O8? .XXX.%8 IXX ZXI ZX7XD. DX. .. . .=+Z\$X= 7DX%
68 | .-:. IXXN7X. ..:IX. 7DNK\$ ..XZ .\$XX- ..OXX8 %Z 7XX.-XX ..+XDXX+.7X-. :+ .D .-*\$+X... %DX%
69 | .*,,. .XXDIX, ..??X. IDXXI .XX .XX8, :XXX %% .=DX..XX.. .XX:X8 .XX. .=. .X ..+??X ..%DX?
70 | .+*- .OX7?%. .:%77\$.7DXX -X7. XXX+...XXX:. ZO...DX\$.OXX .+X\$XX,.XX, .... ,X .-8\$. .-OXX+
71 | *I*,. .8+ZI .=D+XX ,8XX. XX. .8XX%...7XX7...%X 8XX .XXX .X\$XX\$.XXX.. -X . -X. ..?+DXX:.
72 | =O7%:. :-I ..*O+XX I8,. .XI. .XX%.. -XXD .:X: .XX* ZXXZ..\$X7XD.:XX7. ?8 .-...I8\$XXX..
73 | -X\$O%: .,..=7-XX. .,.. .*X .OD. .:+%.. *XD .8X- .7XX..XX..II +CO -. .. .,%XODXXX...
74 | :XOOX-. ..?..:I:XX.. .\$, .:. ..,: .I?,. +8?..\$%. . ..,. . ,. .?.. =XX:XXXX
75 | .XXXD= ,O. .I.\$M= . . ... ......-....,.. .. ..X= X . -DXX8XXX
76 | .XXX8*. ,,\$:. .?+XX . =N?.. D :OXD8XXX
77 | %XXXI. ,,7\$. +I78N. ... ID?. .I ..%X8CXX+
78 | +ICOI .,:Z- .-XXD. .,.. .. 7D*.. .. \$D\$ZDD..
79 | ,IOO+. ,::Z7..7\$\$D ,.. . .@. -O\$.: 7. .78OZ8D..
80 | .888.. ,-:7O+.7778. .,. I . .. .... ...:.. . OO.. .--*:. 7.. . :%XZ8.
81 | .,.:%I.. ,+:?O?.=I7\$. . . ....... . :: , .*7%.. :.OO=. ..-+..,?.. . .I?OI.
82 | . ,7:=\$7,,II7. .. .. .. .- .. +7. : 77\$.-..? %%+ .7\$. +=:,.. .,..
83 | .+::7Z7.:I+. .. :. .. -* .. \$ I\$ . -,.I\$7 = 7.XXI .*...*,,.... . .
84 | . .-*:I\$?..*. . *. . -7.. .7. I\$., :-.7\$7.= 7-\$\$7 .. .,- . .. ...
85 | . ... :7:777. . -. +- +7. 7..7\$+ ..?.?77 = 7+777 .. ..7?I....- .. .
86 | = .....,7:-7I-. -. II =I: :?.?I7 ?.?II. = .I?7:: ..+--?.. -*, .=?
87 | ,,..,. ,**,I?I.. . ,. .II :*?. ?.??I.. ?.:?I. - .I?II? . ,:*?-. ==I..=I?.
88 | .=...+ .*+,-??.* . .:. +7:.-7. .+,+??:..*:.+7. :. 7777+ .,7+++7. -+,.-=7*.
89 | .=...*. :=:,++:. . . .:. .. =+=.-*: .=*=**= .:-.**, ,..*****. .,:=*=*.,:*..***=.
90 | .....-. ,*-,===. . .: . ,== :-*. .,*,*+*. .-.** : -****. ,:**:*.,:+..*+*:
91 | .. .... .:-:=== . . .: .*: ,:*. .*,--*, -.-*** :****, .:---: ,:-..-**,
92 | . .. .. ,--:-- . . , .-: .,-,. -::--,..:,---:, .----: .:=:=. .::.,===.
93 | :-::. .::::- . .. . .:: ,:- .::--:, ,,,;:. .---:: .,:.: ..:,.::-:.
94 | ,..,,,. ,:::: . . .,, ,,:. .:,:::,..,.:::. .::::: .,,,, ..,.,::::
95 | ,,,, .,,,, . .. ., .,:, ,,:,,,. ,.,,,. .:,,, ..,.. ...,,:,,
96 | ,,...,,, ,,,. . .,. .,,, .,,,,,. ,.,,,.. .,,,, . .,,.,,,,.
97 | .,...... ... . ... ,,, .,,,,,. ...,,,. .,,,, ...,.,,.
98 | ,...... ... . ... .. ..... .................,.,. ...,.
99 | ....... . . ... .... ....... ....... ..... ...........
100 | ... .... .. ... ... ....... ............. ........
101 | ....... ... .. ... ...... ............. ........
102 | ...... ... ... ... ... .. ............ ......
103 | ..... .... . . .... ............ .... .
104 | .. ... .. . .. .. . . .... .. .. ....
105 | . . . . .. ... ... ... .... . .
106 | . . .. . . . ..
107 | . . . . .. . . .
108 | EOC
109 |
--------------------------------------------------------------------------------
/browser.js:
--------------------------------------------------------------------------------
1 | import balloon from "./lib/balloon";
2 | import replacer from "./lib/replacer";
3 | import faces from "./lib/faces";
4 |
5 | import DEFAULT_COW from './cows/default.cow';
6 |
7 | export { default as ACKBAR } from './cows/ackbar.cow';
8 | export { default as APERTURE_BLANK } from './cows/aperture-blank.cow';
9 | export { default as APERTURE } from './cows/aperture.cow';
10 | export { default as ARMADILLO } from './cows/armadillo.cow';
11 | export { default as ATAT } from './cows/atat.cow';
12 | export { default as ATOM } from './cows/atom.cow';
13 | export { default as AWESOME_FACE } from './cows/awesome-face.cow';
14 | export { default as BANANA } from './cows/banana.cow';
15 | export { default as BEARFACE } from './cows/bearface.cow';
16 | export { default as BEAVIS_ZEN } from './cows/beavis.zen.cow';
17 | export { default as BEES } from './cows/bees.cow';
18 | export { default as BILL_THE_CAT } from './cows/bill-the-cat.cow';
19 | export { default as BIOHAZARD } from './cows/biohazard.cow';
20 | export { default as BISHOP } from './cows/bishop.cow';
21 | export { default as BLACK_MESA } from './cows/black-mesa.cow';
22 | export { default as BONG } from './cows/bong.cow';
23 | export { default as BOX } from './cows/box.cow';
24 | export { default as BROKEN_HEART } from './cows/broken-heart.cow';
25 | export { default as BUD_FROGS } from './cows/bud-frogs.cow';
26 | export { default as BUNNY } from './cows/bunny.cow';
27 | export { default as C3PO } from './cows/C3PO.cow';
28 | export { default as CAKE } from './cows/cake.cow';
29 | export { default as CAKE_WITH_CANDLES } from './cows/cake-with-candles.cow';
30 | export { default as CAT2 } from './cows/cat2.cow';
31 | export { default as CAT } from './cows/cat.cow';
32 | export { default as CATFENCE } from './cows/catfence.cow';
33 | export { default as CHARIZARDVICE } from './cows/charizardvice.cow';
34 | export { default as CHARLIE } from './cows/charlie.cow';
35 | export { default as CHEESE } from './cows/cheese.cow';
36 | export { default as CHESSMEN } from './cows/chessmen.cow';
37 | export { default as CHITO } from './cows/chito.cow';
38 | export { default as CLAW_ARM } from './cows/claw-arm.cow';
39 | export { default as CLIPPY } from './cows/clippy.cow';
40 | export { default as COMPANION_CUBE } from './cows/companion-cube.cow';
41 | export { default as COWER } from './cows/cower.cow';
42 | export { default as COWFEE } from './cows/cowfee.cow';
43 | export { default as CTHULHU_MINI } from './cows/cthulhu-mini.cow';
44 | export { default as CUBE } from './cows/cube.cow';
45 | export { default as DAEMON } from './cows/daemon.cow';
46 | export { default as DALEK } from './cows/dalek.cow';
47 | export { default as DALEK_SHOOTING } from './cows/dalek-shooting.cow';
48 | export { default as DEFAULT } from './cows/default.cow';
49 | export { default as DOCKER_WHALE } from './cows/docker-whale.cow';
50 | export { default as DOGE } from './cows/doge.cow';
51 | export { default as DOLPHIN } from './cows/dolphin.cow';
52 | export { default as DRAGON_AND_COW } from './cows/dragon-and-cow.cow';
53 | export { default as DRAGON } from './cows/dragon.cow';
54 | export { default as EBI_FURAI } from './cows/ebi_furai.cow';
55 | export { default as ELEPHANT2 } from './cows/elephant2.cow';
56 | export { default as ELEPHANT } from './cows/elephant.cow';
57 | export { default as ELEPHANT_IN_SNAKE } from './cows/elephant-in-snake.cow';
58 | export { default as EXPLOSION } from './cows/explosion.cow';
59 | export { default as EYES } from './cows/eyes.cow';
60 | export { default as FAT_BANANA } from './cows/fat-banana.cow';
61 | export { default as FAT_COW } from './cows/fat-cow.cow';
62 | export { default as FENCE } from './cows/fence.cow';
63 | export { default as FIRE } from './cows/fire.cow';
64 | export { default as FLAMING_SHEEP } from './cows/flaming-sheep.cow';
65 | export { default as FOX } from './cows/fox.cow';
66 | export { default as GHOSTBUSTERS } from './cows/ghostbusters.cow';
67 | export { default as GHOST } from './cows/ghost.cow';
68 | export { default as GLADOS } from './cows/glados.cow';
69 | export { default as GOAT2 } from './cows/goat2.cow';
70 | export { default as GOAT } from './cows/goat.cow';
71 | export { default as GOLDEN_EAGLE } from './cows/golden-eagle.cow';
72 | export { default as HAND } from './cows/hand.cow';
73 | export { default as HAPPY_WHALE } from './cows/happy-whale.cow';
74 | export { default as HEDGEHOG } from './cows/hedgehog.cow';
75 | export { default as HELLOKITTY } from './cows/hellokitty.cow';
76 | export { default as HIPPIE } from './cows/hippie.cow';
77 | export { default as HIYA } from './cows/hiya.cow';
78 | export { default as HIYOKO } from './cows/hiyoko.cow';
79 | export { default as HOMER } from './cows/homer.cow';
80 | export { default as HYPNO } from './cows/hypno.cow';
81 | export { default as IBM } from './cows/ibm.cow';
82 | export { default as IWASHI } from './cows/iwashi.cow';
83 | export { default as JELLYFISH } from './cows/jellyfish.cow';
84 | export { default as KARL_MARX } from './cows/karl_marx.cow';
85 | export { default as KILROY } from './cows/kilroy.cow';
86 | export { default as KING } from './cows/king.cow';
87 | export { default as KISS } from './cows/kiss.cow';
88 | export { default as KITTEN } from './cows/kitten.cow';
89 | export { default as KITTY } from './cows/kitty.cow';
90 | export { default as KNIGHT } from './cows/knight.cow';
91 | export { default as KOALA } from './cows/koala.cow';
92 | export { default as KOSH } from './cows/kosh.cow';
93 | export { default as LAMB2 } from './cows/lamb2.cow';
94 | export { default as LAMB } from './cows/lamb.cow';
95 | export { default as LIGHTBULB } from './cows/lightbulb.cow';
96 | export { default as LOBSTER } from './cows/lobster.cow';
97 | export { default as LOLLERSKATES } from './cows/lollerskates.cow';
98 | export { default as LUKE_KOALA } from './cows/luke-koala.cow';
99 | export { default as MAILCHIMP } from './cows/mailchimp.cow';
100 | export { default as MAZE_RUNNER } from './cows/maze-runner.cow';
101 | export { default as MECH_AND_COW } from './cows/mech-and-cow.cow';
102 | export { default as MEOW } from './cows/meow.cow';
103 | export { default as MILK } from './cows/milk.cow';
104 | export { default as MINOTAUR } from './cows/minotaur.cow';
105 | export { default as MONA_LISA } from './cows/mona-lisa.cow';
106 | export { default as MOOFASA } from './cows/moofasa.cow';
107 | export { default as MOOGHIDJIRAH } from './cows/mooghidjirah.cow';
108 | export { default as MOOJIRA } from './cows/moojira.cow';
109 | export { default as MOOSE } from './cows/moose.cow';
110 | export { default as MULE } from './cows/mule.cow';
111 | export { default as MUTILATED } from './cows/mutilated.cow';
112 | export { default as NYAN } from './cows/nyan.cow';
113 | export { default as OCTOPUS } from './cows/octopus.cow';
114 | export { default as OKAZU } from './cows/okazu.cow';
115 | export { default as OWL } from './cows/owl.cow';
116 | export { default as PAWN } from './cows/pawn.cow';
117 | export { default as PERIODIC_TABLE } from './cows/periodic-table.cow';
118 | export { default as PERSONALITY_SPHERE } from './cows/personality-sphere.cow';
119 | export { default as PINBALL_MACHINE } from './cows/pinball-machine.cow';
120 | export { default as PSYCHIATRICHELP2 } from './cows/psychiatrichelp2.cow';
121 | export { default as PSYCHIATRICHELP } from './cows/psychiatrichelp.cow';
122 | export { default as PTERODACTYL } from './cows/pterodactyl.cow';
123 | export { default as QUEEN } from './cows/queen.cow';
124 | export { default as R2_D2 } from './cows/R2-D2.cow';
125 | export { default as RADIO } from './cows/radio.cow';
126 | export { default as REN } from './cows/ren.cow';
127 | export { default as RENGE } from './cows/renge.cow';
128 | export { default as ROBOT } from './cows/robot.cow';
129 | export { default as ROBOTFINDSKITTEN } from './cows/robotfindskitten.cow';
130 | export { default as ROFLCOPTER } from './cows/roflcopter.cow';
131 | export { default as ROOK } from './cows/rook.cow';
132 | export { default as SACHIKO } from './cows/sachiko.cow';
133 | export { default as SATANIC } from './cows/satanic.cow';
134 | export { default as SEAHORSE_BIG } from './cows/seahorse-big.cow';
135 | export { default as SEAHORSE } from './cows/seahorse.cow';
136 | export { default as SHEEP } from './cows/sheep.cow';
137 | export { default as SHIKATO } from './cows/shikato.cow';
138 | export { default as SHRUG } from './cows/shrug.cow';
139 | export { default as SKELETON } from './cows/skeleton.cow';
140 | export { default as SMALL } from './cows/small.cow';
141 | export { default as SMILING_OCTOPUS } from './cows/smiling-octopus.cow';
142 | export { default as SNOOPY } from './cows/snoopy.cow';
143 | export { default as SNOOPYHOUSE } from './cows/snoopyhouse.cow';
144 | export { default as SNOOPYSLEEP } from './cows/snoopysleep.cow';
145 | export { default as SPIDERCOW } from './cows/spidercow.cow';
146 | export { default as SQUID } from './cows/squid.cow';
147 | export { default as SQUIRREL } from './cows/squirrel.cow';
148 | export { default as STEGOSAURUS } from './cows/stegosaurus.cow';
149 | export { default as STIMPY } from './cows/stimpy.cow';
150 | export { default as SUDOWOODO } from './cows/sudowoodo.cow';
151 | export { default as SUPERMILKER } from './cows/supermilker.cow';
152 | export { default as SURGERY } from './cows/surgery.cow';
153 | export { default as TABLEFLIP } from './cows/tableflip.cow';
154 | export { default as TAXI } from './cows/taxi.cow';
155 | export { default as TELEBEARS } from './cows/telebears.cow';
156 | export { default as TEMPLATE } from './cows/template.cow';
157 | export { default as THREADER } from './cows/threader.cow';
158 | export { default as THREECUBES } from './cows/threecubes.cow';
159 | export { default as TOASTER } from './cows/toaster.cow';
160 | export { default as TORTOISE } from './cows/tortoise.cow';
161 | export { default as TURKEY } from './cows/turkey.cow';
162 | export { default as TURTLE } from './cows/turtle.cow';
163 | export { default as TUX_BIG } from './cows/tux-big.cow';
164 | export { default as TUX } from './cows/tux.cow';
165 | export { default as TWEETY_BIRD } from './cows/tweety-bird.cow';
166 | export { default as USA } from './cows/USA.cow';
167 | export { default as VADER } from './cows/vader.cow';
168 | export { default as VADER_KOALA } from './cows/vader-koala.cow';
169 | export { default as WEEPING_ANGEL } from './cows/weeping-angel.cow';
170 | export { default as WHALE } from './cows/whale.cow';
171 | export { default as WIZARD } from './cows/wizard.cow';
172 | export { default as WOOD } from './cows/wood.cow';
173 | export { default as WORLD } from './cows/world.cow';
174 | export { default as WWW } from './cows/www.cow';
175 | export { default as YASUNA_01 } from './cows/yasuna_01.cow';
176 | export { default as YASUNA_02 } from './cows/yasuna_02.cow';
177 | export { default as YASUNA_03A } from './cows/yasuna_03a.cow';
178 | export { default as YASUNA_03 } from './cows/yasuna_03.cow';
179 | export { default as YASUNA_04 } from './cows/yasuna_04.cow';
180 | export { default as YASUNA_05 } from './cows/yasuna_05.cow';
181 | export { default as YASUNA_06 } from './cows/yasuna_06.cow';
182 | export { default as YASUNA_07 } from './cows/yasuna_07.cow';
183 | export { default as YASUNA_08 } from './cows/yasuna_08.cow';
184 | export { default as YASUNA_09 } from './cows/yasuna_09.cow';
185 | export { default as YASUNA_10 } from './cows/yasuna_10.cow';
186 | export { default as YASUNA_11 } from './cows/yasuna_11.cow';
187 | export { default as YASUNA_12 } from './cows/yasuna_12.cow';
188 | export { default as YASUNA_13 } from './cows/yasuna_13.cow';
189 | export { default as YASUNA_14 } from './cows/yasuna_14.cow';
190 | export { default as YASUNA_16 } from './cows/yasuna_16.cow';
191 | export { default as YASUNA_17 } from './cows/yasuna_17.cow';
192 | export { default as YASUNA_18 } from './cows/yasuna_18.cow';
193 | export { default as YASUNA_19 } from './cows/yasuna_19.cow';
194 | export { default as YASUNA_20 } from './cows/yasuna_20.cow';
195 | export { default as YMD_UDON } from './cows/ymd_udon.cow';
196 | export { default as ZEN_NOH_MILK } from './cows/zen-noh-milk.cow';
197 |
198 | function convertToCliOptions(browserOptions) {
199 | const cliOptions = {
200 | e: browserOptions.eyes || 'oo',
201 | T: browserOptions.tongue || ' ',
202 | n: browserOptions.wrap,
203 | W: browserOptions.wrapLength || 40,
204 | text: browserOptions.text || '',
205 | _: browserOptions.text || [],
206 | f: browserOptions.cow,
207 | };
208 | if (browserOptions.mode) {
209 | // converts mode: 'b' to b: true
210 | cliOptions[browserOptions.mode] = true;
211 | }
212 | return cliOptions;
213 | }
214 |
215 | function doIt (options, sayAloud) {
216 | const cow = options.f || DEFAULT_COW;
217 | const face = faces(options);
218 | face.thoughts = sayAloud ? "\\" : "o";
219 |
220 | const action = sayAloud ? "say" : "think";
221 | return balloon[action](options.text || options._.join(" "), options.n ? null : options.W) + "\n" + replacer(cow, face);
222 | }
223 |
224 | export function say(browserOptions) {
225 | return doIt(convertToCliOptions(browserOptions), true);
226 | }
227 |
228 | export function think(browserOptions) {
229 | return doIt(convertToCliOptions(browserOptions), false);
230 | }
231 |
--------------------------------------------------------------------------------