diff --git a/.circleci/config.yml b/.circleci/config.yml index 5836e40681a..7894b1fa8a9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -145,66 +145,6 @@ jobs: ### JavaScript - suggest-javascript: - executor: docker-circleci-node-14 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: suggest/javascript - command: | - sudo npm install --global npm@7 - cd suggest/javascript - make - - language-service-javascript: - executor: docker-circleci-node-14 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: language-service/javascript - command: | - sudo npm install --global npm@7 - cd language-service/javascript - make - - language-server-javascript: - executor: docker-circleci-node-14 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: language-server/javascript - command: | - sudo npm install --global npm@7 - cd language-server/javascript - make - - monaco-javascript: - executor: docker-circleci-node-14 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: monaco/javascript - command: | - sudo npm install --global npm@7 - cd monaco/javascript - make - - vscode-javascript: - executor: docker-circleci-node-14 - steps: - - attach_workspace: - at: '~/cucumber' - - run: - name: vscode/javascript - command: | - sudo npm install --global npm@7 - cd vscode/javascript - make - message-streams-javascript: executor: docker-circleci-node-14 steps: @@ -834,21 +774,6 @@ workflows: ### JavaScript - - suggest-javascript: - requires: - - prepare-parallel - - language-service-javascript: - requires: - - prepare-parallel - - language-server-javascript: - requires: - - prepare-parallel - - monaco-javascript: - requires: - - prepare-parallel - - vscode-javascript: - requires: - - prepare-parallel - message-streams-javascript: requires: - prepare-parallel diff --git a/Makefile b/Makefile index 43db585325c..c31a8e1b9a3 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,6 @@ PACKAGES ?= messages \ gherkin \ gherkin-streams \ gherkin-utils \ - suggest \ - language-service \ - language-server \ - monaco \ - vscode \ create-meta \ fake-cucumber \ query \ diff --git a/language-server/.rsync b/language-server/.rsync deleted file mode 100644 index ea5a5de249b..00000000000 --- a/language-server/.rsync +++ /dev/null @@ -1 +0,0 @@ -../.templates/default.mk default.mk diff --git a/language-server/CHANGELOG.md b/language-server/CHANGELOG.md deleted file mode 100644 index 2bbb94e8682..00000000000 --- a/language-server/CHANGELOG.md +++ /dev/null @@ -1,42 +0,0 @@ -# CHANGE LOG -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/) -and this project adheres to [Semantic Versioning](http://semver.org/). - ----- -## [Unreleased] - -### Added - -### Changed - -* Upgrade to `@cucumber/cucumber-expressions 13.0.1` - -### Deprecated - -### Removed - -### Fixed - -## [0.1.0] - 2021-09-07 - -### Added - -* Document Formatting - ([#1732](https://github.com/cucumber/common/pull/1732) - [aslakhellesoy]) - -## [0.0.1] - 2021-09-02 - -### Added - -* First release - - -[Unreleased]: https://github.com/cucumber/common/compare/language-server/v0.1.0...main -[0.1.0]: https://github.com/cucumber/common/compare/language-server/v0.0.1...v0.1.0 -[0.0.1]: https://github.com/cucumber/common/tree/language-server/v0.0.1 - - -[aslakhellesoy]: https://github.com/aslakhellesoy diff --git a/language-server/Makefile b/language-server/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/language-server/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/language-server/README.md b/language-server/README.md deleted file mode 100644 index 8f80d31daa4..00000000000 --- a/language-server/README.md +++ /dev/null @@ -1 +0,0 @@ -See [javascript/README.md](javascript/README.md) diff --git a/language-server/default.mk b/language-server/default.mk deleted file mode 100644 index a0d8dd28fb4..00000000000 --- a/language-server/default.mk +++ /dev/null @@ -1,89 +0,0 @@ -# Please update /.templates/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE = $(shell which apk 2> /dev/null) -LIBNAME = $(shell basename $$(pwd)) -LANGUAGES ?= $(wildcard */) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: $(patsubst %,default-%,$(LANGUAGES)) -.PHONY: default - -default-%: % - if [[ -d $< ]]; then cd $< && make default; fi -.PHONY: default-% - -# Need to declare these phonies to avoid errors for packages without a particular language -.PHONY: c dotnet go java javascript objective-c perl python ruby - -update-dependencies: $(patsubst %,update-dependencies-%,$(LANGUAGES)) -.PHONY: update-dependencies - -update-dependencies-%: % - if [[ -d $< ]]; then cd $< && make update-dependencies; fi -.PHONY: update-dependencies-% - -update-changelog: -ifdef NEW_VERSION - cat CHANGELOG.md | ../scripts/update_changelog.sh $(NEW_VERSION) > CHANGELOG.md.tmp - mv CHANGELOG.md.tmp CHANGELOG.md -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-changelog - -pre-release: update-changelog $(patsubst %,pre-release-%,$(LANGUAGES)) -.PHONY: pre-release - -pre-release-%: % - if [[ -d $< ]]; then cd $< && make pre-release; fi -.PHONY: pre-release-% - -release: publish -.PHONY: release - -publish: create-and-push-release-tag $(patsubst %,publish-%,$(LANGUAGES)) -.PHONY: publish - -publish-%: % - if [[ -d $< ]]; then cd $< && make publish; fi -.PHONY: publish-% - -create-and-push-release-tag: - [ -f '/home/cukebot/configure' ] && /home/cukebot/configure - git commit --gpg-sign --all --message "Release $(LIBNAME) v$(NEW_VERSION)" - git tag --sign "$(LIBNAME)/v$(NEW_VERSION)" -m "Release $(LIBNAME) v$(NEW_VERSION)" - git push --tags -.PHONY: create-and-push-release-tag - -post-release: $(patsubst %,post-release-%,$(LANGUAGES)) -.PHONY: post-release - -post-release: commit-and-push-post-release - -post-release-%: % - if [[ -d $< ]]; then cd $< && make post-release; fi -.PHONY: post-release-% - -commit-and-push-post-release: -ifdef NEW_VERSION - git push --tags - git commit --gpg-sign --all --message "Post release $(LIBNAME) v$(NEW_VERSION)" 2> /dev/null || true - git push -else - @echo -e "\033[0;31mNEW_VERSION is not defined.\033[0m" - exit 1 -endif -.PHONY: commit-and-push-post-release - -clean: $(patsubst %,clean-%,$(LANGUAGES)) -.PHONY: clean - -clean-%: % - if [[ -d $< ]]; then cd $< && make clean; fi -.PHONY: clean-% diff --git a/language-server/javascript/.gitignore b/language-server/javascript/.gitignore deleted file mode 100644 index 385b67bb27c..00000000000 --- a/language-server/javascript/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -dist/ -.idea/ -.nyc_output/ -coverage/ -node_modules/ -yarn.lock -package-lock.json -*.log -.deps -.tested* -.linted -.built* -.compared -.codegen -acceptance/ -storybook-static -*-go -*.iml -.vscode-test diff --git a/language-server/javascript/.mocharc.json b/language-server/javascript/.mocharc.json deleted file mode 100644 index d5055eb10d0..00000000000 --- a/language-server/javascript/.mocharc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], - "extension": ["ts", "tsx"], - "recursive": true, - "timeout": 10000 -} diff --git a/language-server/javascript/.rsync b/language-server/javascript/.rsync deleted file mode 100644 index 5592adbd0c2..00000000000 --- a/language-server/javascript/.rsync +++ /dev/null @@ -1,2 +0,0 @@ -../../LICENSE LICENSE -../../.templates/javascript/ . diff --git a/language-server/javascript/LICENSE b/language-server/javascript/LICENSE deleted file mode 100644 index 725ba9f4ac7..00000000000 --- a/language-server/javascript/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/language-server/javascript/Makefile b/language-server/javascript/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/language-server/javascript/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/language-server/javascript/README.md b/language-server/javascript/README.md deleted file mode 100644 index acd57807ed2..00000000000 --- a/language-server/javascript/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Cucumber Language Server - -A [Language Server](https://langserver.org/) for Cucumber. - -This language server provides most of the functionality offered by the -[Cucumber Visual Studio Code Extension](../../vscode/javascript). - -It may also be used to power other editors. - -## Supported features - -See [Cucumber Language Service](../../language-service/javascript) diff --git a/language-server/javascript/bin/cucumber-language-server.js b/language-server/javascript/bin/cucumber-language-server.js deleted file mode 100755 index 64bbaa12145..00000000000 --- a/language-server/javascript/bin/cucumber-language-server.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -require('source-map-support').install() -require('../dist/src/server') diff --git a/language-server/javascript/default.mk b/language-server/javascript/default.mk deleted file mode 100644 index b04d59c4a2b..00000000000 --- a/language-server/javascript/default.mk +++ /dev/null @@ -1,87 +0,0 @@ -SHELL := /usr/bin/env bash -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -TYPESCRIPT_SOURCE_FILES = $(sort $(call rwildcard,src test,*.ts *.tsx)) -PRIVATE = $(shell node -e "console.log(require('./package.json').private)") -IS_TESTDATA = $(findstring -testdata,${CURDIR}) -NPM_MODULE = $(shell cat package.json | jq .name --raw-output) - -default: .tested -.PHONY: default - -../../node_modules ../../package-lock.json: package.json - cd ../.. && npm install - -.codegen: - touch $@ - -.tested: .tested-npm .built - -.built: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - pushd ../.. && \ - npm run build && \ - popd && \ - touch $@ - -.tested-npm: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - npm run test - touch $@ - -pre-release: clean update-version update-dependencies default -.PHONY: pre-release - -update-dependencies: ../../node_modules ../../package-lock.json - ../../node_modules/.bin/npm-check-updates --upgrade --reject hast-util-sanitize,@types/node,react-markdown,rehype-raw,rehype-sanitize,remark-gfm -.PHONY: update-dependencies - -update-version: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifdef NEW_VERSION - npm --no-git-tag-version --allow-same-version version "$(NEW_VERSION)" - # Update all npm packages that depend on us - pushd ../.. && \ - ./scripts/npm-each update_npm_dependency_if_exists package.json "$(NPM_MODULE)" "$(NEW_VERSION)" -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -endif -.PHONY: update-version - -publish: .codegen -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (true,$(PRIVATE)) - npm publish --access public -else - @echo "Not publishing private npm module" -endif -endif -.PHONY: publish - -post-release: -.PHONY: post-release - -clean: clean-javascript -.PHONY: clean - -clean-javascript: - rm -rf .deps .codegen .tested* coverage dist acceptance -.PHONY: clean-javascript - -clobber: clean - rm -rf node_modules ../../node_modules -.PHONY: clobber - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/language-server/javascript/package.json b/language-server/javascript/package.json deleted file mode 100644 index 261b33fbaae..00000000000 --- a/language-server/javascript/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@cucumber/language-server", - "version": "0.2.0", - "description": "Cucumber Language Server", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", - "bin": { - "cucumber-language-server": "bin/cucumber-language-server.js" - }, - "scripts": { - "test": "mocha", - "prepublishOnly": "tsc --build tsconfig.build.json" - }, - "repository": { - "type": "git", - "url": "git://github.com/cucumber/common.git" - }, - "keywords": [ - "cucumber", - "lsp" - ], - "author": "Cucumber Limited ", - "license": "MIT", - "bugs": { - "url": "https://github.com/cucumber/common/issues" - }, - "homepage": "https://github.com/cucumber/common#readme", - "devDependencies": { - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "txtgen": "2.2.8", - "ts-node": "10.3.0", - "typescript": "4.4.4" - }, - "dependencies": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@cucumber/gherkin-utils": "^7.0.0", - "@cucumber/language-service": "^0.2.0", - "@cucumber/messages": "^17.1.1", - "@cucumber/suggest": "^0.0.4", - "source-map-support": "0.5.20", - "vscode-languageserver": "7.0.0", - "vscode-languageserver-textdocument": "1.0.2" - } -} diff --git a/language-server/javascript/src/CucumberInfoStream.ts b/language-server/javascript/src/CucumberInfoStream.ts deleted file mode 100644 index 0d2275fd046..00000000000 --- a/language-server/javascript/src/CucumberInfoStream.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Transform, TransformCallback } from 'stream' -import { Envelope } from '@cucumber/messages' -import { CucumberInfoBuilder } from '@cucumber/language-service' - -export class CucumberInfoStream extends Transform { - private readonly builder = new CucumberInfoBuilder() - - constructor() { - super({ objectMode: true }) - } - - _transform(envelope: Envelope, _: BufferEncoding, callback: TransformCallback) { - this.builder.processEnvelope(envelope) - callback() - } - - _flush(callback: TransformCallback) { - const cucumberInfo = this.builder.build() - callback(null, cucumberInfo) - } -} diff --git a/language-server/javascript/src/makeCucumberInfo.ts b/language-server/javascript/src/makeCucumberInfo.ts deleted file mode 100644 index 0efab7d50f3..00000000000 --- a/language-server/javascript/src/makeCucumberInfo.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { spawn } from 'child_process' -import { pipeline, Writable } from 'stream' -import { NdjsonToMessageStream } from '@cucumber/message-streams' -import { CucumberInfo } from '@cucumber/language-service' -import { CucumberInfoStream } from './CucumberInfoStream' - -export function makeCucumberInfo(command: string, args: string[]): Promise { - const cucumber = spawn(command, args) - - const stderr: Buffer[] = [] - - return new Promise((resolve, reject) => { - cucumber.on('error', reject) - cucumber.on('close', (code, signal) => { - if (signal) { - reject(new Error(`Received signal ${signal}`)) - } - // https://github.com/cucumber/cucumber-js/issues/1768 - if (code === 1 || code === 0) { - return resolve(null) - } - reject( - new Error(`Exited with status ${code}. STDERR:\n${Buffer.concat(stderr).toString('utf8')}`) - ) - }) - - pipeline( - cucumber.stderr, - new Writable({ - write(chunk: Buffer, _, callback) { - stderr.push(chunk) - callback() - }, - }), - (err) => err && reject(err) - ) - - let cucumberInfo: CucumberInfo = null - pipeline( - cucumber.stdout, - new NdjsonToMessageStream(), - new CucumberInfoStream(), - new Writable({ - objectMode: true, - write(_cucumberInfo: CucumberInfo, encoding, callback) { - cucumberInfo = _cucumberInfo - callback() - }, - }), - (err) => { - if (err) return reject(err) - resolve(cucumberInfo) - } - ) - }) -} diff --git a/language-server/javascript/src/server.ts b/language-server/javascript/src/server.ts deleted file mode 100644 index b31a18b7898..00000000000 --- a/language-server/javascript/src/server.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { - CompletionItem, - createConnection, - DidChangeConfigurationNotification, - InitializeParams, - InitializeResult, - ProposedFeatures, - SemanticTokensParams, - TextDocumentPositionParams, - TextDocuments, - TextDocumentSyncKind, - TextEdit, -} from 'vscode-languageserver/node' - -import { TextDocument } from 'vscode-languageserver-textdocument' -import { Index, jsSearchIndex } from '@cucumber/suggest' -import { - getGherkinCompletionItems, - getGherkinDiagnostics, - getGherkinSemanticTokens, - getGherkinFormattingEdits, - semanticTokenModifiers, - semanticTokenTypes, -} from '@cucumber/language-service' -import { Expression } from '@cucumber/cucumber-expressions' -import { makeCucumberInfo } from './makeCucumberInfo' - -// Create a connection for the server, using Node's IPC as a transport. -// Also include all preview / proposed LSP features. -const connection = createConnection(ProposedFeatures.all) - -// Create a simple text document manager. -const documents: TextDocuments = new TextDocuments(TextDocument) - -type IndexAndExpressions = { - expressions: readonly Expression[] - index: Index -} - -let indexAndExpressions: IndexAndExpressions - -let hasConfigurationCapability = false -let hasWorkspaceFolderCapability = false -let hasDiagnosticRelatedInformationCapability = false - -connection.onInitialize(async (params: InitializeParams) => { - const capabilities = params.capabilities - - // Does the client support the `workspace/configuration` request? - // If not, we fall back using global settings. - hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration) - hasWorkspaceFolderCapability = !!( - capabilities.workspace && !!capabilities.workspace.workspaceFolders - ) - hasDiagnosticRelatedInformationCapability = !!( - capabilities.textDocument && - capabilities.textDocument.publishDiagnostics && - capabilities.textDocument.publishDiagnostics.relatedInformation - ) - - const semanticTokensSupport = - params.capabilities.textDocument && params.capabilities.textDocument.semanticTokens - - const result: InitializeResult = { - capabilities: { - textDocumentSync: TextDocumentSyncKind.Incremental, - // Tell the client that this server supports code completion. - completionProvider: { - resolveProvider: false, - }, - semanticTokensProvider: semanticTokensSupport - ? { - full: { - delta: false, - }, - legend: { - tokenTypes: semanticTokenTypes, - tokenModifiers: semanticTokenModifiers, - }, - } - : undefined, - documentFormattingProvider: true, - }, - } - if (hasWorkspaceFolderCapability) { - result.capabilities.workspace = { - workspaceFolders: { - supported: true, - }, - } - } - indexAndExpressions = await makeIndexAndExpressions() - return result -}) - -connection.onInitialized(() => { - if (hasConfigurationCapability) { - // Register for all configuration changes. - connection.client.register(DidChangeConfigurationNotification.type, undefined) - } - if (hasWorkspaceFolderCapability) { - connection.workspace.onDidChangeWorkspaceFolders((_event) => { - connection.console.log('Workspace folder change event received.') - }) - } - connection.console.log('Cucumber Language server initialized') - updateIndexAndExpressions() -}) - -connection.onDidChangeConfiguration(() => { - documents.all().forEach(validateGherkinDocument) -}) - -// The content of a text document has changed. This event is emitted -// when the text document first opened or when its content has changed. -documents.onDidChangeContent((change) => { - updateIndexAndExpressionsDebounce() - validateGherkinDocument(change.document) -}) - -let updateTimer: NodeJS.Timer - -function updateIndexAndExpressionsDebounce() { - if (updateTimer) clearTimeout(updateTimer) - updateTimer = setTimeout(updateIndexAndExpressions, 5000) -} - -function updateIndexAndExpressions() { - makeIndexAndExpressions() - .then((_indexAndExpressions) => { - indexAndExpressions = _indexAndExpressions - }) - .catch((err) => connection.console.error('Failed to make Cucumber Info: ' + err.message)) -} - -async function makeIndexAndExpressions(): Promise { - const cucumberInfo = await makeCucumberInfo(process.execPath, [ - './node_modules/.bin/cucumber-js', - '--dry-run', - '--format', - 'message', - ]) - return { - index: jsSearchIndex(cucumberInfo.stepDocuments), - expressions: cucumberInfo.expressions, - } -} - -function validateGherkinDocument(textDocument: TextDocument): void { - const diagnostics = getGherkinDiagnostics(textDocument.getText(), indexAndExpressions.expressions) - connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }) -} - -connection.onCompletion((textDocumentPosition: TextDocumentPositionParams): CompletionItem[] => { - const gherkinSource = documents.get(textDocumentPosition.textDocument.uri).getText() - return getGherkinCompletionItems( - gherkinSource, - textDocumentPosition.position.line, - indexAndExpressions.index - ) -}) - -connection.onCompletionResolve((item) => item) - -connection.languages.semanticTokens.on((semanticTokenParams: SemanticTokensParams) => { - const gherkinSource = documents.get(semanticTokenParams.textDocument.uri).getText() - return getGherkinSemanticTokens(gherkinSource, indexAndExpressions.expressions) -}) - -connection.onDocumentFormatting(async (params): Promise => { - const gherkinSource = documents.get(params.textDocument.uri).getText() - return getGherkinFormattingEdits(gherkinSource) -}) - -documents.listen(connection) - -connection.listen() diff --git a/language-server/javascript/test/CucumberInfoStream.test.ts b/language-server/javascript/test/CucumberInfoStream.test.ts deleted file mode 100644 index 72d96f09bd0..00000000000 --- a/language-server/javascript/test/CucumberInfoStream.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { pipeline as pipelineCb, Writable } from 'stream' -import { promisify } from 'util' -import fs from 'fs' -import { NdjsonToMessageStream } from '@cucumber/message-streams' -import assert from 'assert' -import { StepDocument } from '@cucumber/suggest' -import { CucumberInfoStream } from '../src/CucumberInfoStream' -import { CucumberInfo } from '@cucumber/language-service' - -const pipeline = promisify(pipelineCb) - -describe('CucumberInfoStream', () => { - it('builds CucumberInfo from a message stream with parameter types', async () => { - const readStream = fs.createReadStream(__dirname + '/fixtures/suggest.ndjson', 'utf-8') - let cucumberInfo: CucumberInfo - await pipeline( - readStream, - new NdjsonToMessageStream(), - new CucumberInfoStream(), - new Writable({ - objectMode: true, - write(_cucumberInfo: CucumberInfo, encoding, callback) { - cucumberInfo = _cucumberInfo - callback() - }, - }) - ) - const expectedStepDocuments: Partial[] = [ - { - segments: ['I select the ', ['2nd'], ' snippet'], - suggestion: 'I select the {ordinal} snippet', - }, - { - segments: [ - 'I type ', - ['"I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}"', '"cukes"'], - ], - suggestion: 'I type {string}', - }, - { - segments: [ - 'the LSP snippet should be ', - ['"I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}"', '"cukes"'], - ], - suggestion: 'the LSP snippet should be {string}', - }, - { - segments: ['the following Gherkin step texts exist:'], - suggestion: 'the following Gherkin step texts exist:', - }, - { - segments: ['the following Step Definitions exist:'], - suggestion: 'the following Step Definitions exist:', - }, - { - segments: ['the suggestions should be empty'], - suggestion: 'the suggestions should be empty', - }, - { - segments: ['the suggestions should be:'], - suggestion: 'the suggestions should be:', - }, - ] - assert.deepStrictEqual(cucumberInfo.stepDocuments.map(d => ({segments: d.segments, suggestion: d.suggestion})), expectedStepDocuments) - - const expectedExpressionSources = [ - 'the following Gherkin step texts exist:', - 'the following Step Definitions exist:', - 'I type {string}', - 'I select the {ordinal} snippet', - 'the suggestions should be:', - 'the suggestions should be empty', - 'the LSP snippet should be {string}', - ] - assert.deepStrictEqual( - cucumberInfo.expressions.map((e) => e.source), - expectedExpressionSources - ) - }) -}) diff --git a/language-server/javascript/test/fixtures/messages.ndjson b/language-server/javascript/test/fixtures/messages.ndjson deleted file mode 100644 index 2ca4bd07a09..00000000000 --- a/language-server/javascript/test/fixtures/messages.ndjson +++ /dev/null @@ -1,39 +0,0 @@ -{"meta":{"protocolVersion":"16.0.1","implementation":{"name":"cucumber-js","version":"7.3.0"},"cpu":{"name":"x64"},"os":{"name":"darwin","version":"20.5.0"},"runtime":{"name":"node.js","version":"16.3.0"}}} -{"source":{"data":"Feature: Hear Shout\n\n Shouts have a range of approximately 1000m\n\n Scenario: In range shout is heard\n Given Lucy is at 0, 0\n And Sean is at 0, 900\n When Sean shouts\n Then Lucy should hear Sean\n\n Scenario: Out of range shout is not heard\n Given Lucy is at 0, 0\n And Sean is at 800, 800\n When Sean shouts\n Then Lucy should hear nothing\n","uri":"features/hear_shout.feature","mediaType":"text/x.cucumber.gherkin+plain"}} -{"gherkinDocument":{"feature":{"tags":[],"location":{"line":1,"column":1},"language":"en","keyword":"Feature","name":"Hear Shout","description":" Shouts have a range of approximately 1000m","children":[{"scenario":{"id":"8c7d83bb-9ff2-4c26-8ac2-d3eb2f1ad01d","tags":[],"location":{"line":5,"column":3},"keyword":"Scenario","name":"In range shout is heard","description":"","steps":[{"id":"3a238c6e-e72c-4ee6-9bd5-c424e577fb76","location":{"line":6,"column":5},"keyword":"Given ","text":"Lucy is at 0, 0"},{"id":"59cc32b8-9074-4b5f-8879-dee864e875c0","location":{"line":7,"column":5},"keyword":"And ","text":"Sean is at 0, 900"},{"id":"3759e9f6-3a3e-4632-8efe-154172628cc0","location":{"line":8,"column":5},"keyword":"When ","text":"Sean shouts"},{"id":"63918b08-cded-4ab3-9b1e-866d185c1f53","location":{"line":9,"column":5},"keyword":"Then ","text":"Lucy should hear Sean"}],"examples":[]}},{"scenario":{"id":"cf35f821-a57a-43c3-9760-4c792d3ab0d4","tags":[],"location":{"line":11,"column":3},"keyword":"Scenario","name":"Out of range shout is not heard","description":"","steps":[{"id":"5da47841-def6-4d68-b1a3-56cf09354d3c","location":{"line":12,"column":5},"keyword":"Given ","text":"Lucy is at 0, 0"},{"id":"1972e5f9-56e0-45a0-808f-65c011bbb540","location":{"line":13,"column":5},"keyword":"And ","text":"Sean is at 800, 800"},{"id":"36304215-2917-4829-8e5c-9e3bd1d87c8c","location":{"line":14,"column":5},"keyword":"When ","text":"Sean shouts"},{"id":"077f4be9-9638-42f4-96d7-58cb6d4afef4","location":{"line":15,"column":5},"keyword":"Then ","text":"Lucy should hear nothing"}],"examples":[]}}]},"comments":[],"uri":"features/hear_shout.feature"}} -{"pickle":{"id":"1a7d8c7e-9ce0-4b92-8072-35aea6359a07","uri":"features/hear_shout.feature","astNodeIds":["8c7d83bb-9ff2-4c26-8ac2-d3eb2f1ad01d"],"tags":[],"name":"In range shout is heard","language":"en","steps":[{"id":"e7a5273a-f865-4c6f-8986-7ef0d8e139f1","text":"Lucy is at 0, 0","astNodeIds":["3a238c6e-e72c-4ee6-9bd5-c424e577fb76"]},{"id":"3a1a3656-a595-460a-aa74-c143886e2719","text":"Sean is at 0, 900","astNodeIds":["59cc32b8-9074-4b5f-8879-dee864e875c0"]},{"id":"189f5631-b5f2-436a-bd2b-3ac731e93843","text":"Sean shouts","astNodeIds":["3759e9f6-3a3e-4632-8efe-154172628cc0"]},{"id":"26b1caf8-4954-443e-a0cc-1ea0fddf789d","text":"Lucy should hear Sean","astNodeIds":["63918b08-cded-4ab3-9b1e-866d185c1f53"]}]}} -{"pickle":{"id":"ea5d4352-cc59-4746-ac5a-7f6fbb3fcd0d","uri":"features/hear_shout.feature","astNodeIds":["cf35f821-a57a-43c3-9760-4c792d3ab0d4"],"tags":[],"name":"Out of range shout is not heard","language":"en","steps":[{"id":"ace3fd8a-0fb8-4cca-a8f2-498e41e33b45","text":"Lucy is at 0, 0","astNodeIds":["5da47841-def6-4d68-b1a3-56cf09354d3c"]},{"id":"2ea88ccb-00f1-4198-9903-45cee3f7db0e","text":"Sean is at 800, 800","astNodeIds":["1972e5f9-56e0-45a0-808f-65c011bbb540"]},{"id":"9586ec8f-ad9e-4600-a670-5f0b176941e9","text":"Sean shouts","astNodeIds":["36304215-2917-4829-8e5c-9e3bd1d87c8c"]},{"id":"0c653613-abc2-4f5e-b2e3-5d66d9a9bf04","text":"Lucy should hear nothing","astNodeIds":["077f4be9-9638-42f4-96d7-58cb6d4afef4"]}]}} -{"stepDefinition":{"id":"f920bb09-d2e7-4870-b428-bbfc7b317c72","pattern":{"source":"Lucy is at {int}, {int}","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/shout_steps.js","location":{"line":13}}}} -{"stepDefinition":{"id":"1faf0352-aa32-4deb-bd1f-9ed7dcdf0eb1","pattern":{"source":"Sean is at {int}, {int}","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/shout_steps.js","location":{"line":17}}}} -{"stepDefinition":{"id":"7153c5e8-aef0-4cd3-a935-a8ed8114226b","pattern":{"source":"Sean shouts","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/shout_steps.js","location":{"line":21}}}} -{"stepDefinition":{"id":"f44e44dd-188b-4a37-bd60-aad9ecf41703","pattern":{"source":"Lucy should hear Sean","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/shout_steps.js","location":{"line":25}}}} -{"stepDefinition":{"id":"c0df2d95-a1d8-4332-8fce-488fb72fb9db","pattern":{"source":"Lucy should hear nothing","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/shout_steps.js","location":{"line":29}}}} -{"hook":{"id":"bd3324a0-6ab8-4f5f-9baf-c1c71149c2ed","sourceReference":{"uri":"features/step_definitions/shout_steps.js","location":{"line":9}}}} -{"testRunStarted":{"timestamp":{"seconds":1628282241,"nanos":665000000}}} -{"testCase":{"pickleId":"1a7d8c7e-9ce0-4b92-8072-35aea6359a07","id":"441e2e5f-d26b-44e2-9354-4c8a08cb3e97","testSteps":[{"id":"f8259afd-0cd1-4d32-933e-ecf623d44c69","hookId":"bd3324a0-6ab8-4f5f-9baf-c1c71149c2ed"},{"id":"e2432ba1-5e3d-44d4-a040-a8c85ccebc77","pickleStepId":"e7a5273a-f865-4c6f-8986-7ef0d8e139f1","stepDefinitionIds":["f920bb09-d2e7-4870-b428-bbfc7b317c72"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":11,"value":"0","children":[]},"parameterTypeName":"int"},{"group":{"start":14,"value":"0","children":[]},"parameterTypeName":"int"}]}]},{"id":"1ff8c9ff-34ba-464e-8e78-846f156befde","pickleStepId":"3a1a3656-a595-460a-aa74-c143886e2719","stepDefinitionIds":["1faf0352-aa32-4deb-bd1f-9ed7dcdf0eb1"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":11,"value":"0","children":[]},"parameterTypeName":"int"},{"group":{"start":14,"value":"900","children":[]},"parameterTypeName":"int"}]}]},{"id":"a245ef93-8160-4aa5-88d0-912d78ad4b3c","pickleStepId":"189f5631-b5f2-436a-bd2b-3ac731e93843","stepDefinitionIds":["7153c5e8-aef0-4cd3-a935-a8ed8114226b"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"7fbe4859-744e-454b-8a31-511c8baf11d7","pickleStepId":"26b1caf8-4954-443e-a0cc-1ea0fddf789d","stepDefinitionIds":["f44e44dd-188b-4a37-bd60-aad9ecf41703"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]}]}} -{"testCase":{"pickleId":"ea5d4352-cc59-4746-ac5a-7f6fbb3fcd0d","id":"0f50693a-4d37-475c-93c7-11f2050a714f","testSteps":[{"id":"53d7cec3-a7b0-41be-96d1-6ace96299882","hookId":"bd3324a0-6ab8-4f5f-9baf-c1c71149c2ed"},{"id":"f70010a4-29a9-47ab-bc4b-f0b753d473cb","pickleStepId":"ace3fd8a-0fb8-4cca-a8f2-498e41e33b45","stepDefinitionIds":["f920bb09-d2e7-4870-b428-bbfc7b317c72"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":11,"value":"0","children":[]},"parameterTypeName":"int"},{"group":{"start":14,"value":"0","children":[]},"parameterTypeName":"int"}]}]},{"id":"f1d0a858-bcfd-476f-aec4-b60da1f5ff60","pickleStepId":"2ea88ccb-00f1-4198-9903-45cee3f7db0e","stepDefinitionIds":["1faf0352-aa32-4deb-bd1f-9ed7dcdf0eb1"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":11,"value":"800","children":[]},"parameterTypeName":"int"},{"group":{"start":16,"value":"800","children":[]},"parameterTypeName":"int"}]}]},{"id":"1fe55842-61bd-4347-8c67-9d31c50c7871","pickleStepId":"9586ec8f-ad9e-4600-a670-5f0b176941e9","stepDefinitionIds":["7153c5e8-aef0-4cd3-a935-a8ed8114226b"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"76d209a3-0c29-4e26-a326-22072714f4a0","pickleStepId":"0c653613-abc2-4f5e-b2e3-5d66d9a9bf04","stepDefinitionIds":["c0df2d95-a1d8-4332-8fce-488fb72fb9db"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]}]}} -{"testCaseStarted":{"attempt":0,"testCaseId":"441e2e5f-d26b-44e2-9354-4c8a08cb3e97","id":"24d127c3-4d50-4daf-b370-dd61c6159907","timestamp":{"seconds":1628282241,"nanos":668000000}}} -{"testStepStarted":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"f8259afd-0cd1-4d32-933e-ecf623d44c69","timestamp":{"seconds":1628282241,"nanos":668000000}}} -{"testStepFinished":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"f8259afd-0cd1-4d32-933e-ecf623d44c69","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":668000000}}} -{"testStepStarted":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"e2432ba1-5e3d-44d4-a040-a8c85ccebc77","timestamp":{"seconds":1628282241,"nanos":668000000}}} -{"testStepFinished":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"e2432ba1-5e3d-44d4-a040-a8c85ccebc77","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepStarted":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"1ff8c9ff-34ba-464e-8e78-846f156befde","timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepFinished":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"1ff8c9ff-34ba-464e-8e78-846f156befde","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepStarted":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"a245ef93-8160-4aa5-88d0-912d78ad4b3c","timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepFinished":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"a245ef93-8160-4aa5-88d0-912d78ad4b3c","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepStarted":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"7fbe4859-744e-454b-8a31-511c8baf11d7","timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepFinished":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","testStepId":"7fbe4859-744e-454b-8a31-511c8baf11d7","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testCaseFinished":{"testCaseStartedId":"24d127c3-4d50-4daf-b370-dd61c6159907","timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testCaseStarted":{"attempt":0,"testCaseId":"0f50693a-4d37-475c-93c7-11f2050a714f","id":"1b421bd9-a776-4c26-a858-087bfa96b2b9","timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepStarted":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"53d7cec3-a7b0-41be-96d1-6ace96299882","timestamp":{"seconds":1628282241,"nanos":669000000}}} -{"testStepFinished":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"53d7cec3-a7b0-41be-96d1-6ace96299882","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepStarted":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"f70010a4-29a9-47ab-bc4b-f0b753d473cb","timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepFinished":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"f70010a4-29a9-47ab-bc4b-f0b753d473cb","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepStarted":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"f1d0a858-bcfd-476f-aec4-b60da1f5ff60","timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepFinished":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"f1d0a858-bcfd-476f-aec4-b60da1f5ff60","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepStarted":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"1fe55842-61bd-4347-8c67-9d31c50c7871","timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepFinished":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"1fe55842-61bd-4347-8c67-9d31c50c7871","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepStarted":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"76d209a3-0c29-4e26-a326-22072714f4a0","timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testStepFinished":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","testStepId":"76d209a3-0c29-4e26-a326-22072714f4a0","testStepResult":{"status":"SKIPPED","duration":{"seconds":0,"nanos":0},"willBeRetried":false},"timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testCaseFinished":{"testCaseStartedId":"1b421bd9-a776-4c26-a858-087bfa96b2b9","timestamp":{"seconds":1628282241,"nanos":670000000}}} -{"testRunFinished":{"timestamp":{"seconds":1628282241,"nanos":670000000},"success":true}} diff --git a/language-server/javascript/test/fixtures/suggest.ndjson b/language-server/javascript/test/fixtures/suggest.ndjson deleted file mode 100644 index ca64992d611..00000000000 --- a/language-server/javascript/test/fixtures/suggest.ndjson +++ /dev/null @@ -1,63 +0,0 @@ -{"meta":{"protocolVersion":"16.0.1","implementation":{"name":"cucumber-js","version":"7.3.1"},"cpu":{"name":"x64"},"os":{"name":"darwin","version":"20.5.0"},"runtime":{"name":"node.js","version":"16.3.0"}}} -{"source":{"data":"# Cucumber Suggest\n\nThis is a library that can be used to build Gherkin step auto-complete in editors.\nIt does not implement a UI component, but it can provide *suggestions* to an editor's auto-complete component.\n\nHere is an example of a [Monaco editor](https://microsoft.github.io/monaco-editor/) using this library:\n\n![Monaco](Monaco.gif)\n\n## Architecture\n\nThe suggest system consists of multiple components, each of which may run in a different process.\n\n```\n+--------------------+ +---------------+ +-------+\n| Cucumber/Regular | | | | |\n| Expressions | | Gherkin Steps | | |\n| (Step definitions) | | | | |\n+----------+---------+ +-------+-------+ | |\n | | | |\n | | | |\n +-------------+-----------+ | |\n | | |\n | | |\n +---------v----------+ | |\n | buildStepDocuments | | |\n | (Transform) | | ETL |\n +---------+----------+ | |\n | | |\n | | |\n | | |\n +-------v--------+ | |\n | Step Documents | | |\n +-------+--------+ | |\n | | |\n | | |\n | | |\n +-----v-----+ | |\n | Storage | | |\n +-----^-----+ +-------+\n |\n +--------+-------+\n | |\n +---+----+ +----+----+\n | LSP | | Editor |\n | Server | | Plugin |\n +---^----+ +----^----+\n | |\n | |\n +---+----+ +----+----+\n | LSP | | Editor |\n | Editor | |(Non-LSP)|\n +--------+ +---------+\n```\n\n### ETL process for Step Documents\n\nAt the top right of the diagram is an [ETL](https://en.wikipedia.org/wiki/Extract,_transform,_load) process. Implementing\na full ETL process is currently beyond the scope of this library - it only implements the **transform** step. A full ETL\nprocess would do the following:\n\nFirst, **extract** [Cucumber Expressions](../../cucumber-expressions) and Regular Expressions from step definitions,\nand the text from Gherkin Steps. This can be done by parsing [Cucumber Messages](../../messages) from Cucumber dry-runs.\n\nSecond, **transform** the expressions and steps to [Step Documents](#step-documents) using the `buildStepDocuments` function.\n\nThird, **load** the *Step Documents* into a persistent storage. This can be a [search index](https://en.wikipedia.org/wiki/Search_engine_indexing),\nor some other form of persistent storage (such as a file in a file system or a database).\nSee the [Search Index](#search-index) section below for more details.\n\n### Editor suggest\n\nThis library does not implement any editor functionality, but it *does define* the *Step Document* data structure\non which editor auto-complete can be implemented. There are two ways to build support for an editor.\n\nWhat is common for both approaches is that they will query a search index.\n\nThe `StepDocument`s coming back from an index search can be converted to an\n[LSP Completion Snippet](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax)\nusing the `lspCompletionSnippet` function.\n\nFor example, this `StepDocument`:\n\n`[\"I have \", [\"42\", \"54\"], \" cukes in my \", [\"basket\", \"belly\"]]`\n\nbecomes the following LSP Completion Snippet:\n\n`I have ${1|42,54|} cukes in my ${2|basket,belly|}`\n\n### LSP\n\nWith the [LSP](https://microsoft.github.io/language-server-protocol/) approach, the storage is typically a \n[search index](https://en.wikipedia.org/wiki/Search_engine_indexing).\nWhen the user invokes the auto-complete command in the editor, the editor will send a \n[completion request](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_completion) \nto the LSP server. The LSP server queries the search index, and uses the returned *Step Documents* to build the response to\nthe completion request.\n\n### Dedicated plugin\n\nWith the dedicated plugin approach, the storage is typically a file system or a database.\nWhen the editor plugin is loaded, it will fetch the *Step Documents* from the storage in raw form,\nand add them to an embedded (in-memory) search index.\n\nWhen the user invokes the auto-complete command in the editor, the editor plugin will query the in-memory search index\nand use the editor's native API to present the suggestions.\n\n## Examples\n\nThe examples below illustrate how the library works from the perspective of a user, with a full stack. The ETL process\nand the index all run in-memory.\n\n(Yep, this README.md file is executed by Cucumber.js)!\n\nThe suggestions in the examples use the\n[LSP Completion Snippet syntax](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax)\nto represent search results.\n\n### Rule: Suggestions are based on both steps and step definitions\n\n#### Example: Two suggestions from Cucumber Expression\n\n* Given the following Gherkin step texts exist:\n | Gherkin Step |\n | ------------------------------ |\n | I have 23 cukes in my belly |\n | I have 11 cukes on my table |\n | I have 11 cukes in my suitcase |\n | the weather forecast is rain |\n* And the following Step Definitions exist:\n | Cucumber Expression |\n | ---------------------------------- |\n | I have {int} cukes in/on my {word} |\n | the weather forecast is {word} |\n* When I type \"cukes\"\n* Then the suggestions should be:\n | Suggestion |\n | ------------------------------- |\n | I have {int} cukes in my {word} |\n | I have {int} cukes on my {word} |\n\n#### Example: One suggestion from Regular Expression\n\n* Given the following Gherkin step texts exist:\n | Gherkin Step |\n | -------------------------------- |\n | I have 23 cukes in my \"belly\" |\n | I have 11 cukes in my \"suitcase\" |\n* And the following Step Definitions exist:\n | Regular Expression |\n | ----------------------------------------------- |\n | /I have (\\d\\d) cukes in my \"(belly\\|suitcase)\"/ |\n* When I type \"cukes\"\n* Then the suggestions should be:\n | Suggestion |\n | -------------------------- |\n | I have {} cukes in my \"{}\" |\n\nThe parameters are not named, because the regular expression doesn't have named capture groups.\n\n### Rule: Parameter choices are based on all steps\n\nThe available choices for a parameter type are built from *all* the choices\nencoutered for that parameter type, across steps.\n\n#### Example: {int} and {word} choices are build from three steps\n\n* Given the following Gherkin step texts exist:\n | Gherkin Step |\n | -------------------------------- |\n | I have 23 cukes in my belly |\n | I have 11 cukes on my table |\n | there are 17 apples on the tree |\n* And the following Step Definitions exist:\n | Cucumber Expression |\n | ------------------------------------ |\n | I have {int} cukes in/on my {word} |\n | there are {int} apples on the {word} |\n* When I type \"cukes\"\n* And I select the 2nd snippet\n* Then the LSP snippet should be \"I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}\"\n\nLSP-compatible editors such as\n[Monaco Editor](https://microsoft.github.io/monaco-editor/) or\n[Visual Studio Code](https://code.visualstudio.com/) can display these suggestions\nas `I have {int} cukes in my {word}` and `I have {int} cukes on my {word}`.\n\nWhen the user chooses a suggestion, the editor will focus the editor at the first parameter and\nlet the user choose between `11`, `17` or `23` (or type a custom value). When the user has made a choice,\nthe focus moves to the next parameter and suggests `belly`, `table` or `tree`.\n\n### Rule: Suggestions must have a matching step definition\n\nIt isn't enough to type something that matches an existing step -\nthe existing step must also have a matching step definition.\n\n#### Example: Nothing matches\n\n* Given the following Gherkin step texts exist:\n | Gherkin Step |\n | --------------------------- |\n | I have 42 cukes in my belly |\n* And the following Step Definitions exist:\n | Step Definition Expression |\n | -------------------------- |\n | Something else |\n* When I type \"cukes\"\n* Then the suggestions should be empty\n\n### Step Documents\n\nA *Step Document* is a data structure with the following properties:\n\n* `suggestion` - what the user will see when the editor presents a suggestion\n* `segments` - what the editor will use to *insert* a suggestion, along with choices for parameters\n\nA *Step Document* can be represented as a JSON document. Here is an example:\n\n {\n \"suggestion\": \"I have {int} cukes in my belly\",\n \"segments\": [\"I have \", [\"42\", \"54\"], \" cukes in my \", [\"basket\", \"belly\"]]\n }\n\nThe `segments` field is an array of `Text` (a string) or `Choices` (an array of strings).\nThe purpose of the `Choices` is to present the user with *possible* values for step parameters.\nThe segments above could be used to write the following steps texts:\n\n* `I have 42 cukes in my basket`\n* `I have 54 cukes in my basket`\n* `I have 42 cukes in my belly`\n* `I have 54 cukes in my belly`\n\nWhen a *Step Document* is added to a search index, it should use the `segments` field for indexing.\n\nThe `segments` field can also be used to build an\n[LSP Completion Snippet](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax)\n\n### Search Index\n\nEach `StepDocument` can be added to a *search index*, either during the ETL process, or inside a dedicated editor plugin. \nThe search index will return matching `StepDocument`s for a search term.\n\nThe index is a function with the following signature:\n\n`type Index = (text: string) => readonly StepDocument[]`\n\nThere are three experimental search index implementations in this library:\n\n* `fuseIndex` (based on [Fuse.js](https://fusejs.io/))\n* `jsSearchIndex` (based on [JS Search](http://bvaughn.github.io/js-search/))\n* `bruteForceIndex` (based on [String.prototype.includes()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes))\n\nThey are currently only in the test code, but one of them might be promoted to be part of the library at a later stage\nwhen we have tried them out on real data.\n\nSee the `Index.test.ts` contract test for more details about how the indexes behave.\n\n### Not in this library\n\nIt's beyond the scope of this library to implement an LSP server.\nAn LSP server could be built on this library though.\n\nIt is also beyond the scope of this library to provide any kind of UI component.\nFor LSP-capable editors this isn't even needed - it is built into the editor.\n\nFor non-LSP capable editors written in JavaScript (such as CodeMirror) it would be possible to\nbuild an auto-complete plugin that uses one of the `Index` implementations in this library.\nBuilding the `StepDocument`s could happen on a server somewhere, and could be transferred to\nthe browser over HTTP/JSON.\n","uri":"README.md","mediaType":"text/x.cucumber.gherkin+markdown"}} -{"gherkinDocument":{"feature":{"tags":[],"location":{"line":1,"column":1},"language":"en","name":"# Cucumber Suggest","description":"```\n+--------------------+ +---------------+ +-------+\n| Cucumber/Regular | | | | |\n| Expressions | | Gherkin Steps | | |\n| (Step definitions) | | | | |\n+----------+---------+ +-------+-------+ | |\n | | | |\n | | | |\n +-------------+-----------+ | |\n | | |\n | | |\n +---------v----------+ | |\n | buildStepDocuments | | |\n | (Transform) | | ETL |\n +---------+----------+ | |\n | | |\n | | |\n | | |\n +-------v--------+ | |\n | Step Documents | | |\n +-------+--------+ | |\n | | |\n | | |\n | | |\n +-----v-----+ | |\n | Storage | | |\n +-----^-----+ +-------+\n |\n +--------+-------+\n | |\n +---+----+ +----+----+\n | LSP | | Editor |\n | Server | | Plugin |\n +---^----+ +----^----+\n | |\n | |\n +---+----+ +----+----+\n | LSP | | Editor |\n | Editor | |(Non-LSP)|\n +--------+ +---------+\n```\n\n### ETL process for Step Documents\n\nAt the top right of the diagram is an [ETL](https://en.wikipedia.org/wiki/Extract,_transform,_load) process. Implementing\na full ETL process is currently beyond the scope of this library - it only implements the **transform** step. A full ETL\nprocess would do the following:\n\nFirst, **extract** [Cucumber Expressions](../../cucumber-expressions) and Regular Expressions from step definitions,\nand the text from Gherkin Steps. This can be done by parsing [Cucumber Messages](../../messages) from Cucumber dry-runs.\n\nSecond, **transform** the expressions and steps to [Step Documents](#step-documents) using the `buildStepDocuments` function.\n\nThird, **load** the *Step Documents* into a persistent storage. This can be a [search index](https://en.wikipedia.org/wiki/Search_engine_indexing),\nor some other form of persistent storage (such as a file in a file system or a database).\nSee the [Search Index](#search-index) section below for more details.\n\n### Editor suggest\n\nThis library does not implement any editor functionality, but it *does define* the *Step Document* data structure\non which editor auto-complete can be implemented. There are two ways to build support for an editor.\n\nWhat is common for both approaches is that they will query a search index.\n\nThe `StepDocument`s coming back from an index search can be converted to an\n[LSP Completion Snippet](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax)\nusing the `lspCompletionSnippet` function.\n\nFor example, this `StepDocument`:\n\n`[\"I have \", [\"42\", \"54\"], \" cukes in my \", [\"basket\", \"belly\"]]`\n\nbecomes the following LSP Completion Snippet:\n\n`I have ${1|42,54|} cukes in my ${2|basket,belly|}`\n\n### LSP\n\nWith the [LSP](https://microsoft.github.io/language-server-protocol/) approach, the storage is typically a \n[search index](https://en.wikipedia.org/wiki/Search_engine_indexing).\nWhen the user invokes the auto-complete command in the editor, the editor will send a \n[completion request](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_completion) \nto the LSP server. The LSP server queries the search index, and uses the returned *Step Documents* to build the response to\nthe completion request.\n\n### Dedicated plugin\n\nWith the dedicated plugin approach, the storage is typically a file system or a database.\nWhen the editor plugin is loaded, it will fetch the *Step Documents* from the storage in raw form,\nand add them to an embedded (in-memory) search index.\n\nWhen the user invokes the auto-complete command in the editor, the editor plugin will query the in-memory search index\nand use the editor's native API to present the suggestions.\n\n## Examples\n\nThe examples below illustrate how the library works from the perspective of a user, with a full stack. The ETL process\nand the index all run in-memory.\n\n(Yep, this README.md file is executed by Cucumber.js)!\n\nThe suggestions in the examples use the\n[LSP Completion Snippet syntax](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax)\nto represent search results.","children":[{"rule":{"id":"b8759cfc-df6d-47b5-8d4e-c173b385ae65","location":{"line":119,"column":5},"keyword":"Rule","name":"Suggestions are based on both steps and step definitions","description":"","children":[{"scenario":{"id":"5a67f15b-a967-477f-8d02-8f7d0a06a656","tags":[],"location":{"line":121,"column":6},"keyword":"Example","name":"Two suggestions from Cucumber Expression","description":"","steps":[{"id":"61b072e6-0a30-484b-a8cc-957a2f9d3e23","location":{"line":123,"column":3},"keyword":"Given ","text":"the following Gherkin step texts exist:","dataTable":{"location":{"line":124,"column":3},"rows":[{"id":"2cb47494-61ad-4d42-ab1c-9ba842fc594e","location":{"line":124,"column":3},"cells":[{"location":{"line":124,"column":5},"value":"Gherkin Step"}]},{"id":"32ae561b-faeb-40f9-b3ed-1238e002d29d","location":{"line":126,"column":3},"cells":[{"location":{"line":126,"column":5},"value":"I have 23 cukes in my belly"}]},{"id":"0f21af80-cca9-4a46-be8c-6e57a8673882","location":{"line":127,"column":3},"cells":[{"location":{"line":127,"column":5},"value":"I have 11 cukes on my table"}]},{"id":"c6de230a-6427-42b0-a637-e05aa2d8b370","location":{"line":128,"column":3},"cells":[{"location":{"line":128,"column":5},"value":"I have 11 cukes in my suitcase"}]},{"id":"6b7c8dd5-6a93-4102-a56c-0ae91aa01611","location":{"line":129,"column":3},"cells":[{"location":{"line":129,"column":5},"value":"the weather forecast is rain"}]}]}},{"id":"2ca4f619-7c38-4d0f-8db2-7f5e44ff157a","location":{"line":130,"column":3},"keyword":"And ","text":"the following Step Definitions exist:","dataTable":{"location":{"line":131,"column":3},"rows":[{"id":"9bdec28e-adc8-4717-8e4b-1e844831d8fc","location":{"line":131,"column":3},"cells":[{"location":{"line":131,"column":5},"value":"Cucumber Expression"}]},{"id":"70241631-da5f-4fd0-950f-04ba43b11a3d","location":{"line":133,"column":3},"cells":[{"location":{"line":133,"column":5},"value":"I have {int} cukes in/on my {word}"}]},{"id":"cdfcac31-f2f4-43dd-8001-840afef89f77","location":{"line":134,"column":3},"cells":[{"location":{"line":134,"column":5},"value":"the weather forecast is {word}"}]}]}},{"id":"0e6423e3-6774-4c4d-a74d-b802655419ab","location":{"line":135,"column":3},"keyword":"When ","text":"I type \"cukes\""},{"id":"b314cb66-347d-44bd-a3ec-32a6e3bd6dfc","location":{"line":136,"column":3},"keyword":"Then ","text":"the suggestions should be:","dataTable":{"location":{"line":137,"column":3},"rows":[{"id":"db0a21d6-f842-4b79-8d01-3060c5400a3b","location":{"line":137,"column":3},"cells":[{"location":{"line":137,"column":5},"value":"Suggestion"}]},{"id":"8c5a9ee7-3169-4b14-9189-675b9913de15","location":{"line":139,"column":3},"cells":[{"location":{"line":139,"column":5},"value":"I have {int} cukes in my {word}"}]},{"id":"c2f33f2d-2578-4523-b7d4-cff577f12d6d","location":{"line":140,"column":3},"cells":[{"location":{"line":140,"column":5},"value":"I have {int} cukes on my {word}"}]}]}}],"examples":[]}},{"scenario":{"id":"f0c0e37a-a4af-4f7a-8f30-9a22dd18b196","tags":[],"location":{"line":142,"column":6},"keyword":"Example","name":"One suggestion from Regular Expression","description":"","steps":[{"id":"32ac7c49-4626-43a5-a62c-1e562a8a7288","location":{"line":144,"column":3},"keyword":"Given ","text":"the following Gherkin step texts exist:","dataTable":{"location":{"line":145,"column":3},"rows":[{"id":"cae1e479-e809-47ed-9847-ce4f91c7bcac","location":{"line":145,"column":3},"cells":[{"location":{"line":145,"column":5},"value":"Gherkin Step"}]},{"id":"884017ac-ddbe-4a74-a62d-ea296addecc6","location":{"line":147,"column":3},"cells":[{"location":{"line":147,"column":5},"value":"I have 23 cukes in my \"belly\""}]},{"id":"22f72fe6-12cf-4f31-a2ce-b21fff4bc4d9","location":{"line":148,"column":3},"cells":[{"location":{"line":148,"column":5},"value":"I have 11 cukes in my \"suitcase\""}]}]}},{"id":"f5ffc2d2-3c98-4ac3-8f7e-a24ff154d857","location":{"line":149,"column":3},"keyword":"And ","text":"the following Step Definitions exist:","dataTable":{"location":{"line":150,"column":3},"rows":[{"id":"e3ba4f32-576e-497d-abed-72494b36bef5","location":{"line":150,"column":3},"cells":[{"location":{"line":150,"column":5},"value":"Regular Expression"}]},{"id":"7f31ca87-5cfa-416e-8a7b-b0aa1a7a2a13","location":{"line":152,"column":3},"cells":[{"location":{"line":152,"column":5},"value":"/I have (\\d\\d) cukes in my \"(belly|suitcase)\"/"}]}]}},{"id":"72d1607d-552b-4b37-a255-fe4b734ac27d","location":{"line":153,"column":3},"keyword":"When ","text":"I type \"cukes\""},{"id":"b01bde54-332c-4f0d-be93-32478381435d","location":{"line":154,"column":3},"keyword":"Then ","text":"the suggestions should be:","dataTable":{"location":{"line":155,"column":3},"rows":[{"id":"9104bc19-92a6-4a3a-9420-b4d949c81b6a","location":{"line":155,"column":3},"cells":[{"location":{"line":155,"column":5},"value":"Suggestion"}]},{"id":"11beeb05-0e99-4918-a9b6-31d9cc3dfca3","location":{"line":157,"column":3},"cells":[{"location":{"line":157,"column":5},"value":"I have {} cukes in my \"{}\""}]}]}}],"examples":[]}}],"tags":[]}},{"rule":{"id":"857e23da-9deb-4662-93b6-b0a3fbd96e1d","location":{"line":161,"column":5},"keyword":"Rule","name":"Parameter choices are based on all steps","description":"","children":[{"scenario":{"id":"9ddbc641-f622-4f0d-b4b9-c0d9c742bafb","tags":[],"location":{"line":166,"column":6},"keyword":"Example","name":"{int} and {word} choices are build from three steps","description":"","steps":[{"id":"b0e42663-9a3c-47ac-b0d4-f832b44f430b","location":{"line":168,"column":3},"keyword":"Given ","text":"the following Gherkin step texts exist:","dataTable":{"location":{"line":169,"column":3},"rows":[{"id":"4916a097-95f1-45c7-aebc-858e1da56d50","location":{"line":169,"column":3},"cells":[{"location":{"line":169,"column":5},"value":"Gherkin Step"}]},{"id":"339b0a2c-9dbe-48a4-bdaa-dc9490eb033d","location":{"line":171,"column":3},"cells":[{"location":{"line":171,"column":5},"value":"I have 23 cukes in my belly"}]},{"id":"96fa4ab3-81db-45eb-b31b-8bb625c97efe","location":{"line":172,"column":3},"cells":[{"location":{"line":172,"column":5},"value":"I have 11 cukes on my table"}]},{"id":"8ee7ad05-e7c8-43ad-9fc3-9cd0d143a041","location":{"line":173,"column":3},"cells":[{"location":{"line":173,"column":5},"value":"there are 17 apples on the tree"}]}]}},{"id":"fd0ff74b-00d0-41a0-959f-6afd3dced0a2","location":{"line":174,"column":3},"keyword":"And ","text":"the following Step Definitions exist:","dataTable":{"location":{"line":175,"column":3},"rows":[{"id":"3c11a1ba-e8ed-4f64-b43c-8da5f5413546","location":{"line":175,"column":3},"cells":[{"location":{"line":175,"column":5},"value":"Cucumber Expression"}]},{"id":"a93d1f44-156e-4cc4-9296-176100b58c4f","location":{"line":177,"column":3},"cells":[{"location":{"line":177,"column":5},"value":"I have {int} cukes in/on my {word}"}]},{"id":"d16ba7f1-e584-4a51-ace3-590133067acc","location":{"line":178,"column":3},"cells":[{"location":{"line":178,"column":5},"value":"there are {int} apples on the {word}"}]}]}},{"id":"7127b950-0ae9-44c7-ae14-3f9edf6d6391","location":{"line":179,"column":3},"keyword":"When ","text":"I type \"cukes\""},{"id":"9db0cc93-416e-4baf-90f5-aa87638377c4","location":{"line":180,"column":3},"keyword":"And ","text":"I select the 2nd snippet"},{"id":"b99f85d1-2a1b-4986-b153-73fcb28e6fd4","location":{"line":181,"column":3},"keyword":"Then ","text":"the LSP snippet should be \"I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}\""}],"examples":[]}}],"tags":[]}},{"rule":{"id":"32d38d18-d0f7-40b8-bca8-c5b5035a4c48","location":{"line":192,"column":5},"keyword":"Rule","name":"Suggestions must have a matching step definition","description":"","children":[{"scenario":{"id":"0f4e6378-2957-4954-b864-fd0cd7acb66b","tags":[],"location":{"line":197,"column":6},"keyword":"Example","name":"Nothing matches","description":"","steps":[{"id":"68c74927-3a93-4d5f-9095-19c8d8e60b4b","location":{"line":199,"column":3},"keyword":"Given ","text":"the following Gherkin step texts exist:","dataTable":{"location":{"line":200,"column":3},"rows":[{"id":"c0eda36c-4b84-491e-92fd-9c6d8065aa00","location":{"line":200,"column":3},"cells":[{"location":{"line":200,"column":5},"value":"Gherkin Step"}]},{"id":"7f81eaec-4864-4f72-8613-4d2b7d6e851e","location":{"line":202,"column":3},"cells":[{"location":{"line":202,"column":5},"value":"I have 42 cukes in my belly"}]}]}},{"id":"da1663bd-9052-4b5f-b100-a0820121d928","location":{"line":203,"column":3},"keyword":"And ","text":"the following Step Definitions exist:","dataTable":{"location":{"line":204,"column":3},"rows":[{"id":"a6439f7c-d436-4a97-bf92-6bc7c3d83bc3","location":{"line":204,"column":3},"cells":[{"location":{"line":204,"column":5},"value":"Step Definition Expression"}]},{"id":"dc32b50b-5110-4e39-90d1-5bdca1961419","location":{"line":206,"column":3},"cells":[{"location":{"line":206,"column":5},"value":"Something else"}]}]}},{"id":"57adbdef-795b-4a9d-b31a-06275fc1cb8d","location":{"line":207,"column":3},"keyword":"When ","text":"I type \"cukes\""},{"id":"c5731fb0-3eb3-495e-9ac0-c522d5c56c56","location":{"line":208,"column":3},"keyword":"Then ","text":"the suggestions should be empty"}],"examples":[]}}],"tags":[]}}]},"comments":[],"uri":"README.md"}} -{"pickle":{"id":"e3dc573e-e469-4229-9411-b55de9912276","uri":"README.md","astNodeIds":["5a67f15b-a967-477f-8d02-8f7d0a06a656"],"tags":[],"name":"Two suggestions from Cucumber Expression","language":"en","steps":[{"id":"76fc30b5-0ba4-49e5-b13f-a6e0042ae6c2","text":"the following Gherkin step texts exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Gherkin Step"}]},{"cells":[{"value":"I have 23 cukes in my belly"}]},{"cells":[{"value":"I have 11 cukes on my table"}]},{"cells":[{"value":"I have 11 cukes in my suitcase"}]},{"cells":[{"value":"the weather forecast is rain"}]}]}},"astNodeIds":["61b072e6-0a30-484b-a8cc-957a2f9d3e23"]},{"id":"584fe1d9-98dc-4fba-bedc-95ec3ad80fe9","text":"the following Step Definitions exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Cucumber Expression"}]},{"cells":[{"value":"I have {int} cukes in/on my {word}"}]},{"cells":[{"value":"the weather forecast is {word}"}]}]}},"astNodeIds":["2ca4f619-7c38-4d0f-8db2-7f5e44ff157a"]},{"id":"8052c87b-eba2-4fc4-ab25-b4c40ee06bb2","text":"I type \"cukes\"","astNodeIds":["0e6423e3-6774-4c4d-a74d-b802655419ab"]},{"id":"f4e9a058-6c66-419a-8c48-f3c2c798866e","text":"the suggestions should be:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Suggestion"}]},{"cells":[{"value":"I have {int} cukes in my {word}"}]},{"cells":[{"value":"I have {int} cukes on my {word}"}]}]}},"astNodeIds":["b314cb66-347d-44bd-a3ec-32a6e3bd6dfc"]}]}} -{"pickle":{"id":"54fae48d-4496-4ccf-a93a-f7aa55c031a5","uri":"README.md","astNodeIds":["f0c0e37a-a4af-4f7a-8f30-9a22dd18b196"],"tags":[],"name":"One suggestion from Regular Expression","language":"en","steps":[{"id":"4e1963ac-fe43-454b-9e36-41300a5e93b9","text":"the following Gherkin step texts exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Gherkin Step"}]},{"cells":[{"value":"I have 23 cukes in my \"belly\""}]},{"cells":[{"value":"I have 11 cukes in my \"suitcase\""}]}]}},"astNodeIds":["32ac7c49-4626-43a5-a62c-1e562a8a7288"]},{"id":"15209eaf-0d7c-406f-9be1-b37d766680a5","text":"the following Step Definitions exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Regular Expression"}]},{"cells":[{"value":"/I have (\\d\\d) cukes in my \"(belly|suitcase)\"/"}]}]}},"astNodeIds":["f5ffc2d2-3c98-4ac3-8f7e-a24ff154d857"]},{"id":"0a24607e-175b-41c0-9d74-03d5b69675e5","text":"I type \"cukes\"","astNodeIds":["72d1607d-552b-4b37-a255-fe4b734ac27d"]},{"id":"0e58cf04-32a5-4c40-8796-0f0dc64a931a","text":"the suggestions should be:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Suggestion"}]},{"cells":[{"value":"I have {} cukes in my \"{}\""}]}]}},"astNodeIds":["b01bde54-332c-4f0d-be93-32478381435d"]}]}} -{"pickle":{"id":"096db359-f2e5-4873-9315-3e180e3244ff","uri":"README.md","astNodeIds":["9ddbc641-f622-4f0d-b4b9-c0d9c742bafb"],"tags":[],"name":"{int} and {word} choices are build from three steps","language":"en","steps":[{"id":"2349f69f-5133-481e-89cf-dc17fe2e9789","text":"the following Gherkin step texts exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Gherkin Step"}]},{"cells":[{"value":"I have 23 cukes in my belly"}]},{"cells":[{"value":"I have 11 cukes on my table"}]},{"cells":[{"value":"there are 17 apples on the tree"}]}]}},"astNodeIds":["b0e42663-9a3c-47ac-b0d4-f832b44f430b"]},{"id":"8e5526da-fbc0-4246-bab4-d67c706d0883","text":"the following Step Definitions exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Cucumber Expression"}]},{"cells":[{"value":"I have {int} cukes in/on my {word}"}]},{"cells":[{"value":"there are {int} apples on the {word}"}]}]}},"astNodeIds":["fd0ff74b-00d0-41a0-959f-6afd3dced0a2"]},{"id":"e6872fa8-fc8b-4cd3-a8c9-e92a5449e629","text":"I type \"cukes\"","astNodeIds":["7127b950-0ae9-44c7-ae14-3f9edf6d6391"]},{"id":"7ccda357-613c-47b7-ae4d-e2c58db393ac","text":"I select the 2nd snippet","astNodeIds":["9db0cc93-416e-4baf-90f5-aa87638377c4"]},{"id":"0cceb816-8508-4a79-8c51-8ba1b7b52356","text":"the LSP snippet should be \"I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}\"","astNodeIds":["b99f85d1-2a1b-4986-b153-73fcb28e6fd4"]}]}} -{"pickle":{"id":"a9bfec1e-c45e-4e90-ac03-a2d51b04c3d4","uri":"README.md","astNodeIds":["0f4e6378-2957-4954-b864-fd0cd7acb66b"],"tags":[],"name":"Nothing matches","language":"en","steps":[{"id":"6fac1622-2230-4f66-9f1a-76f8c438c94f","text":"the following Gherkin step texts exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Gherkin Step"}]},{"cells":[{"value":"I have 42 cukes in my belly"}]}]}},"astNodeIds":["68c74927-3a93-4d5f-9095-19c8d8e60b4b"]},{"id":"18087378-7a25-4825-a318-278add2e4328","text":"the following Step Definitions exist:","argument":{"dataTable":{"rows":[{"cells":[{"value":"Step Definition Expression"}]},{"cells":[{"value":"Something else"}]}]}},"astNodeIds":["da1663bd-9052-4b5f-b100-a0820121d928"]},{"id":"07a8b42f-4e20-4a5a-8b36-c852741fe29e","text":"I type \"cukes\"","astNodeIds":["57adbdef-795b-4a9d-b31a-06275fc1cb8d"]},{"id":"d1ccde5b-f0b6-46dc-9e1e-69628a5f2157","text":"the suggestions should be empty","astNodeIds":["c5731fb0-3eb3-495e-9ac0-c522d5c56c56"]}]}} -{"parameterType":{"id":"bdb25c42-bfb1-4f5c-bbc7-1f3c940ba6c5","name":"ordinal","preferForRegularExpressionMatch":false,"regularExpressions":["(\\d+)(?:st|nd|rd|th)"],"useForSnippets":true}} -{"stepDefinition":{"id":"546ac0e7-2dca-496f-ba93-403d4d7303d4","pattern":{"source":"the following Gherkin step texts exist:","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/steps.ts","location":{"line":9}}}} -{"stepDefinition":{"id":"2ac1c870-0e02-4cec-a2a4-e7b941faf4c7","pattern":{"source":"the following Step Definitions exist:","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/steps.ts","location":{"line":13}}}} -{"stepDefinition":{"id":"af28bd8d-12de-4f36-aff0-e40f9407443e","pattern":{"source":"I type {string}","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/steps.ts","location":{"line":27}}}} -{"stepDefinition":{"id":"56a8779c-1bd5-4800-b8d7-c4a1417fb940","pattern":{"source":"I select the {ordinal} snippet","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/steps.ts","location":{"line":33}}}} -{"stepDefinition":{"id":"21adfb3e-7832-4a40-843d-22a8dee76cb0","pattern":{"source":"the suggestions should be:","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/steps.ts","location":{"line":37}}}} -{"stepDefinition":{"id":"9a952550-7218-413c-a3c8-9d4ff8dd2857","pattern":{"source":"the suggestions should be empty","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/steps.ts","location":{"line":45}}}} -{"stepDefinition":{"id":"9845cc58-140c-472b-9387-e6da77305039","pattern":{"source":"the LSP snippet should be {string}","type":"CUCUMBER_EXPRESSION"},"sourceReference":{"uri":"features/step_definitions/steps.ts","location":{"line":49}}}} -{"testRunStarted":{"timestamp":{"seconds":1628589261,"nanos":125000000}}} -{"testCase":{"pickleId":"e3dc573e-e469-4229-9411-b55de9912276","id":"8f460faa-adb9-400f-96e1-b9f670a178ab","testSteps":[{"id":"251bbfde-a65a-40b4-8115-7e0bfed0b571","pickleStepId":"76fc30b5-0ba4-49e5-b13f-a6e0042ae6c2","stepDefinitionIds":["546ac0e7-2dca-496f-ba93-403d4d7303d4"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"3911a022-9617-486b-a19a-38844f4b50b7","pickleStepId":"584fe1d9-98dc-4fba-bedc-95ec3ad80fe9","stepDefinitionIds":["2ac1c870-0e02-4cec-a2a4-e7b941faf4c7"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"e9bb60e7-5840-4d98-97c0-11ac1c3157d1","pickleStepId":"8052c87b-eba2-4fc4-ab25-b4c40ee06bb2","stepDefinitionIds":["af28bd8d-12de-4f36-aff0-e40f9407443e"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":7,"value":"\"cukes\"","children":[{"start":8,"value":"cukes","children":[{"children":[]}]},{"children":[{"children":[]}]}]},"parameterTypeName":"string"}]}]},{"id":"60a80819-2f26-4903-8adf-b2fc971a7bc8","pickleStepId":"f4e9a058-6c66-419a-8c48-f3c2c798866e","stepDefinitionIds":["21adfb3e-7832-4a40-843d-22a8dee76cb0"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]}]}} -{"testCase":{"pickleId":"54fae48d-4496-4ccf-a93a-f7aa55c031a5","id":"30c234ed-8d65-4055-9543-07140107c788","testSteps":[{"id":"c09fe512-d49a-4b25-9673-cefa36c829b4","pickleStepId":"4e1963ac-fe43-454b-9e36-41300a5e93b9","stepDefinitionIds":["546ac0e7-2dca-496f-ba93-403d4d7303d4"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"6f3d59e5-c417-4b79-8dd2-e317a1fc3284","pickleStepId":"15209eaf-0d7c-406f-9be1-b37d766680a5","stepDefinitionIds":["2ac1c870-0e02-4cec-a2a4-e7b941faf4c7"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"141825f8-5fa3-474a-9b4e-9d6f0a6aec68","pickleStepId":"0a24607e-175b-41c0-9d74-03d5b69675e5","stepDefinitionIds":["af28bd8d-12de-4f36-aff0-e40f9407443e"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":7,"value":"\"cukes\"","children":[{"start":8,"value":"cukes","children":[{"children":[]}]},{"children":[{"children":[]}]}]},"parameterTypeName":"string"}]}]},{"id":"80524e55-d013-4521-882f-38af2909e671","pickleStepId":"0e58cf04-32a5-4c40-8796-0f0dc64a931a","stepDefinitionIds":["21adfb3e-7832-4a40-843d-22a8dee76cb0"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]}]}} -{"testCase":{"pickleId":"096db359-f2e5-4873-9315-3e180e3244ff","id":"4bc9cb3f-a0d6-403d-9f74-a21d3fd535d0","testSteps":[{"id":"5d30bd0e-79a2-4f41-ab25-4f1c1271cb7f","pickleStepId":"2349f69f-5133-481e-89cf-dc17fe2e9789","stepDefinitionIds":["546ac0e7-2dca-496f-ba93-403d4d7303d4"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"dc993ad8-5ae1-4e2b-9f9d-62432d4f495f","pickleStepId":"8e5526da-fbc0-4246-bab4-d67c706d0883","stepDefinitionIds":["2ac1c870-0e02-4cec-a2a4-e7b941faf4c7"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"998c54e6-d003-4ea8-ac43-1d2244567ece","pickleStepId":"e6872fa8-fc8b-4cd3-a8c9-e92a5449e629","stepDefinitionIds":["af28bd8d-12de-4f36-aff0-e40f9407443e"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":7,"value":"\"cukes\"","children":[{"start":8,"value":"cukes","children":[{"children":[]}]},{"children":[{"children":[]}]}]},"parameterTypeName":"string"}]}]},{"id":"d83130b9-4ee6-45a7-86b4-0a92ffc82757","pickleStepId":"7ccda357-613c-47b7-ae4d-e2c58db393ac","stepDefinitionIds":["56a8779c-1bd5-4800-b8d7-c4a1417fb940"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":13,"value":"2nd","children":[{"start":13,"value":"2","children":[]}]},"parameterTypeName":"ordinal"}]}]},{"id":"dc606206-d11e-4ff9-9d0e-eb05dbeaa683","pickleStepId":"0cceb816-8508-4a79-8c51-8ba1b7b52356","stepDefinitionIds":["9845cc58-140c-472b-9387-e6da77305039"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":26,"value":"\"I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}\"","children":[{"start":27,"value":"I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}","children":[{"children":[]}]},{"children":[{"children":[]}]}]},"parameterTypeName":"string"}]}]}]}} -{"testCase":{"pickleId":"a9bfec1e-c45e-4e90-ac03-a2d51b04c3d4","id":"2aa62b9a-d38a-4647-b571-0aaa52a88607","testSteps":[{"id":"38120b7f-4ca0-4fb4-830b-4a440cb4a163","pickleStepId":"6fac1622-2230-4f66-9f1a-76f8c438c94f","stepDefinitionIds":["546ac0e7-2dca-496f-ba93-403d4d7303d4"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"65aeb712-b12a-476f-9ca6-2e37e280eb35","pickleStepId":"18087378-7a25-4825-a318-278add2e4328","stepDefinitionIds":["2ac1c870-0e02-4cec-a2a4-e7b941faf4c7"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]},{"id":"ab1fc79c-61c4-498a-8058-7da4b737a1b6","pickleStepId":"07a8b42f-4e20-4a5a-8b36-c852741fe29e","stepDefinitionIds":["af28bd8d-12de-4f36-aff0-e40f9407443e"],"stepMatchArgumentsLists":[{"stepMatchArguments":[{"group":{"start":7,"value":"\"cukes\"","children":[{"start":8,"value":"cukes","children":[{"children":[]}]},{"children":[{"children":[]}]}]},"parameterTypeName":"string"}]}]},{"id":"a2f51a5c-efa6-4ec5-9ff3-f31f0d4683c0","pickleStepId":"d1ccde5b-f0b6-46dc-9e1e-69628a5f2157","stepDefinitionIds":["9a952550-7218-413c-a3c8-9d4ff8dd2857"],"stepMatchArgumentsLists":[{"stepMatchArguments":[]}]}]}} -{"testCaseStarted":{"attempt":0,"testCaseId":"8f460faa-adb9-400f-96e1-b9f670a178ab","id":"508d6d04-20db-448b-a4ad-cec5679bffd7","timestamp":{"seconds":1628589261,"nanos":143000000}}} -{"testStepStarted":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"251bbfde-a65a-40b4-8115-7e0bfed0b571","timestamp":{"seconds":1628589261,"nanos":143000000}}} -{"testStepFinished":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"251bbfde-a65a-40b4-8115-7e0bfed0b571","testStepResult":{"duration":{"seconds":0,"nanos":1000000},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":144000000}}} -{"testStepStarted":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"3911a022-9617-486b-a19a-38844f4b50b7","timestamp":{"seconds":1628589261,"nanos":144000000}}} -{"testStepFinished":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"3911a022-9617-486b-a19a-38844f4b50b7","testStepResult":{"duration":{"seconds":0,"nanos":1000000},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":145000000}}} -{"testStepStarted":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"e9bb60e7-5840-4d98-97c0-11ac1c3157d1","timestamp":{"seconds":1628589261,"nanos":145000000}}} -{"testStepFinished":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"e9bb60e7-5840-4d98-97c0-11ac1c3157d1","testStepResult":{"duration":{"seconds":0,"nanos":4000000},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":149000000}}} -{"testStepStarted":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"60a80819-2f26-4903-8adf-b2fc971a7bc8","timestamp":{"seconds":1628589261,"nanos":149000000}}} -{"testStepFinished":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","testStepId":"60a80819-2f26-4903-8adf-b2fc971a7bc8","testStepResult":{"duration":{"seconds":0,"nanos":1000000},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":150000000}}} -{"testCaseFinished":{"testCaseStartedId":"508d6d04-20db-448b-a4ad-cec5679bffd7","timestamp":{"seconds":1628589261,"nanos":150000000}}} -{"testCaseStarted":{"attempt":0,"testCaseId":"30c234ed-8d65-4055-9543-07140107c788","id":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","timestamp":{"seconds":1628589261,"nanos":151000000}}} -{"testStepStarted":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"c09fe512-d49a-4b25-9673-cefa36c829b4","timestamp":{"seconds":1628589261,"nanos":151000000}}} -{"testStepFinished":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"c09fe512-d49a-4b25-9673-cefa36c829b4","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":151000000}}} -{"testStepStarted":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"6f3d59e5-c417-4b79-8dd2-e317a1fc3284","timestamp":{"seconds":1628589261,"nanos":151000000}}} -{"testStepFinished":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"6f3d59e5-c417-4b79-8dd2-e317a1fc3284","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":151000000}}} -{"testStepStarted":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"141825f8-5fa3-474a-9b4e-9d6f0a6aec68","timestamp":{"seconds":1628589261,"nanos":151000000}}} -{"testStepFinished":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"141825f8-5fa3-474a-9b4e-9d6f0a6aec68","testStepResult":{"duration":{"seconds":0,"nanos":2000000},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testStepStarted":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"80524e55-d013-4521-882f-38af2909e671","timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testStepFinished":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","testStepId":"80524e55-d013-4521-882f-38af2909e671","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testCaseFinished":{"testCaseStartedId":"837e7aa2-51d7-4437-a5fe-25c29cfd76e5","timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testCaseStarted":{"attempt":0,"testCaseId":"4bc9cb3f-a0d6-403d-9f74-a21d3fd535d0","id":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testStepStarted":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"5d30bd0e-79a2-4f41-ab25-4f1c1271cb7f","timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testStepFinished":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"5d30bd0e-79a2-4f41-ab25-4f1c1271cb7f","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testStepStarted":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"dc993ad8-5ae1-4e2b-9f9d-62432d4f495f","timestamp":{"seconds":1628589261,"nanos":153000000}}} -{"testStepFinished":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"dc993ad8-5ae1-4e2b-9f9d-62432d4f495f","testStepResult":{"duration":{"seconds":0,"nanos":1000000},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":154000000}}} -{"testStepStarted":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"998c54e6-d003-4ea8-ac43-1d2244567ece","timestamp":{"seconds":1628589261,"nanos":154000000}}} -{"testStepFinished":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"998c54e6-d003-4ea8-ac43-1d2244567ece","testStepResult":{"duration":{"seconds":0,"nanos":2000000},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":156000000}}} -{"testStepStarted":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"d83130b9-4ee6-45a7-86b4-0a92ffc82757","timestamp":{"seconds":1628589261,"nanos":156000000}}} -{"testStepFinished":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"d83130b9-4ee6-45a7-86b4-0a92ffc82757","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":156000000}}} -{"testStepStarted":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"dc606206-d11e-4ff9-9d0e-eb05dbeaa683","timestamp":{"seconds":1628589261,"nanos":156000000}}} -{"testStepFinished":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","testStepId":"dc606206-d11e-4ff9-9d0e-eb05dbeaa683","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":156000000}}} -{"testCaseFinished":{"testCaseStartedId":"0495b0c9-7c7a-432a-be3c-cf77d1d5b447","timestamp":{"seconds":1628589261,"nanos":156000000}}} -{"testCaseStarted":{"attempt":0,"testCaseId":"2aa62b9a-d38a-4647-b571-0aaa52a88607","id":"6ff14eb9-25a7-49a9-8164-7026e5534a47","timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepStarted":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"38120b7f-4ca0-4fb4-830b-4a440cb4a163","timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepFinished":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"38120b7f-4ca0-4fb4-830b-4a440cb4a163","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepStarted":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"65aeb712-b12a-476f-9ca6-2e37e280eb35","timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepFinished":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"65aeb712-b12a-476f-9ca6-2e37e280eb35","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepStarted":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"ab1fc79c-61c4-498a-8058-7da4b737a1b6","timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepFinished":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"ab1fc79c-61c4-498a-8058-7da4b737a1b6","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepStarted":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"a2f51a5c-efa6-4ec5-9ff3-f31f0d4683c0","timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testStepFinished":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","testStepId":"a2f51a5c-efa6-4ec5-9ff3-f31f0d4683c0","testStepResult":{"duration":{"seconds":0,"nanos":0},"status":"PASSED","willBeRetried":false},"timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testCaseFinished":{"testCaseStartedId":"6ff14eb9-25a7-49a9-8164-7026e5534a47","timestamp":{"seconds":1628589261,"nanos":157000000}}} -{"testRunFinished":{"timestamp":{"seconds":1628589261,"nanos":158000000},"success":true}} diff --git a/language-server/javascript/test/makeCucumberInfo.test.ts b/language-server/javascript/test/makeCucumberInfo.test.ts deleted file mode 100644 index bcf5d970592..00000000000 --- a/language-server/javascript/test/makeCucumberInfo.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import assert from 'assert' -import fs from 'fs' -import { makeCucumberInfo } from '../src/makeCucumberInfo' - -describe('makeCucumberInfo', () => { - it('builds CucumberInfo', async () => { - const messages = fs.readFileSync(__dirname + '/fixtures/suggest.ndjson', 'utf-8') - const cucumberInfo = await makeCucumberInfo('echo', [messages]) - assert.strictEqual(cucumberInfo.stepDocuments.length, 7) - assert.strictEqual(cucumberInfo.expressions.length, 7) - }) -}) diff --git a/language-server/javascript/tsconfig.build.json b/language-server/javascript/tsconfig.build.json deleted file mode 100644 index 98f530f48a3..00000000000 --- a/language-server/javascript/tsconfig.build.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "dist" - }, - "include": [ - "package.json", - "src", - "test" - ] -} diff --git a/language-server/javascript/tsconfig.json b/language-server/javascript/tsconfig.json deleted file mode 100644 index 4082f16a5d9..00000000000 --- a/language-server/javascript/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../tsconfig.json" -} diff --git a/language-service/.rsync b/language-service/.rsync deleted file mode 100644 index ea5a5de249b..00000000000 --- a/language-service/.rsync +++ /dev/null @@ -1 +0,0 @@ -../.templates/default.mk default.mk diff --git a/language-service/CHANGELOG.md b/language-service/CHANGELOG.md deleted file mode 100644 index 1c821950515..00000000000 --- a/language-service/CHANGELOG.md +++ /dev/null @@ -1,59 +0,0 @@ -# CHANGE LOG -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/) -and this project adheres to [Semantic Versioning](http://semver.org/). - ----- -## [Unreleased] - -### Added - -### Changed - -### Deprecated - -### Removed - -### Fixed - -## [0.2.0] - 2021-09-15 - -### Changed - -* Upgrade to `@cucumber/cucumber-expressions 13.0.1` - -## [0.1.1] - 2021-09-08 - -### Fixed - -* Fix insertion of completion items so it always replaces the full line rather than appending to the end. - ([#1737](https://github.com/cucumber/common/pull/1737) - [aslakhellesoy]) - -## [0.1.0] - 2021-09-07 - -### Added - -* Add `CucumberInfoBuilder` and `CucumberInfo` - ([#1734](https://github.com/cucumber/common/pull/1734) - [aslakhellesoy]) -* Document Formatting - ([#1732](https://github.com/cucumber/common/pull/1732) - [aslakhellesoy]) - -## [0.0.1] - 2021-09-02 - -### Added - -* First release - - -[Unreleased]: https://github.com/cucumber/common/compare/language-service/v0.2.0...main -[0.2.0]: https://github.com/cucumber/common/compare/language-service/v0.1.1...v0.2.0 -[0.1.1]: https://github.com/cucumber/common/compare/language-service/v0.1.0...v0.1.1 -[0.1.0]: https://github.com/cucumber/common/compare/language-service/v0.0.1...v0.1.0 -[0.0.1]: https://github.com/cucumber/common/tree/language-service/v0.0.1 - - -[aslakhellesoy]: https://github.com/aslakhellesoy diff --git a/language-service/Makefile b/language-service/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/language-service/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/language-service/README.md b/language-service/README.md deleted file mode 100644 index 8f80d31daa4..00000000000 --- a/language-service/README.md +++ /dev/null @@ -1 +0,0 @@ -See [javascript/README.md](javascript/README.md) diff --git a/language-service/default.mk b/language-service/default.mk deleted file mode 100644 index a0d8dd28fb4..00000000000 --- a/language-service/default.mk +++ /dev/null @@ -1,89 +0,0 @@ -# Please update /.templates/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE = $(shell which apk 2> /dev/null) -LIBNAME = $(shell basename $$(pwd)) -LANGUAGES ?= $(wildcard */) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: $(patsubst %,default-%,$(LANGUAGES)) -.PHONY: default - -default-%: % - if [[ -d $< ]]; then cd $< && make default; fi -.PHONY: default-% - -# Need to declare these phonies to avoid errors for packages without a particular language -.PHONY: c dotnet go java javascript objective-c perl python ruby - -update-dependencies: $(patsubst %,update-dependencies-%,$(LANGUAGES)) -.PHONY: update-dependencies - -update-dependencies-%: % - if [[ -d $< ]]; then cd $< && make update-dependencies; fi -.PHONY: update-dependencies-% - -update-changelog: -ifdef NEW_VERSION - cat CHANGELOG.md | ../scripts/update_changelog.sh $(NEW_VERSION) > CHANGELOG.md.tmp - mv CHANGELOG.md.tmp CHANGELOG.md -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-changelog - -pre-release: update-changelog $(patsubst %,pre-release-%,$(LANGUAGES)) -.PHONY: pre-release - -pre-release-%: % - if [[ -d $< ]]; then cd $< && make pre-release; fi -.PHONY: pre-release-% - -release: publish -.PHONY: release - -publish: create-and-push-release-tag $(patsubst %,publish-%,$(LANGUAGES)) -.PHONY: publish - -publish-%: % - if [[ -d $< ]]; then cd $< && make publish; fi -.PHONY: publish-% - -create-and-push-release-tag: - [ -f '/home/cukebot/configure' ] && /home/cukebot/configure - git commit --gpg-sign --all --message "Release $(LIBNAME) v$(NEW_VERSION)" - git tag --sign "$(LIBNAME)/v$(NEW_VERSION)" -m "Release $(LIBNAME) v$(NEW_VERSION)" - git push --tags -.PHONY: create-and-push-release-tag - -post-release: $(patsubst %,post-release-%,$(LANGUAGES)) -.PHONY: post-release - -post-release: commit-and-push-post-release - -post-release-%: % - if [[ -d $< ]]; then cd $< && make post-release; fi -.PHONY: post-release-% - -commit-and-push-post-release: -ifdef NEW_VERSION - git push --tags - git commit --gpg-sign --all --message "Post release $(LIBNAME) v$(NEW_VERSION)" 2> /dev/null || true - git push -else - @echo -e "\033[0;31mNEW_VERSION is not defined.\033[0m" - exit 1 -endif -.PHONY: commit-and-push-post-release - -clean: $(patsubst %,clean-%,$(LANGUAGES)) -.PHONY: clean - -clean-%: % - if [[ -d $< ]]; then cd $< && make clean; fi -.PHONY: clean-% diff --git a/language-service/javascript/.gitignore b/language-service/javascript/.gitignore deleted file mode 100644 index 385b67bb27c..00000000000 --- a/language-service/javascript/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -dist/ -.idea/ -.nyc_output/ -coverage/ -node_modules/ -yarn.lock -package-lock.json -*.log -.deps -.tested* -.linted -.built* -.compared -.codegen -acceptance/ -storybook-static -*-go -*.iml -.vscode-test diff --git a/language-service/javascript/.mocharc.json b/language-service/javascript/.mocharc.json deleted file mode 100644 index d5055eb10d0..00000000000 --- a/language-service/javascript/.mocharc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], - "extension": ["ts", "tsx"], - "recursive": true, - "timeout": 10000 -} diff --git a/language-service/javascript/.rsync b/language-service/javascript/.rsync deleted file mode 100644 index 5592adbd0c2..00000000000 --- a/language-service/javascript/.rsync +++ /dev/null @@ -1,2 +0,0 @@ -../../LICENSE LICENSE -../../.templates/javascript/ . diff --git a/language-service/javascript/LICENSE b/language-service/javascript/LICENSE deleted file mode 100644 index 725ba9f4ac7..00000000000 --- a/language-service/javascript/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/language-service/javascript/Makefile b/language-service/javascript/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/language-service/javascript/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/language-service/javascript/README.md b/language-service/javascript/README.md deleted file mode 100644 index f572dd6e30c..00000000000 --- a/language-service/javascript/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Cucumber Language Service - -This library implements the services used by [Cucumber Language Server](../../language-server/javascript) -and [Cucumber Monaco](../../monaco/javascript). - -## Supported features - -- [x] Formatting / pretty printing -- [x] Handle parse errors -- [x] Code completion - - [x] Steps - - [ ] Generic Gherkin keywords -- [x] Syntax validation - - [x] Parse errors - - [x] Undefined steps - - [ ] Ambiguous steps - - [x] Ignore Scenario Outline steps -- [x] [Semantic tokens](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_semanticTokens) (syntax highlighting) - - [x] Gherkin keywords - - [x] Gherkin step parameters - - [x] DocStrings - - [x] Data tables - - [x] Tags - - [x] Scenario Outline step - - [x] Examples tables headers diff --git a/language-service/javascript/default.mk b/language-service/javascript/default.mk deleted file mode 100644 index b04d59c4a2b..00000000000 --- a/language-service/javascript/default.mk +++ /dev/null @@ -1,87 +0,0 @@ -SHELL := /usr/bin/env bash -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -TYPESCRIPT_SOURCE_FILES = $(sort $(call rwildcard,src test,*.ts *.tsx)) -PRIVATE = $(shell node -e "console.log(require('./package.json').private)") -IS_TESTDATA = $(findstring -testdata,${CURDIR}) -NPM_MODULE = $(shell cat package.json | jq .name --raw-output) - -default: .tested -.PHONY: default - -../../node_modules ../../package-lock.json: package.json - cd ../.. && npm install - -.codegen: - touch $@ - -.tested: .tested-npm .built - -.built: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - pushd ../.. && \ - npm run build && \ - popd && \ - touch $@ - -.tested-npm: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - npm run test - touch $@ - -pre-release: clean update-version update-dependencies default -.PHONY: pre-release - -update-dependencies: ../../node_modules ../../package-lock.json - ../../node_modules/.bin/npm-check-updates --upgrade --reject hast-util-sanitize,@types/node,react-markdown,rehype-raw,rehype-sanitize,remark-gfm -.PHONY: update-dependencies - -update-version: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifdef NEW_VERSION - npm --no-git-tag-version --allow-same-version version "$(NEW_VERSION)" - # Update all npm packages that depend on us - pushd ../.. && \ - ./scripts/npm-each update_npm_dependency_if_exists package.json "$(NPM_MODULE)" "$(NEW_VERSION)" -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -endif -.PHONY: update-version - -publish: .codegen -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (true,$(PRIVATE)) - npm publish --access public -else - @echo "Not publishing private npm module" -endif -endif -.PHONY: publish - -post-release: -.PHONY: post-release - -clean: clean-javascript -.PHONY: clean - -clean-javascript: - rm -rf .deps .codegen .tested* coverage dist acceptance -.PHONY: clean-javascript - -clobber: clean - rm -rf node_modules ../../node_modules -.PHONY: clobber - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/language-service/javascript/package.json b/language-service/javascript/package.json deleted file mode 100644 index bd97d56f0b4..00000000000 --- a/language-service/javascript/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@cucumber/language-service", - "version": "0.2.0", - "description": "Cucumber Language Service", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", - "scripts": { - "test": "mocha", - "prepublishOnly": "tsc --build tsconfig.build.json" - }, - "repository": { - "type": "git", - "url": "git://github.com/cucumber/common.git" - }, - "keywords": [ - "cucumber", - "lsp", - "language service" - ], - "author": "Cucumber Limited ", - "license": "MIT", - "bugs": { - "url": "https://github.com/cucumber/common/issues" - }, - "homepage": "https://github.com/cucumber/common#readme", - "devDependencies": { - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "ts-node": "10.3.0", - "typescript": "4.4.4" - }, - "dependencies": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@cucumber/gherkin": "^22.0.0", - "@cucumber/gherkin-utils": "^7.0.0", - "@cucumber/messages": "^17.1.1", - "@cucumber/suggest": "^0.0.4", - "source-map-support": "0.5.20", - "vscode-languageserver-types": "3.17.0-next.4" - } -} diff --git a/language-service/javascript/src/CucumberInfo.ts b/language-service/javascript/src/CucumberInfo.ts deleted file mode 100644 index da28ede23f6..00000000000 --- a/language-service/javascript/src/CucumberInfo.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Expression, ExpressionFactory, ParameterType, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' -import { Envelope, StepDefinitionPatternType } from '@cucumber/messages' -import { walkGherkinDocument } from '@cucumber/gherkin-utils' -import { buildStepDocuments, StepDocument } from '@cucumber/suggest' - -export type CucumberInfo = { - stepDocuments: readonly StepDocument[] - expressions: readonly Expression[] -} - -/** - * Builds CucumberInfo from Cucumber Messages. - */ -export class CucumberInfoBuilder { - private readonly parameterTypeRegistry = new ParameterTypeRegistry() - private readonly expressionFactory = new ExpressionFactory(this.parameterTypeRegistry) - - private readonly expressions: Expression[] = [] - private stepTexts: string[] = [] - - processEnvelope(envelope: Envelope): void { - if (envelope.parameterType) { - const { name, regularExpressions, useForSnippets, preferForRegularExpressionMatch } = - envelope.parameterType - this.parameterTypeRegistry.defineParameterType( - new ParameterType( - name, - regularExpressions, - Object, - () => undefined, - useForSnippets, - preferForRegularExpressionMatch - ) - ) - } - if (envelope.stepDefinition) { - const expr = - envelope.stepDefinition.pattern.type === StepDefinitionPatternType.CUCUMBER_EXPRESSION - ? envelope.stepDefinition.pattern.source - : new RegExp(envelope.stepDefinition.pattern.source) - const expression = this.expressionFactory.createExpression(expr) - this.expressions.push(expression) - } - if (envelope.gherkinDocument) { - const stepTexts = this.stepTexts - this.stepTexts = walkGherkinDocument(envelope.gherkinDocument, this.stepTexts, { - step(step, arr) { - return arr.concat(step.text) - }, - }) - } - } - - build(): CucumberInfo { - return { - stepDocuments: buildStepDocuments(this.stepTexts, this.expressions), - expressions: this.expressions, - } - } -} diff --git a/language-service/javascript/src/getGherkinCompletionItems.ts b/language-service/javascript/src/getGherkinCompletionItems.ts deleted file mode 100644 index 4fdc35d5d2b..00000000000 --- a/language-service/javascript/src/getGherkinCompletionItems.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { walkGherkinDocument } from '@cucumber/gherkin-utils' -import { Index, lspCompletionSnippet } from '@cucumber/suggest' -import { CompletionItem, CompletionItemKind, InsertTextFormat } from 'vscode-languageserver-types' -import { parseGherkinDocument } from './parseGherkinDocument' - -// https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_completion -export function getGherkinCompletionItems( - gherkinSource: string, - line: number, - index: Index -): CompletionItem[] { - const { gherkinDocument } = parseGherkinDocument(gherkinSource) - if (!gherkinDocument) { - return [] - } - let text: string - let startCharacter: number - let endCharacter: number - walkGherkinDocument(gherkinDocument, undefined, { - step(step) { - if (step.location.line === line + 1) { - text = step.text - startCharacter = step.location.column + step.keyword.length - 1 - endCharacter = startCharacter + text.length - } - }, - }) - if (text === undefined) return [] - const stepDocuments = index(text) - return stepDocuments.map((stepDocument) => ({ - label: stepDocument.suggestion, - insertTextFormat: InsertTextFormat.Snippet, - kind: CompletionItemKind.Text, - textEdit: { - newText: lspCompletionSnippet(stepDocument.segments), - range: { - start: { - line, - character: startCharacter, - }, - end: { - line, - character: endCharacter - } - } - } - })) -} diff --git a/language-service/javascript/src/getGherkinDiagnostics.ts b/language-service/javascript/src/getGherkinDiagnostics.ts deleted file mode 100644 index e2f5d5e71a9..00000000000 --- a/language-service/javascript/src/getGherkinDiagnostics.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-types' - -import { Errors } from '@cucumber/gherkin' -import { Expression } from '@cucumber/cucumber-expressions' -import { walkGherkinDocument } from '@cucumber/gherkin-utils' -import { parseGherkinDocument } from './parseGherkinDocument' - -// https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#diagnostic -export function getGherkinDiagnostics( - gherkinSource: string, - expressions: readonly Expression[] -): Diagnostic[] { - const lines = gherkinSource.split(/\r?\n/) - const { gherkinDocument, error } = parseGherkinDocument(gherkinSource) - const diagnostics: Diagnostic[] = [] - const errors: Error[] = error instanceof Errors.CompositeParserException ? error.errors : [error] - for (const error of errors) { - if (error instanceof Errors.GherkinException) { - const line = error.location.line - 1 - const character = error.location.column !== undefined ? error.location.column - 1 : 0 - const diagnostic: Diagnostic = { - severity: DiagnosticSeverity.Error, - range: { - start: { - line, - character, - }, - end: { - line, - character: lines[line].length, - }, - }, - message: error.message, - source: 'ex', - } - diagnostics.push(diagnostic) - } - } - - if (!gherkinDocument) { - return diagnostics - } - - let inScenarioOutline = false - - return walkGherkinDocument(gherkinDocument, diagnostics, { - scenario(scenario, arr) { - inScenarioOutline = (scenario.examples || []).length > 0 - return arr - }, - step(step, arr) { - if (inScenarioOutline) { - return arr - } - if (isUndefined(step.text, expressions)) { - const line = step.location.line - 1 - const character = step.location.column - 1 + step.keyword.length - const diagnostic: Diagnostic = { - severity: DiagnosticSeverity.Warning, - range: { - start: { - line, - character, - }, - end: { - line, - character: character + step.text.length, - }, - }, - message: `Undefined step: ${step.text}`, - source: 'ex', - } - return arr.concat(diagnostic) - } - return arr - }, - }) -} - -function isUndefined(stepText: string, expressions: readonly Expression[]): boolean { - for (const expression of expressions) { - if (expression.match(stepText)) return false - } - return true -} diff --git a/language-service/javascript/src/getGherkinFormattingEdits.ts b/language-service/javascript/src/getGherkinFormattingEdits.ts deleted file mode 100644 index 5f6a14a398f..00000000000 --- a/language-service/javascript/src/getGherkinFormattingEdits.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { TextEdit } from "vscode-languageserver-types"; -import { parseGherkinDocument } from './parseGherkinDocument' -import { pretty } from '@cucumber/gherkin-utils' - -// https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_formatting -export function getGherkinFormattingEdits(gherkinSource: string): TextEdit[] { - const { gherkinDocument } = parseGherkinDocument(gherkinSource) - const newText = pretty(gherkinDocument) - const lines = gherkinSource.split(/\r?\n/) - const line = lines.length - 1 - const character = lines[line].length - const textEdit: TextEdit = { - newText, - range: { - start: { - line: 0, - character: 0 - }, - end: { - line, - character - } - } - } - return [textEdit] -} diff --git a/language-service/javascript/src/getGherkinSemanticTokens.ts b/language-service/javascript/src/getGherkinSemanticTokens.ts deleted file mode 100644 index a7c6ce26094..00000000000 --- a/language-service/javascript/src/getGherkinSemanticTokens.ts +++ /dev/null @@ -1,163 +0,0 @@ -import * as messages from '@cucumber/messages' -import { walkGherkinDocument } from '@cucumber/gherkin-utils' -import { - SemanticTokenModifiers, - SemanticTokens, - SemanticTokenTypes, -} from 'vscode-languageserver-types' -import { parseGherkinDocument } from './parseGherkinDocument' -import { Expression } from '@cucumber/cucumber-expressions' - -export const semanticTokenTypes: SemanticTokenTypes[] = [ - SemanticTokenTypes.keyword, // Feature, Scenario, Given etc - SemanticTokenTypes.parameter, // step parameters - SemanticTokenTypes.string, // DocString content and ``` delimiter - SemanticTokenTypes.type, // DocString ```type - SemanticTokenTypes.class, // @tags - SemanticTokenTypes.variable, // step - SemanticTokenTypes.property, // examples table header row -] - -export const semanticTokenModifiers: SemanticTokenModifiers[] = [] - -const indexByType = Object.fromEntries(semanticTokenTypes.map((type, index) => [type, index])) - -// https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_semanticTokens -export function getGherkinSemanticTokens( - gherkinSource: string, - expressions: readonly Expression[] -): SemanticTokens { - const { gherkinDocument } = parseGherkinDocument(gherkinSource) - if (!gherkinDocument) { - return { - data: [], - } - } - const lines = gherkinSource.split(/\r?\n/) - let lastLineNumber = 0 - let lastCharacter = 0 - - function makeLocationToken( - location: messages.Location, - token: string, - type: SemanticTokenTypes, - data: readonly number[] - ) { - const lineNumber = location.line - 1 - const character = location.column - 1 - return makeToken(lineNumber, character, token, type, data) - } - - function makeToken( - lineNumber: number, - character: number, - token: string, - type: SemanticTokenTypes, - data: readonly number[] - ) { - const charDelta = lineNumber === lastLineNumber ? character - lastCharacter : character - lastCharacter = character - const lineOffset = lineNumber - lastLineNumber - lastLineNumber = lineNumber - const length = token.length - const typeIndex = indexByType[type] - return data.concat([lineOffset, charDelta, length, typeIndex, 0]) - } - - let inScenarioOutline = false - let inExamples = false - - const data = walkGherkinDocument(gherkinDocument, [], { - tag(tag, arr) { - return makeLocationToken(tag.location, tag.name, SemanticTokenTypes.class, arr) - }, - feature(feature, arr) { - return makeLocationToken(feature.location, feature.keyword, SemanticTokenTypes.keyword, arr) - }, - rule(rule, arr) { - return makeLocationToken(rule.location, rule.keyword, SemanticTokenTypes.keyword, arr) - }, - scenario(scenario, arr) { - inScenarioOutline = (scenario.examples || []).length > 0 - return makeLocationToken(scenario.location, scenario.keyword, SemanticTokenTypes.keyword, arr) - }, - examples(examples, arr) { - inExamples = true - return makeLocationToken(examples.location, examples.keyword, SemanticTokenTypes.keyword, arr) - }, - step(step, arr) { - inExamples = false - arr = makeLocationToken(step.location, step.keyword, SemanticTokenTypes.keyword, arr) - if (inScenarioOutline) { - const regexp = /(<[^>]+>)/g - let match: RegExpMatchArray = null - while ((match = regexp.exec(step.text)) !== null) { - const character = step.location.column - 1 + step.keyword.length + match.index - arr = makeToken( - step.location.line - 1, - character, - match[0], - SemanticTokenTypes.variable, - arr - ) - } - } else { - for (const expression of expressions) { - const args = expression.match(step.text) - if (args) { - for (const arg of args) { - const character = step.location.column - 1 + step.keyword.length + arg.group.start - arr = makeToken( - step.location.line - 1, - character, - arg.group.value, - SemanticTokenTypes.parameter, - arr - ) - } - break - } - } - } - return arr - }, - docString(docString, arr) { - arr = makeLocationToken( - docString.location, - docString.delimiter, - SemanticTokenTypes.string, - arr - ) - if (docString.mediaType) { - const character = docString.location.column - 1 + docString.delimiter.length - arr = makeToken( - docString.location.line - 1, - character, - docString.mediaType, - SemanticTokenTypes.type, - arr - ) - } - const maxLineNumber = docString.location.line + docString.content.split(/\r?\n/).length - for (let lineNumber = docString.location.line; lineNumber <= maxLineNumber; lineNumber++) { - const spaceContent = /^(\s*)(.*)$/.exec(lines[lineNumber]) - const startChar = spaceContent[1].length - const token = spaceContent[2] - arr = makeToken(lineNumber, startChar, token, SemanticTokenTypes.string, arr) - } - return arr - }, - tableRow(tableRow, arr) { - const type = inExamples ? SemanticTokenTypes.property : SemanticTokenTypes.parameter - for (const cell of tableRow.cells) { - arr = makeLocationToken(cell.location, cell.value, type, arr) - } - inExamples = false - return arr - }, - }) - - return { - data, - } -} diff --git a/language-service/javascript/src/index.ts b/language-service/javascript/src/index.ts deleted file mode 100644 index ae3888e33c8..00000000000 --- a/language-service/javascript/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './getGherkinSemanticTokens' -export * from './getGherkinDiagnostics' -export * from './getGherkinCompletionItems' -export * from './getGherkinFormattingEdits' -export * from './CucumberInfo' diff --git a/language-service/javascript/src/parseGherkinDocument.ts b/language-service/javascript/src/parseGherkinDocument.ts deleted file mode 100644 index 000585b5083..00000000000 --- a/language-service/javascript/src/parseGherkinDocument.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { GherkinDocument, IdGenerator } from '@cucumber/messages' -import { AstBuilder, GherkinClassicTokenMatcher, Parser, Errors } from '@cucumber/gherkin' - -const uuidFn = IdGenerator.uuid() - -export type ParseResult = { - gherkinDocument?: GherkinDocument - error?: Errors.GherkinException -} - -export function parseGherkinDocument(gherkinSource: string): ParseResult { - const builder = new AstBuilder(uuidFn) - const matcher = new GherkinClassicTokenMatcher() - const parser = new Parser(builder, matcher) - try { - return { - gherkinDocument: parser.parse(gherkinSource), - } - } catch (error) { - let gherkinDocument: GherkinDocument - - for (let i = 0; i < 10; i++) { - gherkinDocument = builder.getResult() - if (gherkinDocument) { - return { - gherkinDocument, - error, - } - } - - try { - builder.endRule() - } catch (ignore) {} - } - - return { - error, - } - } -} diff --git a/language-service/javascript/test/getGherkinCompletionItems.test.ts b/language-service/javascript/test/getGherkinCompletionItems.test.ts deleted file mode 100644 index 9bbe8d10736..00000000000 --- a/language-service/javascript/test/getGherkinCompletionItems.test.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { CompletionItem, CompletionItemKind, InsertTextFormat } from 'vscode-languageserver-types' -import assert from 'assert' -import { StepDocument, bruteForceIndex } from '@cucumber/suggest' -import { getGherkinCompletionItems } from '../src' -import { ExpressionFactory, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' - -describe('getGherkinCompletionItems', () => { - it('completes with step text', () => { - const ef = new ExpressionFactory(new ParameterTypeRegistry()) - const doc1: StepDocument = { - suggestion: 'I have {int} cukes in my belly', - segments: ['I have ', ['42', '98'], ' cukes in my belly'], - expression: ef.createExpression('I have {int} cukes in my belly') - } - const doc2: StepDocument = { - suggestion: 'I am a teapot', - segments: ['I am a teapot'], - expression: ef.createExpression('I am a teapot') - } - - const index = bruteForceIndex([doc1, doc2]) - const gherkinSource = `Feature: Hello - Scenario: World - Given cukes -` - const completions = getGherkinCompletionItems(gherkinSource, 2, index) - const expectedCompletions: CompletionItem[] = [ - { - label: 'I have {int} cukes in my belly', - insertTextFormat: InsertTextFormat.Snippet, - kind: CompletionItemKind.Text, - textEdit: { - newText: 'I have ${1|42,98|} cukes in my belly', - range: { - start: { - line: 2, - character: 10 - }, - end: { - line: 2, - character: 15 - } - } - } - }, - ] - assert.deepStrictEqual(completions, expectedCompletions) - }) -}) diff --git a/language-service/javascript/test/getGherkinDiagnostics.test.ts b/language-service/javascript/test/getGherkinDiagnostics.test.ts deleted file mode 100644 index 3c327f0a330..00000000000 --- a/language-service/javascript/test/getGherkinDiagnostics.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import assert from 'assert' -import { getGherkinDiagnostics } from '../src' -import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-types' -import { CucumberExpression, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' - -describe('getGherkinDiagnostics', () => { - it('returns no diagnostics for valid document', () => { - const diagnostics = getGherkinDiagnostics(`Feature: Hello`, []) - assert.deepStrictEqual(diagnostics, []) - }) - - it('returns error diagnostic for unexpected end of file', () => { - const diagnostics = getGherkinDiagnostics( - `Feature: Hello -@tag -`, - [] - ) - assert.deepStrictEqual(diagnostics, [ - { - message: '(3:0): unexpected end of file, expected: #TagLine, #RuleLine, #Comment, #Empty', - range: { - start: { - line: 2, - character: 0, - }, - end: { - line: 2, - character: 0, - }, - }, - severity: DiagnosticSeverity.Error, - source: 'ex', - }, - ]) - }) - - it('returns error diagnostic for missing table separator', () => { - const expression = new CucumberExpression('a table:', new ParameterTypeRegistry()) - const diagnostics = getGherkinDiagnostics( - `Feature: Hello - Scenario: Hi - Given a table: - | a | - | b -`, - [expression] - ) - const expectedDiagnostics: Diagnostic[] = [ - { - message: '(5:7): inconsistent cell count within the table', - range: { - start: { - line: 4, - character: 6, - }, - end: { - line: 4, - character: 9, - }, - }, - severity: DiagnosticSeverity.Error, - source: 'ex', - }, - ] - assert.deepStrictEqual(diagnostics, expectedDiagnostics) - }) - - it('returns warning diagnostic for undefined step', () => { - const diagnostics = getGherkinDiagnostics( - `Feature: Hello - Scenario: Hi - Given an undefined step -`, - [] - ) - const expectedDiagnostics: Diagnostic[] = [ - { - message: 'Undefined step: an undefined step', - range: { - start: { - line: 2, - character: 10, - }, - end: { - line: 2, - character: 27, - }, - }, - severity: DiagnosticSeverity.Warning, - source: 'ex', - }, - ] - assert.deepStrictEqual(diagnostics, expectedDiagnostics) - }) - - it('does not return warning diagnostic for undefined step in Scenario Outline', () => { - const diagnostics = getGherkinDiagnostics( - `Feature: Hello - Scenario: Hi - Given an undefined step - - Examples: Hello -`, - [] - ) - const expectedDiagnostics: Diagnostic[] = [] - assert.deepStrictEqual(diagnostics, expectedDiagnostics) - }) -}) diff --git a/language-service/javascript/test/getGherkinFormattingEdits.test.ts b/language-service/javascript/test/getGherkinFormattingEdits.test.ts deleted file mode 100644 index aad2e093790..00000000000 --- a/language-service/javascript/test/getGherkinFormattingEdits.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import assert from 'assert' -import { TextEdit } from 'vscode-languageserver-types' -import { getGherkinFormattingEdits } from '../src' - -describe('getGherkinFormattingEdits', () => { - it('returns text edits that prettifies a Gherkin document', () => { - const gherkinSource = `Feature: Hello -Scenario: World -Given something` - const textEdits = getGherkinFormattingEdits(gherkinSource) - const expectedTextEdit: TextEdit = { - newText: `Feature: Hello - - Scenario: World - Given something -`, - range: { - start: { - line: 0, - character: 0, - }, - end: { - line: 2, - character: 15 - } - } - } - assert.deepStrictEqual([expectedTextEdit], textEdits) - }) -}) diff --git a/language-service/javascript/test/getGherkinSemanticTokens.test.ts b/language-service/javascript/test/getGherkinSemanticTokens.test.ts deleted file mode 100644 index b3ca1f95d0a..00000000000 --- a/language-service/javascript/test/getGherkinSemanticTokens.test.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { getGherkinSemanticTokens } from '../src' -import { SemanticTokens } from 'vscode-languageserver-types' -import assert from 'assert' -import { CucumberExpression, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' - -describe('getGherkinSemanticTokens', () => { - it('creates tokens for keywords', () => { - const gherkinSource = `# some comment -@foo @bar -Feature: a - This is a description - and so is this - - Scenario: b - Given I have 42 cukes in my belly - """sometype - hello - world - """ - And a table - | a | bbb | - | cc | dd | - - Scenario Outline: c - Given a and - - Examples: - | foo | bar | - | a | b | -` - const expression = new CucumberExpression( - 'I have {int} cukes in my {word}', - new ParameterTypeRegistry() - ) - - const semanticTokens = getGherkinSemanticTokens(gherkinSource, [expression]) - const expectedSemanticTokens: SemanticTokens = { - // See https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_semanticTokens - // for details about how tokens are encoded - data: [ - 1, - 0, - 4, - 4, - 0, // @foo - 0, - 5, - 4, - 4, - 0, // @bar - 1, - 0, - 7, - 0, - 0, // Feature - 4, - 2, - 8, - 0, - 0, // Scenario - 1, - 4, - 6, - 0, - 0, // Given - 0, - 13, - 2, - 1, - 0, // 42 - 0, - 15, - 5, - 1, - 0, // belly - 1, - 6, - 3, - 2, - 0, // """ - 0, - 3, - 8, - 3, - 0, // sometype - 1, - 5, - 5, - 2, - 0, // hello - 1, - 8, - 5, - 2, - 0, // world - 1, - 7, - 3, - 2, - 0, // """ - 1, - 4, - 4, - 0, - 0, // And - 1, - 8, - 1, - 1, - 0, // a - 0, - 5, - 3, - 1, - 0, // bbb - 1, - 8, - 2, - 1, - 0, // cc - 0, - 6, - 2, - 1, - 0, // dd - 2, - 2, - 16, - 0, - 0, // Scenario Outline - 1, - 4, - 6, - 0, - 0, // Given - 0, - 8, - 5, - 5, - 0, // - 0, - 10, - 5, - 5, - 0, // - 2, - 4, - 8, - 0, - 0, // Examples - 1, - 8, - 3, - 6, - 0, // foo - 0, - 6, - 3, - 6, - 0, // bar - 1, - 8, - 1, - 1, - 0, // a - 0, - 6, - 1, - 1, - 0, // b - ], - } - assert.deepStrictEqual(semanticTokens, expectedSemanticTokens) - }) -}) diff --git a/language-service/javascript/test/parseGherkinDocument.test.ts b/language-service/javascript/test/parseGherkinDocument.test.ts deleted file mode 100644 index f3a6a147527..00000000000 --- a/language-service/javascript/test/parseGherkinDocument.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { parseGherkinDocument } from '../src/parseGherkinDocument' -import assert from 'assert' - -describe('parseGherkinDocument', () => { - it('returns a GherkinDocument for unexpected EOF', () => { - const source = `Feature: Hello -@tag -` - const { gherkinDocument, error } = parseGherkinDocument(source) - assert.strictEqual(gherkinDocument.feature.name, 'Hello') - assert.strictEqual( - error.message, - 'Parser errors:\n(3:0): unexpected end of file, expected: #TagLine, #RuleLine, #Comment, #Empty' - ) - }) -}) diff --git a/language-service/javascript/tsconfig.build.json b/language-service/javascript/tsconfig.build.json deleted file mode 100644 index 98f530f48a3..00000000000 --- a/language-service/javascript/tsconfig.build.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "dist" - }, - "include": [ - "package.json", - "src", - "test" - ] -} diff --git a/language-service/javascript/tsconfig.json b/language-service/javascript/tsconfig.json deleted file mode 100644 index 4082f16a5d9..00000000000 --- a/language-service/javascript/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../tsconfig.json" -} diff --git a/monaco/.rsync b/monaco/.rsync deleted file mode 100644 index ea5a5de249b..00000000000 --- a/monaco/.rsync +++ /dev/null @@ -1 +0,0 @@ -../.templates/default.mk default.mk diff --git a/monaco/CHANGELOG.md b/monaco/CHANGELOG.md deleted file mode 100644 index 30883eb03ea..00000000000 --- a/monaco/CHANGELOG.md +++ /dev/null @@ -1,66 +0,0 @@ -# CHANGE LOG -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/) -and this project adheres to [Semantic Versioning](http://semver.org/). - ----- -## [Unreleased] - -### Added - -### Changed - -### Deprecated - -### Removed - -### Fixed - -## [0.3.0] - 2021-09-09 - -### Changed - -* Changed exports and API so the monaco global is configured once, and each editor configured once each. - -### Fixed - -* Fixed double-rendering of auto-complete - -## [0.2.0] - 2021-09-08 - -### Changed - -* Add an `editor` argument to the `configure` function - ([#1737](https://github.com/cucumber/common/pull/1737) - [aslakhellesoy]) - -### Fixed - -* Fix event listener for diagnostics by listening to the editor directly - ([#1737](https://github.com/cucumber/common/pull/1737) - [aslakhellesoy]) - -## [0.1.0] - 2021-09-07 - -### Added - -* Document Formatting - ([#1732](https://github.com/cucumber/common/pull/1732) - [aslakhellesoy]) - -## [0.0.1] - 2021-09-02 - -### Added - -* First release - - -[Unreleased]: https://github.com/cucumber/common/compare/monaco/v0.3.0...main -[0.3.0]: https://github.com/cucumber/common/compare/monaco/v0.2.0...v0.3.0 -[0.2.0]: https://github.com/cucumber/common/compare/monaco/v0.1.0...v0.2.0 -[0.1.0]: https://github.com/cucumber/common/compare/monaco/v0.0.1...v0.1.0 -[0.0.1]: https://github.com/cucumber/common/tree/monaco/v0.0.1 - - -[aslakhellesoy]: https://github.com/aslakhellesoy diff --git a/monaco/Makefile b/monaco/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/monaco/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/monaco/default.mk b/monaco/default.mk deleted file mode 100644 index a0d8dd28fb4..00000000000 --- a/monaco/default.mk +++ /dev/null @@ -1,89 +0,0 @@ -# Please update /.templates/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE = $(shell which apk 2> /dev/null) -LIBNAME = $(shell basename $$(pwd)) -LANGUAGES ?= $(wildcard */) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: $(patsubst %,default-%,$(LANGUAGES)) -.PHONY: default - -default-%: % - if [[ -d $< ]]; then cd $< && make default; fi -.PHONY: default-% - -# Need to declare these phonies to avoid errors for packages without a particular language -.PHONY: c dotnet go java javascript objective-c perl python ruby - -update-dependencies: $(patsubst %,update-dependencies-%,$(LANGUAGES)) -.PHONY: update-dependencies - -update-dependencies-%: % - if [[ -d $< ]]; then cd $< && make update-dependencies; fi -.PHONY: update-dependencies-% - -update-changelog: -ifdef NEW_VERSION - cat CHANGELOG.md | ../scripts/update_changelog.sh $(NEW_VERSION) > CHANGELOG.md.tmp - mv CHANGELOG.md.tmp CHANGELOG.md -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-changelog - -pre-release: update-changelog $(patsubst %,pre-release-%,$(LANGUAGES)) -.PHONY: pre-release - -pre-release-%: % - if [[ -d $< ]]; then cd $< && make pre-release; fi -.PHONY: pre-release-% - -release: publish -.PHONY: release - -publish: create-and-push-release-tag $(patsubst %,publish-%,$(LANGUAGES)) -.PHONY: publish - -publish-%: % - if [[ -d $< ]]; then cd $< && make publish; fi -.PHONY: publish-% - -create-and-push-release-tag: - [ -f '/home/cukebot/configure' ] && /home/cukebot/configure - git commit --gpg-sign --all --message "Release $(LIBNAME) v$(NEW_VERSION)" - git tag --sign "$(LIBNAME)/v$(NEW_VERSION)" -m "Release $(LIBNAME) v$(NEW_VERSION)" - git push --tags -.PHONY: create-and-push-release-tag - -post-release: $(patsubst %,post-release-%,$(LANGUAGES)) -.PHONY: post-release - -post-release: commit-and-push-post-release - -post-release-%: % - if [[ -d $< ]]; then cd $< && make post-release; fi -.PHONY: post-release-% - -commit-and-push-post-release: -ifdef NEW_VERSION - git push --tags - git commit --gpg-sign --all --message "Post release $(LIBNAME) v$(NEW_VERSION)" 2> /dev/null || true - git push -else - @echo -e "\033[0;31mNEW_VERSION is not defined.\033[0m" - exit 1 -endif -.PHONY: commit-and-push-post-release - -clean: $(patsubst %,clean-%,$(LANGUAGES)) -.PHONY: clean - -clean-%: % - if [[ -d $< ]]; then cd $< && make clean; fi -.PHONY: clean-% diff --git a/monaco/javascript/.gitignore b/monaco/javascript/.gitignore deleted file mode 100644 index 385b67bb27c..00000000000 --- a/monaco/javascript/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -dist/ -.idea/ -.nyc_output/ -coverage/ -node_modules/ -yarn.lock -package-lock.json -*.log -.deps -.tested* -.linted -.built* -.compared -.codegen -acceptance/ -storybook-static -*-go -*.iml -.vscode-test diff --git a/monaco/javascript/.mocharc.json b/monaco/javascript/.mocharc.json deleted file mode 100644 index d5055eb10d0..00000000000 --- a/monaco/javascript/.mocharc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], - "extension": ["ts", "tsx"], - "recursive": true, - "timeout": 10000 -} diff --git a/monaco/javascript/.rsync b/monaco/javascript/.rsync deleted file mode 100644 index 5592adbd0c2..00000000000 --- a/monaco/javascript/.rsync +++ /dev/null @@ -1,2 +0,0 @@ -../../LICENSE LICENSE -../../.templates/javascript/ . diff --git a/monaco/javascript/LICENSE b/monaco/javascript/LICENSE deleted file mode 100644 index 725ba9f4ac7..00000000000 --- a/monaco/javascript/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/monaco/javascript/Makefile b/monaco/javascript/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/monaco/javascript/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/monaco/javascript/README.md b/monaco/javascript/README.md deleted file mode 100644 index 476cb60ab0f..00000000000 --- a/monaco/javascript/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Cucumber Monaco - -This library configures a [monaco editor](https://github.com/microsoft/monaco-editor) -with editor features similar to the [Visual Studio Code Cucumber Extension](../../vscode/javascript). - -![Screenshot 1](screenshot1.png) - -![Screenshot 2](screenshot2.png) - -The library is a small Monaco adapter for the [@cucumber/language-service](../../language-service/javascript) -library. - -## Example - -To build the example, run the following: - -``` -pushd ../.. -npm install -npm run build -popd - -npm run build -``` - -This should create additional (.gitigored) files in `./example`. Now, start a static web server in that directory: - -``` -cd examples -npx node-static -p 8000 -``` - -Open http://localhost:8000 diff --git a/monaco/javascript/default.mk b/monaco/javascript/default.mk deleted file mode 100644 index b04d59c4a2b..00000000000 --- a/monaco/javascript/default.mk +++ /dev/null @@ -1,87 +0,0 @@ -SHELL := /usr/bin/env bash -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -TYPESCRIPT_SOURCE_FILES = $(sort $(call rwildcard,src test,*.ts *.tsx)) -PRIVATE = $(shell node -e "console.log(require('./package.json').private)") -IS_TESTDATA = $(findstring -testdata,${CURDIR}) -NPM_MODULE = $(shell cat package.json | jq .name --raw-output) - -default: .tested -.PHONY: default - -../../node_modules ../../package-lock.json: package.json - cd ../.. && npm install - -.codegen: - touch $@ - -.tested: .tested-npm .built - -.built: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - pushd ../.. && \ - npm run build && \ - popd && \ - touch $@ - -.tested-npm: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - npm run test - touch $@ - -pre-release: clean update-version update-dependencies default -.PHONY: pre-release - -update-dependencies: ../../node_modules ../../package-lock.json - ../../node_modules/.bin/npm-check-updates --upgrade --reject hast-util-sanitize,@types/node,react-markdown,rehype-raw,rehype-sanitize,remark-gfm -.PHONY: update-dependencies - -update-version: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifdef NEW_VERSION - npm --no-git-tag-version --allow-same-version version "$(NEW_VERSION)" - # Update all npm packages that depend on us - pushd ../.. && \ - ./scripts/npm-each update_npm_dependency_if_exists package.json "$(NPM_MODULE)" "$(NEW_VERSION)" -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -endif -.PHONY: update-version - -publish: .codegen -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (true,$(PRIVATE)) - npm publish --access public -else - @echo "Not publishing private npm module" -endif -endif -.PHONY: publish - -post-release: -.PHONY: post-release - -clean: clean-javascript -.PHONY: clean - -clean-javascript: - rm -rf .deps .codegen .tested* coverage dist acceptance -.PHONY: clean-javascript - -clobber: clean - rm -rf node_modules ../../node_modules -.PHONY: clobber - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/monaco/javascript/example/.gitignore b/monaco/javascript/example/.gitignore deleted file mode 100644 index 7bd0bcc7db9..00000000000 --- a/monaco/javascript/example/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.bundle.js* -*.ttf -*.worker.js* diff --git a/monaco/javascript/example/index.html b/monaco/javascript/example/index.html deleted file mode 100644 index acc26994363..00000000000 --- a/monaco/javascript/example/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Cucumber Monaco - - - -

- Monaco Editor with Cucumber Plugin -

-

- Things you can try: -

-
    -
  • ⇧⌥F - Format Document
  • -
  • Modify the first step and see it underlined as undefined
  • -
  • Type a new step and see auto-complete suggestions
  • -
-
-
- - - diff --git a/monaco/javascript/example/index.js b/monaco/javascript/example/index.js deleted file mode 100644 index 606c42470a4..00000000000 --- a/monaco/javascript/example/index.js +++ /dev/null @@ -1,51 +0,0 @@ -import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; -import { buildStepDocuments, jsSearchIndex } from '@cucumber/suggest' -import { ExpressionFactory, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' -import { configureMonaco } from '../dist/src/index' - -// Build some sample step texts and cucumber expressions. These would typically come from a stream -// of Cucumber Messages. -const ef = new ExpressionFactory(new ParameterTypeRegistry()) -const expressions = [ - ef.createExpression('I have {int} cukes in my belly'), - ef.createExpression('there are {int} blind mice') -]; -const docs = buildStepDocuments( - [ - 'I have 42 cukes in my belly', - 'I have 96 cukes in my belly', - 'there are 38 blind mice', - ], - expressions -) -const index = jsSearchIndex(docs) - -const value = `@foo -Feature: Hello -Scenario: Hi - Given I have 58 cukes in my belly - And this is an undefined step - | some | poorly | - | formatted | table | -` - -const editor1 = monaco.editor.create(document.getElementById('editor1'), { - value, - language: 'gherkin', - theme: 'vs-dark', - // semantic tokens provider is disabled by default - 'semanticHighlighting.enabled': true -}) - -const editor2 = monaco.editor.create(document.getElementById('editor2'), { - value, - language: 'gherkin', - theme: 'vs-dark', - // semantic tokens provider is disabled by default - 'semanticHighlighting.enabled': true -}) - -const configureEditor = configureMonaco(monaco, index, expressions) - -configureEditor(editor1) -configureEditor(editor2) diff --git a/monaco/javascript/package.json b/monaco/javascript/package.json deleted file mode 100644 index 0619ba42d08..00000000000 --- a/monaco/javascript/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@cucumber/monaco", - "version": "0.3.0", - "description": "Cucumber Monaco", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", - "scripts": { - "test": "mocha", - "build": "webpack", - "prepublishOnly": "tsc --build tsconfig.build.json" - }, - "repository": { - "type": "git", - "url": "git://github.com/cucumber/common.git" - }, - "keywords": [ - "cucumber", - "lsp", - "language service" - ], - "author": "Cucumber Limited ", - "license": "MIT", - "bugs": { - "url": "https://github.com/cucumber/common/issues" - }, - "homepage": "https://github.com/cucumber/common#readme", - "devDependencies": { - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "@cucumber/cucumber-expressions": "^13.0.1", - "mocha": "9.1.2", - "monaco-editor": "0.29.1", - "monaco-editor-webpack-plugin": "5.0.0", - "ts-node": "10.3.0", - "typescript": "4.4.4", - "webpack": "5.58.2", - "webpack-cli": "4.9.0" - }, - "dependencies": { - "@cucumber/language-service": "^0.2.0", - "@cucumber/suggest": "^0.0.4" - }, - "peerDependencies": { - "monaco-editor": "^0.29.0" - } -} diff --git a/monaco/javascript/screenshot1.png b/monaco/javascript/screenshot1.png deleted file mode 100644 index 4c8c29cc7af..00000000000 Binary files a/monaco/javascript/screenshot1.png and /dev/null differ diff --git a/monaco/javascript/screenshot2.png b/monaco/javascript/screenshot2.png deleted file mode 100644 index 5abb6008742..00000000000 Binary files a/monaco/javascript/screenshot2.png and /dev/null differ diff --git a/monaco/javascript/src/index.ts b/monaco/javascript/src/index.ts deleted file mode 100644 index b9f97d72889..00000000000 --- a/monaco/javascript/src/index.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { Expression } from '@cucumber/cucumber-expressions' -import { - getGherkinCompletionItems, - getGherkinDiagnostics, - getGherkinFormattingEdits, - getGherkinSemanticTokens, - semanticTokenModifiers, - semanticTokenTypes, -} from '@cucumber/language-service' -import { Index } from '@cucumber/suggest' -import { Range, TextEdit } from 'vscode-languageserver-types' -import * as monacoEditor from 'monaco-editor/esm/vs/editor/editor.api' -import { editor, IRange } from 'monaco-editor/esm/vs/editor/editor.api' - -type Monaco = typeof monacoEditor - -export type ConfigureEditor = (editor: editor.IStandaloneCodeEditor) => void - -export function configureMonaco( - monaco: Monaco, - index: Index, - expressions: readonly Expression[] -): ConfigureEditor { - monaco.languages.register({ id: 'gherkin' }) - - // Syntax Highlighting (Semantic Tokens) - - monaco.languages.registerDocumentSemanticTokensProvider('gherkin', { - getLegend: function () { - return { - tokenTypes: semanticTokenTypes, - tokenModifiers: semanticTokenModifiers, - } - }, - releaseDocumentSemanticTokens: function () { - // no-op - }, - provideDocumentSemanticTokens: function (model) { - const gherkinSource = model.getValue() - const tokens = getGherkinSemanticTokens(gherkinSource, expressions) - const data = new Uint32Array(tokens.data) - return { - data, - } - }, - }) - - // Auto-Complete - - monaco.languages.registerCompletionItemProvider('gherkin', { - provideCompletionItems: function (model, position) { - const gherkinSource = model.getValue() - const completionItems = getGherkinCompletionItems( - gherkinSource, - position.lineNumber - 1, - index - ) - return { - suggestions: completionItems.map((completionItem) => ({ - label: completionItem.label, - kind: monaco.languages.CompletionItemKind.Text, - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, - insertText: (completionItem.textEdit as TextEdit).newText, - range: convertRange((completionItem.textEdit as TextEdit).range), - })), - } - }, - }) - - // Document Formatting - monaco.languages.registerDocumentFormattingEditProvider('gherkin', { - provideDocumentFormattingEdits: function (model) { - const gherkinSource = model.getValue() - const textEdits = getGherkinFormattingEdits(gherkinSource) - return textEdits.map((textEdit) => ({ - range: convertRange(textEdit.range), - text: textEdit.newText, - })) - }, - }) - - return function(editor) { - // Diagnostics (Syntax validation) - function setDiagnosticMarkers() { - const model = editor.getModel() - const gherkinSource = model.getValue() - const diagnostics = getGherkinDiagnostics(gherkinSource, expressions) - const markers: monacoEditor.editor.IMarkerData[] = diagnostics.map((diagnostic) => { - return { - ...(convertRange(diagnostic.range)), - severity: monaco.MarkerSeverity.Error, - message: diagnostic.message, - } - }) - monaco.editor.setModelMarkers(model, 'gherkin', markers) - } - - function requestValidation() { - window.requestAnimationFrame(() => { - setDiagnosticMarkers() - }) - } - - requestValidation() - - let validationTimeout: NodeJS.Timeout - editor.onDidChangeModelContent(() => { - clearTimeout(validationTimeout) - validationTimeout = setTimeout(requestValidation, 500) - }) - } -} - -function convertRange(range: Range): IRange { - return { - startLineNumber: range.start.line + 1, - startColumn: range.start.character + 1, - endLineNumber: range.end.line + 1, - endColumn: range.end.character + 1, - } -} diff --git a/monaco/javascript/test/dummy.ts b/monaco/javascript/test/dummy.ts deleted file mode 100644 index 34f0e9da612..00000000000 --- a/monaco/javascript/test/dummy.ts +++ /dev/null @@ -1,5 +0,0 @@ -describe('@cucumber/monaco', () => { - it('does not have any unit tests', () => { - console.log('******* See README.md for details about how to manually test @cucumber/monaco *******') - }) -}) diff --git a/monaco/javascript/tsconfig.build.json b/monaco/javascript/tsconfig.build.json deleted file mode 100644 index 98f530f48a3..00000000000 --- a/monaco/javascript/tsconfig.build.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "dist" - }, - "include": [ - "package.json", - "src", - "test" - ] -} diff --git a/monaco/javascript/tsconfig.json b/monaco/javascript/tsconfig.json deleted file mode 100644 index 4082f16a5d9..00000000000 --- a/monaco/javascript/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../tsconfig.json" -} diff --git a/monaco/javascript/webpack.config.js b/monaco/javascript/webpack.config.js deleted file mode 100644 index 18ddfff3dfe..00000000000 --- a/monaco/javascript/webpack.config.js +++ /dev/null @@ -1,32 +0,0 @@ -const path = require('path'); -const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); - -module.exports = { - mode: process.env.NODE_ENV, - entry: './example/index.js', - resolve: { - extensions: ['.ts', '.js'] - }, - output: { - globalObject: 'self', - path: path.resolve(__dirname, 'example'), - filename: '[name].bundle.js' - }, - module: { - rules: [ - { - test: /\.css$/, - use: ['style-loader', 'css-loader'] - }, - { - test: /\.ttf$/, - use: ['file-loader'] - } - ] - }, - plugins: [ - new MonacoWebpackPlugin({ - languages: [] - }) - ] -} diff --git a/package-lock.json b/package-lock.json index fbd768fd1a4..a7c2982b46d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -382,53 +382,6 @@ "node": ">= 12" } }, - "language-server/javascript": { - "name": "@cucumber/language-server", - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@cucumber/gherkin-utils": "^7.0.0", - "@cucumber/language-service": "^0.2.0", - "@cucumber/messages": "^17.1.1", - "@cucumber/suggest": "^0.0.4", - "source-map-support": "0.5.20", - "vscode-languageserver": "7.0.0", - "vscode-languageserver-textdocument": "1.0.2" - }, - "bin": { - "cucumber-language-server": "bin/cucumber-language-server.js" - }, - "devDependencies": { - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "ts-node": "10.3.0", - "txtgen": "2.2.8", - "typescript": "4.4.4" - } - }, - "language-service/javascript": { - "name": "@cucumber/language-service", - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@cucumber/gherkin": "^22.0.0", - "@cucumber/gherkin-utils": "^7.0.0", - "@cucumber/messages": "^17.1.1", - "@cucumber/suggest": "^0.0.4", - "source-map-support": "0.5.20", - "vscode-languageserver-types": "3.17.0-next.4" - }, - "devDependencies": { - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "ts-node": "10.3.0", - "typescript": "4.4.4" - } - }, "message-streams/javascript": { "name": "@cucumber/message-streams", "version": "3.0.0", @@ -470,30 +423,6 @@ "uuid": "dist/bin/uuid" } }, - "monaco/javascript": { - "name": "@cucumber/monaco", - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "@cucumber/language-service": "^0.2.0", - "@cucumber/suggest": "^0.0.4" - }, - "devDependencies": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "monaco-editor": "0.29.1", - "monaco-editor-webpack-plugin": "5.0.0", - "ts-node": "10.3.0", - "typescript": "4.4.4", - "webpack": "5.58.2", - "webpack-cli": "4.9.0" - }, - "peerDependencies": { - "monaco-editor": "^0.29.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -2829,14 +2758,6 @@ "resolved": "json-to-messages/javascript", "link": true }, - "node_modules/@cucumber/language-server": { - "resolved": "language-server/javascript", - "link": true - }, - "node_modules/@cucumber/language-service": { - "resolved": "language-service/javascript", - "link": true - }, "node_modules/@cucumber/message-streams": { "resolved": "message-streams/javascript", "link": true @@ -2845,10 +2766,6 @@ "resolved": "messages/javascript", "link": true }, - "node_modules/@cucumber/monaco": { - "resolved": "monaco/javascript", - "link": true - }, "node_modules/@cucumber/query": { "resolved": "query/javascript", "link": true @@ -2857,10 +2774,6 @@ "resolved": "react/javascript", "link": true }, - "node_modules/@cucumber/suggest": { - "resolved": "suggest/javascript", - "link": true - }, "node_modules/@cucumber/tag-expressions": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@cucumber/tag-expressions/-/tag-expressions-4.1.0.tgz", @@ -8105,99 +8018,6 @@ "renderkid": "^2.0.4" } }, - "node_modules/@storybook/manager-webpack4/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -8397,15 +8217,6 @@ "node": ">=0.10.0" } }, - "node_modules/@storybook/manager-webpack4/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/watchpack": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", @@ -8800,15 +8611,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@storybook/manager-webpack5/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/manager-webpack5/node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8818,99 +8620,6 @@ "node": ">=8" } }, - "node_modules/@storybook/manager-webpack5/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack5/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/manager-webpack5/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -8958,15 +8667,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/@storybook/manager-webpack5/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/node-logger": { "version": "6.3.11", "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.11.tgz", @@ -9371,16 +9071,15 @@ } }, "node_modules/@storybook/react/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/@storybook/react/node_modules/is-buffer": { @@ -9453,15 +9152,16 @@ } }, "node_modules/@storybook/react/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/@storybook/react/node_modules/lru-cache": { @@ -9538,15 +9238,15 @@ } }, "node_modules/@storybook/react/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/@storybook/react/node_modules/p-try": { @@ -9558,15 +9258,6 @@ "node": ">=6" } }, - "node_modules/@storybook/react/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/react/node_modules/pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -9579,93 +9270,6 @@ "node": ">=6" } }, - "node_modules/@storybook/react/node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/react/node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/react/node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/react/node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@storybook/react/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/react/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/react/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/react/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -9788,15 +9392,6 @@ "node": ">=0.10.0" } }, - "node_modules/@storybook/react/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@storybook/react/node_modules/watchpack": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", @@ -10122,9 +9717,9 @@ } }, "node_modules/@testing-library/dom": { - "version": "8.7.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.7.2.tgz", - "integrity": "sha512-2zN0Zv9dMnaMAd4c/1E1ZChu4QrICyvWtkUvHFQBPhS1oG3VYGcM7SLGLYdda7187ILRXzIUOvOsbXQm4EASjA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.9.0.tgz", + "integrity": "sha512-fhmAYtGpFqzKdPq5aLNn/T396qfhYkttHT/5RytdDNSCzg9K/0F/WXF5iDsNBK1M3ZIQbPy7Y0qm4Kup5bqT/w==", "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -10323,12 +9918,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/js-search": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@types/js-search/-/js-search-1.4.0.tgz", - "integrity": "sha1-8tSvoXak/HsX+0ahWThHiH+h+3s=", - "dev": true - }, "node_modules/@types/jsdom": { "version": "16.2.13", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.13.tgz", @@ -10589,12 +10178,6 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==" }, - "node_modules/@types/vscode": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.61.0.tgz", - "integrity": "sha512-9k5Nwq45hkRwdfCFY+eKXeQQSbPoA114mF7U/4uJXRBJeGIO7MuJdhF1PnaDN+lllL9iKGQtd6FFXShBXMNaFg==", - "dev": true - }, "node_modules/@types/webpack": { "version": "4.41.31", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", @@ -10826,15 +10409,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -11927,16 +11501,6 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "node_modules/azure-devops-node-api": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", - "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", - "dev": true, - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, "node_modules/babel-loader": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", @@ -12275,15 +11839,6 @@ "node": ">8.0.0" } }, - "node_modules/big-integer": { - "version": "1.6.49", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", - "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -12293,19 +11848,6 @@ "node": "*" } }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -12745,30 +12287,12 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -13103,18 +12627,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -13158,43 +12670,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", @@ -13921,9 +13396,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.2.tgz", - "integrity": "sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "dev": true, "dependencies": { "browserslist": "^4.17.3", @@ -13944,9 +13419,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.2.tgz", - "integrity": "sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", "dev": true, "hasInstallScript": true, "funding": { @@ -14695,10 +14170,6 @@ "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==", "dev": true }, - "node_modules/cucumber": { - "resolved": "vscode/javascript", - "link": true - }, "node_modules/cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -14908,12 +14379,6 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -15259,45 +14724,6 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -15385,9 +14811,9 @@ "integrity": "sha1-ZVQbswnd3Qz5Ty0ciGGyvmUbsNU=" }, "node_modules/electron-to-chromium": { - "version": "1.3.864", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.864.tgz", - "integrity": "sha512-v4rbad8GO6/yVI92WOeU9Wgxc4NA0n4f6P1FvZTY+jyY7JHEhw3bduYu60v3Q1h81Cg6eo4ApZrFPuycwd5hGw==", + "version": "1.3.867", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.867.tgz", + "integrity": "sha512-WbTXOv7hsLhjJyl7jBfDkioaY++iVVZomZ4dU6TMe/SzucV6mUAs2VZn/AehBwuZMiNEQDaPuTGn22YK5o+aDw==", "dev": true }, "node_modules/element-resize-detector": { @@ -16241,7 +15667,7 @@ "eslint": ">=5" } }, - "node_modules/eslint-visitor-keys": { + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", @@ -16250,6 +15676,15 @@ "node": ">=10" } }, + "node_modules/eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -16290,6 +15725,15 @@ "node": ">=4" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -17603,45 +17047,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -19788,9 +19193,9 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz", - "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", + "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", "dev": true, "engines": { "node": ">=8" @@ -19877,9 +19282,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -19887,7 +19292,7 @@ "source-map": "^0.6.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { @@ -19900,9 +19305,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.3.tgz", - "integrity": "sha512-0i77ZFLsb9U3DHi22WzmIngVzfoyxxbQcZRqlF3KoKmCJGq9nhFHoGi8FqBztN2rE8w6hURnZghetn0xpkVb6A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-bFjUnc95rHjdCR63WMHUS7yfJJh8T9IPSWavvR02hhjVwezWALZ5axF9EqjmwZHpXqkzbgAMP8DmAtiyNxrdrQ==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -19973,11 +19378,6 @@ "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", "dev": true }, - "node_modules/js-search": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/js-search/-/js-search-2.0.0.tgz", - "integrity": "sha512-lJ8KzjlwcelIWuAdKyzsXv45W6OIwRpayzc7XmU8mzgWadg5UVOKVmnq/tXudddEB9Ceic3tVaGu6QOK/eebhg==" - }, "node_modules/js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -20346,15 +19746,6 @@ "yarn": ">=1.0.0" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -20446,21 +19837,6 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "node_modules/linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -20627,6 +20003,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -20761,28 +20138,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, "node_modules/markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", @@ -21111,126 +20466,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/meow/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/meow/node_modules/type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", @@ -21915,39 +21150,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/monaco-editor": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.29.1.tgz", - "integrity": "sha512-rguaEG/zrPQSaKzQB7IfX/PpNa0qxF1FY8ZXRkN4WIl8qZdTQRSRJCtRto7IMcSgrU6H53RXI+fTcywOBC4aVw==", - "dev": true - }, - "node_modules/monaco-editor-webpack-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-5.0.0.tgz", - "integrity": "sha512-KrUUTmMO3lDCNK4honZ6rrrKjOI7FFLeyCktPetIo5HlRqr5dfE6ewaA9qNLH96XY7CekE3Z+v/+I6ufAs3ObA==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0" - }, - "peerDependencies": { - "monaco-editor": "0.29.x", - "webpack": "^4.5.0 || 5.x" - } - }, - "node_modules/monaco-editor-webpack-plugin/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -22016,12 +21218,6 @@ "node": ">=8" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -22036,7 +21232,8 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true + "dev": true, + "optional": true }, "node_modules/nanoid": { "version": "3.1.25", @@ -23246,34 +22443,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "node_modules/overlayscrollbars": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", @@ -23636,38 +22805,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dev": true, - "dependencies": { - "semver": "^5.1.0" - } - }, - "node_modules/parse-semver/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -23833,6 +22975,79 @@ "node": ">=4" } }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/pnp-webpack-plugin": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", @@ -25477,64 +24692,6 @@ "node": ">=8" } }, - "node_modules/react-dev-utils/node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/react-dev-utils/node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/react-dev-utils/node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/react-dev-utils/node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/react-dev-utils/node_modules/prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -25843,18 +25000,6 @@ "react": "^16.8.0 || ^17.0.0" } }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/read-package-json-fast": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", @@ -25868,6 +25013,126 @@ "node": ">=10" } }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -26757,12 +26022,6 @@ } } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "node_modules/saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -26843,6 +26102,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -28750,35 +28010,6 @@ "node": ">=12" } }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/tree-sitter-cli": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.0.tgz", - "integrity": "sha512-4D1qapWbJXZ5rrSUGM5rcw5Vuq/smzn9KbiFRhlON6KeuuXjra+KAtDYVrDgAoLIG4ku+jbEEGrJxCptUGi3dg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "tree-sitter": "cli.js" - } - }, - "node_modules/tree-sitter-java": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/tree-sitter-java/-/tree-sitter-java-0.19.1.tgz", - "integrity": "sha512-yVm+4q1D4niaHcEf2iqhOcIaiSp3wxHjeC4eoLAqSQNVxSrhThmT1FEfM4yDgHV4XaxH+62xpKHCwYG9NzRt6Q==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "nan": "^2.14.1" - } - }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -29084,15 +28315,6 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -29111,15 +28333,6 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "node_modules/txtgen": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/txtgen/-/txtgen-2.2.8.tgz", - "integrity": "sha512-b3wteOTrO1RPV1f6dhYaNz2G48a6dCH+pvTBRMdtjTWSeVBBE4rFypoc+2uT0F7OFSgBlOQefDuDvp9VYqA73g==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -29171,17 +28384,6 @@ "node": ">= 0.6" } }, - "node_modules/typed-rest-client": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", - "dev": true, - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -29210,12 +28412,6 @@ "node": ">=4.2.0" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -29241,12 +28437,6 @@ "through": "^2.3.8" } }, - "node_modules/underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", - "dev": true - }, "node_modules/unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", @@ -29574,60 +28764,6 @@ "node": ">=8" } }, - "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "node_modules/unzipper/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -29758,12 +28894,6 @@ "querystring": "0.2.0" } }, - "node_modules/url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", - "dev": true - }, "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -30110,193 +29240,6 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "node_modules/vsce": { - "version": "1.100.1", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.100.1.tgz", - "integrity": "sha512-1VjLyse5g6e2eQ6jUpslu7IDq44velwF8Jy8s7ePdwGNuG8EzfmaOfVyig3ZSMJ0l8DiJmZllx5bRAB4RMdnHg==", - "dev": true, - "dependencies": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "denodeify": "^1.2.1", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "markdown-it": "^10.0.0", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "osenv": "^0.1.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^1.1.0", - "xml2js": "^0.4.23", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "bin": { - "vsce": "out/vsce" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/vsce/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/vsce/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/vsce/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/vsce/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/vsce/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/vsce/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/vsce/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/vsce/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.2.tgz", - "integrity": "sha512-T7uPC18+f8mYE4lbVZwb3OSmvwTZm3cuFhrdx9Bn2l11lmp3SvSuSVjy2JtvrghzjAo4G6Trqny2m9XGnFnWVA==" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.0-next.4", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.4.tgz", - "integrity": "sha512-MraVkZDhfqa3ftnKW9rEDeqsV+ji8OrtEjx6mVjzVGm5U2XXT+mdqDWyQ+y0Gvb2/aa2oJJQyTAaDmRTUKiUbg==" - }, - "node_modules/vscode-test": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", - "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - }, - "engines": { - "node": ">=8.9.3" - } - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -30673,11 +29616,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/web-tree-sitter": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", - "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -31298,28 +30236,6 @@ "node": ">=12" } }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -31346,7 +30262,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -31465,15 +30382,6 @@ "fd-slicer": "~1.1.0" } }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -31600,59 +30508,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true - }, - "suggest/javascript": { - "name": "@cucumber/suggest", - "version": "0.0.4", - "license": "MIT", - "dependencies": { - "@cucumber/cucumber-expressions": "^13.0.1", - "fuse.js": "6.4.6", - "js-search": "2.0.0", - "web-tree-sitter": "0.19.4" - }, - "devDependencies": { - "@cucumber/cucumber": "7.3.1", - "@types/js-search": "1.4.0", - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "tree-sitter-cli": "0.20.0", - "tree-sitter-java": "0.19.1", - "ts-node": "10.3.0", - "txtgen": "2.2.8", - "typescript": "4.4.4" - } - }, - "suggest/javascript/node_modules/fuse.js": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.4.6.tgz", - "integrity": "sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw==", - "engines": { - "node": ">=10" - } - }, - "vscode/javascript": { - "name": "cucumber", - "version": "0.0.1", - "dependencies": { - "@cucumber/language-server": "^0.2.0", - "vscode-languageclient": "7.0.0" - }, - "devDependencies": { - "@types/glob": "7.1.4", - "@types/mocha": "9.0.0", - "@types/node": "14.x", - "@types/vscode": "1.61.0", - "glob": "7.2.0", - "mocha": "9.1.2", - "typescript": "4.4.4", - "vsce": "1.100.1", - "vscode-test": "1.6.1" - }, - "engines": { - "vscode": "^1.59.0" - } } }, "dependencies": { @@ -33553,42 +32408,6 @@ } } }, - "@cucumber/language-server": { - "version": "file:language-server/javascript", - "requires": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@cucumber/gherkin-utils": "^7.0.0", - "@cucumber/language-service": "^0.2.0", - "@cucumber/messages": "^17.1.1", - "@cucumber/suggest": "^0.0.4", - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "source-map-support": "0.5.20", - "ts-node": "10.3.0", - "txtgen": "2.2.8", - "typescript": "4.4.4", - "vscode-languageserver": "7.0.0", - "vscode-languageserver-textdocument": "1.0.2" - } - }, - "@cucumber/language-service": { - "version": "file:language-service/javascript", - "requires": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@cucumber/gherkin": "^22.0.0", - "@cucumber/gherkin-utils": "^7.0.0", - "@cucumber/messages": "^17.1.1", - "@cucumber/suggest": "^0.0.4", - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "source-map-support": "0.5.20", - "ts-node": "10.3.0", - "typescript": "4.4.4", - "vscode-languageserver-types": "3.17.0-next.4" - } - }, "@cucumber/message-streams": { "version": "file:message-streams/javascript", "requires": { @@ -33621,23 +32440,6 @@ } } }, - "@cucumber/monaco": { - "version": "file:monaco/javascript", - "requires": { - "@cucumber/cucumber-expressions": "^13.0.1", - "@cucumber/language-service": "^0.2.0", - "@cucumber/suggest": "^0.0.4", - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "monaco-editor": "0.29.1", - "monaco-editor-webpack-plugin": "5.0.0", - "ts-node": "10.3.0", - "typescript": "4.4.4", - "webpack": "5.58.2", - "webpack-cli": "4.9.0" - } - }, "@cucumber/query": { "version": "file:query/javascript", "requires": { @@ -33725,32 +32527,6 @@ } } }, - "@cucumber/suggest": { - "version": "file:suggest/javascript", - "requires": { - "@cucumber/cucumber": "7.3.1", - "@cucumber/cucumber-expressions": "^13.0.1", - "@types/js-search": "1.4.0", - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "fuse.js": "6.4.6", - "js-search": "2.0.0", - "mocha": "9.1.2", - "tree-sitter-cli": "0.20.0", - "tree-sitter-java": "0.19.1", - "ts-node": "10.3.0", - "txtgen": "2.2.8", - "typescript": "4.4.4", - "web-tree-sitter": "0.19.4" - }, - "dependencies": { - "fuse.js": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.4.6.tgz", - "integrity": "sha512-/gYxR/0VpXmWSfZOIPS3rWwU8SHgsRTwWuXhyb2O6s7aRuVtHtxCkR33bNYu3wyLyNx/Wpv0vU7FZy8Vj53VNw==" - } - } - }, "@cucumber/tag-expressions": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@cucumber/tag-expressions/-/tag-expressions-4.1.0.tgz", @@ -37942,76 +36718,6 @@ "renderkid": "^2.0.4" } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -38163,12 +36869,6 @@ "repeat-string": "^1.6.1" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, "watchpack": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", @@ -38469,88 +37169,12 @@ "p-limit": "^3.0.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -38577,12 +37201,6 @@ "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true } } }, @@ -38911,13 +37529,12 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "locate-path": "^3.0.0" } }, "is-buffer": { @@ -38977,12 +37594,13 @@ "dev": true }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "lru-cache": { @@ -39044,12 +37662,12 @@ } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -39058,12 +37676,6 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", @@ -39071,73 +37683,6 @@ "dev": true, "requires": { "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" } }, "readable-stream": { @@ -39241,12 +37786,6 @@ "repeat-string": "^1.6.1" } }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, "watchpack": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", @@ -39506,9 +38045,9 @@ "integrity": "sha512-TL1adzq1HdxUf9WYduLcQ/DNGYiz71U31QRgbnr0Ef1cPyOUOsBojxHVWpFeOSUucB6Lrs0LxFRA14ntgtkc9w==" }, "@testing-library/dom": { - "version": "8.7.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.7.2.tgz", - "integrity": "sha512-2zN0Zv9dMnaMAd4c/1E1ZChu4QrICyvWtkUvHFQBPhS1oG3VYGcM7SLGLYdda7187ILRXzIUOvOsbXQm4EASjA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.9.0.tgz", + "integrity": "sha512-fhmAYtGpFqzKdPq5aLNn/T396qfhYkttHT/5RytdDNSCzg9K/0F/WXF5iDsNBK1M3ZIQbPy7Y0qm4Kup5bqT/w==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", @@ -39694,12 +38233,6 @@ "@types/istanbul-lib-report": "*" } }, - "@types/js-search": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@types/js-search/-/js-search-1.4.0.tgz", - "integrity": "sha1-8tSvoXak/HsX+0ahWThHiH+h+3s=", - "dev": true - }, "@types/jsdom": { "version": "16.2.13", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.13.tgz", @@ -39959,12 +38492,6 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==" }, - "@types/vscode": { - "version": "1.61.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.61.0.tgz", - "integrity": "sha512-9k5Nwq45hkRwdfCFY+eKXeQQSbPoA114mF7U/4uJXRBJeGIO7MuJdhF1PnaDN+lllL9iKGQtd6FFXShBXMNaFg==", - "dev": true - }, "@types/webpack": { "version": "4.41.31", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", @@ -40118,14 +38645,6 @@ "requires": { "@typescript-eslint/types": "5.0.0", "eslint-visitor-keys": "^3.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", - "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", - "dev": true - } } }, "@ungap/promise-all-settled": { @@ -41035,16 +39554,6 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "azure-devops-node-api": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", - "integrity": "sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A==", - "dev": true, - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, "babel-loader": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", @@ -41319,28 +39828,12 @@ "open": "^7.0.3" } }, - "big-integer": { - "version": "1.6.49", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", - "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==", - "dev": true - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -41691,24 +40184,12 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true - }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -41964,15 +40445,6 @@ "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -41998,34 +40470,6 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } - }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, "chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", @@ -42626,9 +41070,9 @@ "dev": true }, "core-js-compat": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.2.tgz", - "integrity": "sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "dev": true, "requires": { "browserslist": "^4.17.3", @@ -42644,9 +41088,9 @@ } }, "core-js-pure": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.2.tgz", - "integrity": "sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", "dev": true }, "core-util-is": { @@ -43262,22 +41706,6 @@ "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==", "dev": true }, - "cucumber": { - "version": "file:vscode/javascript", - "requires": { - "@cucumber/language-server": "^0.2.0", - "@types/glob": "7.1.4", - "@types/mocha": "9.0.0", - "@types/node": "14.x", - "@types/vscode": "1.61.0", - "glob": "7.2.0", - "mocha": "9.1.2", - "typescript": "4.4.4", - "vsce": "1.100.1", - "vscode-languageclient": "7.0.0", - "vscode-test": "1.6.1" - } - }, "cyclist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", @@ -43442,12 +41870,6 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -43731,47 +42153,6 @@ "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -43858,9 +42239,9 @@ "integrity": "sha1-ZVQbswnd3Qz5Ty0ciGGyvmUbsNU=" }, "electron-to-chromium": { - "version": "1.3.864", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.864.tgz", - "integrity": "sha512-v4rbad8GO6/yVI92WOeU9Wgxc4NA0n4f6P1FvZTY+jyY7JHEhw3bduYu60v3Q1h81Cg6eo4ApZrFPuycwd5hGw==", + "version": "1.3.867", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.867.tgz", + "integrity": "sha512-WbTXOv7hsLhjJyl7jBfDkioaY++iVVZomZ4dU6TMe/SzucV6mUAs2VZn/AehBwuZMiNEQDaPuTGn22YK5o+aDw==", "dev": true }, "element-resize-detector": { @@ -44304,6 +42685,12 @@ } } }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -44573,12 +42960,20 @@ "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", "dev": true }, "espree": { @@ -45626,38 +44021,6 @@ "dev": true, "optional": true }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -47232,9 +45595,9 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz", - "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", + "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", "dev": true }, "istanbul-lib-hook": { @@ -47304,9 +45667,9 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -47323,9 +45686,9 @@ } }, "istanbul-reports": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.3.tgz", - "integrity": "sha512-0i77ZFLsb9U3DHi22WzmIngVzfoyxxbQcZRqlF3KoKmCJGq9nhFHoGi8FqBztN2rE8w6hURnZghetn0xpkVb6A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-bFjUnc95rHjdCR63WMHUS7yfJJh8T9IPSWavvR02hhjVwezWALZ5axF9EqjmwZHpXqkzbgAMP8DmAtiyNxrdrQ==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -47382,11 +45745,6 @@ "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", "dev": true }, - "js-search": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/js-search/-/js-search-2.0.0.tgz", - "integrity": "sha512-lJ8KzjlwcelIWuAdKyzsXv45W6OIwRpayzc7XmU8mzgWadg5UVOKVmnq/tXudddEB9Ceic3tVaGu6QOK/eebhg==" - }, "js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -47682,12 +46040,6 @@ "dotenv-expand": "^5.1.0" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -47760,21 +46112,6 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -47911,6 +46248,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -48010,27 +46348,6 @@ "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "dev": true }, - "markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "dependencies": { - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - } - } - }, "markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", @@ -48284,94 +46601,6 @@ "yargs-parser": "^18.1.3" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, "type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", @@ -48872,34 +47101,6 @@ } } }, - "monaco-editor": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.29.1.tgz", - "integrity": "sha512-rguaEG/zrPQSaKzQB7IfX/PpNa0qxF1FY8ZXRkN4WIl8qZdTQRSRJCtRto7IMcSgrU6H53RXI+fTcywOBC4aVw==", - "dev": true - }, - "monaco-editor-webpack-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-5.0.0.tgz", - "integrity": "sha512-KrUUTmMO3lDCNK4honZ6rrrKjOI7FFLeyCktPetIo5HlRqr5dfE6ewaA9qNLH96XY7CekE3Z+v/+I6ufAs3ObA==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -48958,12 +47159,6 @@ "minimatch": "^3.0.4" } }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -48978,7 +47173,8 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true + "dev": true, + "optional": true }, "nanoid": { "version": "3.1.25", @@ -49950,28 +48146,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "overlayscrollbars": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz", @@ -50260,37 +48434,11 @@ "lines-and-columns": "^1.1.6" } }, - "parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dev": true, - "requires": { - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -50420,6 +48568,60 @@ "find-up": "^2.1.0" } }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, "pnp-webpack-plugin": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", @@ -51658,51 +49860,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "prompts": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", @@ -51947,15 +50104,6 @@ "use-latest": "^1.0.0" } }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, "read-package-json-fast": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", @@ -51966,6 +50114,94 @@ "npm-normalize-package-bin": "^1.0.1" } }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", @@ -52646,12 +50882,6 @@ "neo-async": "^2.6.2" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -52717,6 +50947,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -54275,27 +52506,6 @@ "punycode": "^2.1.1" } }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "tree-sitter-cli": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.0.tgz", - "integrity": "sha512-4D1qapWbJXZ5rrSUGM5rcw5Vuq/smzn9KbiFRhlON6KeuuXjra+KAtDYVrDgAoLIG4ku+jbEEGrJxCptUGi3dg==", - "dev": true - }, - "tree-sitter-java": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/tree-sitter-java/-/tree-sitter-java-0.19.1.tgz", - "integrity": "sha512-yVm+4q1D4niaHcEf2iqhOcIaiSp3wxHjeC4eoLAqSQNVxSrhThmT1FEfM4yDgHV4XaxH+62xpKHCwYG9NzRt6Q==", - "dev": true, - "requires": { - "nan": "^2.14.1" - } - }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", @@ -54528,12 +52738,6 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -54549,12 +52753,6 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "txtgen": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/txtgen/-/txtgen-2.2.8.tgz", - "integrity": "sha512-b3wteOTrO1RPV1f6dhYaNz2G48a6dCH+pvTBRMdtjTWSeVBBE4rFypoc+2uT0F7OFSgBlOQefDuDvp9VYqA73g==", - "dev": true - }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", @@ -54591,17 +52789,6 @@ "mime-types": "~2.1.24" } }, - "typed-rest-client": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", - "dev": true, - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -54623,12 +52810,6 @@ "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -54651,12 +52832,6 @@ "through": "^2.3.8" } }, - "underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", - "dev": true - }, "unfetch": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", @@ -54903,62 +53078,6 @@ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - }, - "dependencies": { - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -55076,12 +53195,6 @@ } } }, - "url-join": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", - "dev": true - }, "url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", @@ -55334,161 +53447,6 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "vsce": { - "version": "1.100.1", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.100.1.tgz", - "integrity": "sha512-1VjLyse5g6e2eQ6jUpslu7IDq44velwF8Jy8s7ePdwGNuG8EzfmaOfVyig3ZSMJ0l8DiJmZllx5bRAB4RMdnHg==", - "dev": true, - "requires": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "denodeify": "^1.2.1", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "leven": "^3.1.0", - "lodash": "^4.17.15", - "markdown-it": "^10.0.0", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "osenv": "^0.1.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^1.1.0", - "xml2js": "^0.4.23", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "requires": { - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - }, - "dependencies": { - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - } - } - }, - "vscode-languageserver-textdocument": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.2.tgz", - "integrity": "sha512-T7uPC18+f8mYE4lbVZwb3OSmvwTZm3cuFhrdx9Bn2l11lmp3SvSuSVjy2JtvrghzjAo4G6Trqny2m9XGnFnWVA==" - }, - "vscode-languageserver-types": { - "version": "3.17.0-next.4", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.4.tgz", - "integrity": "sha512-MraVkZDhfqa3ftnKW9rEDeqsV+ji8OrtEjx6mVjzVGm5U2XXT+mdqDWyQ+y0Gvb2/aa2oJJQyTAaDmRTUKiUbg==" - }, - "vscode-test": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", - "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -55816,11 +53774,6 @@ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" }, - "web-tree-sitter": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.19.4.tgz", - "integrity": "sha512-8G0xBj05hqZybCqBtW7RPZ/hWEtP3DiLTauQzGJZuZYfVRgw7qj7iaZ+8djNqJ4VPrdOO+pS2dR1JsTbsLxdYg==" - }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -56274,22 +54227,6 @@ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -56310,7 +54247,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yaml": { "version": "1.10.2", @@ -56400,15 +54338,6 @@ "fd-slicer": "~1.1.0" } }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" - } - }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/suggest/.rsync b/suggest/.rsync deleted file mode 100644 index ea5a5de249b..00000000000 --- a/suggest/.rsync +++ /dev/null @@ -1 +0,0 @@ -../.templates/default.mk default.mk diff --git a/suggest/CHANGELOG.md b/suggest/CHANGELOG.md deleted file mode 100644 index cc8653914b9..00000000000 --- a/suggest/CHANGELOG.md +++ /dev/null @@ -1,64 +0,0 @@ -# CHANGE LOG -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/) -and this project adheres to [Semantic Versioning](http://semver.org/). - ----- -## [Unreleased] - -### Added - -### Changed - -* The `StepDocument` type now includes an `expression: Expression` field. - -### Deprecated - -### Removed - -### Fixed - -## [0.0.4] - 2021-09-15 - -### Changed - -* Upgrade to `@cucumber/cucumber-expressions 13.0.1` - -## [0.0.3] - 2021-09-01 - -### Added - -* Build choices based on all values for a parameter type, across steps - ([#1671](https://github.com/cucumber/common/pull/1671) - [aslakhellesoy]) - -## [0.0.2] - 2021-07-15 - -### Added - -* Added `suggestion` string property on `StepDocument` - ([#1657](https://github.com/cucumber/common/pull/1657) - [aslakhellesoy]) - -### Changed - -* The `StepDocument` type has changed to `{ suggestion: string, segments: StepSegments }` - ([#1657](https://github.com/cucumber/common/pull/1657) - [aslakhellesoy]) - -## [0.0.1] - -### Added - -* First release! - - -[Unreleased]: https://github.com/cucumber/common/compare/suggest/v0.0.4...main -[0.0.4]: https://github.com/cucumber/common/tree/suggest/v0.0.3 -[0.0.3]: https://github.com/cucumber/common/tree/suggest/v0.0.2 -[0.0.2]: https://github.com/cucumber/common/tree/suggest/v0.0.1 -[0.0.1]: https://github.com/cucumber/common/tree/suggest/v0.0.1 - - -[aslakhellesoy]: https://github.com/aslakhellesoy diff --git a/suggest/Makefile b/suggest/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/suggest/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/suggest/default.mk b/suggest/default.mk deleted file mode 100644 index a0d8dd28fb4..00000000000 --- a/suggest/default.mk +++ /dev/null @@ -1,89 +0,0 @@ -# Please update /.templates/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE = $(shell which apk 2> /dev/null) -LIBNAME = $(shell basename $$(pwd)) -LANGUAGES ?= $(wildcard */) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: $(patsubst %,default-%,$(LANGUAGES)) -.PHONY: default - -default-%: % - if [[ -d $< ]]; then cd $< && make default; fi -.PHONY: default-% - -# Need to declare these phonies to avoid errors for packages without a particular language -.PHONY: c dotnet go java javascript objective-c perl python ruby - -update-dependencies: $(patsubst %,update-dependencies-%,$(LANGUAGES)) -.PHONY: update-dependencies - -update-dependencies-%: % - if [[ -d $< ]]; then cd $< && make update-dependencies; fi -.PHONY: update-dependencies-% - -update-changelog: -ifdef NEW_VERSION - cat CHANGELOG.md | ../scripts/update_changelog.sh $(NEW_VERSION) > CHANGELOG.md.tmp - mv CHANGELOG.md.tmp CHANGELOG.md -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-changelog - -pre-release: update-changelog $(patsubst %,pre-release-%,$(LANGUAGES)) -.PHONY: pre-release - -pre-release-%: % - if [[ -d $< ]]; then cd $< && make pre-release; fi -.PHONY: pre-release-% - -release: publish -.PHONY: release - -publish: create-and-push-release-tag $(patsubst %,publish-%,$(LANGUAGES)) -.PHONY: publish - -publish-%: % - if [[ -d $< ]]; then cd $< && make publish; fi -.PHONY: publish-% - -create-and-push-release-tag: - [ -f '/home/cukebot/configure' ] && /home/cukebot/configure - git commit --gpg-sign --all --message "Release $(LIBNAME) v$(NEW_VERSION)" - git tag --sign "$(LIBNAME)/v$(NEW_VERSION)" -m "Release $(LIBNAME) v$(NEW_VERSION)" - git push --tags -.PHONY: create-and-push-release-tag - -post-release: $(patsubst %,post-release-%,$(LANGUAGES)) -.PHONY: post-release - -post-release: commit-and-push-post-release - -post-release-%: % - if [[ -d $< ]]; then cd $< && make post-release; fi -.PHONY: post-release-% - -commit-and-push-post-release: -ifdef NEW_VERSION - git push --tags - git commit --gpg-sign --all --message "Post release $(LIBNAME) v$(NEW_VERSION)" 2> /dev/null || true - git push -else - @echo -e "\033[0;31mNEW_VERSION is not defined.\033[0m" - exit 1 -endif -.PHONY: commit-and-push-post-release - -clean: $(patsubst %,clean-%,$(LANGUAGES)) -.PHONY: clean - -clean-%: % - if [[ -d $< ]]; then cd $< && make clean; fi -.PHONY: clean-% diff --git a/suggest/javascript/.gitignore b/suggest/javascript/.gitignore deleted file mode 100644 index 385b67bb27c..00000000000 --- a/suggest/javascript/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -dist/ -.idea/ -.nyc_output/ -coverage/ -node_modules/ -yarn.lock -package-lock.json -*.log -.deps -.tested* -.linted -.built* -.compared -.codegen -acceptance/ -storybook-static -*-go -*.iml -.vscode-test diff --git a/suggest/javascript/.mocharc.json b/suggest/javascript/.mocharc.json deleted file mode 100644 index d5055eb10d0..00000000000 --- a/suggest/javascript/.mocharc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], - "extension": ["ts", "tsx"], - "recursive": true, - "timeout": 10000 -} diff --git a/suggest/javascript/.rsync b/suggest/javascript/.rsync deleted file mode 100644 index 5592adbd0c2..00000000000 --- a/suggest/javascript/.rsync +++ /dev/null @@ -1,2 +0,0 @@ -../../LICENSE LICENSE -../../.templates/javascript/ . diff --git a/suggest/javascript/.vscodeignore b/suggest/javascript/.vscodeignore deleted file mode 100644 index f369b5e55b6..00000000000 --- a/suggest/javascript/.vscodeignore +++ /dev/null @@ -1,4 +0,0 @@ -.vscode/** -.vscode-test/** -.gitignore -vsc-extension-quickstart.md diff --git a/suggest/javascript/LICENSE b/suggest/javascript/LICENSE deleted file mode 100644 index 725ba9f4ac7..00000000000 --- a/suggest/javascript/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/suggest/javascript/Makefile b/suggest/javascript/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/suggest/javascript/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/suggest/javascript/Monaco.gif b/suggest/javascript/Monaco.gif deleted file mode 100644 index 7b9d89d6498..00000000000 Binary files a/suggest/javascript/Monaco.gif and /dev/null differ diff --git a/suggest/javascript/README.md b/suggest/javascript/README.md deleted file mode 100644 index 6e924f7c828..00000000000 --- a/suggest/javascript/README.md +++ /dev/null @@ -1,269 +0,0 @@ -# Cucumber Suggest - -This is a library that can be used to build Gherkin step auto-complete in editors. -It does not implement a UI component, but it can provide *suggestions* to an editor's auto-complete component. - -Here is an example of a [Monaco editor](https://microsoft.github.io/monaco-editor/) using this library: - -![Monaco](Monaco.gif) - -## Architecture - -The suggest system consists of multiple components, each of which may run in a different process. - -``` -+--------------------+ +---------------+ +-------+ -| Cucumber/Regular | | | | | -| Expressions | | Gherkin Steps | | | -| (Step definitions) | | | | | -+----------+---------+ +-------+-------+ | | - | | | | - | | | | - +-------------+-----------+ | | - | | | - | | | - +---------v----------+ | | - | buildStepDocuments | | | - | (Transform) | | ETL | - +---------+----------+ | | - | | | - | | | - | | | - +-------v--------+ | | - | Step Documents | | | - +-------+--------+ | | - | | | - | | | - | | | - +-----v-----+ | | - | Storage | | | - +-----^-----+ +-------+ - | - +--------+-------+ - | | - +---+----+ +----+----+ - | LSP | | Editor | - | Server | | Plugin | - +---^----+ +----^----+ - | | - | | - +---+----+ +----+----+ - | LSP | | Editor | - | Editor | |(Non-LSP)| - +--------+ +---------+ -``` - -### ETL process for Step Documents - -At the top right of the diagram is an [ETL](https://en.wikipedia.org/wiki/Extract,_transform,_load) process. Implementing -a full ETL process is currently beyond the scope of this library - it only implements the **transform** step. A full ETL -process would do the following: - -First, **extract** [Cucumber Expressions](../../cucumber-expressions) and Regular Expressions from step definitions, -and the text from Gherkin Steps. This can be done by parsing [Cucumber Messages](../../messages) from Cucumber dry-runs. - -Second, **transform** the expressions and steps to [Step Documents](#step-documents) using the `buildStepDocuments` function. - -Third, **load** the *Step Documents* into a persistent storage. This can be a [search index](https://en.wikipedia.org/wiki/Search_engine_indexing), -or some other form of persistent storage (such as a file in a file system or a database). -See the [Search Index](#search-index) section below for more details. - -### Editor suggest - -This library does not implement any editor functionality, but it *does define* the *Step Document* data structure -on which editor auto-complete can be implemented. There are two ways to build support for an editor. - -What is common for both approaches is that they will query a search index. - -The `StepDocument`s coming back from an index search can be converted to an -[LSP Completion Snippet](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax) -using the `lspCompletionSnippet` function. - -For example, this `StepDocument`: - -`["I have ", ["42", "54"], " cukes in my ", ["basket", "belly"]]` - -becomes the following LSP Completion Snippet: - -`I have ${1|42,54|} cukes in my ${2|basket,belly|}` - -### LSP - -With the [LSP](https://microsoft.github.io/language-server-protocol/) approach, the storage is typically a -[search index](https://en.wikipedia.org/wiki/Search_engine_indexing). -When the user invokes the auto-complete command in the editor, the editor will send a -[completion request](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#textDocument_completion) -to the LSP server. The LSP server queries the search index, and uses the returned *Step Documents* to build the response to -the completion request. - -### Dedicated plugin - -With the dedicated plugin approach, the storage is typically a file system or a database. -When the editor plugin is loaded, it will fetch the *Step Documents* from the storage in raw form, -and add them to an embedded (in-memory) search index. - -When the user invokes the auto-complete command in the editor, the editor plugin will query the in-memory search index -and use the editor's native API to present the suggestions. - -## Examples - -The examples below illustrate how the library works from the perspective of a user, with a full stack. The ETL process -and the index all run in-memory. - -(Yep, this README.md file is executed by Cucumber.js)! - -The suggestions in the examples use the -[LSP Completion Snippet syntax](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax) -to represent search results. - -### Rule: Suggestions are based on both steps and step definitions - -#### Example: Two suggestions from Cucumber Expression - -* Given the following Gherkin step texts exist: - | Gherkin Step | - | ------------------------------ | - | I have 23 cukes in my belly | - | I have 11 cukes on my table | - | I have 11 cukes in my suitcase | - | the weather forecast is rain | -* And the following Step Definitions exist: - | Cucumber Expression | - | ---------------------------------- | - | I have {int} cukes in/on my {word} | - | the weather forecast is {word} | -* When I type "cukes" -* Then the suggestions should be: - | Suggestion | - | ------------------------------- | - | I have {int} cukes in my {word} | - | I have {int} cukes on my {word} | - -#### Example: One suggestion from Regular Expression - -* Given the following Gherkin step texts exist: - | Gherkin Step | - | -------------------------------- | - | I have 23 cukes in my "belly" | - | I have 11 cukes in my "suitcase" | -* And the following Step Definitions exist: - | Regular Expression | - | ----------------------------------------------- | - | /I have (\d\d) cukes in my "(belly\|suitcase)"/ | -* When I type "cukes" -* Then the suggestions should be: - | Suggestion | - | -------------------------- | - | I have {} cukes in my "{}" | - -The parameters are not named, because the regular expression doesn't have named capture groups. - -### Rule: Parameter choices are based on all steps - -The available choices for a parameter type are built from *all* the choices -encoutered for that parameter type, across steps. - -#### Example: {int} and {word} choices are build from three steps - -* Given the following Gherkin step texts exist: - | Gherkin Step | - | -------------------------------- | - | I have 23 cukes in my belly | - | I have 11 cukes on my table | - | there are 17 apples on the tree | -* And the following Step Definitions exist: - | Cucumber Expression | - | ------------------------------------ | - | I have {int} cukes in/on my {word} | - | there are {int} apples on the {word} | -* When I type "cukes" -* And I select the 2nd snippet -* Then the LSP snippet should be "I have ${1|11,17,23|} cukes on my ${2|belly,table,tree|}" - -LSP-compatible editors such as -[Monaco Editor](https://microsoft.github.io/monaco-editor/) or -[Visual Studio Code](https://code.visualstudio.com/) can display these suggestions -as `I have {int} cukes in my {word}` and `I have {int} cukes on my {word}`. - -When the user chooses a suggestion, the editor will focus the editor at the first parameter and -let the user choose between `11`, `17` or `23` (or type a custom value). When the user has made a choice, -the focus moves to the next parameter and suggests `belly`, `table` or `tree`. - -### Rule: Suggestions must have a matching step definition - -It isn't enough to type something that matches an existing step - -the existing step must also have a matching step definition. - -#### Example: Nothing matches - -* Given the following Gherkin step texts exist: - | Gherkin Step | - | --------------------------- | - | I have 42 cukes in my belly | -* And the following Step Definitions exist: - | Step Definition Expression | - | -------------------------- | - | Something else | -* When I type "cukes" -* Then the suggestions should be empty - -### Step Documents - -A *Step Document* is a data structure with the following properties: - -* `suggestion` - what the user will see when the editor presents a suggestion -* `segments` - what the editor will use to *insert* a suggestion, along with choices for parameters - -A *Step Document* can be represented as a JSON document. Here is an example: - - { - "suggestion": "I have {int} cukes in my belly", - "segments": ["I have ", ["42", "54"], " cukes in my ", ["basket", "belly"]] - } - -The `segments` field is an array of `Text` (a string) or `Choices` (an array of strings). -The purpose of the `Choices` is to present the user with *possible* values for step parameters. -The segments above could be used to write the following steps texts: - -* `I have 42 cukes in my basket` -* `I have 54 cukes in my basket` -* `I have 42 cukes in my belly` -* `I have 54 cukes in my belly` - -When a *Step Document* is added to a search index, it should use the `segments` field for indexing. - -The `segments` field can also be used to build an -[LSP Completion Snippet](https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax) - -### Search Index - -Each `StepDocument` can be added to a *search index*, either during the ETL process, or inside a dedicated editor plugin. -The search index will return matching `StepDocument`s for a search term. - -The index is a function with the following signature: - -`type Index = (text: string) => readonly StepDocument[]` - -There are three experimental search index implementations in this library: - -* `fuseIndex` (based on [Fuse.js](https://fusejs.io/)) -* `jsSearchIndex` (based on [JS Search](http://bvaughn.github.io/js-search/)) -* `bruteForceIndex` (based on [String.prototype.includes()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes)) - -They are currently only in the test code, but one of them might be promoted to be part of the library at a later stage -when we have tried them out on real data. - -See the `Index.test.ts` contract test for more details about how the indexes behave. - -### Not in this library - -It's beyond the scope of this library to implement an LSP server. -An LSP server could be built on this library though. - -It is also beyond the scope of this library to provide any kind of UI component. -For LSP-capable editors this isn't even needed - it is built into the editor. - -For non-LSP capable editors written in JavaScript (such as CodeMirror) it would be possible to -build an auto-complete plugin that uses one of the `Index` implementations in this library. -Building the `StepDocument`s could happen on a server somewhere, and could be transferred to -the browser over HTTP/JSON. diff --git a/suggest/javascript/cucumber.js b/suggest/javascript/cucumber.js deleted file mode 100644 index 8b06ffad1bf..00000000000 --- a/suggest/javascript/cucumber.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - default: "--publish-quiet --require features/support/env.js --require 'features/**/*.ts' README.md", - lsp: "--publish-quiet --require features/support/env.js --require 'features/**/*.ts' README.md --dry-run --format message", -} diff --git a/suggest/javascript/default.mk b/suggest/javascript/default.mk deleted file mode 100644 index b04d59c4a2b..00000000000 --- a/suggest/javascript/default.mk +++ /dev/null @@ -1,87 +0,0 @@ -SHELL := /usr/bin/env bash -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -TYPESCRIPT_SOURCE_FILES = $(sort $(call rwildcard,src test,*.ts *.tsx)) -PRIVATE = $(shell node -e "console.log(require('./package.json').private)") -IS_TESTDATA = $(findstring -testdata,${CURDIR}) -NPM_MODULE = $(shell cat package.json | jq .name --raw-output) - -default: .tested -.PHONY: default - -../../node_modules ../../package-lock.json: package.json - cd ../.. && npm install - -.codegen: - touch $@ - -.tested: .tested-npm .built - -.built: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - pushd ../.. && \ - npm run build && \ - popd && \ - touch $@ - -.tested-npm: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - npm run test - touch $@ - -pre-release: clean update-version update-dependencies default -.PHONY: pre-release - -update-dependencies: ../../node_modules ../../package-lock.json - ../../node_modules/.bin/npm-check-updates --upgrade --reject hast-util-sanitize,@types/node,react-markdown,rehype-raw,rehype-sanitize,remark-gfm -.PHONY: update-dependencies - -update-version: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifdef NEW_VERSION - npm --no-git-tag-version --allow-same-version version "$(NEW_VERSION)" - # Update all npm packages that depend on us - pushd ../.. && \ - ./scripts/npm-each update_npm_dependency_if_exists package.json "$(NPM_MODULE)" "$(NEW_VERSION)" -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -endif -.PHONY: update-version - -publish: .codegen -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (true,$(PRIVATE)) - npm publish --access public -else - @echo "Not publishing private npm module" -endif -endif -.PHONY: publish - -post-release: -.PHONY: post-release - -clean: clean-javascript -.PHONY: clean - -clean-javascript: - rm -rf .deps .codegen .tested* coverage dist acceptance -.PHONY: clean-javascript - -clobber: clean - rm -rf node_modules ../../node_modules -.PHONY: clobber - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/suggest/javascript/features/step_definitions/steps.ts b/suggest/javascript/features/step_definitions/steps.ts deleted file mode 100644 index 773aba0e525..00000000000 --- a/suggest/javascript/features/step_definitions/steps.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { DataTable, Given, Then, When } from '@cucumber/cucumber' -import World from '../support/World' -import assert from 'assert' -import { ExpressionFactory, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' -import { lspCompletionSnippet, bruteForceIndex, buildStepDocuments } from '../../src' - -Given('the following Gherkin step texts exist:', function (this: World, stepsTable: DataTable) { - this.steps = stepsTable.rows().map((row) => row[0]) -}) - -Given( - 'the following Step Definitions exist:', - function (this: World, stepDefinitionsTable: DataTable) { - const parameterTypeRegistry = new ParameterTypeRegistry() - const expressionFactory = new ExpressionFactory(parameterTypeRegistry) - this.expressions = stepDefinitionsTable.rows().map((row) => { - const expressionSource = row[0] - const match = expressionSource.match(/^\/(.*)\/$/) - const stringOrRegexp = match ? new RegExp(match[1]) : expressionSource - return expressionFactory.createExpression(stringOrRegexp) - }) - } -) - -When('I type {string}', function (this: World, text: string) { - const stepDocuments = buildStepDocuments(this.steps, this.expressions) - const index = bruteForceIndex(stepDocuments) - this.suggestedStepDocuments = index(text) -}) - -When('I select the {ordinal} snippet', function (this: World, selectedSuggestionIndex: number) { - this.selectedSuggestionIndex = selectedSuggestionIndex -}) - -Then('the suggestions should be:', function (this: World, expectedSuggetionsTable: DataTable) { - const expectedSuggestions: readonly string[] = expectedSuggetionsTable.rows().map((row) => row[0]) - assert.deepStrictEqual( - this.suggestedStepDocuments.map((doc) => doc.suggestion), - expectedSuggestions - ) -}) - -Then('the suggestions should be empty', function (this: World) { - assert.deepStrictEqual(this.suggestedStepDocuments, []) -}) - -Then('the LSP snippet should be {string}', function (this: World, expectedText: string) { - const selectedSuggestion = this.suggestedStepDocuments[this.selectedSuggestionIndex] - assert.strictEqual(lspCompletionSnippet(selectedSuggestion.segments), expectedText) -}) diff --git a/suggest/javascript/features/support/World.ts b/suggest/javascript/features/support/World.ts deleted file mode 100644 index f69b6433623..00000000000 --- a/suggest/javascript/features/support/World.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { setWorldConstructor, defineParameterType } from '@cucumber/cucumber' -import { Expression } from '@cucumber/cucumber-expressions' -import { StepDocument } from '../../src' - -defineParameterType({ - name: 'ordinal', - regexp: /(\d+)(?:st|nd|rd|th)/, - transformer(s) { - return +s - 1 - }, -}) - -export default class World { - /** - * The known Gherkin steps - */ - steps: readonly string[] = [] - - /** - * The known [Cucumber|Regular]Expressions from the step definitions - */ - expressions: readonly Expression[] = [] - - /** - * The results of calling the index(text) function - */ - suggestedStepDocuments: readonly StepDocument[] - - /** - * The index of the selected suggestion - */ - selectedSuggestionIndex: number -} - -setWorldConstructor(World) diff --git a/suggest/javascript/features/support/env.js b/suggest/javascript/features/support/env.js deleted file mode 100644 index 21c88add726..00000000000 --- a/suggest/javascript/features/support/env.js +++ /dev/null @@ -1,4 +0,0 @@ -require('ts-node').register({ - transpileOnly: true -}) -require('source-map-support/register') diff --git a/suggest/javascript/package.json b/suggest/javascript/package.json deleted file mode 100644 index ac98092c8de..00000000000 --- a/suggest/javascript/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@cucumber/suggest", - "version": "0.0.4", - "description": "Library for suggesting steps", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", - "scripts": { - "test": "npm run cucumber && npm run mocha", - "mocha": "mocha", - "cucumber": "cucumber-js", - "prepublishOnly": "tsc --build tsconfig.build.json", - "build-wasm": "npx tree-sitter build-wasm ../../node_modules/tree-sitter-java" - }, - "repository": { - "type": "git", - "url": "git://github.com/cucumber/cucumber.git" - }, - "keywords": [ - "cucumber", - "suggest", - "autocomplete" - ], - "author": "Cucumber Limited ", - "license": "MIT", - "bugs": { - "url": "https://github.com/cucumber/common/issues" - }, - "homepage": "https://github.com/cucumber/common#readme", - "devDependencies": { - "@cucumber/cucumber": "7.3.1", - "@types/js-search": "1.4.0", - "@types/mocha": "9.0.0", - "@types/node": "14.17.22", - "mocha": "9.1.2", - "txtgen": "2.2.8", - "tree-sitter-cli": "0.20.0", - "tree-sitter-java": "0.19.1", - "ts-node": "10.3.0", - "typescript": "4.4.4" - }, - "dependencies": { - "@cucumber/cucumber-expressions": "^13.0.1", - "fuse.js": "6.4.6", - "js-search": "2.0.0", - "web-tree-sitter": "0.19.4" - } -} diff --git a/suggest/javascript/src/buildStepDocuments.ts b/suggest/javascript/src/buildStepDocuments.ts deleted file mode 100644 index ae76d80cb3a..00000000000 --- a/suggest/javascript/src/buildStepDocuments.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { StepDocument } from './types' -import { Expression } from '@cucumber/cucumber-expressions' - -type TextOrParameterTypeNameExpression = TextOrParameterTypeNameSegment[] -type TextOrParameterTypeNameSegment = string | ParameterTypeData -type ParameterTypeData = { name: string; regexpStrings: string } - -/** - * Builds an array of {@link StepDocument} from steps and step definitions. - * - * @param stepTexts - * @param expressions - * @param maxChoices - */ -export function buildStepDocuments( - stepTexts: readonly string[], - expressions: readonly Expression[], - maxChoices = 10 -): readonly StepDocument[] { - const jsonTextOrParameterTypeNameExpression = new Set() - const choicesByParameterTypeRegexpStrings = new Map>() - const expressionByJson = new Map() - - for (const expression of expressions) { - for (const text of stepTexts) { - const args = expression.match(text) - if (args) { - const parameterTypes = args.map((arg) => arg.getParameterType()) - const textOrParameterTypeNameExpression: TextOrParameterTypeNameExpression = [] - let index = 0 - for (let argIndex = 0; argIndex < args.length; argIndex++) { - const arg = args[argIndex] - - const segment = text.substring(index, arg.group.start) - textOrParameterTypeNameExpression.push(segment) - const parameterType = parameterTypes[argIndex] - const regexpStrings = parameterType.regexpStrings.join('|') - textOrParameterTypeNameExpression.push({ name: parameterType.name || '', regexpStrings }) - let choices = choicesByParameterTypeRegexpStrings.get(regexpStrings) - if (!choices) { - choices = new Set() - choicesByParameterTypeRegexpStrings.set(regexpStrings, choices) - } - choices.add(arg.group.value) - - index = arg.group.end - } - const lastSegment = text.substring(index) - if (lastSegment !== '') { - textOrParameterTypeNameExpression.push(lastSegment) - } - const json = JSON.stringify(textOrParameterTypeNameExpression) - expressionByJson.set(json, expression) - jsonTextOrParameterTypeNameExpression.add(json) - } - } - } - - return [...jsonTextOrParameterTypeNameExpression].sort().map((json) => { - const textOrParameterTypeNameExpression: TextOrParameterTypeNameExpression = JSON.parse(json) - const expression = expressionByJson.get(json) - - const suggestion = textOrParameterTypeNameExpression - .map((segment) => { - if (typeof segment === 'string') { - return segment - } else { - return `{${segment.name}}` - } - }) - .join('') - - const segments = textOrParameterTypeNameExpression.map((segment) => { - if (typeof segment === 'string') { - return segment - } else { - const choices = choicesByParameterTypeRegexpStrings.get(segment.regexpStrings) - return [...choices].sort().slice(0, maxChoices) - } - }) - - const stepDocument: StepDocument = { - suggestion, - segments, - expression - } - - return stepDocument - }) -} diff --git a/suggest/javascript/src/expressions/java.ts b/suggest/javascript/src/expressions/java.ts deleted file mode 100644 index bda7f40d33e..00000000000 --- a/suggest/javascript/src/expressions/java.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Expression, ExpressionFactory, ParameterType, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' -import Parser from 'web-tree-sitter' - -export function buildExpressions(parser: Parser, Java: Parser.Language, sources: string[]): readonly Expression[] { - let matches: Parser.QueryMatch[] = [] - for (const source of sources) { - matches = matches.concat(queryMethodAnnotations(parser, Java, source)) - } - const parameterTypeRegistry = new ParameterTypeRegistry() - - for (const match of matches) { - const parameterType = buildParameterType(match) - if(parameterType) { - parameterTypeRegistry.defineParameterType(parameterType) - } - } - - let expressions: Expression[] = [] - const expressionFactory = new ExpressionFactory(parameterTypeRegistry) - for (const match of matches) { - const expression = buildExpression(match, expressionFactory) - if(expression) { - expressions.push(expression) - } - } - return expressions -} - -function queryMethodAnnotations(parser: Parser, Java: Parser.Language, source: string): readonly Parser.QueryMatch[] { - parser.setLanguage(Java) - const tree = parser.parse(source) - // See https://github.com/tree-sitter/tree-sitter/issues/1392 - const methodAnnotationQuery = Java.query(` -(method_declaration - (modifiers - (annotation - name: [(identifier) (scoped_identifier)] @annotation-name - arguments: (annotation_argument_list - (string_literal)? @literal-value - ) - ) - ) - name: (identifier) @method-name -) - `) - return methodAnnotationQuery.matches(tree.rootNode) -} - -function buildParameterType(match: Parser.QueryMatch): ParameterType | null { - const annotationNameNode = match.captures.find(c => c.name === 'annotation-name').node - const annotationName = annotationNameNode.text - if (!isParameterType(annotationName)) return null - - let name = match.captures.find(c => c.name === 'method-name').node.text - let quotedRegexp: string - const literalValue = match.captures.find(c => c.name === 'literal-value') - if (literalValue) { - quotedRegexp = literalValue.node.text - } else { - const annotationNode = annotationNameNode.parent - const pairs = annotationNode.descendantsOfType('element_value_pair') - for (const pair of pairs) { - const key = pair.childForFieldName('key') - const value = pair.childForFieldName('value') - if (key.text === 'name') { - name = value.text.substring(1, value.text.length - 1) - } - if (key.text === 'value') { - quotedRegexp = value.text - } - } - } - const regexps = quotedRegexp.substring(1, quotedRegexp.length -1) - return new ParameterType( - name, - regexps, - Object, - () => undefined, - false, - false - ) -} - - -function buildExpression(match: Parser.QueryMatch, expressionFactory: ExpressionFactory): Expression | null { - const annotationNameNode = match.captures.find(c => c.name === 'annotation-name').node - const annotationName = annotationNameNode.text - if (!isStep(annotationName)) return null - - const literalValue = match.captures.find(c => c.name === 'literal-value').node.text - return expressionFactory.createExpression(literalValue.substring(1, literalValue.length - 1)) -} - -function isParameterType(annotation: any) { - return ['ParameterType', 'io.cucumber.java.ParameterType'].includes(annotation) -} - -function isStep(annotation: string) { - return ['Given', 'When', 'Then'].includes(annotation) -} - diff --git a/suggest/javascript/src/index.ts b/suggest/javascript/src/index.ts deleted file mode 100644 index 52cf893db31..00000000000 --- a/suggest/javascript/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './types' -export * from './buildStepDocuments' -export * from './lspCompletionSnippet' -export * from './index/index' diff --git a/suggest/javascript/src/index/bruteForceIndex.ts b/suggest/javascript/src/index/bruteForceIndex.ts deleted file mode 100644 index ecdc932e86e..00000000000 --- a/suggest/javascript/src/index/bruteForceIndex.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Index } from './types' -import { StepDocument } from '../types' - -/** - * A brute force (not very performant or fuzzy-search capable) index that matches permutation expressions with string.includes() - * - * @param stepDocuments - */ -export function bruteForceIndex(stepDocuments: readonly StepDocument[]): Index { - return (text) => { - if (!text) return [] - const predicate = (segment: string) => segment.toLowerCase().includes(text.toLowerCase()) - return stepDocuments.filter((permutationExpression) => - matches(permutationExpression, predicate) - ) - } -} - -function matches(stepDocument: StepDocument, predicate: (segment: string) => boolean): boolean { - return !!stepDocument.segments.find((segment) => - typeof segment === 'string' ? predicate(segment) : !!segment.find(predicate) - ) -} diff --git a/suggest/javascript/src/index/fuseIndex.ts b/suggest/javascript/src/index/fuseIndex.ts deleted file mode 100644 index 79c33bf4ac7..00000000000 --- a/suggest/javascript/src/index/fuseIndex.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Index } from './types' -import { StepDocument } from '../types' -import Fuse from 'fuse.js' - -type Doc = { - text: string -} - -export function fuseIndex(stepDocuments: readonly StepDocument[]): Index { - const docs: Doc[] = stepDocuments.map((stepDocument) => { - return { - text: stepDocument.segments - .map((segment) => (typeof segment === 'string' ? segment : segment.join(' '))) - .join(''), - } - }) - const fuse = new Fuse(docs, { - keys: ['text'], - minMatchCharLength: 2, - threshold: 0.1, - ignoreLocation: true, - }) - - return (text) => { - if (!text) return [] - const results = fuse.search(text, { limit: 10 }) - return results.map((result) => stepDocuments[result.refIndex]) - } -} diff --git a/suggest/javascript/src/index/index.ts b/suggest/javascript/src/index/index.ts deleted file mode 100644 index 56e94ee8f2e..00000000000 --- a/suggest/javascript/src/index/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export * from './types' -export * from './bruteForceIndex' -export * from './fuseIndex' -export * from './jsSearchIndex' diff --git a/suggest/javascript/src/index/jsSearchIndex.ts b/suggest/javascript/src/index/jsSearchIndex.ts deleted file mode 100644 index 6ea90245390..00000000000 --- a/suggest/javascript/src/index/jsSearchIndex.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Index } from './types' -import { StepDocument } from '../types' -import { Search } from 'js-search' - -type Doc = { - id: number - text: string -} - -export function jsSearchIndex(stepDocuments: readonly StepDocument[]): Index { - const docs: Doc[] = stepDocuments.map((stepDocument, id) => { - return { - id, - text: stepDocument.segments - .map((segment) => (typeof segment === 'string' ? segment : segment.join(' '))) - .join(''), - } - }) - - const search = new Search('id') - search.addIndex('text') - search.addDocuments(docs) - - return (text) => { - if (!text) return [] - const results = search.search(text) - return results.map((result: Doc) => stepDocuments[result.id]) - } -} diff --git a/suggest/javascript/src/index/types.ts b/suggest/javascript/src/index/types.ts deleted file mode 100644 index 99ae2dd6885..00000000000 --- a/suggest/javascript/src/index/types.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { StepDocument } from '../types' - -/** - * A search index function. - * - * @param text a text to search for - * @return results in the form of step documents - */ -export type Index = (text: string) => readonly StepDocument[] diff --git a/suggest/javascript/src/lspCompletionSnippet.ts b/suggest/javascript/src/lspCompletionSnippet.ts deleted file mode 100644 index 46d4746238f..00000000000 --- a/suggest/javascript/src/lspCompletionSnippet.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Generates an [LSP Completion Snippet]{@link https://microsoft.github.io/language-server-protocol/specifications/specification-3-17/#snippet_syntax} - * - * @param expression the expression to generate the snippet from - */ -import { StepSegments } from './types' - -export function lspCompletionSnippet(stepSegments: StepSegments): string { - let n = 1 - return stepSegments - .map((segment) => (Array.isArray(segment) ? lspPlaceholder(n++, segment) : segment)) - .join('') -} - -function lspPlaceholder(i: number, choices: readonly string[]) { - return `\${${i}|${choices.join(',')}|}` -} diff --git a/suggest/javascript/src/types.ts b/suggest/javascript/src/types.ts deleted file mode 100644 index 9ee59424ee7..00000000000 --- a/suggest/javascript/src/types.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Expression } from '@cucumber/cucumber-expressions' - -/** - * A document that can be indexed. It's recommended to index the segments rather than the suggestion. - * When indexing the segments, the nested arrays (representing choices) may be given lower weight - * than the string segments (which represent the "sentence") - */ -export type StepDocument = { - /** - * The suggestion is what the user will see in the autocomplete. - */ - suggestion: string - - /** - * The segments are used to build the contents that will be inserted into the editor - * after selecting a suggestion. - * - * For LSP compatible editors, this can be formatted to an LSP snippet with the - * lspCompletionSnippet function. - */ - segments: StepSegments - - /** - * The Cucumber Expression or Regular Expression - */ - expression: Expression -} - -export type StepSegments = readonly StepSegment[] -type Text = string -type Choices = readonly string[] -export type StepSegment = Text | Choices diff --git a/suggest/javascript/test/buildStepDocuments.test.ts b/suggest/javascript/test/buildStepDocuments.test.ts deleted file mode 100644 index f819efdd0ad..00000000000 --- a/suggest/javascript/test/buildStepDocuments.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { Expression, ExpressionFactory, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' -import assert from 'assert' -import { StepDocument, buildStepDocuments } from '../src' - -describe('buildStepDocuments', () => { - it('builds step documents with global choices', () => { - const ef = new ExpressionFactory(new ParameterTypeRegistry()) - const e1 = ef.createExpression('The {word} song') - const e2 = ef.createExpression('The {word} boat') - - assertStepDocuments( - ['The nice song', 'The big boat'], - [e1, e2], - [ - { - suggestion: 'The {word} boat', - segments: ['The ', ['big', 'nice'], ' boat'], - expression: e2 - }, - { - suggestion: 'The {word} song', - segments: ['The ', ['big', 'nice'], ' song'], - expression: e1 - }, - ] - ) - }) - - it('builds step documents from CucumberExpression', () => { - const ef = new ExpressionFactory(new ParameterTypeRegistry()) - const expression = ef.createExpression('I have {int} cukes in/on my {word}') - assertStepDocuments( - [ - 'I have 42 cukes in my belly', - 'I have 54 cukes on my table', - 'I have 54 cukes in my basket', - ], - [expression], - [ - { - suggestion: 'I have {int} cukes in my {word}', - segments: ['I have ', ['42', '54'], ' cukes in my ', ['basket', 'belly', 'table']], - expression - }, - { - suggestion: 'I have {int} cukes on my {word}', - segments: ['I have ', ['42', '54'], ' cukes on my ', ['basket', 'belly', 'table']], - expression, - }, - ] - ) - }) - - it('builds step documents from RegularExpression', () => { - const ef = new ExpressionFactory(new ParameterTypeRegistry()) - const expression = ef.createExpression(/I have (\d\d) cukes in my "(belly|suitcase)"/) - assertStepDocuments( - ['I have 42 cukes in my "belly"', 'I have 54 cukes in my "suitcase"'], - [expression], - [ - { - suggestion: 'I have {} cukes in my "{}"', - segments: ['I have ', ['42', '54'], ' cukes in my "', ['belly', 'suitcase'], '"'], - expression - }, - ] - ) - }) - - it('builds step documents with a max number of choices', () => { - const ef = new ExpressionFactory(new ParameterTypeRegistry()) - const expression = ef.createExpression('I have {int} cukes in/on my {word}') - assertStepDocuments( - [ - 'I have 42 cukes in my belly', - 'I have 54 cukes on my table', - 'I have 67 cukes in my belly', - 'I have 54 cukes in my basket', - ], - [expression], - [ - { - suggestion: 'I have {int} cukes in my {word}', - segments: ['I have ', ['42', '54'], ' cukes in my ', ['basket', 'belly']], - expression, - }, - { - suggestion: 'I have {int} cukes on my {word}', - segments: ['I have ', ['42', '54'], ' cukes on my ', ['basket', 'belly']], - expression, - }, - ], - 2 - ) - }) -}) - -function assertStepDocuments( - stepTexts: readonly string[], - expressions: readonly Expression[], - expectedStepDocuments: StepDocument[], - maxChoices = 10 -) { - const stepDocuments = buildStepDocuments( - stepTexts, - expressions, - maxChoices - ) - assert.deepStrictEqual(stepDocuments, expectedStepDocuments) -} diff --git a/suggest/javascript/test/expressions/java.test.ts b/suggest/javascript/test/expressions/java.test.ts deleted file mode 100644 index e0a6587cbec..00000000000 --- a/suggest/javascript/test/expressions/java.test.ts +++ /dev/null @@ -1,59 +0,0 @@ -import Parser from 'web-tree-sitter' -import assert from 'assert' -import { buildExpressions } from '../../src/expressions/java' - -describe('buildExpressions', () => { - let parser: Parser - let Java: Parser.Language - - beforeEach(async () => { - await Parser.init() - parser = new Parser() - Java = await Parser.Language.load('tree-sitter-java.wasm') - parser.setLanguage(Java) - }) - - it('builds expressions from .java source', async () => { - const stepdefs = ` -class StepDefinitions { - @Given("I have {int} cukes in my belly" ) - void method1() { - } - - @When( "you have some time") - void method2() { - } - - @Then("a {iso-date}") - void method3() { - } - - @Then("a {date}") - void method4() { - } -} -` - - const parameterTypes = ` -class ParameterTypes { - @ParameterType("(?:.*) \\\\d{1,2}, \\\\d{4}") - public Date date(String date) throws ParseException { - return getDateInstance(MEDIUM, ENGLISH).parse(date); - } - - @ParameterType(name = "iso-date", value = "\\\\d{4}-\\\\d{2}-\\\\d{2}") - public Date isoDate(String date) throws ParseException { - return new SimpleDateFormat("yyyy-mm-dd").parse(date); - } -} -` - - const expressions = buildExpressions(parser, Java, [stepdefs, parameterTypes]) - assert.deepStrictEqual(expressions.map(e => e.source), [ - 'I have {int} cukes in my belly', - 'you have some time', - 'a {iso-date}', - 'a {date}', - ]) - }) -}) diff --git a/suggest/javascript/test/index/Index.test.ts b/suggest/javascript/test/index/Index.test.ts deleted file mode 100644 index c31a261b5b4..00000000000 --- a/suggest/javascript/test/index/Index.test.ts +++ /dev/null @@ -1,91 +0,0 @@ -import assert from 'assert' -import { Index, StepDocument, bruteForceIndex, fuseIndex, jsSearchIndex } from '../../src' -import * as txtgen from 'txtgen' -import { ExpressionFactory, ParameterTypeRegistry } from '@cucumber/cucumber-expressions' - -type BuildIndex = (stepDocuments: readonly StepDocument[]) => Index - -function verifyIndexContract(name: string, buildIndex: BuildIndex) { - describe(name, () => { - describe('basics', () => { - const ef = new ExpressionFactory(new ParameterTypeRegistry()) - - const doc1: StepDocument = { - suggestion: 'I have {int} cukes in my belly', - segments: ['I have ', ['42', '98'], ' cukes in my belly'], - expression: ef.createExpression('I have {int} cukes in my belly') - } - const doc2: StepDocument = { - suggestion: 'I am a teapot', - segments: ['I am a teapot'], - expression: ef.createExpression('I am a teapot') - } - let index: Index - beforeEach(() => { - index = buildIndex([doc1, doc2]) - }) - - it('matches two words in the beginning of an expression', () => { - const suggestions = index('have') - assert.deepStrictEqual(suggestions, [doc1]) - }) - - it('matches a word in an expression', () => { - const suggestions = index('cukes') - assert.deepStrictEqual(suggestions, [doc1]) - }) - - it('matches a word in a choice', () => { - const suggestions = index('98') - assert.deepStrictEqual(suggestions, [doc1]) - }) - - it('matches nothing', () => { - const suggestions = index('nope') - assert.deepStrictEqual(suggestions, []) - }) - }) - - describe('performance / fuzz', () => { - it('matches how quickly exactly?', () => { - const ef = new ExpressionFactory(new ParameterTypeRegistry()) - for (let i = 0; i < 100; i++) { - const length = 100 - const stepDocuments: StepDocument[] = Array(length) - .fill(0) - .map(() => { - const sentence = txtgen.sentence() - return { - suggestion: sentence, - segments: [sentence], - expression: ef.createExpression(sentence) - } - }) - const index = buildIndex(stepDocuments) - - const sentence = stepDocuments[Math.floor(length / 2)].segments[0] as string - const words = sentence.split(' ') - // Find a word longer than 5 letters (fall back to the middle word if there are none) - const word = words.find((word) => word.length > 5) || words[Math.floor(words.length / 2)] - const term = word.replace(/[.?!;,']/g, '').toLowerCase() - - const suggestions = index(term) - if (suggestions.length === 0) { - console.error(`WARNING: ${name} - no hits for "${term}"`) - } - for (const suggestion of suggestions) { - const s = (suggestion.segments[0] as string).toLowerCase() - if (!s.includes(term)) { - // console.log(JSON.stringify(stepDocuments, null, 2)) - console.error(`WARNING: ${name} - "${s}" does not include "${term}"`) - } - } - } - }) - }) - }) -} - -verifyIndexContract('bruteForceIndex', bruteForceIndex) -verifyIndexContract('fuseIndex', fuseIndex) -verifyIndexContract('jsSearchIndex', jsSearchIndex) diff --git a/suggest/javascript/test/lspSnippet.test.ts b/suggest/javascript/test/lspSnippet.test.ts deleted file mode 100644 index 92c9406a1d1..00000000000 --- a/suggest/javascript/test/lspSnippet.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import assert from 'assert' -import { StepSegments, lspCompletionSnippet } from '../src' - -describe('lspSnippet', () => { - it('converts a PermutationExpression to an LSP snippet', () => { - const stepSegments: StepSegments = [ - 'I have ', - ['42', '54'], - ' cukes in my ', - ['basket', 'belly', 'table'], - ] - assert.strictEqual( - lspCompletionSnippet(stepSegments), - 'I have ${1|42,54|} cukes in my ${2|basket,belly,table|}' - ) - }) -}) diff --git a/suggest/javascript/tree-sitter-java.wasm b/suggest/javascript/tree-sitter-java.wasm deleted file mode 100755 index 5de1ba33478..00000000000 Binary files a/suggest/javascript/tree-sitter-java.wasm and /dev/null differ diff --git a/suggest/javascript/tsconfig.build.json b/suggest/javascript/tsconfig.build.json deleted file mode 100644 index 98f530f48a3..00000000000 --- a/suggest/javascript/tsconfig.build.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "dist" - }, - "include": [ - "package.json", - "src", - "test" - ] -} diff --git a/suggest/javascript/tsconfig.json b/suggest/javascript/tsconfig.json deleted file mode 100644 index 4082f16a5d9..00000000000 --- a/suggest/javascript/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../tsconfig.json" -} diff --git a/tsconfig.build.json b/tsconfig.build.json index 375fcabd78e..4089755a5a3 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -42,21 +42,6 @@ }, { "path": "./json-to-messages/javascript-testdata/tsconfig.build.json" - }, - { - "path": "./suggest/javascript/tsconfig.build.json" - }, - { - "path": "./language-service/javascript/tsconfig.build.json" - }, - { - "path": "./language-server/javascript/tsconfig.build.json" - }, - { - "path": "./monaco/javascript/tsconfig.build.json" - }, - { - "path": "./vscode/javascript/tsconfig.build.json" } ] } diff --git a/tsconfig.json b/tsconfig.json index 08c648c65af..d67f53f4e01 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,12 +12,7 @@ "@cucumber/fake-cucumber": ["fake-cucumber/javascript/src/index.ts"], "@cucumber/query": ["query/javascript/src/index.ts"], "@cucumber/compatibility-kit": ["compatibility-kit/javascript/src/index.ts"], - "@cucumber/react": ["react/javascript/src/index.ts"], - "@cucumber/suggest": ["suggest/javascript/src/index.ts"], - "@cucumber/language-service": ["language-service/javascript/src/index.ts"], - "@cucumber/language-server": ["language-server/javascript/src/index.ts"], - "@cucumber/monaco": ["monaco/javascript/src/index.ts"], - "@cucumber/vscode": ["vscode/javascript/src/index.ts"] + "@cucumber/react": ["react/javascript/src/index.ts"] }, "noEmit": true } diff --git a/vscode/.rsync b/vscode/.rsync deleted file mode 100644 index ea5a5de249b..00000000000 --- a/vscode/.rsync +++ /dev/null @@ -1 +0,0 @@ -../.templates/default.mk default.mk diff --git a/vscode/CHANGELOG.md b/vscode/CHANGELOG.md deleted file mode 100644 index 55095b42baa..00000000000 --- a/vscode/CHANGELOG.md +++ /dev/null @@ -1,25 +0,0 @@ -# CHANGE LOG -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/) -and this project adheres to [Semantic Versioning](http://semver.org/). - ----- -## [Unreleased] - -### Added - -### Changed - -### Deprecated - -### Removed - -### Fixed - - -[Unreleased]: https://github.com/cucumber/common/compare/vscode/v0.0.1...main -[0.0.1]: https://github.com/cucumber/common/tree/vscode/v0.0.1 - - -[aslakhellesoy]: https://github.com/aslakhellesoy diff --git a/vscode/Makefile b/vscode/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/vscode/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/vscode/default.mk b/vscode/default.mk deleted file mode 100644 index a0d8dd28fb4..00000000000 --- a/vscode/default.mk +++ /dev/null @@ -1,89 +0,0 @@ -# Please update /.templates/default.mk and sync: -# -# source scripts/functions.sh && rsync_files -# -SHELL := /usr/bin/env bash -ALPINE = $(shell which apk 2> /dev/null) -LIBNAME = $(shell basename $$(pwd)) -LANGUAGES ?= $(wildcard */) - -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) - -default: $(patsubst %,default-%,$(LANGUAGES)) -.PHONY: default - -default-%: % - if [[ -d $< ]]; then cd $< && make default; fi -.PHONY: default-% - -# Need to declare these phonies to avoid errors for packages without a particular language -.PHONY: c dotnet go java javascript objective-c perl python ruby - -update-dependencies: $(patsubst %,update-dependencies-%,$(LANGUAGES)) -.PHONY: update-dependencies - -update-dependencies-%: % - if [[ -d $< ]]; then cd $< && make update-dependencies; fi -.PHONY: update-dependencies-% - -update-changelog: -ifdef NEW_VERSION - cat CHANGELOG.md | ../scripts/update_changelog.sh $(NEW_VERSION) > CHANGELOG.md.tmp - mv CHANGELOG.md.tmp CHANGELOG.md -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -.PHONY: update-changelog - -pre-release: update-changelog $(patsubst %,pre-release-%,$(LANGUAGES)) -.PHONY: pre-release - -pre-release-%: % - if [[ -d $< ]]; then cd $< && make pre-release; fi -.PHONY: pre-release-% - -release: publish -.PHONY: release - -publish: create-and-push-release-tag $(patsubst %,publish-%,$(LANGUAGES)) -.PHONY: publish - -publish-%: % - if [[ -d $< ]]; then cd $< && make publish; fi -.PHONY: publish-% - -create-and-push-release-tag: - [ -f '/home/cukebot/configure' ] && /home/cukebot/configure - git commit --gpg-sign --all --message "Release $(LIBNAME) v$(NEW_VERSION)" - git tag --sign "$(LIBNAME)/v$(NEW_VERSION)" -m "Release $(LIBNAME) v$(NEW_VERSION)" - git push --tags -.PHONY: create-and-push-release-tag - -post-release: $(patsubst %,post-release-%,$(LANGUAGES)) -.PHONY: post-release - -post-release: commit-and-push-post-release - -post-release-%: % - if [[ -d $< ]]; then cd $< && make post-release; fi -.PHONY: post-release-% - -commit-and-push-post-release: -ifdef NEW_VERSION - git push --tags - git commit --gpg-sign --all --message "Post release $(LIBNAME) v$(NEW_VERSION)" 2> /dev/null || true - git push -else - @echo -e "\033[0;31mNEW_VERSION is not defined.\033[0m" - exit 1 -endif -.PHONY: commit-and-push-post-release - -clean: $(patsubst %,clean-%,$(LANGUAGES)) -.PHONY: clean - -clean-%: % - if [[ -d $< ]]; then cd $< && make clean; fi -.PHONY: clean-% diff --git a/vscode/javascript/.gitignore b/vscode/javascript/.gitignore deleted file mode 100644 index 385b67bb27c..00000000000 --- a/vscode/javascript/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -dist/ -.idea/ -.nyc_output/ -coverage/ -node_modules/ -yarn.lock -package-lock.json -*.log -.deps -.tested* -.linted -.built* -.compared -.codegen -acceptance/ -storybook-static -*-go -*.iml -.vscode-test diff --git a/vscode/javascript/.mocharc.json b/vscode/javascript/.mocharc.json deleted file mode 100644 index d5055eb10d0..00000000000 --- a/vscode/javascript/.mocharc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "require": ["tsconfig-paths/register", "ts-node/register", "source-map-support/register"], - "extension": ["ts", "tsx"], - "recursive": true, - "timeout": 10000 -} diff --git a/vscode/javascript/.rsync b/vscode/javascript/.rsync deleted file mode 100644 index 5592adbd0c2..00000000000 --- a/vscode/javascript/.rsync +++ /dev/null @@ -1,2 +0,0 @@ -../../LICENSE LICENSE -../../.templates/javascript/ . diff --git a/vscode/javascript/.vscode/.gitignore b/vscode/javascript/.vscode/.gitignore deleted file mode 100644 index 66cda8a7249..00000000000 --- a/vscode/javascript/.vscode/.gitignore +++ /dev/null @@ -1 +0,0 @@ -loader.js diff --git a/vscode/javascript/.vscode/extensions.json b/vscode/javascript/.vscode/extensions.json deleted file mode 100644 index 3ac9aeb61e4..00000000000 --- a/vscode/javascript/.vscode/extensions.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "dbaeumer.vscode-eslint" - ] -} diff --git a/vscode/javascript/.vscode/launch.json b/vscode/javascript/.vscode/launch.json deleted file mode 100644 index a20358a067b..00000000000 --- a/vscode/javascript/.vscode/launch.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/dist/**/*.js" - ], - "log": true, - "preLaunchTask": { - "type": "npm", - "script": "watch" - } - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/src/test/suite/index" - ], - "outFiles": [ - "${workspaceFolder}/dist/src/test/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - } - ] -} diff --git a/vscode/javascript/.vscode/settings.json b/vscode/javascript/.vscode/settings.json deleted file mode 100644 index 2952be3c8ed..00000000000 --- a/vscode/javascript/.vscode/settings.json +++ /dev/null @@ -1,11 +0,0 @@ -// Place your settings in this file to overwrite default and user settings. -{ - "files.exclude": { - "dist": true // set this to true to hide the "out" folder with the compiled JS files - }, - "search.exclude": { - "dist": true // set this to false to include "out" folder in search results - }, - // Turn off tsc task auto detection since we have the necessary tasks as npm scripts - "typescript.tsc.autoDetect": "off" -} diff --git a/vscode/javascript/.vscode/tasks.json b/vscode/javascript/.vscode/tasks.json deleted file mode 100644 index b81bf0928c5..00000000000 --- a/vscode/javascript/.vscode/tasks.json +++ /dev/null @@ -1,21 +0,0 @@ -// See https://go.microsoft.com/fwlink/?LinkId=733558 -// for the documentation about the tasks.json format -{ - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "always", - "panel": "new" - }, - "group": { - "kind": "build", - "isDefault": true - } - } - ] -} diff --git a/vscode/javascript/.vscodeignore b/vscode/javascript/.vscodeignore deleted file mode 100644 index 389996760c6..00000000000 --- a/vscode/javascript/.vscodeignore +++ /dev/null @@ -1,10 +0,0 @@ -.vscode/** -.vscode-test/** -src/** -.gitignore -.yarnrc -vsc-extension-quickstart.md -**/tsconfig.json -**/.eslintrc.json -**/*.map -**/*.ts diff --git a/vscode/javascript/LICENSE b/vscode/javascript/LICENSE deleted file mode 100644 index 725ba9f4ac7..00000000000 --- a/vscode/javascript/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Cucumber Ltd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vscode/javascript/Makefile b/vscode/javascript/Makefile deleted file mode 100644 index 551e68e27a2..00000000000 --- a/vscode/javascript/Makefile +++ /dev/null @@ -1 +0,0 @@ -include default.mk diff --git a/vscode/javascript/README.md b/vscode/javascript/README.md deleted file mode 100644 index 777208b85f8..00000000000 --- a/vscode/javascript/README.md +++ /dev/null @@ -1,102 +0,0 @@ -# VSCode Cucumber Extension - -This is the official Cucumber extension for VSCode - -## Features - -- [x] Syntax highlighting -- [ ] Code folding -- [x] Zero configuration - - [ ] Override cucumber messages command in settings -- [ ] Auto complete - - [x] Parameterized snippets - - [x] Fuzzy search - - [ ] Gherkin keywords -- [x] Syntax validation - - [x] Syntax errors - - [x] Undefined steps - - [ ] Ambiguous steps -- [ ] Quick fix for undefined steps -- [ ] Go to Step Definition(s) from Gherkin step -- [ ] Go to Gherkin step(s) from Step Definition -- [x] Formatting -- [x] I18n support -- [ ] Platforms - - [x] Cucumber-js - - [ ] Cucumber-ruby - - [ ] Cucumber-jvm - -TODOs: - -- [x] Logo -- [ ] Publish - - [ ] https://open-vsx.org/ -- [ ] Enable src/test/runTest in CI - - - - -Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. - -For example if there is an image subfolder under your extension project workspace: - -\!\[feature X\]\(images/feature-x.png\) - -> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. - -## Requirements - -If you have any requirements or dependencies, add a section describing those and how to install and configure them. - -## Extension Settings - -Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. - -For example: - -This extension contributes the following settings: - -* `myExtension.enable`: enable/disable this extension -* `myExtension.thing`: set to `blah` to do something - -## Known Issues - -Calling out known issues can help limit users opening duplicate issues against your extension. - -## Release Notes - -Users appreciate release notes as you update your extension. - -### 1.0.0 - -Initial release of ... - -### 1.0.1 - -Fixed issue #. - -### 1.1.0 - -Added features X, Y, and Z. - ------------------------------------------------------------------------------------------------------------ -## Following extension guidelines - -Ensure that you've read through the extensions guidelines and follow the best practices for creating your extension. - -* [Extension Guidelines](https://code.visualstudio.com/api/references/extension-guidelines) - -## Working with Markdown - -**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: - -* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) -* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) -* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets - -### For more information - -* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) -* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) - -**Enjoy!** diff --git a/vscode/javascript/default.mk b/vscode/javascript/default.mk deleted file mode 100644 index b04d59c4a2b..00000000000 --- a/vscode/javascript/default.mk +++ /dev/null @@ -1,87 +0,0 @@ -SHELL := /usr/bin/env bash -# https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make -rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d)) -TYPESCRIPT_SOURCE_FILES = $(sort $(call rwildcard,src test,*.ts *.tsx)) -PRIVATE = $(shell node -e "console.log(require('./package.json').private)") -IS_TESTDATA = $(findstring -testdata,${CURDIR}) -NPM_MODULE = $(shell cat package.json | jq .name --raw-output) - -default: .tested -.PHONY: default - -../../node_modules ../../package-lock.json: package.json - cd ../.. && npm install - -.codegen: - touch $@ - -.tested: .tested-npm .built - -.built: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - pushd ../.. && \ - npm run build && \ - popd && \ - touch $@ - -.tested-npm: $(TYPESCRIPT_SOURCE_FILES) ../../node_modules ../../package-lock.json .codegen - npm run test - touch $@ - -pre-release: clean update-version update-dependencies default -.PHONY: pre-release - -update-dependencies: ../../node_modules ../../package-lock.json - ../../node_modules/.bin/npm-check-updates --upgrade --reject hast-util-sanitize,@types/node,react-markdown,rehype-raw,rehype-sanitize,remark-gfm -.PHONY: update-dependencies - -update-version: -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifdef NEW_VERSION - npm --no-git-tag-version --allow-same-version version "$(NEW_VERSION)" - # Update all npm packages that depend on us - pushd ../.. && \ - ./scripts/npm-each update_npm_dependency_if_exists package.json "$(NPM_MODULE)" "$(NEW_VERSION)" -else - @echo -e "\033[0;31mNEW_VERSION is not defined. Can't update version :-(\033[0m" - exit 1 -endif -endif -.PHONY: update-version - -publish: .codegen -ifeq ($(IS_TESTDATA),-testdata) - # no-op -else -ifneq (true,$(PRIVATE)) - npm publish --access public -else - @echo "Not publishing private npm module" -endif -endif -.PHONY: publish - -post-release: -.PHONY: post-release - -clean: clean-javascript -.PHONY: clean - -clean-javascript: - rm -rf .deps .codegen .tested* coverage dist acceptance -.PHONY: clean-javascript - -clobber: clean - rm -rf node_modules ../../node_modules -.PHONY: clobber - -### COMMON stuff for all platforms - -BERP_VERSION = 1.3.0 -BERP_GRAMMAR = gherkin.berp - -define berp-generate-parser = --! dotnet tool list --tool-path /usr/bin | grep "berp\s*$(BERP_VERSION)" && dotnet tool update Berp --version $(BERP_VERSION) --tool-path /usr/bin -berp -g $(BERP_GRAMMAR) -t $< -o $@ --noBOM -endef diff --git a/vscode/javascript/images/icon.png b/vscode/javascript/images/icon.png deleted file mode 100644 index d5e3dc635d6..00000000000 Binary files a/vscode/javascript/images/icon.png and /dev/null differ diff --git a/vscode/javascript/language-configuration.json b/vscode/javascript/language-configuration.json deleted file mode 100644 index 8fbedcbb82d..00000000000 --- a/vscode/javascript/language-configuration.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "comments": { - "lineComment": "#" - }, - "autoClosingPairs": [ - ["\"\"\"", "\"\"\""], - ["```", "```"] - ], - "surroundingPairs": [ - ["\"\"\"", "\"\"\""], - ["```", "```"] - ] -} diff --git a/vscode/javascript/package.json b/vscode/javascript/package.json deleted file mode 100644 index 6d49d3c141f..00000000000 --- a/vscode/javascript/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "cucumber", - "displayName": "Cucumber", - "description": "Official Cucumber VSCode extension", - "version": "0.0.1", - "publisher": "Cucumber", - "engines": { - "vscode": "^1.59.0" - }, - "categories": [ - "Programming Languages", - "Snippets" - ], - "keywords": [ - "Cucumber", - "Gherkin" - ], - "repository": { - "type": "git", - "url": "git://github.com/cucumber/cucumber.git" - }, - "icon": "images/icon.png", - "activationEvents": [ - "onLanguage:gherkin" - ], - "main": "./dist/src/extension.js", - "contributes": { - "languages": [ - { - "id": "gherkin", - "aliases": [ - "feature", - "gherkin", - "Gherkin", - "cucumber" - ], - "extensions": [ - ".feature", - ".feature.md" - ], - "configuration": "./language-configuration.json" - } - ] - }, - "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc --build tsconfig.build.json", - "watch": "tsc --build --watch tsconfig.build.json", - "pretest": "npm run compile && npm run eslint", - "eslint": "eslint src --ext ts", - "eslint-fix": "eslint src --ext ts --max-warnings 0 --fix", - "test": "node ./dist/src/test/runTest.js" - }, - "dependencies": { - "vscode-languageclient": "7.0.0", - "@cucumber/language-server": "^0.2.0" - }, - "devDependencies": { - "@types/vscode": "1.61.0", - "@types/glob": "7.1.4", - "@types/mocha": "9.0.0", - "@types/node": "14.x", - "glob": "7.2.0", - "mocha": "9.1.2", - "typescript": "4.4.4", - "vsce": "1.100.1", - "vscode-test": "1.6.1" - } -} diff --git a/vscode/javascript/src/extension.ts b/vscode/javascript/src/extension.ts deleted file mode 100644 index f5de25e9b36..00000000000 --- a/vscode/javascript/src/extension.ts +++ /dev/null @@ -1,53 +0,0 @@ -// The module 'vscode' contains the VS Code extensibility API -// Import the module and reference it with the alias vscode in your code below -import path from 'path' -import vscode from 'vscode' -import { - LanguageClient, - LanguageClientOptions, - ServerOptions, - TransportKind, -} from 'vscode-languageclient/node' - -let client: LanguageClient - -const isDebugMode = () => process.env.VSCODE_DEBUG_MODE === 'true' - -// this method is called when your extension is activated -// your extension is activated the very first time the command is executed -export function activate(context: vscode.ExtensionContext) { - let serverModule: string - if (isDebugMode()) { - serverModule = context.asAbsolutePath( - path.join('../../language-server/javascript/bin/cucumber-language-server.js') - ) - } else { - serverModule = require.resolve('@cucumber/language-server/bin/cucumber-language-server.js') - } - const debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] } - - const serverOptions: ServerOptions = { - run: { module: serverModule, transport: TransportKind.ipc }, - debug: { - module: serverModule, - transport: TransportKind.ipc, - options: debugOptions, - }, - } - - const clientOptions: LanguageClientOptions = { - documentSelector: [{ scheme: 'file', language: 'gherkin' }], - } - - client = new LanguageClient('cucumber', 'Cucumber Language Server', serverOptions, clientOptions) - - const disposeClient = client.start() - context.subscriptions.push(disposeClient) - - console.log('Cucumber extension activated') -} - -// this method is called when your extension is deactivated -export function deactivate() { - // no-op -} diff --git a/vscode/javascript/src/test/runTest.ts b/vscode/javascript/src/test/runTest.ts deleted file mode 100644 index afa325d44b5..00000000000 --- a/vscode/javascript/src/test/runTest.ts +++ /dev/null @@ -1,29 +0,0 @@ -import path from 'path' - -import { runTests } from 'vscode-test' - -async function main() { - if (process.env['CI']) { - // https://app.circleci.com/pipelines/github/cucumber/common/7908/workflows/10de1a58-5b66-4834-8a5e-e9ac11748e43/jobs/311298 - console.error('Skipping test of vscode plugin in CI') - return - } - - try { - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = path.resolve(__dirname, '../../') - - // The path to test runner - // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(__dirname, './suite/index') - - // Download VS Code, unzip it and run the integration test - await runTests({ extensionDevelopmentPath, extensionTestsPath }) - } catch (err) { - console.error('Failed to run tests') - process.exit(1) - } -} - -main() diff --git a/vscode/javascript/src/test/suite/extension.test.ts b/vscode/javascript/src/test/suite/extension.test.ts deleted file mode 100644 index bd262641012..00000000000 --- a/vscode/javascript/src/test/suite/extension.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import assert from 'assert' - -// You can import and use all API from the 'vscode' module -// as well as import your extension to test it -import * as vscode from 'vscode' -// import * as myExtension from '../../extension'; - -suite('Extension Test Suite', () => { - vscode.window.showInformationMessage('Start all tests.') - - test('Sample test', () => { - assert.strictEqual(-1, [1, 2, 3].indexOf(5)) - assert.strictEqual(-1, [1, 2, 3].indexOf(0)) - }) -}) diff --git a/vscode/javascript/src/test/suite/index.ts b/vscode/javascript/src/test/suite/index.ts deleted file mode 100644 index 753efc8ca47..00000000000 --- a/vscode/javascript/src/test/suite/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import path from 'path' -import Mocha from 'mocha' -import glob from 'glob' - -export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd', - color: true, - }) - - const testsRoot = path.resolve(__dirname, '..') - - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err) - } - - // Add files to the test suite - files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))) - - try { - // Run the mocha test - mocha.run((failures) => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)) - } else { - c() - } - }) - } catch (err) { - console.error(err) - e(err) - } - }) - }) -} diff --git a/vscode/javascript/syntaxes/gherkin-classic.tmLanguage b/vscode/javascript/syntaxes/gherkin-classic.tmLanguage deleted file mode 100644 index db976ff0ba2..00000000000 --- a/vscode/javascript/syntaxes/gherkin-classic.tmLanguage +++ /dev/null @@ -1,294 +0,0 @@ - - - - - fileTypes - - feature - - firstLineMatch - - 기능|機能|功能|フィーチャ|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Свойство|Особина|Могућност|Özellik|Właściwość|Tính - năng|Trajto|Savybė|Požiadavka|Požadavek|Osobina|Ominaisuus|Omadus|OH - HAI|Mogućnost|Mogucnost|Jellemző|Fīča|Funzionalità|Funktionalitéit|Funktionalität|Funkcionalnost|Funkcionalitāte|Funcționalitate|Funcţionalitate|Functionaliteit|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Feature|Eiginleiki|Egenskap|Egenskab|Crikey|Característica|Arwedd|Ahoy - matey!(.*) - - foldingStartMarker - ^\s*\b(예|시나리오 - 개요|시나리오|배경|背景|場景大綱|場景|场景大纲|场景|劇本大綱|劇本|例子|例|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|シナリオ|サンプル|سيناريو - مخطط|سيناريو|امثلة|الخلفية|תרחיש|תבנית תרחיש|רקע|דוגמאות|Тарих|Сценарій|Сценарији|Сценарио|Сценарий - структураси|Сценарий|Структура сценарію|Структура сценарија|Структура сценария|Скица|Рамка на - сценарий|Примеры|Примери|Пример|Приклади|Предыстория|Предистория|Позадина|Передумова|Основа|Мисоллар|Концепт|Контекст|Örnekler|Założenia|Yo-ho-ho|Wharrimean - is|Voorbeelden|Variantai|Tình huống|The thing of it - is|Tausta|Taust|Tapausaihio|Tapaus|Tapaukset|Szenariogrundriss|Szenario|Szablon - scenariusza|Stsenaarium|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario - konsep|Skenario|Situācija|Shiver me timbers|Senaryo taslağı|Senaryo|Scénář|Scénario|Schema dello - scenario|Scenārijs pēc - parauga|Scenārijs|Scenár|Scenaro|Scenariusz|Scenariu|Scenarios|Scenariomall|Scenariomal|Scenario - Template|Scenario Outline|Scenario Amlinellol|Scenario|Scenarijus|Scenariji|Scenarijaus - šablonas|Scenarijai|Scenarij|Scenarie|Rerefons|Raamstsenaarium|Příklady|Példák|Príklady|Przykłady|Primjeri|Primeri|Primer|Pozadí|Pozadina|Pozadie|Plang - vum Szenario|Plan du scénario|Plan du Scénario|Piemēri|Pavyzdžiai|Paraugs|Osnova scénáře|Osnova|Náčrt - Scénáře|Náčrt Scenáru|Mate|MISHUN SRSLY|MISHUN|Lýsing Dæma|Lýsing Atburðarásar|Kịch bản|Konturo de la - scenaro|Kontext|Konteksts|Kontekstas|Kontekst|Koncept|Khung tình huống|Khung kịch bản|Juhtumid|Háttér|Heave - to|Hannergrond|Grundlage|Geçmiş|Forgatókönyv - vázlat|Forgatókönyv|Fono|Exemplos|Exemples|Exemple|Exempel|Examples|Esquema do Cenário|Esquema do - Cenario|Esquema del escenario|Esquema de - l'escenari|Esempi|Escenario|Escenari|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|EXAMPLZ|Dữ liệu|Dæmi|Dis is - what went down|Dead men tell no - tales|Dasar|Contoh|Contexto|Contexte|Context|Contesto|Cobber|Cenário|Cenario|Cefndir|Bối - cảnh|Blokes|Beispiller|Beispiele|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Atburðarásir|Atburðarás|Antecedents|Antecedentes|All - y'all|Achtergrond|Abstrakt Scenario|Abstract Scenario) - - foldingStopMarker - ^\s*$ - keyEquivalent - ^~C - name - Gherkin - patterns - - - include - #feature_element_keyword - - - include - #feature_keyword - - - include - #step_keyword - - - include - #strings_triple_quote - - - include - #strings_single_quote - - - include - #strings_double_quote - - - include - #comments - - - include - #tags - - - include - #scenario_outline_variable - - - include - #table - - - repository - - comments - - captures - - 0 - - name - comment.line.number-sign - - - match - \s*(#.*) - - table - - begin - ^\s*\| - end - \|\s*$ - name - keyword.control.cucumber.table - patterns - - - match - \w - name - source - - - - feature_keyword - - captures - - 1 - - name - keyword.language.gherkin.feature - - 2 - - name - string.language.gherkin.feature.title - - - match - - ^\s*(기능|機能|功能|フィーチャ|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Свойство|Особина|Могућност|Özellik|Właściwość|Tính - năng|Trajto|Savybė|Požiadavka|Požadavek|Osobina|Ominaisuus|Omadus|OH - HAI|Mogućnost|Mogucnost|Jellemző|Fīča|Funzionalità|Funktionalitéit|Funktionalität|Funkcionalnost|Funkcionalitāte|Funcționalitate|Funcţionalitate|Functionaliteit|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Feature|Eiginleiki|Egenskap|Egenskab|Crikey|Característica|Arwedd|Ahoy - matey!):(.*)\b - - - step_keyword - - captures - - 1 - - name - keyword.language.gherkin.feature.step - - - match - ^\s*(하지만|조건|먼저|만일|만약|단|그리고|그러면|那麼|那么|而且|當|当|前提|假設|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|و |متى |لكن - |عندما |ثم |بفرض |اذاً |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Унда |Тоді |Тогда |То |Та |Пусть - |Припустимо, що |Припустимо |Онда |Но |Нехай |Лекин |Коли |Когда |Когато |Када |Кад |К тому же |И - |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Ва |Бирок |Аммо |Али |Але |Агар |А також |А - |І |Și |Şi |Þá |Þegar |Étant donnés |Étant données |Étant donnée |Étant donné |És |wann |ugeholl |mä - |dann |awer |an |a |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Youse know when youse - got |Youse know like when |Yna |Ya know how |Ya gotta |Y |Wun |Wtedy |When y'all |When |Wenn |WEN - |Và |Ve |Und |Un |Thì |Then y'all |Then |Tapi |Tak |Tada |Tad |Så |Stel |Soit |Siis |Si |Sed |Se - |Quando |Quand |Quan |Pryd |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O - zaman |Når |När |Niin |Nhưng |N |Mutta |Men |Mas |Maka |Mając |Majd |Mais |Maar |Ma |Lorsque - |Lorsqu'|Let go and haul |Kun |Kuid |Kui |Khi |Keď |Ketika |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli - |Ja |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben sei |Gangway! - |Fakat |Eğer ki |Etant donnés |Etant données |Etant donnée |Etant donné |Et |Então |Entonces |Entao - |En |Ef |Eeldades |E |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Dengan |Den youse gotta - |De |Dați fiind |Daţi fiind |Dato |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann - |Dan |Dados |Dado |Dadas |Dada |DEN |Când |Cuando |Cho |Cept |Cand |Cal |But y'all |But |Buh - |Blimey! |Biết |Bet |BUT |Aye |Avast! |Atès |Atunci |Atesa |Anrhegedig a |Angenommen |And y'all |And - |An |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Adott |Aber |AN |A - také |A |\* ) - - - feature_element_keyword - - captures - - 1 - - name - keyword.language.gherkin.feature.scenario - - 2 - - name - string.language.gherkin.scenario.title.title - - - match - ^\s*(예|시나리오 - 개요|시나리오|배경|背景|場景大綱|場景|场景大纲|场景|劇本大綱|劇本|例子|例|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|シナリオ|サンプル|سيناريو - مخطط|سيناريو|امثلة|الخلفية|תרחיש|תבנית תרחיש|רקע|דוגמאות|Тарих|Сценарій|Сценарији|Сценарио|Сценарий - структураси|Сценарий|Структура сценарію|Структура сценарија|Структура сценария|Скица|Рамка на - сценарий|Примеры|Примери|Пример|Приклади|Предыстория|Предистория|Позадина|Передумова|Основа|Мисоллар|Концепт|Контекст|Örnekler|Założenia|Yo-ho-ho|Wharrimean - is|Voorbeelden|Variantai|Tình huống|The thing of it - is|Tausta|Taust|Tapausaihio|Tapaus|Tapaukset|Szenariogrundriss|Szenario|Szablon - scenariusza|Stsenaarium|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario - konsep|Skenario|Situācija|Shiver me timbers|Senaryo taslağı|Senaryo|Scénář|Scénario|Schema dello - scenario|Scenārijs pēc - parauga|Scenārijs|Scenár|Scenaro|Scenariusz|Scenariu|Scenarios|Scenariomall|Scenariomal|Scenario - Template|Scenario Outline|Scenario Amlinellol|Scenario|Scenarijus|Scenariji|Scenarijaus - šablonas|Scenarijai|Scenarij|Scenarie|Rerefons|Raamstsenaarium|Příklady|Példák|Príklady|Przykłady|Primjeri|Primeri|Primer|Pozadí|Pozadina|Pozadie|Plang - vum Szenario|Plan du scénario|Plan du Scénario|Piemēri|Pavyzdžiai|Paraugs|Osnova - scénáře|Osnova|Náčrt Scénáře|Náčrt Scenáru|Mate|MISHUN SRSLY|MISHUN|Lýsing Dæma|Lýsing - Atburðarásar|Kịch bản|Konturo de la scenaro|Kontext|Konteksts|Kontekstas|Kontekst|Koncept|Khung tình - huống|Khung kịch bản|Juhtumid|Háttér|Heave to|Hannergrond|Grundlage|Geçmiş|Forgatókönyv - vázlat|Forgatókönyv|Fono|Exemplos|Exemples|Exemple|Exempel|Examples|Esquema do Cenário|Esquema do - Cenario|Esquema del escenario|Esquema de - l'escenari|Esempi|Escenario|Escenari|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|EXAMPLZ|Dữ - liệu|Dæmi|Dis is what went down|Dead men tell no - tales|Dasar|Contoh|Contexto|Contexte|Context|Contesto|Cobber|Cenário|Cenario|Cefndir|Bối - cảnh|Blokes|Beispiller|Beispiele|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Atburðarásir|Atburðarás|Antecedents|Antecedentes|All - y'all|Achtergrond|Abstrakt Scenario|Abstract Scenario):(.*) - - - scenario_outline_variable - - begin - < - end - > - name - variable.other - - strings_double_quote - - begin - " - end - " - name - string.quoted.double - patterns - - - match - \\. - name - constant.character.escape.untitled - - - - strings_single_quote - - begin - (?<![a-zA-Z"])' - end - '(?![a-zA-Z]) - name - string.quoted.single - patterns - - - match - \\. - name - constant.character.escape - - - - strings_triple_quote - - begin - """ - end - """ - name - string.quoted.single - - tags - - captures - - 0 - - name - storage.type.tag.cucumber - - - match - (@[^@\r\n\t ]+) - - - scopeName - text.gherkin.feature - uuid - 85E2C52C-9B16-4A54-81E7-6D8D3ADAEFA8 - - diff --git a/vscode/javascript/tsconfig.build.json b/vscode/javascript/tsconfig.build.json deleted file mode 100644 index 98f530f48a3..00000000000 --- a/vscode/javascript/tsconfig.build.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "rootDir": ".", - "outDir": "dist" - }, - "include": [ - "package.json", - "src", - "test" - ] -} diff --git a/vscode/javascript/tsconfig.json b/vscode/javascript/tsconfig.json deleted file mode 100644 index 4082f16a5d9..00000000000 --- a/vscode/javascript/tsconfig.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "../../tsconfig.json" -} diff --git a/vscode/javascript/vsc-extension-quickstart.md b/vscode/javascript/vsc-extension-quickstart.md deleted file mode 100644 index b510bff34d1..00000000000 --- a/vscode/javascript/vsc-extension-quickstart.md +++ /dev/null @@ -1,42 +0,0 @@ -# Welcome to your VS Code Extension - -## What's in the folder - -* This folder contains all of the files necessary for your extension. -* `package.json` - this is the manifest file in which you declare your extension and command. - * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. -* `src/extension.ts` - this is the main file where you will provide the implementation of your command. - * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. - * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. - -## Get up and running straight away - -* Press `F5` to open a new window with your extension loaded. -* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. -* Set breakpoints in your code inside `src/extension.ts` to debug your extension. -* Find output from your extension in the debug console. - -## Make changes - -* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. -* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. - - -## Explore the API - -* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. - -## Run tests - -* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. -* Press `F5` to run the tests in a new window with your extension loaded. -* See the output of the test result in the debug console. -* Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. - * The provided test runner will only consider files matching the name pattern `**.test.ts`. - * You can create folders inside the `test` folder to structure your tests any way you want. - -## Go further - - * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). - * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. - * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration).