2014-10-20 13:03:43 +02:00
|
|
|
|
{
|
2016-11-10 15:52:49 +01:00
|
|
|
|
"name": "unleash-server",
|
2017-02-15 22:23:08 +01:00
|
|
|
|
"description": "Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.",
|
2024-02-01 09:40:04 +01:00
|
|
|
|
"version": "5.9.0+main",
|
2023-11-06 08:22:02 +01:00
|
|
|
|
"keywords": ["unleash", "feature toggle", "feature", "toggle"],
|
2016-11-10 15:52:49 +01:00
|
|
|
|
"files": [
|
2021-02-12 11:42:00 +01:00
|
|
|
|
"dist",
|
2022-08-26 09:25:31 +02:00
|
|
|
|
"docs",
|
2023-04-18 14:42:49 +02:00
|
|
|
|
"frontend/build",
|
2023-04-18 15:44:19 +02:00
|
|
|
|
"frontend/build/*",
|
2023-04-18 14:42:49 +02:00
|
|
|
|
"frontend/index.js",
|
|
|
|
|
"frontend/package.json"
|
2016-11-10 15:52:49 +01:00
|
|
|
|
],
|
2016-05-01 15:43:25 +02:00
|
|
|
|
"repository": {
|
|
|
|
|
"type": "git",
|
2016-11-13 15:31:10 +01:00
|
|
|
|
"url": "ssh://git@github.com:unleash/unleash.git"
|
2016-05-01 15:43:25 +02:00
|
|
|
|
},
|
|
|
|
|
"bugs": {
|
2016-11-13 15:31:10 +01:00
|
|
|
|
"url": "https://github.com/unleash/unleash/issues"
|
2016-05-01 15:43:25 +02:00
|
|
|
|
},
|
2021-08-13 13:51:29 +02:00
|
|
|
|
"types": "./dist/lib/server-impl.d.ts",
|
2016-05-01 15:43:25 +02:00
|
|
|
|
"engines": {
|
2023-10-23 11:29:50 +02:00
|
|
|
|
"node": ">=18 <21"
|
2016-05-01 15:43:25 +02:00
|
|
|
|
},
|
2016-08-22 15:12:05 +02:00
|
|
|
|
"license": "Apache-2.0",
|
2021-02-12 11:42:00 +01:00
|
|
|
|
"main": "./dist/lib/server-impl.js",
|
2016-05-01 15:43:25 +02:00
|
|
|
|
"scripts": {
|
2023-05-03 09:25:56 +02:00
|
|
|
|
"start": "TZ=UTC node ./dist/server.js",
|
2023-05-16 13:38:21 +02:00
|
|
|
|
"copy-templates": "copyfiles -u 1 src/mailtemplates/**/*.mustache dist/",
|
|
|
|
|
"build:backend": "tsc --pretty --strictNullChecks false",
|
2023-05-16 10:51:27 +02:00
|
|
|
|
"build:frontend": "yarn --cwd ./frontend run build",
|
2023-07-20 14:13:44 +02:00
|
|
|
|
"build:frontend:if-needed": "if [ ! -d ./frontend/build ]; then yarn install --cwd ./frontend --frozen-lockfile --ignore-scripts && yarn build:frontend; fi",
|
2023-05-16 13:38:21 +02:00
|
|
|
|
"build": "concurrently \"yarn:copy-templates\" \"yarn:build:frontend\" \"yarn:build:backend\"",
|
chore: simplify package scripts (#3736)
# Simplify package scripts
This PR's purpose is to raise a discussion surrounding our current
package scripts.
It includes some suggestions that aim to simplify the scripts and
hopefully bring a much more straightforward approach to developing and
contributing to Unleash.
Building (prod) should only happen **explicitly** and when needed.
## Before PR (current behavior)
- Clone the project;
- Open 2 terminals: One for `unleash` and another for
`unleash/frontend`;
- On `unleash`:
- Run `yarn` (which will also build, for some reason?);
- Run `yarn start:dev` to start backend in dev mode (`tsc-watch`);
- On `unleash/frontend`:
- Run `yarn` (which will also build, for some reason?);
- Run `yarn start` to start frontend in dev mode (`vite`);
So it seems to me like we build unnecessarily every time we install
dependencies. Neither dev scripts need to build the project, as backend
uses `tsc-watch` and frontend uses `vite`. I'm unsure why this is the
case, as building can take a very long time.
![image](https://github.com/Unleash/unleash/assets/14320932/5ecb7df1-e5b4-4d70-ba7e-97119f5d1116)
There's also some complexity in the way we need to split the terminal to
`cd` into `frontend` and treat it as a different project. The fact that
we have different script names is also confusing (`yarn start`, `yarn
start:dev`, etc).
## After PR
- Clone the project;
- Run `yarn` to install all dependencies;
- Run `yarn dev` to get started developing Unleash;
Running `yarn` should take care of everything needed to start
developing. This includes installing dependencies for frontend as well.
It should not build projects if we are not being explicit about it,
especially since we don't need to build them at this stage.
![image](https://github.com/Unleash/unleash/assets/14320932/614e42fc-3467-432f-91fc-624b1b35c7c1)
Running `yarn dev` should start the project in dev mode. This means
running both projects in `dev` mode, which for `backend` means running
`tsc-watch` and for `frontend` means running `vite`.
Here this PR attempts to provide a better DX by using
[concurrently](https://www.npmjs.com/package/concurrently) and
[wait-on](https://www.npmjs.com/package/wait-on) - This means both tasks
are ran simultaneously, stdout is labeled accordingly, and are stopped
together. It also means that `frontend` waits for `backend` to be
serving at `4242` before starting, since `frontend` starts pretty much
immediately with `vite` and `backend` takes a bit longer. Of course,
when the `backend` is hot-reloading you may still find some
`ECONNREFUSED`s on `frontend` stdout while it recompiles.
![image](https://github.com/Unleash/unleash/assets/14320932/8bde8ee2-3cad-4e3f-a0db-9eed60cfb04d)
No more splitting your terminal and treating `frontend` as a separate
project.
## Discussion points
Maybe there's a better alternative to `tsc-watch`? I briefly explored
some alternatives and while they had a much faster starting speed,
hot-reload was sometimes slower. IMO we should aspire to run
`src/server-dev.ts` directly and only compile when needed.
Running `dev:backend` still serves a version of the frontend (at 4242).
**Why? Can we remove that behavior?**
I can't imagine a scenario in dev where we wouldn't want to run the
latest version of the frontend with `vite`.
~~**Note:** This PR removes all other out-of-scope scripts to focus on
this revamp. If we decide to merge it, we should evaluate what other
existing scripts we still want to include. May be a good opportunity to
clean up unused ones and only include the ones we really use. This
includes scripts that our GH actions rely on.~~
**Update:** In an effort to minimize impact surface of this PR and make
it a bit more ready for merging:
- It updates some docs in
https://github.com/Unleash/unleash/pull/3736/commits/2a4ff805e87b65d9c1256effaa189ddcccba15fb
and
https://github.com/Unleash/unleash/pull/3736/commits/1bbc4882519b5a82e3116f0be255ad24a6f3ce53
to reflect our new simplified flow;
- It includes the old package scripts for now in
https://github.com/Unleash/unleash/pull/3736/commits/039bc04699ac880e491fd3ce01f9bcd6f97a94b9;
- It updates some of our GH actions to reflect the new scripts in
https://github.com/Unleash/unleash/pull/3736/commits/7782cb9b12e37ee844507e41ef2b7137eaf55666;
Given its current status I'll promote the PR to "ready for review".
I still think we should have a second look at our existing scripts and
GH actions to see what we really need and/or should adapt, but it should
be a team effort so we have a broader context. Maybe on a follow-up PR.
Does this require any changes to related projects (e.g. Enterprise)?
---------
Co-authored-by: Gastón Fournier <gaston@getunleash.io>
2023-05-12 12:23:22 +02:00
|
|
|
|
"dev:backend": "TZ=UTC NODE_ENV=development tsc-watch --strictNullChecks false --onSuccess \"node dist/server-dev.js\"",
|
|
|
|
|
"dev:frontend": "wait-on tcp:4242 && yarn --cwd ./frontend run dev",
|
|
|
|
|
"dev": "concurrently \"yarn:dev:backend\" \"yarn:dev:frontend\"",
|
2023-05-16 10:51:27 +02:00
|
|
|
|
"prepare": "node scripts/husky-install && yarn --cwd ./frontend install && if [ ! -d ./dist ]; then yarn build; fi",
|
2023-06-12 09:15:09 +02:00
|
|
|
|
"prepare:backend": "concurrently \"yarn:copy-templates\" \"yarn:build:backend\"",
|
2021-08-09 13:34:40 +02:00
|
|
|
|
"prestart:dev": "yarn run clean",
|
2023-05-03 09:25:56 +02:00
|
|
|
|
"start:dev": "TZ=UTC NODE_ENV=development tsc-watch --strictNullChecks false --onSuccess \"node dist/server-dev.js\"",
|
2021-02-12 11:42:00 +01:00
|
|
|
|
"db-migrate": "db-migrate --migrations-dir ./src/migrations",
|
2023-10-02 14:25:46 +02:00
|
|
|
|
"lint": "biome check .",
|
|
|
|
|
"lint:fix": "biome check . --apply",
|
2022-08-30 14:39:28 +02:00
|
|
|
|
"local:package": "del-cli --force build && mkdir build && cp -r dist docs CHANGELOG.md LICENSE README.md package.json build",
|
2021-08-09 13:34:40 +02:00
|
|
|
|
"prebuild:watch": "yarn run clean",
|
2023-03-10 10:27:56 +01:00
|
|
|
|
"build:watch": "tsc -w --strictNullChecks false",
|
2021-08-09 13:34:40 +02:00
|
|
|
|
"prebuild": "yarn run clean",
|
2021-05-28 11:10:24 +02:00
|
|
|
|
"test": "NODE_ENV=test PORT=4243 jest",
|
2022-09-26 12:30:10 +02:00
|
|
|
|
"test:unit": "NODE_ENV=test PORT=4243 jest --testPathIgnorePatterns=src/test/e2e --testPathIgnorePatterns=dist",
|
2016-11-10 15:52:49 +01:00
|
|
|
|
"test:docker": "./scripts/docker-postgres.sh",
|
2023-05-25 13:03:54 +02:00
|
|
|
|
"test:report": "NODE_ENV=test PORT=4243 jest --reporters=\"default\" --reporters=\"jest-junit\"",
|
2021-10-26 23:20:36 +02:00
|
|
|
|
"test:docker:cleanup": "docker rm -f unleash-postgres",
|
2021-01-26 10:10:37 +01:00
|
|
|
|
"test:watch": "yarn test --watch",
|
2022-05-20 11:14:41 +02:00
|
|
|
|
"test:coverage": "NODE_ENV=test PORT=4243 jest --coverage --testLocationInResults --outputFile=\"coverage/report.json\" --forceExit --testTimeout=10000",
|
2022-02-11 19:17:25 +01:00
|
|
|
|
"test:coverage:jest": "NODE_ENV=test PORT=4243 jest --silent --ci --json --coverage --testLocationInResults --outputFile=\"report.json\" --forceExit --testTimeout=10000",
|
2023-04-20 11:37:56 +02:00
|
|
|
|
"seed:setup": "ts-node --compilerOptions '{\"strictNullChecks\": false}' src/test/e2e/seed/segment.seed.ts",
|
2022-03-29 14:59:14 +02:00
|
|
|
|
"seed:serve": "UNLEASH_DATABASE_NAME=unleash_test UNLEASH_DATABASE_SCHEMA=seed yarn run start:dev",
|
2022-04-06 20:34:03 +02:00
|
|
|
|
"clean": "del-cli --force dist",
|
2022-10-18 21:24:12 +02:00
|
|
|
|
"preversion": "./scripts/check-release.sh",
|
2022-10-18 21:28:31 +02:00
|
|
|
|
"heroku-postbuild": "cd frontend && yarn && yarn build"
|
2016-11-10 15:52:49 +01:00
|
|
|
|
},
|
2023-05-25 13:03:54 +02:00
|
|
|
|
"jest-junit": {
|
|
|
|
|
"suiteName": "Unleash Unit Tests",
|
|
|
|
|
"outputDirectory": "./reports",
|
|
|
|
|
"outputName": "jest-junit.xml",
|
|
|
|
|
"uniqueOutputName": "false",
|
|
|
|
|
"classNameTemplate": "{classname}-{title}",
|
|
|
|
|
"titleTemplate": "{classname}-{title}",
|
|
|
|
|
"ancestorSeparator": " › ",
|
|
|
|
|
"usePathForSuiteName": "true"
|
|
|
|
|
},
|
2021-05-28 11:10:24 +02:00
|
|
|
|
"jest": {
|
2021-08-12 15:04:37 +02:00
|
|
|
|
"automock": false,
|
2021-10-26 19:50:13 +02:00
|
|
|
|
"maxWorkers": 4,
|
2022-06-01 15:02:01 +02:00
|
|
|
|
"testTimeout": 10000,
|
2022-09-01 21:22:15 +02:00
|
|
|
|
"globalSetup": "./scripts/jest-setup.js",
|
2021-05-28 11:10:24 +02:00
|
|
|
|
"transform": {
|
2023-11-06 08:22:02 +01:00
|
|
|
|
"^.+\\.tsx?$": ["@swc/jest"]
|
2021-05-28 11:10:24 +02:00
|
|
|
|
},
|
|
|
|
|
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
|
2023-11-06 08:22:02 +01:00
|
|
|
|
"testPathIgnorePatterns": ["/dist/", "/node_modules/", "/frontend/"],
|
|
|
|
|
"moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json"],
|
2021-05-28 11:10:24 +02:00
|
|
|
|
"coveragePathIgnorePatterns": [
|
|
|
|
|
"/node_modules/",
|
|
|
|
|
"/dist/",
|
|
|
|
|
"/src/migrations",
|
|
|
|
|
"/src/test"
|
|
|
|
|
]
|
2019-06-06 08:10:58 +02:00
|
|
|
|
},
|
2016-11-10 15:52:49 +01:00
|
|
|
|
"dependencies": {
|
2023-11-23 13:41:49 +01:00
|
|
|
|
"@slack/web-api": "^6.10.0",
|
2023-11-06 08:22:02 +01:00
|
|
|
|
"@wesleytodd/openapi": "^0.3.0",
|
2023-10-26 09:09:03 +02:00
|
|
|
|
"ajv": "^8.12.0",
|
2022-06-08 08:01:14 +02:00
|
|
|
|
"ajv-formats": "^2.1.1",
|
2022-08-20 07:29:46 +02:00
|
|
|
|
"async": "^3.2.4",
|
2022-01-06 20:43:57 +01:00
|
|
|
|
"bcryptjs": "^2.4.3",
|
2021-05-28 11:10:24 +02:00
|
|
|
|
"compression": "^1.7.4",
|
2022-07-28 10:34:19 +02:00
|
|
|
|
"connect-session-knex": "^3.0.0",
|
2023-10-26 09:09:03 +02:00
|
|
|
|
"cookie-parser": "^1.4.6",
|
2020-10-02 16:38:51 +02:00
|
|
|
|
"cookie-session": "^2.0.0-rc.1",
|
2021-04-16 15:29:23 +02:00
|
|
|
|
"cors": "^2.8.5",
|
2021-10-26 20:13:30 +02:00
|
|
|
|
"date-fns": "^2.25.0",
|
2023-09-14 16:05:15 +02:00
|
|
|
|
"db-migrate": "0.11.14",
|
2023-10-01 06:33:03 +02:00
|
|
|
|
"db-migrate-pg": "1.5.2",
|
2021-09-03 12:06:58 +02:00
|
|
|
|
"db-migrate-shared": "1.2.0",
|
2023-03-17 14:10:21 +01:00
|
|
|
|
"deep-object-diff": "^1.1.9",
|
2023-10-26 09:09:03 +02:00
|
|
|
|
"deepmerge": "^4.3.1",
|
2019-10-03 15:32:48 +02:00
|
|
|
|
"errorhandler": "^1.5.1",
|
2022-12-06 12:46:42 +01:00
|
|
|
|
"express": "^4.18.2",
|
2023-10-26 09:09:03 +02:00
|
|
|
|
"express-rate-limit": "^7.1.2",
|
|
|
|
|
"express-session": "^1.17.3",
|
2021-09-13 10:23:57 +02:00
|
|
|
|
"fast-json-patch": "^3.1.0",
|
2023-03-17 14:10:21 +01:00
|
|
|
|
"hash-sum": "^2.0.0",
|
2022-11-09 23:07:20 +01:00
|
|
|
|
"helmet": "^6.0.0",
|
2023-06-08 13:14:53 +02:00
|
|
|
|
"http-errors": "^2.0.0",
|
feat(#1873/playground): Return detailed information on feature toggle evaluation (#1839)
* Feat: return reasons why a feature evaluated to true or false
Note: this is very rough and just straight ripped from the nodejs
client. It will need a lot of work, but is a good place to start
* Feat: add suggested shape for new payload
* Chore: minor cleanup
* Wip: make server compile again
* Remove unused schema ref
* Export new schemas
* Chore: fix some tests to use sub property
* Fix: fix some tests
* Refactor: rename some variables, uncomment some stuff
* Add segments type to bootstrap options
* Add segments capability to offline feature evaluator
* Fix function calls after turning params into an option abject
* Feat: test strategy order, etc
* Feat: add test to check that all strats are returned correctly
* Feat: allow you to include strategy ids in clients
* Wip: hook up segments in the offline client.
Note: compared to regular clients, they still fail
* Feat: add segments validation
* Fix: fix test case invariant.
* Chore: revert to returning only `boolean` from strategies.
This _should_ make it work with custom strategies too 🤞
* Feat: make more properties of the returned feature required
* Wip: add some comments and unfinished tests for edge cases
* Feat: add `isEnabledInCurrentEnvironment` prop
* Feat: consider more strategy failure cases
* Feat: test that isenabledinenvironment matches expectations
* Feat: add unknown strategies
* Fix: fix property access typo
* Feat: add unknown strategy for fallback purposes
* Feat: test edge case: all unknown strategies
* Feat: add custom strategy to arbitrary
* Feat: test that features can be true, even if not enabled in env
* Chore: add some comments
* Wip: fix sdk tests
* Remove comments, improve test logging
* Feat: add descriptions and examples to playground feature schema
* Switch `examples` for `example`
* Update schemas with descriptions and examples
* Fix: update snapshot
* Fix: openapi example
* Fix: merge issues
* Fix: fix issue where feature evaluation state was wrong
* Chore: update openapi spec
* Fix: fix broken offline client tests
* Refactor: move schemas into separate files
* Refactor: remove "reason" for incomplete evaluation.
The only instances where evaluation is incomplete is when we don't
know what the strategy is.
* Refactor: move unleash node client into test and dev dependencies
* Wip: further removal of stuff
* Chore: remove a bunch of code that we don't use
* Chore: remove comment
* Chore: remove unused code
* Fix: fix some prettier errors
* Type parameters in strategies to avoid `any`
* Fix: remove commented out code
* Feat: make `id` required on playground strategies
* Chore: remove redundant type
* Fix: remove redundant if and fix fallback evaluation
* Refactor: reduce nesting and remove duplication
* Fix: remove unused helper function
* Refactor: type `parameters` as `unknown`
* Chore: remove redundant comment
* Refactor: move constraint code into a separate file
* Refactor: rename `unleash` -> `feature-evaluator`
* Rename class `Unleash` -> `FeatureEvaluator`
* Refactor: remove this.ready and sync logic from feature evaluator
* Refactor: remove unused code, rename config type
* Refactor: remove event emission from the Unleash client
* Remove unlistened-for events in feature evaluator
* Refactor: make offline client synchronous; remove code
* Fix: update openapi snapshot after adding required strategy ids
* Feat: change `strategies` format.
This commit changes the format of a playground feature's `strategies`
properties from a list of strategies to an object with properties
`result` and `data`. It looks a bit like this:
```ts
type Strategies = {
result: boolean | "unknown",
data: Strategy[]
}
```
The reason is that this allows us to avoid the breaking change that
was previously suggested in the PR:
`feature.isEnabled` used to be a straight boolean. Then, when we found
out we couldn't necessarily evaluate all strategies (custom strats are
hard!) we changed it to `boolean | 'unevaluated'`. However, this is
confusing on a few levels as the playground results are no longer the
same as the SDK would be, nor are they strictly boolean anymore.
This change reverts the `isEnabled` functionality to what it was
before (so it's always a mirror of what the SDK would show).
The equivalent of `feature.isEnabled === 'unevaluated'` now becomes
`feature.isEnabled && strategy.result === 'unknown'`.
* Fix: Fold long string descriptions over multiple lines.
* Fix: update snapshot after adding line breaks to descriptions
2022-08-04 15:41:52 +02:00
|
|
|
|
"ip": "^1.1.8",
|
2020-09-28 21:54:44 +02:00
|
|
|
|
"joi": "^17.3.0",
|
2023-09-15 08:55:59 +02:00
|
|
|
|
"js-sha256": "^0.10.0",
|
2021-09-28 20:53:39 +02:00
|
|
|
|
"js-yaml": "^4.1.0",
|
2024-01-15 04:35:46 +01:00
|
|
|
|
"json-schema-to-ts": "2.12.0",
|
2022-10-25 13:10:27 +02:00
|
|
|
|
"json2csv": "^5.0.7",
|
2023-10-26 09:09:03 +02:00
|
|
|
|
"knex": "^2.5.1",
|
Clean up old errors (#3633)
This PR attempts to improve the error handling introduced in #3607.
## About the changes
## **tl;dr:**
- Make `UnleashError` constructor protected
- Make all custom errors inherit from `UnleashError`.
- Add tests to ensure that all special error cases include their
relevant data
- Remove `PasswordMismatchError` and `BadRequestError`. These don't
exist.
- Add a few new error types: `ContentTypeError`, `NotImplementedError`,
`UnauthorizedError`
- Remove the `...rest` parameter from error constructor
- Add an unexported `GenericUnleashError` class
- Move OpenAPI conversion function to `BadDataError` clas
- Remove explicit `Error.captureStackTrace`. This is done automatically.
- Extract `getPropFromString` function and add tests
### **In a more verbose fashion**
The main thing is that all our internal errors now inherit
from`UnleashError`. This allows us to simplify the `UnleashError`
constructor and error handling in general while still giving us the
extra benefits we added to that class. However, it _does_ also mean that
I've had to update **all** existing error classes.
The constructor for `UnleashError` is now protected and all places that
called that constructor directly have been updated. Because the base
error isn't available anymore, I've added three new errors to cover use
cases that we didn't already have covered: `NotImplementedError`,
`UnauthorizedError`, `ContentTypeError`. This is to stay consistent in
how we report errors to the user.
There is also an internal class, `GenericUnleashError` that inherits
from the base error. This class is only used in conversions for cases
where we don't know what the error is. It is not exported.
In making all the errors inherit, I've also removed the `...rest`
parameter from the `UnleashError` constructor. We don't need this
anymore.
Following on from the fixes with missing properties in #3638, I have
added tests for all errors that contain extra data.
Some of the error names that were originally used when creating the list
don't exist in the backend. `BadRequestError` and
`PasswordMismatchError` have been removed.
The `BadDataError` class now contains the conversion code for OpenAPI
validation errors. In doing so, I extracted and tested the
`getPropFromString` function.
### Main files
Due to the nature of the changes, there's a lot of files to look at. So
to make it easier to know where to turn your attention:
The changes in `api-error.ts` contain the main changes: protected
constructor, removal of OpenAPI conversion (moved into `BadDataError`.
`api-error.test.ts` contains tests to make sure that errors work as
expected.
Aside from `get-prop-from-string.ts` and the tests, everything else is
just the required updates to go through with the changes.
## Discussion points
I've gone for inheritance of the Error type over composition. This is in
large part because throwing actual Error instances instead of just
objects is preferable (because they collect stack traces, for instance).
However, it's quite possible that we could solve the same thing in a
more elegant fashion using composition.
## For later / suggestions for further improvements
The `api-error` files still contain a lot of code. I think it might be
beneficial to break each Error into a separate folder that includes the
error, its tests, and its schema (if required). It would help decouple
it a bit.
We don't currently expose the schema anywhere, so it's not available in
the openapi spec. We should look at exposing it too.
Finally, it would be good to go through each individual error message
and update each one to be as helpful as possible.
2023-05-11 11:10:57 +02:00
|
|
|
|
"lodash.get": "^4.4.2",
|
2023-06-13 13:56:26 +02:00
|
|
|
|
"lodash.groupby": "^4.6.0",
|
2023-10-18 16:34:42 +02:00
|
|
|
|
"lodash.sortby": "^4.7.0",
|
2019-11-18 08:11:38 +01:00
|
|
|
|
"log4js": "^6.0.0",
|
2022-11-09 23:06:29 +01:00
|
|
|
|
"make-fetch-happen": "^11.0.0",
|
2021-01-19 10:42:45 +01:00
|
|
|
|
"memoizee": "^0.4.15",
|
2022-04-25 14:27:23 +02:00
|
|
|
|
"mime": "^3.0.0",
|
2022-06-01 12:10:49 +02:00
|
|
|
|
"multer": "^1.4.5-lts.1",
|
feat(#1873/playground): Return detailed information on feature toggle evaluation (#1839)
* Feat: return reasons why a feature evaluated to true or false
Note: this is very rough and just straight ripped from the nodejs
client. It will need a lot of work, but is a good place to start
* Feat: add suggested shape for new payload
* Chore: minor cleanup
* Wip: make server compile again
* Remove unused schema ref
* Export new schemas
* Chore: fix some tests to use sub property
* Fix: fix some tests
* Refactor: rename some variables, uncomment some stuff
* Add segments type to bootstrap options
* Add segments capability to offline feature evaluator
* Fix function calls after turning params into an option abject
* Feat: test strategy order, etc
* Feat: add test to check that all strats are returned correctly
* Feat: allow you to include strategy ids in clients
* Wip: hook up segments in the offline client.
Note: compared to regular clients, they still fail
* Feat: add segments validation
* Fix: fix test case invariant.
* Chore: revert to returning only `boolean` from strategies.
This _should_ make it work with custom strategies too 🤞
* Feat: make more properties of the returned feature required
* Wip: add some comments and unfinished tests for edge cases
* Feat: add `isEnabledInCurrentEnvironment` prop
* Feat: consider more strategy failure cases
* Feat: test that isenabledinenvironment matches expectations
* Feat: add unknown strategies
* Fix: fix property access typo
* Feat: add unknown strategy for fallback purposes
* Feat: test edge case: all unknown strategies
* Feat: add custom strategy to arbitrary
* Feat: test that features can be true, even if not enabled in env
* Chore: add some comments
* Wip: fix sdk tests
* Remove comments, improve test logging
* Feat: add descriptions and examples to playground feature schema
* Switch `examples` for `example`
* Update schemas with descriptions and examples
* Fix: update snapshot
* Fix: openapi example
* Fix: merge issues
* Fix: fix issue where feature evaluation state was wrong
* Chore: update openapi spec
* Fix: fix broken offline client tests
* Refactor: move schemas into separate files
* Refactor: remove "reason" for incomplete evaluation.
The only instances where evaluation is incomplete is when we don't
know what the strategy is.
* Refactor: move unleash node client into test and dev dependencies
* Wip: further removal of stuff
* Chore: remove a bunch of code that we don't use
* Chore: remove comment
* Chore: remove unused code
* Fix: fix some prettier errors
* Type parameters in strategies to avoid `any`
* Fix: remove commented out code
* Feat: make `id` required on playground strategies
* Chore: remove redundant type
* Fix: remove redundant if and fix fallback evaluation
* Refactor: reduce nesting and remove duplication
* Fix: remove unused helper function
* Refactor: type `parameters` as `unknown`
* Chore: remove redundant comment
* Refactor: move constraint code into a separate file
* Refactor: rename `unleash` -> `feature-evaluator`
* Rename class `Unleash` -> `FeatureEvaluator`
* Refactor: remove this.ready and sync logic from feature evaluator
* Refactor: remove unused code, rename config type
* Refactor: remove event emission from the Unleash client
* Remove unlistened-for events in feature evaluator
* Refactor: make offline client synchronous; remove code
* Fix: update openapi snapshot after adding required strategy ids
* Feat: change `strategies` format.
This commit changes the format of a playground feature's `strategies`
properties from a list of strategies to an object with properties
`result` and `data`. It looks a bit like this:
```ts
type Strategies = {
result: boolean | "unknown",
data: Strategy[]
}
```
The reason is that this allows us to avoid the breaking change that
was previously suggested in the PR:
`feature.isEnabled` used to be a straight boolean. Then, when we found
out we couldn't necessarily evaluate all strategies (custom strats are
hard!) we changed it to `boolean | 'unevaluated'`. However, this is
confusing on a few levels as the playground results are no longer the
same as the SDK would be, nor are they strictly boolean anymore.
This change reverts the `isEnabled` functionality to what it was
before (so it's always a mirror of what the SDK would show).
The equivalent of `feature.isEnabled === 'unevaluated'` now becomes
`feature.isEnabled && strategy.result === 'unknown'`.
* Fix: Fold long string descriptions over multiple lines.
* Fix: update snapshot after adding line breaks to descriptions
2022-08-04 15:41:52 +02:00
|
|
|
|
"murmurhash3js": "^3.0.1",
|
2021-01-19 10:42:45 +01:00
|
|
|
|
"mustache": "^4.1.0",
|
2021-04-09 11:16:06 +02:00
|
|
|
|
"nodemailer": "^6.5.0",
|
2022-06-08 10:22:45 +02:00
|
|
|
|
"openapi-types": "^12.0.0",
|
2021-04-09 13:46:53 +02:00
|
|
|
|
"owasp-password-strength-test": "^1.3.0",
|
2016-11-12 11:21:40 +01:00
|
|
|
|
"parse-database-url": "^0.3.0",
|
2022-02-21 12:46:28 +01:00
|
|
|
|
"pg": "^8.7.3",
|
2021-04-22 10:07:10 +02:00
|
|
|
|
"pg-connection-string": "^2.5.0",
|
2017-11-03 23:14:31 +01:00
|
|
|
|
"pkginfo": "^0.4.1",
|
2021-09-27 22:57:08 +02:00
|
|
|
|
"prom-client": "^14.0.0",
|
2016-12-01 17:43:08 +01:00
|
|
|
|
"response-time": "^2.3.2",
|
2023-04-03 14:17:44 +02:00
|
|
|
|
"sanitize-filename": "^1.6.3",
|
2023-10-26 09:09:03 +02:00
|
|
|
|
"semver": "^7.5.4",
|
2018-05-14 13:49:31 +02:00
|
|
|
|
"serve-favicon": "^2.5.0",
|
2021-06-17 20:33:34 +02:00
|
|
|
|
"stoppable": "^1.1.0",
|
2022-07-28 09:19:58 +02:00
|
|
|
|
"ts-toolbelt": "^9.6.0",
|
2022-01-20 15:00:16 +01:00
|
|
|
|
"type-is": "^1.6.18",
|
2024-02-07 10:01:05 +01:00
|
|
|
|
"unleash-client": "5.5.0-beta.0",
|
fix(deps): update dependency uuid to v9 (#2401)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [uuid](https://togithub.com/uuidjs/uuid) | [`^8.3.2` ->
`^9.0.0`](https://renovatebot.com/diffs/npm/uuid/8.3.2/9.0.0) |
[![age](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/compatibility-slim/8.3.2)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/uuid/9.0.0/confidence-slim/8.3.2)](https://docs.renovatebot.com/merge-confidence/)
|
|
[@types/uuid](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/uuid)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped)) |
[`8.3.4` ->
`9.0.0`](https://renovatebot.com/diffs/npm/@types%2fuuid/8.3.4/9.0.0) |
[![age](https://badges.renovateapi.com/packages/npm/@types%2fuuid/9.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/@types%2fuuid/9.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/@types%2fuuid/9.0.0/compatibility-slim/8.3.4)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/@types%2fuuid/9.0.0/confidence-slim/8.3.4)](https://docs.renovatebot.com/merge-confidence/)
|
---
### Release Notes
<details>
<summary>uuidjs/uuid</summary>
###
[`v9.0.0`](https://togithub.com/uuidjs/uuid/blob/HEAD/CHANGELOG.md#​900-httpsgithubcomuuidjsuuidcomparev832v900-2022-09-05)
[Compare
Source](https://togithub.com/uuidjs/uuid/compare/v8.3.2...v9.0.0)
##### ⚠ BREAKING CHANGES
- Drop Node.js 10.x support. This library always aims at supporting one
EOLed LTS release which by this time now is 12.x which has reached EOL
30 Apr 2022.
- Remove the minified UMD build from the package.
Minified code is hard to audit and since this is a widely used library
it seems more appropriate nowadays to optimize for auditability than to
ship a legacy module format that, at best, serves educational purposes
nowadays.
For production browser use cases, users should be using a bundler. For
educational purposes, today's online sandboxes like replit.com offer
convenient ways to load npm modules, so the use case for UMD through
repos like UNPKG or jsDelivr has largely vanished.
- Drop IE 11 and Safari 10 support. Drop support for browsers that don't
correctly implement const/let and default arguments, and no longer
transpile the browser build to ES2015.
This also removes the fallback on msCrypto instead of the crypto API.
Browser tests are run in the first supported version of each supported
browser and in the latest (as of this commit) version available on
Browserstack.
##### Features
- optimize uuid.v1 by 1.3x uuid.v4 by 4.3x (430%)
([#​597](https://togithub.com/uuidjs/uuid/issues/597))
([3a033f6](https://togithub.com/uuidjs/uuid/commit/3a033f6bab6bb3780ece6d645b902548043280bc))
- remove UMD build
([#​645](https://togithub.com/uuidjs/uuid/issues/645))
([e948a0f](https://togithub.com/uuidjs/uuid/commit/e948a0f22bf22f4619b27bd913885e478e20fe6f)),
closes [#​620](https://togithub.com/uuidjs/uuid/issues/620)
- use native crypto.randomUUID when available
([#​600](https://togithub.com/uuidjs/uuid/issues/600))
([c9e076c](https://togithub.com/uuidjs/uuid/commit/c9e076c852edad7e9a06baaa1d148cf4eda6c6c4))
##### Bug Fixes
- add Jest/jsdom compatibility
([#​642](https://togithub.com/uuidjs/uuid/issues/642))
([16f9c46](https://togithub.com/uuidjs/uuid/commit/16f9c469edf46f0786164cdf4dc980743984a6fd))
- change default export to named function
([#​545](https://togithub.com/uuidjs/uuid/issues/545))
([c57bc5a](https://togithub.com/uuidjs/uuid/commit/c57bc5a9a0653273aa639cda9177ce52efabe42a))
- handle error when parameter is not set in v3 and v5
([#​622](https://togithub.com/uuidjs/uuid/issues/622))
([fcd7388](https://togithub.com/uuidjs/uuid/commit/fcd73881692d9fabb63872576ba28e30ff852091))
- run npm audit fix
([#​644](https://togithub.com/uuidjs/uuid/issues/644))
([04686f5](https://togithub.com/uuidjs/uuid/commit/04686f54c5fed2cfffc1b619f4970c4bb8532353))
- upgrading from uuid3 broken link
([#​568](https://togithub.com/uuidjs/uuid/issues/568))
([1c849da](https://togithub.com/uuidjs/uuid/commit/1c849da6e164259e72e18636726345b13a7eddd6))
##### build
- drop Node.js 8.x from babel transpile target
([#​603](https://togithub.com/uuidjs/uuid/issues/603))
([aa11485](https://togithub.com/uuidjs/uuid/commit/aa114858260402107ec8a1e1a825dea0a259bcb5))
- drop support for legacy browsers (IE11, Safari 10)
([#​604](https://togithub.com/uuidjs/uuid/issues/604))
([0f433e5](https://togithub.com/uuidjs/uuid/commit/0f433e5ec444edacd53016de67db021102f36148))
- drop node 10.x to upgrade dev dependencies
([#​653](https://togithub.com/uuidjs/uuid/issues/653))
([28a5712](https://togithub.com/uuidjs/uuid/commit/28a571283f8abda6b9d85e689f95b7d3ee9e282e)),
closes [#​643](https://togithub.com/uuidjs/uuid/issues/643)
##### [8.3.2](https://togithub.com/uuidjs/uuid/compare/v8.3.1...v8.3.2)
(2020-12-08)
##### Bug Fixes
- lazy load getRandomValues
([#​537](https://togithub.com/uuidjs/uuid/issues/537))
([16c8f6d](https://togithub.com/uuidjs/uuid/commit/16c8f6df2f6b09b4d6235602d6a591188320a82e)),
closes [#​536](https://togithub.com/uuidjs/uuid/issues/536)
##### [8.3.1](https://togithub.com/uuidjs/uuid/compare/v8.3.0...v8.3.1)
(2020-10-04)
##### Bug Fixes
- support expo>=39.0.0
([#​515](https://togithub.com/uuidjs/uuid/issues/515))
([c65a0f3](https://togithub.com/uuidjs/uuid/commit/c65a0f3fa73b901959d638d1e3591dfacdbed867)),
closes [#​375](https://togithub.com/uuidjs/uuid/issues/375)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/Unleash/unleash).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4yMS42IiwidXBkYXRlZEluVmVyIjoiMzQuNjIuMSJ9-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-12-27 11:25:55 +01:00
|
|
|
|
"uuid": "^9.0.0"
|
2016-05-01 15:43:25 +02:00
|
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
2022-08-01 12:42:02 +02:00
|
|
|
|
"@apidevtools/swagger-parser": "10.1.0",
|
chore(deps): update dependency @babel/core to v7.23.9 (#6105)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@babel/core](https://babel.dev/docs/en/next/babel-core)
([source](https://togithub.com/babel/babel/tree/HEAD/packages/babel-core))
| [`7.23.7` ->
`7.23.9`](https://renovatebot.com/diffs/npm/@babel%2fcore/7.23.7/7.23.9)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@babel%2fcore/7.23.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@babel%2fcore/7.23.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@babel%2fcore/7.23.7/7.23.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@babel%2fcore/7.23.7/7.23.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
### Release Notes
<details>
<summary>babel/babel (@​babel/core)</summary>
###
[`v7.23.9`](https://togithub.com/babel/babel/blob/HEAD/CHANGELOG.md#v7239-2024-01-25)
[Compare
Source](https://togithub.com/babel/babel/compare/v7.23.7...v7.23.9)
##### :bug: Bug Fix
- `babel-helper-transform-fixture-test-runner`,
`babel-plugin-transform-function-name`,
`babel-plugin-transform-modules-systemjs`, `babel-preset-env`
- [#​16225](https://togithub.com/babel/babel/pull/16225) fix:
`systemjs` re-traverses helpers
([@​liuxingbaoyu](https://togithub.com/liuxingbaoyu))
- `babel-helper-create-class-features-plugin`,
`babel-plugin-proposal-decorators`
- [#​16226](https://togithub.com/babel/babel/pull/16226) Improve
decorated private method check
([@​JLHwung](https://togithub.com/JLHwung))
- `babel-plugin-proposal-decorators`,
`babel-plugin-transform-async-generator-functions`,
`babel-plugin-transform-runtime`, `babel-preset-env`
- [#​16224](https://togithub.com/babel/babel/pull/16224) Properly
sort `core-js@3` imports
([@​nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
- `babel-traverse`
- [#​15383](https://togithub.com/babel/babel/pull/15383) fix:
Don't throw in `getTypeAnnotation` when using TS+inference
([@​liuxingbaoyu](https://togithub.com/liuxingbaoyu))
- Other
- [#​16210](https://togithub.com/babel/babel/pull/16210) \[eslint]
Fix `no-use-before-define` for class ref in fields
([@​nicolo-ribaudo](https://togithub.com/nicolo-ribaudo))
##### :house: Internal
- `babel-core`, `babel-parser`, `babel-template`
- [#​16222](https://togithub.com/babel/babel/pull/16222) Migrate
`eslint-parser` to cts
([@​liuxingbaoyu](https://togithub.com/liuxingbaoyu))
- `babel-types`
- [#​16213](https://togithub.com/babel/babel/pull/16213) Remove
`@babel/types` props that are not produced by the parser
([@​liuxingbaoyu](https://togithub.com/liuxingbaoyu))
##### :running_woman: Performance
- `babel-parser`
- [#​16072](https://togithub.com/babel/babel/pull/16072) perf:
Improve parser performance for typescript
([@​liuxingbaoyu](https://togithub.com/liuxingbaoyu))
##### :microscope: Output optimization
- `babel-helper-create-class-features-plugin`,
`babel-plugin-proposal-decorators`,
`babel-plugin-proposal-destructuring-private`,
`babel-plugin-proposal-pipeline-operator`,
`babel-plugin-transform-class-properties`,
`babel-plugin-transform-class-static-block`,
`babel-plugin-transform-new-target`,
`babel-plugin-transform-parameters`,
`babel-plugin-transform-private-methods`, `babel-preset-env`
- [#​16218](https://togithub.com/babel/babel/pull/16218) Improve
temporary variables for decorators
([@​liuxingbaoyu](https://togithub.com/liuxingbaoyu))
- `babel-helpers`, `babel-plugin-proposal-explicit-resource-management`,
`babel-runtime-corejs2`, `babel-runtime-corejs3`, `babel-runtime`
- [#​15959](https://togithub.com/babel/babel/pull/15959) Improve
output of `using`
([@​liuxingbaoyu](https://togithub.com/liuxingbaoyu))
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, Automerge - At any time (no
schedule defined).
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/Unleash/unleash).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjE1My4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-01 23:14:42 +01:00
|
|
|
|
"@babel/core": "7.23.9",
|
2024-01-12 10:25:59 +01:00
|
|
|
|
"@biomejs/biome": "1.5.1",
|
2024-01-08 02:20:49 +01:00
|
|
|
|
"@swc/core": "1.3.102",
|
2023-09-14 13:20:32 +02:00
|
|
|
|
"@swc/jest": "0.2.29",
|
2023-11-27 11:22:24 +01:00
|
|
|
|
"@types/bcryptjs": "2.4.6",
|
2023-11-28 02:45:23 +01:00
|
|
|
|
"@types/cors": "2.8.17",
|
2023-11-27 13:44:56 +01:00
|
|
|
|
"@types/express": "4.17.21",
|
2023-11-27 14:18:05 +01:00
|
|
|
|
"@types/express-session": "1.17.10",
|
2021-10-16 07:47:36 +02:00
|
|
|
|
"@types/faker": "5.5.9",
|
2023-03-17 14:10:21 +01:00
|
|
|
|
"@types/hash-sum": "^1.0.0",
|
2024-02-08 19:40:38 +01:00
|
|
|
|
"@types/jest": "29.5.12",
|
2023-11-27 15:07:50 +01:00
|
|
|
|
"@types/js-yaml": "4.0.9",
|
2023-11-27 19:00:52 +01:00
|
|
|
|
"@types/lodash.groupby": "4.6.9",
|
2023-11-28 09:41:10 +01:00
|
|
|
|
"@types/make-fetch-happen": "10.0.4",
|
2023-11-28 10:04:09 +01:00
|
|
|
|
"@types/memoizee": "0.4.11",
|
2023-11-28 10:10:17 +01:00
|
|
|
|
"@types/mime": "3.0.4",
|
2024-02-08 19:40:58 +01:00
|
|
|
|
"@types/node": "18.19.14",
|
2023-11-28 12:26:10 +01:00
|
|
|
|
"@types/nodemailer": "6.4.14",
|
2023-11-28 13:00:26 +01:00
|
|
|
|
"@types/owasp-password-strength-test": "1.3.2",
|
2023-11-28 13:49:49 +01:00
|
|
|
|
"@types/pg": "8.10.9",
|
2023-11-28 15:47:16 +01:00
|
|
|
|
"@types/semver": "7.5.6",
|
2023-11-28 16:14:28 +01:00
|
|
|
|
"@types/stoppable": "1.1.3",
|
2024-01-17 12:36:17 +01:00
|
|
|
|
"@types/supertest": "6.0.2",
|
2023-11-28 17:03:18 +01:00
|
|
|
|
"@types/type-is": "1.6.6",
|
2023-11-28 20:36:54 +01:00
|
|
|
|
"@types/uuid": "9.0.7",
|
chore: simplify package scripts (#3736)
# Simplify package scripts
This PR's purpose is to raise a discussion surrounding our current
package scripts.
It includes some suggestions that aim to simplify the scripts and
hopefully bring a much more straightforward approach to developing and
contributing to Unleash.
Building (prod) should only happen **explicitly** and when needed.
## Before PR (current behavior)
- Clone the project;
- Open 2 terminals: One for `unleash` and another for
`unleash/frontend`;
- On `unleash`:
- Run `yarn` (which will also build, for some reason?);
- Run `yarn start:dev` to start backend in dev mode (`tsc-watch`);
- On `unleash/frontend`:
- Run `yarn` (which will also build, for some reason?);
- Run `yarn start` to start frontend in dev mode (`vite`);
So it seems to me like we build unnecessarily every time we install
dependencies. Neither dev scripts need to build the project, as backend
uses `tsc-watch` and frontend uses `vite`. I'm unsure why this is the
case, as building can take a very long time.
![image](https://github.com/Unleash/unleash/assets/14320932/5ecb7df1-e5b4-4d70-ba7e-97119f5d1116)
There's also some complexity in the way we need to split the terminal to
`cd` into `frontend` and treat it as a different project. The fact that
we have different script names is also confusing (`yarn start`, `yarn
start:dev`, etc).
## After PR
- Clone the project;
- Run `yarn` to install all dependencies;
- Run `yarn dev` to get started developing Unleash;
Running `yarn` should take care of everything needed to start
developing. This includes installing dependencies for frontend as well.
It should not build projects if we are not being explicit about it,
especially since we don't need to build them at this stage.
![image](https://github.com/Unleash/unleash/assets/14320932/614e42fc-3467-432f-91fc-624b1b35c7c1)
Running `yarn dev` should start the project in dev mode. This means
running both projects in `dev` mode, which for `backend` means running
`tsc-watch` and for `frontend` means running `vite`.
Here this PR attempts to provide a better DX by using
[concurrently](https://www.npmjs.com/package/concurrently) and
[wait-on](https://www.npmjs.com/package/wait-on) - This means both tasks
are ran simultaneously, stdout is labeled accordingly, and are stopped
together. It also means that `frontend` waits for `backend` to be
serving at `4242` before starting, since `frontend` starts pretty much
immediately with `vite` and `backend` takes a bit longer. Of course,
when the `backend` is hot-reloading you may still find some
`ECONNREFUSED`s on `frontend` stdout while it recompiles.
![image](https://github.com/Unleash/unleash/assets/14320932/8bde8ee2-3cad-4e3f-a0db-9eed60cfb04d)
No more splitting your terminal and treating `frontend` as a separate
project.
## Discussion points
Maybe there's a better alternative to `tsc-watch`? I briefly explored
some alternatives and while they had a much faster starting speed,
hot-reload was sometimes slower. IMO we should aspire to run
`src/server-dev.ts` directly and only compile when needed.
Running `dev:backend` still serves a version of the frontend (at 4242).
**Why? Can we remove that behavior?**
I can't imagine a scenario in dev where we wouldn't want to run the
latest version of the frontend with `vite`.
~~**Note:** This PR removes all other out-of-scope scripts to focus on
this revamp. If we decide to merge it, we should evaluate what other
existing scripts we still want to include. May be a good opportunity to
clean up unused ones and only include the ones we really use. This
includes scripts that our GH actions rely on.~~
**Update:** In an effort to minimize impact surface of this PR and make
it a bit more ready for merging:
- It updates some docs in
https://github.com/Unleash/unleash/pull/3736/commits/2a4ff805e87b65d9c1256effaa189ddcccba15fb
and
https://github.com/Unleash/unleash/pull/3736/commits/1bbc4882519b5a82e3116f0be255ad24a6f3ce53
to reflect our new simplified flow;
- It includes the old package scripts for now in
https://github.com/Unleash/unleash/pull/3736/commits/039bc04699ac880e491fd3ce01f9bcd6f97a94b9;
- It updates some of our GH actions to reflect the new scripts in
https://github.com/Unleash/unleash/pull/3736/commits/7782cb9b12e37ee844507e41ef2b7137eaf55666;
Given its current status I'll promote the PR to "ready for review".
I still think we should have a second look at our existing scripts and
GH actions to see what we really need and/or should adapt, but it should
be a team effort so we have a broader context. Maybe on a follow-up PR.
Does this require any changes to related projects (e.g. Enterprise)?
---------
Co-authored-by: Gastón Fournier <gaston@getunleash.io>
2023-05-12 12:23:22 +02:00
|
|
|
|
"concurrently": "^8.0.1",
|
2021-09-27 09:09:49 +02:00
|
|
|
|
"copyfiles": "2.4.1",
|
|
|
|
|
"coveralls": "3.1.1",
|
2023-09-14 16:06:04 +02:00
|
|
|
|
"del-cli": "5.1.0",
|
2022-01-05 11:00:08 +01:00
|
|
|
|
"faker": "5.5.3",
|
2024-02-08 01:12:01 +01:00
|
|
|
|
"fast-check": "3.15.1",
|
2021-09-27 09:09:49 +02:00
|
|
|
|
"fetch-mock": "9.11.0",
|
2023-01-03 21:59:24 +01:00
|
|
|
|
"husky": "8.0.3",
|
2023-09-20 18:14:36 +02:00
|
|
|
|
"jest": "29.7.0",
|
2023-05-25 13:03:54 +02:00
|
|
|
|
"jest-junit": "^16.0.0",
|
2023-09-15 09:30:54 +02:00
|
|
|
|
"lint-staged": "13.2.3",
|
2023-12-04 23:41:10 +01:00
|
|
|
|
"nock": "13.4.0",
|
2023-05-12 23:12:27 +02:00
|
|
|
|
"openapi-enforcer": "1.22.3",
|
2021-09-27 09:09:49 +02:00
|
|
|
|
"proxyquire": "2.1.3",
|
2021-11-19 13:48:49 +01:00
|
|
|
|
"source-map-support": "0.5.21",
|
2023-09-14 23:29:23 +02:00
|
|
|
|
"superagent": "8.1.2",
|
2024-02-09 00:17:37 +01:00
|
|
|
|
"supertest": "6.3.4",
|
2024-01-09 19:15:53 +01:00
|
|
|
|
"ts-node": "10.9.2",
|
2023-05-06 21:18:11 +02:00
|
|
|
|
"tsc-watch": "6.0.4",
|
chore: simplify package scripts (#3736)
# Simplify package scripts
This PR's purpose is to raise a discussion surrounding our current
package scripts.
It includes some suggestions that aim to simplify the scripts and
hopefully bring a much more straightforward approach to developing and
contributing to Unleash.
Building (prod) should only happen **explicitly** and when needed.
## Before PR (current behavior)
- Clone the project;
- Open 2 terminals: One for `unleash` and another for
`unleash/frontend`;
- On `unleash`:
- Run `yarn` (which will also build, for some reason?);
- Run `yarn start:dev` to start backend in dev mode (`tsc-watch`);
- On `unleash/frontend`:
- Run `yarn` (which will also build, for some reason?);
- Run `yarn start` to start frontend in dev mode (`vite`);
So it seems to me like we build unnecessarily every time we install
dependencies. Neither dev scripts need to build the project, as backend
uses `tsc-watch` and frontend uses `vite`. I'm unsure why this is the
case, as building can take a very long time.
![image](https://github.com/Unleash/unleash/assets/14320932/5ecb7df1-e5b4-4d70-ba7e-97119f5d1116)
There's also some complexity in the way we need to split the terminal to
`cd` into `frontend` and treat it as a different project. The fact that
we have different script names is also confusing (`yarn start`, `yarn
start:dev`, etc).
## After PR
- Clone the project;
- Run `yarn` to install all dependencies;
- Run `yarn dev` to get started developing Unleash;
Running `yarn` should take care of everything needed to start
developing. This includes installing dependencies for frontend as well.
It should not build projects if we are not being explicit about it,
especially since we don't need to build them at this stage.
![image](https://github.com/Unleash/unleash/assets/14320932/614e42fc-3467-432f-91fc-624b1b35c7c1)
Running `yarn dev` should start the project in dev mode. This means
running both projects in `dev` mode, which for `backend` means running
`tsc-watch` and for `frontend` means running `vite`.
Here this PR attempts to provide a better DX by using
[concurrently](https://www.npmjs.com/package/concurrently) and
[wait-on](https://www.npmjs.com/package/wait-on) - This means both tasks
are ran simultaneously, stdout is labeled accordingly, and are stopped
together. It also means that `frontend` waits for `backend` to be
serving at `4242` before starting, since `frontend` starts pretty much
immediately with `vite` and `backend` takes a bit longer. Of course,
when the `backend` is hot-reloading you may still find some
`ECONNREFUSED`s on `frontend` stdout while it recompiles.
![image](https://github.com/Unleash/unleash/assets/14320932/8bde8ee2-3cad-4e3f-a0db-9eed60cfb04d)
No more splitting your terminal and treating `frontend` as a separate
project.
## Discussion points
Maybe there's a better alternative to `tsc-watch`? I briefly explored
some alternatives and while they had a much faster starting speed,
hot-reload was sometimes slower. IMO we should aspire to run
`src/server-dev.ts` directly and only compile when needed.
Running `dev:backend` still serves a version of the frontend (at 4242).
**Why? Can we remove that behavior?**
I can't imagine a scenario in dev where we wouldn't want to run the
latest version of the frontend with `vite`.
~~**Note:** This PR removes all other out-of-scope scripts to focus on
this revamp. If we decide to merge it, we should evaluate what other
existing scripts we still want to include. May be a good opportunity to
clean up unused ones and only include the ones we really use. This
includes scripts that our GH actions rely on.~~
**Update:** In an effort to minimize impact surface of this PR and make
it a bit more ready for merging:
- It updates some docs in
https://github.com/Unleash/unleash/pull/3736/commits/2a4ff805e87b65d9c1256effaa189ddcccba15fb
and
https://github.com/Unleash/unleash/pull/3736/commits/1bbc4882519b5a82e3116f0be255ad24a6f3ce53
to reflect our new simplified flow;
- It includes the old package scripts for now in
https://github.com/Unleash/unleash/pull/3736/commits/039bc04699ac880e491fd3ce01f9bcd6f97a94b9;
- It updates some of our GH actions to reflect the new scripts in
https://github.com/Unleash/unleash/pull/3736/commits/7782cb9b12e37ee844507e41ef2b7137eaf55666;
Given its current status I'll promote the PR to "ready for review".
I still think we should have a second look at our existing scripts and
GH actions to see what we really need and/or should adapt, but it should
be a team effort so we have a broader context. Maybe on a follow-up PR.
Does this require any changes to related projects (e.g. Enterprise)?
---------
Co-authored-by: Gastón Fournier <gaston@getunleash.io>
2023-05-12 12:23:22 +02:00
|
|
|
|
"typescript": "4.8.4",
|
2023-11-23 13:45:36 +01:00
|
|
|
|
"wait-on": "^7.2.0"
|
2017-06-28 14:10:32 +02:00
|
|
|
|
},
|
2019-10-05 08:10:38 +02:00
|
|
|
|
"resolutions": {
|
2022-08-20 07:29:46 +02:00
|
|
|
|
"async": "^3.2.4",
|
2020-06-24 11:26:37 +02:00
|
|
|
|
"db-migrate/rc/minimist": "^1.2.5",
|
2022-08-03 03:33:59 +02:00
|
|
|
|
"es5-ext": "0.10.62",
|
2020-06-24 11:26:37 +02:00
|
|
|
|
"knex/liftoff/object.map/**/kind-of": "^6.0.3",
|
|
|
|
|
"knex/liftoff/findup-sync/micromatc/kind-of": "^6.0.3",
|
|
|
|
|
"knex/liftoff/findup-sync/micromatc/nanomatch/kind-of": "^6.0.3",
|
2020-11-24 12:51:44 +01:00
|
|
|
|
"knex/liftoff/findup-sync/micromatch/define-property/**/kind-of": "^6.0.3",
|
2022-01-05 10:01:39 +01:00
|
|
|
|
"node-forge": "^1.0.0",
|
2021-09-27 13:26:18 +02:00
|
|
|
|
"set-value": "^4.0.1",
|
|
|
|
|
"ansi-regex": "^5.0.1",
|
2021-12-03 12:56:34 +01:00
|
|
|
|
"ssh2": "^1.4.0",
|
2022-11-03 14:43:36 +01:00
|
|
|
|
"json-schema": "^0.4.0",
|
2023-07-04 17:02:38 +02:00
|
|
|
|
"minimatch": "^5.0.0",
|
2023-10-19 12:18:34 +02:00
|
|
|
|
"semver": "^7.5.3",
|
|
|
|
|
"tough-cookie": "4.1.3"
|
2019-10-05 08:10:38 +02:00
|
|
|
|
},
|
2017-06-28 14:14:55 +02:00
|
|
|
|
"lint-staged": {
|
2023-11-06 08:22:02 +01:00
|
|
|
|
"*.{js,ts}": ["biome check --apply"],
|
|
|
|
|
"*.json": ["biome format --write --no-errors-on-unmatched"]
|
2016-06-18 22:49:27 +02:00
|
|
|
|
}
|
2014-10-23 14:13:17 +02:00
|
|
|
|
}
|