Before:
Cn.("one" + "two" + "three")
After:
`one two three`
| import typescriptEslint from "@typescript-eslint/eslint-plugin" | |
| import tsParser from "@typescript-eslint/parser" | |
| /** @type {import("@typescript-eslint/utils").TSESLint.FlatConfig.ConfigArray} */ | |
| export default [ | |
| { | |
| ignores: [""], | |
| }, | |
| { | |
| languageOptions: { |
| class Vec2 { | |
| x: number | |
| y: number | |
| constructor(x: number, y: number) { | |
| this.x = x | |
| this.y = y | |
| } | |
| get xx() { return new Vec2(this.x, this.x) } | |
| get xy() { return new Vec2(this.x, this.y) } |
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <style> | |
| * { | |
| font-family: monospace; | |
| } | |
| .box { |
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <style> | |
| * { | |
| font-family: monospace; | |
| } | |
| .box { |
| let routes = { | |
| // Regular JS regex over cleaned up URL. | |
| 'book/(\\d+)?/edit': (id) => console.log('handleBookEdit', id), | |
| 'book/(\\d+)?/.+': (_id, _) => console.log('noSuchBookOperation'), | |
| 'book/(\\d+)?': (id) => console.log('getBook', id), | |
| 'shop/(\\d+)?/(\\d+)?': (a, b) => console.log('showSecretShopPage', a, b), | |
| 'shop/index': () => console.log('showShoppingPage'), | |
| 'shop/(.+)': (rest) => console.log('nestedMatch', rest), | |
| 'shop': () => console.log('showShoppingPage'), |
| function pointsOnEllipse1(cx, cy, rx, ry, n) { | |
| const points = Array(n); | |
| const step = Math.PI / (n / 2); | |
| let sin = 0; | |
| let cos = 1; | |
| const a = Math.cos(step); | |
| const b = Math.sin(step); |
| // bindings can be isolated/upstreamed. I'm inlining it just for the example | |
| type request; | |
| type response; | |
| [@bs.new] external makeXMLHttpRequest: unit => request = "XMLHttpRequest"; | |
| [@bs.send] external addEventListener: (request, string, unit => unit) => unit = "addEventListener"; | |
| [@bs.get] external response: request => response = "response"; | |
| [@bs.send] external open_: (request, string, string) => unit = "open"; | |
| [@bs.send] external send: request => unit = "send"; | |
| [@bs.send] external abort: request => unit = "abort"; | |
| // ========= |
| // This is a proper alternative to | |
| // https://github.com/BuckleScript/bucklescript/blob/b9508105b1a35537bdea9a1fabd10f6c65f776b4/jscomp/bsb/templates/react-hooks/src/FetchedDogPictures/FetchedDogPictures.re#L14 | |
| // The one in that file uses Promise, but that's *wrong*. | |
| // We only used promise as a demo of its API. We'll remove it soon. | |
| // As you can see below, the pure XMLHttpRequest code is just as clean, | |
| // less mysterious for all, more performant, extensible, and actually correct. | |
| // Ignore these externals for now. They're just for illustration | |
| // purposes. I just copy pasted the Js code from |
| open Result | |
| open TopTypes | |
| open Infix | |
| let extend = (obj, items) => Json.obj(obj) |?>> current => Json.Object(current @ items) | |
| let log = Log.log | |
| let maybeHash = (h, k) => if Hashtbl.mem(h, k) { Some(Hashtbl.find(h, k)) } else { None } |