From f3fd96f78b7b6a8d9f59c4b1e3db13a7b98db357 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 18 Feb 2017 15:51:04 +0000 Subject: [PATCH 01/55] everything --- .gitignore | 1 + Makefile | 14 ++++++++++++++ README.md | 26 ++++++++++++++++++++++++++ bin/hubot | 9 +++++++++ external-scripts.json | 1 + package.json | 19 +++++++++++++++++++ scripts/eval.js | 34 ++++++++++++++++++++++++++++++++++ scripts/versions.js | 29 +++++++++++++++++++++++++++++ 8 files changed, 133 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100755 bin/hubot create mode 100644 external-scripts.json create mode 100644 package.json create mode 100644 scripts/eval.js create mode 100644 scripts/versions.js diff --git a/.gitignore b/.gitignore index e69de29..2ccbe46 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +/node_modules/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2d26f0b --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +ESLINT = node_modules/.bin/eslint --config node_modules/sanctuary-style/eslint-es3.json --env es3 --env node +NPM = npm + +SCRIPTS = $(shell find scripts -name '*.js' | sort) + + +.PHONY: lint +lint: + $(ESLINT) -- $(SCRIPTS) + + +.PHONY: setup +setup: + $(NPM) install diff --git a/README.md b/README.md new file mode 100644 index 0000000..21b1690 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# silly-goat + +silly-goat is a [Hubot][1] chat bot for the [Sanctuary][2] room on [Gitter][3]. + +### Commands + + - `/versions`: list Node version and dependency versions + +### JavaScript evaluation + +When [@silly-goat][4] is mentioned in a message containing a JavaScript code +block, silly-goat evaluates the code and bleats the result. + +In Markdown, a JavaScript code block looks like this: + + ```javascript + S.map(S.inc, [1, 2, 3]) + ``` + +`js` may be used in place of `javascript` if desired. + + +[1]: https://hubot.github.com/ +[2]: https://gitter.im/sanctuary-js/sanctuary +[3]: https://gitter.im/ +[4]: https://github.com/silly-goat diff --git a/bin/hubot b/bin/hubot new file mode 100755 index 0000000..17af792 --- /dev/null +++ b/bin/hubot @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -e + +PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH" \ + node_modules/.bin/hubot \ + --adapter gitter2 \ + --alias / \ + --name silly-goat \ + "$@" diff --git a/external-scripts.json b/external-scripts.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/external-scripts.json @@ -0,0 +1 @@ +[] diff --git a/package.json b/package.json new file mode 100644 index 0000000..dd4a3fc --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "silly-goat", + "version": "0.0.0", + "private": true, + "author": "David Chambers ", + "description": "A simple helpful robot for your Company", + "dependencies": { + "hubot": "2.19.0", + "hubot-gitter2": "huafu/hubot-gitter2#57d5d8d23733a1925cafbcee00a0d55b98115b53", + "sanctuary": "*", + "sanctuary-def": "*", + "sanctuary-int": "*", + "sanctuary-type-classes": "*" + }, + "devDependencies": { + "eslint": "2.9.x", + "sanctuary-style": "0.4.x" + } +} diff --git a/scripts/eval.js b/scripts/eval.js new file mode 100644 index 0000000..a3a41bc --- /dev/null +++ b/scripts/eval.js @@ -0,0 +1,34 @@ +'use strict'; + +var vm = require('vm'); + +var S = require('sanctuary'); +var $ = require('sanctuary-def'); +var Int = require('sanctuary-int'); +var Z = require('sanctuary-type-classes'); + + +// evaluate :: String -> Either Error Any +var evaluate = S.encaseEither3_( + S.I, + vm.runInNewContext, + S.__, + {$: $, Int: Int, S: S, Z: Z}, + {timeout: 5000} +); + +// formatCodeBlock :: String -> String -> String +var formatCodeBlock = S.curry2(function(lang, code) { + return '```' + lang + '\n' + code + '\n```'; +}); + + +module.exports = function(bot) { + + bot.respond(/```(javascript|js)$([\s\S]*)```/m, function(res) { + res.send(S.either(S.compose(formatCodeBlock('text'), S.prop('message')), + S.compose(formatCodeBlock('javascript'), S.toString), + evaluate(res.match[2]))); + }); + +}; diff --git a/scripts/versions.js b/scripts/versions.js new file mode 100644 index 0000000..1e98c20 --- /dev/null +++ b/scripts/versions.js @@ -0,0 +1,29 @@ +'use strict'; + +var S = require('sanctuary'); + +var pkg = require('../package.json'); + + +var deps = S.keys(pkg.dependencies).sort().reduce(function($acc, name) { + $acc[/^hubot(-|$)/.test(name) ? 'hubot' : 'other'].push(name); + return $acc; +}, {hubot: [], other: []}); + +function version(name) { + return name + '@' + require(name + '/package.json').version; +} + +var versions = + '```text\nNode ' + process.version + '\n\n' + + S.unlines(S.map(version, deps.hubot)) + '\n' + + S.unlines(S.map(version, deps.other)) + '```'; + + +module.exports = function(bot) { + + bot.respond(/versions/, function(res) { + res.send(versions); + }); + +}; From 04b8d6042eb8fd1430a7311d20bd0f3b696f4c30 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 18 Feb 2017 17:25:44 +0100 Subject: [PATCH 02/55] add circle.yml --- circle.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 circle.yml diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..01b7ed6 --- /dev/null +++ b/circle.yml @@ -0,0 +1,12 @@ +dependencies: + override: + - printf '%s\n' color=false progress=false >.npmrc + - make setup + +machine: + node: + version: 4 + +test: + override: + - make lint From e3adbcda1b680ce01565f1dbde45d4e360c83726 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 18 Feb 2017 17:29:22 +0100 Subject: [PATCH 03/55] circle: try ~/.npmrc --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index 01b7ed6..736afa4 100644 --- a/circle.yml +++ b/circle.yml @@ -1,6 +1,6 @@ dependencies: override: - - printf '%s\n' color=false progress=false >.npmrc + - printf '%s\n' color=false progress=false >~/.npmrc - make setup machine: From c7f2666a6ae7c6cf918ebcf7f3f1b2e8ce43f844 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 18 Feb 2017 17:31:32 +0100 Subject: [PATCH 04/55] circle: remove ineffectual line --- circle.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/circle.yml b/circle.yml index 736afa4..528298c 100644 --- a/circle.yml +++ b/circle.yml @@ -1,6 +1,5 @@ dependencies: override: - - printf '%s\n' color=false progress=false >~/.npmrc - make setup machine: From 8c4299a1858ea8e52fc68fc5fbfa0c94827636c2 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 18 Feb 2017 17:34:44 +0100 Subject: [PATCH 05/55] package.json: remove boilerplate --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index dd4a3fc..0193ba0 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,6 @@ { "name": "silly-goat", - "version": "0.0.0", "private": true, - "author": "David Chambers ", - "description": "A simple helpful robot for your Company", "dependencies": { "hubot": "2.19.0", "hubot-gitter2": "huafu/hubot-gitter2#57d5d8d23733a1925cafbcee00a0d55b98115b53", From ae0cd0f33aaddf0ff9b2294a01b61bcfe3bde8c8 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 16:16:48 +0100 Subject: [PATCH 06/55] add dockerfile --- Dockerfile | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..87fe811 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM nodesource/node:6 + +ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init + +RUN chmod +x /usr/local/bin/dumb-init + +RUN groupadd --system -- nodejs && \ + useradd --system --gid nodejs --create-home -- nodejs + +USER nodejs + +RUN mkdir -p /home/nodejs/silly-goat + +WORKDIR /home/nodejs/silly-goat + +COPY package.json . + +RUN npm install --production + +COPY . . + +ENTRYPOINT ["dumb-init", "bin/hubot"] From b5105c718c07d5fcc62888bf4144f8129ce7883e Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 16:37:27 +0100 Subject: [PATCH 07/55] Node v6.x.x --- Makefile | 2 +- circle.yml | 2 +- scripts/eval.js | 28 +++++++++++++++------------- scripts/versions.js | 34 ++++++++++++++++++++-------------- 4 files changed, 37 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index 2d26f0b..83c49b8 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -ESLINT = node_modules/.bin/eslint --config node_modules/sanctuary-style/eslint-es3.json --env es3 --env node +ESLINT = node_modules/.bin/eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node NPM = npm SCRIPTS = $(shell find scripts -name '*.js' | sort) diff --git a/circle.yml b/circle.yml index 528298c..ea0cb9a 100644 --- a/circle.yml +++ b/circle.yml @@ -4,7 +4,7 @@ dependencies: machine: node: - version: 4 + version: 6 test: override: diff --git a/scripts/eval.js b/scripts/eval.js index a3a41bc..ecca075 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -1,15 +1,15 @@ 'use strict'; -var vm = require('vm'); +const vm = require('vm'); -var S = require('sanctuary'); -var $ = require('sanctuary-def'); -var Int = require('sanctuary-int'); -var Z = require('sanctuary-type-classes'); +const S = require('sanctuary'); +const $ = require('sanctuary-def'); +const Int = require('sanctuary-int'); +const Z = require('sanctuary-type-classes'); -// evaluate :: String -> Either Error Any -var evaluate = S.encaseEither3_( +// evaluate :: String -> Either Error Any +const evaluate = S.encaseEither3_( S.I, vm.runInNewContext, S.__, @@ -17,15 +17,17 @@ var evaluate = S.encaseEither3_( {timeout: 5000} ); -// formatCodeBlock :: String -> String -> String -var formatCodeBlock = S.curry2(function(lang, code) { - return '```' + lang + '\n' + code + '\n```'; -}); +// backticks :: String +const backticks = '```'; +// formatCodeBlock :: String -> String -> String +const formatCodeBlock = +S.curry2((lang, code) => `${backticks}${lang}\n${code}\n${backticks}`); -module.exports = function(bot) { - bot.respond(/```(javascript|js)$([\s\S]*)```/m, function(res) { +module.exports = bot => { + + bot.respond(/```(javascript|js)$([\s\S]*)```/m, res => { res.send(S.either(S.compose(formatCodeBlock('text'), S.prop('message')), S.compose(formatCodeBlock('javascript'), S.toString), evaluate(res.match[2]))); diff --git a/scripts/versions.js b/scripts/versions.js index 1e98c20..d3ad960 100644 --- a/scripts/versions.js +++ b/scripts/versions.js @@ -1,29 +1,35 @@ 'use strict'; -var S = require('sanctuary'); +const S = require('sanctuary'); -var pkg = require('../package.json'); +const pkg = require('../package.json'); -var deps = S.keys(pkg.dependencies).sort().reduce(function($acc, name) { +// deps :: { hubot :: Array String, other :: Array String } +const deps = S.keys(pkg.dependencies).sort().reduce(($acc, name) => { $acc[/^hubot(-|$)/.test(name) ? 'hubot' : 'other'].push(name); return $acc; }, {hubot: [], other: []}); -function version(name) { - return name + '@' + require(name + '/package.json').version; -} +// version :: String -> String +const version = name => `${name}@${require(`${name}/package.json`).version}`; -var versions = - '```text\nNode ' + process.version + '\n\n' + - S.unlines(S.map(version, deps.hubot)) + '\n' + - S.unlines(S.map(version, deps.other)) + '```'; +// backticks :: String +const backticks = '```'; +// versions :: String +const versions = +`${backticks} +Node ${process.version} -module.exports = function(bot) { +${S.joinWith('\n', S.map(version, deps.hubot))} - bot.respond(/versions/, function(res) { - res.send(versions); - }); +${S.joinWith('\n', S.map(version, deps.other))} +${backticks}`; + + +module.exports = bot => { + + bot.respond(/versions/, res => { res.send(versions); }); }; From 129118b2c8ac8c0d62df8adc7fd6eb24474839ff Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 16:46:27 +0100 Subject: [PATCH 08/55] eval: make the language specifier optional /cc @Bradcomp --- README.md | 3 ++- scripts/eval.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 21b1690..1ac7ee0 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ In Markdown, a JavaScript code block looks like this: S.map(S.inc, [1, 2, 3]) ``` -`js` may be used in place of `javascript` if desired. +`js` may be used in place of `javascript`, or the language may be left +unspecified. [1]: https://hubot.github.com/ diff --git a/scripts/eval.js b/scripts/eval.js index ecca075..7471a2e 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -27,10 +27,10 @@ S.curry2((lang, code) => `${backticks}${lang}\n${code}\n${backticks}`); module.exports = bot => { - bot.respond(/```(javascript|js)$([\s\S]*)```/m, res => { + bot.respond(/```(?:javascript|js)?$([\s\S]*)```/m, res => { res.send(S.either(S.compose(formatCodeBlock('text'), S.prop('message')), S.compose(formatCodeBlock('javascript'), S.toString), - evaluate(res.match[2]))); + evaluate(res.match[1]))); }); }; From abbcaddfc8afbcf4b3fa0121028aa10648d3cf06 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 16:59:19 +0100 Subject: [PATCH 09/55] move start-up command to package.json --- Dockerfile | 2 +- bin/hubot | 9 --------- package.json | 3 +++ 3 files changed, 4 insertions(+), 10 deletions(-) delete mode 100755 bin/hubot diff --git a/Dockerfile b/Dockerfile index 87fe811..2f99430 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,4 +19,4 @@ RUN npm install --production COPY . . -ENTRYPOINT ["dumb-init", "bin/hubot"] +ENTRYPOINT ["dumb-init", "npm", "run", "start"] diff --git a/bin/hubot b/bin/hubot deleted file mode 100755 index 17af792..0000000 --- a/bin/hubot +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -set -e - -PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH" \ - node_modules/.bin/hubot \ - --adapter gitter2 \ - --alias / \ - --name silly-goat \ - "$@" diff --git a/package.json b/package.json index 0193ba0..a1e1bc6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "name": "silly-goat", "private": true, + "scripts": { + "start": "hubot --adapter gitter2 --alias / --name silly-goat" + }, "dependencies": { "hubot": "2.19.0", "hubot-gitter2": "huafu/hubot-gitter2#57d5d8d23733a1925cafbcee00a0d55b98115b53", From c8bb4825a3d3e351c88210b4cf33de546a18c48c Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:08:40 +0100 Subject: [PATCH 10/55] prepend node_modules/.bin to PATH so coffee can be found --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1e1bc6..8a91680 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "silly-goat", "private": true, "scripts": { - "start": "hubot --adapter gitter2 --alias / --name silly-goat" + "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { "hubot": "2.19.0", From 34069ff230b743ddbc2e85a9304c584ae9bee726 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:11:52 +0100 Subject: [PATCH 11/55] remove external-scripts.json --- external-scripts.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 external-scripts.json diff --git a/external-scripts.json b/external-scripts.json deleted file mode 100644 index fe51488..0000000 --- a/external-scripts.json +++ /dev/null @@ -1 +0,0 @@ -[] From e5b77e54c2142207138db51caae6b512a92dd44c Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:14:41 +0100 Subject: [PATCH 12/55] remove makefile in favour of npm scripts --- Makefile | 14 -------------- package.json | 1 + 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index 83c49b8..0000000 --- a/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -ESLINT = node_modules/.bin/eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node -NPM = npm - -SCRIPTS = $(shell find scripts -name '*.js' | sort) - - -.PHONY: lint -lint: - $(ESLINT) -- $(SCRIPTS) - - -.PHONY: setup -setup: - $(NPM) install diff --git a/package.json b/package.json index 8a91680..1c80a3e 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "silly-goat", "private": true, "scripts": { + "lint": "eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node -- scripts", "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { From e3be2d3aaced2d5b29ed34f379d4b7ea4a2d20d5 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:16:28 +0100 Subject: [PATCH 13/55] update circle.yml --- circle.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/circle.yml b/circle.yml index ea0cb9a..fea5fab 100644 --- a/circle.yml +++ b/circle.yml @@ -1,11 +1,7 @@ -dependencies: - override: - - make setup - machine: node: version: 6 test: override: - - make lint + - npm run lint From d4714c148614cf1dea206488184141e147d4c0c2 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:18:48 +0100 Subject: [PATCH 14/55] dockerfile: combine RUN commands --- Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2f99430..1464549 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,8 @@ FROM nodesource/node:6 ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init -RUN chmod +x /usr/local/bin/dumb-init - -RUN groupadd --system -- nodejs && \ +RUN chmod +x /usr/local/bin/dumb-init && \ + groupadd --system -- nodejs && \ useradd --system --gid nodejs --create-home -- nodejs USER nodejs From 1c39c5cc809eb1a01d78d89921a5ec0b01c83b8d Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:23:26 +0100 Subject: [PATCH 15/55] scripts: use {foo, bar, baz} sugar --- scripts/eval.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/eval.js b/scripts/eval.js index 7471a2e..0789aba 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -13,7 +13,7 @@ const evaluate = S.encaseEither3_( S.I, vm.runInNewContext, S.__, - {$: $, Int: Int, S: S, Z: Z}, + {$, Int, S, Z}, {timeout: 5000} ); From 2155b5191f861a6eec0cddbb4916e3e17a3ccd6e Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:32:00 +0100 Subject: [PATCH 16/55] scripts: use sanctuary-def --- scripts/eval.js | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/scripts/eval.js b/scripts/eval.js index 0789aba..94b9f49 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -8,21 +8,38 @@ const Int = require('sanctuary-int'); const Z = require('sanctuary-type-classes'); +// Language :: Type +const Language = $.EnumType('silly-goat/Language', '', ['javascript', 'text']); + +// checkTypes :: Boolean +const checkTypes = true; + +// env :: Array Type +const env = Z.concat(S.env, [Language]); + +// def :: String -> StrMap TypeClass -> Array Type -> Function -> Function +const def = $.create({checkTypes, env}); + // evaluate :: String -> Either Error Any -const evaluate = S.encaseEither3_( - S.I, - vm.runInNewContext, - S.__, - {$, Int, S, Z}, - {timeout: 5000} -); +const evaluate = +def('evaluate', + {}, + [$.String, S.EitherType($.Error, $.Any)], + S.encaseEither3_(S.I, + vm.runInNewContext, + S.__, + {$, Int, S, Z}, + {timeout: 5000})); // backticks :: String const backticks = '```'; // formatCodeBlock :: String -> String -> String const formatCodeBlock = -S.curry2((lang, code) => `${backticks}${lang}\n${code}\n${backticks}`); +def('formatCodeBlock', + {}, + [Language, $.String, $.String], + (lang, code) => `${backticks}${lang}\n${code}\n${backticks}`); module.exports = bot => { From 673398ed47df4b3ff754a45895110753848ff1c6 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 19 Feb 2017 17:40:48 +0100 Subject: [PATCH 17/55] scripts: use dependency version from package.json unless value is "*" --- scripts/versions.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/versions.js b/scripts/versions.js index d3ad960..c5bd289 100644 --- a/scripts/versions.js +++ b/scripts/versions.js @@ -12,7 +12,10 @@ const deps = S.keys(pkg.dependencies).sort().reduce(($acc, name) => { }, {hubot: [], other: []}); // version :: String -> String -const version = name => `${name}@${require(`${name}/package.json`).version}`; +const version = name => { + const v = pkg.dependencies[name]; + return `${name}@${v === '*' ? require(`${name}/package.json`).version : v}`; +}; // backticks :: String const backticks = '```'; From 88a1f49bd15f161b6bb6ef473eb63e77b275d939 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 27 Feb 2017 01:07:40 +0100 Subject: [PATCH 18/55] add Ramda --- package.json | 1 + scripts/eval.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1c80a3e..b8a9589 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "dependencies": { "hubot": "2.19.0", "hubot-gitter2": "huafu/hubot-gitter2#57d5d8d23733a1925cafbcee00a0d55b98115b53", + "ramda": "*", "sanctuary": "*", "sanctuary-def": "*", "sanctuary-int": "*", diff --git a/scripts/eval.js b/scripts/eval.js index 94b9f49..e2ed99a 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -2,6 +2,7 @@ const vm = require('vm'); +const R = require('ramda'); const S = require('sanctuary'); const $ = require('sanctuary-def'); const Int = require('sanctuary-int'); @@ -28,7 +29,7 @@ def('evaluate', S.encaseEither3_(S.I, vm.runInNewContext, S.__, - {$, Int, S, Z}, + {$, Int, R, S, Z}, {timeout: 5000})); // backticks :: String From bdd8eaac03a40116665ee0aac6ae76fe441d8384 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 27 Feb 2017 01:41:07 +0100 Subject: [PATCH 19/55] support console.log --- scripts/eval.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/scripts/eval.js b/scripts/eval.js index e2ed99a..c35fb63 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -21,16 +21,22 @@ const env = Z.concat(S.env, [Language]); // def :: String -> StrMap TypeClass -> Array Type -> Function -> Function const def = $.create({checkTypes, env}); -// evaluate :: String -> Either Error Any +// evaluate :: String -> Either String String const evaluate = def('evaluate', {}, - [$.String, S.EitherType($.Error, $.Any)], - S.encaseEither3_(S.I, - vm.runInNewContext, - S.__, - {$, Int, R, S, Z}, - {timeout: 5000})); + [$.String, S.EitherType($.String, $.String)], + code => { + const logs = []; + const log = (...args) => { logs.push(args.map(String).join(', ')); }; + return S.map(x => S.unlines(S.map(S.concat('log: '), logs)) + + S.toString(x), + S.encaseEither3_(S.prop('message'), + vm.runInNewContext, + code, + {$, Int, R, S, Z, console: {log}}, + {timeout: 5000})); + }); // backticks :: String const backticks = '```'; @@ -46,8 +52,8 @@ def('formatCodeBlock', module.exports = bot => { bot.respond(/```(?:javascript|js)?$([\s\S]*)```/m, res => { - res.send(S.either(S.compose(formatCodeBlock('text'), S.prop('message')), - S.compose(formatCodeBlock('javascript'), S.toString), + res.send(S.either(formatCodeBlock('text'), + formatCodeBlock('javascript'), evaluate(res.match[1]))); }); From e9402874b22784d947e0fbc3cf10d81a3d25849d Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 3 Apr 2017 02:44:15 +0200 Subject: [PATCH 20/55] sanctuary-style@0.5.x --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b8a9589..1ef31ec 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "sanctuary-type-classes": "*" }, "devDependencies": { - "eslint": "2.9.x", - "sanctuary-style": "0.4.x" + "eslint": "3.19.x", + "sanctuary-style": "0.5.x" } } From 188e5170c13008acf90266dd6f2e4ee1090585fb Mon Sep 17 00:00:00 2001 From: David Chambers Date: Fri, 27 Oct 2017 23:37:03 +0200 Subject: [PATCH 21/55] circle: upgrade to CircleCI 2.0 --- .circleci/config.yml | 14 ++++++++++++++ circle.yml | 7 ------- 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 .circleci/config.yml delete mode 100644 circle.yml diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..f23d7cd --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,14 @@ +version: 2 + +jobs: + build: + docker: + - image: circleci/node:6 + environment: + NPM_CONFIG_COLOR: false + NPM_CONFIG_LOGLEVEL: warn + NPM_CONFIG_PROGRESS: false + parallelism: 1 + steps: + - checkout + - run: npm install && npm run lint diff --git a/circle.yml b/circle.yml deleted file mode 100644 index fea5fab..0000000 --- a/circle.yml +++ /dev/null @@ -1,7 +0,0 @@ -machine: - node: - version: 6 - -test: - override: - - npm run lint From 76c19b34b83da06b6b13e569dde2b08a820175fc Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 28 Oct 2017 01:29:31 +0200 Subject: [PATCH 22/55] sanctuary-style@1.0.x --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1ef31ec..1c639b9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "silly-goat", "private": true, "scripts": { - "lint": "eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node -- scripts", + "lint": "eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node --report-unused-disable-directives -- scripts", "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { @@ -15,7 +15,7 @@ "sanctuary-type-classes": "*" }, "devDependencies": { - "eslint": "3.19.x", - "sanctuary-style": "0.5.x" + "eslint": "4.9.x", + "sanctuary-style": "1.0.x" } } From 21d704bdacecde59f580c54b7ee0b565ed3475df Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 23 Dec 2017 03:22:33 +0100 Subject: [PATCH 23/55] fix package versions --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1c639b9..803da61 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,11 @@ "hubot": "2.19.0", "hubot-gitter2": "huafu/hubot-gitter2#57d5d8d23733a1925cafbcee00a0d55b98115b53", "ramda": "*", - "sanctuary": "*", - "sanctuary-def": "*", + "sanctuary": "0.14.1", + "sanctuary-def": "0.14.0", "sanctuary-int": "*", - "sanctuary-type-classes": "*" + "sanctuary-type-classes": "7.1.1", + "sanctuary-type-identifiers": "2.0.1" }, "devDependencies": { "eslint": "4.9.x", From 2deb24699e9ce76a064cf3a0c8f09ecf5d2f54f4 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 23 Dec 2017 03:28:28 +0100 Subject: [PATCH 24/55] prevent syntax highlighting of version information --- scripts/versions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/versions.js b/scripts/versions.js index c5bd289..bd8743a 100644 --- a/scripts/versions.js +++ b/scripts/versions.js @@ -22,7 +22,7 @@ const backticks = '```'; // versions :: String const versions = -`${backticks} +`${backticks}text Node ${process.version} ${S.joinWith('\n', S.map(version, deps.hubot))} From 8a3a94de7bb9840cf9a6838f4a7b09a372a7e610 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Fri, 5 Jan 2018 02:17:58 +0100 Subject: [PATCH 25/55] use S.encaseEither3 rather than S.encaseEither3_ --- scripts/eval.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/eval.js b/scripts/eval.js index c35fb63..492342c 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -31,11 +31,11 @@ def('evaluate', const log = (...args) => { logs.push(args.map(String).join(', ')); }; return S.map(x => S.unlines(S.map(S.concat('log: '), logs)) + S.toString(x), - S.encaseEither3_(S.prop('message'), - vm.runInNewContext, - code, - {$, Int, R, S, Z, console: {log}}, - {timeout: 5000})); + S.encaseEither3(S.prop('message'), + S.curry3(vm.runInNewContext), + code, + {$, Int, R, S, Z, console: {log}}, + {timeout: 5000})); }); // backticks :: String From 997625a945a32324b29dfff1f51f347133a47dd3 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Tue, 13 Mar 2018 12:14:44 +0100 Subject: [PATCH 26/55] hubot-gitter2@1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 803da61..06b236f 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "hubot": "2.19.0", - "hubot-gitter2": "huafu/hubot-gitter2#57d5d8d23733a1925cafbcee00a0d55b98115b53", + "hubot-gitter2": "1.0.0", "ramda": "*", "sanctuary": "0.14.1", "sanctuary-def": "0.14.0", From 59073bd6a06371fb583db03fe71d19fe385820e9 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 28 May 2018 22:28:50 +0200 Subject: [PATCH 27/55] sanctuary-descending@1.0.0 --- package.json | 3 ++- scripts/eval.js | 35 +++++++++++++++++++++-------------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 06b236f..794cfef 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "silly-goat", "private": true, "scripts": { - "lint": "eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node --report-unused-disable-directives -- scripts", + "lint": "eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node --report-unused-disable-directives --rule 'func-call-spacing: [off]' --rule 'indent: [off]' --rule 'no-unexpected-multiline: [off]' --rule 'object-property-newline: [off]' -- scripts", "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { @@ -11,6 +11,7 @@ "ramda": "*", "sanctuary": "0.14.1", "sanctuary-def": "0.14.0", + "sanctuary-descending": "1.0.0", "sanctuary-int": "*", "sanctuary-type-classes": "7.1.1", "sanctuary-type-identifiers": "2.0.1" diff --git a/scripts/eval.js b/scripts/eval.js index 492342c..5aea6e8 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -1,25 +1,31 @@ 'use strict'; -const vm = require('vm'); +const vm = require('vm'); -const R = require('ramda'); -const S = require('sanctuary'); -const $ = require('sanctuary-def'); -const Int = require('sanctuary-int'); -const Z = require('sanctuary-type-classes'); +const R = require('ramda'); +const S = require('sanctuary'); +const $ = require('sanctuary-def'); +const Descending = require('sanctuary-descending'); +const Int = require('sanctuary-int'); +const Z = require('sanctuary-type-classes'); +const type = require('sanctuary-type-identifiers'); // Language :: Type const Language = $.EnumType('silly-goat/Language', '', ['javascript', 'text']); -// checkTypes :: Boolean -const checkTypes = true; - -// env :: Array Type -const env = Z.concat(S.env, [Language]); - // def :: String -> StrMap TypeClass -> Array Type -> Function -> Function -const def = $.create({checkTypes, env}); +const def = $.create({ + checkTypes: true, + env: S.env.concat([ + $.UnaryType + ('silly-goat/Descending') + ('https://github.com/sanctuary-js/sanctuary-descending') + (x => type(x) === 'sanctuary-descending/Descending@1') + (descending => [Z.extract(descending)]) + ($.Unknown), + ]), +}); // evaluate :: String -> Either String String const evaluate = @@ -34,7 +40,8 @@ def('evaluate', S.encaseEither3(S.prop('message'), S.curry3(vm.runInNewContext), code, - {$, Int, R, S, Z, console: {log}}, + {$, Descending, Int, R, S, Z, + console: {log}}, {timeout: 5000})); }); From dfb277ab45f760f0e327b6885dc133986f5b479e Mon Sep 17 00:00:00 2001 From: David Chambers Date: Tue, 29 May 2018 11:17:14 +0200 Subject: [PATCH 28/55] create custom Sanctuary module to permit the use of Descending --- scripts/eval.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/scripts/eval.js b/scripts/eval.js index 5aea6e8..70e91c6 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -3,7 +3,7 @@ const vm = require('vm'); const R = require('ramda'); -const S = require('sanctuary'); +const S_ = require('sanctuary'); const $ = require('sanctuary-def'); const Descending = require('sanctuary-descending'); const Int = require('sanctuary-int'); @@ -14,18 +14,24 @@ const type = require('sanctuary-type-identifiers'); // Language :: Type const Language = $.EnumType('silly-goat/Language', '', ['javascript', 'text']); +// env :: Array Type +const env = S_.env.concat([ + $.UnaryType + ('silly-goat/Descending') + ('https://github.com/sanctuary-js/sanctuary-descending') + (x => type(x) === 'sanctuary-descending/Descending@1') + (descending => [Z.extract(descending)]) + ($.Unknown), +]); + +// opts :: { checkTypes :: Boolean, env :: Array Type } +const opts = {checkTypes: true, env}; + +// S :: Module +const S = S_.create(opts); + // def :: String -> StrMap TypeClass -> Array Type -> Function -> Function -const def = $.create({ - checkTypes: true, - env: S.env.concat([ - $.UnaryType - ('silly-goat/Descending') - ('https://github.com/sanctuary-js/sanctuary-descending') - (x => type(x) === 'sanctuary-descending/Descending@1') - (descending => [Z.extract(descending)]) - ($.Unknown), - ]), -}); +const def = $.create(opts); // evaluate :: String -> Either String String const evaluate = From b784072612dada6d5340338fc73516654c949740 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Tue, 29 May 2018 11:46:29 +0200 Subject: [PATCH 29/55] sanctuary-style@2.0.x --- package.json | 4 +-- scripts/eval.js | 79 +++++++++++++++++++++++---------------------- scripts/versions.js | 23 +++++++------ 3 files changed, 55 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index 794cfef..5dd8ce9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "silly-goat", "private": true, "scripts": { - "lint": "eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node --report-unused-disable-directives --rule 'func-call-spacing: [off]' --rule 'indent: [off]' --rule 'no-unexpected-multiline: [off]' --rule 'object-property-newline: [off]' -- scripts", + "lint": "eslint --config node_modules/sanctuary-style/eslint-es6.json --env es6 --env node --report-unused-disable-directives -- scripts", "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { @@ -18,6 +18,6 @@ }, "devDependencies": { "eslint": "4.9.x", - "sanctuary-style": "1.0.x" + "sanctuary-style": "2.0.x" } } diff --git a/scripts/eval.js b/scripts/eval.js index 70e91c6..890ba33 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -1,26 +1,23 @@ 'use strict'; -const vm = require('vm'); +const vm = require ('vm'); -const R = require('ramda'); -const S_ = require('sanctuary'); -const $ = require('sanctuary-def'); -const Descending = require('sanctuary-descending'); -const Int = require('sanctuary-int'); -const Z = require('sanctuary-type-classes'); -const type = require('sanctuary-type-identifiers'); +const R = require ('ramda'); +const S_ = require ('sanctuary'); +const $ = require ('sanctuary-def'); +const Descending = require ('sanctuary-descending'); +const Int = require ('sanctuary-int'); +const Z = require ('sanctuary-type-classes'); +const type = require ('sanctuary-type-identifiers'); -// Language :: Type -const Language = $.EnumType('silly-goat/Language', '', ['javascript', 'text']); - // env :: Array Type -const env = S_.env.concat([ +const env = S_.env.concat ([ $.UnaryType ('silly-goat/Descending') ('https://github.com/sanctuary-js/sanctuary-descending') - (x => type(x) === 'sanctuary-descending/Descending@1') - (descending => [Z.extract(descending)]) + (x => type (x) === 'sanctuary-descending/Descending@1') + (descending => [Z.extract (descending)]) ($.Unknown), ]); @@ -28,46 +25,50 @@ const env = S_.env.concat([ const opts = {checkTypes: true, env}; // S :: Module -const S = S_.create(opts); +const S = S_.create (opts); // def :: String -> StrMap TypeClass -> Array Type -> Function -> Function -const def = $.create(opts); +const def = $.create (opts); // evaluate :: String -> Either String String const evaluate = -def('evaluate', - {}, - [$.String, S.EitherType($.String, $.String)], - code => { - const logs = []; - const log = (...args) => { logs.push(args.map(String).join(', ')); }; - return S.map(x => S.unlines(S.map(S.concat('log: '), logs)) + - S.toString(x), - S.encaseEither3(S.prop('message'), - S.curry3(vm.runInNewContext), - code, - {$, Descending, Int, R, S, Z, - console: {log}}, - {timeout: 5000})); - }); +def ('evaluate', + {}, + [$.String, S.EitherType ($.String, $.String)], + code => { + const logs = []; + const log = (...args) => { + logs.push ((args.map (String)).join (', ')); + }; + /* eslint-disable object-property-newline */ + return S.map (x => S.unlines (S.map (S.concat ('log: '), logs)) + + S.toString (x), + S.encaseEither3 (S.prop ('message'), + S.curry3 (vm.runInNewContext), + code, + {$, Descending, Int, R, S, Z, + console: {log}}, + {timeout: 5000})); + /* eslint-enable object-property-newline */ + }); // backticks :: String const backticks = '```'; // formatCodeBlock :: String -> String -> String const formatCodeBlock = -def('formatCodeBlock', - {}, - [Language, $.String, $.String], - (lang, code) => `${backticks}${lang}\n${code}\n${backticks}`); +def ('formatCodeBlock', + {}, + [$.String, $.String, $.String], + (lang, code) => `${backticks}${lang}\n${code}\n${backticks}`); module.exports = bot => { - bot.respond(/```(?:javascript|js)?$([\s\S]*)```/m, res => { - res.send(S.either(formatCodeBlock('text'), - formatCodeBlock('javascript'), - evaluate(res.match[1]))); + bot.respond (/```(?:javascript|js)?$([\s\S]*)```/m, res => { + res.send (S.either (formatCodeBlock ('text'), + formatCodeBlock ('javascript'), + evaluate (res.match[1]))); }); }; diff --git a/scripts/versions.js b/scripts/versions.js index bd8743a..c65db04 100644 --- a/scripts/versions.js +++ b/scripts/versions.js @@ -1,20 +1,23 @@ 'use strict'; -const S = require('sanctuary'); +const S = require ('sanctuary'); -const pkg = require('../package.json'); +const pkg = require ('../package.json'); // deps :: { hubot :: Array String, other :: Array String } -const deps = S.keys(pkg.dependencies).sort().reduce(($acc, name) => { - $acc[/^hubot(-|$)/.test(name) ? 'hubot' : 'other'].push(name); - return $acc; -}, {hubot: [], other: []}); +const deps = +S.reduce ($acc => name => { + $acc[/^hubot(-|$)/.test (name) ? 'hubot' : 'other'].push (name); + return $acc; + }) + ({hubot: [], other: []}); + (S.sort (S.keys (pkg.dependencies))); // version :: String -> String const version = name => { const v = pkg.dependencies[name]; - return `${name}@${v === '*' ? require(`${name}/package.json`).version : v}`; + return `${name}@${v === '*' ? require (`${name}/package.json`).version : v}`; }; // backticks :: String @@ -25,14 +28,14 @@ const versions = `${backticks}text Node ${process.version} -${S.joinWith('\n', S.map(version, deps.hubot))} +${S.joinWith ('\n', S.map (version, deps.hubot))} -${S.joinWith('\n', S.map(version, deps.other))} +${S.joinWith ('\n', S.map (version, deps.other))} ${backticks}`; module.exports = bot => { - bot.respond(/versions/, res => { res.send(versions); }); + bot.respond (/versions/, res => { res.send (versions); }); }; From db753518809d9b21eff82c6ba3b39cf7ea0420d1 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Thu, 7 Jun 2018 23:41:31 -0700 Subject: [PATCH 30/55] sanctuary-identity@1.0.0 --- package.json | 1 + scripts/eval.js | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 5dd8ce9..5a67133 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "sanctuary": "0.14.1", "sanctuary-def": "0.14.0", "sanctuary-descending": "1.0.0", + "sanctuary-identity": "1.0.0", "sanctuary-int": "*", "sanctuary-type-classes": "7.1.1", "sanctuary-type-identifiers": "2.0.1" diff --git a/scripts/eval.js b/scripts/eval.js index 890ba33..2fbbf63 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -6,6 +6,7 @@ const R = require ('ramda'); const S_ = require ('sanctuary'); const $ = require ('sanctuary-def'); const Descending = require ('sanctuary-descending'); +const Identity = require ('sanctuary-identity'); const Int = require ('sanctuary-int'); const Z = require ('sanctuary-type-classes'); const type = require ('sanctuary-type-identifiers'); @@ -19,6 +20,12 @@ const env = S_.env.concat ([ (x => type (x) === 'sanctuary-descending/Descending@1') (descending => [Z.extract (descending)]) ($.Unknown), + $.UnaryType + ('silly-goat/Identity') + ('https://github.com/sanctuary-js/sanctuary-identity') + (x => type (x) === 'sanctuary-identity/Identity@1') + (identity => [Z.extract (identity)]) + ($.Unknown), ]); // opts :: { checkTypes :: Boolean, env :: Array Type } @@ -46,7 +53,7 @@ def ('evaluate', S.encaseEither3 (S.prop ('message'), S.curry3 (vm.runInNewContext), code, - {$, Descending, Int, R, S, Z, + {$, Descending, Identity, Int, R, S, Z, console: {log}}, {timeout: 5000})); /* eslint-enable object-property-newline */ From 6f961bdb1dad29e11b9db9492f92daeb776bfe75 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Fri, 8 Jun 2018 01:41:20 -0700 Subject: [PATCH 31/55] sanctuary@0.15.0 --- package.json | 6 +++--- scripts/eval.js | 40 ++++++++++++++++++++-------------------- scripts/versions.js | 4 ++-- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index 5a67133..6e400b9 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,12 @@ "hubot": "2.19.0", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "0.14.1", - "sanctuary-def": "0.14.0", + "sanctuary": "0.15.0", + "sanctuary-def": "0.18.1", "sanctuary-descending": "1.0.0", "sanctuary-identity": "1.0.0", "sanctuary-int": "*", - "sanctuary-type-classes": "7.1.1", + "sanctuary-type-classes": "9.0.0", "sanctuary-type-identifiers": "2.0.1" }, "devDependencies": { diff --git a/scripts/eval.js b/scripts/eval.js index 2fbbf63..68c2ec4 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -39,23 +39,23 @@ const def = $.create (opts); // evaluate :: String -> Either String String const evaluate = -def ('evaluate', - {}, - [$.String, S.EitherType ($.String, $.String)], - code => { +def ('evaluate') + ({}) + ([$.String, S.EitherType ($.String) ($.String)]) + (code => { const logs = []; const log = (...args) => { - logs.push ((args.map (String)).join (', ')); + logs.push (S.joinWith (', ') (S.map (String) (args))); }; /* eslint-disable object-property-newline */ - return S.map (x => S.unlines (S.map (S.concat ('log: '), logs)) + - S.toString (x), - S.encaseEither3 (S.prop ('message'), - S.curry3 (vm.runInNewContext), - code, - {$, Descending, Identity, Int, R, S, Z, - console: {log}}, - {timeout: 5000})); + return S.map (x => S.unlines (S.map (S.concat ('log: ')) (logs)) + + S.show (x)) + (S.encaseEither3 (S.prop ('message')) + (S.curry3 (vm.runInNewContext)) + (code) + ({$, Descending, Identity, Int, R, S, Z, + console: {log}}) + ({timeout: 5000})); /* eslint-enable object-property-newline */ }); @@ -64,18 +64,18 @@ const backticks = '```'; // formatCodeBlock :: String -> String -> String const formatCodeBlock = -def ('formatCodeBlock', - {}, - [$.String, $.String, $.String], - (lang, code) => `${backticks}${lang}\n${code}\n${backticks}`); +def ('formatCodeBlock') + ({}) + ([$.String, $.String, $.String]) + (lang => code => `${backticks}${lang}\n${code}\n${backticks}`); module.exports = bot => { bot.respond (/```(?:javascript|js)?$([\s\S]*)```/m, res => { - res.send (S.either (formatCodeBlock ('text'), - formatCodeBlock ('javascript'), - evaluate (res.match[1]))); + res.send (S.either (formatCodeBlock ('text')) + (formatCodeBlock ('javascript')) + (evaluate (res.match[1]))); }); }; diff --git a/scripts/versions.js b/scripts/versions.js index c65db04..28245e4 100644 --- a/scripts/versions.js +++ b/scripts/versions.js @@ -28,9 +28,9 @@ const versions = `${backticks}text Node ${process.version} -${S.joinWith ('\n', S.map (version, deps.hubot))} +${S.joinWith ('\n') (S.map (version) (deps.hubot))} -${S.joinWith ('\n', S.map (version, deps.other))} +${S.joinWith ('\n') (S.map (version) (deps.other))} ${backticks}`; From 098d45a92c496e26cb7e61860668b750338edac2 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Fri, 8 Jun 2018 01:44:18 -0700 Subject: [PATCH 32/55] hubot@3.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6e400b9..dcf44ca 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { - "hubot": "2.19.0", + "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", "sanctuary": "0.15.0", From 10e6b6020a6b3e21e07d124c4fb8a66958325840 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Fri, 8 Jun 2018 01:51:26 -0700 Subject: [PATCH 33/55] remove stray semicolon --- scripts/versions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/versions.js b/scripts/versions.js index 28245e4..77f7ff2 100644 --- a/scripts/versions.js +++ b/scripts/versions.js @@ -11,7 +11,7 @@ S.reduce ($acc => name => { $acc[/^hubot(-|$)/.test (name) ? 'hubot' : 'other'].push (name); return $acc; }) - ({hubot: [], other: []}); + ({hubot: [], other: []}) (S.sort (S.keys (pkg.dependencies))); // version :: String -> String From 31c46e552156624e5cf2c1857addf6e6131e2bee Mon Sep 17 00:00:00 2001 From: David Chambers Date: Thu, 29 Nov 2018 22:58:21 +0100 Subject: [PATCH 34/55] nodesource/node:10 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1464549..4fd5edc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM nodesource/node:6 +FROM nodesource/node:10 ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init From 37293c4772915a0aac43ce537c52726be666eb68 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Tue, 5 Feb 2019 20:45:26 +0100 Subject: [PATCH 35/55] add Fluture --- .npmrc | 1 + package.json | 2 ++ scripts/eval.js | 15 +++++++++++---- 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/package.json b/package.json index dcf44ca..92fe332 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,8 @@ "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { + "fluture": "10.3.1", + "fluture-sanctuary-types": "3.0.0", "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", diff --git a/scripts/eval.js b/scripts/eval.js index 68c2ec4..61dc348 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -2,6 +2,8 @@ const vm = require ('vm'); +const Future = require ('fluture'); +const fst = require ('fluture-sanctuary-types'); const R = require ('ramda'); const S_ = require ('sanctuary'); const $ = require ('sanctuary-def'); @@ -13,7 +15,7 @@ const type = require ('sanctuary-type-identifiers'); // env :: Array Type -const env = S_.env.concat ([ +const env = S_.env.concat (fst.env, [ $.UnaryType ('silly-goat/Descending') ('https://github.com/sanctuary-js/sanctuary-descending') @@ -47,16 +49,21 @@ def ('evaluate') const log = (...args) => { logs.push (S.joinWith (', ') (S.map (String) (args))); }; - /* eslint-disable object-property-newline */ return S.map (x => S.unlines (S.map (S.concat ('log: ')) (logs)) + S.show (x)) (S.encaseEither3 (S.prop ('message')) (S.curry3 (vm.runInNewContext)) (code) - ({$, Descending, Identity, Int, R, S, Z, + ({$, + Descending, + Future, + Identity, + Int, + R, + S, + Z, console: {log}}) ({timeout: 5000})); - /* eslint-enable object-property-newline */ }); // backticks :: String From de3b3b7b50fba377320c1758f35ff0b6e478772b Mon Sep 17 00:00:00 2001 From: David Chambers Date: Tue, 5 Feb 2019 20:55:22 +0100 Subject: [PATCH 36/55] support console.error --- scripts/eval.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/eval.js b/scripts/eval.js index 61dc348..3e9dde4 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -46,11 +46,10 @@ def ('evaluate') ([$.String, S.EitherType ($.String) ($.String)]) (code => { const logs = []; - const log = (...args) => { - logs.push (S.joinWith (', ') (S.map (String) (args))); + const log = level => (...args) => { + logs.push (level + ': ' + S.joinWith (', ') (S.map (String) (args))); }; - return S.map (x => S.unlines (S.map (S.concat ('log: ')) (logs)) + - S.show (x)) + return S.map (x => S.unlines (logs) + S.show (x)) (S.encaseEither3 (S.prop ('message')) (S.curry3 (vm.runInNewContext)) (code) @@ -62,7 +61,8 @@ def ('evaluate') R, S, Z, - console: {log}}) + console: {error: log ('error'), + log: log ('log')}}) ({timeout: 5000})); }); From 07ca507cd53efbeaf4057d075c8fa39137de0eb2 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 17 Feb 2019 10:16:10 +0100 Subject: [PATCH 37/55] sanctuary@0.15.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 92fe332..2e4fea5 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "0.15.0", + "sanctuary": "0.15.1", "sanctuary-def": "0.18.1", "sanctuary-descending": "1.0.0", "sanctuary-identity": "1.0.0", From c7d7b2e9d7146981de3f4e42c7be0230249c5d9d Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 10 Mar 2019 00:21:44 +0100 Subject: [PATCH 38/55] sanctuary@1.0.0 --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2e4fea5..3d56232 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,12 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "0.15.1", - "sanctuary-def": "0.18.1", - "sanctuary-descending": "1.0.0", - "sanctuary-identity": "1.0.0", + "sanctuary": "1.0.0", + "sanctuary-def": "0.19.0", + "sanctuary-descending": "1.1.0", + "sanctuary-identity": "1.1.0", "sanctuary-int": "*", - "sanctuary-type-classes": "9.0.0", + "sanctuary-type-classes": "10.0.0", "sanctuary-type-identifiers": "2.0.1" }, "devDependencies": { From 239589c18a79bd7651ee61f874447853bb76bb68 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 10 Mar 2019 00:23:07 +0100 Subject: [PATCH 39/55] sanctuary-style@3.0.x --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3d56232..830f513 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "sanctuary-type-identifiers": "2.0.1" }, "devDependencies": { - "eslint": "4.9.x", - "sanctuary-style": "2.0.x" + "eslint": "5.15.x", + "sanctuary-style": "3.0.x" } } From 68b33d3da401559fa6cd51651d9fd8aad4b79e21 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Fri, 5 Apr 2019 14:18:05 +0200 Subject: [PATCH 40/55] sanctuary@1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 830f513..f311313 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "1.0.0", + "sanctuary": "1.1.0", "sanctuary-def": "0.19.0", "sanctuary-descending": "1.1.0", "sanctuary-identity": "1.1.0", From 856313fca531e3f81ff1618f4fd6e350cbd8b1b8 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sat, 27 Apr 2019 23:00:06 +0200 Subject: [PATCH 41/55] sanctuary@2.0.0 --- package.json | 14 ++++++++----- scripts/eval.js | 56 +++++++++++++++++-------------------------------- 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index f311313..db982c1 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,16 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "1.1.0", - "sanctuary-def": "0.19.0", - "sanctuary-descending": "1.1.0", - "sanctuary-identity": "1.1.0", + "sanctuary": "2.0.0", + "sanctuary-def": "0.20.0", + "sanctuary-descending": "1.2.0", + "sanctuary-either": "1.2.0", + "sanctuary-identity": "1.2.0", "sanctuary-int": "*", - "sanctuary-type-classes": "10.0.0", + "sanctuary-maybe": "1.2.0", + "sanctuary-pair": "1.2.0", + "sanctuary-show": "1.0.0", + "sanctuary-type-classes": "11.0.0", "sanctuary-type-identifiers": "2.0.1" }, "devDependencies": { diff --git a/scripts/eval.js b/scripts/eval.js index 3e9dde4..fe3bb92 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -3,38 +3,20 @@ const vm = require ('vm'); const Future = require ('fluture'); -const fst = require ('fluture-sanctuary-types'); const R = require ('ramda'); -const S_ = require ('sanctuary'); +const {create} = require ('sanctuary'); const $ = require ('sanctuary-def'); const Descending = require ('sanctuary-descending'); const Identity = require ('sanctuary-identity'); const Int = require ('sanctuary-int'); const Z = require ('sanctuary-type-classes'); -const type = require ('sanctuary-type-identifiers'); -// env :: Array Type -const env = S_.env.concat (fst.env, [ - $.UnaryType - ('silly-goat/Descending') - ('https://github.com/sanctuary-js/sanctuary-descending') - (x => type (x) === 'sanctuary-descending/Descending@1') - (descending => [Z.extract (descending)]) - ($.Unknown), - $.UnaryType - ('silly-goat/Identity') - ('https://github.com/sanctuary-js/sanctuary-identity') - (x => type (x) === 'sanctuary-identity/Identity@1') - (identity => [Z.extract (identity)]) - ($.Unknown), -]); - // opts :: { checkTypes :: Boolean, env :: Array Type } -const opts = {checkTypes: true, env}; +const opts = {checkTypes: true, env: $.env}; // S :: Module -const S = S_.create (opts); +const S = create (opts); // def :: String -> StrMap TypeClass -> Array Type -> Function -> Function const def = $.create (opts); @@ -43,27 +25,27 @@ const def = $.create (opts); const evaluate = def ('evaluate') ({}) - ([$.String, S.EitherType ($.String) ($.String)]) + ([$.String, $.Either ($.String) ($.String)]) (code => { const logs = []; const log = level => (...args) => { logs.push (level + ': ' + S.joinWith (', ') (S.map (String) (args))); }; - return S.map (x => S.unlines (logs) + S.show (x)) - (S.encaseEither3 (S.prop ('message')) - (S.curry3 (vm.runInNewContext)) - (code) - ({$, - Descending, - Future, - Identity, - Int, - R, - S, - Z, - console: {error: log ('error'), - log: log ('log')}}) - ({timeout: 5000})); + return S.bimap (S.prop ('message')) + (x => S.unlines (logs) + S.show (x)) + (S.encase (S.curry3 (vm.runInNewContext) + (code) + ({$, + Descending, + Future, + Identity, + Int, + R, + S, + Z, + console: {error: log ('error'), + log: log ('log')}})) + ({timeout: 5000})); }); // backticks :: String From e54022b6aa1299c030a2c4c0cf759789263f27b0 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Thu, 24 Oct 2019 15:12:15 +0200 Subject: [PATCH 42/55] sanctuary-useless@1.1.0 --- package.json | 3 ++- scripts/eval.js | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index db982c1..9624bd4 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "sanctuary-pair": "1.2.0", "sanctuary-show": "1.0.0", "sanctuary-type-classes": "11.0.0", - "sanctuary-type-identifiers": "2.0.1" + "sanctuary-type-identifiers": "2.0.1", + "sanctuary-useless": "1.1.0" }, "devDependencies": { "eslint": "5.15.x", diff --git a/scripts/eval.js b/scripts/eval.js index fe3bb92..4fb1bbf 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -10,10 +10,24 @@ const Descending = require ('sanctuary-descending'); const Identity = require ('sanctuary-identity'); const Int = require ('sanctuary-int'); const Z = require ('sanctuary-type-classes'); +const type = require ('sanctuary-type-identifiers'); +const Useless = require ('sanctuary-useless'); +const Useless$pkg = require ('sanctuary-useless/package.json'); +// $Useless :: Type +const $Useless = $.NullaryType + ('Useless') + ('https://github.com/sanctuary-js/sanctuary-useless/tree/v' + + Useless$pkg.version) + ([]) + (x => type (x) === Useless.constructor['@@type']); + +// env :: Array Type +const env = $.env.concat ([$Useless]); + // opts :: { checkTypes :: Boolean, env :: Array Type } -const opts = {checkTypes: true, env: $.env}; +const opts = {checkTypes: true, env}; // S :: Module const S = create (opts); @@ -42,6 +56,7 @@ def ('evaluate') Int, R, S, + Useless, Z, console: {error: log ('error'), log: log ('log')}})) From fd9b8f704925b7f4829b5f1e5ed5150b927d9c01 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 4 Nov 2019 00:35:19 +0100 Subject: [PATCH 43/55] sanctuary@2.0.1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9624bd4..2627f73 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "2.0.0", - "sanctuary-def": "0.20.0", + "sanctuary": "2.0.1", + "sanctuary-def": "0.20.1", "sanctuary-descending": "1.2.0", "sanctuary-either": "1.2.0", "sanctuary-identity": "1.2.0", From 8c7ce107f848d68224129b58d9581f475adbc74a Mon Sep 17 00:00:00 2001 From: David Chambers Date: Wed, 1 Jan 2020 15:07:40 +0100 Subject: [PATCH 44/55] add FUNDING.yml --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..ef08538 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [davidchambers] From 2513588c6f4e3fbdf36b774e7b9b1e30197c965f Mon Sep 17 00:00:00 2001 From: David Chambers Date: Thu, 2 Jan 2020 23:53:11 +0100 Subject: [PATCH 45/55] circle: housekeeping --- .circleci/config.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f23d7cd..80eeb2b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,11 @@ -version: 2 +version: 2.1 jobs: build: docker: - - image: circleci/node:6 + - image: circleci/node:12 environment: NPM_CONFIG_COLOR: false - NPM_CONFIG_LOGLEVEL: warn - NPM_CONFIG_PROGRESS: false parallelism: 1 steps: - checkout From a339cd2c110386d011ee8259f4f1c85497a08207 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Fri, 3 Jan 2020 11:30:45 +0100 Subject: [PATCH 46/55] sanctuary-style@4.0.x --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 2627f73..41b1f6f 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "sanctuary-useless": "1.1.0" }, "devDependencies": { - "eslint": "5.15.x", - "sanctuary-style": "3.0.x" + "eslint": "6.8.x", + "sanctuary-style": "4.0.x" } } From 02d4eb33dd41c3d36904a70d42af71114737820a Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 13 Jan 2020 22:39:22 +0100 Subject: [PATCH 47/55] sanctuary@2.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 41b1f6f..c21e34b 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "2.0.1", + "sanctuary": "2.0.2", "sanctuary-def": "0.20.1", "sanctuary-descending": "1.2.0", "sanctuary-either": "1.2.0", From 23dafdb3e9bef251e97bf1b34ebd135f958bd2b3 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 20 Jan 2020 01:35:57 +0100 Subject: [PATCH 48/55] sanctuary@3.0.0 --- package.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index c21e34b..82e094d 100644 --- a/package.json +++ b/package.json @@ -11,18 +11,18 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "2.0.2", - "sanctuary-def": "0.20.1", - "sanctuary-descending": "1.2.0", - "sanctuary-either": "1.2.0", - "sanctuary-identity": "1.2.0", + "sanctuary": "3.0.0", + "sanctuary-def": "0.21.1", + "sanctuary-descending": "2.1.0", + "sanctuary-either": "2.1.0", + "sanctuary-identity": "2.1.0", "sanctuary-int": "*", - "sanctuary-maybe": "1.2.0", - "sanctuary-pair": "1.2.0", - "sanctuary-show": "1.0.0", - "sanctuary-type-classes": "11.0.0", - "sanctuary-type-identifiers": "2.0.1", - "sanctuary-useless": "1.1.0" + "sanctuary-maybe": "2.1.0", + "sanctuary-pair": "2.1.0", + "sanctuary-show": "2.0.0", + "sanctuary-type-classes": "12.1.0", + "sanctuary-type-identifiers": "3.0.0", + "sanctuary-useless": "2.0.1" }, "devDependencies": { "eslint": "6.8.x", From e298b7851bbeaa5f5632263a07808bbd188063ca Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 3 May 2020 23:48:25 +0200 Subject: [PATCH 49/55] fluture@12.2.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 82e094d..235fdb0 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "start": "PATH=\"node_modules/.bin:$PATH\" hubot --adapter gitter2 --alias / --name silly-goat" }, "dependencies": { - "fluture": "10.3.1", - "fluture-sanctuary-types": "3.0.0", + "fluture": "12.2.0", + "fluture-sanctuary-types": "6.0.0", "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", From 0527a55faa1b6ed77ed1afe641a2b1f472031c8b Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 4 May 2020 00:15:55 +0200 Subject: [PATCH 50/55] eval: use fluture-sanctuary-types --- scripts/eval.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/eval.js b/scripts/eval.js index 4fb1bbf..bbe1331 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -3,6 +3,7 @@ const vm = require ('vm'); const Future = require ('fluture'); +const fst = require ('fluture-sanctuary-types'); const R = require ('ramda'); const {create} = require ('sanctuary'); const $ = require ('sanctuary-def'); @@ -24,7 +25,7 @@ const $Useless = $.NullaryType (x => type (x) === Useless.constructor['@@type']); // env :: Array Type -const env = $.env.concat ([$Useless]); +const env = $.env.concat (fst.env.concat ([$Useless])); // opts :: { checkTypes :: Boolean, env :: Array Type } const opts = {checkTypes: true, env}; From f521a3a8e991a060b559475fd45ad2d24ea408be Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 4 May 2020 00:26:40 +0200 Subject: [PATCH 51/55] eval: fix $Useless --- scripts/eval.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/eval.js b/scripts/eval.js index bbe1331..20b8c7d 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -22,7 +22,7 @@ const $Useless = $.NullaryType ('https://github.com/sanctuary-js/sanctuary-useless/tree/v' + Useless$pkg.version) ([]) - (x => type (x) === Useless.constructor['@@type']); + (x => type (x) === Useless['@@type']); // env :: Array Type const env = $.env.concat (fst.env.concat ([$Useless])); From 83aaf7060d082455be05412ae8df21b5592df46c Mon Sep 17 00:00:00 2001 From: David Chambers Date: Mon, 10 Aug 2020 07:03:06 +0200 Subject: [PATCH 52/55] sanctuary@3.1.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 235fdb0..6803cbf 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", - "sanctuary": "3.0.0", - "sanctuary-def": "0.21.1", + "sanctuary": "3.1.0", + "sanctuary-def": "0.22.0", "sanctuary-descending": "2.1.0", "sanctuary-either": "2.1.0", "sanctuary-identity": "2.1.0", From 0da6e3e3ee3fe3055954bd8aef88fdb7081f5436 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Tue, 4 May 2021 10:52:32 +0200 Subject: [PATCH 53/55] eval: use S.show to show logged values --- scripts/eval.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/eval.js b/scripts/eval.js index 20b8c7d..91f9025 100644 --- a/scripts/eval.js +++ b/scripts/eval.js @@ -44,7 +44,7 @@ def ('evaluate') (code => { const logs = []; const log = level => (...args) => { - logs.push (level + ': ' + S.joinWith (', ') (S.map (String) (args))); + logs.push (level + ': ' + S.joinWith (', ') (S.map (S.show) (args))); }; return S.bimap (S.prop ('message')) (x => S.unlines (logs) + S.show (x)) From 6e49b8f5ac948306b4f68013a2f361292ee9719f Mon Sep 17 00:00:00 2001 From: David Chambers Date: Wed, 6 Dec 2023 18:10:38 +0100 Subject: [PATCH 54/55] circle: update Node version --- .circleci/config.yml | 18 ++++++++++++------ package.json | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 80eeb2b..fd0d662 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,12 +1,18 @@ version: 2.1 +orbs: + node: circleci/node@5.1.0 + jobs: - build: - docker: - - image: circleci/node:12 - environment: - NPM_CONFIG_COLOR: false - parallelism: 1 + test: + executor: + name: node/default + tag: 20.0.0 steps: - checkout - run: npm install && npm run lint + +workflows: + test: + jobs: + - test diff --git a/package.json b/package.json index 6803cbf..f7c73ea 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "dependencies": { "fluture": "12.2.0", - "fluture-sanctuary-types": "6.0.0", + "fluture-sanctuary-types": "7.0.0", "hubot": "3.0.1", "hubot-gitter2": "1.0.0", "ramda": "*", From 5b1f69a288ebfa92ae843058da4cef21813bfafb Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 27 Oct 2024 12:54:53 +0100 Subject: [PATCH 55/55] circle: update Node version --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fd0d662..0a5953a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,13 @@ version: 2.1 orbs: - node: circleci/node@5.1.0 + node: circleci/node@6.3.0 jobs: test: executor: name: node/default - tag: 20.0.0 + tag: 22.0.0 steps: - checkout - run: npm install && npm run lint