├── .gitattributes ├── .github ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md └── workflows │ ├── ci.yml │ └── publish.yml ├── .gitignore ├── .npmrc ├── LICENSE.md ├── README.md ├── RELEASE_NOTES.md ├── appveyor.yml ├── babel.config.json ├── build.fsx ├── docs ├── _partials │ └── footer.jsx ├── index.fsx ├── prelude.fsx ├── release_notes.md ├── scss │ └── fable-font.scss ├── static │ ├── fonts │ │ └── fable-font │ │ │ ├── fable-font.eot │ │ │ ├── fable-font.svg │ │ │ ├── fable-font.ttf │ │ │ └── fable-font.woff │ └── img │ │ └── logo.png └── style.scss ├── global.json ├── nacara.config.json ├── package-lock.json ├── package.json └── src ├── Fable.Elmish.Debugger.fsproj ├── Fable.Import.RemoteDev.fs └── debugger.fs /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ### Contributor guidelines 2 | 3 | First of all - thanks for taking the time to contribute! 4 | 5 | With that in mind, elmish is a young project and as such while we welcome the contributions from non-member there are certain things we'd like to get more right than fast. To make everyone's experience as enjoyable as possible please keep the following things in mind: 6 | 7 | * Unless it's a trivial fix, consider opening an issue first to discuss it with the team. 8 | * If you are just looking for something to take on, check the *help wanted" labeled items 9 | 10 | 11 | ### Opening an Issue 12 | 13 | * Before you do, please check if there's a known work around, existing issue or already a work in progress to address it. 14 | * If you just don't know how to do something consider asking in the gitter, there are always helpful people around. 15 | * Provide as much info as possible - follow the template if it makes sense, attach screenshots or logs if applicable. 16 | 17 | 18 | ### Pull requests 19 | 20 | To make it easier to review the changes and get you code into the repo keep the commit history clean: 21 | 22 | * [rebase your pulls](https://coderwall.com/p/tnoiug/rebase-by-default-when-doing-git-pull) on the latest from repo 23 | * only push the commits relevant to the PR 24 | 25 | If adding a feature, also consider adding a sample (or link to one). 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | 3 | Please provide a succinct description of your issue. 4 | 5 | ### Repro code 6 | 7 | Please provide the F# code to reproduce the problem. 8 | Ideally, it should be possibe to easily turn this code into a unit test. 9 | 10 | ### Expected and actual results 11 | 12 | Please provide the expected and actual results. 13 | 14 | ### Related information 15 | 16 | * elmish version: 17 | * fable-compiler version: 18 | * fable-core version: 19 | * Operating system: 20 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: .NET 2 | 3 | on: 4 | push: 5 | branches: [ v4.x ] 6 | pull_request: 7 | branches: [ v4.x ] 8 | 9 | jobs: 10 | build: 11 | 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Setup .NET 17 | uses: actions/setup-dotnet@v1 18 | with: 19 | dotnet-version: 6.0.x 20 | - name: Build 21 | run: ./build.fsx 22 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | on: 3 | push: 4 | branches: 5 | - v4.x 6 | workflow_dispatch: 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - name: Setup .NET 13 | uses: actions/setup-dotnet@v1 14 | with: 15 | dotnet-version: '6.0.x' 16 | - name: Setup Node.js 17 | uses: actions/setup-node@v2 18 | with: 19 | node-version: '16' 20 | - name: Install and use custom npm version 21 | run: npm i -g npm@7 22 | - name: Install NPM dependencies 23 | run: npm install 24 | - name: Build site 25 | run: ./build.fsx -t GenerateDocs 26 | - name: Deploy site 27 | uses: peaceiris/actions-gh-pages@v3 28 | with: 29 | personal_token: ${{ secrets.GITHUB_TOKEN }} 30 | publish_dir: ./docs_deploy 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # node.js 6 | # 7 | **/node_modules/ 8 | **/npm/ 9 | npm-debug.log 10 | 11 | # F# 12 | .fake/ 13 | packages/ 14 | paket-files 15 | .paket/load 16 | build/ 17 | obj 18 | bin 19 | out 20 | 21 | # git 22 | *.orig 23 | 24 | .vs 25 | 26 | docs/output 27 | docs/temp 28 | 29 | Directory.Build.props 30 | temp 31 | .ionide 32 | 33 | .nacara 34 | docs_deploy/ 35 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright 2016 elmish contributors 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Elmish-Debugger: [Remote DevTools](https://github.com/zalmoxisus/remotedev) integration for [elmish](https://github.com/fable-compiler/elmish) applications. 2 | ======= 3 | 4 | [![Build status](https://ci.appveyor.com/api/projects/status/jbf5g40hpaib626t/branch/v4.x?svg=true)](https://ci.appveyor.com/project/et1975/debugger/branch/v4.x) [![NuGet version](https://badge.fury.io/nu/Fable.Elmish.Debugger.svg)](https://badge.fury.io/nu/Fable.Elmish.Debugger) 5 | 6 | For more information see [the docs](https://elmish.github.io/debugger). 7 | 8 | ## Installation 9 | ```shell 10 | yarn add remotedev@^0.2.4 -D 11 | paket add nuget Fable.Elmish.Debugger 12 | ``` 13 | 14 | Follow the monitor installation instructions at [Remote DevTools](https://github.com/zalmoxisus/remotedev) site. 15 | 16 | 17 | -------------------------------------------------------------------------------- /RELEASE_NOTES.md: -------------------------------------------------------------------------------- 1 | ## 4.2.2 2 | 3 | * `actionCreators` support, thanks to @mardukbp 4 | 5 | ## 4.2.1 6 | 7 | * Fix regression in treatment of action types, thanks to @mardukbp 8 | 9 | ## 4.2.0 10 | 11 | * Connect to local extension with only 'jsan`, thanks to @mardukbp 12 | 13 | ## 4.1.0 14 | 15 | * Allow using Redux Devtools directly without remotedev 16 | 17 | ## 4.0.0 18 | 19 | * Breaking: elmish v4 subscriptions support 20 | 21 | ## 4.0.0-beta-2 22 | 23 | * New subscriptions support 24 | 25 | ## 4.0.0-beta-1 26 | 27 | * Elmish 4.0 support 28 | 29 | ## 3.3.0 30 | 31 | * Upgrade Thoth.Json to version 6 32 | * Keep FSharp.Core requirements lowered to 4.7.2 33 | 34 | ## 3.2.0 35 | 36 | * Release stable version 37 | 38 | ## 3.2.0-beta-1 39 | 40 | * Upgrade Thoth.Json to version 4 41 | 42 | ## 3.1.0 43 | 44 | * Fix #38: Upgrade Thoth.Json to latest version 45 | 46 | ## 4.0.0-alpha-1 47 | 48 | * Elmish 3.0 release 49 | 50 | ## 3.0.3 51 | 52 | * Fix #33: getActionType via remotedev 53 | * Better display of nested messages 54 | 55 | ## 3.0.2 56 | 57 | * Fix #30: Add Thoth extra coders 58 | 59 | ## 3.0.1 60 | 61 | * Fix #28: Converting circular structure to JSON 62 | 63 | ## 3.0.0 64 | 65 | * Elmish 3.0 release 66 | 67 | ## 3.0.0-beta-3 68 | 69 | * Elmish 3.0 opaque `Program` support 70 | 71 | ## 3.0.0-beta-2 72 | 73 | * Elmish 3.0 compat 74 | 75 | ## 2.0.2 76 | 77 | * Thoth serialization by Alfonso 78 | 79 | ## 2.0.0 80 | 81 | * Stable release for Fable2 82 | 83 | ## 2.0.0-beta-5 84 | 85 | * inlining for Fable2 reflection to work 86 | 87 | ## 2.0.0-beta-4 88 | 89 | * Re-releasing v1 for Fable2 90 | 91 | ## 1.0.2 92 | 93 | * backporting the build 94 | 95 | ## 1.0.1 96 | 97 | * report errors fix by @zaaack 98 | 99 | ## 1.0.0 100 | 101 | * debounce by Alfonso 102 | 103 | ## 1.0.0-beta-1 104 | 105 | * dotnet 2.0 SDK build 106 | 107 | ## 0.9.0 108 | 109 | * Fable 1.1.x build 110 | 111 | ## 0.9.0-beta-6 112 | 113 | * Using FSharp.Reflection, all the glory goes to Jonathan Ohlrich 114 | 115 | ## 0.9.0-beta-1 116 | 117 | * Targeting Fable 1.x 118 | 119 | ## 0.1.2 120 | 121 | * Safely continue if the monitor is not available 122 | 123 | ## 0.1.1 124 | 125 | * Adding basic import support 126 | 127 | ## 0.1.0 128 | 129 | * Releasing the debugger support 130 | 131 | ## 0.1.0-alpha.5 132 | 133 | * Everyting that Fable can `inflate` should work when time-traveling 134 | 135 | ## 0.1.0-alpha.2 136 | 137 | * Simple state works 138 | 139 | ## 0.1.0-alpha.1 140 | 141 | * Initial debugger release 142 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2022 2 | 3 | install: 4 | - ps: Install-Product node 17 x64 5 | - ps: dotnet tool restore 6 | 7 | build_script: 8 | - cmd: dotnet fsi build.fsx 9 | 10 | cache: 11 | - "%LOCALAPPDATA%\\Yarn" 12 | -------------------------------------------------------------------------------- /babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "@babel/preset-react" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /build.fsx: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S dotnet fsi 2 | #r "nuget: Fake.Core.Target, 5.23.1" 3 | #r "nuget: Fake.IO.FileSystem, 5.23.1" 4 | #r "nuget: Fake.DotNet.Cli, 5.23.1" 5 | #r "nuget: Fake.Core.Target, 5.23.1" 6 | #r "nuget: Fake.Core.ReleaseNotes, 5.23.1" 7 | #r "nuget: Fake.Tools.Git, 5.23.1" 8 | 9 | #nowarn "52" 10 | 11 | open System 12 | open System.IO 13 | open Fake.Core 14 | open Fake.Core.TargetOperators 15 | open Fake.DotNet 16 | open Fake.Tools 17 | open Fake.IO 18 | open Fake.IO.FileSystemOperators 19 | open Fake.IO.Globbing.Operators 20 | 21 | 22 | let gitName = "debugger" 23 | let gitOwner = "elmish" 24 | let gitHome = sprintf "https://github.com/%s" gitOwner 25 | let gitRepo = sprintf "git@github.com:%s/%s.git" gitOwner gitName 26 | 27 | // Filesets 28 | let projects = 29 | !! "src/**.fsproj" 30 | 31 | System.Environment.GetCommandLineArgs() 32 | |> Array.skip 2 // fsi.exe; build.fsx 33 | |> Array.toList 34 | |> Context.FakeExecutionContext.Create false __SOURCE_FILE__ 35 | |> Context.RuntimeContext.Fake 36 | |> Context.setExecutionContext 37 | 38 | let withWorkDir = DotNet.Options.withWorkingDirectory 39 | 40 | Target.create "Clean" (fun _ -> 41 | Shell.cleanDir "src/obj" 42 | Shell.cleanDir "src/bin" 43 | ) 44 | 45 | Target.create "Restore" (fun _ -> 46 | projects 47 | |> Seq.iter (fun s -> 48 | let dir = Path.GetDirectoryName s 49 | DotNet.restore (fun a -> a.WithCommon (withWorkDir dir)) s 50 | ) 51 | ) 52 | 53 | Target.create "Build" (fun _ -> 54 | projects 55 | |> Seq.iter (fun s -> 56 | let dir = Path.GetDirectoryName s 57 | DotNet.build (fun a -> 58 | a.WithCommon 59 | (fun c -> 60 | let c = c |> withWorkDir dir 61 | {c with CustomParams = Some "/p:SourceLinkCreate=true"})) 62 | s 63 | ) 64 | ) 65 | 66 | let release = ReleaseNotes.load "RELEASE_NOTES.md" 67 | 68 | Target.create "Meta" (fun _ -> 69 | [ "" 70 | "" 71 | "Debugger for Elmish apps" 72 | "https://github.com/elmish/debugger" 73 | "https://raw.githubusercontent.com/elmish/debugger/master/LICENSE.md" 74 | "https://raw.githubusercontent.com/elmish/debugger/master/docs/files/img/logo.png" 75 | "https://github.com/elmish/debugger.git" 76 | sprintf "%s" (List.head release.Notes) 77 | "fable;elmish;fsharp;debugger" 78 | "Eugene Tolmachev" 79 | sprintf "%s" (string release.SemVer) 80 | "" 81 | ""] 82 | |> File.write false "Directory.Build.props" 83 | ) 84 | 85 | // -------------------------------------------------------------------------------------- 86 | // Build a NuGet package 87 | 88 | Target.create "Package" (fun _ -> 89 | projects 90 | |> Seq.iter (fun s -> 91 | let dir = Path.GetDirectoryName s 92 | DotNet.pack (fun a -> 93 | a.WithCommon (withWorkDir dir) 94 | ) s 95 | ) 96 | ) 97 | 98 | Target.create "PublishNuget" (fun _ -> 99 | let exec dir = 100 | DotNet.exec (fun a -> 101 | a.WithCommon (withWorkDir dir) 102 | ) 103 | 104 | let args = sprintf "push Fable.Elmish.Debugger.%s.nupkg -s nuget.org -k %s" (string release.SemVer) (Environment.environVar "nugetkey") 105 | let result = exec "src/bin/Release" "nuget" args 106 | if (not result.OK) then failwithf "%A" result.Errors 107 | ) 108 | 109 | 110 | // -------------------------------------------------------------------------------------- 111 | // Generate the documentation 112 | Target.create "GenerateDocs" (fun _ -> 113 | let res = Shell.Exec("npm", "run docs:build") 114 | 115 | if res <> 0 then 116 | failwithf "Failed to generate docs" 117 | ) 118 | 119 | Target.create "WatchDocs" (fun _ -> 120 | let res = Shell.Exec("npm", "run docs:watch") 121 | 122 | if res <> 0 then 123 | failwithf "Failed to watch docs: %d" res 124 | ) 125 | 126 | // -------------------------------------------------------------------------------------- 127 | // Release Scripts 128 | 129 | Target.create "ReleaseDocs" (fun _ -> 130 | let res = Shell.Exec("npm", "run docs:publish") 131 | 132 | if res <> 0 then 133 | failwithf "Failed to publish docs: %d" res 134 | ) 135 | 136 | Target.create "Publish" ignore 137 | 138 | // Build order 139 | "Clean" 140 | ==> "Meta" 141 | ==> "Restore" 142 | ==> "Build" 143 | ==> "Package" 144 | ==> "PublishNuget" 145 | ==> "Publish" 146 | 147 | // start build 148 | Target.runOrDefault "Build" 149 | -------------------------------------------------------------------------------- /docs/_partials/footer.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const SitemapSection = ({ title, children }) => ( 4 |
5 |
6 | {title} 7 |
8 | 11 |
12 | ) 13 | 14 | const SitemapSectionItem = ({ text, icon, url }) => ( 15 |
  • 16 | 17 | 18 | 19 | 20 | 21 | {text} 22 | 23 | 24 |
  • 25 | ) 26 | 27 | const CopyrightScript = () => ( 28 |