├── .browserify.js ├── .gitignore ├── README.md ├── bower.json ├── browserify.html ├── index.html ├── package-lock.json ├── package.json ├── src ├── .webpack.js └── Main.purs ├── webpack.config.js └── webpack.html /.browserify.js: -------------------------------------------------------------------------------- 1 | require('./output/Main').main(); 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /bower_components/ 2 | /node_modules/ 3 | /.pulp-cache/ 4 | /output/ 5 | .vscode/ 6 | /.psci* 7 | browserify.js* 8 | bundle.js* 9 | app.js* -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PureScript Source maps test 2 | 3 | Simple setups showing end to end source maps with webpack and browserify. 4 | 5 | TODO: Use `psc-bundle`, which finally supports source maps, but requires them 6 | to be glued together externally. 7 | 8 | TODO: Show the new `purs` executable instead, test. 9 | 10 | Works with `psc` as of [0.8.1](https://github.com/purescript/purescript/releases/tag/v0.8.1)/0.8.2 11 | 12 | ### Build everything 13 | 14 | The `package.json` for this project contains some run scripts to build with browserify and webpack preserving 15 | source maps. 16 | 17 | Usage: 18 | ``` 19 | bower install && npm install 20 | 21 | npm run -s build-all 22 | http-server 23 | ``` 24 | 25 | (You can use any http server to serve the project root directory: [`http-server`](https://www.npmjs.com/package/http-server) 26 | is one such that can be installed with npm (`npm install -g http-server`)). 27 | 28 | ### webpack 29 | 30 | Usage: 31 | ``` 32 | bower install && npm install 33 | npm install -g webpack-dev-server 34 | 35 | pulp build -- --source-maps 36 | webpack-dev-server 37 | ``` 38 | 39 | (or see build scripts/build-all above). 40 | 41 | ### webpack (purescript webpack plugin) 42 | 43 | Webpack via `purs-loader`/`purescript-webpack-plugin` sshould support source 44 | maps, probably whether `psc-bundle` is used or not, but the example I previously referred to for such support - 45 | [purescript-webpack-example](https://github.com/ethul/purescript-webpack-example) - does not currently support source maps. 46 | 47 | ### Browserify 48 | 49 | It's possible to do the same with browserify, but browserify does not in itself 50 | combine source maps from its own process with input source maps. One option is to 51 | use [sorcery](https://github.com/Rich-Harris/sorcery) to glue purescript and browserify 52 | source maps together. 53 | 54 | Usage: 55 | ``` 56 | bower install && npm install 57 | 58 | pulp build -- --source-maps 59 | browserify --debug .browserify.js -o browserify.js 60 | sorcery -i browserify.js 61 | 62 | http-server 63 | ``` 64 | 65 | ### Bundle 66 | 67 | `psc-bundle` now supports source maps. Note that `pulp` will only pass the source maps parameter to the initial compile command, so bundling must be done 68 | as a 2nd step, not a `pulp build --to` or variant thereof. The below may work: 69 | 70 | ``` 71 | pulp build -- --source-maps 72 | psc-bundle 'output/*/*.js' -m Main --main Main -o bundle.js --source-maps 73 | sorcery -i bundle.js 74 | ``` 75 | 76 | ### Direct CommonJS 77 | 78 | When using PureScript code directly as CommonJS modules, such as in Node or Electron, 79 | source maps can be used directly with no additional tooling. 80 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "purescript-sourcemap-test", 3 | "version": "1.0.0", 4 | "moduleType": [ 5 | "node" 6 | ], 7 | "ignore": [ 8 | "**/.*", 9 | "node_modules", 10 | "bower_components", 11 | "output" 12 | ], 13 | "dependencies": { 14 | "purescript-console": "^3.0.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /browserify.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Source map examples under different build processes. Note there is no output, 4 | need to open the dev console. 5 |

Also note, you need to show this in a web server instead of running locally, 6 | or source maps may not work. 7 |

12 | 13 | 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "purescript-sourcemap-test", 3 | "requires": true, 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "ansi-styles": { 7 | "version": "3.2.0", 8 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 9 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 10 | "dev": true, 11 | "requires": { 12 | "color-convert": "1.9.0" 13 | } 14 | }, 15 | "array-filter": { 16 | "version": "0.0.1", 17 | "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", 18 | "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", 19 | "dev": true 20 | }, 21 | "array-map": { 22 | "version": "0.0.0", 23 | "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", 24 | "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", 25 | "dev": true 26 | }, 27 | "array-reduce": { 28 | "version": "0.0.0", 29 | "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", 30 | "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", 31 | "dev": true 32 | }, 33 | "balanced-match": { 34 | "version": "1.0.0", 35 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 36 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 37 | "dev": true 38 | }, 39 | "brace-expansion": { 40 | "version": "1.1.8", 41 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 42 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 43 | "dev": true, 44 | "requires": { 45 | "balanced-match": "1.0.0", 46 | "concat-map": "0.0.1" 47 | } 48 | }, 49 | "builtin-modules": { 50 | "version": "1.1.1", 51 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 52 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 53 | "dev": true 54 | }, 55 | "chalk": { 56 | "version": "2.1.0", 57 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", 58 | "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", 59 | "dev": true, 60 | "requires": { 61 | "ansi-styles": "3.2.0", 62 | "escape-string-regexp": "1.0.5", 63 | "supports-color": "4.4.0" 64 | } 65 | }, 66 | "color-convert": { 67 | "version": "1.9.0", 68 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", 69 | "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", 70 | "dev": true, 71 | "requires": { 72 | "color-name": "1.1.3" 73 | } 74 | }, 75 | "color-name": { 76 | "version": "1.1.3", 77 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 78 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 79 | "dev": true 80 | }, 81 | "concat-map": { 82 | "version": "0.0.1", 83 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 84 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 85 | "dev": true 86 | }, 87 | "core-util-is": { 88 | "version": "1.0.2", 89 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 90 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 91 | "dev": true 92 | }, 93 | "cross-spawn": { 94 | "version": "5.1.0", 95 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 96 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 97 | "dev": true, 98 | "requires": { 99 | "lru-cache": "4.1.1", 100 | "shebang-command": "1.2.0", 101 | "which": "1.3.0" 102 | } 103 | }, 104 | "define-properties": { 105 | "version": "1.1.2", 106 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", 107 | "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", 108 | "dev": true, 109 | "requires": { 110 | "foreach": "2.0.5", 111 | "object-keys": "1.0.11" 112 | } 113 | }, 114 | "duplexer": { 115 | "version": "0.1.1", 116 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 117 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 118 | "dev": true 119 | }, 120 | "error-ex": { 121 | "version": "1.3.1", 122 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 123 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 124 | "dev": true, 125 | "requires": { 126 | "is-arrayish": "0.2.1" 127 | } 128 | }, 129 | "es-abstract": { 130 | "version": "1.8.2", 131 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.2.tgz", 132 | "integrity": "sha512-dvhwFL3yjQxNNsOWx6exMlaDrRHCRGMQlnx5lsXDCZ/J7G/frgIIl94zhZSp/galVAYp7VzPi1OrAHta89/yGQ==", 133 | "dev": true, 134 | "requires": { 135 | "es-to-primitive": "1.1.1", 136 | "function-bind": "1.1.1", 137 | "has": "1.0.1", 138 | "is-callable": "1.1.3", 139 | "is-regex": "1.0.4" 140 | } 141 | }, 142 | "es-to-primitive": { 143 | "version": "1.1.1", 144 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", 145 | "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", 146 | "dev": true, 147 | "requires": { 148 | "is-callable": "1.1.3", 149 | "is-date-object": "1.0.1", 150 | "is-symbol": "1.0.1" 151 | } 152 | }, 153 | "escape-string-regexp": { 154 | "version": "1.0.5", 155 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 156 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 157 | "dev": true 158 | }, 159 | "event-stream": { 160 | "version": "3.3.4", 161 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 162 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 163 | "dev": true, 164 | "requires": { 165 | "duplexer": "0.1.1", 166 | "from": "0.1.7", 167 | "map-stream": "0.1.0", 168 | "pause-stream": "0.0.11", 169 | "split": "0.3.3", 170 | "stream-combiner": "0.0.4", 171 | "through": "2.3.8" 172 | } 173 | }, 174 | "foreach": { 175 | "version": "2.0.5", 176 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 177 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", 178 | "dev": true 179 | }, 180 | "from": { 181 | "version": "0.1.7", 182 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 183 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", 184 | "dev": true 185 | }, 186 | "function-bind": { 187 | "version": "1.1.1", 188 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 189 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 190 | "dev": true 191 | }, 192 | "graceful-fs": { 193 | "version": "4.1.11", 194 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 195 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 196 | "dev": true 197 | }, 198 | "has": { 199 | "version": "1.0.1", 200 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", 201 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", 202 | "dev": true, 203 | "requires": { 204 | "function-bind": "1.1.1" 205 | } 206 | }, 207 | "has-flag": { 208 | "version": "2.0.0", 209 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 210 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 211 | "dev": true 212 | }, 213 | "hosted-git-info": { 214 | "version": "2.5.0", 215 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", 216 | "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", 217 | "dev": true 218 | }, 219 | "inherits": { 220 | "version": "2.0.3", 221 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 222 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 223 | "dev": true 224 | }, 225 | "is-arrayish": { 226 | "version": "0.2.1", 227 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 228 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 229 | "dev": true 230 | }, 231 | "is-builtin-module": { 232 | "version": "1.0.0", 233 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 234 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 235 | "dev": true, 236 | "requires": { 237 | "builtin-modules": "1.1.1" 238 | } 239 | }, 240 | "is-callable": { 241 | "version": "1.1.3", 242 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", 243 | "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", 244 | "dev": true 245 | }, 246 | "is-date-object": { 247 | "version": "1.0.1", 248 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 249 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 250 | "dev": true 251 | }, 252 | "is-regex": { 253 | "version": "1.0.4", 254 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 255 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 256 | "dev": true, 257 | "requires": { 258 | "has": "1.0.1" 259 | } 260 | }, 261 | "is-symbol": { 262 | "version": "1.0.1", 263 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", 264 | "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", 265 | "dev": true 266 | }, 267 | "isarray": { 268 | "version": "0.0.1", 269 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 270 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 271 | "dev": true 272 | }, 273 | "isexe": { 274 | "version": "2.0.0", 275 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 276 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 277 | "dev": true 278 | }, 279 | "jsonify": { 280 | "version": "0.0.0", 281 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 282 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 283 | "dev": true 284 | }, 285 | "load-json-file": { 286 | "version": "2.0.0", 287 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 288 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 289 | "dev": true, 290 | "requires": { 291 | "graceful-fs": "4.1.11", 292 | "parse-json": "2.2.0", 293 | "pify": "2.3.0", 294 | "strip-bom": "3.0.0" 295 | } 296 | }, 297 | "lru-cache": { 298 | "version": "4.1.1", 299 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 300 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 301 | "dev": true, 302 | "requires": { 303 | "pseudomap": "1.0.2", 304 | "yallist": "2.1.2" 305 | } 306 | }, 307 | "map-stream": { 308 | "version": "0.1.0", 309 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 310 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 311 | "dev": true 312 | }, 313 | "memory-streams": { 314 | "version": "0.1.2", 315 | "resolved": "https://registry.npmjs.org/memory-streams/-/memory-streams-0.1.2.tgz", 316 | "integrity": "sha1-Jz/3d6tg/sWZsRY1UlUoLMosUMI=", 317 | "dev": true, 318 | "requires": { 319 | "readable-stream": "1.0.34" 320 | } 321 | }, 322 | "minimatch": { 323 | "version": "3.0.4", 324 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 325 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 326 | "dev": true, 327 | "requires": { 328 | "brace-expansion": "1.1.8" 329 | } 330 | }, 331 | "normalize-package-data": { 332 | "version": "2.4.0", 333 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 334 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 335 | "dev": true, 336 | "requires": { 337 | "hosted-git-info": "2.5.0", 338 | "is-builtin-module": "1.0.0", 339 | "semver": "5.4.1", 340 | "validate-npm-package-license": "3.0.1" 341 | } 342 | }, 343 | "npm-run-all": { 344 | "version": "4.1.1", 345 | "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.1.tgz", 346 | "integrity": "sha512-qrmqqaJa+REbzUTIL/mHfTdgwz+gL1xUezY/ueyLa7GISZ4T3h0CH8D2r6AaZdCYN2unu7PzspP0ofpXla1ftg==", 347 | "dev": true, 348 | "requires": { 349 | "ansi-styles": "3.2.0", 350 | "chalk": "2.1.0", 351 | "cross-spawn": "5.1.0", 352 | "memory-streams": "0.1.2", 353 | "minimatch": "3.0.4", 354 | "ps-tree": "1.1.0", 355 | "read-pkg": "2.0.0", 356 | "shell-quote": "1.6.1", 357 | "string.prototype.padend": "3.0.0" 358 | } 359 | }, 360 | "object-keys": { 361 | "version": "1.0.11", 362 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", 363 | "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", 364 | "dev": true 365 | }, 366 | "parse-json": { 367 | "version": "2.2.0", 368 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 369 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 370 | "dev": true, 371 | "requires": { 372 | "error-ex": "1.3.1" 373 | } 374 | }, 375 | "path-type": { 376 | "version": "2.0.0", 377 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 378 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 379 | "dev": true, 380 | "requires": { 381 | "pify": "2.3.0" 382 | } 383 | }, 384 | "pause-stream": { 385 | "version": "0.0.11", 386 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 387 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 388 | "dev": true, 389 | "requires": { 390 | "through": "2.3.8" 391 | } 392 | }, 393 | "pify": { 394 | "version": "2.3.0", 395 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 396 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 397 | "dev": true 398 | }, 399 | "ps-tree": { 400 | "version": "1.1.0", 401 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", 402 | "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", 403 | "dev": true, 404 | "requires": { 405 | "event-stream": "3.3.4" 406 | } 407 | }, 408 | "pseudomap": { 409 | "version": "1.0.2", 410 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 411 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 412 | "dev": true 413 | }, 414 | "read-pkg": { 415 | "version": "2.0.0", 416 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 417 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 418 | "dev": true, 419 | "requires": { 420 | "load-json-file": "2.0.0", 421 | "normalize-package-data": "2.4.0", 422 | "path-type": "2.0.0" 423 | } 424 | }, 425 | "readable-stream": { 426 | "version": "1.0.34", 427 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 428 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 429 | "dev": true, 430 | "requires": { 431 | "core-util-is": "1.0.2", 432 | "inherits": "2.0.3", 433 | "isarray": "0.0.1", 434 | "string_decoder": "0.10.31" 435 | } 436 | }, 437 | "semver": { 438 | "version": "5.4.1", 439 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 440 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 441 | "dev": true 442 | }, 443 | "shebang-command": { 444 | "version": "1.2.0", 445 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 446 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 447 | "dev": true, 448 | "requires": { 449 | "shebang-regex": "1.0.0" 450 | } 451 | }, 452 | "shebang-regex": { 453 | "version": "1.0.0", 454 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 455 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 456 | "dev": true 457 | }, 458 | "shell-quote": { 459 | "version": "1.6.1", 460 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", 461 | "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", 462 | "dev": true, 463 | "requires": { 464 | "array-filter": "0.0.1", 465 | "array-map": "0.0.0", 466 | "array-reduce": "0.0.0", 467 | "jsonify": "0.0.0" 468 | } 469 | }, 470 | "source-map-loader": { 471 | "version": "0.1.5", 472 | "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.1.5.tgz", 473 | "integrity": "sha1-DsbKWKoOYUY6KGc91MSei6Z9xxg=", 474 | "dev": true, 475 | "requires": { 476 | "async": "0.9.2", 477 | "loader-utils": "0.2.12", 478 | "source-map": "0.1.43" 479 | }, 480 | "dependencies": { 481 | "async": { 482 | "version": "0.9.2", 483 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", 484 | "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", 485 | "dev": true 486 | }, 487 | "loader-utils": { 488 | "version": "0.2.12", 489 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.12.tgz", 490 | "integrity": "sha1-+qKlAVY6PCyd2leqjDnYvmKN56I=", 491 | "dev": true, 492 | "requires": { 493 | "big.js": "3.1.3", 494 | "json5": "0.4.0" 495 | }, 496 | "dependencies": { 497 | "big.js": { 498 | "version": "3.1.3", 499 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", 500 | "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=", 501 | "dev": true 502 | }, 503 | "json5": { 504 | "version": "0.4.0", 505 | "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", 506 | "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", 507 | "dev": true 508 | } 509 | } 510 | }, 511 | "source-map": { 512 | "version": "0.1.43", 513 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 514 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", 515 | "dev": true, 516 | "requires": { 517 | "amdefine": "1.0.0" 518 | }, 519 | "dependencies": { 520 | "amdefine": { 521 | "version": "1.0.0", 522 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz", 523 | "integrity": "sha1-/RdHRwDLXMnCtwnwvp0jzjwZjDM=", 524 | "dev": true 525 | } 526 | } 527 | } 528 | } 529 | }, 530 | "spdx-correct": { 531 | "version": "1.0.2", 532 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 533 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 534 | "dev": true, 535 | "requires": { 536 | "spdx-license-ids": "1.2.2" 537 | } 538 | }, 539 | "spdx-expression-parse": { 540 | "version": "1.0.4", 541 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 542 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", 543 | "dev": true 544 | }, 545 | "spdx-license-ids": { 546 | "version": "1.2.2", 547 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 548 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", 549 | "dev": true 550 | }, 551 | "split": { 552 | "version": "0.3.3", 553 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 554 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 555 | "dev": true, 556 | "requires": { 557 | "through": "2.3.8" 558 | } 559 | }, 560 | "stream-combiner": { 561 | "version": "0.0.4", 562 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 563 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 564 | "dev": true, 565 | "requires": { 566 | "duplexer": "0.1.1" 567 | } 568 | }, 569 | "string_decoder": { 570 | "version": "0.10.31", 571 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 572 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 573 | "dev": true 574 | }, 575 | "string.prototype.padend": { 576 | "version": "3.0.0", 577 | "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", 578 | "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", 579 | "dev": true, 580 | "requires": { 581 | "define-properties": "1.1.2", 582 | "es-abstract": "1.8.2", 583 | "function-bind": "1.1.1" 584 | } 585 | }, 586 | "strip-bom": { 587 | "version": "3.0.0", 588 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 589 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 590 | "dev": true 591 | }, 592 | "supports-color": { 593 | "version": "4.4.0", 594 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 595 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 596 | "dev": true, 597 | "requires": { 598 | "has-flag": "2.0.0" 599 | } 600 | }, 601 | "through": { 602 | "version": "2.3.8", 603 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 604 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 605 | "dev": true 606 | }, 607 | "validate-npm-package-license": { 608 | "version": "3.0.1", 609 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 610 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 611 | "dev": true, 612 | "requires": { 613 | "spdx-correct": "1.0.2", 614 | "spdx-expression-parse": "1.0.4" 615 | } 616 | }, 617 | "which": { 618 | "version": "1.3.0", 619 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 620 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 621 | "dev": true, 622 | "requires": { 623 | "isexe": "2.0.0" 624 | } 625 | }, 626 | "yallist": { 627 | "version": "2.1.2", 628 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 629 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 630 | "dev": true 631 | } 632 | } 633 | } 634 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "purescript-sourcemap-test", 3 | "private": true, 4 | "scripts": { 5 | "install": "bower install && npm run build-all", 6 | "build": "pulp build -- --source-maps", 7 | "build-all": "run-s build webpack browserify bundle", 8 | "webpack": "webpack", 9 | "browserify": "run-s browserify:*", 10 | "browserify:build": "browserify --debug .browserify.js -o browserify.js", 11 | "browserify:sorcery": "sorcery -i browserify.js", 12 | "bundle": "run-s bundle:*", 13 | "bundle:purs": 14 | "purs bundle output/*/*.js -m Main --main Main -o bundle.js --source-maps", 15 | "bundle:sorcery": "sorcery -i bundle.js" 16 | }, 17 | "author": "Nicholas Wolverson", 18 | "license": "ISC", 19 | "devDependencies": { 20 | "bower": "^1.8.2", 21 | "browserify": "^14.5.0", 22 | "npm-run-all": "^4.1.1", 23 | "pulp": "^12.0.1", 24 | "purescript": "^0.11.6", 25 | "sorcery": "^0.10.0", 26 | "source-map-loader": "^0.1.5", 27 | "webpack": "^1.15.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/.webpack.js: -------------------------------------------------------------------------------- 1 | require('Main').main(); 2 | -------------------------------------------------------------------------------- /src/Main.purs: -------------------------------------------------------------------------------- 1 | module Main where 2 | 3 | import Prelude 4 | import Control.Monad.Eff (Eff) 5 | import Control.Monad.Eff.Console (CONSOLE, log) 6 | 7 | -- Split onto multiple lines with lambdas to show setting a breakpoint on lambda 8 | say :: forall e. String -> String -> String -> Eff (console :: CONSOLE | e) Unit 9 | say a = 10 | \b -> 11 | \c -> do 12 | log 13 | (a <> b <> c) 14 | 15 | main :: forall e. Eff (console :: CONSOLE | e) Unit 16 | main = do 17 | say "Hello " "World " "!" 18 | say "Goodbye " "cruel " "world." 19 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var process = require('process'); 2 | var path = require ('path'); 3 | var srcs = ['src[]=bower_components/purescript-*/src/**/*.purs', 'src[]=src/**/*.purs']; 4 | var ffis = ['ffi[]=bower_components/purescript-*/src/**/*.js']; 5 | 6 | 7 | module.exports = { 8 | cache: true, 9 | context: path.resolve(process.cwd(), "src"), 10 | entry: "./.webpack.js", 11 | debug: true, 12 | devtool: "source-map", 13 | output: { 14 | path: process.cwd(), 15 | pathinfo: true, 16 | filename: "app.js" 17 | }, 18 | module: { 19 | loaders: [ 20 | { 21 | test: /\.js$/, 22 | loader: "source-map-loader" 23 | } 24 | 25 | ] 26 | }, 27 | resolve: { 28 | modulesDirectories: [ 29 | "node_modules", 30 | "output" 31 | ], 32 | extensions: [ "", ".js", ".purs" ] 33 | }, 34 | resolveLoader: { 35 | root: path.resolve(__dirname, "node_modules") 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /webpack.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | --------------------------------------------------------------------------------