* Initial handling of windows process termination
* Update exiting ES cluster process on windows
* Use tree-kill
* Add dependency
* Update with solution from Spencer
* Remove catch statement
* Add basic support for new K7 navigation
* Make visibility and app title work
* Allow nav controls on right side of navbar
* Use render callback w/ el
* Add support for multiple sides
* Remove fake spaces nav control
* Breadcrumb support
* Hide breadcrumbs in plugins when k7design is enabled:
* Fix units
* Rename k7 -> header
* Add tests
* Fix tests
* Fix loading indicator
* PR comments
* Move ts-ignore
* Use canvasApp icon type
### Review notes
This is generally ready for review. We are awaiting https://github.com/elastic/elasticsearch/issues/32777 to improve handling when users do not have any access to Kibana, but this should not hold up the overall review for this PR.
This PR is massive, there's no denying that. Here's what to focus on:
1) `x-pack/plugins/spaces`: This is, well, the Spaces plugin. Everything in here is brand new. The server code is arguably more important, but feel free to review whatever you see fit.
2) `x-pack/plugins/security`: There are large and significant changes here to allow Spaces to be securable. To save a bit of time, you are free to ignore changes in `x-pack/plugins/security/public`: These are the UI changes for the role management screen, which were previously reviewed by both us and the design team.
3) `x-pack/test/saved_object_api_integration` and `x-pack/test/spaces_api_integration`: These are the API test suites which verify functionality for:
a) Both security and spaces enabled
b) Only security enabled
c) Only spaces enabled
What to ignore:
1) As mentioned above, you are free to ignore changes in `x-pack/plugins/security/public`
2) Changes to `kibana/src/server/*`: These changes are part of a [different PR that we're targeting against master](https://github.com/elastic/kibana/pull/23378) for easier review.
## Saved Objects Client Extensions
A bulk of the changes to the saved objects service are in the namespaces PR, but we have a couple of important changes included here.
### Priority Queue for wrappers
We have implemented a priority queue which allows plugins to specify the order in which their SOC wrapper should be applied: `kibana/src/server/saved_objects/service/lib/priority_collection.ts`. We are leveraging this to ensure that both the security SOC wrapper and the spaces SOC wrapper are applied in the correct order (more details below).
### Spaces SOC Wrapper
This wrapper is very simple, and it is only responsible for two things:
1) Prevent users from interacting with any `space` objects (use the Spaces client instead, described below)
2) Provide a `namespace` to the underlying Saved Objects Client, and ensure that no other wrappers/callers have provided a namespace. In order to accomplish this, the Spaces wrapper uses the priority queue to ensure that it is the last wrapper invoked before calling the underlying client.
### Security SOC Wrapper
This wrapper is responsible for performing authorization checks. It uses the priority queue to ensure that it is the first wrapper invoked. To say another way, if the authorization checks fail, then no other wrappers will be called, and the base client will not be called either. This wrapper authorizes users in one of two ways: RBAC or Legacy. More details on this are below.
### Examples:
`GET /s/marketing/api/saved_objects/index-pattern/foo`
**When both Security and Spaces are enabled:**
1) Saved objects API retrieves an instance of the SOC via `savedObjects.getScopedClient()`, and invokes its `get` function
2) The Security wrapper is invoked.
a) Authorization checks are performed to ensure user can access this particular saved object at this space.
3) The Spaces wrapper is invoked.
a) Spaces applies a `namespace` to be used by the underlying client
4) The underlying client/repository are invoked to retrieve the object from ES.
**When only Spaces are enabled:**
1) Saved objects API retrieves an instance of the SOC via `savedObjects.getScopedClient()`, and invokes its `get` function
2) The Spaces wrapper is invoked.
a) Spaces applies a `namespace` to be used by the underlying client
3) The underlying client/repository are invoked to retrieve the object from ES.
**When only Security is enabled:**
(assume `/s/marketing` is no longer part of the request)
1) Saved objects API retrieves an instance of the SOC via `savedObjects.getScopedClient()`, and invokes its `get` function
2) The Security wrapper is invoked.
a) Authorization checks are performed to ensure user can access this particular saved object globally.
3) The underlying client/repository are invoked to retrieve the object from ES.
## Authorization
Authorization changes for this project are centered around Saved Objects, and builds on the work introduced in RBAC Phase 1.
### Saved objects client
#### Security without spaces
When security is enabled, but spaces is disabled, then the authorization model behaves the same way as before: If the user is taking advantage of Kibana Privileges, then we check their privileges "globally" before proceeding. A "global" privilege check specifies `resources: ['*']` when calling the [ES _has_privileges api.](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-has-privileges.html). Legacy users (non-rbac) will continue to use the underlying index privileges for authorization.
#### Security with spaces
When both plugins are enabled, then the authorization model becomes more fine-tuned. Rather than checking privileges globally, the privileges are checked against a specific resource that matches the user's active space. In order to accomplish this, the Security plugin needs to know if Spaces is enabled, and if so, it needs to ask Spaces for the user's active space. The subsequent call to the `ES _has_privileges api` would use `resources: ['space:marketing']` to verify that the user is authorized at the `marketing` space. Legacy users (non-rbac) will continue to use the underlying index privileges for authorization. **NOTE** The legacy behavior implies that those users will have access to all spaces. The read/write restrictions are still enforced, but there is no way to restrict access to a specific space for legacy auth users.
#### Spaces without security
No authorization performed. Everyone can access everything.
### Spaces client
Spaces, when enabled, prevents saved objects of type `space` from being CRUD'd via the Saved Objects Client. Instead, the only "approved" way to work with these objects is through the new Spaces client (`kibana/x-pack/plugins/spaces/lib/spaces_client.ts`).
When security is enabled, the Spaces client performs its own set of authorization checks before allowing the request to proceed. The Spaces client knows which authorization checks need to happen for a particular request, but it doesn't know _how_ to check privileges. To accomplish this, the spaces client will delegate the check security's authorization service.
#### FAQ: Why oh why can't you used the Saved Objects Client instead!?
That's a great question! We did this primarily to simplify the authorization model (at least for our initial release). Accessing regular saved objects follows a predictible authorization pattern (described above). Spaces themselves inform the authorization model, and this interplay would have greatly increased the complexity. We are brainstorming ideas to obselete the Spaces client in favor of using the Saved Objects Client everywhere, but that's certainly out of scope for this release.
## Test Coverage
### Saved Objects API
A bulk of the changes to enable spaces are centered around saved objects, so we have spent a majority of our time automating tests against the saved objects api.
**`x-pack/test/saved_object_api_integration/`** contains the test suites for the saved objects api. There is a `common/suites` subfolder which contains a bulk of the test logic. The suites defined here are used in the following test configurations:
1) Spaces only: `./spaces_only`
2) Security and spaces: `./security_and_spaces`
3) Security only: `./security_only`
Each of these test configurations will start up ES/Kibana with the appropriate license and plugin set. Each set runs through the entire test suite described in `common/suites`. Each test with in each suite is run multiple times with different inputs, to test the various permutations of authentication, authorization type (legacy vs RBAC), space-level privileges, and the user's active space.
### Spaces API
Spaces provides an experimental public API.
**`x-pack/test/spaces_api_integration`** contains the test suites for the Spaces API. Similar to the Saved Objects API tests described above, there is a `common/suites` folder which contains a bulk of the test logic. The suites defined here are used in the following test configurations:
1) Spaces only: `./spaces_only`
2) Security and spaces: `./security_and_spaces`
### Role Management UI
We did not provide any new functional UI tests for role management, but the existing suite was updated to accomidate the screen rewrite.
We do have a decent suite of jest unit tests for the various components that make up the new role management screen. They're nested within `kibana/x-pack/plugins/security/public/views/management/edit_role`
### Spaces Management UI
We did not provide any new functional UI tests for spaces management, but the components that make up the screens are well-tested, and can be found within `kibana/x-pack/plugins/spaces/public/views/management/edit_space`
### Spaces Functional UI Tests
There are a couple of UI tests that verify _basic_ functionality. They assert that a user can login, select a space, and then choose a different space once inside: `kibana/x-pack/test/functional/apps/spaces`
## Reference
Notable child PRs are listed below for easier digesting. Note that some of these PRs are built on other PRs, so the deltas in the links below may be outdated. Cross reference with this PR when in doubt.
### UI
- Reactify Role Management Screen: https://github.com/elastic/kibana/pull/19035
- Space Aware Privileges UI: https://github.com/elastic/kibana/pull/21049
- Space Selector (in Kibana Nav): https://github.com/elastic/kibana/pull/19497
- Recently viewed Widget: https://github.com/elastic/kibana/pull/22492
- Support Space rename/delete: https://github.com/elastic/kibana/pull/22586
### Saved Objects Client
- ~~Space Aware Saved Objects: https://github.com/elastic/kibana/pull/18862~~
- ~~Add Space ID to document id: https://github.com/elastic/kibana/pull/21372~~
- Saved object namespaces (supercedes #18862 and #21372): https://github.com/elastic/kibana/pull/22357
- Securing saved objects: https://github.com/elastic/kibana/pull/21995
- Dedicated Spaces client (w/ security): https://github.com/elastic/kibana/pull/21995
### Other
- Public Spaces API (experimental): https://github.com/elastic/kibana/pull/22501
- Telemetry: https://github.com/elastic/kibana/pull/20581
- Reporting: https://github.com/elastic/kibana/pull/21457
- Spencer's original Spaces work: https://github.com/elastic/kibana/pull/18664
- Expose `spaceId` to "Add Data" tutorials: https://github.com/elastic/kibana/pull/22760Closes#18948
"Release Note: Create spaces within Kibana to organize dashboards, visualizations, and other saved objects. Secure access to each space when X-Pack Security is enabled"
* Add option to functional test server to run elasticsearch from install dir
* Fix variable
* Fix server CLI test
* Updates to include install path in esFrom command line option
* Fix snapshot
* Update args/cli tests
* Keep default snapshot in args/help
This was previously defined in uiExports.app, which limited plugins which are not an app of providing a stylesheet. This allows any plugin to define a stylesheet which will be available on page load.
I was surprised when I tried to spread a `Set` in TypeScript and the browser complained about `Set.slice()` not being defined. This is because TypeScript does not automatically enable support for iterators when targeting earlier ES versions, like we do in the browser, unless you use the `"downlevelIteration": true` compiler option. This injects some helpers into the necessary files for reading/spreading iterators, which can be stuffed behind an import statement with using the `"importHelpers": true` compiler option and include `tslib` in our dependencies. This is already a dependency of several of our packages, so it shouldn't cause any additional modules.
The plugin helper tests have failed due to timeouts every once and a while, which makes sense because they run a bunch of CLI tasks, so this just moved them to the jest integration tests where tests can take a little longer to run.
I'd really like to upgrade to Typescript 3 for its `unknown` type, but we need to upgrade to `jest@23` to support a recent version of `ts-jest@23`.
The [jest changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md) breaks down the breaking changes in 23.x, but I found it to be slightly incomplete so I've broken down the changes that actually caused breaks for us here, and addressed each in individual commits to make review a little easier:
- the `testURL` config default was changed from `about:blank` to `http://localhost`
- this cause some XHR requests powered by JSdom to start failing. It seems these requests just do nothing in master but start to fail when JSdom is initialized with an actual URL... I think we would ideally stop sending meaningless XHR requests in the tests, but it was a lot easier to just set the config to `about:blank` for now, and we can worry about cleanup later if necessary
- `expect(...).toThrow()` only passes if an actual error was thrown.
- In two places in the index pattern code we were throwing strings, which broke the assertions. Fortunately/Unfortunately the errors are not being consumed by anything, so I was able to wrap them in `new Error()` without causing any issues.
- snapshots of mock functions now include a `results` array, detailing the return values of the function
- React fragments are now serialized as `<React.Fragment>` instead of `<UNDEFINED>`
- undefined props in React components are now stripped from snapshots
- minor changes to the ordering of mocks, imports resolution, and before hooks caused the uiSettings API tests to start breaking, but I'm replacing them with totally new tests in #22694 so I just deleted them here
- mocks created with `jest.spyOn()` that are restored now have their `mock.calls` reset, so some of the kbn-pm tests stated failing. This was fixed by restoring them with `jest.restoreAllMocks()` rather than trying to do it before the assertions
* Add `default` and `baseInterval` configuration ability to date histogram EditorConfig
* Change EditorConfig `warning` to `help`, show `help` below date histogram and histogram interval inputs
This is an attempt to write a log capture integration for the functional test runner that will collect all log output written during a test, prevent it from being written to stdout to lower the amount of work Jenkins master has to do and include the entire log output for each test in the junit report. I'm slightly concerned about the amount of memory we'll be using to store a copy of the logs for each test, but streaming the XML report isn’t easy and there doesn’t seem to be a library out there to help. If we decide it’s torally necessary we might be able to figure it out.
* [devUtils/toolingLog] give tooling log configurable writers
* property shorthand
* remove redundant parameter
* call Error.captureStackTrace when subclassing Error
* describe why we skip stack trace logging for CliError
* always return true/false from log writers
* improve type definitions, writeTo is just an object with write method
* get rid of weird dedent for failures
* [Tests] Add http integration test setup
* Base path tests
* SSL tests
* Eslint fixes
* Remove env from config schema
* Rename folders so no_rewrite and rewrite match configs/tests
* wip
* Use self-signed cert for SSL test
* Improve basepath tests
* Run base path proxy server in dev mode for now
* Remove env from x-pack reporting config
* Remove redundant base-path tests
* Test SSL with redirectHttpFromPort set
* Test SSL with redirectHttpFromPort set
* Flesh out comments
* Remove some cruft
* Add SSL tests to CI run
Right now the functional tests are run against a distributable of Kibana in CI, but that distributable is running with `--env.name=development`. That causes the optimizer to run again before the tests can start and prevents the functional tests from running against the actual version of the application users will end up getting. This seems necessary for some tests, but not all of them, but I would like to get all of the tests running against the production version of Kibana soon.
This PR implements a second ftr config, `test/functional_production` that uses basically a copy of the `test/functional` config but with a few minor adjustments, removing the `--env.name=development` kbnServerArg and using a unique junit report name. To accomplish this I needed to modify the `@kbn/test` module to only pass the `--dev` flag to the Kibana server if it is being run in development mode, which it currently does by testing the args for `--env.name=development` or two args next to each other: `'--env.name'` and `'development'`. It does this by converting the `extraKbnOpts` option into an `addExtraKbnArgs` function, which is called with the final args just before passing them to the proc runner and given a chance to modify then after all other args are resolved (pulling from different places in config based on the build type, etc.)
Over the next couple weeks I'll push up PRs for individual test suites, migrating them over to the new production config, hopefully in a short period of time we will have all the function test suites back under that `test/function` config and can run them all against the Kibana server in production mode.
A couple times while debugging failures in `functional_tests(_servers)` with people I've asked for stack traces and received responses like "that's all there is", and it turns out that's right, because the cli's are passing the error object directly to `chalk.red()`, which converts it into a string that only includes the message. This pr moves the common operations from `run_tests/cli.js` and `run_servers/cli.js` into `lib/run_cli` and includes test for the common functionality there, as well as a common error printing logic that still includes the red message, but also includes a stack trace that will help out a lot in debugging.
* Add Guideline for i18n engine
* Update Guideline according to changes in i18n engine.
* Update examples in Guideline
* typo
* improve i18n guideline: add table for better view, use single quotes for js strings, fix description for testing, use uniq "message id" name
* fix readme description for guideline
Co-authored-by: maryia-lapata "mary.lopato@gmail.com"
* [kbn-test] convert kibana-install-dir flag to installDir option
* [kbn-test] replicate kibana-install-dir handling to startServers
* [ftr] try running functional tests in production in CI
* Revert "[ftr] try running functional tests in production in CI"
This reverts commit e5b94aa024.
* [core/public/legacyPlatform] exclude ui/test_harness from the distributable
* [optimizer] fix `process.env.IS_KIBANA_DISTRIBUTABLE` definition
* [optimizer] only define `process.env.IS_KIBANA_DISTRIBUTABLE` when needed
Adding a `webpack.DefinePlugin` slows down the optimizer a small amount,
so only apply it when it is necessary, and skip it if it is going to
be defined as "false".
* [kbn-test/startServer] don't run in --dev mode if running from dist
* [ftr/kibanaServer/version] attach `-SNAPSHOT` suffix to version if running build_snapshot
* set kibana locale in kibana.yml config
* remove accept-language-parser
* remove unnecessary tests
* fix readme description, fix description for locale in kibana.yml
* add point, that i18n.locale option should have exact match
* update kbn/i18n README
* Update README.md
* use getUiTranslations in render_mixin, remove i18n_mixin
* move registering translation files to mixin function
This upgrades prettier to version 1.14.0. The main motivation is to gain support for the new TypeScript language features introduced in 2.9 and 3.0.
Prettier versions 1.13 and 1.14 also introduced some other JavaScript and TypeScript style improvements resulting in a few small line break and parenthesis changes.
The relevant release notes are:
* [Prettier 1.13.0 Release Notes](https://prettier.io/blog/2018/05/27/1.13.0.html)
* [Prettier 1.40.0 Release Notes](https://prettier.io/blog/2018/07/29/1.14.0.html)
* Add unit-tests for i18n engine
* tests for angular wrappers under i18n engine
* split to packages in accordance to specific library
* split to packages depending on tech and environment
* make env modules names consistent
* remove intl polyfilling
* move laoder to root, i18n folder to core
* Add unit-tests for i18n engine
* tests for angular wrappers under i18n engine
* rebase on split package, injectIntl component
* eslint fixes
* use method names for checking, test i18n-values in directive
* use real html content while testing directive
* add test for angular directive without values
Fixes#20694
Implements super basic new platform `core` system, which includes two services: `core.injectedMetadata` and `core.legacyPlatform`. The `core` currently has two responsibilities:
1. read the metadata from the DOM and initialize the `ui/metadata` module with legacy metadata, proving out how we plan to expose data from the new platform through the existing APIs/modules to the legacy platform.
2. bootstrap the legacy platform by loading either `ui/chrome` or `ui/test_harness`
Because `core` mutates the `ui/metadata` module before bootstrapping the legacy platform all existing consumers of `ui/metadata` won't be impacted by the fact that metadata loading was moved into the new platform. We plan to do this for many other services that will need to exist in both the legacy and new platforms, like `ui/chrome` (see #20696).
* bump eui
* Fixed breaking `EuiPage` changes
Mainly adding `EuiPageBody`’s where there were none
* bump to 3.0, remove duplicate declaration of EuiFlyoutBody, update jest snapshots
* bump eui
* bump to 3.0, remove duplicate declaration of EuiFlyoutBody, update jest snapshots
* Update jest snapshots in xpack
<!--
Thank you for your interest in and contributing to Kibana! There
are a few simple things to check before submitting your pull request
that can help with the review process. You should delete these items
from your submission, but they are here to help bring them to your
attention.
- Have you signed the [contributor license agreement](https://www.elastic.co/contributor-agreement)?
- Have you followed the [contributor guidelines](https://github.com/elastic/kibana/blob/master/CONTRIBUTING.md)?
- If submitting code, have you included unit tests that cover the changes?
- If submitting code, have you tested and built your code locally prior to submission with `yarn test && yarn build`?
- If submitting code, is your pull request against master? Unless there is a good reason otherwise, we prefer pull requests against master and will backport as needed.
-->
Make relevant generated files use snakeCase instead of kebabCase
Closes#20524
This upgrades TypeScript to version 2.9.2. My main motivation is the support for generic type arguments in JSX elements and tagged templates (e.g. for `styled-components`).
Problems arising from breaking changes in the new TypeScript version have been mitigated by:
* setting the `keyofStringsOnly` option until impacted code has been
future-proofed
* Restricting some joi-related generics
See the [release notes](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html) for details.
Some follow-up tasks should be:
* Update EUI to support the new `keyof` behaviour
* Update new platform TypeScript code to support new `keyof` behaviour
* Remove `keyofStringsOnly` setting
* split to packages in accordance to specific library
* split to packages depending on tech and environment
* make env modules names consistent
* remove intl polyfilling
* move laoder to root, i18n folder to core
* Add missing peer dependency and upgraded to new import resolver kibana
* Fixed template code to follow eslint rules
* Fix lint script to lint all files in the generated dir
* More precise slurp :p
* Replace test:api with @kbn/test runTests
* Improve CLI help menu 🆘
* Use --es-from
* Replace jenkins:selenium with kbn-test
* Validate cli args, fixing test in the process
* Clean up some stuff
* Code review fixes
* Explanation for collectCliArgs
* Remove exit codes, they're useless anyway.
* Make markdown vis test pass with dev_mode setting
* Tests
* Remove unneeded export
* Code review: move console logging up to cli.js
* Code review: refactor startServers and runTests to take single options collection
* Code review: Remove all things I am sure we do not use
* Improve tests
* Code review fixes
* Pass created log to runFtr, runElasticsearch, runKibanaServer
* Update --es-from option to --esFrom
This PR upgrades RxJS to version 6 and switches to a fork of `stream-to-observable` which includes an updated version of `any-observable` that supports RxJS 6 until https://github.com/jamestalmage/stream-to-observable/pull/10 is merged. The primary change in this version of RxJS is the movement of stream operators from `Obersable.prototype` to the `rxjs/operators` module. Some of the operators, like `catch` and `do`, have been renamed (`catchError`, and `tap`). The Obsevable factories have also been moved from static methods on the `Observable` class to named exports of the root `rxjs` module. Some of those factories have also changed slightly, like `fromEvent` which now emits arrays if the event handler is called with multiple arguments.
```js
// import the Rx namespace to get the Observable factories
import * as Rx from 'rxjs';
// import the operators as named imports
import { map, tap, switchMap } from 'rxjs/operators';
```
In order to make the license that applies to each file as clear as possible, and to be consistent with elasticsearch, we are adding Apache 2.0 license headers to the top of each file.
Existence of this header is enforced by eslint and tslint and missing headers were automatically added in the last commit by running:
```
node scripts/eslint --fix && node scripts/tslint --fix
```
* feat(12976): node version validation at runtime.
* refact(12976): move the code into a static utilities class.
* test(12976): added first test case using jest.
* test(12976): added test cases for node_version.
* feat(12976): create setup env node to bootstrap babel, ts-node and node version validator.
* refact(12976): migrated node version code from es6 to es5.
* feat(12976): node version validation at runtime.
* refact(12976): move the code into a static utilities class.
* test(12976): added first test case using jest.
* test(12976): added test cases for node_version.
* feat(12976): create setup env node to bootstrap babel, ts-node and node version validator.
* refact(12976): migrated node version code from es6 to es5.
* fix(12976): remove one level from ts node register cache directory link.
* chore(12976): added caret to semver dependecy in order to support minor versions.
* refact(12976): small change from named import to default import on node version validator.
* refact(12976): removed ts_node_register and add the code to babel_register.
* feat(12976): split eslint config in order to properly support files built to run before and after node version validator. refact(12976): convert script files to es5 code. refact(12976): delete inline eslint configs from node version check related files.
* refact(12976): remove ts node register file.
* refact(12976): completely port setup_node_env to es5.
* refact(12976): remove babel_register invokation from external dependencies in scripts.
* refact(12976): move node_version code directly into node_version_validator inside setup_node_env folder.
* refact(12976): only node version validator for kbn script.
* [tslint/kbn-pm] apply autofixes
* [tslint/kbn-pm] whitelist all console.log calls for now
* [tslint/kbn-pm] sort object keys alphabetically
* [tslint/kbn-pm] use comments to "fill" empty blocks
* [tslint/kbn-pm] use I-prefix for interface names
* [tslint/kbn-pm] use arrow-functions where possible
* [tslint/kbn-pm] use lowerCamelCase for variable names
* [tslint/kbn-pm] prevent shadowed variable names
* [tslint/kbn-pm] avoid variable name and type clashes
* [tslint/kbn-pm] replace console.log statements with bare-bones logger
* [tslint/kbn-system-loader] remove tslint overrides
* [tslint/kbn-system-loader] apply autofixes
* [tslint/kbn-system-loader] override max-classes-per-file for tests
* [tslint/kbn-system-loader] use I-prefix for interface names
* [tslint/kbn-system-loader] use comments to "fill" empty blocks
* [tslint/kbn-system-loader] use lowerCamelCase for variable/property names
* [tslint/kbn-system-loader] sort object keys alphabetically
* [tslint/kbn-system-loader] ensure that public methods come before private ones
* [tslint] lint typescript code
* [tslint] filter projects when running specific project
* [dev/ts] use more explicit types
* [dev/ts] add note about why using glob
* [dev/ts] rely on ts, use fewer getters
* Revert "[DOCS] Removes redundant index.asciidoc files (#19192)"
This reverts commit d11b5aae9a.
* Revert "[typescript] add typescript support for the server and browser (#19104)"
This reverts commit c6112067fc.
* Revert "Option to run kibana from build for CI (#19125)"
This reverts commit 5969860303.
* [typescript] add typescript support for the server and browser
* [ts-jest] upgrade to latest version
* [jest] support test.tsx files
* [jest/ts] modify `ts-jest.tsConfigFile` config based on filePath
* [types] use correct major version of minimatch types
* [jest] add ts support to x-pack jest config
* [ts/projects] fix tsconfig.json not found error message
* [optimizer/ts] use lowercase jsx option
* [tsconfig] remove ui/* alias
* [plguin-helpers] remove mention of `buildSourcePatterns`
* [plugin-helpers] expect typescript to be a devDep
* [dev/build] place transpile tasks next to each other
* [ts/x-pack] add common and server directories to ts project
* [dev/ts/project] use a limited set of globs to find tsconfig files
* [eslint] unify resolver configs
Our eslint resolver settings currently rely on the fact that we define
our resolver with a string globally, and an object in the overrides.
This causes the override value to completely override/replace the global
setting, which is desired, but when the global setting is converted to
an object they are merged, causing both resolvers to run.
This is a problem because some dependencies in the UI side of things
will resolve with the node resolver, but will resolve incorrectly
because they are intended to use some webpack specific override.
While trying to add TypeScript I needed to pass argument to the node
resolver which uncovered this issue. The change here moves us away from
using the node resolver directly and instead uses the kibana resolver
with `forceNode: true` set when linting server code and `forceNode:
false` when resolving imports that will be handled by webpack.
* [import-resolver] use object spread operator
* [mocha] run tests with mocha script, remove grunt-simple-mocha
* [ci] force colored output
* [ci] disable color when reading the yarn bin
* [dev/build/exec] support tooling log having its own chalk
* [dev/mocha] avoid changing the cwd of the process
* [dev/mocha] only match files, speed up negative matches
* [cli/serve/test] strip ansi control characters from logs
* [ci] disable color in all `yarn bin` invocations
* [dev/mocha] cleanup old runInBand check
* [dev/mocha] enable gloabl leak checks
Restructure testing with kbn-test package
- Run with multiple configs, move cli options to config
- Package-ify kbn-test
- Eventually we'll have functional_test_runner live in a package
of its own, and then this kbn-test will use that as a dependency,
probably still as a devDependency.
- Implement functional_tests_server
- Collapse single and multiple config apis into one command
Use kbn-es
Replace es_test_cluster + es_test_config with kbn/test utils
Implement new createEsTestCluster
Improve scripts, jsdocs, cli top-level tools
Lift error handling to the top level
ES snapshots are located again within the base elasticsearch directory and NOT within an additionally nested elasticsearch-oss directory
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
* [x-pack/ftr] call fatalErrorHandler when functional tests fail
* [kbn/dev-tools/withProcRunner] require a log as the first arg
* [kbn/dev-tools/procRunner] use correct promise, convert to getter
* [x-pack/ftr] avoid race condition that prevents success message logging
When starting the kibana server it is possible for log messages to come
after the server is started, so we added a pause that waits for 5
seconds of logging silence before logging the success message. The
observable used fails to complete though if a log message is never
written AFTER the Kibana server starts. To counter this the observable
is started with `null` so it will always start at least one 5 second
timer and always complete even if there is no log data after Kibana
server starts.
* fix typo
* [uiExports] migrate uiApp "uses" to explicit imports in apps
* [uiApp] update tests for getModules() method
* [optimize/uiExports] improve naming and comments
* [uiExports] sort imports so they load in the same order as before
* [testHarness] load hacks when testing in the browser
* [x-pack/uiExports] use new uiExports modules
* [testHarness] describe why we import uiExports/hacks
* [optimize] remove needless [].concat()
* [optimize/createUiExportsModule] string.includes > string.indexOf
* [uiExports/createUiExportsModule] remove needless capture of module exports
* Introduce @kbn/plugin-system
* Throw if plugin exposes a promise from 'start'
* TS updates
* rename
* Better error if missing plugin
* Api to add multiple specs at the same time
* isPromise prettier-ified
* Rename 'plugin' to 'system'
* Metadata + some cleanups
* Make it possible to type system metadata
* Throw if stop is async
* Add tests for System class
* [kbn-es/cluster] fix promise handling to properly route success/failure
* [kbn-es/cli] catch errors that bubble to the CLI and log with a bit of style
* [kbn-es] fix promise handling when building from source
* [kbn-es] check for inverse of .stop() condition
* [kbn-es/cluster] resolve promise is cluster stops cleanly
* [kbn-es/cluster/start] reject if ES exits before starting
* [kbn-dev-utils/procRunner] try using execa to avoid never-exitting procs
* [kbn-dev-utils/procRunner] don't listen for close event, rely on stdio streams ending
Makes our language updates more visible to users and removes mentions of Kuery as a separate language. Users still get the old lucene experience by default, but have the option to opt-in to "experimental query features" directly in the query bar. Goal is to get more feedback by making these new features more prominent and less of a jump from lucene.
* First stab at refactoring typeahead
* Don't double submit on enter
* Add item templating
* Introduce simple kuery language
* Rename to kql and add modules
* Update KQL syntax
* Automatically insert matching pairs
* Don't match quotes after alphanumeric chars
* Get field and value suggestions
* Remove accidental changes
* Remove unnecessary test
* Don't submit on enter
* Fix typeahead
* Suggest matching recent searches
* Suggest operators
* Suggest conjunctions
* Use template, separate suggestions into separate modules
* Whoops, add this module back
* Add clarifying comment
* Fix history log key
* Don't update suggestions on every key press
* Fix key handling
* Update terminology to be clearer
* Fix typo
* Simplify building of nodes
* Don't always hide on submit
* Check items exists
* Add icon directive which wraps EuiIcon.
* kql design start
* remove comment bits
* Simplify select next/prev and reset selected on hide/backspace
* Add test
* Put persistedLog on scope so it can be tested
* Fix typos
* Build up AST for sublist by returning functions that take a field name
* Remove single quoted strings and add double quote to special characters
* Build nodes with arg nodes instead of args themselves
* Add support for exact phrase search for quoted values
* Update typeahead items when language changes
* Finish that work I didn't do in the last commit
* This commit makes Bargs very happy cuz it does a lot
* Add wildcard field support to range query
* Remove range support for wildcard values
* Remove KQL as a separate language
Updates kuery to use KQL's grammar. This will lead to a smoother
transition for both us and Kuery users. We mainly added KQL as a
separate language so that we could notify Kuery users that the syntax
had changed. I realized we could do the same by trying to parse their
query strings with the old grammar if the new grammar fails, and if the
old grammar parses successfully we can display an error message with a
link to the docs describing the syntax changes. Since Kuery now uses the
more simple KQL syntax, I've also re-enabled the filter bar when Kuery
is selected.
* Fix typeahead behavior
* Update conjunctions
* Use scope apply
* Suggest conjunctions after ranges
* Support strings in wildcard node constructor and add tests for wildcard node
* test updates
* Removing unused serializeStyle and toKueryExpression, updating tests
* Fix functional test
* Fix typo
* Show fields that match in any part of the name
* Alter order of operators
* Preserve focus after selecting by click
* Ports tests for `fromKueryExpression` to `fromKqlExpression`
* More KQL syntax tests
* Suggest conjunctions after ranges
* Fix suggestions inside parens
* fromLiteralExpression tests
* remove serializeStyle arguments which no longer exist in the function definition
* tests for getFields
* Case insensitive search for field names
* update tests for is.js
* add wildcard fieldname test for range.js
* Fix removed div
* Fix line spacing for autocomplete suggestions
* Fix conjunction suggestions with escaped preceding literals
* Escape special characters in fields and values
* Don't suggest the value that's already selected
* Update icons
* Sort prefix first
* Simplify cursor detection and suggest booleans
* Use quotes for suggested values
* get rid of references to KQL
* Don't show errors from parsing
* That didn't even exist
* Use config to determine if values are suggested
* Update suggestions on home/end
* remove hack
* Update reference to kql
* Suggestions for quoted values
* Clean up grammar
* Better support for cursor inside spaces
* Create grunt task to generate parsers from peg files
* Simplify wildcard handling
* Don't filter out the exact fields/values
* Update parsing modules
* Fix peg task
* Make operator syntax more visible
* Update OR verbiage
* Simplify and improve match pairs
* Revert "Simplify wildcard handling"
This reverts commit 915861beab.
* Support escaped backslashes inside quoted strings
* Support escaped keywords
* Remove lodash dependency cuz w33ble
* Escape user input and fix conjunction description
* Clear suggestions after submitting
* Fix insertion of suggestion to account for selection
* Remove unnecessary?
* Remove extraneous file
* Better name for method
* Move functions out of event handler
* Don't wrap result in promise
* Don't show kuery suggestions for lucene
* some cleanup and polish for kql autocomplete
* Omit description completely for values
* Don't suggest and/or for quoted strings that end in spaces
* Submit recent search suggestions on select
* Scroll selected suggestion into view
* Better handling of key events and hiding typeahead
* Update suggestions to work in other apps with multiple index patterns
* Only update suggestions if not submitting
* Hide suggestions on focus
* Simplify wildcard (again)
* Fix console error
* Remove references to kql
* Fix match pairs so that suggestions occur with cursor in correct place
* Memoize value suggestions
* Debounce model updates
* Add tests for suggestion providers
* Add setting and docs
* Add custom error, helper for detecting leading wildcards, and check for
leading wildcards in the Value rule of the grammar.
* Better handling of suggestion clicks
* Dedup suggestions
* Sort keywords first
* Fix value suggestions memoizing
* Check if query exists
* Reduce size of dialog and fix ranges
* Create grunt task to generate parsers from peg files
* Lazy load typeahead items
* Fix wildcard tests
* Fix value suggestion tests
* Fix typeahead tests
* Fix value suggestion memoize resolver
* Leave comment
* Add a ttl for the value suggestion resolver
* Move grunt config to config/
* Bargs can suck it
* Fix more tests that bargs broke (and one I did too)
* Fix tests
When kbn-es downloads a snapshot, it writes the in progress download to
`/tmp` rather than the destination path in case the download fails part
way through, then renames the file from `/tmp` to the final location.
This is a good practice, but in CI the `/tmp` directory isn't stored on
the same disk as the project, which causes a rename error to occur
because we're attempting to rename across devices.
This updates the download logic to write to `${destPath}.tmp` instead,
and do the same renaming, so that we can avoid cross-device errors.
In an attempt to debug random stalls we are seeing in CI, the proc runner will now send SIGKILL if a process does not exit after receiving the standard exit signal it receives (usually SIGTERM). Additionally, if the child process object never emits "close" or "exit" another timeout will trigger an error
* moving plugin template to React and EUI
* fixing method reference error
* adding whitespace and comments per PR feedback
* adjusting test
* fixing test
* reducing Angular dependency and fixing issue with hack not loading properly
* fixing tests
* reacting to PR feedback
* [kbn-plugin-helpers] allow opt-ing out of dependency installation
* [plugin-helpers] rename buildIgnoreDependencies to skipInstallDependencies
* [plugin-helpers] use noop3 for test
* [plugin-helpers] fix test description
* [plugin-helpers] fix assertion
* Add test-subj-selector module to packages dir.
* Rename to @kbn/test-subj-selector.
* Simplify rejectRejFiles Grunt task and ignore nested node_modules.
* Update jenkins_unit script to use yarn kbn CLI.
* [kbn-plugin-generator] add plugin generator to the repo
* [plugin-generator] use snake_case plugin name for directory name
* [plugin-generator] fix typo
* [plugin-generator] remove translation support until we resume i18n efforts
* [yarn] update lockfile
* [mocha] remove plugin-generator selector from mocha tests
* [plugin-generator] update generated readme to recommend yarn
* [plugin-generator] add readme to generator pacakge
* [plugin-generator] link from plugin-resource docs
* [plugin-generator] mention very important `kbn bootstrap` script
* [plugin-generator] rework some parts of the README
* [plugin-generator] log actual directory name with system separators
* [plugin-generator] include bootstrap/yarn preinstall check script
* [plugin] Handle Kibana package dependencies
* Clean up 'link:' dep check in plugin installer
* Tests for 'prepareProjectDependencies'
* Remove unnecessary fn from 'prepareProjectDependencies'
* Move prepareProjectDependencies into @kbn/build
* update snapshot
* Move test to Jest
* clarification
* [plugin-helpers] update the readme to describe changes now that it is in the Kibana repo
* [plugin-helpers/readme] add note about versions before 6.3
* Run 'kbn:bootstrap' scripts at the end of bootstrapping
* Add bootstrap command tests
* resetAllMocks
* Use 'absolutePathSnaphotSerializer'
* Mock console.log calls
* Strip ansi snapshot serializer
* reset in afterEach
* Log before running 'kbn:bootstrap' scripts
* mock linkProjectExecutables in bootstrap tests
* lint for innerHTML and family
Browser apis like innerHTML and document.write are dangerous when used
incorrectly, so we should not be using them unless we explicitly opt-out
of the linting rule on a case by case basis.
* add no-unsanitized to eslint peerDependencies
* Build packages before running ESLint on CI
* Add production task to kbn-build
* Ensure packages are bootstrapped before running the build
* Run ESLint on kbn-build
* Introduce `kbn`, the Kibana build tool
* yarn kbn
* Make all deps devDeps
* Exclude __fixtures__ folder from Jest to avoid warnings
* Review fixes
* Update readme
* Use 'yarn kbn'
* Consistent rootPath
* Link to kbn tool
* Unsupported URL 'debug help' in contributing guide
* Use scripts/kibana instead of bin if available
* semicolons
* Don't fallback to legacy bin/kibana start method
* chore: add 8.x version to compat chart
Original commit: elastic/kibana-plugin-helpers@fc72de53bd
* [eslint] upgrade to 4.10.0
* [eslint-config-kibana] limit jest config to jest test files
* [ui_framework] remove trailing comma from rest-spreads
* [dashboard/tests] tag jest helpers with .test.js suffix
* explicitly import expect.js where used
* [eslint] apply auto-fixes
* [eslint] manually add/wrap some parens for compliance
* [npm] point to local packages for testing/review
* [jest] remove .test extension from jest helpers
* [ui_framework] fix trailing comma removal from 3bc661a1c8
* [packages] upgrade eslint packages
* fix: pass build target into package task
use the build target for the zip output
* chore: change up the npm scripts
* chore: add create package tests
* chore: update eslint deps
* chore: fix linting issues, add engines
Original commit: elastic/kibana-plugin-helpers@51058fb7fc
require uses a cache, so if the package.json file was changed before running build, the changes won't exist in the build runtime. using fs.readFileSync instead ensures that the information read from package.json is current.
Original commit: elastic/kibana-plugin-helpers@f78e891838
The flot-charts project has been abandoned since 2014, but we use it
pretty extensively in Kibana. By forking it, we can fix bugs and improve
on the library in ways that we need to for Kibana.
* chore: add a simple version compat chart
* chore: document the settings and how to use them
* chore: use icon for license info
* chore: use matching badge for circleci status
Original commit: elastic/kibana-plugin-helpers@1f39e488a3
* observe includePlugins setting
* fix: move resolve up to config parser
this ensures that the path is resolved relative to the plugin root
Original commit: elastic/kibana-plugin-helpers@fd07d617a4
* feat: add translations path to build
included by default, to better match what's in the elastic products and even the plugin template
also add a translations path to the mock plugin for tests
* chore: add script to run tests with linting
Original commit: elastic/kibana-plugin-helpers@9871a4b11d
* Initial commit
* added actual config
* version 0.0.1
* version 0.0.2
* [no-const-assign] Disallow assignment to const
http://eslint.org/docs/rules/no-const-assign
* [no-redeclare] Disallow redeclaring variables
http://eslint.org/docs/rules/no-redeclare
* version 0.0.3
* [no-unused-vars]: Disallow declaration of variables that are not used in the code.
* Bump to 0.1.0.
* upgrade deps in preperation for babel6 transition
* 0.2.0-alpha1
* use yaml for readability
* 0.2.0
* update/pin peed dependency versions
* 0.2.1
* [quotes] allow template literals
This allows eslint to validate this rule from the styleguide: https://github.com/elastic/kibana/blob/master/style_guides/js_style_guide.md#use-template-strings-to-avoid-escaping-single-quotes
* 0.2.2
* add object-curly-spacing and no-global-assign rules
* sort .eslintrc.yaml rules
* 0.3.0
* add basic react support
* 0.4.0
* Disallow using 'context' in tests
* 0.5.0
* move from .eslintrc.yaml to .eslintrc.js without .json generation (#6)
* Implement import plugin (#7)
* update deps
* include eslint-plugin-import
* Dereference import config (#8)
* reorganize existing rules into groups
* defreference eslint-plugin-import "recommended" config
Based on ea9c92c732/config/recommended.js
* 0.6.0
* set environment info for import rule
* 0.6.1
* update peerDependencies
* 0.7.0
* Move eslint-config-kibana into packages directory
* bump @elastic/eslint-config-kibana and deps
* eslint --fix
* fix unused vars
some exceptions for tests
* move eslint-config-kibana to dev
* rename create_package function
* make .node-version looser, match internal checks
Original commit: elastic/kibana-plugin-helpers@6fac14bd51
* run is now a named export, added helpers for interacting with the kibana repo
* [config] override the kibana root config with KIBANA_ROOT envvar
Original commit: elastic/kibana-plugin-helpers@54a38cd9a2
* Make sure package is published under @elastic org namespace
* Preparing packages/ for Kibana-related packages
* Folder structure mirrors package name
* Add note on naming consistency
* s/packages/node modules/ for removing potention confusion with Kibana system packages
* Prefixing the eslint rule with package scope (i.e. org namespace)
* Adding README
* Bumping up version for release
* Adding repository information to package.json
* Bumping up version for release
* URL-encoding repository link + bumping up version for release
* Using published version
* Introduce a custom kibana estlint rule for no default exports
Turn it on only at the level of /kibana/src/core_plugins/public/ for
now, just to keep the PR sizes manageable.
* Don't call functions directly on the import
* Create a packages dir and move the custom rule in there
* Remove copied package.json portions, use minimal info necessary
* create windows cmd wrapper
* use windows cmd wrapper on browser tests
* be explicit about the mocha command location
* use windows cmd wrapper on server tests
* use windows cmd wrapper on build
default to using npm as well
Original commit: elastic/kibana-plugin-helpers@35f80a08ce
The package.json URLs are still referencing @spalger's version, whilst development and collaboration happens on @elastic's version
Original commit: elastic/kibana-plugin-helpers@1f322c1cb1
* remove scripts and devDependencies from package
these are only useful in development, and serve no purpose in the build
* refactor the package rewriter
* clean up the buildTarget before building
* run npm install after build creation
* break apart the create_build module
* add create_package modules
call it from within the build_action
* add flag to skip package zip creation
* rename skip-package flag to skip-archive
* rename rewritePackage to rewritePackageJson
* include lock and shrinkwrap files if they exist
* add test for skipping zip creation
* add some tests to build creation
Original commit: elastic/kibana-plugin-helpers@ef6b9c6332
* pass buildTarget into createBuild
allow override from options
* add cli option to override build destination
--build-destination
* fix tests
* resolve build destination from plugin.root
this allows both relative and absolute paths to be used
* add short option
* update the help
Original commit: elastic/kibana-plugin-helpers@6c9fb3464e
* only modify root package.json file
previously this was modifying every package.json from node_modules as well
* refactor the build task
export the build, define helpers outside of the task
* allow custom kibana and build versions
both can be passed via flags
* allow custom build globs to be specified
* move build into its own module
* add simple option parsing tests
* update readme
* move dependency file appending into the action
* put source and target into variables
* move config file loading into a module
* refactor test_server_action slightly
be more explicit about the files option overwriting the plugin settings
* move default build patterns to plugin config
allows the setting to be overridden via the config file
* fix dirname on relative includes
trim any leading '../' off the path when moving it into the build target
* move node_module dirs into plugin_config module, use existing promises
* rename file_config => config_file
Original commit: elastic/kibana-plugin-helpers@743e4a37c2
* remove conditionl require in runner
add tasks module to load all tasks, throw if task does not exist
* change task signatures and action handlers
- tasks get plugin, run, and an options object
- action handler controls what goes into each task
- taskRunner wrapper moves the command object to the first argument
* change test command signature
allow files to be passed in, and pass all options to test:server and test:browser
* simplify the task runner
* fix typo in unknownOptions
* expose the task runner as the module's main
this way tasks can be run programatically without going through a cli parser
* add tests for task runner
* remove file passing for testAll
* add serverTestPaths to the plugin config
useful for overriding the value via a config file
* [config] plugin.serverTestPaths -> plugin.serverTestPatterns
Original commit: elastic/kibana-plugin-helpers@82af4df64e
* read json overrides, mix into defaults
* rename plugin config helper
* use the plugin config in start
Original commit: elastic/kibana-plugin-helpers@4cfbe28128
* Updated if check if there are no dependencies
* Now running main()
* Build now uses the correct parameter.
Original commit: elastic/kibana-plugin-helpers@7cf31d26d2