From 00ed3da9c70c570cdd22ed62bd2599cdc68a7c0d Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Thu, 31 Mar 2022 11:25:27 -0500 Subject: [PATCH 01/24] Update changelog for last release --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36d46714..107b1972 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ Notable changes to this project are documented in this file. The format is based ## [Unreleased] +Breaking changes: + +New features: + +Bugfixes: + +Other improvements: + +## [v2022-02-25.1](https://github.com/purescript/trypurescript/releases/tag/v2022-02-25.1) + Breaking changes: - Update compiler to v0.14.7 (#271 by @JordanMartinez) From 098fb4239d223d1604682885d83f6a026f9a830b Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 12:14:18 -0500 Subject: [PATCH 02/24] Update purescript deps for 0.15.0; drop cst dep --- stack.yaml | 6 ++++-- stack.yaml.lock | 36 +++++++++++++++++++++++++----------- trypurescript.cabal | 1 - 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/stack.yaml b/stack.yaml index ebed98dc..0854b3a2 100644 --- a/stack.yaml +++ b/stack.yaml @@ -3,9 +3,11 @@ packages: - "." extra-deps: - - purescript-0.14.7 - - purescript-cst-0.5.0.0 + - purescript-0.15.0 - language-javascript-0.7.0.0 + - monoidal-containers-0.6.2.0 + - process-1.6.13.1 + - Cabal-3.2.1.0 flags: aeson-pretty: diff --git a/stack.yaml.lock b/stack.yaml.lock index 51ea3ced..2c128bae 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -5,19 +5,12 @@ packages: - completed: - hackage: purescript-0.14.7@sha256:8ae1f75de055c63d9dc43e646c98b92cca860ac7fc74b65c11d8e5007abfc37c,18677 + hackage: purescript-0.15.0@sha256:901d26379aa58203103244fe190e840babcff60fc712b595ae8cc80978ffb35c,20095 pantry-tree: - size: 135286 - sha256: 11941b228ff6e91d4c565a7bfb9a0aabe10797a3cbae9336a44798adb7aeb74f + size: 145589 + sha256: ba91174893b844de7093ddf71e815003c52b85b7ffe9dd289b4d35ddbb585a60 original: - hackage: purescript-0.14.7 -- completed: - hackage: purescript-cst-0.5.0.0@sha256:ac1935d9aa9cd99ec388255b35943b277b08bb5e36bf72ebb781b70e50862b6d,3851 - pantry-tree: - size: 3018 - sha256: 2ecc0a787d279fd0eb9e511cf1854d71c3ecc088054049614137fa27945bcd7f - original: - hackage: purescript-cst-0.5.0.0 + hackage: purescript-0.15.0 - completed: hackage: language-javascript-0.7.0.0@sha256:3eab0262b8ac5621936a4beab6a0f97d0e00a63455a8b0e3ac1547b4088dae7d,3898 pantry-tree: @@ -25,6 +18,27 @@ packages: sha256: b0f28d836cb3fbde203fd7318a896c3a20acd8653a905e1950ae2d9a64bccebf original: hackage: language-javascript-0.7.0.0 +- completed: + hackage: monoidal-containers-0.6.2.0@sha256:124941d70df5e2928b4c6db605a1d0464e68c2c6b02e426db24a40194d43821d,2219 + pantry-tree: + size: 569 + sha256: 07ceac751866bad09af45df7d0ae97420d659221e8a0d85407705dcda1f6e89b + original: + hackage: monoidal-containers-0.6.2.0 +- completed: + hackage: process-1.6.13.1@sha256:c8bb8b7c993ff72d771381b3b56852dd154bce51880a24789c11f57b0688d353,2963 + pantry-tree: + size: 1543 + sha256: 58117b15fa330c79b3bca6b29c65f815e45840f79cc0915d3434f25e54ac8fa5 + original: + hackage: process-1.6.13.1 +- completed: + hackage: Cabal-3.2.1.0@sha256:8743076ec022296f9771d962000c9ca3a0fe02e68c37b992c63e382a675f791d,27482 + pantry-tree: + size: 41224 + sha256: 92682a2aab8d967de341acff88525376eb9a31f53f094e0878c51c2886564f3a + original: + hackage: Cabal-3.2.1.0 snapshots: - completed: size: 586286 diff --git a/trypurescript.cabal b/trypurescript.cabal index 9894408a..0e54ac31 100644 --- a/trypurescript.cabal +++ b/trypurescript.cabal @@ -27,7 +27,6 @@ executable trypurescript Glob -any, scotty -any, purescript, - purescript-cst, containers -any, http-types -any, transformers -any, From 905d54d39e904e049701683e619f107f8fe1601c Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 12:16:12 -0500 Subject: [PATCH 03/24] Upgrade to latest pkg set; install entire set --- staging/packages.dhall | 4 +- staging/spago.dhall | 208 +---------------------------------------- 2 files changed, 7 insertions(+), 205 deletions(-) diff --git a/staging/packages.dhall b/staging/packages.dhall index f921381a..493c701e 100644 --- a/staging/packages.dhall +++ b/staging/packages.dhall @@ -1,5 +1,5 @@ let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.14.5-20220224/packages.dhall - sha256:67cc3d4f0e8fb72bb1413ba94ddd72a3ceb0783eb725e3b22ad7568b3b581163 + https://github.com/purescript/package-sets/releases/download/psc-0.15.0-20220429/packages.dhall + sha256:03c682bff56fc8f9d8c495ffcc6f524cbd3c89fe04778f965265c08757de8c9d in upstream diff --git a/staging/spago.dhall b/staging/spago.dhall index 21495641..2c796727 100644 --- a/staging/spago.dhall +++ b/staging/spago.dhall @@ -1,14 +1,13 @@ { name = "try-purescript-server" , dependencies = - [ "abides" - , "ace" + [ "ace" , "aff" , "aff-bus" , "aff-coroutines" , "aff-promise" - , "aff-retry" , "affjax" - , "amazons" + , "affjax-node" + , "affjax-web" , "ansi" , "argonaut" , "argonaut-codecs" @@ -19,53 +18,18 @@ , "arraybuffer-builder" , "arraybuffer-types" , "arrays" - , "arrays-zipper" , "ask" , "assert" , "avar" - , "aws-encryption-sdk" - , "aws-sdk-basic" - , "b64" , "barlow-lens" - , "basic-auth" , "bifunctors" - , "bigints" - , "bip39" - , "biscotti-cookie" - , "biscotti-session" , "bower-json" - , "boxes" - , "bucketchain" - , "bucketchain-basic-auth" - , "bucketchain-conditional" - , "bucketchain-cors" - , "bucketchain-csrf" - , "bucketchain-header-utils" - , "bucketchain-health" - , "bucketchain-history-api-fallback" - , "bucketchain-logger" - , "bucketchain-secure" - , "bucketchain-simple-api" - , "bucketchain-sslify" - , "bucketchain-static" - , "bytestrings" , "call-by-name" , "canvas" - , "canvas-action" - , "cartesian" , "catenable-lists" , "channel" - , "channel-stream" - , "checked-exceptions" - , "cheerio" - , "cirru-parser" - , "classnames" - , "clipboardy" , "codec" - , "codec-argonaut" , "colors" - , "concur-core" - , "concur-react" , "concurrent-queues" , "console" , "const" @@ -73,57 +37,30 @@ , "control" , "convertable-options" , "coroutines" - , "crypto" , "css" - , "cssom" , "datetime" - , "debug" - , "decimals" - , "dexie" , "dissect" , "distributive" , "dodo-printer" - , "dom-filereader" , "dom-indexed" - , "dotenv" - , "downloadjs" - , "drawing" - , "droplet" - , "dynamic-buffer" - , "easy-ffi" , "effect" , "either" - , "elasticsearch" - , "elmish" - , "elmish-enzyme" - , "elmish-hooks" - , "elmish-html" , "email-validate" - , "encoding" , "enums" - , "envparse" - , "errors" , "exceptions" , "exists" , "exitcodes" , "expect-inferred" - , "express" , "fast-vect" - , "ffi-foreign" , "filterable" , "fixed-points" - , "fixed-precision" - , "flame" , "float32" , "foldable-traversable" , "foreign" - , "foreign-generic" , "foreign-object" , "fork" , "form-urlencoded" - , "format" , "formatters" - , "framer-motion" , "free" , "freeap" , "freet" @@ -131,68 +68,35 @@ , "functors" , "fuzzy" , "gen" - , "geometry-plane" , "github-actions-toolkit" - , "gl-matrix" - , "gomtang-basic" - , "grain" - , "grain-router" - , "grain-virtualized" - , "graphql-client" - , "graphqlclient" , "graphs" - , "grid-reactors" , "group" , "halogen" - , "halogen-bootstrap4" , "halogen-css" - , "halogen-formless" - , "halogen-hooks" - , "halogen-hooks-extra" - , "halogen-select" - , "halogen-store" - , "halogen-storybook" , "halogen-subscriptions" - , "halogen-svg-elems" , "halogen-vdom" + , "halogen-vdom-string-renderer" , "heckin" - , "heterogeneous" - , "heterogeneous-extrablatt" - , "homogeneous" , "http-methods" - , "httpure" - , "httpure-contrib-biscotti" , "identity" - , "identy" , "indexed-monad" - , "inflection" , "integers" - , "interpolate" , "invariant" , "js-date" - , "js-fileio" , "js-timers" , "js-uri" , "justifill" - , "jwt" - , "kafkajs" , "lazy" , "lcg" , "leibniz" , "lists" - , "literals" , "logging" - , "longs" , "machines" - , "makkori" - , "math" , "matrices" , "matryoshka" , "maybe" , "media-types" , "metadata" - , "midi" - , "milkis" , "minibench" , "mmorph" , "monad-control" @@ -200,10 +104,7 @@ , "monad-loops" , "monad-unlift" , "monoidal" - , "morello" , "motsunabe" - , "mysql" - , "nano-id" , "naturals" , "nested-functor" , "newtype" @@ -211,17 +112,13 @@ , "node-child-process" , "node-fs" , "node-fs-aff" - , "node-he" , "node-http" , "node-net" , "node-path" - , "node-postgres" , "node-process" , "node-readline" - , "node-sqlite3" , "node-streams" , "node-url" - , "nodemailer" , "nonempty" , "now" , "npm-package-json" @@ -229,49 +126,27 @@ , "numbers" , "open-folds" , "open-memoize" - , "open-mkdirp-aff" , "open-pairing" - , "option" , "options" - , "options-extra" - , "optparse" , "ordered-collections" , "ordered-set" , "orders" - , "owoify" , "pairs" , "parallel" , "parsing" - , "parsing-dataview" - , "parsing-expect" - , "parsing-repetition" - , "parsing-replace" - , "parsing-validation" , "partial" , "pathy" - , "payload" - , "phaser" - , "phoenix" , "pipes" , "point-free" - , "polymorphic-vectors" , "posix-types" , "precise" - , "precise-datetime" , "prelude" - , "prettier" , "prettier-printer" - , "pretty-logs" , "profunctor" , "profunctor-lenses" - , "promises" - , "protobuf" , "ps-cst" , "psa-utils" - , "psc-ide" , "psci-support" - , "quantities" - , "queue" , "quickcheck" , "quickcheck-combinators" , "quickcheck-laws" @@ -279,121 +154,57 @@ , "quotient" , "random" , "rationals" - , "rave" , "react" - , "react-basic" - , "react-basic-classic" - , "react-basic-dnd" - , "react-basic-dom" - , "react-basic-emotion" - , "react-basic-hooks" , "react-dom" - , "react-enzyme" - , "react-halo" - , "react-queue" - , "react-testing-library" , "read" , "record" - , "record-extra" - , "record-extra-srghma" - , "redux-devtools" , "refined" , "refs" , "remotedata" , "resource" , "resourcet" , "result" - , "return" , "ring-modules" , "routing" - , "routing-duplex" - , "row-extra" - , "run" - , "run-external-state" - , "rxps" , "safe-coerce" , "safely" - , "scrypt" , "selection-foldable" , "semirings" - , "server-sent-events" - , "setimmediate" - , "signal" - , "simple-ajax" , "simple-emitter" - , "simple-i18n" - , "simple-json" - , "simple-jwt" - , "simple-ulid" , "sized-matrices" , "sized-vectors" , "slug" - , "snabbdom" - , "sodium" - , "soundfonts" - , "sparse-matrices" - , "sparse-polynomials" , "spec" , "spec-discovery" - , "spec-mocha" - , "spec-quickcheck" - , "spork" , "st" , "strictlypositiveint" , "string-parsers" , "strings" , "strings-extra" - , "stringutils" - , "subcategory" - , "substitute" - , "subtlecrypto" - , "suggest" - , "sunde" , "supply" - , "systemd-journald" , "tailrec" - , "test-unit" - , "text-encoding" , "thermite" , "thermite-dom" , "these" - , "toppokki" , "transformers" , "tree-rose" , "tuples" - , "turf" , "two-or-more" , "type-equality" - , "typedenv" , "typelevel" - , "typelevel-arithmetic" , "typelevel-lists" , "typelevel-peano" , "typelevel-prelude" , "typelevel-rows" , "uint" - , "ulid" - , "undefinable" - , "undefined" - , "undefined-is-not-a-problem" - , "undefined-or" , "unfoldable" , "unicode" - , "unordered-collections" - , "unorm" + , "unlift" , "unsafe-coerce" , "unsafe-reference" - , "untagged-to-tagged" - , "untagged-union" , "uri" - , "url-regex-safe" - , "uuid" , "validation" - , "variant" , "vectorfield" - , "veither" - , "versions" - , "vexceptt" , "web-clipboard" , "web-cssom" , "web-dom" @@ -405,21 +216,12 @@ , "web-file" , "web-html" , "web-promise" - , "web-resize-observer" , "web-socket" - , "web-speech" , "web-storage" , "web-streams" , "web-touchevents" , "web-uievents" - , "web-url" , "web-xhr" - , "which" - , "yaml-next" - , "yargs" - , "zeta" - , "zeta-extra" - , "zipperarray" ] , packages = ./packages.dhall , sources = [ "src/**/*.purs" ] From 38800749002f5304a27ebe9e08caaba627d1c454 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 12:25:26 -0500 Subject: [PATCH 04/24] Get server code to compile --- server/Main.hs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/Main.hs b/server/Main.hs index c3beddab..8434aa32 100644 --- a/server/Main.hs +++ b/server/Main.hs @@ -80,6 +80,7 @@ buildMakeActions codegenRef = progress readCacheDb writeCacheDb + writePackageJson outputPrimDocs where getInputTimestampsAndHashes :: P.ModuleName -> Make.Make (Either Make.RebuildPolicy (M.Map FilePath (UTCTime, Make.Make Cache.ContentHash))) @@ -110,6 +111,9 @@ buildMakeActions codegenRef = writeCacheDb :: Cache.CacheDb -> Make.Make () writeCacheDb _ = pure () + writePackageJson :: Make.Make () + writePackageJson = pure () + outputPrimDocs :: Make.Make () outputPrimDocs = pure () From 37cf79a31f08b300fca42939bf2f9ca30c2c72c9 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 12:27:27 -0500 Subject: [PATCH 05/24] Migrated FFI to ES modules via 'lebab' --- staging/src/TryPureScript.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/staging/src/TryPureScript.js b/staging/src/TryPureScript.js index 98800074..8144627c 100644 --- a/staging/src/TryPureScript.js +++ b/staging/src/TryPureScript.js @@ -1,12 +1,12 @@ "use strict"; -exports.setInnerHTML = function(html) { +export function setInnerHTML(html) { return function() { document.body.innerHTML += html; }; -}; +} -exports.withConsoleImpl = function(f) { +export function withConsoleImpl(f) { return function() { var oldLog = console.log; var oldError = console.error; @@ -34,4 +34,4 @@ exports.withConsoleImpl = function(f) { return lines; }; -}; +} From db555408bc3f257d8295499024760430c454e870 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 12:27:27 -0500 Subject: [PATCH 06/24] Removed '"use strict";' in FFI files --- staging/src/TryPureScript.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/staging/src/TryPureScript.js b/staging/src/TryPureScript.js index 8144627c..ae07ec8a 100644 --- a/staging/src/TryPureScript.js +++ b/staging/src/TryPureScript.js @@ -1,5 +1,3 @@ -"use strict"; - export function setInnerHTML(html) { return function() { document.body.innerHTML += html; From 479619b16bcd1f3a7c7822595017c2f32357dc49 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 12:30:47 -0500 Subject: [PATCH 07/24] Remove redundant import --- client/src/Try/Loader.purs | 1 - 1 file changed, 1 deletion(-) diff --git a/client/src/Try/Loader.purs b/client/src/Try/Loader.purs index 9d38695f..3b6bbecb 100644 --- a/client/src/Try/Loader.purs +++ b/client/src/Try/Loader.purs @@ -9,7 +9,6 @@ import Prelude import Control.Bind (bindFlipped) import Control.Monad.Except (ExceptT, throwError) import Control.Parallel (parTraverse) -import Data.Array (foldMap) import Data.Array as Array import Data.Array.NonEmpty as NonEmpty import Data.Maybe (Maybe(..), fromMaybe) From 52dc624c93d0f71025917a8ef579631a54986f2a Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 15:38:23 -0500 Subject: [PATCH 08/24] Update to 0.15.0 for client --- client/package.json | 6 +++--- client/packages.dhall | 22 +++++++--------------- client/spago.dhall | 6 +++--- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/client/package.json b/client/package.json index fc071535..20b10946 100644 --- a/client/package.json +++ b/client/package.json @@ -9,9 +9,9 @@ "build:production": "spago bundle-app --path config/prod/Try.Config.purs --purs-args '--censor-lib --strict' --to public/js/index.js" }, "devDependencies": { - "purescript": "^0.13.6", - "purescript-psa": "^0.7.3", + "purescript": "^0.15.0", + "purescript-psa": "^0.8.2", "rimraf": "^2.5.4", - "spago": "^0.14.0" + "spago": "^0.20.8" } } diff --git a/client/packages.dhall b/client/packages.dhall index 75331a36..1c8054ef 100644 --- a/client/packages.dhall +++ b/client/packages.dhall @@ -1,22 +1,14 @@ let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.13.6-20200404/packages.dhall sha256:f239f2e215d0cbd5c203307701748581938f74c4c78f4aeffa32c11c131ef7b6 + https://github.com/purescript/package-sets/releases/download/psc-0.15.0-20220429/packages.dhall + sha256:03c682bff56fc8f9d8c495ffcc6f524cbd3c89fe04778f965265c08757de8c9d let additions = - { ace = - { repo = "https://github.com/purescript-contrib/purescript-ace.git" - , version = "v7.0.0" + { debug = + { repo = "https://github.com/working-group-purescript-es/purescript-debug.git" + , version = "v0.15.0-update" , dependencies = - [ "arrays" - , "console" - , "effect" - , "foreign" - , "nullable" - , "prelude" - , "refs" - , "web-html" - , "web-uievents" - ] + [ "console", "effect", "functions", "prelude" ] } - } + } in upstream // additions diff --git a/client/spago.dhall b/client/spago.dhall index d8c65090..862603b5 100644 --- a/client/spago.dhall +++ b/client/spago.dhall @@ -3,6 +3,7 @@ [ "ace" , "aff" , "affjax" + , "affjax-web" , "argonaut-codecs" , "arrays" , "assert" @@ -18,12 +19,11 @@ , "foreign-object" , "functions" , "functors" - , "globals" , "halogen" , "identity" , "integers" , "js-timers" - , "math" + , "js-uri" , "maybe" , "node-fs" , "ordered-collections" @@ -41,5 +41,5 @@ , "web-html" ] , packages = ./packages.dhall -, sources = [ "src/**/*.purs", "test/**/*.purs" ] +, sources = [ "src/**/*.purs", "config/dev/**/*.purs", "test/**/*.purs" ] } From 473ca2025321d27b2ded054f8aebaaaeddd34680 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 15:39:13 -0500 Subject: [PATCH 09/24] Migrate FFI in client to ES modules --- client/src/Try/Container.js | 6 ++---- client/src/Try/Gist.js | 6 ++---- client/src/Try/QueryString.js | 10 ++++------ client/src/Try/Session.js | 10 ++++------ 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/client/src/Try/Container.js b/client/src/Try/Container.js index 8c26089e..273938eb 100644 --- a/client/src/Try/Container.js +++ b/client/src/Try/Container.js @@ -1,4 +1,2 @@ -"use strict"; - -exports.setupIFrame = setupIFrame; -exports.teardownIFrame = teardownIFrame; +export {setupIFrame}; +export {teardownIFrame}; diff --git a/client/src/Try/Gist.js b/client/src/Try/Gist.js index 909b5413..9d527c23 100644 --- a/client/src/Try/Gist.js +++ b/client/src/Try/Gist.js @@ -1,9 +1,7 @@ -"use strict"; - -exports.rawUrl_ = function (gistInfo, filename) { +export function rawUrl_(gistInfo, filename) { if (gistInfo.files && gistInfo.files.hasOwnProperty(filename)) { return gistInfo.files[filename].raw_url; } else { return null; } -}; +} diff --git a/client/src/Try/QueryString.js b/client/src/Try/QueryString.js index bbddc5f3..5f3f03c5 100644 --- a/client/src/Try/QueryString.js +++ b/client/src/Try/QueryString.js @@ -1,13 +1,11 @@ -"use strict"; - -exports.getQueryString = function() { +export function getQueryString() { return window.location.search; -}; +} -exports.setQueryParameters = function(params) { +export function setQueryParameters(params) { var encodedParams = Object.keys(params).map(function(key) { return key + '=' + encodeURIComponent(params[key].replace('/', '')); }).join('&'); window.history.replaceState(null, '', '?' + encodedParams); -}; +} diff --git a/client/src/Try/Session.js b/client/src/Try/Session.js index 42c9971a..7edfd148 100644 --- a/client/src/Try/Session.js +++ b/client/src/Try/Session.js @@ -1,13 +1,11 @@ -"use strict"; - -exports.storeSession_ = function(sessionId, state) { +export function storeSession_(sessionId, state) { if (window.localStorage) { localStorage.setItem(sessionId, state.code); localStorage.setItem(sessionId + 'backend', state.backend); } -}; +} -exports.tryRetrieveSession_ = function(sessionId) { +export function tryRetrieveSession_(sessionId) { if (window.localStorage) { var code = localStorage.getItem(sessionId); var backend = localStorage.getItem(sessionId + 'backend'); @@ -15,4 +13,4 @@ exports.tryRetrieveSession_ = function(sessionId) { return { code: code, backend: backend }; } } -}; +} From b8debc4c79b7ccf16ab4177cc92d15fec0c6b60d Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 16:03:46 -0500 Subject: [PATCH 10/24] Account for breaking changes --- client/src/Main.purs | 2 +- client/src/Try/API.purs | 12 +++--- client/src/Try/Container.purs | 71 ++++++++++++++++----------------- client/src/Try/Editor.purs | 13 +++--- client/src/Try/Gist.purs | 2 +- client/src/Try/GitHub.purs | 2 +- client/src/Try/QueryString.purs | 8 +++- client/test/Main.purs | 4 +- 8 files changed, 61 insertions(+), 53 deletions(-) diff --git a/client/src/Main.purs b/client/src/Main.purs index 8c3d781c..1749c9cb 100644 --- a/client/src/Main.purs +++ b/client/src/Main.purs @@ -9,6 +9,6 @@ import Halogen.VDom.Driver (runUI) import Try.Container as Container main :: Effect Unit -main = launchAff_ do +main = launchAff_ $ void do body <- HA.awaitBody runUI Container.component unit body diff --git a/client/src/Try/API.purs b/client/src/Try/API.purs index afe533c6..100b9f8c 100644 --- a/client/src/Try/API.purs +++ b/client/src/Try/API.purs @@ -14,13 +14,15 @@ module Try.API import Prelude import Affjax (URL, printError) -import Affjax as AX +import Affjax.Web as AX import Affjax.RequestBody as AXRB import Affjax.ResponseFormat as AXRF import Affjax.StatusCode (StatusCode(..)) import Control.Alt ((<|>)) import Control.Monad.Except (ExceptT(..)) -import Data.Argonaut.Decode (class DecodeJson, decodeJson, (.:)) +import Data.Argonaut.Decode (class DecodeJson, decodeJson, (.:), JsonDecodeError(..), printJsonDecodeError) +import Data.Argonaut.Encode (encodeJson) +import Data.Bifunctor (lmap) import Data.Either (Either(..)) import Data.Maybe (Maybe(..)) import Data.Traversable (traverse) @@ -53,8 +55,8 @@ instance decodeJsonCompileError :: DecodeJson CompileError where map OtherError $ decodeJson contents "CompilerErrors" -> map CompilerErrors $ traverse decodeJson =<< decodeJson contents - _ -> - Left "Tag must be one of: OtherError, CompilerErrors" + j -> + Left $ AtKey "tag" $ UnexpectedValue $ encodeJson j type Suggestion = { replacement :: String @@ -105,6 +107,6 @@ compile endpoint code = ExceptT $ liftAff $ AX.post AXRF.json (endpoint <> "/com Right { status } | status >= StatusCode 400 -> pure $ Left $ "Received error status code: " <> show status Right { body } -> - pure $ Right $ decodeJson body + pure $ lmap printJsonDecodeError $ decodeJson body where requestBody = Just $ AXRB.string code diff --git a/client/src/Try/Container.purs b/client/src/Try/Container.purs index 42a03570..3cdfd51d 100644 --- a/client/src/Try/Container.purs +++ b/client/src/Try/Container.purs @@ -4,13 +4,11 @@ import Prelude import Ace (Annotation) import Control.Monad.Except (runExceptT) -import Data.Array (fold) import Data.Array as Array import Data.Either (Either(..)) -import Data.Foldable (for_, oneOf) +import Data.Foldable (for_, oneOf, fold) import Data.FoldableWithIndex (foldMapWithIndex) import Data.Maybe (Maybe(..), fromMaybe, isNothing) -import Data.Symbol (SProxy(..)) import Effect (Effect) import Effect.Aff (Aff, makeAff) import Effect.Aff as Aff @@ -35,6 +33,7 @@ import Try.Session (createSessionIdIfNecessary, storeSession, tryRetrieveSession import Try.Types (JS(..)) import Web.HTML (window) import Web.HTML.Window (alert) +import Type.Proxy (Proxy(..)) type Slots = ( editor :: Editor.Slot Unit ) @@ -80,8 +79,8 @@ data Action | Compile (Maybe String) | HandleEditor Editor.Output -_editor :: SProxy "editor" -_editor = SProxy +_editor :: Proxy "editor" +_editor = Proxy loader :: Loader loader = makeLoader Config.loaderUrl @@ -91,7 +90,7 @@ type FailCb = Effect Unit foreign import setupIFrame :: EffectFn3 (Object JS) LoadCb FailCb Unit foreign import teardownIFrame :: Effect Unit -component :: forall q i o. H.Component HH.HTML q i o Aff +component :: forall q i o. H.Component q i o Aff component = H.mkComponent { initialState , render @@ -131,7 +130,7 @@ component = H.mkComponent -- Set the editor contents. This will trigger a change event, causing a -- cache + compile step. - void $ H.query _editor unit $ H.tell $ Editor.SetEditorContent code + H.tell _editor unit $ Editor.SetEditorContent code UpdateSettings k -> do old <- H.get @@ -154,12 +153,12 @@ component = H.mkComponent H.modify_ _ { compiled = Nothing } code <- case mbCode of Nothing -> do - mbText <- H.query _editor unit $ H.request $ Editor.GetEditorContent + mbText <- H.request _editor unit $ Editor.GetEditorContent pure $ fold $ join mbText Just text -> pure text - _ <- H.query _editor unit $ H.tell $ Editor.SetAnnotations [] - _ <- H.query _editor unit $ H.tell $ Editor.RemoveMarkers + H.tell _editor unit $ Editor.SetAnnotations [] + H.tell _editor unit $ Editor.RemoveMarkers runExceptT (API.compile Config.compileUrl code) >>= case _ of Left err -> do H.liftEffect teardownIFrame @@ -178,10 +177,10 @@ component = H.mkComponent pure unit CompilerErrors errs -> do let anns = Array.mapMaybe (toAnnotation MarkerError) errs - _ <- H.query _editor unit $ H.tell $ Editor.SetAnnotations anns + H.tell _editor unit $ Editor.SetAnnotations anns for_ errs \{ position } -> for_ position \pos -> do - _ <- H.query _editor unit $ H.tell $ Editor.AddMarker MarkerError pos + H.tell _editor unit $ Editor.AddMarker MarkerError pos pure unit Right (Right res@(CompileSuccess { js, warnings })) -> do @@ -192,7 +191,7 @@ component = H.mkComponent eitherSources <- H.liftAff $ runExceptT $ runLoader loader (JS js) for_ warnings \warnings_ -> do let anns = Array.mapMaybe (toAnnotation MarkerWarning) warnings_ - _ <- H.query _editor unit $ H.tell $ Editor.SetAnnotations anns + H.tell _editor unit $ Editor.SetAnnotations anns pure unit case eitherSources of Right sources -> do @@ -214,9 +213,9 @@ component = H.mkComponent render :: State -> H.ComponentHTML Action Slots Aff render state = HH.div - [ HP.id_ "wrapper" ] + [ HP.id "wrapper" ] [ HH.div - [ HP.id_ "body" ] + [ HP.id "body" ] [ renderMenu , renderMobileBanner , renderEditor @@ -225,10 +224,10 @@ component = H.mkComponent where renderMenu = HH.ul - [ HP.id_ "menu" ] + [ HP.id "menu" ] [ HH.a [ HP.class_ $ HH.ClassName "menu-item" - , HP.id_ "home_link" + , HP.id "home_link" , HP.href "/" , HP.title "Try PureScript!" ] @@ -244,7 +243,7 @@ component = H.mkComponent [ HP.title "Select a view mode" ] [ HH.text "View Mode" ] , let name = "view_mode" in HH.ul - [ HP.id_ name ] + [ HP.id name ] [ menuRadio { checked: state.settings.viewMode == SideBySide , name @@ -295,25 +294,25 @@ component = H.mkComponent , HH.li [ HP.class_ $ HH.ClassName "menu-item no-mobile" ] [ HH.label - [ HP.id_ "compile_label" + [ HP.id "compile_label" , HP.title "Compile Now" - , HE.onClick \_ -> Just (Compile Nothing) + , HE.onClick \_ -> Compile Nothing ] [ HH.text "Compile" ] ] , HH.li [ HP.class_ $ HH.ClassName "menu-item nowrap no-mobile" ] [ HH.input - [ HP.id_ "auto_compile" + [ HP.id "auto_compile" , HP.name "auto_compile" , HP.title "Toggle auto-compilation of the file on code changes" , HP.value "auto_compile" , HP.type_ HP.InputCheckbox , HP.checked state.settings.autoCompile - , HE.onChecked \bool -> Just $ UpdateSettings (_ { autoCompile = bool }) + , HE.onChecked \bool -> UpdateSettings (_ { autoCompile = bool }) ] , HH.label - [ HP.id_ "auto_compile-label" + [ HP.id "auto_compile-label" , HP.for "auto_compile" , HP.title "Compile on code changes" ] @@ -322,16 +321,16 @@ component = H.mkComponent , HH.li [ HP.class_ $ HH.ClassName "menu-item nowrap" ] [ HH.input - [ HP.id_ "showjs" + [ HP.id "showjs" , HP.name "showjs" , HP.title "Show resulting JavaScript code instead of output" , HP.value "showjs" , HP.type_ HP.InputCheckbox , HP.checked state.settings.showJs - , HE.onChecked \bool -> Just $ UpdateSettings (_ { showJs = bool }) + , HE.onChecked \bool -> UpdateSettings (_ { showJs = bool }) ] , HH.label - [ HP.id_ "showjs_label" + [ HP.id "showjs_label" , HP.for "showjs" , HP.title "Show resulting JavaScript code instead of output" ] @@ -340,12 +339,12 @@ component = H.mkComponent , HH.li [ HP.class_ $ HH.ClassName "menu-item" ] [ HH.a - [ HP.id_ "helplink" + [ HP.id "helplink" , HP.href "https://github.com/purescript/trypurescript/blob/master/README.md" , HP.target "trypurs_readme" ] [ HH.label - [ HP.id_ "help" + [ HP.id "help" , HP.title "Learn more about Try PureScript" ] [ HH.text "Help" ] @@ -360,28 +359,28 @@ component = H.mkComponent renderEditor = HH.div - [ HP.id_ "editor_view" + [ HP.id "editor_view" , HP.attr (HH.AttrName "data-view-mode") case state.settings.viewMode of SideBySide -> "sidebyside" Code -> "code" Output -> "output" ] [ HH.div - [ HP.id_ "column1" + [ HP.id "column1" , HP.class_ $ HH.ClassName "no-mobile" ] - [ HH.slot _editor unit Editor.component unit (Just <<< HandleEditor) ] + [ HH.slot _editor unit Editor.component unit HandleEditor ] , HH.div [ HP.class_ $ HH.ClassName "separator" ] [ ] , HH.div - [ HP.id_ "column2_wrapper" ] + [ HP.id "column2_wrapper" ] [ HH.div - [ HP.id_ "column2" ] + [ HP.id "column2" ] [ maybeElem state.compiled renderCompiled ] , whenElem (isNothing state.compiled) \_ -> HH.div - [ HP.id_ "loading" ] + [ HP.id "loading" ] [ ] ] ] @@ -437,8 +436,8 @@ menuRadio props = [ HP.type_ HP.InputRadio , HP.name props.name , HP.value props.value - , HP.id_ props.id - , HE.onClick \_ -> Just props.onClick + , HP.id props.id + , HE.onClick \_ -> props.onClick , HP.checked props.checked ] , HH.label diff --git a/client/src/Try/Editor.purs b/client/src/Try/Editor.purs index 54c83d4d..355234ce 100644 --- a/client/src/Try/Editor.purs +++ b/client/src/Try/Editor.purs @@ -31,7 +31,7 @@ import Effect.Timer (clearTimeout, setTimeout) import Halogen as H import Halogen.HTML as HH import Halogen.HTML.Properties as HP -import Halogen.Query.EventSource as ES +import Halogen.Subscription as HS import Try.API (ErrorPosition) import Web.HTML (HTMLElement) @@ -72,7 +72,7 @@ data Action | ClearMarkers | HandleChange -component :: forall i m. MonadAff m => H.Component HH.HTML Query i Output m +component :: forall i m. MonadAff m => H.Component Query i Output m component = H.mkComponent { initialState , render @@ -96,7 +96,7 @@ component = H.mkComponent render _ = HH.div [ HP.ref $ H.RefLabel "ace" - , HP.id_ "code" + , HP.id "code" ] [ ] @@ -107,10 +107,11 @@ component = H.mkComponent editor <- H.liftEffect $ setupEditor element H.modify_ _ { editor = Just editor } session <- H.liftEffect $ Editor.getSession editor - void $ H.subscribe $ ES.effectEventSource \emitter -> do - emit <- debounce debounceTime \_ -> ES.emit emitter HandleChange + { emitter, listener } <- H.liftEffect HS.create + void $ H.subscribe emitter + H.liftEffect do + emit <- debounce debounceTime \_ -> HS.notify listener HandleChange EditSession.onChange session emit - pure mempty Finalize -> do handleAction ClearMarkers diff --git a/client/src/Try/Gist.purs b/client/src/Try/Gist.purs index 141260b1..58544ed5 100644 --- a/client/src/Try/Gist.purs +++ b/client/src/Try/Gist.purs @@ -8,7 +8,7 @@ module Try.Gist import Prelude import Affjax (printError) -import Affjax as AX +import Affjax.Web as AX import Affjax.RequestBody as AXRB import Affjax.ResponseFormat as AXRF import Affjax.StatusCode (StatusCode(..)) diff --git a/client/src/Try/GitHub.purs b/client/src/Try/GitHub.purs index 6a2aa07d..3006cfd8 100644 --- a/client/src/Try/GitHub.purs +++ b/client/src/Try/GitHub.purs @@ -3,7 +3,7 @@ module Try.GitHub where import Prelude import Affjax (URL, printError) -import Affjax as AX +import Affjax.Web as AX import Affjax.ResponseFormat as AXRF import Affjax.StatusCode (StatusCode(..)) import Control.Monad.Except (ExceptT(..)) diff --git a/client/src/Try/QueryString.purs b/client/src/Try/QueryString.purs index 8009936a..cb7bf4cb 100644 --- a/client/src/Try/QueryString.purs +++ b/client/src/Try/QueryString.purs @@ -15,7 +15,13 @@ import Data.Tuple (Tuple(..)) import Effect (Effect) import Effect.Uncurried (EffectFn1, runEffectFn1) import Foreign.Object as Object -import Global.Unsafe (unsafeDecodeURIComponent) +import JSURI (decodeURIComponent) +import Partial.Unsafe (unsafeCrashWith) + +unsafeDecodeURIComponent :: String -> String +unsafeDecodeURIComponent s = case decodeURIComponent s of + Just str -> str + Nothing -> unsafeCrashWith $ "unsafeDecodeURIComponent encountered errors when decoding '" <> s <> "'" foreign import getQueryString :: Effect String diff --git a/client/test/Main.purs b/client/test/Main.purs index 2bc4ed27..4999e106 100644 --- a/client/test/Main.purs +++ b/client/test/Main.purs @@ -3,7 +3,7 @@ module Test.Main where import Prelude import Data.Argonaut.Core (Json) -import Data.Argonaut.Decode (class DecodeJson, decodeJson) +import Data.Argonaut.Decode (class DecodeJson, JsonDecodeError, decodeJson) import Data.Bitraversable (ltraverse) import Data.Either (Either, isRight) import Effect (Effect) @@ -27,7 +27,7 @@ apiTests fixtures = do -- | Test that a JSON response decodes successfully. shouldDecode :: forall a. DecodeJson a => Proxy a -> Json -> Effect Unit shouldDecode _ fixture = do - result <- (decodeJson fixture :: Either String a) # ltraverse \errors -> do + result <- (decodeJson fixture :: Either JsonDecodeError a) # ltraverse \errors -> do log "Failed to decode fixture:\n" logShow errors assert (isRight result) From 32c52a7435f6c2f3b35e58159226a7ba271aa7e0 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 16:03:52 -0500 Subject: [PATCH 11/24] Fix spago transitive deps error --- client/spago.dhall | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/client/spago.dhall b/client/spago.dhall index 862603b5..fd915d6b 100644 --- a/client/spago.dhall +++ b/client/spago.dhall @@ -5,12 +5,14 @@ , "affjax" , "affjax-web" , "argonaut-codecs" + , "argonaut-core" , "arrays" , "assert" , "bifunctors" , "console" , "const" , "control" + , "datetime" , "debug" , "effect" , "either" @@ -20,14 +22,20 @@ , "functions" , "functors" , "halogen" + , "halogen-subscriptions" , "identity" , "integers" , "js-timers" , "js-uri" + , "lists" , "maybe" + , "newtype" + , "node-buffer" , "node-fs" + , "nullable" , "ordered-collections" , "parallel" + , "partial" , "prelude" , "profunctor" , "psci-support" @@ -38,6 +46,7 @@ , "transformers" , "tuples" , "unfoldable" + , "unsafe-coerce" , "web-html" ] , packages = ./packages.dhall From c534443f4e810e8398a4eacd87d9f0ad84a51a88 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 30 Apr 2022 16:07:47 -0500 Subject: [PATCH 12/24] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 107b1972..64f8aeb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Notable changes to this project are documented in this file. The format is based ## [Unreleased] Breaking changes: +- Update compiler to v0.15.0 (#274 by @JordanMartinez) New features: From 7c2b46e98e3a67e2499981b64e6ff9071bc7c4d3 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 14 May 2022 17:01:28 -0500 Subject: [PATCH 13/24] Update spago to 0.20.9 --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 20b10946..bc722446 100644 --- a/client/package.json +++ b/client/package.json @@ -12,6 +12,6 @@ "purescript": "^0.15.0", "purescript-psa": "^0.8.2", "rimraf": "^2.5.4", - "spago": "^0.20.8" + "spago": "^0.20.9" } } From 683e65835264dd6fcd81675333ae87c5ff920bc6 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 14 May 2022 17:24:03 -0500 Subject: [PATCH 14/24] Support shims via es-module-shims --- client/public/frame.html | 54 ++++++++++++++++++++++++++++++++++++++- client/public/js/frame.js | 41 ++++++++--------------------- 2 files changed, 63 insertions(+), 32 deletions(-) diff --git a/client/public/frame.html b/client/public/frame.html index ba347939..2642e0e1 100644 --- a/client/public/frame.html +++ b/client/public/frame.html @@ -5,7 +5,59 @@ - + + + + + + + + + + + + + + + + + + + + + +
diff --git a/client/public/js/frame.js b/client/public/js/frame.js index f0d0a6ff..a39e0a94 100644 --- a/client/public/js/frame.js +++ b/client/public/js/frame.js @@ -1,41 +1,20 @@ (function() { - function evalSources(sources) { - var modules = {}; - function dirname(str) { - var ix = str.lastIndexOf("/"); - return ix < 0 ? "" : str.slice(0, ix); - } - function resolvePath(a, b) { - if (b[0] === "." && b[1] === "/") { - return dirname(a) + b.slice(1); - } - if (b[0] === "." && b[1] === "." && b[2] === "/") { - return dirname(dirname(a)) + b.slice(2); - } - return b; - } - return function load(name) { - if (modules[name]) { - return modules[name].exports; - } - function require(path) { - return load(resolvePath(name, path)); - } - var module = modules[name] = { exports: {} }; - new Function("module", "exports", "require", sources[name])(module, module.exports, require); - return module.exports; - }; - } - var parent; document.addEventListener("DOMContentLoaded", function() { window.addEventListener("message", function(event) { parent = event.source; parent.postMessage("trypurescript", "*"); - var file = evalSources(event.data)(""); - if (file.main && typeof file.main === "function") { - file.main(); + const scriptEl = document.createElement("script"); + scriptEl.type = "module"; + const code = event.data; + // See https://stackoverflow.com/a/6433770 + try { + scriptEl.appendChild(document.createTextNode(code)); + } catch (e) { + scriptEl.text = code; + } finally { + document.body.appendChild(scriptEl); } }, { once: true }); }, { once: true }); From c6d0300da7b6f60a4c695fe3366e55caedc04c4d Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 14 May 2022 18:34:41 -0500 Subject: [PATCH 15/24] Update package set to latest one; drop debug override --- client/packages.dhall | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/client/packages.dhall b/client/packages.dhall index 1c8054ef..e51832b0 100644 --- a/client/packages.dhall +++ b/client/packages.dhall @@ -1,14 +1,5 @@ let upstream = - https://github.com/purescript/package-sets/releases/download/psc-0.15.0-20220429/packages.dhall - sha256:03c682bff56fc8f9d8c495ffcc6f524cbd3c89fe04778f965265c08757de8c9d + https://github.com/purescript/package-sets/releases/download/psc-0.15.0-20220513/packages.dhall + sha256:1ed784f37ae6131d99acd542d058d5ce39954ccaacc3adba5cc7cf1549d2bffa -let additions = - { debug = - { repo = "https://github.com/working-group-purescript-es/purescript-debug.git" - , version = "v0.15.0-update" - , dependencies = - [ "console", "effect", "functions", "prelude" ] - } - } - -in upstream // additions +in upstream From 958b73656d999a38db1fa12564773733f2b96e22 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Sat, 14 May 2022 18:49:18 -0500 Subject: [PATCH 16/24] Move setup/teardown iframe fns to FFI file --- client/public/index.html | 61 ------------------------------------- client/src/Try/Container.js | 61 +++++++++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 63 deletions(-) diff --git a/client/public/index.html b/client/public/index.html index 44a29b24..2cdc56ce 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -19,67 +19,6 @@ - diff --git a/client/src/Try/Container.js b/client/src/Try/Container.js index 273938eb..72550304 100644 --- a/client/src/Try/Container.js +++ b/client/src/Try/Container.js @@ -1,2 +1,59 @@ -export {setupIFrame}; -export {teardownIFrame}; +$.ajaxSetup({ + dataType: "text", +}); + +export function teardownIFrame() { + var $ctr = $("iframe#output-iframe"); + $ctr.remove() +} + +export function setupIFrame(data, loadCb, failCb) { + var $ctr = $("#column2"); + var $iframe = $( + '