Since HTML is a tree-like language it is futile to compare it character
for character. `html1 === html2` is almost always false. This commit
introduces a simple diffing algorithm that only checks the text inside
the html + a few other attributes to decide whether the 2 HTMLs are
actually different or not. This is obviously not foolproof and it will
ignore everything aesthetic (b, em, strong tags etc.). This is actually
desireable because in our case only the text difference should
warrant a conflict. Everything else can easily be brought back.
Similarly, this also ignores whitespace differences surrouding the
tags.
All in all it'll provide a more reliable alternative to MD5 hashing the
2 HTMLs.
Previously we moved to getting the `innerText` directly from the browser.
This was okay but it strained the browser quite a bit. Now we are moving
back to using `textBetween` since after some benchmarking the difference
in speed is minimal. It is possible
that there is a better alternative
specifically designed for prosemirror.
* desktop: add support for publishing to mac app store
* ci: add step for deployment to testflight
* ci: temporarily run build only on macos
* config: cache `build:desktop` output in nx
* ci: use `macos-12` instead of `macos-latest`
* ci: no need to install `jq`
* ci: build & deploy manually
* ci: set env_vars using `env` key
* ci: install packages before building
* ci: build electron bundle before deployment
* ci: install distribution signing cert
* web: disable app store offending stuff for macos
* ci: enable deployment to testflight
* ci: remove cert installation to keychain
* desktop: pass entitlement files through plutil
* ci: use a single cert for everything
* ci: fix altool command for uploading macOS package
* ci: use env_vars for apiKey & apiIssuer
* ci: install provisionprofile
* ci: install provisioning profile in `./apps/web/desktop` dir
* desktop: change bundleId to `org.streetwriters.notesnook`
* ci: deploy & build in separate steps
* ci: add jobs for linux & windows releasing
* ci: checkout repo before anything else
* ci: add `GH_TOKEN` to env & use ps syntax on windows
* ci: get app store versions only for mac app
* ci: correct order of steps
Co-authored-by: ammarahm-ed <ammarahmed6506@gmail.com>
This is mainly done via sharding, caching & reducing total work:
1. `terser` is turned off when generating test build
2. `nx` distributed cache allows reusing build outputs
3. `playwright` sharding allows running tests in parallel
This can further be improved by using `swc` & `esbuild` during build