Skip to content

Latest commit

 

History

History
125 lines (89 loc) · 4.48 KB

README.md

File metadata and controls

125 lines (89 loc) · 4.48 KB

Script for converting WorkFlowy JSON into Roam import JSON. You can already easily copy-paste between WorkFlowy & Roam , but this script will preserve edit stamps and turn top-level nodes (or nodes at some other level) into their own pages.

Works as both a node module for use in other projects, as well as a command-line interface. The cli can be used in many diverse ways.

As node module

Install to your node project

npm install --save wf2roam

Use it

const wf2roam = require('wf2roam')
const nodes = [{
  id: '20a2fccc-14e6-8c32-ab80-d0ba4bec4787',
  nm: 'wf roam tests',
  lm: 120929766,
  ch: [{
    id: '432fbc98-9e0c-d5be-a3e9-684af64a24a3',
    nm: '<b>test bold</b>',
    lm: 120929764
  }, {
    id: '26ffd132-2c2f-578f-4eaa-bffa22a9df03',
    nm: '<b><i><u>bold italic underline</u></i></b>',
    lm: 120933180
  }]
}]
const dateJoinedTimestampInSeconds = 1467241264
const options = {underlineToHighlight: true}
const roamJson = wf2roam.convertJsonObject(nodes, dateJoinedTimestampInSeconds, options)

result:

  {
    "title": "wf roam tests",
    "children": [
      {
        "string": "**test bold**",
        "uid": "432fbc98-9e0c-d5be-a3e9-684af64a24a3",
        "edit-time": 1588171028000
      },
      {
        "string": "**__^^bold italic underline^^__**",
        "uid": "26ffd132-2c2f-578f-4eaa-bffa22a9df03",
        "edit-time": 1588174444000
      }
    ]
  }
]```

# As command-line script

## Install as a command-line tool

```bash
npm install --global wf2roam

Use it

The simplest way to use it is to run the command with -o for the output path, and it will guide you through authenticating with workflowy (using opusfluxus) then will pull your workflowy data and convert it and save it to this file. If you omit the -o flag it will show you a preview in the console instead.

This will convert each of your top-level workflowy nodes into a roam page.

wf2roam -o roam_format_output.json

With this method, your sessionid will be stored in a ~/.wfconfig file for future uses, which is very convenient.

Cool stuff

Convert just one node into a page, or convert a node's children into a page

Navigate to a given node in WorkFlowy, then copy the 12 digits from the url fragment after /#/ (eg 14d48414c3c8)

wf2roam --wfid=14d48414c3c8

This will convert just that node into a Roam page.

If you have a "Drafts" node in WorkFlowy and you want each of its children to be made into a Roam page, then get its id like above then run the command with the --ch (children) parameter.

wf2roam --wfid=14d48414c3c8 --ch

Conversion options

The command-line tool doesn't actually support this yet.

Reminder that you'll want to use a -o flag to save as JSON.

Other authentication methods

If for some reason you don't want to use the above simple mode of getting your workflowy data, you can supply your own sessionid (which is a cookie set on workflowy.com) like this:

wf2roam sessionid afh983wf5yh89w3fh5

Or, you can provide your own data file, by scoping out the Network tab of your browser's web developer console on workflowy.com, and saving the get_initialization_data response as a JSON file, then running

wf2roam initdata mydata.json

This data includes not just the tree but also a vital piece of metadata: the moment you created your WorkFlowy account. All of the WorkFlowy "last modified" timestamps are relative to this, not to some static time. I have no clue why.

TODO

  • custom string modifier functions - say you want to convert all references to a https://complice.co/ to instead be references to [[Complice]]... this would let you pass a function to the converter, and that function would be run on every node.nm as it becomes a block.string (there are probably better examples of what you might want to use this for)
  • workflowy link to block ref - convert https://workflowy.com/#/1234567890ab to ((1234567890ab))
  • workflowy link to page ref - I guess if 1234567890ab becomes a page, it should get a pageref link instead

Contributing

Ummm yeah hmu. I haven't done much managing of OSS projects but if you submit a pull request we can figure something out. Talk to me about it on Twitter @Malcolm_Ocean as I don't check GitHub notifications much.

See here for Roam's JSON schema.