samhh / bukubrow-webext

WebExtension for Buku
GNU General Public License v3.0
310 stars 21 forks source link

No tags at all added in 2.4.2 release #67

Closed isakrubin closed 5 years ago

isakrubin commented 5 years ago

This is a follow up on https://github.com/SamHH/bukubrow/issues/64

After updating to the 2.4.2 release, the tags issue is gone, however so are the tags.

Adding tags from the browser results in no tags being saved, opening a freshly saved bookmark with buku -w # shows just a blank line.

samhh commented 5 years ago

I'm failing to reproduce this.

Which browser? Binary version? Very specific repro steps?

isakrubin commented 5 years ago

Same browser as the issue referenced above Version 69.0.3497.100 (Official Build) (64-bit). Bukubrow seems to have auto updated to 2.4.2, I have however not restarted the browser since the update.

Update: Just did a restart of the browser and experience the same issue.

bukubrow_2018-10-16_18-15

isakrubin commented 5 years ago

Full steps to reproduce:

$ buku --version           
3.9
$ google-chrome --version                    
Google Chrome 70.0.3538.67 
$ npm --version
3.10.10

bukubrow fresh master clone

$ git clone git@github.com:SamHH/bukubrow.git
Cloning into 'bukubrow'...
remote: Enumerating objects: 56, done.
remote: Counting objects: 100% (56/56), done.
remote: Compressing objects: 100% (48/48), done.
remote: Total 1084 (delta 15), reused 30 (delta 8), pack-reused 1028
Receiving objects: 100% (1084/1084), 597.08 KiB | 267.00 KiB/s, done.
Resolving deltas: 100% (600/600), done.
Binary build
$ make binary-linux-x64
make prepare-binary
make[1]: Entering directory '/home/censored/bukubrow'
make prepare
make[2]: Entering directory '/home/censored/bukubrow'
mkdir -p .build release
make[2]: Leaving directory '/home/censored/bukubrow'
cp binary/browser-hosts/chrome.json .build/chrome-host.json
cp binary/browser-hosts/firefox.json .build/firefox-host.json
cp binary/install.sh .build/
make[1]: Leaving directory '/home/censored/bukubrow'
cd binary && cargo build --release --target=x86_64-unknown-linux-gnu
   Compiling cc v1.0.25
   Compiling proc-macro2 v0.4.19
   Compiling pkg-config v0.3.14
   Compiling serde v1.0.79
   Compiling unicode-xid v0.1.0
   Compiling libc v0.2.43
   Compiling ryu v0.2.6
   Compiling cfg-if v0.1.5
   Compiling rustc-demangle v0.1.9
   Compiling itoa v0.4.3
   Compiling linked-hash-map v0.4.2
   Compiling byteorder v1.2.6
   Compiling bitflags v1.0.4
   Compiling time v0.1.40
   Compiling lru-cache v0.1.1
   Compiling libsqlite3-sys v0.9.3
   Compiling rusqlite v0.14.0
   Compiling backtrace-sys v0.1.24
   Compiling quote v0.6.8
   Compiling syn v0.15.6
   Compiling backtrace v0.3.9
   Compiling error-chain v0.11.0
   Compiling serde_json v1.0.30
   Compiling serde_derive v1.0.79
   Compiling chrome_native_messaging v0.1.2
   Compiling bukubrow v1.1.0 (file:///home/censored/bukubrow/binary)
    Finished release [optimized] target(s) in 57.59s
mv binary/target/x86_64-unknown-linux-gnu/release/bukubrow .build/bukubrow-linux-x64
cd .build && zip -r '../release/binary-linux-x64' ./*
  adding: bukubrow-linux-x64 (deflated 60%)
  adding: chrome-host.json (deflated 37%)
  adding: firefox-host.json (deflated 26%)
  adding: install.sh (deflated 67%)
make clean
make[1]: Entering directory '/home/censored/bukubrow'
rm -rf .build
webex build
$ make webext          
make prepare
make[1]: Entering directory '/home/censored/bukubrow'
mkdir -p .build release
make[1]: Leaving directory '/home/censored/bukubrow'
cd webextension && npm ci && npm run build

Usage: npm <command>

where <command> is one of:
    access, adduser, bin, bugs, c, cache, completion, config,
    ddp, dedupe, deprecate, dist-tag, docs, edit, explore, get,
    help, help-search, i, init, install, install-test, it, link,
    list, ln, login, logout, ls, outdated, owner, pack, ping,
    prefix, prune, publish, rb, rebuild, repo, restart, root,
    run, run-script, s, se, search, set, shrinkwrap, star,
    stars, start, stop, t, tag, team, test, tst, un, uninstall,
    unpublish, unstar, up, update, v, version, view, whoami

npm <cmd> -h     quick help on <cmd>
npm -l           display full usage info
npm help <term>  search for help on <term>
npm help npm     involved overview

Specify configs in the ini-formatted file:
    /home/censored/.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

npm@3.10.10 /usr/lib/node_modules/npm
make: *** [makefile:30: webext] Error 1

# npm ci fails so remove it from makefile
$ sed -i 's/&& npm ci //' makefile           

 11:38:32  x@pi008  ....archives/software/bukubrow  ⬡ v6.14.4   master ✘ ✹ 
$ make webext
make prepare
make[1]: Entering directory '/home/censored/bukubrow'
mkdir -p .build release
make[1]: Leaving directory '/home/censored/bukubrow'
cd webextension && npm run build

> bukubrow@2.4.2 build /home/censored/bukubrow/webextension
> rm -rf ./dist/ && NODE_ENV=production webpack

module.js:478
    throw err;
    ^

Error: Cannot find module 'copy-webpack-plugin'
    at Function.Module._resolveFilename (module.js:476:15)
    at Function.Module._load (module.js:424:25)
    at Module.require (module.js:504:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/home/censored/bukubrow/webextension/webpack.config.js:4:27)
    at Module._compile (module.js:577:32)
    at Object.Module._extensions..js (module.js:586:10)
    at Module.load (module.js:494:32)
    at tryModuleLoad (module.js:453:12)
    at Function.Module._load (module.js:445:3)

npm ERR! Linux 4.17.0-1-amd64
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "run" "build"
npm ERR! node v6.14.4
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! bukubrow@2.4.2 build: `rm -rf ./dist/ && NODE_ENV=production webpack`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the bukubrow@2.4.2 build script 'rm -rf ./dist/ && NODE_ENV=production webpack'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the bukubrow package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     rm -rf ./dist/ && NODE_ENV=production webpack
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs bukubrow
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls bukubrow
npm ERR! There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! Please include the following file with any support request:
npm ERR!     /home/censored/webextension/npm-debug.log
make: *** [makefile:30: webext] Error 1

# fail again so download npm packages
$ cd webextension     

 11:39:19  x@pi008  ...software/bukubrow/webextension  ⬡ v6.14.4   master ✘ ✹ 
$ npm install  
npm WARN deprecated inversify@4.14.0: Re-Released as 5.0.1
bukubrow@2.4.2 /home/censored/bukubrow/webextension
├─┬ @types/chrome@0.0.74 
│ └─┬ @types/filesystem@0.0.29 
│   └── @types/filewriter@0.0.28 
├── @types/classnames@2.2.6 
├── @types/jest@23.3.5 
├─┬ @types/react@16.4.18 
│ ├── @types/prop-types@15.5.6 
│ └── csstype@2.5.7 
├─┬ @types/react-dom@16.0.9 
│ └── @types/node@10.12.0 
├── @types/react-test-renderer@16.0.3 
├── @types/shortid@0.0.29 
├─┬ autoprefixer@9.2.1 
│ ├─┬ browserslist@4.3.0 
│ │ ├── electron-to-chromium@1.3.80 
│ │ └── node-releases@1.0.0-alpha.14 
│ ├── caniuse-lite@1.0.30000893 
│ ├── normalize-range@0.1.2 
│ ├── num2fraction@1.2.2 
│ ├─┬ postcss@7.0.5 
│ │ └── source-map@0.6.1 
│ └── postcss-value-parser@3.3.1 
├─┬ awesome-typescript-loader@5.2.1 
│ ├─┬ chalk@2.4.1 
│ │ ├─┬ ansi-styles@3.2.1 
│ │ │ └─┬ color-convert@1.9.3 
│ │ │   └── color-name@1.1.3 
│ │ └── escape-string-regexp@1.0.5 
│ ├─┬ enhanced-resolve@4.1.0 
│ │ └── graceful-fs@4.1.11 
│ ├─┬ loader-utils@1.1.0 
│ │ ├── big.js@3.2.0 
│ │ ├── emojis-list@2.1.0 
│ │ └── json5@0.5.1 
│ ├── lodash@4.17.11 
│ ├─┬ micromatch@3.1.10 
│ │ ├── arr-diff@4.0.0 
│ │ ├── array-unique@0.3.2 
│ │ ├─┬ braces@2.3.2 
│ │ │ ├── arr-flatten@1.1.0 
│ │ │ ├─┬ extend-shallow@2.0.1 
│ │ │ │ └── is-extendable@0.1.1 
│ │ │ ├─┬ fill-range@4.0.0 
│ │ │ │ ├── extend-shallow@2.0.1 
│ │ │ │ ├─┬ is-number@3.0.0 
│ │ │ │ │ └── kind-of@3.2.2 
│ │ │ │ ├── repeat-string@1.6.1 
│ │ │ │ └── to-regex-range@2.1.1 
│ │ │ ├── isobject@3.0.1 
│ │ │ ├── repeat-element@1.1.3 
│ │ │ ├─┬ snapdragon-node@2.1.1 
│ │ │ │ ├─┬ define-property@1.0.0 
│ │ │ │ │ └─┬ is-descriptor@1.0.2 
│ │ │ │ │   ├── is-accessor-descriptor@1.0.0 
│ │ │ │ │   └── is-data-descriptor@1.0.0 
│ │ │ │ └─┬ snapdragon-util@3.0.1 
│ │ │ │   └── kind-of@3.2.2 
│ │ │ └── split-string@3.1.0 
│ │ ├─┬ define-property@2.0.2 
│ │ │ └─┬ is-descriptor@1.0.2 
│ │ │   ├── is-accessor-descriptor@1.0.0 
│ │ │   └── is-data-descriptor@1.0.0 
│ │ ├─┬ extend-shallow@3.0.2 
│ │ │ ├── assign-symbols@1.0.0 
│ │ │ └─┬ is-extendable@1.0.1 
│ │ │   └── is-plain-object@2.0.4 
│ │ ├─┬ extglob@2.0.4 
│ │ │ ├─┬ define-property@1.0.0 
│ │ │ │ └─┬ is-descriptor@1.0.2 
│ │ │ │   ├── is-accessor-descriptor@1.0.0 
│ │ │ │   └── is-data-descriptor@1.0.0 
│ │ │ ├─┬ expand-brackets@2.1.4 
│ │ │ │ ├── define-property@0.2.5 
│ │ │ │ ├── extend-shallow@2.0.1 
│ │ │ │ └── posix-character-classes@0.1.1 
│ │ │ └── extend-shallow@2.0.1 
│ │ ├─┬ fragment-cache@0.2.1 
│ │ │ └── map-cache@0.2.2 
│ │ ├── kind-of@6.0.2 
│ │ ├─┬ nanomatch@1.2.13 
│ │ │ └── is-windows@1.0.2 
│ │ ├── object.pick@1.3.0 
│ │ ├─┬ regex-not@1.0.2 
│ │ │ └─┬ safe-regex@1.1.0 
│ │ │   └── ret@0.1.15 
│ │ ├─┬ snapdragon@0.8.2 
│ │ │ ├─┬ base@0.11.2 
│ │ │ │ ├─┬ cache-base@1.0.1 
│ │ │ │ │ ├─┬ collection-visit@1.0.0 
│ │ │ │ │ │ ├── map-visit@1.0.0 
│ │ │ │ │ │ └── object-visit@1.0.1 
│ │ │ │ │ ├── get-value@2.0.6 
│ │ │ │ │ ├─┬ has-value@1.0.0 
│ │ │ │ │ │ └─┬ has-values@1.0.0 
│ │ │ │ │ │   └── kind-of@4.0.0 
│ │ │ │ │ ├─┬ set-value@2.0.0 
│ │ │ │ │ │ └── extend-shallow@2.0.1 
│ │ │ │ │ ├─┬ to-object-path@0.3.0 
│ │ │ │ │ │ └── kind-of@3.2.2 
│ │ │ │ │ ├─┬ union-value@1.0.0 
│ │ │ │ │ │ └─┬ set-value@0.4.3 
│ │ │ │ │ │   └── extend-shallow@2.0.1 
│ │ │ │ │ └─┬ unset-value@1.0.0 
│ │ │ │ │   └─┬ has-value@0.3.1 
│ │ │ │ │     ├── has-values@0.1.4 
│ │ │ │ │     └── isobject@2.1.0 
│ │ │ │ ├─┬ class-utils@0.3.6 
│ │ │ │ │ ├── arr-union@3.1.0 
│ │ │ │ │ ├── define-property@0.2.5 
│ │ │ │ │ └─┬ static-extend@0.1.2 
│ │ │ │ │   ├── define-property@0.2.5 
│ │ │ │ │   └─┬ object-copy@0.1.0 
│ │ │ │ │     ├── copy-descriptor@0.1.1 
│ │ │ │ │     ├── define-property@0.2.5 
│ │ │ │ │     └── kind-of@3.2.2 
│ │ │ │ ├── component-emitter@1.2.1 
│ │ │ │ ├─┬ define-property@1.0.0 
│ │ │ │ │ └─┬ is-descriptor@1.0.2 
│ │ │ │ │   ├── is-accessor-descriptor@1.0.0 
│ │ │ │ │   └── is-data-descriptor@1.0.0 
│ │ │ │ ├─┬ mixin-deep@1.3.1 
│ │ │ │ │ ├── for-in@1.0.2 
│ │ │ │ │ └── is-extendable@1.0.1 
│ │ │ │ └── pascalcase@0.1.1 
│ │ │ ├─┬ debug@2.6.9 
│ │ │ │ └── ms@2.0.0 
│ │ │ ├─┬ define-property@0.2.5 
│ │ │ │ └─┬ is-descriptor@0.1.6 
│ │ │ │   ├─┬ is-accessor-descriptor@0.1.6 
│ │ │ │   │ └── kind-of@3.2.2 
│ │ │ │   ├─┬ is-data-descriptor@0.1.4 
│ │ │ │   │ └── kind-of@3.2.2 
│ │ │ │   └── kind-of@5.1.0 
│ │ │ ├── extend-shallow@2.0.1 
│ │ │ ├── source-map@0.5.7 
│ │ │ ├─┬ source-map-resolve@0.5.2 
│ │ │ │ ├── atob@2.1.2 
│ │ │ │ ├── decode-uri-component@0.2.0 
│ │ │ │ ├── resolve-url@0.2.1 
│ │ │ │ ├── source-map-url@0.4.0 
│ │ │ │ └── urix@0.1.0 
│ │ │ └── use@3.1.1 
│ │ └── to-regex@3.0.2 
│ ├─┬ mkdirp@0.5.1 
│ │ └── minimist@0.0.8 
│ ├── source-map-support@0.5.9 
│ └─┬ webpack-log@1.2.0 
│   ├── log-symbols@2.2.0 
│   ├─┬ loglevelnext@1.0.5 
│   │ ├─┬ es6-symbol@3.1.1 
│   │ │ ├── d@1.0.0 
│   │ │ └─┬ es5-ext@0.10.46 
│   │ │   ├── es6-iterator@2.0.3 
│   │ │   └── next-tick@1.0.0 
│   │ └─┬ object.assign@4.1.0 
│   │   ├── function-bind@1.1.1 
│   │   └── has-symbols@1.0.0 
│   └── uuid@3.3.2 
├── case-sensitive-paths-webpack-plugin@2.1.2 
├── classnames@2.2.6 
├─┬ copy-webpack-plugin@4.5.4 
│ ├─┬ cacache@10.0.4 
│ │ ├── bluebird@3.5.2 
│ │ ├── chownr@1.1.1 
│ │ ├─┬ lru-cache@4.1.3 
│ │ │ ├── pseudomap@1.0.2 
│ │ │ └── yallist@2.1.2 
│ │ ├─┬ mississippi@2.0.0 
│ │ │ ├─┬ concat-stream@1.6.2 
│ │ │ │ └── typedarray@0.0.6 
│ │ │ ├─┬ duplexify@3.6.1 
│ │ │ │ └── stream-shift@1.0.0 
│ │ │ ├── end-of-stream@1.4.1 
│ │ │ ├── flush-write-stream@1.0.3 
│ │ │ ├── from2@2.3.0 
│ │ │ ├─┬ parallel-transform@1.1.0 
│ │ │ │ └── cyclist@0.2.2 
│ │ │ ├── pump@2.0.1 
│ │ │ ├── pumpify@1.5.1 
│ │ │ ├── stream-each@1.2.3 
│ │ │ └── through2@2.0.3 
│ │ ├─┬ move-concurrently@1.0.1 
│ │ │ ├── aproba@1.2.0 
│ │ │ ├─┬ copy-concurrently@1.0.5 
│ │ │ │ └── iferr@0.1.5 
│ │ │ ├─┬ fs-write-stream-atomic@1.0.10 
│ │ │ │ └── imurmurhash@0.1.4 
│ │ │ └── run-queue@1.0.3 
│ │ ├── promise-inflight@1.0.1 
│ │ ├─┬ ssri@5.3.0 
│ │ │ └── safe-buffer@5.1.2 
│ │ ├─┬ unique-filename@1.1.1 
│ │ │ └── unique-slug@2.0.1 
│ │ └── y18n@4.0.0 
│ ├─┬ find-cache-dir@1.0.0 
│ │ ├── commondir@1.0.1 
│ │ ├── make-dir@1.3.0 
│ │ └─┬ pkg-dir@2.0.0 
│ │   └─┬ find-up@2.1.0 
│ │     └─┬ locate-path@2.0.0 
│ │       └── p-locate@2.0.0 
│ ├─┬ globby@7.1.1 
│ │ ├─┬ array-union@1.0.2 
│ │ │ └── array-uniq@1.0.3 
│ │ ├─┬ dir-glob@2.0.0 
│ │ │ ├── arrify@1.0.1 
│ │ │ └── path-type@3.0.0 
│ │ ├── ignore@3.3.10 
│ │ ├── pify@3.0.0 
│ │ └── slash@1.0.0 
│ ├─┬ is-glob@4.0.0 
│ │ └── is-extglob@2.1.1 
│ ├─┬ minimatch@3.0.4 
│ │ └─┬ brace-expansion@1.1.11 
│ │   ├── balanced-match@1.0.0 
│ │   └── concat-map@0.0.1 
│ ├─┬ p-limit@1.3.0 
│ │ └── p-try@1.0.0 
│ └── serialize-javascript@1.5.0 
├─┬ css-loader@1.0.0 
│ ├─┬ babel-code-frame@6.26.0 
│ │ ├─┬ chalk@1.1.3 
│ │ │ ├── ansi-styles@2.2.1 
│ │ │ ├─┬ has-ansi@2.0.0 
│ │ │ │ └── ansi-regex@2.1.1 
│ │ │ ├── strip-ansi@3.0.1 
│ │ │ └── supports-color@2.0.0 
│ │ ├── esutils@2.0.2 
│ │ └── js-tokens@3.0.2 
│ ├─┬ css-selector-tokenizer@0.7.0 
│ │ ├── cssesc@0.1.0 
│ │ ├── fastparse@1.1.1 
│ │ └─┬ regexpu-core@1.0.0 
│ │   ├── regenerate@1.4.0 
│ │   ├── regjsgen@0.2.0 
│ │   └─┬ regjsparser@0.1.5 
│ │     └── jsesc@0.5.0 
│ ├─┬ icss-utils@2.1.0 
│ │ └── postcss@6.0.23 
│ ├── lodash.camelcase@4.3.0 
│ ├── postcss@6.0.23 
│ ├─┬ postcss-modules-extract-imports@1.2.0 
│ │ └── postcss@6.0.23 
│ ├─┬ postcss-modules-local-by-default@1.2.0 
│ │ └── postcss@6.0.23 
│ ├─┬ postcss-modules-scope@1.1.0 
│ │ └── postcss@6.0.23 
│ ├─┬ postcss-modules-values@1.3.0 
│ │ ├── icss-replace-symbols@1.1.0 
│ │ └── postcss@6.0.23 
│ └── source-list-map@2.0.1 
├─┬ html-webpack-plugin@3.2.0 
│ ├─┬ html-minifier@3.5.20 
│ │ ├─┬ camel-case@3.0.0 
│ │ │ ├─┬ no-case@2.3.2 
│ │ │ │ └── lower-case@1.1.4 
│ │ │ └── upper-case@1.1.3 
│ │ ├── clean-css@4.2.1 
│ │ ├── he@1.1.1 
│ │ ├── param-case@2.1.1 
│ │ ├── relateurl@0.2.7 
│ │ └── uglify-js@3.4.9 
│ ├── loader-utils@0.2.17 
│ ├─┬ pretty-error@2.1.1 
│ │ ├─┬ renderkid@2.0.2 
│ │ │ ├─┬ css-select@1.2.0 
│ │ │ │ ├── boolbase@1.0.0 
│ │ │ │ ├── css-what@2.1.0 
│ │ │ │ ├─┬ domutils@1.5.1 
│ │ │ │ │ └─┬ dom-serializer@0.1.0 
│ │ │ │ │   ├── domelementtype@1.1.3 
│ │ │ │ │   └── entities@1.1.1 
│ │ │ │ └── nth-check@1.0.1 
│ │ │ ├── dom-converter@0.2.0 
│ │ │ └─┬ htmlparser2@3.3.0 
│ │ │   ├── domelementtype@1.3.0 
│ │ │   ├── domhandler@2.1.0 
│ │ │   ├── domutils@1.1.6 
│ │ │   └─┬ readable-stream@1.0.34 
│ │ │     ├── isarray@0.0.1 
│ │ │     └── string_decoder@0.10.31 
│ │ └── utila@0.4.0 
│ ├── tapable@1.1.0 
│ ├── toposort@1.0.7 
│ └─┬ util.promisify@1.0.0 
│   ├─┬ define-properties@1.1.3 
│   │ └── object-keys@1.0.12 
│   └─┬ object.getownpropertydescriptors@2.0.3 
│     └─┬ es-abstract@1.12.0 
│       ├─┬ es-to-primitive@1.2.0 
│       │ ├── is-date-object@1.0.1 
│       │ └── is-symbol@1.0.2 
│       ├── has@1.0.3 
│       └── is-callable@1.1.4 
├─┬ jest@23.6.0 
│ ├─┬ import-local@1.0.0 
│ │ └─┬ resolve-cwd@2.0.0 
│ │   └── resolve-from@3.0.0 
│ └─┬ jest-cli@23.6.0 
│   ├── ansi-escapes@3.1.0 
│   ├── exit@0.1.2 
│   ├─┬ is-ci@1.2.1 
│   │ └── ci-info@1.6.0 
│   ├─┬ istanbul-api@1.3.7 
│   │ ├── async@2.6.1 
│   │ ├── fileset@2.0.3 
│   │ ├─┬ istanbul-lib-hook@1.2.2 
│   │ │ └─┬ append-transform@0.4.0 
│   │ │   └─┬ default-require-extensions@1.0.0 
│   │ │     └─┬ strip-bom@2.0.0 
│   │ │       └── is-utf8@0.2.1 
│   │ ├─┬ istanbul-lib-report@1.1.5 
│   │ │ └─┬ supports-color@3.2.3 
│   │ │   └── has-flag@1.0.0 
│   │ └─┬ istanbul-reports@1.5.1 
│   │   └─┬ handlebars@4.0.12 
│   │     └─┬ optimist@0.6.1 
│   │       └── wordwrap@0.0.3 
│   ├── istanbul-lib-coverage@1.2.1 
│   ├─┬ istanbul-lib-instrument@1.10.2 
│   │ ├─┬ babel-generator@6.26.1 
│   │ │ ├── babel-messages@6.23.0 
│   │ │ ├─┬ babel-runtime@6.26.0 
│   │ │ │ ├── core-js@2.5.7 
│   │ │ │ └── regenerator-runtime@0.11.1 
│   │ │ ├─┬ detect-indent@4.0.0 
│   │ │ │ └─┬ repeating@2.0.1 
│   │ │ │   └── is-finite@1.0.2 
│   │ │ ├── jsesc@1.3.0 
│   │ │ ├── source-map@0.5.7 
│   │ │ └── trim-right@1.0.1 
│   │ ├── babel-template@6.26.0 
│   │ ├─┬ babel-traverse@6.26.0 
│   │ │ └── globals@9.18.0 
│   │ ├─┬ babel-types@6.26.0 
│   │ │ └── to-fast-properties@1.0.3 
│   │ └── babylon@6.18.0 
│   ├─┬ istanbul-lib-source-maps@1.2.6 
│   │ ├─┬ debug@3.2.6 
│   │ │ └── ms@2.1.1 
│   │ └── source-map@0.5.7 
│   ├─┬ jest-changed-files@23.4.2 
│   │ └── throat@4.1.0 
│   ├─┬ jest-config@23.6.0 
│   │ ├─┬ babel-core@6.26.3 
│   │ │ ├── babel-helpers@6.24.1 
│   │ │ ├─┬ babel-register@6.26.0 
│   │ │ │ ├─┬ home-or-tmp@2.0.0 
│   │ │ │ │ ├── os-homedir@1.0.2 
│   │ │ │ │ └── os-tmpdir@1.0.2 
│   │ │ │ └─┬ source-map-support@0.4.18 
│   │ │ │   └── source-map@0.5.7 
│   │ │ ├── private@0.1.8 
│   │ │ └── source-map@0.5.7 
│   │ ├─┬ babel-jest@23.6.0 
│   │ │ └─┬ babel-preset-jest@23.2.0 
│   │ │   └── babel-plugin-jest-hoist@23.2.0 
│   │ ├── jest-environment-node@23.4.0 
│   │ ├─┬ jest-jasmine2@23.6.0 
│   │ │ ├── co@4.6.0 
│   │ │ ├── expect@23.6.0 
│   │ │ ├── is-generator-fn@1.0.0 
│   │ │ └── jest-each@23.6.0 
│   │ ├─┬ jest-resolve@23.6.0 
│   │ │ └── browser-resolve@1.11.3 
│   │ ├─┬ micromatch@2.3.11 
│   │ │ ├── arr-diff@2.0.0 
│   │ │ ├── array-unique@0.2.1 
│   │ │ ├── braces@1.8.5 
│   │ │ ├── expand-brackets@0.1.5 
│   │ │ ├── extglob@0.3.2 
│   │ │ ├── is-extglob@1.0.0 
│   │ │ ├── is-glob@2.0.1 
│   │ │ └── kind-of@3.2.2 
│   │ └─┬ pretty-format@23.6.0 
│   │   └── ansi-regex@3.0.0 
│   ├─┬ jest-environment-jsdom@23.4.0 
│   │ ├── jest-mock@23.2.0 
│   │ └─┬ jsdom@11.12.0 
│   │   ├── abab@2.0.0 
│   │   ├─┬ acorn-globals@4.3.0 
│   │   │ ├── acorn@6.0.2 
│   │   │ └── acorn-walk@6.1.0 
│   │   ├── array-equal@1.0.0 
│   │   ├── cssom@0.3.4 
│   │   ├── cssstyle@1.1.1 
│   │   ├─┬ data-urls@1.0.1 
│   │   │ └── whatwg-url@7.0.0 
│   │   ├── domexception@1.0.1 
│   │   ├─┬ escodegen@1.11.0 
│   │   │ ├── esprima@3.1.3 
│   │   │ └─┬ optionator@0.8.2 
│   │   │   ├── deep-is@0.1.3 
│   │   │   ├── fast-levenshtein@2.0.6 
│   │   │   ├── levn@0.3.0 
│   │   │   ├── prelude-ls@1.1.2 
│   │   │   ├── type-check@0.3.2 
│   │   │   └── wordwrap@1.0.0 
│   │   ├── html-encoding-sniffer@1.0.2 
│   │   ├── left-pad@1.3.0 
│   │   ├── nwsapi@2.0.9 
│   │   ├── parse5@4.0.0 
│   │   ├── pn@1.1.0 
│   │   ├─┬ request@2.88.0 
│   │   │ ├── aws-sign2@0.7.0 
│   │   │ ├── aws4@1.8.0 
│   │   │ ├── caseless@0.12.0 
│   │   │ ├─┬ combined-stream@1.0.7 
│   │   │ │ └── delayed-stream@1.0.0 
│   │   │ ├── extend@3.0.2 
│   │   │ ├── forever-agent@0.6.1 
│   │   │ ├─┬ form-data@2.3.3 
│   │   │ │ └── asynckit@0.4.0 
│   │   │ ├─┬ har-validator@5.1.0 
│   │   │ │ ├─┬ ajv@5.5.2 
│   │   │ │ │ ├── fast-deep-equal@1.1.0 
│   │   │ │ │ └── json-schema-traverse@0.3.1 
│   │   │ │ └── har-schema@2.0.0 
│   │   │ ├─┬ http-signature@1.2.0 
│   │   │ │ ├── assert-plus@1.0.0 
│   │   │ │ ├─┬ jsprim@1.4.1 
│   │   │ │ │ ├── extsprintf@1.3.0 
│   │   │ │ │ ├── json-schema@0.2.3 
│   │   │ │ │ └── verror@1.10.0 
│   │   │ │ └─┬ sshpk@1.15.1 
│   │   │ │   ├── asn1@0.2.4 
│   │   │ │   ├── bcrypt-pbkdf@1.0.2 
│   │   │ │   ├── dashdash@1.14.1 
│   │   │ │   ├── ecc-jsbn@0.1.2 
│   │   │ │   ├── getpass@0.1.7 
│   │   │ │   ├── jsbn@0.1.1 
│   │   │ │   └── tweetnacl@0.14.5 
│   │   │ ├── is-typedarray@1.0.0 
│   │   │ ├── isstream@0.1.2 
│   │   │ ├── json-stringify-safe@5.0.1 
│   │   │ ├─┬ mime-types@2.1.21 
│   │   │ │ └── mime-db@1.37.0 
│   │   │ ├── oauth-sign@0.9.0 
│   │   │ ├── performance-now@2.1.0 
│   │   │ ├── qs@6.5.2 
│   │   │ └── tunnel-agent@0.6.0 
│   │   ├─┬ request-promise-native@1.0.5 
│   │   │ ├── request-promise-core@1.1.1 
│   │   │ └── stealthy-require@1.1.1 
│   │   ├── sax@1.2.4 
│   │   ├── symbol-tree@3.2.2 
│   │   ├─┬ tough-cookie@2.4.3 
│   │   │ ├── psl@1.1.29 
│   │   │ └── punycode@1.4.1 
│   │   ├─┬ w3c-hr-time@1.0.1 
│   │   │ └── browser-process-hrtime@0.1.3 
│   │   ├── webidl-conversions@4.0.2 
│   │   ├─┬ whatwg-encoding@1.0.5 
│   │   │ └─┬ iconv-lite@0.4.24 
│   │   │   └── safer-buffer@2.1.2 
│   │   ├── whatwg-mimetype@2.2.0 
│   │   ├─┬ whatwg-url@6.5.0 
│   │   │ ├── lodash.sortby@4.7.0 
│   │   │ └── tr46@1.0.1 
│   │   ├─┬ ws@5.2.2 
│   │   │ └── async-limiter@1.0.0 
│   │   └── xml-name-validator@3.0.0 
│   ├── jest-get-type@22.4.3 
│   ├─┬ jest-haste-map@23.6.0 
│   │ ├─┬ fb-watchman@2.0.0 
│   │ │ └─┬ bser@2.0.0 
│   │ │   └── node-int64@0.4.0 
│   │ ├─┬ jest-docblock@23.2.0 
│   │ │ └── detect-newline@2.1.0 
│   │ ├── jest-serializer@23.0.1 
│   │ ├─┬ micromatch@2.3.11 
│   │ │ ├── arr-diff@2.0.0 
│   │ │ ├── array-unique@0.2.1 
│   │ │ ├── braces@1.8.5 
│   │ │ ├── expand-brackets@0.1.5 
│   │ │ ├── extglob@0.3.2 
│   │ │ ├── is-extglob@1.0.0 
│   │ │ ├── is-glob@2.0.1 
│   │ │ └── kind-of@3.2.2 
│   │ └─┬ sane@2.5.2 
│   │   ├─┬ capture-exit@1.2.0 
│   │   │ └── rsvp@3.6.2 
│   │   ├─┬ exec-sh@0.2.2 
│   │   │ └── merge@1.2.0 
│   │   ├── minimist@1.2.0 
│   │   ├─┬ walker@1.0.7 
│   │   │ └─┬ makeerror@1.0.11 
│   │   │   └── tmpl@1.0.4 
│   │   └─┬ watch@0.18.0 
│   │     └── minimist@1.2.0 
│   ├─┬ jest-message-util@23.4.0 
│   │ ├─┬ @babel/code-frame@7.0.0 
│   │ │ └── @babel/highlight@7.0.0 
│   │ ├─┬ micromatch@2.3.11 
│   │ │ ├── arr-diff@2.0.0 
│   │ │ ├── array-unique@0.2.1 
│   │ │ ├── braces@1.8.5 
│   │ │ ├── expand-brackets@0.1.5 
│   │ │ ├── extglob@0.3.2 
│   │ │ ├── is-extglob@1.0.0 
│   │ │ ├── is-glob@2.0.1 
│   │ │ └── kind-of@3.2.2 
│   │ └── stack-utils@1.0.1 
│   ├── jest-regex-util@23.3.0 
│   ├── jest-resolve-dependencies@23.6.0 
│   ├─┬ jest-runner@23.6.0 
│   │ └── jest-leak-detector@23.6.0 
│   ├─┬ jest-runtime@23.6.0 
│   │ ├─┬ babel-plugin-istanbul@4.1.6 
│   │ │ ├── babel-plugin-syntax-object-rest-spread@6.13.0 
│   │ │ └─┬ test-exclude@4.2.3 
│   │ │   ├─┬ micromatch@2.3.11 
│   │ │   │ ├── arr-diff@2.0.0 
│   │ │   │ ├── array-unique@0.2.1 
│   │ │   │ ├── braces@1.8.5 
│   │ │   │ ├── expand-brackets@0.1.5 
│   │ │   │ ├── extglob@0.3.2 
│   │ │   │ ├── is-extglob@1.0.0 
│   │ │   │ ├── is-glob@2.0.1 
│   │ │   │ └── kind-of@3.2.2 
│   │ │   └─┬ read-pkg-up@1.0.1 
│   │ │     ├─┬ find-up@1.1.2 
│   │ │     │ ├── path-exists@2.1.0 
│   │ │     │ └─┬ pinkie-promise@2.0.1 
│   │ │     │   └── pinkie@2.0.4 
│   │ │     └─┬ read-pkg@1.1.0 
│   │ │       ├─┬ load-json-file@1.1.0 
│   │ │       │ ├── parse-json@2.2.0 
│   │ │       │ └── pify@2.3.0 
│   │ │       ├─┬ normalize-package-data@2.4.0 
│   │ │       │ ├── hosted-git-info@2.7.1 
│   │ │       │ ├── is-builtin-module@1.0.0 
│   │ │       │ └─┬ validate-npm-package-license@3.0.4 
│   │ │       │   ├─┬ spdx-correct@3.0.2 
│   │ │       │   │ └── spdx-license-ids@3.0.1 
│   │ │       │   └─┬ spdx-expression-parse@3.0.0 
│   │ │       │     └── spdx-exceptions@2.2.0 
│   │ │       └─┬ path-type@1.1.0 
│   │ │         └── pify@2.3.0 
│   │ ├── convert-source-map@1.6.0 
│   │ ├─┬ micromatch@2.3.11 
│   │ │ ├── arr-diff@2.0.0 
│   │ │ ├── array-unique@0.2.1 
│   │ │ ├── braces@1.8.5 
│   │ │ ├── expand-brackets@0.1.5 
│   │ │ ├── extglob@0.3.2 
│   │ │ ├── is-extglob@1.0.0 
│   │ │ ├── is-glob@2.0.1 
│   │ │ └── kind-of@3.2.2 
│   │ ├── strip-bom@3.0.0 
│   │ └─┬ write-file-atomic@2.3.0 
│   │   └── signal-exit@3.0.2 
│   ├─┬ jest-snapshot@23.6.0 
│   │ ├── jest-diff@23.6.0 
│   │ ├── jest-matcher-utils@23.6.0 
│   │ └── natural-compare@1.4.0 
│   ├─┬ jest-util@23.4.0 
│   │ └── callsites@2.0.0 
│   ├─┬ jest-validate@23.6.0 
│   │ └── leven@2.1.0 
│   ├── jest-watcher@23.4.0 
│   ├─┬ jest-worker@23.2.0 
│   │ └── merge-stream@1.0.1 
│   ├─┬ micromatch@2.3.11 
│   │ ├── arr-diff@2.0.0 
│   │ ├── array-unique@0.2.1 
│   │ ├─┬ braces@1.8.5 
│   │ │ ├─┬ expand-range@1.8.2 
│   │ │ │ └─┬ fill-range@2.2.4 
│   │ │ │   ├─┬ is-number@2.1.0 
│   │ │ │   │ └── kind-of@3.2.2 
│   │ │ │   ├── isobject@2.1.0 
│   │ │ │   └─┬ randomatic@3.1.0 
│   │ │ │     ├── is-number@4.0.0 
│   │ │ │     └── math-random@1.0.1 
│   │ │ └── preserve@0.2.0 
│   │ ├─┬ expand-brackets@0.1.5 
│   │ │ └── is-posix-bracket@0.1.1 
│   │ ├── extglob@0.3.2 
│   │ ├── filename-regex@2.0.1 
│   │ ├── is-extglob@1.0.0 
│   │ ├── is-glob@2.0.1 
│   │ ├─┬ kind-of@3.2.2 
│   │ │ └── is-buffer@1.1.6 
│   │ ├─┬ normalize-path@2.1.1 
│   │ │ └── remove-trailing-separator@1.1.0 
│   │ ├─┬ object.omit@2.0.1 
│   │ │ └── for-own@0.1.5 
│   │ ├─┬ parse-glob@3.0.4 
│   │ │ ├─┬ glob-base@0.3.0 
│   │ │ │ ├─┬ glob-parent@2.0.0 
│   │ │ │ │ └─┬ is-glob@2.0.1 
│   │ │ │ │   └── is-extglob@1.0.0 
│   │ │ │ └─┬ is-glob@2.0.1 
│   │ │ │   └── is-extglob@1.0.0 
│   │ │ ├── is-dotfile@1.0.3 
│   │ │ ├── is-extglob@1.0.0 
│   │ │ └── is-glob@2.0.1 
│   │ └─┬ regex-cache@0.4.4 
│   │   └─┬ is-equal-shallow@0.1.3 
│   │     └── is-primitive@2.0.0 
│   ├─┬ node-notifier@5.3.0 
│   │ ├── growly@1.3.0 
│   │ └── shellwords@0.1.1 
│   ├─┬ prompts@0.1.14 
│   │ ├── kleur@2.0.2 
│   │ └── sisteransi@0.1.1 
│   ├── realpath-native@1.0.2 
│   ├─┬ string-length@2.0.0 
│   │ ├── astral-regex@1.0.0 
│   │ └─┬ strip-ansi@4.0.0 
│   │   └── ansi-regex@3.0.0 
│   ├─┬ strip-ansi@4.0.0 
│   │ └── ansi-regex@3.0.0 
│   ├─┬ which@1.3.1 
│   │ └── isexe@2.0.0 
│   └─┬ yargs@11.1.0 
│     ├── decamelize@1.2.0 
│     ├─┬ os-locale@2.1.0 
│     │ ├─┬ execa@0.7.0 
│     │ │ └── cross-spawn@5.1.0 
│     │ ├─┬ lcid@1.0.0 
│     │ │ └── invert-kv@1.0.0 
│     │ └── mem@1.1.0 
│     ├── y18n@3.2.1 
│     └── yargs-parser@9.0.2 
├─┬ mini-css-extract-plugin@0.4.4 
│ ├─┬ schema-utils@1.0.0 
│ │ ├─┬ UNMET PEER DEPENDENCY ajv@6.5.4
│ │ │ ├── fast-deep-equal@2.0.1 
│ │ │ └── json-schema-traverse@0.4.1 
│ │ └── ajv-errors@1.0.0 
│ └── webpack-sources@1.3.0 
├─┬ postcss-loader@3.0.0 
│ └─┬ postcss-load-config@2.0.0 
│   ├─┬ cosmiconfig@4.0.0 
│   │ ├── is-directory@0.3.1 
│   │ ├─┬ parse-json@4.0.0 
│   │ │ └─┬ error-ex@1.3.2 
│   │ │   └── is-arrayish@0.2.1 
│   │ └── require-from-string@2.0.2 
│   └─┬ import-cwd@2.1.0 
│     └── import-from@2.1.0 
├─┬ pug@2.0.3 
│ ├─┬ pug-code-gen@2.0.1 
│ │ ├─┬ constantinople@3.1.2 
│ │ │ ├── @types/babel-types@7.0.4 
│ │ │ └── @types/babylon@6.16.3 
│ │ ├── doctypes@1.1.0 
│ │ ├── js-stringify@1.0.2 
│ │ ├── pug-attrs@2.0.3 
│ │ ├── pug-error@1.3.2 
│ │ ├── void-elements@2.0.1 
│ │ └─┬ with@5.1.1 
│ │   ├── acorn@3.3.0 
│ │   └─┬ acorn-globals@3.1.0 
│ │     └── acorn@4.0.13 
│ ├─┬ pug-filters@3.1.0 
│ │ ├─┬ jstransformer@1.0.0 
│ │ │ ├── is-promise@2.1.0 
│ │ │ └─┬ promise@7.3.1 
│ │ │   └── asap@2.0.6 
│ │ └─┬ uglify-js@2.8.29 
│ │   ├── source-map@0.5.7 
│ │   ├── uglify-to-browserify@1.0.2 
│ │   └─┬ yargs@3.10.0 
│ │     ├── camelcase@1.2.1 
│ │     ├─┬ cliui@2.1.0 
│ │     │ ├─┬ center-align@0.1.3 
│ │     │ │ ├─┬ align-text@0.1.4 
│ │     │ │ │ ├── kind-of@3.2.2 
│ │     │ │ │ └── longest@1.0.1 
│ │     │ │ └── lazy-cache@1.0.4 
│ │     │ ├── right-align@0.1.3 
│ │     │ └── wordwrap@0.0.2 
│ │     └── window-size@0.1.0 
│ ├─┬ pug-lexer@4.0.0 
│ │ ├─┬ character-parser@2.2.0 
│ │ │ └── is-regex@1.0.4 
│ │ └─┬ is-expression@3.0.0 
│ │   └── acorn@4.0.13 
│ ├── pug-linker@3.0.5 
│ ├── pug-load@2.0.11 
│ ├─┬ pug-parser@5.0.0 
│ │ └── token-stream@0.0.1 
│ ├── pug-runtime@2.0.4 
│ └── pug-strip-comments@1.0.3 
├─┬ pug-loader@2.4.0 
│ ├── pug-walk@1.1.7 
│ └── resolve@1.1.7 
├─┬ react@16.5.2 
│ ├─┬ loose-envify@1.4.0 
│ │ └── js-tokens@4.0.0 
│ ├── object-assign@4.1.1 
│ ├── prop-types@15.6.2 
│ └── schedule@0.5.0 
├── react-dom@16.5.2 
├─┬ react-test-renderer@16.5.2 
│ └── react-is@16.5.2 
├── sanitize.css@8.0.0 
├─┬ shortid@2.2.13 
│ └── nanoid@1.3.1 
├─┬ string-replace-to-array@1.0.3 
│ ├── invariant@2.2.4 
│ ├── lodash.flatten@4.4.0 
│ └── lodash.isstring@4.0.1 
├─┬ svg-inline-loader@0.8.0 
│ ├── loader-utils@0.2.17 
│ └── simple-html-tokenizer@0.1.1 
├─┬ ts-jest@23.10.4 
│ ├── bs-logger@0.2.5 
│ ├── buffer-from@1.1.1 
│ ├── fast-json-stable-stringify@2.0.0 
│ ├─┬ json5@2.1.0 
│ │ └── minimist@1.2.0 
│ ├── make-error@1.3.5 
│ ├── semver@5.6.0 
│ └─┬ yargs-parser@10.1.0 
│   └── camelcase@4.1.0 
├─┬ tslint@5.11.0 
│ ├── builtin-modules@1.1.1 
│ ├── commander@2.17.1 
│ ├── diff@3.5.0 
│ ├─┬ glob@7.1.3 
│ │ ├── fs.realpath@1.0.0 
│ │ ├─┬ inflight@1.0.6 
│ │ │ └── wrappy@1.0.2 
│ │ ├── inherits@2.0.3 
│ │ ├── once@1.4.0 
│ │ └── path-is-absolute@1.0.1 
│ ├─┬ js-yaml@3.12.0 
│ │ ├─┬ argparse@1.0.10 
│ │ │ └── sprintf-js@1.0.3 
│ │ └── esprima@4.0.1 
│ ├─┬ resolve@1.8.1 
│ │ └── path-parse@1.0.6 
│ ├── tslib@1.9.3 
│ └── tsutils@2.29.0 
├─┬ tslint-config-airbnb@5.11.0 
│ ├─┬ tslint-consistent-codestyle@1.13.3 
│ │ └─┬ @fimbul/bifrost@0.11.0 
│ │   └─┬ @fimbul/ymir@0.11.0 
│ │     ├── inversify@4.14.0 
│ │     └── reflect-metadata@0.1.12 
│ ├─┬ tslint-eslint-rules@5.4.0 
│ │ ├─┬ doctrine@0.7.2 
│ │ │ ├── esutils@1.1.6 
│ │ │ └── isarray@0.0.1 
│ │ ├── tslib@1.9.0 
│ │ └── tsutils@3.1.0 
│ └─┬ tslint-microsoft-contrib@5.2.1 
│   └── tsutils@2.28.0 
├─┬ tslint-loader@3.5.4 
│ └── rimraf@2.6.2 
├── tslint-react@3.6.0 
├── typescript@3.1.3 
├─┬ webpack@4.22.0 
│ ├─┬ @webassemblyjs/ast@1.7.8 
│ │ ├── @webassemblyjs/helper-wasm-bytecode@1.7.8 
│ │ └─┬ @webassemblyjs/wast-parser@1.7.8 
│ │   ├── @webassemblyjs/floating-point-hex-parser@1.7.8 
│ │   ├── @webassemblyjs/helper-code-frame@1.7.8 
│ │   ├── @webassemblyjs/helper-fsm@1.7.8 
│ │   └── @xtuc/long@4.2.1 
│ ├── @webassemblyjs/helper-module-context@1.7.8 
│ ├─┬ @webassemblyjs/wasm-edit@1.7.8 
│ │ ├── @webassemblyjs/helper-buffer@1.7.8 
│ │ ├── @webassemblyjs/helper-wasm-section@1.7.8 
│ │ ├── @webassemblyjs/wasm-gen@1.7.8 
│ │ ├── @webassemblyjs/wasm-opt@1.7.8 
│ │ └── @webassemblyjs/wast-printer@1.7.8 
│ ├─┬ @webassemblyjs/wasm-parser@1.7.8 
│ │ ├── @webassemblyjs/helper-api-error@1.7.8 
│ │ ├─┬ @webassemblyjs/ieee754@1.7.8 
│ │ │ └── @xtuc/ieee754@1.2.0 
│ │ ├── @webassemblyjs/leb128@1.7.8 
│ │ └── @webassemblyjs/utf8@1.7.8 
│ ├── acorn@5.7.3 
│ ├── acorn-dynamic-import@3.0.0 
│ ├─┬ UNMET PEER DEPENDENCY ajv@6.5.4
│ │ ├── fast-deep-equal@2.0.1 
│ │ ├── json-schema-traverse@0.4.1 
│ │ └─┬ uri-js@4.2.2 
│ │   └── punycode@2.1.1 
│ ├── ajv-keywords@3.2.0 
│ ├── chrome-trace-event@1.0.0 
│ ├─┬ eslint-scope@4.0.0 
│ │ ├── esrecurse@4.2.1 
│ │ └── estraverse@4.2.0 
│ ├── json-parse-better-errors@1.0.2 
│ ├── loader-runner@2.3.1 
│ ├─┬ memory-fs@0.4.1 
│ │ ├─┬ errno@0.1.7 
│ │ │ └── prr@1.0.1 
│ │ └─┬ readable-stream@2.3.6 
│ │   ├── core-util-is@1.0.2 
│ │   ├── isarray@1.0.0 
│ │   ├── process-nextick-args@2.0.0 
│ │   └── util-deprecate@1.0.2 
│ ├── neo-async@2.6.0 
│ ├─┬ node-libs-browser@2.1.0 
│ │ ├─┬ assert@1.4.1 
│ │ │ └─┬ util@0.10.3 
│ │ │   └── inherits@2.0.1 
│ │ ├─┬ browserify-zlib@0.2.0 
│ │ │ └── pako@1.0.6 
│ │ ├─┬ buffer@4.9.1 
│ │ │ ├── base64-js@1.3.0 
│ │ │ └── ieee754@1.1.12 
│ │ ├─┬ console-browserify@1.1.0 
│ │ │ └── date-now@0.1.4 
│ │ ├── constants-browserify@1.0.0 
│ │ ├─┬ crypto-browserify@3.12.0 
│ │ │ ├─┬ browserify-cipher@1.0.1 
│ │ │ │ ├─┬ browserify-aes@1.2.0 
│ │ │ │ │ └── buffer-xor@1.0.3 
│ │ │ │ ├─┬ browserify-des@1.0.2 
│ │ │ │ │ └── des.js@1.0.0 
│ │ │ │ └── evp_bytestokey@1.0.3 
│ │ │ ├─┬ browserify-sign@4.0.4 
│ │ │ │ ├── bn.js@4.11.8 
│ │ │ │ ├── browserify-rsa@4.0.1 
│ │ │ │ ├─┬ elliptic@6.4.1 
│ │ │ │ │ ├── brorand@1.1.0 
│ │ │ │ │ ├── hash.js@1.1.5 
│ │ │ │ │ ├── hmac-drbg@1.0.1 
│ │ │ │ │ ├── minimalistic-assert@1.0.1 
│ │ │ │ │ └── minimalistic-crypto-utils@1.0.1 
│ │ │ │ └─┬ parse-asn1@5.1.1 
│ │ │ │   └── asn1.js@4.10.1 
│ │ │ ├── create-ecdh@4.0.3 
│ │ │ ├─┬ create-hash@1.2.0 
│ │ │ │ ├── cipher-base@1.0.4 
│ │ │ │ ├─┬ md5.js@1.3.5 
│ │ │ │ │ └── hash-base@3.0.4 
│ │ │ │ ├── ripemd160@2.0.2 
│ │ │ │ └── sha.js@2.4.11 
│ │ │ ├── create-hmac@1.1.7 
│ │ │ ├─┬ diffie-hellman@5.0.3 
│ │ │ │ └── miller-rabin@4.0.1 
│ │ │ ├── pbkdf2@3.0.17 
│ │ │ ├── public-encrypt@4.0.3 
│ │ │ ├── randombytes@2.0.6 
│ │ │ └── randomfill@1.0.4 
│ │ ├── domain-browser@1.2.0 
│ │ ├── events@1.1.1 
│ │ ├── https-browserify@1.0.0 
│ │ ├── os-browserify@0.3.0 
│ │ ├── path-browserify@0.0.0 
│ │ ├── process@0.11.10 
│ │ ├── punycode@1.4.1 
│ │ ├── querystring-es3@0.2.1 
│ │ ├── stream-browserify@2.0.1 
│ │ ├─┬ stream-http@2.8.3 
│ │ │ ├── builtin-status-codes@3.0.0 
│ │ │ ├── to-arraybuffer@1.0.1 
│ │ │ └── xtend@4.0.1 
│ │ ├── string_decoder@1.1.1 
│ │ ├─┬ timers-browserify@2.0.10 
│ │ │ └── setimmediate@1.0.5 
│ │ ├── tty-browserify@0.0.0 
│ │ ├─┬ url@0.11.0 
│ │ │ ├── punycode@1.3.2 
│ │ │ └── querystring@0.2.0 
│ │ ├── util@0.10.4 
│ │ └─┬ vm-browserify@0.0.4 
│ │   └── indexof@0.0.1 
│ ├── schema-utils@0.4.7 
│ ├─┬ uglifyjs-webpack-plugin@1.3.0 
│ │ ├─┬ schema-utils@0.4.7 
│ │ │ └─┬ UNMET PEER DEPENDENCY ajv@6.5.4
│ │ │   ├── fast-deep-equal@2.0.1 
│ │ │   └── json-schema-traverse@0.4.1 
│ │ ├─┬ uglify-es@3.3.9 
│ │ │ └── commander@2.13.0 
│ │ └── worker-farm@1.6.0 
│ └─┬ watchpack@1.6.0 
│   └─┬ chokidar@2.0.4 
│     ├── anymatch@2.0.0 
│     ├── async-each@1.0.1 
│     ├─┬ glob-parent@3.1.0 
│     │ ├── is-glob@3.1.0 
│     │ └── path-dirname@1.0.2 
│     ├─┬ is-binary-path@1.0.1 
│     │ └── binary-extensions@1.12.0 
│     ├── lodash.debounce@4.0.8 
│     ├── readdirp@2.2.1 
│     └── upath@1.1.0 
└─┬ webpack-cli@3.1.2 
  ├─┬ cross-spawn@6.0.5 
  │ ├── nice-try@1.0.5 
  │ ├── path-key@2.0.1 
  │ └─┬ shebang-command@1.2.0 
  │   └── shebang-regex@1.0.0 
  ├── global-modules-path@2.3.0 
  ├─┬ import-local@2.0.0 
  │ └── pkg-dir@3.0.0 
  ├── interpret@1.1.0 
  ├─┬ supports-color@5.5.0 
  │ └── has-flag@3.0.0 
  ├── v8-compile-cache@2.0.2 
  └─┬ yargs@12.0.2 
    ├─┬ cliui@4.1.0 
    │ ├─┬ strip-ansi@4.0.0 
    │ │ └── ansi-regex@3.0.0 
    │ └─┬ wrap-ansi@2.1.0 
    │   └─┬ string-width@1.0.2 
    │     ├── code-point-at@1.1.0 
    │     └─┬ is-fullwidth-code-point@1.0.0 
    │       └── number-is-nan@1.0.1 
    ├─┬ decamelize@2.0.0 
    │ └── xregexp@4.0.0 
    ├─┬ find-up@3.0.0 
    │ └─┬ locate-path@3.0.0 
    │   ├─┬ p-locate@3.0.0 
    │   │ └─┬ p-limit@2.0.0 
    │   │   └── p-try@2.0.0 
    │   └── path-exists@3.0.0 
    ├── get-caller-file@1.0.3 
    ├─┬ os-locale@3.0.1 
    │ ├─┬ execa@0.10.0 
    │ │ ├── get-stream@3.0.0 
    │ │ ├── is-stream@1.1.0 
    │ │ ├── npm-run-path@2.0.2 
    │ │ ├── p-finally@1.0.0 
    │ │ └── strip-eof@1.0.0 
    │ ├─┬ lcid@2.0.0 
    │ │ └── invert-kv@2.0.0 
    │ └─┬ mem@4.0.0 
    │   ├─┬ map-age-cleaner@0.1.2 
    │   │ └── p-defer@1.0.0 
    │   ├── mimic-fn@1.2.0 
    │   └── p-is-promise@1.1.0 
    ├── require-directory@2.1.1 
    ├── require-main-filename@1.0.1 
    ├── set-blocking@2.0.0 
    ├─┬ string-width@2.1.1 
    │ ├── is-fullwidth-code-point@2.0.0 
    │ └─┬ strip-ansi@4.0.0 
    │   └── ansi-regex@3.0.0 
    ├── which-module@2.0.0 
    └── yargs-parser@10.1.0 

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.3 (node_modules/sane/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.2 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN ajv-keywords@3.2.0 requires a peer of ajv@^6.0.0 but none was installed.
# attempt webext build again
$ cd ..          

 19:45:54  x@pi008  ....archives/software/bukubrow  ⬡ v6.14.4   master ✘ ✹ 
$ make webext                     
make prepare
make[1]: Entering directory '/home/censored/bukubrow'
mkdir -p .build release
make[1]: Leaving directory '/home/censored/bukubrow'
cd webextension && npm run build

> bukubrow@2.4.2 build /home/censored/bukubrow/webextension
> rm -rf ./dist/ && NODE_ENV=production webpack

Warning: The 'no-boolean-literal-compare' rule requires type information.
ℹ 「atl」: Using typescript@3.1.3 from typescript
ℹ 「atl」: Using tsconfig.json from /home/censored/bukubrow/webextension/tsconfig.json
ℹ 「atl」: Checking started in a separate process...
ℹ 「atl」: Time: 1374ms
Hash: f425dae6323d5cd40c72
Version: webpack 4.22.0
Time: 12746ms
Built at: 10/21/2018 7:46:13 PM
                     Asset       Size  Chunks             Chunk Names
       assets/icon-128.png   2.31 KiB          [emitted]  
       assets/icon-256.png   3.92 KiB          [emitted]  
  backend/backend.build.js    3.4 KiB       0  [emitted]  backend
 content/content.build.css   18.2 KiB       1  [emitted]  content
content/content.build.html  259 bytes          [emitted]  
  content/content.build.js    128 KiB       1  [emitted]  content
             manifest.json  857 bytes          [emitted]  
options/options.build.html  200 bytes          [emitted]  
  options/options.build.js    102 KiB       2  [emitted]  options
Entrypoint content = content/content.build.css content/content.build.js
Entrypoint options = options/options.build.js
Entrypoint backend = backend/backend.build.js
 [2] ./src/modules/config.ts 179 bytes {0} {1} [built]
 [9] ./src/modules/cache.ts + 1 modules 1.13 KiB {0} {1} [built]
     | ./src/modules/cache.ts 907 bytes [built]
     | ./src/modules/sort-arr-of-obj-alphabetically.ts 241 bytes [built]
[10] ./src/assetsBundledOnly/plus.svg 142 bytes {1} [built]
[11] ./src/pages/content/content.css 221 bytes {1} [built]
[21] ./src/assetsBundledOnly/bin.svg 339 bytes {1} [built]
[24] ./src/assetsBundledOnly/pencil.svg 152 bytes {1} [built]
[27] ./src/assetsBundledOnly/asterisk.svg 823 bytes {1} [built]
[28] ./src/assetsBundledOnly/refresh.svg 328 bytes {1} [built]
[33] (webpack)/buildin/global.js 489 bytes {1} [built]
[42] ./src/global.css 39 bytes {1} [built]
[43] ./src/pages/content/content.tsx + 28 modules 29.8 KiB {1} [built]
     | ./src/pages/content/content.tsx 11.4 KiB [built]
     | ./src/comms/frontend.ts 303 bytes [built]
     | ./src/modules/filter-bookmarks.ts 909 bytes [built]
     | ./src/modules/ensure-valid-url.ts 225 bytes [built]
     | ./src/modules/element-in-viewport.ts 288 bytes [built]
     | ./src/modules/set-theme.ts 266 bytes [built]
     | ./src/modules/sleep.ts 104 bytes [built]
     |     + 22 hidden modules
[44] ./src/backend/backend.ts + 4 modules 5.61 KiB {0} [built]
     | ./src/backend/backend.ts 2.39 KiB [built]
     | ./src/modules/schema-transform.ts 801 bytes [built]
     | ./src/comms/shared.ts 157 bytes [built]
     | ./src/comms/backend.ts 1.52 KiB [built]
     | ./src/modules/semantic-versioning.ts 768 bytes [built]
[45] ./src/pages/options/options.tsx + 1 modules 1.8 KiB {2} [built]
     | ./src/pages/options/options.tsx 1.41 KiB [built]
     | ./src/modules/settings.ts 393 bytes [built]
    + 47 hidden modules
Child html-webpack-plugin for "content/content.build.html":
     1 asset
    Entrypoint undefined = content/content.build.html
    [0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/template.pug 481 bytes {0} [built]
    [2] external "fs" 42 bytes {0} [optional] [built]
        + 1 hidden module
Child html-webpack-plugin for "options/options.build.html":
     1 asset
    Entrypoint undefined = options/options.build.html
    [0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/template.pug 481 bytes {0} [built]
    [2] external "fs" 42 bytes {0} [optional] [built]
        + 1 hidden module
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/bookmark-form/bookmark-form.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/bookmark/bookmark.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/button/button.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/error-popup/error-popup.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/highlight-markup/highlight-markup.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/load-more-bookmarks/load-more-bookmarks.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/modal/modal.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/search-controls/search-controls.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/tag/tag.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/text-input/text-input.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/components/tutorial-message/tutorial-message.css:
    Entrypoint mini-css-extract-plugin = *
       2 modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/global.css:
    Entrypoint mini-css-extract-plugin = *
    [1] ./node_modules/css-loader??ref--8-1!./node_modules/postcss-loader/src??ref--8-2!./src/global.css 921 bytes {0} [built]
        + 2 hidden modules
Child mini-css-extract-plugin node_modules/css-loader/index.js??ref--8-1!node_modules/postcss-loader/src/index.js??ref--8-2!src/pages/content/content.css:
    Entrypoint mini-css-extract-plugin = *
    [0] ./node_modules/css-loader??ref--8-1!./node_modules/postcss-loader/src??ref--8-2!./src/pages/content/content.css 873 bytes {0} [built]
        + 1 hidden module
cd webextension/dist && zip -r '../../release/webext' ./*
  adding: assets/ (stored 0%)
  adding: assets/icon-128.png (deflated 6%)
  adding: assets/icon-256.png (deflated 5%)
  adding: backend/ (stored 0%)
  adding: backend/backend.build.js (deflated 59%)
  adding: content/ (stored 0%)
  adding: content/content.build.html (deflated 34%)
  adding: content/content.build.js (deflated 68%)
  adding: content/content.build.css (deflated 71%)
  adding: manifest.json (deflated 51%)
  adding: options/ (stored 0%)
  adding: options/options.build.html (deflated 28%)
  adding: options/options.build.js (deflated 68%)
make clean
make[1]: Entering directory '/home/censored/bukubrow'
rm -rf .build
make[1]: Leaving directory '/home/censored/bukubrow'

# release done
$ ls -l release 
total 376
-rw-r--r-- 1 x x 288090 Oct 21 11:35 binary-linux-x64.zip
-rw-r--r-- 1 x x  91711 Oct 21 19:46 webext.zip

$ cd release
$ mkdir webext       
$ cd webext      
$ unzip ../webext.zip
Archive:  ../webext.zip
   creating: assets/
  inflating: assets/icon-128.png     
  inflating: assets/icon-256.png     
   creating: backend/
  inflating: backend/backend.build.js  
   creating: content/
  inflating: content/content.build.html  
  inflating: content/content.build.js  
  inflating: content/content.build.css  
  inflating: manifest.json           
   creating: options/
  inflating: options/options.build.html  
  inflating: options/options.build.js  
$ cd ..    
$ unzip binary-linux-x64.zip 
Archive:  binary-linux-x64.zip
  inflating: bukubrow-linux-x64      
  inflating: chrome-host.json        
  inflating: firefox-host.json       
  inflating: install.sh              

$ ./install.sh 

Select your browser:
====================
1) Chrome
2) Chromium
3) Firefox
1-3: 1

Installing Chrome host config
Native messaging host for Chrome has been successfully installed to /home/censored.config/google-chrome/NativeMessagingHosts.

$ cat /home/x/.config/google-chrome/NativeMessagingHosts/com.samhh.bukubrow.json 
{
    "name": "com.samhh.bukubrow",
    "description": "Bukubrow binary for the Chrome extension",
    "path": "/home/censored/bukubrow/release/bukubrow-linux-x64",
    "type": "stdio",
    "allowed_origins": [
        "chrome-extension://XXX/",
        "chrome-extension://XXX/",
        "chrome-extension://XXX/"
    ]
}

# Loading it into Chrome
# Restarting Chrome

Options shows 2.4.2

Clicking the extension shows "The binary is outdated; please download or build a more recent one."

Also, syncing bookmarks does not seem to work in this build, so only available option for me currently until there's a proper working build is to revert back to latest working binary and live with the tags issue.

samhh commented 5 years ago

Hmm, I'll take a look at this again this week, thank you for the detail, it will help.

samhh commented 5 years ago

Thanks again for the detailed repro.

So, I believe I've fixed it with #68 and #69, each now merged into master.

In the former case, there was a regression whereby the wrong path to the database was being calculated, thereby resulting in virtually nothing working. I hadn't caught this as I haven't issued a binary release since the refactor that introduced this regression.

In the latter case Chrome was, unbeknownst to me, unable to save ES6 Set to its local storage. I personally exclusively use Firefox - where this works as expected - and thought that the days of browser differences were behind us - evidently not!

Sorry for not catching either of these previously, it's down to laziness on my part in merging stuff into master that I haven't thoroughly tested, thinking instead that I'll just handle that later on when I make a release. I'm aware that some people choose to build everything themselves, and it is a practice I intend to continue supporting. Likewise with supporting Chrome, I'd put off setting it up for a while, but I have it all set up now going forward.

Let me know how it goes with these changes.

Edit: Due to GitHub's outages today the PRs have disappeared, however the codebase appears to be correctly up-to-date. Head commit: 1f23049

Edit 2: They're back! For now... :eyes:

isakrubin commented 5 years ago

Just tried with latest commit, fresh checkout in empty dir and fresh build of both bin/webext.

Browser still shows "The binary is outdated; please download or build a more recent one." and refuse to sync any bookmarks.

Any reason the binary is way smaller than the latest released binary? Feels like the build might be incomplete

Fresh build $ du -sh ./bukubrow-linux-x64
692K ./bukubrow-linux-x64

Latest linux binary from release page $ du -sh bukubrow-linux-x64
4.3M bukubrow-linux-x64

samhh commented 5 years ago

Yeah, something seems up with your build. I've got my repo in a clean state on master, running the following exactly I get a fresh binary of 4.4M:

I've attached a build I've just made if you want to try that. binary-linux-x64.zip

isakrubin commented 5 years ago

Even your version shows "The binary is outdated; please download or build a more recent one." and refuse to sync any bookmarks.

Only version that works is 2.3.0 but in that version we have the tags issue ( and some others, like why is there a button to open all bookmarks... closing a couple thousand accidentally opened bookmarks sucks )

isakrubin commented 5 years ago

Your binary with chromestore webext works though, however no tags at all saved

isakrubin commented 5 years ago

if you got the time, please make a webext build as well, just so we can make sure I use the same version that you do for both binary and webext

isakrubin commented 5 years ago

Thanks for the bin build btw, appreciated :)

samhh commented 5 years ago

The good news: You're not doing anything wrong.

The bad news: I clearly am, the production build that make webext produces doesn't work, whilst the dev build (cd webextension && npm ci && npm run dev) does.

I'll take a look at this tomorrow.

samhh commented 5 years ago

I've had a look, the build is fine, sort of.

The problem you're facing with your WebExt builds is that it's producing an extension ID different to those listed in the binary's host manifest; it's not just you, I experience the same behaviour. Chrome only allows extensions to communicate with binaries that have their own extension ID explicitly listed under allowed_origins.

The error message pertaining to this was misleading; whilst it still isn't very useful, it should no longer mistakenly tell you that the binary is outdated (pull master for this).

I've yet to understand why this key keeps changing seemingly randomly, but until then you'll need to produce the build and plug it into Chrome as you were doing, and manually add the extension ID to the binary host manifest. Note that if you run the binary installer again this file will be overwritten.

You can see your extension ID on the main extensions page, listed for each extension as ID: [the extension id you want].

The host manifest location differs, mine is at ~/.config/chromium/NativeMessagingHosts, you can determine your path here.

When you add your extension ID to the array, make sure the format is identical. Even missing off the trailing slash will prevent a connection being formed in the browser. This particular nugget of information was quite laborious to discover...

Also, I'd be curious to know what extension ID is produced on your end. For a full build (make webext) I now get: okmljjfnpkkoolgdbmgicjpkdemoncpp

Try the above, and then we can determine what's happening with the tags. They're working perfectly on my end. Are you sure you're hitting the plus button for each you want to add? The UX is a little confusing.

isakrubin commented 5 years ago

Sorry for late reply, got hit with the flu. However, good news, by copying the id it now seems to work fine, even tags :)

samhh commented 5 years ago

No worries, hope you're feeling better.

Glad to hear the issue is resolved! This was a fun one to track down. I'm going to create a separate issue to track the extension ID annoyance, but I'll go ahead and close this one as resolved. :confetti_ball: