feat: add features package

This commit is contained in:
Karol Sójko
2022-07-05 14:58:29 +02:00
parent e335d0d2c2
commit 44d3e96468
69 changed files with 2214 additions and 28 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -27,7 +27,7 @@
"devDependencies": {
"@standardnotes/deterministic-zip": "^1.2.0",
"@standardnotes/eslint-config-extensions": "^1.0.4",
"@standardnotes/features": "^1.45.1",
"@standardnotes/features": "workspace:*",
"copy-webpack-plugin": "^11.0.0",
"mini-css-extract-plugin": "^2.6.0",
"minimatch": "^5.1.0",

View File

@@ -0,0 +1,2 @@
node_modules
dist

View File

@@ -0,0 +1,6 @@
{
"extends": "../../.eslintrc",
"parserOptions": {
"project": "./linter.tsconfig.json"
}
}

View File

@@ -0,0 +1,680 @@
# Change Log
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [1.47.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.47.0...@standardnotes/features@1.47.1) (2022-07-04)
### Bug Fixes
* add missing reflect-metadata package to all packages ([ce3a5bb](https://github.com/standardnotes/snjs/commit/ce3a5bbf3f1d2276ac4abc3eec3c6a44c8c3ba9b))
* unit tests running ([9ddc55c](https://github.com/standardnotes/snjs/commit/9ddc55c59c781e2bcc366304a6d0cc88d0e0865d))
# [1.47.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.46.0...@standardnotes/features@1.47.0) (2022-06-29)
### Features
* undeprecate markdown pro editor ([#774](https://github.com/standardnotes/snjs/issues/774)) ([5b0d582](https://github.com/standardnotes/snjs/commit/5b0d5826a7a1e1432c0026fa04dc26b4bfff44d7))
# [1.46.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.45.6...@standardnotes/features@1.46.0) (2022-06-27)
### Features
* deprecate non-primary editors ([#772](https://github.com/standardnotes/snjs/issues/772)) ([60c8f2a](https://github.com/standardnotes/snjs/commit/60c8f2a6a057ac1a097b077143ed85a7607eba20))
## [1.45.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.45.5...@standardnotes/features@1.45.6) (2022-06-27)
**Note:** Version bump only for package @standardnotes/features
## [1.45.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.45.4...@standardnotes/features@1.45.5) (2022-06-16)
**Note:** Version bump only for package @standardnotes/features
## [1.45.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.45.3...@standardnotes/features@1.45.4) (2022-06-16)
**Note:** Version bump only for package @standardnotes/features
## [1.45.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.45.2...@standardnotes/features@1.45.3) (2022-06-15)
**Note:** Version bump only for package @standardnotes/features
## [1.45.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.45.1...@standardnotes/features@1.45.2) (2022-06-10)
**Note:** Version bump only for package @standardnotes/features
## [1.45.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.45.0...@standardnotes/features@1.45.1) (2022-06-09)
### Bug Fixes
* get ExperimentalFeatures identifiers from experimentalFeatures() ([#762](https://github.com/standardnotes/snjs/issues/762)) ([6b2af78](https://github.com/standardnotes/snjs/commit/6b2af783f25260b47211b1eefb8e0f6742bb3b07))
# [1.45.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.7...@standardnotes/features@1.45.0) (2022-06-09)
### Features
* advanced checklist ([#759](https://github.com/standardnotes/snjs/issues/759)) ([600c88a](https://github.com/standardnotes/snjs/commit/600c88a81e5871a91793c2e7ca2aea9f358d839e))
## [1.44.7](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.6...@standardnotes/features@1.44.7) (2022-06-03)
### Bug Fixes
* define getters on items used in predicates so keypath lookups are not undefined ([#756](https://github.com/standardnotes/snjs/issues/756)) ([3297077](https://github.com/standardnotes/snjs/commit/32970774897a48fd9a12b329ca204ed6882a47ab))
## [1.44.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.5...@standardnotes/features@1.44.6) (2022-05-30)
**Note:** Version bump only for package @standardnotes/features
## [1.44.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.4...@standardnotes/features@1.44.5) (2022-05-27)
**Note:** Version bump only for package @standardnotes/features
## [1.44.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.3...@standardnotes/features@1.44.4) (2022-05-24)
**Note:** Version bump only for package @standardnotes/features
## [1.44.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.2...@standardnotes/features@1.44.3) (2022-05-24)
**Note:** Version bump only for package @standardnotes/features
## [1.44.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.1...@standardnotes/features@1.44.2) (2022-05-22)
**Note:** Version bump only for package @standardnotes/features
## [1.44.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.44.0...@standardnotes/features@1.44.1) (2022-05-20)
**Note:** Version bump only for package @standardnotes/features
# [1.44.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.43.2...@standardnotes/features@1.44.0) (2022-05-17)
### Features
* remove basic user role and core subscription plan ([#741](https://github.com/standardnotes/snjs/issues/741)) ([7800ecd](https://github.com/standardnotes/snjs/commit/7800ecd119e7bbb5872d48bd7806b5d0f5522c0e))
## [1.43.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.43.1...@standardnotes/features@1.43.2) (2022-05-17)
**Note:** Version bump only for package @standardnotes/features
## [1.43.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.43.0...@standardnotes/features@1.43.1) (2022-05-16)
**Note:** Version bump only for package @standardnotes/features
# [1.43.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.42.1...@standardnotes/features@1.43.0) (2022-05-16)
### Features
* remove basic user role and core subscription plan names ([304e232](https://github.com/standardnotes/snjs/commit/304e232e738456a93374de869117b5579e8a8f57))
## [1.42.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.42.0...@standardnotes/features@1.42.1) (2022-05-12)
### Bug Fixes
* remove "Unlimited history" from Plus plan features list ([#729](https://github.com/standardnotes/snjs/issues/729)) ([a4d5c64](https://github.com/standardnotes/snjs/commit/a4d5c6424753ae22ebb46ab31666396c28fcd77f))
# [1.42.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.41.0...@standardnotes/features@1.42.0) (2022-05-09)
### Features
* plain text feature identifier ([be17b56](https://github.com/standardnotes/snjs/commit/be17b5691b0a4bc45ea9914870dba2093cbb0cbf))
# [1.41.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.40.2...@standardnotes/features@1.41.0) (2022-05-05)
### Features
* availableInSubscriptions in each feature description ([#723](https://github.com/standardnotes/snjs/issues/723)) ([2f0527c](https://github.com/standardnotes/snjs/commit/2f0527c6ff5e9dc70a61fa6d189aad9e60d09ab0))
## [1.40.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.40.0...@standardnotes/features@1.40.2) (2022-05-04)
**Note:** Version bump only for package @standardnotes/features
## [1.40.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.40.0...@standardnotes/features@1.40.1) (2022-05-04)
**Note:** Version bump only for package @standardnotes/features
# [1.40.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.39.0...@standardnotes/features@1.40.0) (2022-05-03)
### Features
* editors => note types ([#722](https://github.com/standardnotes/snjs/issues/722)) ([898f27a](https://github.com/standardnotes/snjs/commit/898f27ab9928a46b33662c0454ec6489884ec276))
# [1.39.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.38.1...@standardnotes/features@1.39.0) (2022-05-02)
### Features
* take Markdown Visual out of beta ([#720](https://github.com/standardnotes/snjs/issues/720)) ([e03acf7](https://github.com/standardnotes/snjs/commit/e03acf700d7a29b8504af548381131f55696726b))
## [1.38.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.38.0...@standardnotes/features@1.38.1) (2022-04-27)
### Bug Fixes
* remove deprecated 2FA manager permission and feature ([47df3e4](https://github.com/standardnotes/snjs/commit/47df3e41ea9e5b6b721d47b6319ccd590b6f566c))
# [1.38.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.9...@standardnotes/features@1.38.0) (2022-04-25)
### Features
* rename feature and permissions related to storage tiers ([b4c18b9](https://github.com/standardnotes/snjs/commit/b4c18b91516d771e5c6bf3f510ab09ca621896ea))
## [1.37.9](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.8...@standardnotes/features@1.37.9) (2022-04-22)
**Note:** Version bump only for package @standardnotes/features
## [1.37.8](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.7...@standardnotes/features@1.37.8) (2022-04-21)
**Note:** Version bump only for package @standardnotes/features
## [1.37.7](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.6...@standardnotes/features@1.37.7) (2022-04-20)
**Note:** Version bump only for package @standardnotes/features
## [1.37.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.5...@standardnotes/features@1.37.6) (2022-04-20)
**Note:** Version bump only for package @standardnotes/features
## [1.37.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.4...@standardnotes/features@1.37.5) (2022-04-15)
**Note:** Version bump only for package @standardnotes/features
## [1.37.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.3...@standardnotes/features@1.37.4) (2022-04-15)
**Note:** Version bump only for package @standardnotes/features
## [1.37.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.2...@standardnotes/features@1.37.3) (2022-04-12)
**Note:** Version bump only for package @standardnotes/features
## [1.37.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.1...@standardnotes/features@1.37.2) (2022-04-11)
**Note:** Version bump only for package @standardnotes/features
## [1.37.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.37.0...@standardnotes/features@1.37.1) (2022-04-01)
**Note:** Version bump only for package @standardnotes/features
# [1.37.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.36.3...@standardnotes/features@1.37.0) (2022-04-01)
### Features
* content interfaces and model type strictness ([#685](https://github.com/standardnotes/snjs/issues/685)) ([e2450c5](https://github.com/standardnotes/snjs/commit/e2450c59e8309d7080efaa03905b2abc728d9403))
## [1.36.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.36.2...@standardnotes/features@1.36.3) (2022-03-31)
**Note:** Version bump only for package @standardnotes/features
## [1.36.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.36.1...@standardnotes/features@1.36.2) (2022-03-31)
**Note:** Version bump only for package @standardnotes/features
## [1.36.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.36.0...@standardnotes/features@1.36.1) (2022-03-31)
**Note:** Version bump only for package @standardnotes/features
# [1.36.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.35.6...@standardnotes/features@1.36.0) (2022-03-30)
### Features
* files-beta role ([#678](https://github.com/standardnotes/snjs/issues/678)) ([f1ae62f](https://github.com/standardnotes/snjs/commit/f1ae62ff05e361dc551f1a0d047feabd129d0f76))
## [1.35.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.35.5...@standardnotes/features@1.35.6) (2022-03-23)
**Note:** Version bump only for package @standardnotes/features
## [1.35.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.35.4...@standardnotes/features@1.35.5) (2022-03-23)
**Note:** Version bump only for package @standardnotes/features
## [1.35.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.35.3...@standardnotes/features@1.35.4) (2022-03-22)
**Note:** Version bump only for package @standardnotes/features
## [1.35.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.35.2...@standardnotes/features@1.35.3) (2022-03-21)
**Note:** Version bump only for package @standardnotes/features
## [1.35.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.35.1...@standardnotes/features@1.35.2) (2022-03-21)
**Note:** Version bump only for package @standardnotes/features
## [1.35.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.35.0...@standardnotes/features@1.35.1) (2022-03-18)
**Note:** Version bump only for package @standardnotes/features
# [1.35.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.12...@standardnotes/features@1.35.0) (2022-03-16)
### Features
* restricted component permissions ([e90b2d6](https://github.com/standardnotes/snjs/commit/e90b2d6847920e4cd7a281145204ce2f346af88e))
## [1.34.12](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.10...@standardnotes/features@1.34.12) (2022-03-16)
**Note:** Version bump only for package @standardnotes/features
## [1.34.11](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.10...@standardnotes/features@1.34.11) (2022-03-16)
**Note:** Version bump only for package @standardnotes/features
## [1.34.10](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.9...@standardnotes/features@1.34.10) (2022-03-11)
**Note:** Version bump only for package @standardnotes/features
## [1.34.9](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.8...@standardnotes/features@1.34.9) (2022-03-11)
**Note:** Version bump only for package @standardnotes/features
## [1.34.8](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.7...@standardnotes/features@1.34.8) (2022-03-10)
### Bug Fixes
* updated markdown visual ([6a2acb7](https://github.com/standardnotes/snjs/commit/6a2acb70961135394a30fe30d2c6f10f2204c1b9))
## [1.34.7](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.6...@standardnotes/features@1.34.7) (2022-03-10)
### Bug Fixes
* **temp:** remove markdown visual ([4ba193b](https://github.com/standardnotes/snjs/commit/4ba193b6848c15a94bbdb0e61edb30fea6c02c18))
## [1.34.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.5...@standardnotes/features@1.34.6) (2022-03-10)
### Bug Fixes
* feature description ([d8a020d](https://github.com/standardnotes/snjs/commit/d8a020d85cae94490cb40be41c041939ec8f0031))
## [1.34.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.4...@standardnotes/features@1.34.5) (2022-03-09)
**Note:** Version bump only for package @standardnotes/features
## [1.34.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.3...@standardnotes/features@1.34.4) (2022-03-08)
**Note:** Version bump only for package @standardnotes/features
## [1.34.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.2...@standardnotes/features@1.34.3) (2022-03-08)
### Bug Fixes
* remove AccountSwitcher from experimental features list ([#638](https://github.com/standardnotes/snjs/issues/638)) ([3b37107](https://github.com/standardnotes/snjs/commit/3b37107490d6daad17d0fcb89545bb252cd52732))
## [1.34.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.1...@standardnotes/features@1.34.2) (2022-03-07)
### Bug Fixes
* changes to enable experimental features ([#632](https://github.com/standardnotes/snjs/issues/632)) ([a60d981](https://github.com/standardnotes/snjs/commit/a60d981eda8f0634c0885cfcc0dfce0d02748072))
## [1.34.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.34.0...@standardnotes/features@1.34.1) (2022-03-04)
**Note:** Version bump only for package @standardnotes/features
# [1.34.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.33.3...@standardnotes/features@1.34.0) (2022-03-01)
### Features
* add experimental feature support ([#622](https://github.com/standardnotes/snjs/issues/622)) ([533c920](https://github.com/standardnotes/snjs/commit/533c92074826e496e6240dff2f11410f72064d8a))
## [1.33.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.33.1...@standardnotes/features@1.33.3) (2022-02-28)
### Bug Fixes
* add pseudo change to get lerna to trigger ([41e6817](https://github.com/standardnotes/snjs/commit/41e6817bbf726b0932cdf16f58622328b9e42803))
## [1.33.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.33.1...@standardnotes/features@1.33.2) (2022-02-28)
### Bug Fixes
* add pseudo change to get lerna to trigger ([41e6817](https://github.com/standardnotes/snjs/commit/41e6817bbf726b0932cdf16f58622328b9e42803))
## [1.33.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.33.0...@standardnotes/features@1.33.1) (2022-02-27)
**Note:** Version bump only for package @standardnotes/features
# [1.33.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.12...@standardnotes/features@1.33.0) (2022-02-25)
### Features
* extract core functionalities to separate packages ([#610](https://github.com/standardnotes/snjs/issues/610)) ([801547a](https://github.com/standardnotes/snjs/commit/801547a71614ad51a92fb249eaa184ed46a44aac))
## [1.32.12](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.11...@standardnotes/features@1.32.12) (2022-02-24)
**Note:** Version bump only for package @standardnotes/features
## [1.32.11](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.10...@standardnotes/features@1.32.11) (2022-02-22)
### Bug Fixes
* deprecated features should still be packaged ([#606](https://github.com/standardnotes/snjs/issues/606)) ([5176080](https://github.com/standardnotes/snjs/commit/5176080753a5720a0abf434923b1d8103b1261d0))
## [1.32.10](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.9...@standardnotes/features@1.32.10) (2022-02-22)
**Note:** Version bump only for package @standardnotes/features
## [1.32.9](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.8...@standardnotes/features@1.32.9) (2022-02-22)
**Note:** Version bump only for package @standardnotes/features
## [1.32.8](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.7...@standardnotes/features@1.32.8) (2022-02-18)
**Note:** Version bump only for package @standardnotes/features
## [1.32.7](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.6...@standardnotes/features@1.32.7) (2022-02-17)
**Note:** Version bump only for package @standardnotes/features
## [1.32.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.5...@standardnotes/features@1.32.6) (2022-02-16)
### Bug Fixes
* return newly added features ([395747f](https://github.com/standardnotes/snjs/commit/395747f6fa768ef9e87d10fb6b50e76f039115fd))
## [1.32.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.4...@standardnotes/features@1.32.5) (2022-02-16)
### Bug Fixes
* add new feature identifiers ([6a2623f](https://github.com/standardnotes/snjs/commit/6a2623f1dadb2d275e0c8b265d39f77c844ba26c))
## [1.32.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.3...@standardnotes/features@1.32.4) (2022-02-16)
**Note:** Version bump only for package @standardnotes/features
## [1.32.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.2...@standardnotes/features@1.32.3) (2022-02-16)
**Note:** Version bump only for package @standardnotes/features
## [1.32.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.1...@standardnotes/features@1.32.2) (2022-02-15)
**Note:** Version bump only for package @standardnotes/features
## [1.32.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.32.0...@standardnotes/features@1.32.1) (2022-02-14)
**Note:** Version bump only for package @standardnotes/features
# [1.32.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.31.0...@standardnotes/features@1.32.0) (2022-02-11)
### Features
* deprecated feature identifiers ([8e870f3](https://github.com/standardnotes/snjs/commit/8e870f352b022af768799a13473580d65150ff4b))
# [1.31.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.30.1...@standardnotes/features@1.31.0) (2022-02-10)
### Features
* remove role name and subscription name from auth in favor of common ([14ec74c](https://github.com/standardnotes/snjs/commit/14ec74c3d98febf1117073f32442504cfad428e8))
## [1.30.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.30.0...@standardnotes/features@1.30.1) (2022-02-10)
**Note:** Version bump only for package @standardnotes/features
# [1.30.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.29.0...@standardnotes/features@1.30.0) (2022-02-09)
### Features
* remove filesafe ([1cee4dd](https://github.com/standardnotes/snjs/commit/1cee4dd595003600d89adfd71fedf7b5454880b8))
# [1.29.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.28.0...@standardnotes/features@1.29.0) (2022-02-08)
### Features
* markdown visual editor ([#589](https://github.com/standardnotes/snjs/issues/589)) ([a6c9e74](https://github.com/standardnotes/snjs/commit/a6c9e742acef2c8d027646bf0f7a963b4de712ce))
# [1.28.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.27.0...@standardnotes/features@1.28.0) (2022-02-07)
### Features
* dynamic features based on runtime env ([#590](https://github.com/standardnotes/snjs/issues/590)) ([060861a](https://github.com/standardnotes/snjs/commit/060861a6c5bc179e3e1987c2b63490888e153bbb))
# [1.27.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.26.1...@standardnotes/features@1.27.0) (2022-02-01)
### Features
* enable spellcheck control for editors ([#578](https://github.com/standardnotes/snjs/issues/578)) ([24e7add](https://github.com/standardnotes/snjs/commit/24e7add3b6217703d142509b2dfd2ecfcc3ceb74))
## [1.26.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.26.0...@standardnotes/features@1.26.1) (2022-01-28)
**Note:** Version bump only for package @standardnotes/features
# [1.26.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.25.0...@standardnotes/features@1.26.0) (2022-01-27)
### Features
* add names to some unnamed features ([#575](https://github.com/standardnotes/snjs/issues/575)) ([1e14494](https://github.com/standardnotes/snjs/commit/1e144941ef0cd9ad3fe5dfa80b4700127c13b5d2))
# [1.25.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.7...@standardnotes/features@1.25.0) (2022-01-19)
### Features
* onPresyncSave ([0e5f451](https://github.com/standardnotes/snjs/commit/0e5f451e85cfd7cb58ff1f0a87425e4dd43f6030))
## [1.24.7](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.6...@standardnotes/features@1.24.7) (2022-01-19)
### Bug Fixes
* bump editors ([9e109b1](https://github.com/standardnotes/snjs/commit/9e109b1a29a3767f8fd3126bab0ccfcf4a2487a4))
## [1.24.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.5...@standardnotes/features@1.24.6) (2022-01-19)
**Note:** Version bump only for package @standardnotes/features
## [1.24.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.4...@standardnotes/features@1.24.5) (2022-01-19)
**Note:** Version bump only for package @standardnotes/features
## [1.24.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.3...@standardnotes/features@1.24.4) (2022-01-18)
**Note:** Version bump only for package @standardnotes/features
## [1.24.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.2...@standardnotes/features@1.24.3) (2022-01-17)
**Note:** Version bump only for package @standardnotes/features
## [1.24.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.1...@standardnotes/features@1.24.2) (2022-01-17)
**Note:** Version bump only for package @standardnotes/features
## [1.24.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.24.0...@standardnotes/features@1.24.1) (2022-01-17)
**Note:** Version bump only for package @standardnotes/features
# [1.24.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.23.1...@standardnotes/features@1.24.0) (2022-01-15)
### Features
* remove server extension type ([#552](https://github.com/standardnotes/snjs/issues/552)) ([aa542f3](https://github.com/standardnotes/snjs/commit/aa542f3124c60fa81a0b271030b3c35415c54a62))
## [1.23.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.23.0...@standardnotes/features@1.23.1) (2022-01-15)
**Note:** Version bump only for package @standardnotes/features
# [1.23.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.22.0...@standardnotes/features@1.23.0) (2022-01-14)
### Features
* markdown pro, bold editor ([0bc5add](https://github.com/standardnotes/snjs/commit/0bc5addabc7033149d207d1140f9c5e1b7dc7fb6))
# [1.22.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.21.0...@standardnotes/features@1.22.0) (2022-01-14)
### Features
* plus editor 1.6.0 ([6bdf5a7](https://github.com/standardnotes/snjs/commit/6bdf5a7519559f75d72016a1f4e6f715e55d437a))
# [1.21.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.8...@standardnotes/features@1.21.0) (2022-01-14)
### Features
* spellcheck control per note ([#557](https://github.com/standardnotes/snjs/issues/557)) ([76cc637](https://github.com/standardnotes/snjs/commit/76cc63781e3568bbb48b44001ab51644af0985b3))
## [1.20.8](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.7...@standardnotes/features@1.20.8) (2022-01-14)
### Bug Fixes
* cross-package dependencies and content type imports ([#556](https://github.com/standardnotes/snjs/issues/556)) ([26ba1e0](https://github.com/standardnotes/snjs/commit/26ba1e0c38e7e0ae572996125150a4c3d27f1c0a))
## [1.20.7](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.6...@standardnotes/features@1.20.7) (2022-01-12)
**Note:** Version bump only for package @standardnotes/features
## [1.20.6](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.5...@standardnotes/features@1.20.6) (2022-01-10)
**Note:** Version bump only for package @standardnotes/features
## [1.20.5](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.4...@standardnotes/features@1.20.5) (2022-01-05)
### Bug Fixes
* filesafe index path ([7cdfe46](https://github.com/standardnotes/snjs/commit/7cdfe46bc74b6671b1e26972363d6f3d0048d29a))
## [1.20.4](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.3...@standardnotes/features@1.20.4) (2022-01-03)
**Note:** Version bump only for package @standardnotes/features
## [1.20.3](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.2...@standardnotes/features@1.20.3) (2021-12-30)
### Bug Fixes
* component versions ([cb7407a](https://github.com/standardnotes/snjs/commit/cb7407a7002516f17974c6fcd693738c53c6293c))
## [1.20.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.1...@standardnotes/features@1.20.2) (2021-12-30)
### Bug Fixes
* missing code editor vendor dir ([1b9cedd](https://github.com/standardnotes/snjs/commit/1b9cedde303d4334d0d816c2e650513bb17b8b49))
## [1.20.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.20.0...@standardnotes/features@1.20.1) (2021-12-30)
### Bug Fixes
* linter errors in features package ([#534](https://github.com/standardnotes/snjs/issues/534)) ([640012e](https://github.com/standardnotes/snjs/commit/640012e2aa0d956b9a7ffd92a1435e9bd072229f))
# [1.20.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.19.1...@standardnotes/features@1.20.0) (2021-12-29)
### Features
* **components:** add deterministic zipping ([66d0c61](https://github.com/standardnotes/snjs/commit/66d0c61c966d5c8a8bfa33a6069acf3c24407842))
## [1.19.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.19.0...@standardnotes/features@1.19.1) (2021-12-29)
**Note:** Version bump only for package @standardnotes/features
# [1.19.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.18.2...@standardnotes/features@1.19.0) (2021-12-29)
### Features
* new components package ([95dd5aa](https://github.com/standardnotes/snjs/commit/95dd5aab0c2124192554be3f20f14ace62d9c46b))
## [1.18.2](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.18.1...@standardnotes/features@1.18.2) (2021-12-29)
### Bug Fixes
* correct gitignore paths ([cefc0cf](https://github.com/standardnotes/snjs/commit/cefc0cfcf98e3e5378e055b8c46931b53b23195e))
* include dist in static components ([d17ce0f](https://github.com/standardnotes/snjs/commit/d17ce0f67045c6e4c97bf4577709aa58794e72e6))
## [1.18.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.18.0...@standardnotes/features@1.18.1) (2021-12-29)
### Bug Fixes
* include components cp in build script ([4733ec9](https://github.com/standardnotes/snjs/commit/4733ec9ece77d867280fabe20c63ba827d4834b7))
# [1.18.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.16.0...@standardnotes/features@1.18.0) (2021-12-29)
### Features
* native components ([#525](https://github.com/standardnotes/snjs/issues/525)) ([ca7f8e8](https://github.com/standardnotes/snjs/commit/ca7f8e876bccdaff60daf2cdee3d3b2020954e53))
# [1.16.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.15.1...@standardnotes/features@1.16.0) (2021-12-29)
### Features
* add smart tags as a feature / premium option ([#526](https://github.com/standardnotes/snjs/issues/526)) ([02cd04c](https://github.com/standardnotes/snjs/commit/02cd04c8b144c3c6a5aa51ff24d746c39afb1b57))
## [1.15.1](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.15.0...@standardnotes/features@1.15.1) (2021-12-27)
**Note:** Version bump only for package @standardnotes/features
# [1.15.0](https://github.com/standardnotes/snjs/compare/@standardnotes/features@1.14.0...@standardnotes/features@1.15.0) (2021-12-27)
### Features
* Remove theme:no-distraction permission ([#515](https://github.com/standardnotes/snjs/issues/515)) ([e8031fe](https://github.com/standardnotes/snjs/commit/e8031fe5a8f68add24de922b4f171ec69affa286))
# 1.14.0 (2021-12-23)
### Features
* rename email backup setting to email backup frequency ([25e7b46](https://github.com/standardnotes/snjs/commit/25e7b4620834711ac7f513ae893898c5eab1af53))
## 1.13.3 (2021-12-23)
### Bug Fixes
* lock package versions ([8aa2ce6](https://github.com/standardnotes/snjs/commit/8aa2ce676b57598ab72840adf851869d8e769022))
## 1.13.2 (2021-12-23)
### Bug Fixes
* add publishing from package version by lerna ([80433d0](https://github.com/standardnotes/snjs/commit/80433d044f258095753482b8322d73aba3d9a9e4))
## 1.13.1 (2021-12-23)
### Bug Fixes
* remove the ammend commit from lerna versioning ([f0400d9](https://github.com/standardnotes/snjs/commit/f0400d9a2f5a04eaece2e4c16da71166a2ddb251))
# 1.13.0 (2021-12-23)
### Features
* add one drive backup frequency setting ([#522](https://github.com/standardnotes/snjs/issues/522)) ([c27827f](https://github.com/standardnotes/snjs/commit/c27827f8c7969dd32511c9c75122ece372132c83))
## 1.12.4 (2021-12-23)
### Bug Fixes
* remove running tests upon deployment - ensured on PR status checks ([#523](https://github.com/standardnotes/snjs/issues/523)) ([5c795d1](https://github.com/standardnotes/snjs/commit/5c795d17b583d02955773576384e622c3ef7f418))
## 1.12.3 (2021-12-23)
### Bug Fixes
* pr template ([#518](https://github.com/standardnotes/snjs/issues/518)) ([b445bb6](https://github.com/standardnotes/snjs/commit/b445bb64841217ae27c2514887629235be95d2a3))
## 1.12.2 (2021-12-23)
### Bug Fixes
* checkout with personal access token ([773c1ef](https://github.com/standardnotes/snjs/commit/773c1ef91c4452ad411e928342060dcb59428e3c))
## 1.12.1 (2021-12-22)
### Bug Fixes
* gpg signing with CI StandardNotes user ([d72f61c](https://github.com/standardnotes/snjs/commit/d72f61c23cd15b31d37340cc756d16526634b9ee))
# 1.12.0 (2021-12-22)
### Bug Fixes
* add "Markdown Math" to features and permissions list, also add missing fields for CloudLink ([#389](https://github.com/standardnotes/snjs/issues/389)) ([66b1392](https://github.com/standardnotes/snjs/commit/66b13922b573ac81fc822cec8861126193e11de4))
* add new props to features type ([#458](https://github.com/standardnotes/snjs/issues/458)) ([7a3e911](https://github.com/standardnotes/snjs/commit/7a3e9114414646a564a4de0879d68a801686e34f))
* export feature identifier ([fc55d5c](https://github.com/standardnotes/snjs/commit/fc55d5cba9218548f2effdbb3d1456d4539398ad))
* make borderColor snake-cased in features list ([#413](https://github.com/standardnotes/snjs/issues/413)) ([d96237c](https://github.com/standardnotes/snjs/commit/d96237c81288aa35d3f1e7757f0a2c4143a5fe29))
* make features package independent of auth ([#371](https://github.com/standardnotes/snjs/issues/371)) ([cfb9e7d](https://github.com/standardnotes/snjs/commit/cfb9e7d5820f5fbb40f9aa253cd4f1a60049ca9d))
* make remaining camel-cased feature keys to be snake-cased ([#416](https://github.com/standardnotes/snjs/issues/416)) ([98fe4c8](https://github.com/standardnotes/snjs/commit/98fe4c82e6d8da8d2922d01b984e2bd15d5a34db))
* missing exports for permission model ([044744b](https://github.com/standardnotes/snjs/commit/044744bbf61ad4f294896cb2fd80e310ef025c01))
* replace permissions with features in auth token ([#373](https://github.com/standardnotes/snjs/issues/373)) ([739c956](https://github.com/standardnotes/snjs/commit/739c95604bd119a893d0d43dd2b35794cb5cb770))
* two factor auth feature id ([98720b8](https://github.com/standardnotes/snjs/commit/98720b83e93b383b703d008a66828ad250a2e50c))
* versioning and package dependencies ([#509](https://github.com/standardnotes/snjs/issues/509)) ([fe1df94](https://github.com/standardnotes/snjs/commit/fe1df94eff3e90bcf9ba0cf45bdc44ac49204c71))
### Features
* add deprecation_message to feature description ([19113db](https://github.com/standardnotes/snjs/commit/19113db0213962b04b9d53f4ddd03377a1ad653f))
* add feature identifier to features ([05d4951](https://github.com/standardnotes/snjs/commit/05d49511f744d5ba0b130780aeb26760bda8e62b))
* add features data ([#369](https://github.com/standardnotes/snjs/issues/369)) ([1094bea](https://github.com/standardnotes/snjs/commit/1094beabeed272db6f91332523b8a521de41f170))
* Add Focus Mode feature ([#487](https://github.com/standardnotes/snjs/issues/487)) ([7f22590](https://github.com/standardnotes/snjs/commit/7f2259003e150db83f0182c9878493ce775360cc))
* add missing features ([693048b](https://github.com/standardnotes/snjs/commit/693048bccfce57df7b88f8f87c1e3ccbe34fd93a))
* add role name to features and refactor package structure ([#481](https://github.com/standardnotes/snjs/issues/481)) ([3651629](https://github.com/standardnotes/snjs/commit/365162948127653d2f199f9f8660123edfe24682))
* editor note and file types ([#456](https://github.com/standardnotes/snjs/issues/456)) ([8b9d264](https://github.com/standardnotes/snjs/commit/8b9d264f465227d5ca846969b1a1885382b583ad))
* features instead of permissions ([#385](https://github.com/standardnotes/snjs/issues/385)) ([b53e967](https://github.com/standardnotes/snjs/commit/b53e967297bc472ed11aed79af79d0ae5b36d101))
* map only some features to items ([#404](https://github.com/standardnotes/snjs/issues/404)) ([7f521ef](https://github.com/standardnotes/snjs/commit/7f521efe621d3f2128881aed8a31bf7bd2399a74))
* Remove "No Distraction" as it's replaced by Focused Writing ([#506](https://github.com/standardnotes/snjs/issues/506)) ([527e676](https://github.com/standardnotes/snjs/commit/527e67673652721ebc947c752815c12007f8d263))
* remove ContentType from features in favor of common ([#402](https://github.com/standardnotes/snjs/issues/402)) ([ba0ac62](https://github.com/standardnotes/snjs/commit/ba0ac62fd2631541cd0aa615e9163af1b59fd824))
* upgrade node engine versions to latest active LTS ([#462](https://github.com/standardnotes/snjs/issues/462)) ([686fc15](https://github.com/standardnotes/snjs/commit/686fc15030d302b474ebb7ef1cd4dcc48ec42359))
### Reverts
* Revert "refactor: make features depend on snjs" ([c0dfdc1](https://github.com/standardnotes/snjs/commit/c0dfdc110de5b73967fb9b3a3d93ba4cf872d24f))

View File

@@ -0,0 +1,11 @@
// eslint-disable-next-line @typescript-eslint/no-var-requires
const base = require('../../node_modules/@standardnotes/config/src/jest.json');
module.exports = {
...base,
globals: {
'ts-jest': {
tsconfig: 'tsconfig.json',
},
}
};

View File

@@ -0,0 +1,4 @@
{
"extends": "./tsconfig.json",
"exclude": ["dist"]
}

View File

@@ -0,0 +1,39 @@
{
"name": "@standardnotes/features",
"version": "1.47.1",
"engines": {
"node": ">=16.0.0 <17.0.0"
},
"description": "Features SDK for Standard Notes projects",
"main": "dist/index.js",
"author": "Standard Notes",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"publishConfig": {
"access": "public"
},
"license": "AGPL-3.0-or-later",
"scripts": {
"clean": "rm -fr dist",
"prestart": "yarn clean",
"start": "tsc -p tsconfig.json --watch",
"prebuild": "yarn clean",
"build": "tsc -p tsconfig.json",
"lint": "eslint . --ext .ts",
"test:unit": "jest"
},
"dependencies": {
"@standardnotes/auth": "^3.19.4",
"@standardnotes/common": "^1.23.1",
"reflect-metadata": "^0.1.13"
},
"devDependencies": {
"@types/jest": "^28.1.4",
"@typescript-eslint/eslint-plugin": "^5.30.0",
"eslint-plugin-prettier": "^4.2.1",
"jest": "^28.1.2",
"ts-jest": "^28.0.5"
}
}

View File

@@ -0,0 +1,25 @@
export enum ComponentAction {
SetSize = 'set-size',
StreamItems = 'stream-items',
StreamContextItem = 'stream-context-item',
SaveItems = 'save-items',
SelectItem = 'select-item',
AssociateItem = 'associate-item',
DeassociateItem = 'deassociate-item',
ClearSelection = 'clear-selection',
CreateItem = 'create-item',
CreateItems = 'create-items',
DeleteItems = 'delete-items',
SetComponentData = 'set-component-data',
ToggleActivateComponent = 'toggle-activate-component',
RequestPermissions = 'request-permissions',
PresentConflictResolution = 'present-conflict-resolution',
DuplicateItem = 'duplicate-item',
ComponentRegistered = 'component-registered',
ActivateThemes = 'themes',
Reply = 'reply',
ThemesActivated = 'themes-activated',
KeyDown = 'key-down',
KeyUp = 'key-up',
Click = 'click',
}

View File

@@ -0,0 +1,5 @@
export enum ComponentArea {
Editor = 'editor-editor',
Themes = 'themes',
EditorStack = 'editor-stack',
}

View File

@@ -0,0 +1,4 @@
export enum ComponentFlag {
New = 'New',
Deprecated = 'Deprecated',
}

View File

@@ -0,0 +1,7 @@
import { ContentType } from '@standardnotes/common'
import { ComponentAction } from './ComponentAction'
export type ComponentPermission = {
name: ComponentAction
content_types?: ContentType[]
}

View File

@@ -0,0 +1,8 @@
export enum NoteType {
Authentication = 'authentication',
Code = 'code',
Markdown = 'markdown',
RichText = 'rich-text',
Spreadsheet = 'spreadsheet',
Task = 'task',
}

View File

@@ -0,0 +1,7 @@
export type ThemeDockIcon = {
type: 'svg' | 'circle'
background_color: string
foreground_color: string
border_color: string
source?: string
}

View File

@@ -0,0 +1,78 @@
import { ComponentPermission } from '../Component/ComponentPermission'
import { ContentType, RoleName, SubscriptionName } from '@standardnotes/common'
import { ComponentArea } from '../Component/ComponentArea'
import { PermissionName } from '../Permission/PermissionName'
import { FeatureIdentifier } from './FeatureIdentifier'
import { ComponentFlag } from '../Component/ComponentFlag'
import { NoteType } from '../Component/NoteType'
import { ThemeDockIcon } from '../Component/ThemeDockIcon'
type RoleFields = {
/** Server populated */
role_name?: RoleName
/** Statically populated. Non-influencing; used as a reference by other static consumers (such as email service) */
availableInSubscriptions: SubscriptionName[]
}
export type BaseFeatureDescription = RoleFields & {
deletion_warning?: string
deprecated?: boolean
deprecation_message?: string
description?: string
expires_at?: number
flags?: ComponentFlag[]
identifier: FeatureIdentifier
marketing_url?: string
name?: string
no_expire?: boolean
no_mobile?: boolean
thumbnail_url?: string
permission_name: PermissionName
}
export type ServerFeatureDescription = RoleFields & {
name?: string
identifier: FeatureIdentifier
permission_name: PermissionName
}
export type ClientFeatureDescription = RoleFields & {
identifier: FeatureIdentifier
permission_name: PermissionName
description: string
name: string
}
export type ComponentFeatureDescription = BaseFeatureDescription & {
/** The relative path of the index.html file or the main css file if theme, within the component folder itself */
index_path: string
content_type: ContentType
area: ComponentArea
}
export type ThirdPartyFeatureDescription = ComponentFeatureDescription & {
url: string
}
export type IframeComponentFeatureDescription = ComponentFeatureDescription & {
component_permissions: ComponentPermission[]
}
export type EditorFeatureDescription = IframeComponentFeatureDescription & {
file_type: 'txt' | 'html' | 'md' | 'json'
/** Whether an editor is interchangable with another editor that has the same file_type */
interchangeable: boolean
note_type: NoteType
spellcheckControl?: boolean
}
export type ThemeFeatureDescription = ComponentFeatureDescription & {
/** Some themes can be layered on top of other themes */
layerable?: boolean
dock_icon?: ThemeDockIcon
}
export type FeatureDescription = BaseFeatureDescription &
Partial<ComponentFeatureDescription & EditorFeatureDescription & ThemeFeatureDescription>

View File

@@ -0,0 +1,53 @@
export enum FeatureIdentifier {
AccountSwitcher = 'com.standardnotes.account-switcher',
CloudLink = 'org.standardnotes.cloudlink',
DailyDropboxBackup = 'org.standardnotes.daily-dropbox-backup',
DailyEmailBackup = 'org.standardnotes.daily-email-backup',
DailyGDriveBackup = 'org.standardnotes.daily-gdrive-backup',
DailyOneDriveBackup = 'org.standardnotes.daily-onedrive-backup',
Files = 'org.standardnotes.files',
FilesBeta = 'org.standardnotes.files-beta',
FilesLowStorageTier = 'org.standardnotes.files-low-storage-tier',
FilesMaximumStorageTier = 'org.standardnotes.files-max-storage-tier',
ListedCustomDomain = 'org.standardnotes.listed-custom-domain',
NoteHistory30Days = 'org.standardnotes.note-history-30',
NoteHistory365Days = 'org.standardnotes.note-history-365',
NoteHistoryUnlimited = 'org.standardnotes.note-history-unlimited',
SignInAlerts = 'com.standardnotes.sign-in-alerts',
SmartFilters = 'org.standardnotes.smart-filters',
TagNesting = 'org.standardnotes.tag-nesting',
TwoFactorAuth = 'org.standardnotes.two-factor-auth',
AutobiographyTheme = 'org.standardnotes.theme-autobiography',
DynamicTheme = 'org.standardnotes.theme-dynamic',
FocusedTheme = 'org.standardnotes.theme-focus',
FocusMode = 'org.standardnotes.focus-mode',
FuturaTheme = 'org.standardnotes.theme-futura',
MidnightTheme = 'org.standardnotes.theme-midnight',
SolarizedDarkTheme = 'org.standardnotes.theme-solarized-dark',
TitaniumTheme = 'org.standardnotes.theme-titanium',
AdvancedChecklist = 'org.standardnotes.advanced-checklist',
CodeEditor = 'org.standardnotes.code-editor',
MarkdownProEditor = 'org.standardnotes.advanced-markdown-editor',
MarkdownVisualEditor = 'org.standardnotes.markdown-visual-editor',
PlainTextEditor = 'org.standardnotes.plain-text-editor',
PlusEditor = 'org.standardnotes.plus-editor',
SheetsEditor = 'org.standardnotes.standard-sheets',
TaskEditor = 'org.standardnotes.simple-task-editor',
TokenVaultEditor = 'org.standardnotes.token-vault',
DeprecatedBoldEditor = 'org.standardnotes.bold-editor',
DeprecatedMarkdownBasicEditor = 'org.standardnotes.simple-markdown-editor',
DeprecatedMarkdownMathEditor = 'org.standardnotes.fancy-markdown-editor',
DeprecatedMarkdownMinimistEditor = 'org.standardnotes.minimal-markdown-editor',
DeprecatedFoldersComponent = 'org.standardnotes.folders',
DeprecatedFileSafe = 'org.standardnotes.file-safe',
}
/**
* Identifier for standalone filesafe instance offered as legacy installable via extensions-server
*/
export const LegacyFileSafeIdentifier = 'org.standardnotes.legacy.file-safe'
export const ExperimentalFeatures = [FeatureIdentifier.AdvancedChecklist]

View File

@@ -0,0 +1,19 @@
import { SubscriptionName } from '@standardnotes/common'
import { GetFeatures, GetFeaturesForSubscription } from './Features'
describe('features', () => {
it('all features should have availableInSubscriptions populated', () => {
const features = GetFeatures()
for (const feature of features) {
expect(feature.availableInSubscriptions.length).toBeGreaterThan(0)
}
})
it('gets features for plus plan', () => {
const features = GetFeaturesForSubscription(SubscriptionName.PlusPlan)
for (const feature of features) {
expect(feature.availableInSubscriptions.includes(SubscriptionName.PlusPlan))
}
})
})

View File

@@ -0,0 +1,28 @@
import { FeatureDescription } from './FeatureDescription'
import { FeatureIdentifier } from './FeatureIdentifier'
import { editors } from '../Lists/Editors'
import { themes } from '../Lists/Themes'
import { serverFeatures } from '../Lists/ServerFeatures'
import { clientFeatures } from '../Lists/ClientFeatures'
import { GetDeprecatedFeatures } from '../Lists/DeprecatedFeatures'
import { experimentalFeatures } from '../Lists/ExperimentalFeatures'
import { SubscriptionName } from '@standardnotes/common'
export function GetFeatures(): FeatureDescription[] {
return [
...themes(),
...editors(),
...serverFeatures(),
...clientFeatures(),
...experimentalFeatures(),
...GetDeprecatedFeatures(),
]
}
export function GetFeaturesForSubscription(subscription: SubscriptionName): FeatureDescription[] {
return GetFeatures().filter((feature) => feature.availableInSubscriptions.includes(subscription))
}
export function FindNativeFeature(identifier: FeatureIdentifier): FeatureDescription | undefined {
return GetFeatures().find((f) => f.identifier === identifier)
}

View File

@@ -0,0 +1,58 @@
import { ClientFeatureDescription } from '../Feature/FeatureDescription'
import { PermissionName } from '../Permission/PermissionName'
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
import { SubscriptionName } from '@standardnotes/common'
export function clientFeatures(): ClientFeatureDescription[] {
return [
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Tag Nesting',
identifier: FeatureIdentifier.TagNesting,
permission_name: PermissionName.TagNesting,
description: 'Organize your tags into folders.',
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Smart Filters',
identifier: FeatureIdentifier.SmartFilters,
permission_name: PermissionName.SmartFilters,
description: 'Create smart filters for viewing notes matching specific criteria.',
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Encrypted files (coming soon)',
identifier: FeatureIdentifier.Files,
permission_name: PermissionName.Files,
description: '',
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Encrypted files beta',
identifier: FeatureIdentifier.FilesBeta,
permission_name: PermissionName.FilesBeta,
description: '',
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Focus Mode',
identifier: FeatureIdentifier.FocusMode,
permission_name: PermissionName.FocusMode,
description: '',
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Listed Custom Domain',
identifier: FeatureIdentifier.ListedCustomDomain,
permission_name: PermissionName.ListedCustomDomain,
description: '',
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Multiple accounts',
identifier: FeatureIdentifier.AccountSwitcher,
permission_name: PermissionName.AccountSwitcher,
description: '',
},
]
}

View File

@@ -0,0 +1,7 @@
import { GetDeprecatedFeatures } from './DeprecatedFeatures'
it('all deprecated features should have deprecated flag true', async () => {
for (const feature of GetDeprecatedFeatures()) {
expect(feature.deprecated).toEqual(true)
}
})

View File

@@ -0,0 +1,110 @@
import { ContentType, SubscriptionName } from '@standardnotes/common'
import {
EditorFeatureDescription,
IframeComponentFeatureDescription,
FeatureDescription,
} from '../Feature/FeatureDescription'
import { PermissionName } from '../Permission/PermissionName'
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
import { NoteType } from '../Component/NoteType'
import { FillEditorComponentDefaults } from './Utilities/FillEditorComponentDefaults'
import { ComponentAction } from '../Component/ComponentAction'
import { ComponentArea } from '../Component/ComponentArea'
export function GetDeprecatedFeatures(): FeatureDescription[] {
const bold: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Alternative Rich Text',
identifier: FeatureIdentifier.DeprecatedBoldEditor,
note_type: NoteType.RichText,
file_type: 'html',
component_permissions: [
{
name: ComponentAction.StreamContextItem,
content_types: [ContentType.Note],
},
{
name: ComponentAction.StreamItems,
content_types: [
ContentType.FilesafeCredentials,
ContentType.FilesafeFileMetadata,
ContentType.FilesafeIntegration,
],
},
],
spellcheckControl: true,
deprecated: true,
permission_name: PermissionName.BoldEditor,
description: 'A simple and peaceful rich editor that helps you write and think clearly.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/bold.jpg',
})
const markdownBasic: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Basic Markdown',
identifier: FeatureIdentifier.DeprecatedMarkdownBasicEditor,
note_type: NoteType.Markdown,
spellcheckControl: true,
file_type: 'md',
deprecated: true,
permission_name: PermissionName.MarkdownBasicEditor,
description: 'A Markdown editor with dynamic split-pane preview.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/simple-markdown.jpg',
})
const markdownMinimist: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Minimal Markdown',
identifier: FeatureIdentifier.DeprecatedMarkdownMinimistEditor,
note_type: NoteType.Markdown,
file_type: 'md',
index_path: 'index.html',
permission_name: PermissionName.MarkdownMinimistEditor,
spellcheckControl: true,
deprecated: true,
description: 'A minimal Markdown editor with live rendering and in-text search via Ctrl/Cmd + F',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/min-markdown.jpg',
})
const markdownMath: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Markdown with Math',
identifier: FeatureIdentifier.DeprecatedMarkdownMathEditor,
spellcheckControl: true,
permission_name: PermissionName.MarkdownMathEditor,
note_type: NoteType.Markdown,
file_type: 'md',
deprecated: true,
index_path: 'index.html',
description: 'A beautiful split-pane Markdown editor with synced-scroll, LaTeX support, and colorful syntax.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/fancy-markdown.jpg',
})
const filesafe: IframeComponentFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'FileSafe',
identifier: FeatureIdentifier.DeprecatedFileSafe,
component_permissions: [
{
name: ComponentAction.StreamContextItem,
content_types: [ContentType.Note],
},
{
name: ComponentAction.StreamItems,
content_types: [
ContentType.FilesafeCredentials,
ContentType.FilesafeFileMetadata,
ContentType.FilesafeIntegration,
],
},
],
permission_name: PermissionName.ComponentFilesafe,
area: ComponentArea.EditorStack,
deprecated: true,
description:
'Encrypted attachments for your notes using your Dropbox, Google Drive, or WebDAV server. Limited to 50MB per file.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/FileSafe-banner.png',
})
return [bold, markdownBasic, markdownMinimist, markdownMath, filesafe]
}

View File

@@ -0,0 +1,105 @@
import { SubscriptionName } from '@standardnotes/common'
import { EditorFeatureDescription } from '../Feature/FeatureDescription'
import { PermissionName } from '../Permission/PermissionName'
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
import { NoteType } from '../Component/NoteType'
import { FillEditorComponentDefaults } from './Utilities/FillEditorComponentDefaults'
export function editors(): EditorFeatureDescription[] {
const code: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Code',
spellcheckControl: true,
identifier: FeatureIdentifier.CodeEditor,
permission_name: PermissionName.CodeEditor,
note_type: NoteType.Code,
file_type: 'txt',
interchangeable: true,
index_path: 'index.html',
description:
'Syntax highlighting and convenient keyboard shortcuts for over 120 programming' +
' languages. Ideal for code snippets and procedures.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/code.jpg',
})
const plus: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Rich Text',
note_type: NoteType.RichText,
file_type: 'html',
identifier: FeatureIdentifier.PlusEditor,
permission_name: PermissionName.PlusEditor,
spellcheckControl: true,
description:
'From highlighting to custom font sizes and colors, to tables and lists, this editor is perfect for crafting any document.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/plus-editor.jpg',
})
const markdown: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Markdown',
identifier: FeatureIdentifier.MarkdownProEditor,
note_type: NoteType.Markdown,
file_type: 'md',
permission_name: PermissionName.MarkdownProEditor,
spellcheckControl: true,
description:
'A fully featured Markdown editor that supports live preview, a styling toolbar, and split pane support.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/adv-markdown.jpg',
})
const markdownAlt: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Markdown Alternative',
identifier: FeatureIdentifier.MarkdownVisualEditor,
note_type: NoteType.Markdown,
file_type: 'md',
permission_name: PermissionName.MarkdownVisualEditor,
spellcheckControl: true,
description:
'A WYSIWYG-style Markdown editor that renders Markdown in preview-mode while you type without displaying any syntax.',
index_path: 'build/index.html',
})
const task: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Checklist',
identifier: FeatureIdentifier.TaskEditor,
note_type: NoteType.Task,
spellcheckControl: true,
file_type: 'md',
interchangeable: false,
permission_name: PermissionName.TaskEditor,
description:
'A great way to manage short-term and long-term to-do"s. You can mark tasks as completed, change their order, and edit the text naturally in place.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/task-editor.jpg',
})
const tokenvault: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Authenticator',
note_type: NoteType.Authentication,
file_type: 'json',
interchangeable: false,
identifier: FeatureIdentifier.TokenVaultEditor,
permission_name: PermissionName.TokenVaultEditor,
description:
'Encrypt and protect your 2FA secrets for all your internet accounts. Authenticator handles your 2FA secrets so that you never lose them again, or have to start over when you get a new device.',
thumbnail_url: 'https://standard-notes.s3.amazonaws.com/screenshots/models/editors/token-vault.png',
})
const spreadsheets: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Spreadsheet',
identifier: FeatureIdentifier.SheetsEditor,
note_type: NoteType.Spreadsheet,
file_type: 'json',
interchangeable: false,
permission_name: PermissionName.SheetsEditor,
description:
'A powerful spreadsheet editor with formatting and formula support. Not recommended for large data sets, as encryption of such data may decrease editor performance.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/editors/spreadsheets.png',
})
return [code, plus, markdown, markdownAlt, task, tokenvault, spreadsheets]
}

View File

@@ -0,0 +1,23 @@
import { SubscriptionName } from '@standardnotes/common'
import { NoteType } from '../Component/NoteType'
import { PermissionName } from '../Permission/PermissionName'
import { EditorFeatureDescription, FeatureDescription } from '../Feature/FeatureDescription'
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
import { FillEditorComponentDefaults } from './Utilities/FillEditorComponentDefaults'
export function experimentalFeatures(): FeatureDescription[] {
const advancedChecklist: EditorFeatureDescription = FillEditorComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Advanced Checklist [Alpha]',
identifier: FeatureIdentifier.AdvancedChecklist,
note_type: NoteType.Task,
spellcheckControl: true,
file_type: 'json',
interchangeable: false,
permission_name: PermissionName.AdvancedChecklist,
description: 'A task editor with grouping functionality.',
index_path: 'build/index.html',
})
return [advancedChecklist]
}

View File

@@ -0,0 +1,64 @@
import { ServerFeatureDescription } from '../Feature/FeatureDescription'
import { PermissionName } from '../Permission/PermissionName'
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
import { SubscriptionName } from '@standardnotes/common'
export function serverFeatures(): ServerFeatureDescription[] {
return [
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Two factor authentication',
identifier: FeatureIdentifier.TwoFactorAuth,
permission_name: PermissionName.TwoFactorAuth,
},
{
availableInSubscriptions: [SubscriptionName.ProPlan],
name: 'Unlimited note history',
identifier: FeatureIdentifier.NoteHistoryUnlimited,
permission_name: PermissionName.NoteHistoryUnlimited,
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan],
name: '365 days note history',
identifier: FeatureIdentifier.NoteHistory365Days,
permission_name: PermissionName.NoteHistory365Days,
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Email backups',
identifier: FeatureIdentifier.DailyEmailBackup,
permission_name: PermissionName.DailyEmailBackup,
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Sign-in email alerts',
identifier: FeatureIdentifier.SignInAlerts,
permission_name: PermissionName.SignInAlerts,
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
identifier: FeatureIdentifier.DailyDropboxBackup,
permission_name: PermissionName.DailyDropboxBackup,
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
identifier: FeatureIdentifier.DailyGDriveBackup,
permission_name: PermissionName.DailyGDriveBackup,
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
identifier: FeatureIdentifier.DailyOneDriveBackup,
permission_name: PermissionName.DailyOneDriveBackup,
},
{
availableInSubscriptions: [SubscriptionName.ProPlan],
identifier: FeatureIdentifier.FilesMaximumStorageTier,
permission_name: PermissionName.FilesMaximumStorageTier,
},
{
availableInSubscriptions: [SubscriptionName.PlusPlan],
identifier: FeatureIdentifier.FilesLowStorageTier,
permission_name: PermissionName.FilesLowStorageTier,
},
]
}

View File

@@ -0,0 +1,109 @@
import { ThemeFeatureDescription } from '../Feature/FeatureDescription'
import { PermissionName } from '../Permission/PermissionName'
import { FeatureIdentifier } from '../Feature/FeatureIdentifier'
import { FillThemeComponentDefaults } from './Utilities/FillThemeComponentDefaults'
import { SubscriptionName } from '@standardnotes/common'
export function themes(): ThemeFeatureDescription[] {
const midnight: ThemeFeatureDescription = FillThemeComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Midnight',
identifier: FeatureIdentifier.MidnightTheme,
permission_name: PermissionName.MidnightTheme,
description: 'Elegant utilitarianism.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/themes/midnight-with-mobile.jpg',
dock_icon: {
type: 'circle',
background_color: '#086DD6',
foreground_color: '#ffffff',
border_color: '#086DD6',
},
})
const futura: ThemeFeatureDescription = FillThemeComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Futura',
identifier: FeatureIdentifier.FuturaTheme,
permission_name: PermissionName.FuturaTheme,
description: 'Calm and relaxed. Take some time off.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/themes/futura-with-mobile.jpg',
dock_icon: {
type: 'circle',
background_color: '#fca429',
foreground_color: '#ffffff',
border_color: '#fca429',
},
})
const solarizedDark: ThemeFeatureDescription = FillThemeComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Solarized Dark',
identifier: FeatureIdentifier.SolarizedDarkTheme,
permission_name: PermissionName.SolarizedDarkTheme,
description: 'The perfect theme for any time.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/themes/solarized-dark.jpg',
dock_icon: {
type: 'circle',
background_color: '#2AA198',
foreground_color: '#ffffff',
border_color: '#2AA198',
},
})
const autobiography: ThemeFeatureDescription = FillThemeComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Autobiography',
identifier: FeatureIdentifier.AutobiographyTheme,
permission_name: PermissionName.AutobiographyTheme,
description: 'A theme for writers and readers.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/themes/autobiography.jpg',
dock_icon: {
type: 'circle',
background_color: '#9D7441',
foreground_color: '#ECE4DB',
border_color: '#9D7441',
},
})
const focus: ThemeFeatureDescription = FillThemeComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Focus',
identifier: FeatureIdentifier.FocusedTheme,
permission_name: PermissionName.FocusedTheme,
description: 'For when you need to go in.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/themes/focus-with-mobile.jpg',
dock_icon: {
type: 'circle',
background_color: '#a464c2',
foreground_color: '#ffffff',
border_color: '#a464c2',
},
})
const titanium: ThemeFeatureDescription = FillThemeComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Titanium',
identifier: FeatureIdentifier.TitaniumTheme,
permission_name: PermissionName.TitaniumTheme,
description: 'Light on the eyes, heavy on the spirit.',
thumbnail_url: 'https://s3.amazonaws.com/standard-notes/screenshots/models/themes/titanium-with-mobile.jpg',
dock_icon: {
type: 'circle',
background_color: '#6e2b9e',
foreground_color: '#ffffff',
border_color: '#6e2b9e',
},
})
const dynamic: ThemeFeatureDescription = FillThemeComponentDefaults({
availableInSubscriptions: [SubscriptionName.PlusPlan, SubscriptionName.ProPlan],
name: 'Dynamic Panels',
identifier: FeatureIdentifier.DynamicTheme,
permission_name: PermissionName.ThemeDynamic,
layerable: true,
no_mobile: true,
description: 'A smart theme that minimizes the tags and notes panels when they are not in use.',
})
return [midnight, futura, solarizedDark, autobiography, focus, titanium, dynamic]
}

View File

@@ -0,0 +1,34 @@
import { ComponentAction } from '../../Component/ComponentAction'
import { ContentType } from '@standardnotes/common'
import { EditorFeatureDescription } from '../../Feature/FeatureDescription'
import { ComponentArea } from '../../Component/ComponentArea'
export type RequiredEditorFields = Pick<EditorFeatureDescription, 'availableInSubscriptions'>
export function FillEditorComponentDefaults(
component: Partial<EditorFeatureDescription> & RequiredEditorFields,
): EditorFeatureDescription {
if (!component.index_path) {
component.index_path = 'dist/index.html'
}
if (!component.component_permissions) {
component.component_permissions = [
{
name: ComponentAction.StreamContextItem,
content_types: [ContentType.Note],
},
]
}
component.content_type = ContentType.Component
if (!component.area) {
component.area = ComponentArea.Editor
}
if (component.interchangeable == undefined) {
component.interchangeable = true
}
return component as EditorFeatureDescription
}

View File

@@ -0,0 +1,21 @@
import { ContentType } from '@standardnotes/common'
import { ThemeFeatureDescription } from '../../Feature/FeatureDescription'
import { ComponentArea } from '../../Component/ComponentArea'
type RequiredThemeFields = Pick<ThemeFeatureDescription, 'availableInSubscriptions'>
export function FillThemeComponentDefaults(
theme: Partial<ThemeFeatureDescription> & RequiredThemeFields,
): ThemeFeatureDescription {
if (!theme.index_path) {
theme.index_path = 'dist/dist.css'
}
theme.content_type = ContentType.Theme
if (!theme.area) {
theme.area = ComponentArea.Themes
}
return theme as ThemeFeatureDescription
}

View File

@@ -0,0 +1,8 @@
import { Uuid } from '@standardnotes/common'
import { PermissionName } from './PermissionName'
export type Permission = {
uuid: Uuid
name: PermissionName
}

View File

@@ -0,0 +1,42 @@
export enum PermissionName {
AccountSwitcher = 'app:account-switcher',
AdvancedChecklist = 'editor:advanced-checklist',
AutobiographyTheme = 'theme:autobiography',
BoldEditor = 'editor:bold',
CloudLink = 'component:cloud-link',
CodeEditor = 'editor:code-editor',
ComponentFilesafe = 'component:filesafe',
ComponentFolders = 'component:folders',
DailyDropboxBackup = 'server:daily-dropbox-backup',
DailyEmailBackup = 'server:daily-email-backup',
DailyGDriveBackup = 'server:daily-gdrive-backup',
DailyOneDriveBackup = 'server:daily-onedrive-backup',
FilesBeta = 'app:files-beta',
Files = 'app:files',
FilesMaximumStorageTier = 'server:files-max-storage-tier',
FilesLowStorageTier = 'server:files-low-storage-tier',
FocusedTheme = 'theme:focused',
FocusMode = 'app:focus-mode',
FuturaTheme = 'theme:futura',
ListedCustomDomain = 'listed:custom-domain',
MarkdownBasicEditor = 'editor:markdown-basic',
MarkdownMathEditor = 'editor:markdown-math',
MarkdownMinimistEditor = 'editor:markdown-minimist',
MarkdownProEditor = 'editor:markdown-pro',
MarkdownVisualEditor = 'editor:markdown-visual',
MidnightTheme = 'theme:midnight',
NoteHistory30Days = 'server:note-history-30-days',
NoteHistory365Days = 'server:note-history-365-days',
NoteHistoryUnlimited = 'server:note-history-unlimited',
PlusEditor = 'editor:plus',
SheetsEditor = 'editor:sheets',
SignInAlerts = 'server:sign-in-alerts',
SmartFilters = 'app:smart-filters',
SolarizedDarkTheme = 'theme:solarized-dark',
TagNesting = 'app:tag-nesting',
TaskEditor = 'editor:task-editor',
ThemeDynamic = 'theme:dynamic',
TitaniumTheme = 'theme:titanium',
TokenVaultEditor = 'editor:token-vault',
TwoFactorAuth = 'server:two-factor-auth',
}

View File

@@ -0,0 +1,13 @@
export * from './Feature/FeatureDescription'
export * from './Feature/FeatureIdentifier'
export * from './Feature/Features'
export * from './Permission/Permission'
export * from './Permission/PermissionName'
export * from './Component/ComponentAction'
export * from './Component/ComponentArea'
export * from './Component/ComponentFlag'
export * from './Component/ComponentPermission'
export * from './Component/NoteType'
export * from './Component/ThemeDockIcon'

View File

@@ -0,0 +1 @@
export * from './Domain'

View File

@@ -0,0 +1,13 @@
{
"extends": "../../node_modules/@standardnotes/config/src/tsconfig.json",
"compilerOptions": {
"skipLibCheck": true,
"rootDir": "./src",
"outDir": "./dist",
},
"include": [
"src/**/*"
],
"references": [],
"exclude": ["**/*.spec.ts", "dist", "node_modules"]
}

656
yarn.lock
View File

@@ -287,7 +287,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/core@npm:^7.1.0, @babel/core@npm:^7.1.6, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.16, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.10, @babel/core@npm:^7.13.13, @babel/core@npm:^7.13.14, @babel/core@npm:^7.13.8, @babel/core@npm:^7.14.0, @babel/core@npm:^7.14.6, @babel/core@npm:^7.15.5, @babel/core@npm:^7.16.0, @babel/core@npm:^7.17.10, @babel/core@npm:^7.17.9, @babel/core@npm:^7.18.2, @babel/core@npm:^7.18.5, @babel/core@npm:^7.7.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.7, @babel/core@npm:^7.8.0":
"@babel/core@npm:^7.1.0, @babel/core@npm:^7.1.6, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.16, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.10, @babel/core@npm:^7.13.13, @babel/core@npm:^7.13.14, @babel/core@npm:^7.13.8, @babel/core@npm:^7.14.0, @babel/core@npm:^7.14.6, @babel/core@npm:^7.15.5, @babel/core@npm:^7.16.0, @babel/core@npm:^7.17.10, @babel/core@npm:^7.17.9, @babel/core@npm:^7.18.2, @babel/core@npm:^7.18.5, @babel/core@npm:^7.7.0, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.7, @babel/core@npm:^7.8.0":
version: 7.18.6
resolution: "@babel/core@npm:7.18.6"
dependencies:
@@ -3653,6 +3653,48 @@ __metadata:
languageName: node
linkType: hard
"@jest/core@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/core@npm:28.1.2"
dependencies:
"@jest/console": ^28.1.1
"@jest/reporters": ^28.1.2
"@jest/test-result": ^28.1.1
"@jest/transform": ^28.1.2
"@jest/types": ^28.1.1
"@types/node": "*"
ansi-escapes: ^4.2.1
chalk: ^4.0.0
ci-info: ^3.2.0
exit: ^0.1.2
graceful-fs: ^4.2.9
jest-changed-files: ^28.0.2
jest-config: ^28.1.2
jest-haste-map: ^28.1.1
jest-message-util: ^28.1.1
jest-regex-util: ^28.0.2
jest-resolve: ^28.1.1
jest-resolve-dependencies: ^28.1.2
jest-runner: ^28.1.2
jest-runtime: ^28.1.2
jest-snapshot: ^28.1.2
jest-util: ^28.1.1
jest-validate: ^28.1.1
jest-watcher: ^28.1.1
micromatch: ^4.0.4
pretty-format: ^28.1.1
rimraf: ^3.0.0
slash: ^3.0.0
strip-ansi: ^6.0.0
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
checksum: dd67cc911cf770550b3bdde39ec78d2cc3814d66008e3b0184c6a2b66380bb425fed07e81d6488eaf459257f38207822f04fcf7f05626a366b8b36542dce7137
languageName: node
linkType: hard
"@jest/create-cache-key-function@npm:^27.0.1":
version: 27.5.1
resolution: "@jest/create-cache-key-function@npm:27.5.1"
@@ -3674,6 +3716,37 @@ __metadata:
languageName: node
linkType: hard
"@jest/environment@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/environment@npm:28.1.2"
dependencies:
"@jest/fake-timers": ^28.1.2
"@jest/types": ^28.1.1
"@types/node": "*"
jest-mock: ^28.1.1
checksum: 5bffc464e9d2fdf7561305bc02844faebfed2ffed54c015561a8d39a3ea129d375aa408b724546fef6246881100770ff43637c2da667db80f0b26235b6a40c98
languageName: node
linkType: hard
"@jest/expect-utils@npm:^28.1.1":
version: 28.1.1
resolution: "@jest/expect-utils@npm:28.1.1"
dependencies:
jest-get-type: ^28.0.2
checksum: 46a2ad754b10bc649c36a5914f887bea33a43bb868946508892a73f1da99065b17167dc3c0e3e299c7cea82c6be1e9d816986e120d7ae3e1be511f64cfc1d3d3
languageName: node
linkType: hard
"@jest/expect@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/expect@npm:28.1.2"
dependencies:
expect: ^28.1.1
jest-snapshot: ^28.1.2
checksum: ee470cdd3a6a64a251ba66629cf95c508cc8b2b9ce1928459baacffa0bf297f5ad715c2352e73f24e7d3880e3699b03923e037919b712901e6db259293ad73a6
languageName: node
linkType: hard
"@jest/fake-timers@npm:^27.5.1":
version: 27.5.1
resolution: "@jest/fake-timers@npm:27.5.1"
@@ -3688,6 +3761,20 @@ __metadata:
languageName: node
linkType: hard
"@jest/fake-timers@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/fake-timers@npm:28.1.2"
dependencies:
"@jest/types": ^28.1.1
"@sinonjs/fake-timers": ^9.1.2
"@types/node": "*"
jest-message-util: ^28.1.1
jest-mock: ^28.1.1
jest-util: ^28.1.1
checksum: d6e6b1a12fe84335d9cc6087b4e590c3b9b855edaff11742d2167827f415459704ab1eae9b3543603898b6a0789b2cc7863f12469f8479257315effb844fe6bd
languageName: node
linkType: hard
"@jest/globals@npm:^27.5.1":
version: 27.5.1
resolution: "@jest/globals@npm:27.5.1"
@@ -3699,6 +3786,17 @@ __metadata:
languageName: node
linkType: hard
"@jest/globals@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/globals@npm:28.1.2"
dependencies:
"@jest/environment": ^28.1.2
"@jest/expect": ^28.1.2
"@jest/types": ^28.1.1
checksum: f07b7d0a2d08bd4b1e5f0862d835b522578495301ad50109d08c13d367b18a712c2406b62fe0c0a6513998d2caeb3eb650da47d14b22fde7850983537e309045
languageName: node
linkType: hard
"@jest/reporters@npm:^27.5.1":
version: 27.5.1
resolution: "@jest/reporters@npm:27.5.1"
@@ -3737,6 +3835,44 @@ __metadata:
languageName: node
linkType: hard
"@jest/reporters@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/reporters@npm:28.1.2"
dependencies:
"@bcoe/v8-coverage": ^0.2.3
"@jest/console": ^28.1.1
"@jest/test-result": ^28.1.1
"@jest/transform": ^28.1.2
"@jest/types": ^28.1.1
"@jridgewell/trace-mapping": ^0.3.13
"@types/node": "*"
chalk: ^4.0.0
collect-v8-coverage: ^1.0.0
exit: ^0.1.2
glob: ^7.1.3
graceful-fs: ^4.2.9
istanbul-lib-coverage: ^3.0.0
istanbul-lib-instrument: ^5.1.0
istanbul-lib-report: ^3.0.0
istanbul-lib-source-maps: ^4.0.0
istanbul-reports: ^3.1.3
jest-message-util: ^28.1.1
jest-util: ^28.1.1
jest-worker: ^28.1.1
slash: ^3.0.0
string-length: ^4.0.1
strip-ansi: ^6.0.0
terminal-link: ^2.0.0
v8-to-istanbul: ^9.0.1
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
checksum: 26aa66e8eae2599f9bf6c5f594fce7d3a42f821678a10aa7014022cd4dd13d1aea7feba31abd1f01599ae416c7ab828232a74a97d8c352b8b58c699888955bdd
languageName: node
linkType: hard
"@jest/schemas@npm:^28.0.2":
version: 28.0.2
resolution: "@jest/schemas@npm:28.0.2"
@@ -3757,6 +3893,17 @@ __metadata:
languageName: node
linkType: hard
"@jest/source-map@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/source-map@npm:28.1.2"
dependencies:
"@jridgewell/trace-mapping": ^0.3.13
callsites: ^3.0.0
graceful-fs: ^4.2.9
checksum: b82a5c2e93d35d86779c61a02ccb967d1b5cd2e9dd67d26d8add44958637cbbb99daeeb8129c7653389cb440dc2a2f5ae4d2183dc453c67669ff98938b775a3a
languageName: node
linkType: hard
"@jest/test-result@npm:^27.5.1":
version: 27.5.1
resolution: "@jest/test-result@npm:27.5.1"
@@ -3793,6 +3940,18 @@ __metadata:
languageName: node
linkType: hard
"@jest/test-sequencer@npm:^28.1.1":
version: 28.1.1
resolution: "@jest/test-sequencer@npm:28.1.1"
dependencies:
"@jest/test-result": ^28.1.1
graceful-fs: ^4.2.9
jest-haste-map: ^28.1.1
slash: ^3.0.0
checksum: acfa3b7ff18478aaa9ac54d6013f951e1be2133a09ea5ca6b248eb80340e5cac71420f1357ef87d2780cb2adb2411fbacbbffcb6ac7f93a0b24cc76be5a42afa
languageName: node
linkType: hard
"@jest/transform@npm:^27.5.1":
version: 27.5.1
resolution: "@jest/transform@npm:27.5.1"
@@ -3816,6 +3975,29 @@ __metadata:
languageName: node
linkType: hard
"@jest/transform@npm:^28.1.2":
version: 28.1.2
resolution: "@jest/transform@npm:28.1.2"
dependencies:
"@babel/core": ^7.11.6
"@jest/types": ^28.1.1
"@jridgewell/trace-mapping": ^0.3.13
babel-plugin-istanbul: ^6.1.1
chalk: ^4.0.0
convert-source-map: ^1.4.0
fast-json-stable-stringify: ^2.0.0
graceful-fs: ^4.2.9
jest-haste-map: ^28.1.1
jest-regex-util: ^28.0.2
jest-util: ^28.1.1
micromatch: ^4.0.4
pirates: ^4.0.4
slash: ^3.0.0
write-file-atomic: ^4.0.1
checksum: cd8d1bdf1a5831cdf91934dd0af1d29d4d2bcad92feb9bf7555fc0e1152cb01a9206410380af0f6221a623ffc9b6f6e6dded429d01d87b85b0777cf9d4425127
languageName: node
linkType: hard
"@jest/types@npm:^26.6.2":
version: 26.6.2
resolution: "@jest/types@npm:26.6.2"
@@ -3918,7 +4100,7 @@ __metadata:
languageName: node
linkType: hard
"@jridgewell/trace-mapping@npm:^0.3.7, @jridgewell/trace-mapping@npm:^0.3.8, @jridgewell/trace-mapping@npm:^0.3.9":
"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.7, @jridgewell/trace-mapping@npm:^0.3.8, @jridgewell/trace-mapping@npm:^0.3.9":
version: 0.3.14
resolution: "@jridgewell/trace-mapping@npm:0.3.14"
dependencies:
@@ -5924,6 +6106,15 @@ __metadata:
languageName: node
linkType: hard
"@sinonjs/fake-timers@npm:^9.1.2":
version: 9.1.2
resolution: "@sinonjs/fake-timers@npm:9.1.2"
dependencies:
"@sinonjs/commons": ^1.7.0
checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6
languageName: node
linkType: hard
"@slorber/static-site-generator-webpack-plugin@npm:^4.0.4":
version: 4.0.7
resolution: "@slorber/static-site-generator-webpack-plugin@npm:4.0.7"
@@ -6176,7 +6367,7 @@ __metadata:
dependencies:
"@standardnotes/deterministic-zip": ^1.2.0
"@standardnotes/eslint-config-extensions": ^1.0.4
"@standardnotes/features": ^1.45.1
"@standardnotes/features": "workspace:*"
"@standardnotes/styles": "workspace:*"
copy-webpack-plugin: ^11.0.0
mini-css-extract-plugin: ^2.6.0
@@ -6390,25 +6581,20 @@ __metadata:
languageName: node
linkType: hard
"@standardnotes/features@npm:^1.45.1, @standardnotes/features@npm:^1.46.0":
version: 1.46.0
resolution: "@standardnotes/features@npm:1.46.0"
"@standardnotes/features@^1.46.0, @standardnotes/features@^1.47.0, @standardnotes/features@workspace:*, @standardnotes/features@workspace:packages/features":
version: 0.0.0-use.local
resolution: "@standardnotes/features@workspace:packages/features"
dependencies:
"@standardnotes/auth": ^3.19.4
"@standardnotes/common": ^1.23.1
checksum: 0653b9b425e86cf0f2e6a80fb68316c841aaf7feb23ca39131e3d09546735d199879532ef9e89f424000b916dd5ac2d7e6ea0e60ac755712ef37c3fecdf48d94
languageName: node
linkType: hard
"@standardnotes/features@npm:^1.47.0":
version: 1.47.0
resolution: "@standardnotes/features@npm:1.47.0"
dependencies:
"@standardnotes/auth": ^3.19.4
"@standardnotes/common": ^1.23.1
checksum: bd0ddd6017867e7c905dfdbac4875889713b3f10e79a2e702cc76c3f5db4c9a5ac1a2418e54358aaee4f4404e4d62b208faa755c61bc2eb3e5a2a17777dfbdd0
languageName: node
linkType: hard
"@types/jest": ^28.1.4
"@typescript-eslint/eslint-plugin": ^5.30.0
eslint-plugin-prettier: ^4.2.1
jest: ^28.1.2
reflect-metadata: ^0.1.13
ts-jest: ^28.0.5
languageName: unknown
linkType: soft
"@standardnotes/filepicker@npm:1.16.23, @standardnotes/filepicker@npm:^1.16.23":
version: 1.16.23
@@ -7976,7 +8162,7 @@ __metadata:
languageName: node
linkType: hard
"@types/graceful-fs@npm:^4.1.2":
"@types/graceful-fs@npm:^4.1.2, @types/graceful-fs@npm:^4.1.3":
version: 4.1.5
resolution: "@types/graceful-fs@npm:4.1.5"
dependencies:
@@ -8096,6 +8282,16 @@ __metadata:
languageName: node
linkType: hard
"@types/jest@npm:^28.1.4":
version: 28.1.4
resolution: "@types/jest@npm:28.1.4"
dependencies:
jest-matcher-utils: ^28.0.0
pretty-format: ^28.0.0
checksum: 97e22c600397bb4f30e39b595f8285ae92e4eb29a1ef6d1689749e4a4da683d88ecfe717b64492f6adc4c17c1c989520c3546f938c84a7d435c6ac3acf1a2bdc
languageName: node
linkType: hard
"@types/js-base64@npm:^3.3.1":
version: 3.3.1
resolution: "@types/js-base64@npm:3.3.1"
@@ -10905,6 +11101,23 @@ __metadata:
languageName: node
linkType: hard
"babel-jest@npm:^28.1.2":
version: 28.1.2
resolution: "babel-jest@npm:28.1.2"
dependencies:
"@jest/transform": ^28.1.2
"@types/babel__core": ^7.1.14
babel-plugin-istanbul: ^6.1.1
babel-preset-jest: ^28.1.1
chalk: ^4.0.0
graceful-fs: ^4.2.9
slash: ^3.0.0
peerDependencies:
"@babel/core": ^7.8.0
checksum: 1aa605ef4dfae3a557fbed8b9d1ba1c2678ba910d0ff3931fad8dc2a150a8ef220a456a86f3b441f5cd4f97f973c2f721fc74ea6a26432766c5ab501a967f8c8
languageName: node
linkType: hard
"babel-loader@npm:^8.0.6, babel-loader@npm:^8.1.0, babel-loader@npm:^8.2.2, babel-loader@npm:^8.2.3, babel-loader@npm:^8.2.5":
version: 8.2.5
resolution: "babel-loader@npm:8.2.5"
@@ -10993,6 +11206,18 @@ __metadata:
languageName: node
linkType: hard
"babel-plugin-jest-hoist@npm:^28.1.1":
version: 28.1.1
resolution: "babel-plugin-jest-hoist@npm:28.1.1"
dependencies:
"@babel/template": ^7.3.3
"@babel/types": ^7.3.3
"@types/babel__core": ^7.1.14
"@types/babel__traverse": ^7.0.6
checksum: 5fb9ad012e4613e7d321b61a875371dd10e171ef3df2e9c87be25fda62c3c7ad759821e40a9da18f611054727309c38f10e3502583f697312cb9cd1e92616756
languageName: node
linkType: hard
"babel-plugin-macros@npm:^2.6.1":
version: 2.8.0
resolution: "babel-plugin-macros@npm:2.8.0"
@@ -11187,6 +11412,18 @@ __metadata:
languageName: node
linkType: hard
"babel-preset-jest@npm:^28.1.1":
version: 28.1.1
resolution: "babel-preset-jest@npm:28.1.1"
dependencies:
babel-plugin-jest-hoist: ^28.1.1
babel-preset-current-node-syntax: ^1.0.0
peerDependencies:
"@babel/core": ^7.0.0
checksum: c581a81967aa30eba71a5a5a28eca2cc082901f3e6823c17e5b4ef7ba10f1347494a8e77d785b09ba7e86d3f902f2e13f5b75854d2af7bf9b489924629a87bad
languageName: node
linkType: hard
"babel-preset-react-app@npm:^10.0.1":
version: 10.0.1
resolution: "babel-preset-react-app@npm:10.0.1"
@@ -17831,6 +18068,19 @@ __metadata:
languageName: node
linkType: hard
"expect@npm:^28.1.1":
version: 28.1.1
resolution: "expect@npm:28.1.1"
dependencies:
"@jest/expect-utils": ^28.1.1
jest-get-type: ^28.0.2
jest-matcher-utils: ^28.1.1
jest-message-util: ^28.1.1
jest-util: ^28.1.1
checksum: 6e557b681f4cfb0bf61efad50c5787cc6eb4596a3c299be69adc83fcad0265b5f329b997c2bb7ec92290e609681485616e51e16301a7f0ba3c57139b337c9351
languageName: node
linkType: hard
"express@npm:^4.17.1, express@npm:^4.17.3":
version: 4.18.1
resolution: "express@npm:4.18.1"
@@ -22225,6 +22475,16 @@ __metadata:
languageName: node
linkType: hard
"jest-changed-files@npm:^28.0.2":
version: 28.0.2
resolution: "jest-changed-files@npm:28.0.2"
dependencies:
execa: ^5.0.0
throat: ^6.0.1
checksum: 389d4de4b26de3d2c6e23783ef4e23f827a9a79cfebd2db7c6ff74727198814469ee1e1a89f0e6d28a94e3c632ec45b044c2400a0793b8591e18d07b4b421784
languageName: node
linkType: hard
"jest-circus@npm:^27.5.1":
version: 27.5.1
resolution: "jest-circus@npm:27.5.1"
@@ -22252,6 +22512,33 @@ __metadata:
languageName: node
linkType: hard
"jest-circus@npm:^28.1.2":
version: 28.1.2
resolution: "jest-circus@npm:28.1.2"
dependencies:
"@jest/environment": ^28.1.2
"@jest/expect": ^28.1.2
"@jest/test-result": ^28.1.1
"@jest/types": ^28.1.1
"@types/node": "*"
chalk: ^4.0.0
co: ^4.6.0
dedent: ^0.7.0
is-generator-fn: ^2.0.0
jest-each: ^28.1.1
jest-matcher-utils: ^28.1.1
jest-message-util: ^28.1.1
jest-runtime: ^28.1.2
jest-snapshot: ^28.1.2
jest-util: ^28.1.1
pretty-format: ^28.1.1
slash: ^3.0.0
stack-utils: ^2.0.3
throat: ^6.0.1
checksum: c8f2e024e438f4ca9a6fb8c4f2dfbf843761fad63e82f603a8b167ead5ea3d2d1b99b695242a12017a32c17f8cb2a338e2eb8cdf37d5d71478fcf1650fd9c391
languageName: node
linkType: hard
"jest-cli@npm:^27.5.1":
version: 27.5.1
resolution: "jest-cli@npm:27.5.1"
@@ -22279,6 +22566,33 @@ __metadata:
languageName: node
linkType: hard
"jest-cli@npm:^28.1.2":
version: 28.1.2
resolution: "jest-cli@npm:28.1.2"
dependencies:
"@jest/core": ^28.1.2
"@jest/test-result": ^28.1.1
"@jest/types": ^28.1.1
chalk: ^4.0.0
exit: ^0.1.2
graceful-fs: ^4.2.9
import-local: ^3.0.2
jest-config: ^28.1.2
jest-util: ^28.1.1
jest-validate: ^28.1.1
prompts: ^2.0.1
yargs: ^17.3.1
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
bin:
jest: bin/jest.js
checksum: 527873c25755f5a8fc630d61bf856d6f933aace9ff9b35fcc47ac954e5f957ae621ec499bf571b8da51d7fd3760b220f9bf02ccf1710c9821430173e34073c41
languageName: node
linkType: hard
"jest-config@npm:^27.5.1":
version: 27.5.1
resolution: "jest-config@npm:27.5.1"
@@ -22316,6 +22630,44 @@ __metadata:
languageName: node
linkType: hard
"jest-config@npm:^28.1.2":
version: 28.1.2
resolution: "jest-config@npm:28.1.2"
dependencies:
"@babel/core": ^7.11.6
"@jest/test-sequencer": ^28.1.1
"@jest/types": ^28.1.1
babel-jest: ^28.1.2
chalk: ^4.0.0
ci-info: ^3.2.0
deepmerge: ^4.2.2
glob: ^7.1.3
graceful-fs: ^4.2.9
jest-circus: ^28.1.2
jest-environment-node: ^28.1.2
jest-get-type: ^28.0.2
jest-regex-util: ^28.0.2
jest-resolve: ^28.1.1
jest-runner: ^28.1.2
jest-util: ^28.1.1
jest-validate: ^28.1.1
micromatch: ^4.0.4
parse-json: ^5.2.0
pretty-format: ^28.1.1
slash: ^3.0.0
strip-json-comments: ^3.1.1
peerDependencies:
"@types/node": "*"
ts-node: ">=9.0.0"
peerDependenciesMeta:
"@types/node":
optional: true
ts-node:
optional: true
checksum: ddc4de7a286d087a0f88813171498a85d64eb6b22aa8915ab6860661e0b445d1d5773d61b928ff9c3f5c47b20576838dc4565d20f4d77c94ba886421d61544d4
languageName: node
linkType: hard
"jest-diff@npm:^27.5.1":
version: 27.5.1
resolution: "jest-diff@npm:27.5.1"
@@ -22349,6 +22701,15 @@ __metadata:
languageName: node
linkType: hard
"jest-docblock@npm:^28.1.1":
version: 28.1.1
resolution: "jest-docblock@npm:28.1.1"
dependencies:
detect-newline: ^3.0.0
checksum: 22fca68d988ecb2933bc65f448facdca85fc71b4bd0a188ea09a5ae1b0cc3a049a2a6ec7e7eaa2542c1d5cb5e5145e420a3df4fa280f5070f486c44da1d36151
languageName: node
linkType: hard
"jest-each@npm:^27.5.1":
version: 27.5.1
resolution: "jest-each@npm:27.5.1"
@@ -22362,6 +22723,19 @@ __metadata:
languageName: node
linkType: hard
"jest-each@npm:^28.1.1":
version: 28.1.1
resolution: "jest-each@npm:28.1.1"
dependencies:
"@jest/types": ^28.1.1
chalk: ^4.0.0
jest-get-type: ^28.0.2
jest-util: ^28.1.1
pretty-format: ^28.1.1
checksum: 91965603f898d5e29150995333f5b193aa37f36b232fc9ffd1be546236e7e47f5df4eca1f25ee45eb549e0866f4769d6a8045591703454b505d18e9fe2b18572
languageName: node
linkType: hard
"jest-environment-jsdom@npm:^27.5.1":
version: 27.5.1
resolution: "jest-environment-jsdom@npm:27.5.1"
@@ -22391,6 +22765,20 @@ __metadata:
languageName: node
linkType: hard
"jest-environment-node@npm:^28.1.2":
version: 28.1.2
resolution: "jest-environment-node@npm:28.1.2"
dependencies:
"@jest/environment": ^28.1.2
"@jest/fake-timers": ^28.1.2
"@jest/types": ^28.1.1
"@types/node": "*"
jest-mock: ^28.1.1
jest-util: ^28.1.1
checksum: cee61a3e25cc032ce6a3320ce8829dae9295fa84ea2f220fddd496ba876807cdc88397dc5a6362e60e44b7e14a91d7b448ffb2031bda7955276f69c9e1bd93fc
languageName: node
linkType: hard
"jest-get-type@npm:^26.3.0":
version: 26.3.0
resolution: "jest-get-type@npm:26.3.0"
@@ -22461,6 +22849,29 @@ __metadata:
languageName: node
linkType: hard
"jest-haste-map@npm:^28.1.1":
version: 28.1.1
resolution: "jest-haste-map@npm:28.1.1"
dependencies:
"@jest/types": ^28.1.1
"@types/graceful-fs": ^4.1.3
"@types/node": "*"
anymatch: ^3.0.3
fb-watchman: ^2.0.0
fsevents: ^2.3.2
graceful-fs: ^4.2.9
jest-regex-util: ^28.0.2
jest-util: ^28.1.1
jest-worker: ^28.1.1
micromatch: ^4.0.4
walker: ^1.0.8
dependenciesMeta:
fsevents:
optional: true
checksum: db31a2a83906277d96b79017742c433c1573b322d061632a011fb1e184cf6f151f94134da09da7366e4477e8716f280efa676b4cc04a8544c13ce466a44102e8
languageName: node
linkType: hard
"jest-jasmine2@npm:^27.5.1":
version: 27.5.1
resolution: "jest-jasmine2@npm:27.5.1"
@@ -22496,6 +22907,16 @@ __metadata:
languageName: node
linkType: hard
"jest-leak-detector@npm:^28.1.1":
version: 28.1.1
resolution: "jest-leak-detector@npm:28.1.1"
dependencies:
jest-get-type: ^28.0.2
pretty-format: ^28.1.1
checksum: 379a15ad7bed4f6d11414cc0131a5a592ac9c0b12a5933c522b292209a325b12a852e2330144fb59c82420a89712e46f2c244a881722473e241ad1c487fc476d
languageName: node
linkType: hard
"jest-matcher-utils@npm:^27.0.0, jest-matcher-utils@npm:^27.5.1":
version: 27.5.1
resolution: "jest-matcher-utils@npm:27.5.1"
@@ -22508,7 +22929,7 @@ __metadata:
languageName: node
linkType: hard
"jest-matcher-utils@npm:^28.0.0":
"jest-matcher-utils@npm:^28.0.0, jest-matcher-utils@npm:^28.1.1":
version: 28.1.1
resolution: "jest-matcher-utils@npm:28.1.1"
dependencies:
@@ -22564,6 +22985,16 @@ __metadata:
languageName: node
linkType: hard
"jest-mock@npm:^28.1.1":
version: 28.1.1
resolution: "jest-mock@npm:28.1.1"
dependencies:
"@jest/types": ^28.1.1
"@types/node": "*"
checksum: 285716d062bd9403830d9f5c90dc414a17495a4e31b82e7789806dac5ea924364fe308a1a8a3151f1055b87cf811e09fab2e2699e53be9972a2657883dd48614
languageName: node
linkType: hard
"jest-pnp-resolver@npm:^1.2.2":
version: 1.2.2
resolution: "jest-pnp-resolver@npm:1.2.2"
@@ -22590,7 +23021,7 @@ __metadata:
languageName: node
linkType: hard
"jest-regex-util@npm:^28.0.0":
"jest-regex-util@npm:^28.0.0, jest-regex-util@npm:^28.0.2":
version: 28.0.2
resolution: "jest-regex-util@npm:28.0.2"
checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add
@@ -22608,6 +23039,16 @@ __metadata:
languageName: node
linkType: hard
"jest-resolve-dependencies@npm:^28.1.2":
version: 28.1.2
resolution: "jest-resolve-dependencies@npm:28.1.2"
dependencies:
jest-regex-util: ^28.0.2
jest-snapshot: ^28.1.2
checksum: 2f822678b5469019abab398d0e72eb804a68a9f9ab01b707dd16ebf6f294fe5d4345121e83ad63811c30fe77b7f9bb59003fb03a7215f5f140a2bd5dd193d193
languageName: node
linkType: hard
"jest-resolve@npm:^27.4.2, jest-resolve@npm:^27.5.1":
version: 27.5.1
resolution: "jest-resolve@npm:27.5.1"
@@ -22626,6 +23067,23 @@ __metadata:
languageName: node
linkType: hard
"jest-resolve@npm:^28.1.1":
version: 28.1.1
resolution: "jest-resolve@npm:28.1.1"
dependencies:
chalk: ^4.0.0
graceful-fs: ^4.2.9
jest-haste-map: ^28.1.1
jest-pnp-resolver: ^1.2.2
jest-util: ^28.1.1
jest-validate: ^28.1.1
resolve: ^1.20.0
resolve.exports: ^1.1.0
slash: ^3.0.0
checksum: cda5c472fe5b50b91696d90d5c3a72d0f5ff188ecad18816b4085fbac0bad53c0a9abff94c3bf41c7ced24256cf8e34f0b03f1c9e05464e8efcd0f03560d6699
languageName: node
linkType: hard
"jest-runner@npm:^27.5.1":
version: 27.5.1
resolution: "jest-runner@npm:27.5.1"
@@ -22655,6 +23113,35 @@ __metadata:
languageName: node
linkType: hard
"jest-runner@npm:^28.1.2":
version: 28.1.2
resolution: "jest-runner@npm:28.1.2"
dependencies:
"@jest/console": ^28.1.1
"@jest/environment": ^28.1.2
"@jest/test-result": ^28.1.1
"@jest/transform": ^28.1.2
"@jest/types": ^28.1.1
"@types/node": "*"
chalk: ^4.0.0
emittery: ^0.10.2
graceful-fs: ^4.2.9
jest-docblock: ^28.1.1
jest-environment-node: ^28.1.2
jest-haste-map: ^28.1.1
jest-leak-detector: ^28.1.1
jest-message-util: ^28.1.1
jest-resolve: ^28.1.1
jest-runtime: ^28.1.2
jest-util: ^28.1.1
jest-watcher: ^28.1.1
jest-worker: ^28.1.1
source-map-support: 0.5.13
throat: ^6.0.1
checksum: 51e46779e6c834269de22ba20528b4a1f1df2fe0785dfacb6e5188a552089cef625a49f480db7fa93ed8a11e49de197c9a204c390515cd2f7f4e24474a4f2c6b
languageName: node
linkType: hard
"jest-runtime@npm:^27.5.1":
version: 27.5.1
resolution: "jest-runtime@npm:27.5.1"
@@ -22685,6 +23172,36 @@ __metadata:
languageName: node
linkType: hard
"jest-runtime@npm:^28.1.2":
version: 28.1.2
resolution: "jest-runtime@npm:28.1.2"
dependencies:
"@jest/environment": ^28.1.2
"@jest/fake-timers": ^28.1.2
"@jest/globals": ^28.1.2
"@jest/source-map": ^28.1.2
"@jest/test-result": ^28.1.1
"@jest/transform": ^28.1.2
"@jest/types": ^28.1.1
chalk: ^4.0.0
cjs-module-lexer: ^1.0.0
collect-v8-coverage: ^1.0.0
execa: ^5.0.0
glob: ^7.1.3
graceful-fs: ^4.2.9
jest-haste-map: ^28.1.1
jest-message-util: ^28.1.1
jest-mock: ^28.1.1
jest-regex-util: ^28.0.2
jest-resolve: ^28.1.1
jest-snapshot: ^28.1.2
jest-util: ^28.1.1
slash: ^3.0.0
strip-bom: ^4.0.0
checksum: d9a2f45a7b21f239b12448e4fb82c0893e94fdd644fa9315a936251ffbe128d73e9daf3645bc1526a0f3850e79d271bd5b71aa7699a9990c0cd52e51ee13b2f2
languageName: node
linkType: hard
"jest-serializer@npm:^26.6.2":
version: 26.6.2
resolution: "jest-serializer@npm:26.6.2"
@@ -22735,6 +23252,37 @@ __metadata:
languageName: node
linkType: hard
"jest-snapshot@npm:^28.1.2":
version: 28.1.2
resolution: "jest-snapshot@npm:28.1.2"
dependencies:
"@babel/core": ^7.11.6
"@babel/generator": ^7.7.2
"@babel/plugin-syntax-typescript": ^7.7.2
"@babel/traverse": ^7.7.2
"@babel/types": ^7.3.3
"@jest/expect-utils": ^28.1.1
"@jest/transform": ^28.1.2
"@jest/types": ^28.1.1
"@types/babel__traverse": ^7.0.6
"@types/prettier": ^2.1.5
babel-preset-current-node-syntax: ^1.0.0
chalk: ^4.0.0
expect: ^28.1.1
graceful-fs: ^4.2.9
jest-diff: ^28.1.1
jest-get-type: ^28.0.2
jest-haste-map: ^28.1.1
jest-matcher-utils: ^28.1.1
jest-message-util: ^28.1.1
jest-util: ^28.1.1
natural-compare: ^1.4.0
pretty-format: ^28.1.1
semver: ^7.3.5
checksum: 5c33c8b05d387d4fa4516556dc6fdeca4d7c0a1d48bfb31d05d5bf182988713800a35b0f7d4d9e40e3646edbde095aba36bb1b64a8d9bac40e34f76e90ddb482
languageName: node
linkType: hard
"jest-util@npm:^26.6.2":
version: 26.6.2
resolution: "jest-util@npm:26.6.2"
@@ -22805,6 +23353,20 @@ __metadata:
languageName: node
linkType: hard
"jest-validate@npm:^28.1.1":
version: 28.1.1
resolution: "jest-validate@npm:28.1.1"
dependencies:
"@jest/types": ^28.1.1
camelcase: ^6.2.0
chalk: ^4.0.0
jest-get-type: ^28.0.2
leven: ^3.1.0
pretty-format: ^28.1.1
checksum: 7bb5427d9b5ef4efc218aaf1f2a4282ebcc66458a6c40aa9fd2914aab967d3157352fb37ea46c83c1bc640ccf997ca3edee4d7aa109dccc02a7c821bac192104
languageName: node
linkType: hard
"jest-watch-typeahead@npm:^1.0.0":
version: 1.1.0
resolution: "jest-watch-typeahead@npm:1.1.0"
@@ -22837,7 +23399,7 @@ __metadata:
languageName: node
linkType: hard
"jest-watcher@npm:^28.0.0":
"jest-watcher@npm:^28.0.0, jest-watcher@npm:^28.1.1":
version: 28.1.1
resolution: "jest-watcher@npm:28.1.1"
dependencies:
@@ -22875,7 +23437,7 @@ __metadata:
languageName: node
linkType: hard
"jest-worker@npm:^28.0.2":
"jest-worker@npm:^28.0.2, jest-worker@npm:^28.1.1":
version: 28.1.1
resolution: "jest-worker@npm:28.1.1"
dependencies:
@@ -22904,6 +23466,25 @@ __metadata:
languageName: node
linkType: hard
"jest@npm:^28.1.2":
version: 28.1.2
resolution: "jest@npm:28.1.2"
dependencies:
"@jest/core": ^28.1.2
"@jest/types": ^28.1.1
import-local: ^3.0.2
jest-cli: ^28.1.2
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
bin:
jest: bin/jest.js
checksum: 8ad37088c42cd5a6decb54c61dfe6a45131a50dfe4c805aef1228cae4ca91b0fc7dfe2991ea771d88118151f5f1697d113b6f45c9b0d88b2ece2aac229e77150
languageName: node
linkType: hard
"jetifier@npm:^1.6.2":
version: 1.6.8
resolution: "jetifier@npm:1.6.8"
@@ -34308,6 +34889,16 @@ __metadata:
languageName: node
linkType: hard
"source-map-support@npm:0.5.13":
version: 0.5.13
resolution: "source-map-support@npm:0.5.13"
dependencies:
buffer-from: ^1.0.0
source-map: ^0.6.0
checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97
languageName: node
linkType: hard
"source-map-support@npm:^0.4.15":
version: 0.4.18
resolution: "source-map-support@npm:0.4.18"
@@ -36166,7 +36757,7 @@ __metadata:
languageName: node
linkType: hard
"ts-jest@npm:^28.0.3":
"ts-jest@npm:^28.0.3, ts-jest@npm:^28.0.5":
version: 28.0.5
resolution: "ts-jest@npm:28.0.5"
dependencies:
@@ -37380,6 +37971,17 @@ __metadata:
languageName: node
linkType: hard
"v8-to-istanbul@npm:^9.0.1":
version: 9.0.1
resolution: "v8-to-istanbul@npm:9.0.1"
dependencies:
"@jridgewell/trace-mapping": ^0.3.12
"@types/istanbul-lib-coverage": ^2.0.1
convert-source-map: ^1.6.0
checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311
languageName: node
linkType: hard
"v8flags@npm:^2.1.1":
version: 2.1.1
resolution: "v8flags@npm:2.1.1"
@@ -37594,7 +38196,7 @@ __metadata:
languageName: node
linkType: hard
"walker@npm:^1.0.7, walker@npm:~1.0.5":
"walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5":
version: 1.0.8
resolution: "walker@npm:1.0.8"
dependencies:
@@ -38988,7 +39590,7 @@ __metadata:
languageName: node
linkType: hard
"yargs@npm:^17.0.0, yargs@npm:^17.0.1, yargs@npm:^17.2.1, yargs@npm:^17.5.1":
"yargs@npm:^17.0.0, yargs@npm:^17.0.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.5.1":
version: 17.5.1
resolution: "yargs@npm:17.5.1"
dependencies: