Skip to content
A JupyterLab extension implementing a Blockly palette with Fable tooling.
F# Other
  1. F# 99.8%
  2. Other 0.2%
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.paket
media
src
style
tests
ts2fable-raw-output
.gitignore
LICENSE
README.md
package-lock.json
package.json
paket.dependencies
paket.lock
screenshot.png
webpack.config.js

README.md

fable-jupyterlab-blockly-extension

A JupyterLab extension implementing a Blockly palette with Fable tooling.

Installation

jupyter labextension install @aolney/fable-jupyterlab-blockly-extension

Updating to latest version

jupyter labextension update @aolney/fable-jupyterlab-blockly-extension

Development

This is based on my personal preferences. For more options, see the extension development guide.

Prerequisites

Initial install and after library adds

npm install
mono .paket/paket.exe install
npm run build

Terminal A in VSCode

jupyter labextension install . --no-build
npm run watch

This will watch your F# code and trigger builds of index.js.

If you prefer not to trigger builds using a watch, you can npm run build every time you want a new build.

Terminal B in VSCode

jupyter lab --watch

This will watch your extension and trigger builds of it.

Even with this watch, you still need to refresh your browser during development.

Project structure

npm/yarn

JS dependencies are declared in package.json, while package-lock.json is a lock file automatically generated.

paket

Paket

Paket is a dependency manager for .NET and mono projects, which is designed to work well with NuGet packages and also enables referencing files directly from Git repositories or any HTTP resource. It enables precise and predictable control over what packages the projects within your application reference.

.NET dependencies are declared in paket.dependencies. The src/paket.references lists the libraries actually used in the project. Since you can have several F# projects, we could have different custom .paket files for each project.

Last but not least, in the .fsproj file you can find a new node: <Import Project="..\.paket\Paket.Restore.targets" /> which just tells the compiler to look for the referenced libraries information from the .paket/Paket.Restore.targets file.

Fable-splitter

Fable-splitter is a standalone tool which outputs separated files instead of a single bundle. Here all the js files are put into the lib. And the main entry point is our index.js file.

Imports

Because Jupyter uses Typescript, we can use ts2fable to generate strongly typed imports of Jupyter's JS packages. Unfortunately these are a bit huge and the conversion is messy. I might release them as a nuget package once they are cleaned up. ts2fable-raw-output has the initial conversion which is cleaned up enough to compile i nthe src directory.

You can’t perform that action at this time.